@incodetech/core 2.4.0 → 2.4.1-agentic.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BrowserNetworkStatusProvider-BrDXBEDd.esm.js +21 -0
- package/dist/{multipartRecordingService-CLwrF5wD.esm.js → CameraCompositor-DN7NkJzV.esm.js} +7 -744
- package/dist/{FaceDetectionProvider-DcPOC2gS.esm.js → FaceDetectionProvider-CAY43vSI.esm.js} +28 -64
- package/dist/IBrowserEnvironmentCapability-D7JG7ML3.esm.js +16 -0
- package/dist/IGeolocationCapability-r49Qo7rR.d.ts +10 -0
- package/dist/{IWasmUtilCapability-GF2n7sfm.d.ts → IWasmUtilCapability-Cqiaxydi.d.ts} +31 -4
- package/dist/MultipartRecordingProvider-D9mauUdS.esm.js +146 -0
- package/dist/{PhoneValidationProvider-SZiOS0jB.esm.js → PhoneValidationProvider-Co4zk2en.esm.js} +7 -0
- package/dist/{StreamCanvasCapture-7JRf-2ck.d.ts → StreamCanvasCapture-C3xNfOsv.d.ts} +12 -3
- package/dist/StreamCanvasProcessingSession-CBnbTnOr.esm.js +42 -0
- package/dist/{WasmUtilProvider-DtJuBdt-.esm.js → WasmUtilProvider-Dp2V-Uct.esm.js} +75 -22
- package/dist/WorkerEncoderRecordingProvider-B1ODYtgN.esm.js +80 -0
- package/dist/addressSearch-DzbE9Ogt.esm.js +254 -0
- package/dist/{advanceableErrors-q_pfU3Cn.esm.js → advanceableErrors-k-U-cL5m.esm.js} +1 -2
- package/dist/ae-signature.esm.js +1 -1
- package/dist/antifraud.esm.js +2 -2
- package/dist/{antifraudManager-CaweCYnY.esm.js → antifraudManager-BObuHBjn.esm.js} +2 -2
- package/dist/{antifraudStateMachine-DRl0UVyA.esm.js → antifraudStateMachine-Dfrd2-26.esm.js} +1 -1
- package/dist/{api-Cz90EHyu.esm.js → api-CpP4PS4S.esm.js} +8 -5
- package/dist/{apiError-DPwFas2f.esm.js → apiError-DH-CH4Nz.esm.js} +1 -1
- package/dist/attemptCarry-WOkfvFMw.esm.js +45 -0
- package/dist/authentication.d.ts +3 -3
- package/dist/authentication.esm.js +2 -2
- package/dist/{authenticationManager-BIZC55Bi.d.ts → authenticationManager-CWmh7aSY.d.ts} +1 -1
- package/dist/{authenticationManager-2Lr5V_7p.esm.js → authenticationManager-DjX0XDyH.esm.js} +5 -5
- package/dist/{authenticationStateMachine-C99B0GFP.esm.js → authenticationStateMachine-BMbZL8wm.esm.js} +3 -3
- package/dist/backCameraLabel-yda5ugE4.esm.js +67 -0
- package/dist/{backCameraStream-CMvXj4X4.esm.js → backCameraStream-DS1oDiUq.esm.js} +12 -107
- package/dist/{browser-DlFgHpoC-DnyrCR8r.esm.js → browser-pQZA35G2-DtkAf6sn.esm.js} +161 -150
- package/dist/{camera-sIa9ceW2.esm.js → camera-E_Kcre4O.esm.js} +15 -23
- package/dist/camera.d.ts +2 -2
- package/dist/camera.esm.js +1 -1
- package/dist/certificate-issuance.esm.js +2 -2
- package/dist/{certificateIssuanceManager-BfeMv2PU.esm.js → certificateIssuanceManager-C1nETQos.esm.js} +2 -2
- package/dist/{certificateIssuanceStateMachine-Frgjbjw8.esm.js → certificateIssuanceStateMachine-DThXMDqr.esm.js} +2 -2
- package/dist/cnpj-Co1ottYN.esm.js +77 -0
- package/dist/connectivity-BCuEoQ-n.esm.js +114 -0
- package/dist/consent.d.ts +1 -1
- package/dist/consent.esm.js +2 -2
- package/dist/{consentManager-CvEu8h_W.esm.js → consentManager-DMlSL6Ax.esm.js} +4 -3
- package/dist/{consentManager-Cv_0QKLD.d.ts → consentManager-bjfVXO7p.d.ts} +9 -2
- package/dist/{consentStateMachine-DJTgN_-1.esm.js → consentStateMachine-DIYSMxKQ.esm.js} +20 -7
- package/dist/cross-document-data-match.esm.js +1 -1
- package/dist/{crossDocumentDataMatchManager-Cu141CE8.esm.js → crossDocumentDataMatchManager-BFTdiEDB.esm.js} +2 -2
- package/dist/curp-validation.d.ts +1 -1
- package/dist/curp-validation.esm.js +2 -2
- package/dist/{curpValidationManager-B-z9q5V3.esm.js → curpValidationManager-DNpC3wyf.esm.js} +3 -2
- package/dist/{curpValidationManager-C9sqoh9n.d.ts → curpValidationManager-z8428oCM.d.ts} +1 -1
- package/dist/{curpValidationStateMachine-vDEFLMPw.esm.js → curpValidationStateMachine-B3iVsDyt.esm.js} +28 -20
- package/dist/custom-fields.esm.js +1 -1
- package/dist/custom-watchlist.esm.js +2 -2
- package/dist/{customFieldsManager-D1ex2cFM.esm.js → customFieldsManager-CvI-pDT3.esm.js} +2 -2
- package/dist/{customWatchlistManager-CTI-SGk0.esm.js → customWatchlistManager-BuHtUb0y.esm.js} +2 -2
- package/dist/{customWatchlistStateMachine-hmRd0f2I.esm.js → customWatchlistStateMachine-CiVD9wyF.esm.js} +1 -1
- package/dist/{deepsightService-CKTYDIXD.esm.js → deepsightLoader-B7DEYoyY.esm.js} +40 -74
- package/dist/{createCameraCycleOwnership-Dj_LHUvN.esm.js → desktopCameraElection-BGMtYwk3.esm.js} +177 -40
- package/dist/device.esm.js +2 -2
- package/dist/document-capture.d.ts +3 -3
- package/dist/document-capture.esm.js +2 -2
- package/dist/{documentCaptureManager-DkyDtm3Y.d.ts → documentCaptureManager-CD5iQiUI.d.ts} +37 -4
- package/dist/{documentCaptureManager-DUJwpKC5.esm.js → documentCaptureManager-DLPqruXJ.esm.js} +27 -19
- package/dist/{documentCaptureStateMachine-B8i7GnLh.esm.js → documentCaptureStateMachine-DCvWQhFG.esm.js} +105 -56
- package/dist/dynamic-forms.d.ts +2 -2
- package/dist/dynamic-forms.esm.js +2 -2
- package/dist/{dynamicFormsManager-C0dHs1ty.d.ts → dynamicFormsManager-9kwY8Bf5.d.ts} +1 -1
- package/dist/{dynamicFormsManager-DiKYjcF3.esm.js → dynamicFormsManager-DfqCEPg9.esm.js} +2 -2
- package/dist/{dynamicFormsStateMachine-DEI45xYW.esm.js → dynamicFormsStateMachine-USQMB-uV.esm.js} +2 -2
- package/dist/ekyb.d.ts +4 -4
- package/dist/ekyb.esm.js +3 -3
- package/dist/{ekybManager-BaZ_7CEu.d.ts → ekybManager-BLOkwmWO.d.ts} +2 -2
- package/dist/{ekybManager-8WLkNcqg.esm.js → ekybManager-CR8YSYux.esm.js} +2 -2
- package/dist/{ekybStateMachine-BLRT45Ex.esm.js → ekybStateMachine-kHwdz6hm.esm.js} +28 -44
- package/dist/ekybUtils-Cw8Ta9Qi.esm.js +140 -0
- package/dist/ekyc.d.ts +4 -3
- package/dist/ekyc.esm.js +3 -3
- package/dist/{ekycManager-DW-ynodd.d.ts → ekycManager-DlGIn9wA.d.ts} +2 -1
- package/dist/{ekycManager-BO-Lui3t.esm.js → ekycManager-DymCvmVB.esm.js} +2 -2
- package/dist/ekycStateMachine-CoFCUJ2z.esm.js +7578 -0
- package/dist/ekycUtils-GRuMELYr.esm.js +1472 -0
- package/dist/electronic-signature.esm.js +1 -1
- package/dist/{electronicSignatureManager-CcIMOb_Y.esm.js → electronicSignatureManager-BCE3uA3z.esm.js} +4 -4
- package/dist/email.esm.js +2 -2
- package/dist/{emailManager-ButFktRm.esm.js → emailManager-CGoE3CUe.esm.js} +2 -2
- package/dist/{emailStateMachine-BXtlC0NV.esm.js → emailStateMachine-KgHfDNvM.esm.js} +32 -20
- package/dist/{events-Du2A4-Qr.esm.js → events-ggpBBaZ8.esm.js} +2 -2
- package/dist/events.esm.js +1 -1
- package/dist/extensibility.d.ts +37 -22
- package/dist/extensibility.esm.js +36 -35
- package/dist/{externalFetch-DrR9xshk.esm.js → externalFetch-CQY41QT1.esm.js} +4 -1
- package/dist/face-match.d.ts +1 -1
- package/dist/face-match.esm.js +2 -2
- package/dist/{faceCaptureManagerFactory-1hzeS_rB.d.ts → faceCaptureManagerFactory-DV2ULUYS.d.ts} +71 -66
- package/dist/{faceCaptureManagerFactory-BlGvXzXA.esm.js → faceCaptureManagerFactory-Dp90bedH.esm.js} +4 -4
- package/dist/{faceCaptureSetup-TY8RXc2N.esm.js → faceCaptureSetup-ZfiWg0fo.esm.js} +84 -457
- package/dist/{faceMatchManager-DWFUQjMQ.esm.js → faceMatchManager-D2xKPjjQ.esm.js} +2 -2
- package/dist/{faceMatchManager-DIgG-UFS.d.ts → faceMatchManager-Z4UDLwAv.d.ts} +16 -7
- package/dist/{faceMatchStateMachine-CUCvlydD.esm.js → faceMatchStateMachine-CUvwiQi9.esm.js} +40 -27
- package/dist/{feature-management-B5rR10uS.esm.js → feature-management-BbCIA4og.esm.js} +35 -21
- package/dist/feature-management.esm.js +1 -1
- package/dist/field-comparison.esm.js +1 -1
- package/dist/{fieldComparisonManager-v3knTYV_.esm.js → fieldComparisonManager-DgDbEeFZ.esm.js} +2 -2
- package/dist/fiscal-qr.esm.js +1 -1
- package/dist/{fiscalQrManager-Dt9fHG7h.esm.js → fiscalQrManager-BZeklojR.esm.js} +4 -4
- package/dist/flow-events.d.ts +1 -1
- package/dist/flow.d.ts +10 -10
- package/dist/flow.esm.js +10 -9
- package/dist/{flowCompletionService-BDI5QpfR.esm.js → flowCompletionService-CcCnPs_T.esm.js} +2 -2
- package/dist/{flowServices-roD0oIQL.esm.js → flowServices-Dmnc8Rye.esm.js} +69 -185
- package/dist/geolocation.d.ts +1 -1
- package/dist/geolocation.esm.js +2 -2
- package/dist/{geolocationManager-Dn24g1fl.d.ts → geolocationManager-6e1i9UIR.d.ts} +15 -17
- package/dist/{geolocationManager-DnONzWL5.esm.js → geolocationManager-BJJ3m_I8.esm.js} +6 -8
- package/dist/{geolocationStateMachine-eWy_G4Os.esm.js → geolocationStateMachine-CTI3m4Ie.esm.js} +12 -8
- package/dist/{getDeviceClass-bsWdEDxP.esm.js → getDeviceClass-DoIWuKI8.esm.js} +1 -1
- package/dist/government-validation.esm.js +2 -2
- package/dist/{governmentValidationManager-BtXWHICu.esm.js → governmentValidationManager-CjChjZ3C.esm.js} +2 -2
- package/dist/{governmentValidationStateMachine-COL-Vs48.esm.js → governmentValidationStateMachine-AEbn3Afi.esm.js} +1 -1
- package/dist/home.d.ts +1 -1
- package/dist/home.esm.js +1 -1
- package/dist/http.esm.js +1 -1
- package/dist/id-ocr.d.ts +1 -1
- package/dist/id-ocr.esm.js +2 -2
- package/dist/id-selfie-flow.d.ts +1 -1
- package/dist/id-selfie-flow.esm.js +10 -9
- package/dist/id-verification.esm.js +2 -2
- package/dist/id.d.ts +3 -16
- package/dist/id.esm.js +4 -4
- package/dist/{idCaptureDefaults-BGsG2OAs.esm.js → idCaptureDefaults-Dszuq9ng.esm.js} +3 -3
- package/dist/{idCaptureManager-BrfYjCm_.esm.js → idCaptureManager-B3oR4RnA.esm.js} +64 -17
- package/dist/{idCaptureManager-0M02hSuC.d.ts → idCaptureManager-CCA2D1Ah.d.ts} +68 -5
- package/dist/{idCaptureServices-BSj6EH2l.esm.js → idCaptureServices-DK0QboqT.esm.js} +29 -198
- package/dist/{idCaptureStateMachine-dXKBYHQp.esm.js → idCaptureStateMachine-zzar9MPy.esm.js} +914 -536
- package/dist/{idOcrManager-DT3kPIB3.d.ts → idOcrManager-BTdHlJ9D.d.ts} +1 -1
- package/dist/{idOcrManager-D3-HNMXP.esm.js → idOcrManager-xyEZNOBa.esm.js} +2 -2
- package/dist/{idOcrStateMachine-DyENX6Ki.esm.js → idOcrStateMachine-DNKXh4Rn.esm.js} +2 -2
- package/dist/{idVerificationManager-iWz7Avkr.esm.js → idVerificationManager-DdnvYfgN.esm.js} +2 -2
- package/dist/{idVerificationStateMachine-CL1kUdBe.esm.js → idVerificationStateMachine-DtIBCa32.esm.js} +1 -1
- package/dist/identity-reuse.esm.js +2 -2
- package/dist/{identityReuseManager-CD1ucp1d.esm.js → identityReuseManager-CcpovlfD.esm.js} +2 -2
- package/dist/{identityReuseStateMachine-DfV81wQC.esm.js → identityReuseStateMachine-DxZFWy47.esm.js} +1 -1
- package/dist/{index-CKQ9QBZP.d.ts → index-DC0P2Vzw.d.ts} +1 -1
- package/dist/{index-BKOWUhxG.d.ts → index-DEfwds5y.d.ts} +55 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/{invokeOnCaptureCallback-DYrkOXO6.esm.js → invokeOnCaptureCallback-BJ0GVHGr.esm.js} +1 -1
- package/dist/kyb-checks.d.ts +3 -0
- package/dist/kyb-checks.esm.js +3 -0
- package/dist/kybChecksManager-CblEL97E.d.ts +95 -0
- package/dist/kybChecksManager-DpGOp4Su.esm.js +89 -0
- package/dist/kybChecksStateMachine-B43NAnv7.esm.js +718 -0
- package/dist/mandatory-consent.d.ts +2 -2
- package/dist/mandatory-consent.esm.js +2 -2
- package/dist/{mandatoryConsentManager-Cwqx1nK7.esm.js → mandatoryConsentManager-B4vCYslr.esm.js} +4 -3
- package/dist/{mandatoryConsentManager-BQ43yndC.d.ts → mandatoryConsentManager-B88Sm5nd.d.ts} +10 -3
- package/dist/{mandatoryConsentStateMachine-pXWqAHo_.esm.js → mandatoryConsentStateMachine-DWslYPA3.esm.js} +20 -7
- package/dist/mediaRecorderOptions-B9-IEVtV.esm.js +70 -0
- package/dist/multipartRecordingService-BTqkHGG9.esm.js +407 -0
- package/dist/nationalIds-B91f_RuB.esm.js +99 -0
- package/dist/{permissionGuards-gcy3U0SL.esm.js → permissionGuards-DFV-Ws0a.esm.js} +1 -1
- package/dist/{permissionServices-Ca-tSNhT.esm.js → permissionServices-D190ATGD.esm.js} +11 -9
- package/dist/phone-number.d.ts +7 -1
- package/dist/phone-number.esm.js +15 -2
- package/dist/phone.d.ts +1 -1
- package/dist/phone.esm.js +2 -2
- package/dist/phoneFormat-JJNaWthV.esm.js +75 -0
- package/dist/{phoneManager-BO-LTih5.d.ts → phoneManager-6nrJkvkG.d.ts} +5 -0
- package/dist/{phoneManager-KKUq-Vgo.esm.js → phoneManager-Dy5tODCU.esm.js} +3 -3
- package/dist/phoneServices-DJgyOzU2.esm.js +77 -0
- package/dist/{phoneStateMachine-D2QWS2cu.esm.js → phoneStateMachine-DnlPhnw7.esm.js} +54 -82
- package/dist/{phoneValidation-DnBcNUNh.esm.js → phoneValidation-OggtfjRt.esm.js} +1 -2
- package/dist/{platform-DkcRc9JV.esm.js → platform-aPh7gTWh.esm.js} +15 -1
- package/dist/processFaceMatch-Bst83HaS.esm.js +21 -0
- package/dist/qe-signature.esm.js +1 -1
- package/dist/recordingService-CTko6Cjn.esm.js +397 -0
- package/dist/redirect-to-mobile.d.ts +2 -2
- package/dist/redirect-to-mobile.esm.js +2 -2
- package/dist/{redirectToMobileManager-uHW3dyuQ.esm.js → redirectToMobileManager-CgGaT2NP.esm.js} +5 -4
- package/dist/{redirectToMobileManager-CVsvpVbQ.d.ts → redirectToMobileManager-Dm9ctRCC.d.ts} +3 -1
- package/dist/{redirectToMobileStateMachine-b-H-ipGM.esm.js → redirectToMobileStateMachine-CbhN8uVN.esm.js} +65 -26
- package/dist/resolveForm-O7-r79VA.esm.js +351 -0
- package/dist/{runChildModule-BF_atgNx.esm.js → runChildModule-BffFArwl.esm.js} +3 -3
- package/dist/{sdkVersion-CsIbltJF.esm.js → sdkVersion-CDd_gaR7.esm.js} +1 -1
- package/dist/selfie.d.ts +4 -4
- package/dist/selfie.esm.js +10 -10
- package/dist/{selfieErrorUtils-BY0-YbPW.esm.js → selfieErrorUtils-f4MgAG2A.esm.js} +1 -1
- package/dist/{selfieManager-BJdNu_nd.d.ts → selfieManager-DmZFzs1-.d.ts} +1 -1
- package/dist/{selfieManager-vAAwzsHk.esm.js → selfieManager-hopelYEk.esm.js} +5 -5
- package/dist/{selfieStateMachine-BFVp3ElQ.esm.js → selfieStateMachine-DaZIVv3Q.esm.js} +3 -3
- package/dist/{session-CpwfoVdH.esm.js → session-CdSX4wsZ.esm.js} +77 -9
- package/dist/session.d.ts +96 -10
- package/dist/session.esm.js +7 -6
- package/dist/{sessionInitializer-BTjYgE-V.esm.js → sessionInitializer-DsL7X2j9.esm.js} +465 -206
- package/dist/{setup-YPKTUCY5.d.ts → setup-D9qt8YVU.d.ts} +2 -2
- package/dist/{setup-BInNAvQw.esm.js → setup-DDahygZs.esm.js} +44 -30
- package/dist/signature.esm.js +2 -2
- package/dist/{signatureManager-f_dPAGXn.esm.js → signatureManager-CwqjcxPg.esm.js} +2 -2
- package/dist/{signatureStateMachine-C-nUq_oq.esm.js → signatureStateMachine-DBVDd1Eu.esm.js} +1 -1
- package/dist/{stats-BEvexnKC.esm.js → stats-CatA2dea.esm.js} +1 -1
- package/dist/stats.esm.js +1 -1
- package/dist/textRules-D4NRinKY.d.ts +41 -0
- package/dist/{tri-xzRLIIMN.esm.js → tri-DG6priFa.esm.js} +142 -8
- package/dist/tri.d.ts +1 -1
- package/dist/tri.esm-CzTNi5Q_.esm.js +3826 -0
- package/dist/tri.esm.js +1 -1
- package/dist/{trueSightService-BMT-TubT.esm.js → trueSightService-GuLthUVK.esm.js} +19 -10
- package/dist/trust-graph.esm.js +1 -1
- package/dist/types-B9C8W01q.d.ts +34 -0
- package/dist/{types-yPH8lAH-.d.ts → types-BEVHQbbC.d.ts} +2 -2
- package/dist/{types-BAxn7MpY.d.ts → types-BPm1JSu7.d.ts} +123 -48
- package/dist/{types-0L-eFDmr.d.ts → types-BgRHw-dR.d.ts} +1 -1
- package/dist/{types-B6HsSzpk.d.ts → types-CRaFu6wS.d.ts} +6 -3
- package/dist/types-CTaL0XJz.d.ts +80 -0
- package/dist/{types-Ckir_BEs.d.ts → types-Cd0J0F9D.d.ts} +1 -1
- package/dist/{types-CK8Jbjkp.d.ts → types-Csh8vzPo.d.ts} +1 -1
- package/dist/types-CuMJ2M7D.d.ts +210 -0
- package/dist/{types-DUnFZ08M.d.ts → types-CyNndVAT.d.ts} +16 -8
- package/dist/{types-DPIDuhut.d.ts → types-DNVzoRvi.d.ts} +2 -1
- package/dist/types-J6g6iKe_.d.ts +6 -0
- package/dist/{urlUtils-6jsE6rKp.esm.js → urlUtils-eYiyWjh0.esm.js} +4 -1
- package/dist/video-selfie.d.ts +8 -8
- package/dist/video-selfie.esm.js +97 -22
- package/dist/{videoSelfieCameraWarmer-D1xA0u8y.esm.js → videoSelfieCameraWarmer-e3irGfcO.esm.js} +18 -21
- package/dist/{videoSelfieStepDetector-CGsTltqB.d.ts → videoSelfieStepDetector-Dv3Mgws-.d.ts} +9 -4
- package/dist/virtualCameraCheck-eFOm2C9q.esm.js +27 -0
- package/dist/{warmup-BElYWRh7.esm.js → warmup-DtB0DJpl.esm.js} +198 -27
- package/dist/wasm.d.ts +2 -2
- package/dist/wasm.esm.js +3 -3
- package/dist/{wasmDsFlagSync-CYj5LL9z.esm.js → wasmDsFlagSync-BtiR5pig.esm.js} +1 -1
- package/dist/wasmMetadataVersionSync-U8EFUr1T.esm.js +27 -0
- package/dist/{wasmWebClient-BjZw_7OB.esm.js → wasmWebClient-BDrax6Eu.esm.js} +55 -26
- package/dist/watchlist-for-business.d.ts +2 -1
- package/dist/watchlist-for-business.esm.js +2 -2
- package/dist/watchlist.esm.js +2 -2
- package/dist/{watchlistForBusinessManager-B3GDPZrr.d.ts → watchlistForBusinessManager-DX2AyM4Y.d.ts} +54 -18
- package/dist/{watchlistForBusinessManager-CZZOFkGl.esm.js → watchlistForBusinessManager-DqUpAEj_.esm.js} +37 -7
- package/dist/watchlistForBusinessStateMachine-DdaPl2PS.esm.js +166 -0
- package/dist/{watchlistManager-DXtX94SN.esm.js → watchlistManager-CdpXzT4B.esm.js} +2 -2
- package/dist/{watchlistStateMachine-McALifag.esm.js → watchlistStateMachine-ofHW_lPk.esm.js} +1 -1
- package/dist/workflow.d.ts +5 -2
- package/dist/workflow.esm.js +60 -50
- package/package.json +12 -5
- package/dist/IBrowserEnvironmentCapability-DEaRRk-R.esm.js +0 -9
- package/dist/addressSearch-DPjIKJrX.esm.js +0 -563
- package/dist/deepsightLoader-DeNvGU3c.esm.js +0 -55
- package/dist/ekycStateMachine-CDnI_NRq.esm.js +0 -1443
- package/dist/ekycUtils-zY8CdKJL.esm.js +0 -300
- package/dist/thumbmark.esm-CRc0cYvz.esm.js +0 -1242
- package/dist/tri.esm-BIjHhBJ2.esm.js +0 -2620
- package/dist/types-BvLo3U4u.d.ts +0 -134
- package/dist/types-zOgZqMni.d.ts +0 -6
- package/dist/watchlistForBusinessStateMachine-B66E7jud.esm.js +0 -78
- /package/dist/{types-BSBzhHRH2.d.ts → types-BSBzhHRH.d.ts} +0 -0
|
@@ -1,23 +1,123 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { C as
|
|
4
|
-
import { t as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { n as getTimestamp } from "./IBrowserEnvironmentCapability-D7JG7ML3.esm.js";
|
|
2
|
+
import { n as setWasmMetadataV2Enabled } from "./wasmMetadataVersionSync-U8EFUr1T.esm.js";
|
|
3
|
+
import { C as subscribeEvent, b as getAnalyticsBatcher, y as addEvent } from "./events-ggpBBaZ8.esm.js";
|
|
4
|
+
import { c as setToken, r as getToken, t as api, u as endpoints } from "./api-CpP4PS4S.esm.js";
|
|
5
|
+
import { C as noteTokenActivated, _ as isFeatureEnabled, b as noteEnvironment, c as startTrueSightCollection, g as fetchFeatureConfig, u as trueSightLog, v as resetFeatureConfigCache } from "./trueSightService-GuLthUVK.esm.js";
|
|
6
|
+
import { t as SDK_VERSION } from "./sdkVersion-CDd_gaR7.esm.js";
|
|
7
|
+
import { t as BrowserTimerProvider } from "./BrowserTimerProvider-BXhgNxLt.esm.js";
|
|
8
|
+
import { E as updateFeatureManagementUser } from "./feature-management-BbCIA4og.esm.js";
|
|
9
|
+
import { n as flushDeviceStatsQueue, r as resetDeviceStatsQueue } from "./stats-CatA2dea.esm.js";
|
|
7
10
|
import { t as getParsedUserAgent } from "./getParsedUserAgent-DhQPeKqw.esm.js";
|
|
8
|
-
import {
|
|
9
|
-
import { a as isIOS } from "./platform-DkcRc9JV.esm.js";
|
|
11
|
+
import { a as isIOS } from "./platform-aPh7gTWh.esm.js";
|
|
10
12
|
import { t as getUserAgent } from "./getBrowser-CBiibsL-.esm.js";
|
|
11
|
-
import {
|
|
13
|
+
import { a as linkSessionWithTRI, i as isTRIStarted, o as readTRIFpSignals } from "./tri-DG6priFa.esm.js";
|
|
14
|
+
import { i as retryAfterReconnect } from "./connectivity-BCuEoQ-n.esm.js";
|
|
15
|
+
//#region src/internal/version/sdkPlatform.ts
|
|
16
|
+
/**
|
|
17
|
+
* The platform SDK 2 reports to the backend: the device fingerprint post's
|
|
18
|
+
* `deviceType`, and the SDK platform the WASM module stamps on capture
|
|
19
|
+
* metadata and fingerprint signals. Keep them in one place so they agree.
|
|
20
|
+
*/
|
|
21
|
+
const SDK_PLATFORM = "WEBAPP";
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/internal/fingerprint/incodeDeviceHash.ts
|
|
24
|
+
function isNonEmptyString(value) {
|
|
25
|
+
return typeof value === "string" && value.trim() !== "";
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Reads the device hash from a PID signal response. The SDK never pairs a
|
|
29
|
+
* hash with an algorithm user-service didn't name, so all three fields must be
|
|
30
|
+
* present.
|
|
31
|
+
*/
|
|
32
|
+
function readIncodeDeviceHash(data) {
|
|
33
|
+
if (typeof data !== "object" || data === null) return null;
|
|
34
|
+
const { deviceHash, algorithmName, algorithmVersion } = data;
|
|
35
|
+
if (!isNonEmptyString(deviceHash) || !isNonEmptyString(algorithmName) || !isNonEmptyString(algorithmVersion)) return null;
|
|
36
|
+
return {
|
|
37
|
+
hash: deviceHash,
|
|
38
|
+
algorithmName,
|
|
39
|
+
algorithmVersion
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function createIncodeDeviceHashWaiter(timer) {
|
|
43
|
+
const pendingByToken = /* @__PURE__ */ new Map();
|
|
44
|
+
function pendingFor(token) {
|
|
45
|
+
let pending = pendingByToken.get(token);
|
|
46
|
+
if (!pending) {
|
|
47
|
+
let settle = () => void 0;
|
|
48
|
+
const deviceHash = new Promise((resolve) => {
|
|
49
|
+
settle = resolve;
|
|
50
|
+
});
|
|
51
|
+
let release = () => void 0;
|
|
52
|
+
const released = new Promise((resolve) => {
|
|
53
|
+
release = () => resolve(null);
|
|
54
|
+
});
|
|
55
|
+
pending = {
|
|
56
|
+
deviceHash,
|
|
57
|
+
settle,
|
|
58
|
+
released,
|
|
59
|
+
release
|
|
60
|
+
};
|
|
61
|
+
pendingByToken.set(token, pending);
|
|
62
|
+
}
|
|
63
|
+
return pending;
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
settle(token, deviceHash) {
|
|
67
|
+
pendingFor(token).settle(deviceHash);
|
|
68
|
+
},
|
|
69
|
+
release(token) {
|
|
70
|
+
pendingFor(token).release();
|
|
71
|
+
},
|
|
72
|
+
async waitFor(token, timeoutMs) {
|
|
73
|
+
let timeout;
|
|
74
|
+
const timedOut = new Promise((resolve) => {
|
|
75
|
+
timeout = timer.setTimeout(() => resolve(null), Math.max(0, timeoutMs));
|
|
76
|
+
});
|
|
77
|
+
const pending = pendingFor(token);
|
|
78
|
+
try {
|
|
79
|
+
return await Promise.race([
|
|
80
|
+
pending.deviceHash,
|
|
81
|
+
pending.released,
|
|
82
|
+
timedOut
|
|
83
|
+
]);
|
|
84
|
+
} finally {
|
|
85
|
+
if (timeout !== void 0) timer.clearTimeout(timeout);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
reset() {
|
|
89
|
+
pendingByToken.forEach((pending) => pending.settle(null));
|
|
90
|
+
pendingByToken.clear();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const incodeDeviceHashWaiter = createIncodeDeviceHashWaiter(BrowserTimerProvider.getInstance());
|
|
95
|
+
//#endregion
|
|
12
96
|
//#region src/internal/fingerprint/fingerprintSignalsReporter.ts
|
|
13
97
|
const START_INTERVIEW_EVENT = "modelLoadEnd";
|
|
14
98
|
const CAPTURE_INTERVIEW_EVENT = "captureAttemptFinished";
|
|
15
|
-
const START_SIGNALS = ["
|
|
99
|
+
const START_SIGNALS = ["device"];
|
|
100
|
+
const MAX_KEPT_SIGNALS = 20;
|
|
101
|
+
/**
|
|
102
|
+
* The native envelope reads the SDK platform and version, and the start batch
|
|
103
|
+
* goes out before any capture's Deepsight session has set them. A failure is
|
|
104
|
+
* rethrown under its own name, so TrueSight does not blame the read.
|
|
105
|
+
*/
|
|
106
|
+
function setSdkIdentity(wasmUtil) {
|
|
107
|
+
try {
|
|
108
|
+
wasmUtil.setSdkPlatform(SDK_PLATFORM);
|
|
109
|
+
wasmUtil.setSdkVersion(SDK_VERSION);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
112
|
+
throw new Error(`setting the SDK platform and version failed: ${message}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
16
115
|
function createFingerprintSignalsReporter(deps) {
|
|
17
116
|
let enabled = true;
|
|
18
117
|
let sessionActive = false;
|
|
19
118
|
let wasmReady = false;
|
|
20
119
|
let started = false;
|
|
120
|
+
let pidStarted = false;
|
|
21
121
|
let pendingStartSignals = START_SIGNALS;
|
|
22
122
|
let prefetchStarted = false;
|
|
23
123
|
let deviceDataUpdated = true;
|
|
@@ -26,6 +126,21 @@ function createFingerprintSignalsReporter(deps) {
|
|
|
26
126
|
let optInPending = false;
|
|
27
127
|
let queue = Promise.resolve();
|
|
28
128
|
let generation = 0;
|
|
129
|
+
let keptSignals = [];
|
|
130
|
+
let forward = null;
|
|
131
|
+
let forwardRefused = false;
|
|
132
|
+
function keepOrForward(metadata) {
|
|
133
|
+
if (forward) {
|
|
134
|
+
if (!forward(metadata)) {
|
|
135
|
+
forward = null;
|
|
136
|
+
forwardRefused = true;
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (forwardRefused) return;
|
|
141
|
+
keptSignals.push(metadata);
|
|
142
|
+
if (keptSignals.length > MAX_KEPT_SIGNALS) keptSignals.shift();
|
|
143
|
+
}
|
|
29
144
|
function enqueue(work) {
|
|
30
145
|
const scheduledGeneration = generation;
|
|
31
146
|
queue = queue.then(async () => {
|
|
@@ -34,13 +149,26 @@ function createFingerprintSignalsReporter(deps) {
|
|
|
34
149
|
});
|
|
35
150
|
}
|
|
36
151
|
async function send(token, interviewEvent, type) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
metadata
|
|
43
|
-
|
|
152
|
+
const isPid = type === "pid";
|
|
153
|
+
let deviceHash = null;
|
|
154
|
+
try {
|
|
155
|
+
const wasmUtil = await deps.getWasmUtil();
|
|
156
|
+
setSdkIdentity(wasmUtil);
|
|
157
|
+
const metadata = await wasmUtil.getFingerprintSignals(type);
|
|
158
|
+
if (!metadata || deps.getToken() !== token) return;
|
|
159
|
+
keepOrForward(metadata);
|
|
160
|
+
const response = await deps.post(endpoints.deviceFingerprintSignals, isPid ? {
|
|
161
|
+
interviewEvent,
|
|
162
|
+
metadata,
|
|
163
|
+
deviceHashRequested: true
|
|
164
|
+
} : {
|
|
165
|
+
interviewEvent,
|
|
166
|
+
metadata
|
|
167
|
+
}, { "X-Incode-Hardware-Id": token });
|
|
168
|
+
deviceHash = isPid && enabled ? readIncodeDeviceHash(response) : null;
|
|
169
|
+
} finally {
|
|
170
|
+
if (isPid) deps.onDeviceHash(token, deviceHash);
|
|
171
|
+
}
|
|
44
172
|
}
|
|
45
173
|
/**
|
|
46
174
|
* Sends `types` in order and stops at the first failure. Resolves to the
|
|
@@ -98,6 +226,7 @@ function createFingerprintSignalsReporter(deps) {
|
|
|
98
226
|
if (!token) return;
|
|
99
227
|
startPrefetch();
|
|
100
228
|
if (optInPending) enqueue(applyNativeOptIn);
|
|
229
|
+
startPid(token);
|
|
101
230
|
if (started || !sessionActive) return;
|
|
102
231
|
started = true;
|
|
103
232
|
ensureSubscribed();
|
|
@@ -117,6 +246,38 @@ function createFingerprintSignalsReporter(deps) {
|
|
|
117
246
|
if (unsent.length > 0) allowRetry(unsent);
|
|
118
247
|
});
|
|
119
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* PID goes ahead of activation: the activation post waits for the pid. It is
|
|
251
|
+
* queued before DEVICE, so it still precedes it.
|
|
252
|
+
*/
|
|
253
|
+
function startPid(token) {
|
|
254
|
+
if (pidStarted) return;
|
|
255
|
+
pidStarted = true;
|
|
256
|
+
const pidGeneration = generation;
|
|
257
|
+
enqueue(async () => {
|
|
258
|
+
if ((await sendAll(token, START_INTERVIEW_EVENT, ["pid"])).length > 0 && pidGeneration === generation) pidStarted = false;
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
/** Resolves the pid user-service returned for a host's PID, or `null`. */
|
|
262
|
+
async function postHostPid(token, readPid) {
|
|
263
|
+
try {
|
|
264
|
+
const metadata = await readPid();
|
|
265
|
+
if (!metadata || deps.getToken() !== token) return null;
|
|
266
|
+
const response = await deps.post(endpoints.deviceFingerprintSignals, {
|
|
267
|
+
interviewEvent: START_INTERVIEW_EVENT,
|
|
268
|
+
metadata,
|
|
269
|
+
deviceHashRequested: true
|
|
270
|
+
}, { "X-Incode-Hardware-Id": token });
|
|
271
|
+
return enabled ? readIncodeDeviceHash(response) : null;
|
|
272
|
+
} catch (error) {
|
|
273
|
+
deps.reportFailure({
|
|
274
|
+
message: error instanceof Error ? error.message : String(error),
|
|
275
|
+
signalsType: "pid",
|
|
276
|
+
interviewEvent: START_INTERVIEW_EVENT
|
|
277
|
+
});
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
120
281
|
function onCaptureAttemptFinished() {
|
|
121
282
|
wasmReady = true;
|
|
122
283
|
tryStart();
|
|
@@ -142,6 +303,7 @@ function createFingerprintSignalsReporter(deps) {
|
|
|
142
303
|
generation += 1;
|
|
143
304
|
sessionActive = false;
|
|
144
305
|
started = false;
|
|
306
|
+
pidStarted = false;
|
|
145
307
|
pendingStartSignals = START_SIGNALS;
|
|
146
308
|
optInPending = false;
|
|
147
309
|
deviceDataUpdated = true;
|
|
@@ -173,6 +335,32 @@ function createFingerprintSignalsReporter(deps) {
|
|
|
173
335
|
onCameraInfoUpdated() {
|
|
174
336
|
deviceDataUpdated = true;
|
|
175
337
|
},
|
|
338
|
+
sendHostPid(token, readPid) {
|
|
339
|
+
if (!enabled || pidStarted) return Promise.resolve(false);
|
|
340
|
+
pidStarted = true;
|
|
341
|
+
const pidGeneration = generation;
|
|
342
|
+
const sent = queue.then(async () => {
|
|
343
|
+
if (pidGeneration !== generation) return false;
|
|
344
|
+
const deviceHash = await postHostPid(token, readPid);
|
|
345
|
+
if (pidGeneration !== generation) return false;
|
|
346
|
+
if (deviceHash) {
|
|
347
|
+
deps.onDeviceHash(token, deviceHash);
|
|
348
|
+
return true;
|
|
349
|
+
}
|
|
350
|
+
pidStarted = false;
|
|
351
|
+
tryStart();
|
|
352
|
+
return false;
|
|
353
|
+
});
|
|
354
|
+
queue = sent.then(() => void 0);
|
|
355
|
+
return sent;
|
|
356
|
+
},
|
|
357
|
+
forwardTo(sink) {
|
|
358
|
+
forward = sink;
|
|
359
|
+
forwardRefused = false;
|
|
360
|
+
const kept = keptSignals;
|
|
361
|
+
keptSignals = [];
|
|
362
|
+
kept.forEach(keepOrForward);
|
|
363
|
+
},
|
|
176
364
|
resetSession,
|
|
177
365
|
reset() {
|
|
178
366
|
resetSession();
|
|
@@ -181,16 +369,19 @@ function createFingerprintSignalsReporter(deps) {
|
|
|
181
369
|
prefetchStarted = false;
|
|
182
370
|
unsubscribe?.();
|
|
183
371
|
unsubscribe = null;
|
|
372
|
+
keptSignals = [];
|
|
373
|
+
forward = null;
|
|
374
|
+
forwardRefused = false;
|
|
184
375
|
}
|
|
185
376
|
};
|
|
186
377
|
}
|
|
187
378
|
const fingerprintSignalsReporter = createFingerprintSignalsReporter({
|
|
188
379
|
getWasmUtil: async () => {
|
|
189
|
-
|
|
190
|
-
return WasmUtilProvider.getInstance();
|
|
380
|
+
return (await import("./WasmUtilProvider-Dp2V-Uct.esm.js").then((n) => n.n)).WasmUtilProvider.getInstance();
|
|
191
381
|
},
|
|
192
382
|
getToken: () => getToken(),
|
|
193
|
-
post: (url, body, headers) => api.post(url, body, { headers }),
|
|
383
|
+
post: async (url, body, headers) => (await api.post(url, body, { headers })).data,
|
|
384
|
+
onDeviceHash: (token, deviceHash) => incodeDeviceHashWaiter.settle(token, deviceHash),
|
|
194
385
|
subscribe: (listener) => subscribeEvent(listener),
|
|
195
386
|
reportFailure: ({ message, signalsType, interviewEvent }) => trueSightLog("warning", "wasm", "other", `fingerprint signals failed type=${signalsType} event=${interviewEvent} error=${message}`)
|
|
196
387
|
});
|
|
@@ -328,6 +519,55 @@ var BrowserInfoProvider = class {
|
|
|
328
519
|
}
|
|
329
520
|
};
|
|
330
521
|
//#endregion
|
|
522
|
+
//#region ../infra/src/providers/browser/IpifyProvider.ts
|
|
523
|
+
let cachedIp;
|
|
524
|
+
let inFlightLookup;
|
|
525
|
+
/**
|
|
526
|
+
* Resets the module-level IP cache. Intended for tests and full session resets.
|
|
527
|
+
*/
|
|
528
|
+
function resetIpifyCache() {
|
|
529
|
+
cachedIp = void 0;
|
|
530
|
+
inFlightLookup = void 0;
|
|
531
|
+
}
|
|
532
|
+
async function fetchIpFromIpify() {
|
|
533
|
+
if (typeof fetch === "undefined") return "";
|
|
534
|
+
let timeoutId = 0;
|
|
535
|
+
const controller = new AbortController();
|
|
536
|
+
if (AbortSignal.timeout) {
|
|
537
|
+
const signal = AbortSignal.timeout(3e3);
|
|
538
|
+
return (await (await fetch("https://api.ipify.org?format=json", { signal })).json()).ip;
|
|
539
|
+
}
|
|
540
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
541
|
+
timeoutId = setTimeout(() => {
|
|
542
|
+
controller.abort();
|
|
543
|
+
reject(/* @__PURE__ */ new Error("Request timeout"));
|
|
544
|
+
}, 3e3);
|
|
545
|
+
});
|
|
546
|
+
const fetchPromise = fetch("https://api.ipify.org?format=json", { signal: controller.signal }).then((res) => res.json()).then((data) => data.ip);
|
|
547
|
+
const result = await Promise.race([fetchPromise, timeoutPromise]);
|
|
548
|
+
clearTimeout(timeoutId);
|
|
549
|
+
return result;
|
|
550
|
+
}
|
|
551
|
+
var IpifyProvider = class {
|
|
552
|
+
async getIp() {
|
|
553
|
+
if (cachedIp !== void 0) return cachedIp;
|
|
554
|
+
if (inFlightLookup) return inFlightLookup;
|
|
555
|
+
inFlightLookup = (async () => {
|
|
556
|
+
try {
|
|
557
|
+
const ip = await fetchIpFromIpify();
|
|
558
|
+
cachedIp = ip;
|
|
559
|
+
return ip;
|
|
560
|
+
} catch {
|
|
561
|
+
cachedIp = "";
|
|
562
|
+
return "";
|
|
563
|
+
} finally {
|
|
564
|
+
inFlightLookup = void 0;
|
|
565
|
+
}
|
|
566
|
+
})();
|
|
567
|
+
return inFlightLookup;
|
|
568
|
+
}
|
|
569
|
+
};
|
|
570
|
+
//#endregion
|
|
331
571
|
//#region ../infra/src/device/getDeviceData.ts
|
|
332
572
|
const HIGH_ENTROPY_HINTS = /* @__PURE__ */ new Set([
|
|
333
573
|
"model",
|
|
@@ -425,171 +665,59 @@ async function getDeviceFingerprintInfo() {
|
|
|
425
665
|
}
|
|
426
666
|
}
|
|
427
667
|
//#endregion
|
|
428
|
-
//#region ../infra/src/scheduling/yieldUntilNextPaint.ts
|
|
429
|
-
/**
|
|
430
|
-
* Resolves after the browser has had a chance to commit and paint a queued
|
|
431
|
-
* render.
|
|
432
|
-
*
|
|
433
|
-
* Strategy:
|
|
434
|
-
* - `requestAnimationFrame` callbacks fire BEFORE the paint of the frame
|
|
435
|
-
* they belong to (per the HTML5 "update the rendering" step). If we
|
|
436
|
-
* resolve the promise inside a rAF callback, the await-continuation
|
|
437
|
-
* runs as a microtask immediately after the callback returns — still
|
|
438
|
-
* before the paint phase of that frame. A caller that then blocks the
|
|
439
|
-
* main thread (e.g. synchronous WASM `processPhoto`) starves the paint.
|
|
440
|
-
* - We therefore chain rAF → setTimeout: the rAF fires before frame N's
|
|
441
|
-
* paint, the setTimeout runs as a macrotask scheduled after frame N's
|
|
442
|
-
* "update the rendering" step, which the browser will only get to once
|
|
443
|
-
* the paint actually lands. By the time setTimeout fires, the paint
|
|
444
|
-
* for the queued render is on screen.
|
|
445
|
-
* - In environments where rAF never ticks (jsdom, happy-dom, backgrounded
|
|
446
|
-
* tabs), a parallel `setTimeout` fallback at 100 ms resolves instead.
|
|
447
|
-
* 100 ms is comfortably longer than two real-browser frames so rAF +
|
|
448
|
-
* setTimeout wins reliably in any foregrounded browser. (An earlier
|
|
449
|
-
* implementation raced rAF against a `MessageChannel` macrotask, but
|
|
450
|
-
* MessageChannel drains immediately after the current task's
|
|
451
|
-
* microtasks — before the next paint — so it resolved the promise too
|
|
452
|
-
* early and defeated the whole point of the helper.)
|
|
453
|
-
*
|
|
454
|
-
* Lives in infra because it touches browser APIs (`requestAnimationFrame`,
|
|
455
|
-
* `setTimeout`) that the architecture rules forbid from core. Core modules
|
|
456
|
-
* that need to yield to the browser render loop should import this helper
|
|
457
|
-
* directly via its file path.
|
|
458
|
-
*/
|
|
459
|
-
function yieldUntilNextPaint() {
|
|
460
|
-
return new Promise((resolve) => {
|
|
461
|
-
let resolved = false;
|
|
462
|
-
const done = () => {
|
|
463
|
-
if (resolved) return;
|
|
464
|
-
resolved = true;
|
|
465
|
-
resolve();
|
|
466
|
-
};
|
|
467
|
-
if (typeof requestAnimationFrame === "function") requestAnimationFrame(() => {
|
|
468
|
-
requestAnimationFrame(() => {
|
|
469
|
-
setTimeout(done, 0);
|
|
470
|
-
});
|
|
471
|
-
});
|
|
472
|
-
setTimeout(done, 100);
|
|
473
|
-
});
|
|
474
|
-
}
|
|
475
|
-
//#endregion
|
|
476
|
-
//#region ../infra/src/providers/browser/thumbmarkAdapter.ts
|
|
477
|
-
/**
|
|
478
|
-
* Adapter for @thumbmarkjs/thumbmarkjs. Single point of dependency so bundlers
|
|
479
|
-
* resolve it from infra's node_modules when building apps that depend on core → infra.
|
|
480
|
-
*/
|
|
481
|
-
const THUMBMARK_ALGORITHM = {
|
|
482
|
-
algorithmName: "thumbmarkjs",
|
|
483
|
-
algorithmVersion: "1.6.4"
|
|
484
|
-
};
|
|
485
|
-
/**
|
|
486
|
-
* `logging` must stay disabled. With it on (the upstream default) `getThumbmark()`
|
|
487
|
-
* evaluates a bare, unguarded storage read:
|
|
488
|
-
*
|
|
489
|
-
* options.logging && !sessionStorage.getItem("_tmjs_l") && Math.random() < 1e-4
|
|
490
|
-
*
|
|
491
|
-
* Hosts that delete the bare global as a self-XSS mitigation (`delete
|
|
492
|
-
* window.sessionStorage`) make that a `ReferenceError`, which would cost us the
|
|
493
|
-
* device fingerprint. `logging: false` short-circuits the expression before the
|
|
494
|
-
* read. It also stops upstream's 1-in-10 000 telemetry POST to
|
|
495
|
-
* api.thumbmarkjs.com. Re-check this when bumping the dependency.
|
|
496
|
-
*/
|
|
497
|
-
const THUMBMARK_OPTIONS = {
|
|
498
|
-
logging: false,
|
|
499
|
-
yield: yieldUntilNextPaint
|
|
500
|
-
};
|
|
501
|
-
const lazyThumbmark = BrowserLazyImportProvider.getInstance().create(() => import("./thumbmark.esm-CRc0cYvz.esm.js"), {
|
|
502
|
-
label: "Fingerprint",
|
|
503
|
-
moduleName: "@thumbmarkjs/thumbmarkjs",
|
|
504
|
-
timeoutMs: 1e4,
|
|
505
|
-
disabledMessage: "the device fingerprint is unavailable for this attempt."
|
|
506
|
-
});
|
|
507
|
-
async function getThumbmarkId() {
|
|
508
|
-
const module = await lazyThumbmark.load();
|
|
509
|
-
if (!module) throw new Error("@thumbmarkjs/thumbmarkjs failed to load");
|
|
510
|
-
return (await new module.Thumbmark(THUMBMARK_OPTIONS).get()).thumbmark;
|
|
511
|
-
}
|
|
512
|
-
//#endregion
|
|
513
668
|
//#region ../infra/src/providers/browser/FingerprintProvider.ts
|
|
514
669
|
var FingerprintProvider = class {
|
|
515
|
-
|
|
670
|
+
/**
|
|
671
|
+
* @param readVisitorId - The device id to report, or `null` without one;
|
|
672
|
+
* the result then has an empty `visitorId` and no algorithm fields.
|
|
673
|
+
*/
|
|
674
|
+
constructor(ipLookup, readVisitorId) {
|
|
516
675
|
this.ipLookup = ipLookup;
|
|
517
|
-
|
|
518
|
-
prime() {
|
|
519
|
-
this.startVisitorId();
|
|
520
|
-
}
|
|
521
|
-
startVisitorId() {
|
|
522
|
-
if (!this.visitorIdPromise) {
|
|
523
|
-
this.visitorIdPromise = getThumbmarkId();
|
|
524
|
-
this.visitorIdPromise.catch(() => void 0);
|
|
525
|
-
}
|
|
526
|
-
return this.visitorIdPromise;
|
|
676
|
+
this.readVisitorId = readVisitorId;
|
|
527
677
|
}
|
|
528
678
|
async getFingerprint(disableIpify = false) {
|
|
529
|
-
const
|
|
530
|
-
|
|
679
|
+
const [visitor, deviceInfo, ip] = await Promise.all([
|
|
680
|
+
this.readVisitorId(),
|
|
681
|
+
getDeviceFingerprintInfo(),
|
|
682
|
+
disableIpify ? Promise.resolve("") : this.ipLookup.getIp()
|
|
683
|
+
]);
|
|
531
684
|
return {
|
|
532
|
-
visitorId,
|
|
685
|
+
...visitor ?? { visitorId: "" },
|
|
533
686
|
ip,
|
|
534
|
-
deviceInfo
|
|
535
|
-
...THUMBMARK_ALGORITHM
|
|
687
|
+
deviceInfo
|
|
536
688
|
};
|
|
537
689
|
}
|
|
538
690
|
};
|
|
539
691
|
//#endregion
|
|
540
|
-
//#region
|
|
541
|
-
|
|
542
|
-
let inFlightLookup;
|
|
692
|
+
//#region src/internal/fingerprint/fingerprintApi.ts
|
|
693
|
+
const PID_WAIT_MS = 3e3;
|
|
543
694
|
/**
|
|
544
|
-
*
|
|
695
|
+
* Collects the device fingerprint: device info, the IP, and the Incode pid.
|
|
696
|
+
*
|
|
697
|
+
* `visitorId` is the current session's Incode pid, the device hash
|
|
698
|
+
* user-service returned for the session's PID signal, with the
|
|
699
|
+
* `algorithmName` and `algorithmVersion` it named. While that signal is in
|
|
700
|
+
* flight, this waits up to 3 s for it.
|
|
701
|
+
*
|
|
702
|
+
* Without a session (no token), with `setup({ fingerprint: false })`, or when
|
|
703
|
+
* no pid arrives within 3 s (WASM not loaded, or an older server), `visitorId`
|
|
704
|
+
* is `''` and `algorithmName` and `algorithmVersion` are absent.
|
|
705
|
+
*
|
|
706
|
+
* @param disableIpify - Skip the IP lookup. Defaults to the session's setting.
|
|
545
707
|
*/
|
|
546
|
-
function resetIpifyCache() {
|
|
547
|
-
cachedIp = void 0;
|
|
548
|
-
inFlightLookup = void 0;
|
|
549
|
-
}
|
|
550
|
-
async function fetchIpFromIpify() {
|
|
551
|
-
if (typeof fetch === "undefined") return "";
|
|
552
|
-
let timeoutId = 0;
|
|
553
|
-
const controller = new AbortController();
|
|
554
|
-
if (AbortSignal.timeout) {
|
|
555
|
-
const signal = AbortSignal.timeout(3e3);
|
|
556
|
-
return (await (await fetch("https://api.ipify.org?format=json", { signal })).json()).ip;
|
|
557
|
-
}
|
|
558
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
559
|
-
timeoutId = setTimeout(() => {
|
|
560
|
-
controller.abort();
|
|
561
|
-
reject(/* @__PURE__ */ new Error("Request timeout"));
|
|
562
|
-
}, 3e3);
|
|
563
|
-
});
|
|
564
|
-
const fetchPromise = fetch("https://api.ipify.org?format=json", { signal: controller.signal }).then((res) => res.json()).then((data) => data.ip);
|
|
565
|
-
const result = await Promise.race([fetchPromise, timeoutPromise]);
|
|
566
|
-
clearTimeout(timeoutId);
|
|
567
|
-
return result;
|
|
568
|
-
}
|
|
569
|
-
var IpifyProvider = class {
|
|
570
|
-
async getIp() {
|
|
571
|
-
if (cachedIp !== void 0) return cachedIp;
|
|
572
|
-
if (inFlightLookup) return inFlightLookup;
|
|
573
|
-
inFlightLookup = (async () => {
|
|
574
|
-
try {
|
|
575
|
-
const ip = await fetchIpFromIpify();
|
|
576
|
-
cachedIp = ip;
|
|
577
|
-
return ip;
|
|
578
|
-
} catch {
|
|
579
|
-
cachedIp = "";
|
|
580
|
-
return "";
|
|
581
|
-
} finally {
|
|
582
|
-
inFlightLookup = void 0;
|
|
583
|
-
}
|
|
584
|
-
})();
|
|
585
|
-
return inFlightLookup;
|
|
586
|
-
}
|
|
587
|
-
};
|
|
588
|
-
//#endregion
|
|
589
|
-
//#region src/internal/fingerprint/fingerprintApi.ts
|
|
590
708
|
async function getFingerprint(disableIpify) {
|
|
591
709
|
const shouldDisableIpify = disableIpify ?? getDisableIpify();
|
|
592
|
-
return new FingerprintProvider(new IpifyProvider()).getFingerprint(shouldDisableIpify);
|
|
710
|
+
return new FingerprintProvider(new IpifyProvider(), readSessionPid).getFingerprint(shouldDisableIpify);
|
|
711
|
+
}
|
|
712
|
+
async function readSessionPid() {
|
|
713
|
+
const token = getToken();
|
|
714
|
+
if (!token || !getFingerprintEnabled()) return null;
|
|
715
|
+
const pid = await incodeDeviceHashWaiter.waitFor(token, PID_WAIT_MS);
|
|
716
|
+
return pid ? {
|
|
717
|
+
visitorId: pid.hash,
|
|
718
|
+
algorithmName: pid.algorithmName,
|
|
719
|
+
algorithmVersion: pid.algorithmVersion
|
|
720
|
+
} : null;
|
|
593
721
|
}
|
|
594
722
|
//#endregion
|
|
595
723
|
//#region src/internal/device/hasLiedBrowser.ts
|
|
@@ -657,25 +785,37 @@ function formatBrowser(browser) {
|
|
|
657
785
|
if (!browser.name || !browser.version) return "Unknown";
|
|
658
786
|
return `${browser.name} ${browser.version}`;
|
|
659
787
|
}
|
|
788
|
+
/**
|
|
789
|
+
* The session's activation post: device data (IP, browser, OS) and, when it
|
|
790
|
+
* arrives in time, the pid as the device hash. Mandatory consent rides on its
|
|
791
|
+
* response.
|
|
792
|
+
*/
|
|
660
793
|
async function submitDeviceFingerprint(options = {}, dependencies) {
|
|
661
794
|
const { disableIpify = false, hostingApp, signal } = options;
|
|
662
795
|
const token = getToken();
|
|
663
|
-
const
|
|
796
|
+
const [deviceInfo, ip, deviceHash] = await Promise.all([
|
|
797
|
+
getDeviceFingerprintInfo(),
|
|
798
|
+
disableIpify ? Promise.resolve("") : dependencies.ipLookup.getIp(),
|
|
799
|
+
dependencies.getDeviceHash?.() ?? null
|
|
800
|
+
]);
|
|
664
801
|
if (getToken() !== token || dependencies.isCurrentSession?.() === false) throw new Error("Session changed during fingerprint collection");
|
|
665
802
|
const hasLiedBrowser = isBrowserSimulation(dependencies.browserEnv);
|
|
666
803
|
const payload = {
|
|
667
|
-
hash:
|
|
668
|
-
ip
|
|
669
|
-
deviceType:
|
|
670
|
-
data: JSON.stringify(
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
804
|
+
hash: deviceHash?.hash ?? "",
|
|
805
|
+
ip,
|
|
806
|
+
deviceType: SDK_PLATFORM,
|
|
807
|
+
data: JSON.stringify({
|
|
808
|
+
ip,
|
|
809
|
+
deviceInfo
|
|
810
|
+
}),
|
|
811
|
+
osVersion: formatOsVersion(deviceInfo.os),
|
|
812
|
+
deviceModel: deviceInfo.device.model || "",
|
|
813
|
+
browser: formatBrowser(deviceInfo.browser),
|
|
674
814
|
hasLiedBrowser,
|
|
675
815
|
sdkVersion: SDK_VERSION,
|
|
676
816
|
hostingApp: hostingApp ?? "Web SDK",
|
|
677
|
-
algorithmName:
|
|
678
|
-
algorithmVersion:
|
|
817
|
+
algorithmName: deviceHash?.algorithmName,
|
|
818
|
+
algorithmVersion: deviceHash?.algorithmVersion
|
|
679
819
|
};
|
|
680
820
|
const response = await api.post(endpoints.deviceFingerprint, payload, { signal });
|
|
681
821
|
if (!response.ok) throw new Error(`Failed to submit fingerprint: ${response.status} ${response.statusText}`);
|
|
@@ -718,6 +858,9 @@ let cachedDisableIpify = false;
|
|
|
718
858
|
let clientIpLookupEnabled = true;
|
|
719
859
|
let clientFingerprintEnabled = true;
|
|
720
860
|
let clientHostingApp;
|
|
861
|
+
let clientWasmConfig;
|
|
862
|
+
let clientWasmDisabled = false;
|
|
863
|
+
const DEVICE_HASH_WAIT_MS = 3e3;
|
|
721
864
|
function setClientIpLookupEnabled(enabled) {
|
|
722
865
|
clientIpLookupEnabled = enabled;
|
|
723
866
|
}
|
|
@@ -735,6 +878,79 @@ function setClientFingerprintEnabled(enabled) {
|
|
|
735
878
|
clientFingerprintEnabled = enabled;
|
|
736
879
|
fingerprintSignalsReporter.setEnabled(enabled);
|
|
737
880
|
}
|
|
881
|
+
/**
|
|
882
|
+
* The known WASM config: from `setup({ wasm })`, `setWasmConfig`, or
|
|
883
|
+
* `<incode-flow>` / `<incode-workflow>`, which pass the config their captures
|
|
884
|
+
* load. Activation loads the WASM runtime only when it is known, so headless
|
|
885
|
+
* hosts that never configured WASM don't download it.
|
|
886
|
+
*/
|
|
887
|
+
function setClientWasmConfig(config) {
|
|
888
|
+
clientWasmConfig = config;
|
|
889
|
+
}
|
|
890
|
+
/**
|
|
891
|
+
* `setup({ wasm: false })`: activations load no WASM runtime, so their post
|
|
892
|
+
* sends no device hash, until `setup({ wasm })` or `reset()`.
|
|
893
|
+
*/
|
|
894
|
+
function setClientWasmDisabled(disabled) {
|
|
895
|
+
clientWasmDisabled = disabled;
|
|
896
|
+
}
|
|
897
|
+
const SLOW_EFFECTIVE_TYPES = /* @__PURE__ */ new Set([
|
|
898
|
+
"slow-2g",
|
|
899
|
+
"2g",
|
|
900
|
+
"3g"
|
|
901
|
+
]);
|
|
902
|
+
function isSlowNetwork() {
|
|
903
|
+
const connection = new BrowserEnvironmentProvider().getNavigatorProperty("connection");
|
|
904
|
+
return connection?.saveData === true || SLOW_EFFECTIVE_TYPES.has(connection?.effectiveType);
|
|
905
|
+
}
|
|
906
|
+
/** Why this activation's post won't wait for a pid, if it won't. */
|
|
907
|
+
function deviceHashSkipReason(activationOptedOut) {
|
|
908
|
+
if (activationOptedOut || clientWasmDisabled) return "wasmDisabled";
|
|
909
|
+
if (!clientWasmConfig && !isTRIStarted()) return "noWasmConfig";
|
|
910
|
+
return isSlowNetwork() ? "slowNetwork" : void 0;
|
|
911
|
+
}
|
|
912
|
+
/**
|
|
913
|
+
* TRI first: TRI's fpSignals PID is signed with the same key as the runtime's
|
|
914
|
+
* (old signing format, so one string serves every session), so it goes to
|
|
915
|
+
* user-service unchanged as this session's PID and no runtime starts for it.
|
|
916
|
+
* Without a pid back (fpSignals off, blocked or timed out, or a step-up after
|
|
917
|
+
* the tenant's replay window, 11,100 s by default) the runtime starts for the
|
|
918
|
+
* pid as before. Needs TRI's signed `getFpSignals()`: an older TRI's string is
|
|
919
|
+
* unsigned, so user-service returns no pid and the runtime is used.
|
|
920
|
+
*/
|
|
921
|
+
function startSessionPid(token, config) {
|
|
922
|
+
if (!isTRIStarted()) {
|
|
923
|
+
if (config) startSessionWasm(token, config);
|
|
924
|
+
return;
|
|
925
|
+
}
|
|
926
|
+
fingerprintSignalsReporter.sendHostPid(token, async () => (await readTRIFpSignals())?.pid ?? null).then((sent) => {
|
|
927
|
+
if (sent || getToken() !== token) return;
|
|
928
|
+
if (config) startSessionWasm(token, config);
|
|
929
|
+
else incodeDeviceHashWaiter.settle(token, null);
|
|
930
|
+
});
|
|
931
|
+
}
|
|
932
|
+
/**
|
|
933
|
+
* Starts the WASM runtime, without models, so the PID signal can return the
|
|
934
|
+
* pid while activation runs: it is the device hash of the activation post.
|
|
935
|
+
* Capture modules add their pipelines later. A runtime that fails to start
|
|
936
|
+
* ends the post's wait at once.
|
|
937
|
+
*/
|
|
938
|
+
function startSessionWasm(token, config) {
|
|
939
|
+
(async () => {
|
|
940
|
+
try {
|
|
941
|
+
const warmupModule = await import("./warmup-DtB0DJpl.esm.js").then((n) => n.c);
|
|
942
|
+
const warmup = warmupModule.warmupWasm({
|
|
943
|
+
...config,
|
|
944
|
+
pipelines: []
|
|
945
|
+
});
|
|
946
|
+
warmup.catch(() => void 0);
|
|
947
|
+
await Promise.race([warmup, warmupModule.whenWasmRuntimeReady()]);
|
|
948
|
+
fingerprintSignalsReporter.onWasmReady();
|
|
949
|
+
} catch {
|
|
950
|
+
incodeDeviceHashWaiter.settle(token, null);
|
|
951
|
+
}
|
|
952
|
+
})();
|
|
953
|
+
}
|
|
738
954
|
function resolveDisableIpify(serverDisableIpify) {
|
|
739
955
|
return !clientIpLookupEnabled || serverDisableIpify;
|
|
740
956
|
}
|
|
@@ -773,6 +989,24 @@ function whenSessionFingerprintSettled() {
|
|
|
773
989
|
return fingerprintSettled?.promise ?? Promise.resolve(cachedFingerprintResult);
|
|
774
990
|
}
|
|
775
991
|
/**
|
|
992
|
+
* A screen now waits for the activation post (its consent decision), so the
|
|
993
|
+
* post stops waiting for the pid and goes with what it has. The pid needs the
|
|
994
|
+
* WASM runtime to download and start, about 2 s even on a fast desktop, so it
|
|
995
|
+
* goes with the post only when it is in before the post goes out.
|
|
996
|
+
*/
|
|
997
|
+
function endDeviceHashWait() {
|
|
998
|
+
const token = getToken();
|
|
999
|
+
if (token) incodeDeviceHashWaiter.release(token);
|
|
1000
|
+
}
|
|
1001
|
+
/** Best-effort: the format latch must never fail session initialization. */
|
|
1002
|
+
function applyCaptureMetadataFormat(v2Enabled) {
|
|
1003
|
+
try {
|
|
1004
|
+
setWasmMetadataV2Enabled(v2Enabled);
|
|
1005
|
+
} catch (error) {
|
|
1006
|
+
trueSightLog("warning", "session", "orchestration", `capture metadata format not applied error=${String(error)}`);
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
/**
|
|
776
1010
|
* Activates a session by setting the auth token on the HTTP client and
|
|
777
1011
|
* preloading session-scoped state.
|
|
778
1012
|
*
|
|
@@ -802,7 +1036,7 @@ function whenSessionFingerprintSettled() {
|
|
|
802
1036
|
* ```
|
|
803
1037
|
*/
|
|
804
1038
|
async function initializeSession(options = {}) {
|
|
805
|
-
const { token, hostingApp = clientHostingApp, signal, preloadFlow, awaitFingerprint = true } = options;
|
|
1039
|
+
const { token, hostingApp = clientHostingApp, signal, preloadFlow, awaitFingerprint = true, wasm } = options;
|
|
806
1040
|
let triLinkPromise = Promise.resolve();
|
|
807
1041
|
if (token !== void 0 && token !== getToken()) {
|
|
808
1042
|
setToken(token);
|
|
@@ -835,32 +1069,37 @@ async function initializeSession(options = {}) {
|
|
|
835
1069
|
}
|
|
836
1070
|
const settled = createFingerprintSettled();
|
|
837
1071
|
fingerprintSettled = settled;
|
|
838
|
-
const
|
|
839
|
-
|
|
1072
|
+
const fingerprintEnabled = clientFingerprintEnabled;
|
|
1073
|
+
const activeToken = getToken();
|
|
1074
|
+
const skipReason = deviceHashSkipReason(wasm === false);
|
|
1075
|
+
if (activeToken && fingerprintEnabled && !skipReason) startSessionPid(activeToken, clientWasmConfig);
|
|
840
1076
|
let fingerprintPromise;
|
|
841
1077
|
sessionInitPromise = (async () => {
|
|
842
1078
|
let features;
|
|
843
1079
|
let serverDisableIpify = false;
|
|
1080
|
+
let captureMetadataV2 = false;
|
|
844
1081
|
try {
|
|
845
|
-
features = await fetchFeatureConfig(signal);
|
|
1082
|
+
features = await retryAfterReconnect(() => fetchFeatureConfig(signal), signal);
|
|
846
1083
|
serverDisableIpify = isFeatureEnabled("DISABLE_IPIFY", features.features);
|
|
1084
|
+
captureMetadataV2 = isFeatureEnabled("DEEPSIGHT_V2", features.features);
|
|
847
1085
|
startTrueSightCollection(features);
|
|
848
1086
|
} catch {
|
|
849
1087
|
features = { sessionIdentifier: "" };
|
|
850
1088
|
trueSightLog("warning", "session", "orchestration", "feature-config fetch failed");
|
|
851
1089
|
startTrueSightCollection();
|
|
852
1090
|
}
|
|
1091
|
+
applyCaptureMetadataFormat(captureMetadataV2);
|
|
853
1092
|
const disableIpify = resolveDisableIpify(serverDisableIpify);
|
|
1093
|
+
fingerprintPromise = submitSessionFingerprint(fingerprintEnabled, {
|
|
1094
|
+
disableIpify,
|
|
1095
|
+
hostingApp,
|
|
1096
|
+
signal
|
|
1097
|
+
}, settled, skipReason);
|
|
854
1098
|
const preloadedFlow = await flowPreloadPromise;
|
|
855
1099
|
await updateFeatureManagementUser({ customIDs: {
|
|
856
1100
|
hashed_onboarding_id: features.sessionIdentifier || void 0,
|
|
857
1101
|
flow_id: preloadedFlow?.flowId
|
|
858
1102
|
} });
|
|
859
|
-
fingerprintPromise = submitSessionFingerprint(fingerprintProvider, {
|
|
860
|
-
disableIpify,
|
|
861
|
-
hostingApp,
|
|
862
|
-
signal
|
|
863
|
-
}, settled);
|
|
864
1103
|
try {
|
|
865
1104
|
const browserInfo = new BrowserInfoProvider().getBrowserInfo();
|
|
866
1105
|
const language = new BrowserEnvironmentProvider().getNavigatorProperty("language");
|
|
@@ -910,25 +1149,43 @@ async function initializeSession(options = {}) {
|
|
|
910
1149
|
* while it still belongs to the current activation (a token change resets
|
|
911
1150
|
* `fingerprintSettled`) and always settles the waiter.
|
|
912
1151
|
*/
|
|
913
|
-
async function submitSessionFingerprint(
|
|
1152
|
+
async function submitSessionFingerprint(enabled, options, settled, skipReason) {
|
|
914
1153
|
const isCurrent = () => fingerprintSettled === settled;
|
|
1154
|
+
const token = getToken();
|
|
1155
|
+
const startedAtMs = getTimestamp();
|
|
1156
|
+
const deadlineMs = startedAtMs + DEVICE_HASH_WAIT_MS;
|
|
1157
|
+
let outcomeLogged = false;
|
|
1158
|
+
const logOutcome = (outcome) => {
|
|
1159
|
+
if (!outcomeLogged) {
|
|
1160
|
+
outcomeLogged = true;
|
|
1161
|
+
trueSightLog("info", "session", "other", `device hash ${outcome}`);
|
|
1162
|
+
}
|
|
1163
|
+
};
|
|
1164
|
+
const getDeviceHash = !skipReason && token ? async () => {
|
|
1165
|
+
const deviceHash = await incodeDeviceHashWaiter.waitFor(token, deadlineMs - getTimestamp());
|
|
1166
|
+
logOutcome(`${deviceHash ? "sent" : "missing"} waitMs=${getTimestamp() - startedAtMs}`);
|
|
1167
|
+
return deviceHash;
|
|
1168
|
+
} : void 0;
|
|
915
1169
|
try {
|
|
916
|
-
if (
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
1170
|
+
if (enabled) {
|
|
1171
|
+
if (skipReason) logOutcome(`skipped reason=${skipReason}`);
|
|
1172
|
+
try {
|
|
1173
|
+
const result = await retryAfterReconnect(() => submitDeviceFingerprint(options, {
|
|
1174
|
+
ipLookup: new IpifyProvider(),
|
|
1175
|
+
browserEnv: new BrowserEnvironmentProvider(),
|
|
1176
|
+
isCurrentSession: isCurrent,
|
|
1177
|
+
getDeviceHash
|
|
1178
|
+
}), options.signal);
|
|
1179
|
+
if (isCurrent()) {
|
|
1180
|
+
cachedFingerprintResult = result;
|
|
1181
|
+
cachedFingerprintSuccess = true;
|
|
1182
|
+
flushDeviceStatsQueue();
|
|
1183
|
+
}
|
|
1184
|
+
} catch (error) {
|
|
1185
|
+
console.warn("Failed to submit device fingerprint:", error);
|
|
1186
|
+
trueSightLog("warning", "session", "other", "device fingerprint submit failed");
|
|
926
1187
|
}
|
|
927
|
-
}
|
|
928
|
-
console.warn("Failed to submit device fingerprint:", error);
|
|
929
|
-
trueSightLog("warning", "session", "other", "device fingerprint submit failed");
|
|
930
|
-
}
|
|
931
|
-
else if (isCurrent()) flushDeviceStatsQueue();
|
|
1188
|
+
} else if (isCurrent()) flushDeviceStatsQueue();
|
|
932
1189
|
} finally {
|
|
933
1190
|
settled.resolve(isCurrent() ? cachedFingerprintResult : void 0);
|
|
934
1191
|
}
|
|
@@ -957,7 +1214,9 @@ function getFingerprintEnabled() {
|
|
|
957
1214
|
* Useful for testing or when starting a new session.
|
|
958
1215
|
*/
|
|
959
1216
|
function resetSessionInit() {
|
|
1217
|
+
applyCaptureMetadataFormat(false);
|
|
960
1218
|
fingerprintSignalsReporter.resetSession();
|
|
1219
|
+
incodeDeviceHashWaiter.reset();
|
|
961
1220
|
sessionInitialized = false;
|
|
962
1221
|
cachedFeatures = null;
|
|
963
1222
|
cachedDisableIpify = false;
|
|
@@ -970,4 +1229,4 @@ function resetSessionInit() {
|
|
|
970
1229
|
resetDeviceStatsQueue();
|
|
971
1230
|
}
|
|
972
1231
|
//#endregion
|
|
973
|
-
export {
|
|
1232
|
+
export { fingerprintSignalsReporter as C, BrowserEnvironmentProvider as S, setStandaloneFlowPolicy as _, initializeSession as a, getDeviceFingerprintInfo as b, setClientHostingApp as c, setClientWasmDisabled as d, whenSessionFingerprintSettled as f, resolveStandaloneFlowPolicy as g, resetStandaloneFlowPolicy as h, getSessionFingerprintResult as i, setClientIpLookupEnabled as l, registerFlowPreloader as m, getDisableIpify as n, resetSessionInit as o, getStandaloneFlowPolicy as p, getFingerprintEnabled as r, setClientFingerprintEnabled as s, endDeviceHashWait as t, setClientWasmConfig as u, isBrowserSimulation as v, SDK_PLATFORM as w, IpifyProvider as x, getFingerprint as y };
|