@incodetech/core 2.1.1 → 2.2.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{3dAvatarProvider-BwOmTMOy.esm.js → 3dAvatarProvider-g02DTFqT.esm.js} +811 -880
- package/dist/Actor-iTq7YY48.d.ts +1 -0
- package/dist/BrowserDiagnosticsCryptoProvider-CriIh1Gt.esm.js +95 -0
- package/dist/BrowserLazyImportProvider-BhoA957O.esm.js +114 -0
- package/dist/{BrowserStorageProvider-CBHBhKQN.esm.js → BrowserStorageProvider-k-FDkC4W.esm.js} +2 -4
- package/dist/{BrowserTimerProvider-CHloo0eQ.esm.js → BrowserTimerProvider-BXhgNxLt.esm.js} +1 -2
- package/dist/{BrowserVisibilityObserverProvider-GBS6XSii.esm.js → BrowserVisibilityObserverProvider-BX1BiLDK.esm.js} +1 -2
- package/dist/Face2DProvider-UUQt_vRC.esm.js +437 -0
- package/dist/{createFaceAvatar-CpdYp9Iy.d.ts → FaceDetectionProvider-Mh6q3EbA.d.ts} +107 -159
- package/dist/IBrowserEnvironmentCapability-DEaRRk-R.esm.js +9 -0
- package/dist/IFaceAvatarCapability-BrL19G0s.d.ts +23 -0
- package/dist/IFeatureManagementCapability-DdEUp6tB.d.ts +1125 -0
- package/dist/IIdCaptureCapability-DHTT3FC2.d.ts +237 -0
- package/dist/IStorageCapability-ORkQfK3F.d.ts +242 -0
- package/dist/{ITimerCapability-DJ73P4RK.esm.js → ITimerCapability-DgdDzp8G.esm.js} +1 -2
- package/dist/{Manager-goNPc_h_.d.ts → Manager-CQQ99QOI.d.ts} +1 -0
- package/dist/{MotionSensorProvider-BHuHoYvJ.esm.js → MotionSensorProvider-DGiV77J_.esm.js} +2 -37
- package/dist/{OpenViduRecordingProvider-CK6A5kiU.esm.js → OpenViduRecordingProvider-Du98qevC.esm.js} +2 -4
- package/dist/PrivacyLensProvider-D8PS7AJa.esm.js +405 -0
- package/dist/StateMachine-EDpYWy0i.d.ts +6 -0
- package/dist/{StreamCanvasCapture-CAqUdVkM.esm.js → StreamCanvasCapture-D2XcXCZ4.esm.js} +2 -4
- package/dist/{addressSearch-D7msRieq.esm.js → addressSearch-DQyrvDQj.esm.js} +10 -21
- package/dist/ae-signature.d.ts +4 -6
- package/dist/ae-signature.esm.js +10 -11
- package/dist/antifraud.d.ts +1 -6
- package/dist/antifraud.esm.js +3 -8
- package/dist/{antifraudManager-5KA84wtF.esm.js → antifraudManager-B8Plzf7a.esm.js} +11 -8
- package/dist/{antifraudManager-DCiNI6np.d.ts → antifraudManager-BY36bS12.d.ts} +3 -3
- package/dist/{antifraudStateMachine-BQVw46N5.esm.js → antifraudStateMachine-r4VxSBS4.esm.js} +5 -7
- package/dist/api-Bx3gKW_y.esm.js +129 -0
- package/dist/{apiError-DkOXfFBu.esm.js → apiError-DZfAyExM.esm.js} +25 -3
- package/dist/authentication.d.ts +3 -19
- package/dist/authentication.esm.js +3 -35
- package/dist/{authenticationManager-BeT6tNZm.d.ts → authenticationManager-BBMGTcwW.d.ts} +3 -4
- package/dist/{authenticationManager-BryLnSaF.esm.js → authenticationManager-DscbQwIl.esm.js} +7 -10
- package/dist/{authenticationStateMachine-DbdxfGHx.esm.js → authenticationStateMachine-SyuM00Fa.esm.js} +11 -15
- package/dist/avatar.d.ts +2 -2
- package/dist/avatar.esm.js +2 -3
- package/dist/avatar2dWarm-DqucNFX4.esm.js +1330 -0
- package/dist/avatarStats-CdUOb3VD.esm.js +136 -0
- package/dist/{backCameraStream-ChrMTJv-.esm.js → backCameraStream-CUeYm5eu.esm.js} +20 -8
- package/dist/browser-DlFgHpoC-DnyrCR8r.esm.js +1513 -0
- package/dist/callback-645_omgz.d.ts +133 -0
- package/dist/camera-_2sXMXiF.esm.js +140 -0
- package/dist/camera.d.ts +19 -2
- package/dist/camera.esm.js +2 -6
- package/dist/{canvas-Pi10hG_l.esm.js → canvas-E1zGkel4.esm.js} +1 -2
- package/dist/certificate-issuance.d.ts +34 -39
- package/dist/certificate-issuance.esm.js +4 -11
- package/dist/{certificateIssuanceStateMachine-DlZQT1_u.esm.js → certificateIssuanceStateMachine-COd7_l2T.esm.js} +7 -11
- package/dist/consent.d.ts +1 -4
- package/dist/consent.esm.js +3 -8
- package/dist/{consentManager-BwNu-uC-.esm.js → consentManager-BApTlfA0.esm.js} +5 -7
- package/dist/{consentManager-B4PMGXW-.d.ts → consentManager-uhDPdU6i.d.ts} +55 -61
- package/dist/{consentStateMachine-BOkVFiU7.esm.js → consentStateMachine-WD-S-Yhs.esm.js} +5 -7
- package/dist/{cpf-16m_cGAM.esm.js → cpf-BIADjddF.esm.js} +1 -2
- package/dist/createFaceAvatar-BEj18KXi.d.ts +50 -0
- package/dist/createFaceAvatar-DQKaRise.esm.js +103 -0
- package/dist/cross-document-data-match.d.ts +2 -26
- package/dist/cross-document-data-match.esm.js +2 -71
- package/dist/crossDocumentDataMatchManager-Dq8Z3SOg.d.ts +41 -0
- package/dist/crossDocumentDataMatchManager-OmYvyung.esm.js +84 -0
- package/dist/curp-validation.d.ts +1 -11
- package/dist/curp-validation.esm.js +3 -8
- package/dist/{curpValidationManager-CoqODZx5.d.ts → curpValidationManager-DVGr7Fq7.d.ts} +4 -6
- package/dist/{curpValidationManager-Cbji2inV.esm.js → curpValidationManager-UZxcrsrz.esm.js} +11 -7
- package/dist/{curpValidationStateMachine-Dlw4qfFb.esm.js → curpValidationStateMachine-9KwnqeoB.esm.js} +22 -14
- package/dist/custom-fields.d.ts +2 -5
- package/dist/custom-fields.esm.js +24 -11
- package/dist/custom-watchlist.d.ts +1 -3
- package/dist/custom-watchlist.esm.js +11 -10
- package/dist/{customWatchlistStateMachine-D8w0mNxm.esm.js → customWatchlistStateMachine-B_ey3TFj.esm.js} +5 -7
- package/dist/{dateUtils-BW6mBV6p.esm.js → dateUtils-CvG0FvK8.esm.js} +1 -2
- package/dist/{deepsightService-CViys6T4.esm.js → deepsightLoader-DcWjMC6A.esm.js} +68 -14
- package/dist/{deepsightService-BuTOFTr8.d.ts → deepsightService-DLVQS_RH.d.ts} +41 -2
- package/dist/device.d.ts +10 -2
- package/dist/device.esm.js +21 -21
- package/dist/document-capture.d.ts +3 -1816
- package/dist/document-capture.esm.js +3 -245
- package/dist/document-upload.d.ts +48 -55
- package/dist/document-upload.esm.js +8 -14
- package/dist/documentCaptureManager-B4Kivr8_.d.ts +2062 -0
- package/dist/documentCaptureManager-DszmcU-l.esm.js +296 -0
- package/dist/{documentCaptureStateMachine-BkTvU3yq.esm.js → documentCaptureStateMachine-D2jBwwVb.esm.js} +66 -40
- package/dist/dynamic-forms.d.ts +2 -4
- package/dist/dynamic-forms.esm.js +3 -9
- package/dist/{dynamicFormsManager-CHXUBNs4.esm.js → dynamicFormsManager-BoZ2-OUI.esm.js} +48 -9
- package/dist/{dynamicFormsManager-CKZkE7Wo.d.ts → dynamicFormsManager-fhK0yINk.d.ts} +22 -46
- package/dist/{dynamicFormsStateMachine-DJ1HGZff.esm.js → dynamicFormsStateMachine-D0RzkoEV.esm.js} +161 -34
- package/dist/ekyb.d.ts +5 -137
- package/dist/ekyb.esm.js +4 -179
- package/dist/ekybManager-DTvfxAOZ.esm.js +178 -0
- package/dist/ekybManager-Dzswb_b8.d.ts +114 -0
- package/dist/{ekybStateMachine-D9GzA4MW.esm.js → ekybStateMachine-BlTIozb6.esm.js} +16 -193
- package/dist/ekyc.d.ts +2 -79
- package/dist/ekyc.esm.js +4 -154
- package/dist/ekycManager-BFpHbBoT.d.ts +97 -0
- package/dist/ekycManager-oTstTJuL.esm.js +156 -0
- package/dist/{ekycStateMachine-DnVRiu3s.esm.js → ekycStateMachine-DHvksnrr.esm.js} +141 -423
- package/dist/ekycUtils-Dew1rBG0.esm.js +223 -0
- package/dist/electronic-signature.d.ts +3 -5
- package/dist/electronic-signature.esm.js +2 -10
- package/dist/{index-36QX_21w.d.ts → electronicSignatureManager-CcUXQZS7.d.ts} +220 -251
- package/dist/{electronicSignatureManager-DESRgObX.esm.js → electronicSignatureManager-DRYlHPjT.esm.js} +47 -33
- package/dist/email.d.ts +1 -5
- package/dist/email.esm.js +3 -10
- package/dist/{emailManager-CMS4q_r6.d.ts → emailManager-CADXW_9X.d.ts} +4 -7
- package/dist/{emailManager-B9Vrv3Ma.esm.js → emailManager-tE-YvNtS.esm.js} +76 -12
- package/dist/{emailStateMachine-CbmKFVSi.esm.js → emailStateMachine-Bm894MHB.esm.js} +7 -9
- package/dist/{endpoints-CwrFQfW7.esm.js → endpoints-CCzL3XD_.esm.js} +55 -6
- package/dist/{events-1wxZ97yf.esm.js → events-CxfNJVZW.esm.js} +43 -176
- package/dist/events.d.ts +28 -10
- package/dist/events.esm.js +2 -4
- package/dist/extensibility.d.ts +37 -37
- package/dist/extensibility.esm.js +31 -80
- package/dist/{externalFetch-hvmz_npP.esm.js → externalFetch-BKBThAUC.esm.js} +2 -4
- package/dist/face-match.d.ts +2 -225
- package/dist/face-match.esm.js +3 -173
- package/dist/{faceCaptureManagerFactory-C9TiGbkA.esm.js → faceCaptureManagerFactory-BDAsBCkh.esm.js} +52 -31
- package/dist/{faceCaptureManagerFactory-DiJ64oem.d.ts → faceCaptureManagerFactory-BxWPpxyd.d.ts} +63 -24
- package/dist/{faceCaptureSetup-BqhqfFHL.esm.js → faceCaptureSetup-C7Qv79fA.esm.js} +57 -36
- package/dist/faceMatchManager-BXp2WUT-.esm.js +201 -0
- package/dist/faceMatchManager-BnvrZM2F.d.ts +268 -0
- package/dist/{faceMatchStateMachine-MDb30gCm.esm.js → faceMatchStateMachine-CJiO2yLO.esm.js} +14 -10
- package/dist/feature-management-DS_Nj5Gg.esm.js +615 -0
- package/dist/feature-management.d.ts +173 -0
- package/dist/feature-management.esm.js +2 -0
- package/dist/field-comparison.d.ts +1 -4
- package/dist/field-comparison.esm.js +2 -7
- package/dist/{fieldComparisonManager-OLKVsG2Z.d.ts → fieldComparisonManager-CBvEGxFx.d.ts} +3 -5
- package/dist/{fieldComparisonManager-Cw4uzD7S.esm.js → fieldComparisonManager-DhnYdYZ2.esm.js} +6 -11
- package/dist/fiscal-qr.d.ts +1 -6
- package/dist/fiscal-qr.esm.js +14 -29
- package/dist/flow-events.d.ts +2 -9
- package/dist/flow.d.ts +59 -21
- package/dist/flow.esm.js +132 -49
- package/dist/{flowCompletionService-B6P6_EF3.esm.js → flowCompletionService-BSe3p7pg.esm.js} +4 -6
- package/dist/flowServices-unhF9V9F.esm.js +620 -0
- package/dist/geolocation.d.ts +1 -4
- package/dist/geolocation.esm.js +3 -9
- package/dist/{geolocationManager-CF6-NizA.esm.js → geolocationManager-Bv9MSVNr.esm.js} +44 -16
- package/dist/geolocationManager-Cz744E5S.d.ts +506 -0
- package/dist/{geolocationStateMachine-CD2XJs1b.esm.js → geolocationStateMachine-BxD6JK1M.esm.js} +53 -28
- package/dist/{getBrowser-1yNcfFZR.esm.js → getBrowser-Cb8Zgrgp.esm.js} +1 -2
- package/dist/getBrowser-DNrQeL4T.esm.js +16 -0
- package/dist/getDeviceClass-9y-kbVDw.esm.js +19 -0
- package/dist/{getDeviceClass-C-Dg6IsJ.esm.js → getDeviceClass-CeBiEayS.esm.js} +1 -2
- package/dist/getParsedUserAgent-pJjATANs.esm.js +1622 -0
- package/dist/government-validation.d.ts +3 -6
- package/dist/government-validation.esm.js +7 -13
- package/dist/{governmentValidationStateMachine-BE5wiQ7Y.esm.js → governmentValidationStateMachine-BYKYUdza.esm.js} +8 -11
- package/dist/home.d.ts +14 -22
- package/dist/home.esm.js +3 -8
- package/dist/http.d.ts +0 -1
- package/dist/http.esm.js +2 -4
- package/dist/id-ocr.d.ts +8 -7
- package/dist/id-ocr.esm.js +20 -9
- package/dist/id-selfie-flow.d.ts +179 -0
- package/dist/id-selfie-flow.esm.js +917 -0
- package/dist/id-verification.d.ts +2 -191
- package/dist/id-verification.esm.js +3 -43
- package/dist/id.d.ts +7 -18
- package/dist/id.esm.js +47 -53
- package/dist/{idCaptureDefaults-CZajItdO.esm.js → idCaptureDefaults-WeHbQM7W.esm.js} +54 -17
- package/dist/idCaptureManager-BjU-Wyow.d.ts +429 -0
- package/dist/{idCaptureManager-DASPUMtC.esm.js → idCaptureManager-BjiBSrHm.esm.js} +173 -34
- package/dist/idCaptureServices-CFDwqTtQ.esm.js +396 -0
- package/dist/{idCaptureStateMachine-DZ2ZTSxu.esm.js → idCaptureStateMachine-CRwQh8jc.esm.js} +438 -585
- package/dist/{idOcrManager-Tm4LzKR0.esm.js → idOcrManager-CvJZhmBR.esm.js} +4 -7
- package/dist/{idOcrManager-DLfAjDZn.d.ts → idOcrManager-DXc_xRN7.d.ts} +62 -229
- package/dist/{idOcrStateMachine-BJxZCxwS.esm.js → idOcrStateMachine-Bq_e3l4E.esm.js} +15 -20
- package/dist/idVerificationManager-BB4Pj_N6.d.ts +197 -0
- package/dist/idVerificationManager-CduNXhWd.esm.js +51 -0
- package/dist/{idVerificationStateMachine-DXN9WcdM.esm.js → idVerificationStateMachine-GEQWUPU2.esm.js} +5 -7
- package/dist/identity-reuse.d.ts +1 -4
- package/dist/identity-reuse.esm.js +3 -8
- package/dist/{identityReuseManager-LjkPvSQN.esm.js → identityReuseManager-D5vXknnJ.esm.js} +24 -7
- package/dist/{identityReuseManager-CLVOYxcp.d.ts → identityReuseManager-v2TH5g7e.d.ts} +38 -43
- package/dist/{identityReuseStateMachine-Bp-zONoV.esm.js → identityReuseStateMachine-AubRPhIi.esm.js} +6 -8
- package/dist/index-B8weJxmL.d.ts +1 -0
- package/dist/index-BKOWUhxG.d.ts +258 -0
- package/dist/{index-DrpWp15Z.d.ts → index-CLMF0QLQ.d.ts} +3 -3
- package/dist/index.d.ts +1 -3
- package/dist/index.esm.js +2 -15
- package/dist/{invokeOnCaptureCallback-CCS2Ruzi.esm.js → invokeOnCaptureCallback-1m1VJ3Q4.esm.js} +2 -4
- package/dist/{lib-Bjd6nOLG.esm.js → lib-DAyUtOTj.esm.js} +1510 -1589
- package/dist/mandatory-consent.d.ts +2 -10
- package/dist/mandatory-consent.esm.js +3 -8
- package/dist/{mandatoryConsentManager-DeBmOHcQ.d.ts → mandatoryConsentManager-B29kR0XA.d.ts} +60 -85
- package/dist/{mandatoryConsentManager-DZ26sg4B.esm.js → mandatoryConsentManager-BeELm1zS.esm.js} +4 -7
- package/dist/{mandatoryConsentStateMachine-_44ZoDSh.esm.js → mandatoryConsentStateMachine-zroQGzwb.esm.js} +5 -7
- package/dist/manualReviewService-D4IkipnN.esm.js +15 -0
- package/dist/{mediaRecorderOptions-CClCKAiF.esm.js → mediaRecorderOptions-dALSV8af.esm.js} +2 -4
- package/dist/{mediapipeShared-Bcmkzs3x.esm.js → mediapipeShared-B6oNoXEQ.esm.js} +21 -9
- package/dist/{onDeviceFaceResults-DILtthks.esm.js → onDeviceFaceResults-f81FVdQs.esm.js} +30 -87
- package/dist/openviduLazy-CCDpFWg1.esm.js +10 -0
- package/dist/{otp-B1YeyRXu.d.ts → otp-CEWfTj9v.d.ts} +0 -1
- package/dist/{otp-uaXiKt_R.esm.js → otp-D2k3PeSL.esm.js} +3 -14
- package/dist/{permissionGuards-BNOe4Tnu.esm.js → permissionGuards-KINpmKtI.esm.js} +2 -4
- package/dist/{permissionServices-C_kxhNeo.esm.js → permissionServices-UvUcOSRb.esm.js} +35 -28
- package/dist/personhood.d.ts +13 -20
- package/dist/personhood.esm.js +153 -85
- package/dist/phone.d.ts +1 -5
- package/dist/phone.esm.js +3 -10
- package/dist/{phoneManager-_KtitbUA.d.ts → phoneManager-BBU8Lq0O.d.ts} +4 -7
- package/dist/{phoneManager-CRblfdcI.esm.js → phoneManager-Cpiai2IM.esm.js} +82 -12
- package/dist/{phoneStateMachine-DjFGWMjQ.esm.js → phoneStateMachine-E1fUUcNM.esm.js} +7 -9
- package/dist/{platform-0Ot-bF_a.esm.js → platform-BJrm5nzZ.esm.js} +31 -11
- package/dist/privacyLensWorker-DI-Rg83h.esm.js +355 -0
- package/dist/qe-signature.d.ts +4 -6
- package/dist/qe-signature.esm.js +10 -11
- package/dist/{recordingService-CxaYkITO.esm.js → recordingService-CFpfdXSS.esm.js} +13 -31
- package/dist/redirect-to-mobile.d.ts +2 -6
- package/dist/redirect-to-mobile.esm.js +3 -10
- package/dist/{redirectToMobileManager-dv29o_LS.d.ts → redirectToMobileManager-BD2PvT5B.d.ts} +8 -44
- package/dist/{redirectToMobileManager-DbuNUlru.esm.js → redirectToMobileManager-C0dfc7f6.esm.js} +28 -8
- package/dist/{redirectToMobileStateMachine-BRaIJWOM.esm.js → redirectToMobileStateMachine-C9SYCJcH.esm.js} +74 -18
- package/dist/rolldown-runtime-FZ4Itg2g.esm.js +42 -0
- package/dist/{runChildModule-kojSv3MH.esm.js → runChildModule-DpvgAGFA.esm.js} +10 -9
- package/dist/{WasmUtilProvider-BgzcXBdl.esm.js → safeStorage-Ep56I-f_.esm.js} +98 -473
- package/dist/selfie.d.ts +8 -21
- package/dist/selfie.esm.js +40 -47
- package/dist/selfieErrorUtils-C2PYBVsp.esm.js +90 -0
- package/dist/{selfieManager-B1Px3GGa.esm.js → selfieManager-Br4onIMy.esm.js} +7 -10
- package/dist/{selfieManager-4juKfrHG.d.ts → selfieManager-DwlCppg0.d.ts} +3 -4
- package/dist/{selfieStateMachine-D0TS93Tu.esm.js → selfieStateMachine-CNGs8vFK.esm.js} +14 -29
- package/dist/{session-CLsU2Jnb.esm.js → session-CX2H3tmI.esm.js} +16 -7
- package/dist/session.d.ts +12 -10
- package/dist/session.esm.js +5 -15
- package/dist/sessionInitializer-CV6Rj_dn.esm.js +1865 -0
- package/dist/{setup-CfNsYAeB.esm.js → setup-CYdVacqv.esm.js} +319 -137
- package/dist/{setup-CmA2apmN.d.ts → setup-DywQeePQ.d.ts} +186 -4
- package/dist/signature.d.ts +2 -96
- package/dist/signature.esm.js +3 -108
- package/dist/signatureManager-DGBSWz2_.d.ts +106 -0
- package/dist/signatureManager-DdPgcmou.esm.js +113 -0
- package/dist/{signatureStateMachine-CdhlMih-.esm.js → signatureStateMachine-Cf73DGWO.esm.js} +5 -7
- package/dist/spawn-D9jgw9pW.d.ts +1441 -0
- package/dist/src-0Jurt29N.esm.js +4482 -0
- package/dist/{stats-BVy52wLy.esm.js → stats-B0nFKawG.esm.js} +3 -5
- package/dist/stats.esm.js +2 -5
- package/dist/topLevelStateName-B5i2avbh.esm.js +41 -0
- package/dist/{tri-CFAPtAUM.esm.js → tri-4RsGrIt6.esm.js} +3 -119
- package/dist/tri.d.ts +2 -2
- package/dist/tri.esm-BIjHhBJ2.esm.js +2620 -0
- package/dist/tri.esm.js +2 -4
- package/dist/trueSight-B8G85W4z.esm.js +1 -0
- package/dist/trueSightService-6dTpiaTh.esm.js +1894 -0
- package/dist/trust-graph.d.ts +4 -5
- package/dist/trust-graph.esm.js +13 -9
- package/dist/types-BEwVKkLJ.d.ts +15 -0
- package/dist/{types-BKLb3C42.esm.js → types-BN5RPPIZ.esm.js} +1 -2
- package/dist/types-BSBzhHRH.d.ts +57 -0
- package/dist/types-BX_XkMsQ2.d.ts +21 -0
- package/dist/types-BfHiko5D.d.ts +48 -0
- package/dist/{types-D8Cl1N2Z.d.ts → types-BfgmV7s72.d.ts} +2 -2
- package/dist/types-CJ7Yl9K-2.d.ts +164 -0
- package/dist/types-DPIDuhut.d.ts +40 -0
- package/dist/types-DVmXIdzW.d.ts +82 -0
- package/dist/types-DelMqZLe.d.ts +105 -0
- package/dist/types-EELWyWpd.d.ts +6 -0
- package/dist/{types-fO6KIdol.d.ts → types-Hmd7U0JA.d.ts} +80 -6
- package/dist/{types-BUgeB2X6.d.ts → types-KPvmag_B.d.ts} +7 -7
- package/dist/types-M6eb82ra2.d.ts +589 -0
- package/dist/{types-DV3wkhQ4.d.ts → types-Vb4P9ovf.d.ts} +1 -3
- package/dist/{urlUtils-CpiYwn7w.esm.js → urlUtils-D6phjq1-.esm.js} +1 -2
- package/dist/{video-ZY92rkel.esm.js → video-BtSWtHy1.esm.js} +1 -2
- package/dist/video-selfie.d.ts +71 -117
- package/dist/video-selfie.esm.js +575 -643
- package/dist/videoSelfieCameraWarmer-h_VUk5Vu.esm.js +651 -0
- package/dist/videoSelfieStepDetector-D3oo2ofo.d.ts +123 -0
- package/dist/wasm.d.ts +2 -4
- package/dist/wasm.esm.js +4 -15
- package/dist/wasmDefaults-DTUrftxR.esm.js +125 -0
- package/dist/{wasmDsFlagSync-Ch0mFJNT.esm.js → wasmDsFlagSync-BqUCwLY8.esm.js} +2 -4
- package/dist/wasmWebClient-DM8lkb0z.esm.js +407 -0
- package/dist/watchlist-for-business.d.ts +1 -3
- package/dist/watchlist-for-business.esm.js +9 -9
- package/dist/watchlist.d.ts +1 -52
- package/dist/watchlist.esm.js +3 -70
- package/dist/{watchlistForBusinessStateMachine-R1Yp1g5A.esm.js → watchlistForBusinessStateMachine-BcBMkMvV.esm.js} +5 -7
- package/dist/watchlistManager-CjSMmbyq.esm.js +83 -0
- package/dist/watchlistManager-DLXef90v.d.ts +68 -0
- package/dist/{watchlistStateMachine-D07UVq1m.esm.js → watchlistStateMachine-Bl7Wy9Cm.esm.js} +5 -7
- package/dist/workflow.d.ts +239 -203
- package/dist/workflow.esm.js +156 -101
- package/dist/xstate-actors.esm-CtI5S0f4.esm.js +310 -0
- package/dist/{xstate.esm-nY3M5UYm.esm.js → xstate.esm-Cf4e0Cfd.esm.js} +136 -610
- package/package.json +14 -9
- package/dist/Actor-BwgmOPkb.d.ts +0 -2
- package/dist/Face2DProvider-CZU11g6r.esm.js +0 -824
- package/dist/FaceDetectionProvider-CPWg-PAH.d.ts +0 -119
- package/dist/IWasmUtilCapability-DaSNxgA8.d.ts +0 -150
- package/dist/PrivacyLensProvider-B_zrV25p.esm.js +0 -339
- package/dist/StateMachine-D5WO6lHS.d.ts +0 -2
- package/dist/StreamCanvasCapture-DHaWferF.d.ts +0 -42
- package/dist/ae-signature-Pp4oCAHD.esm.js +0 -12
- package/dist/api-DsbUi7TO.esm.js +0 -72
- package/dist/browser-DlFgHpoC-Br3G10gw.esm.js +0 -1425
- package/dist/browserSimulation-DZwEy9bu.esm.js +0 -2804
- package/dist/camera-CxxXV0VN.esm.js +0 -79
- package/dist/canvas-90BqS0NF.d.ts +0 -112
- package/dist/chunk-CIKcdghV.esm.js +0 -49
- package/dist/clientLifecycle-VyzRfALg.esm.js +0 -534
- package/dist/cpf-ocr.d.ts +0 -10
- package/dist/cpf-ocr.esm.js +0 -8
- package/dist/cpfOcrManager-9eM4z4o7.esm.js +0 -190
- package/dist/cpfOcrManager-C5U9E0hf.d.ts +0 -216
- package/dist/createFaceAvatar-BZSg2MNo.esm.js +0 -46
- package/dist/deepsightLoader-CU_tiLMx.esm.js +0 -62
- package/dist/flowServices-DkQmOkLV.esm.js +0 -208
- package/dist/geolocationManager-DaHYFkVO.d.ts +0 -156
- package/dist/getDeviceClass-DIjnTPjR.esm.js +0 -14
- package/dist/http-CnsKEaJY.esm.js +0 -0
- package/dist/idCaptureManager-CwuXtVu6.d.ts +0 -1013
- package/dist/index-BAyZ8_iI.d.ts +0 -93
- package/dist/openviduLazy-jPgABwrt.esm.js +0 -3
- package/dist/openviduLazy-wEojM41w.esm.js +0 -12
- package/dist/qe-signature-BnWIpR-O.esm.js +0 -12
- package/dist/sessionInitializer-Dj7-aJaP.esm.js +0 -547
- package/dist/tri.esm-DDJ1zOqG.esm.js +0 -2593
- package/dist/types-BcF-fii5.d.ts +0 -5
- package/dist/videoSelfieSteps-Djpv7cjb.esm.js +0 -58
- /package/dist/{IVisibilityObserverCapability-BZ1rE7ly.d.ts → IVisibilityObserverCapability-D4tvIB5v.d.ts} +0 -0
- /package/dist/{camera-CKU96nwJ.d.ts → camera-9wWD-pwg.d.ts} +0 -0
- /package/dist/{flowCompletionService-BOSTlAWo.d.ts → flowCompletionService-BlAHsKyv.d.ts} +0 -0
- /package/dist/{types-BgjMAEXl.d.ts → types-Bk_6dmDa.d.ts} +0 -0
- /package/dist/{warmup-Dd0iq6KF.d.ts → warmup-Dv2alr2-.d.ts} +0 -0
|
@@ -0,0 +1,1865 @@
|
|
|
1
|
+
import { E as updateFeatureManagementUser } from "./feature-management-DS_Nj5Gg.esm.js";
|
|
2
|
+
import { c as setToken, r as getToken, t as api } from "./api-Bx3gKW_y.esm.js";
|
|
3
|
+
import { _ as noteTokenActivated, d as fetchFeatureConfig, f as isFeatureEnabled, l as trueSightLog, m as noteEnvironment, p as resetFeatureConfigCache, s as startTrueSightCollection, v as SDK_VERSION } from "./trueSightService-6dTpiaTh.esm.js";
|
|
4
|
+
import { v as addEvent, y as getAnalyticsBatcher } from "./events-CxfNJVZW.esm.js";
|
|
5
|
+
import { t as endpoints } from "./endpoints-CCzL3XD_.esm.js";
|
|
6
|
+
import "./trueSight-B8G85W4z.esm.js";
|
|
7
|
+
import { n as flushDeviceStatsQueue, r as resetDeviceStatsQueue } from "./stats-B0nFKawG.esm.js";
|
|
8
|
+
import { n as UAParser, t as getParsedUserAgent } from "./getParsedUserAgent-pJjATANs.esm.js";
|
|
9
|
+
import { i as isIOS } from "./platform-BJrm5nzZ.esm.js";
|
|
10
|
+
import { t as getUserAgent } from "./getBrowser-Cb8Zgrgp.esm.js";
|
|
11
|
+
import { i as linkSessionWithTRI, r as isTRIStarted } from "./tri-4RsGrIt6.esm.js";
|
|
12
|
+
//#region ../infra/src/providers/browser/BrowserEnvironmentProvider.ts
|
|
13
|
+
var BrowserEnvironmentProvider = class {
|
|
14
|
+
getScreenDimensions() {
|
|
15
|
+
if (typeof screen === "undefined") return {
|
|
16
|
+
width: 0,
|
|
17
|
+
height: 0
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
width: screen.width,
|
|
21
|
+
height: screen.height
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
generateCanvasFingerprint() {
|
|
25
|
+
try {
|
|
26
|
+
if (typeof document === "undefined") return "";
|
|
27
|
+
const canvas = document.createElement("canvas");
|
|
28
|
+
const ctx = canvas.getContext("2d");
|
|
29
|
+
if (!ctx) return "";
|
|
30
|
+
ctx.textBaseline = "top";
|
|
31
|
+
ctx.font = "14px Arial";
|
|
32
|
+
ctx.fillText("fingerprint", 2, 2);
|
|
33
|
+
return canvas.toDataURL().slice(-50);
|
|
34
|
+
} catch {
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
getWebGLRenderer() {
|
|
39
|
+
try {
|
|
40
|
+
if (typeof document === "undefined") return "";
|
|
41
|
+
const canvas = document.createElement("canvas");
|
|
42
|
+
const gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
|
|
43
|
+
if (!gl) return "";
|
|
44
|
+
const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
|
|
45
|
+
if (!debugInfo) return "";
|
|
46
|
+
return gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || "";
|
|
47
|
+
} catch {
|
|
48
|
+
return "";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
getWindowProperty(prop) {
|
|
52
|
+
if (typeof window === "undefined") return;
|
|
53
|
+
return window[prop];
|
|
54
|
+
}
|
|
55
|
+
getNavigatorProperty(prop) {
|
|
56
|
+
if (typeof navigator === "undefined") return;
|
|
57
|
+
return navigator[prop];
|
|
58
|
+
}
|
|
59
|
+
getNavigatorPrefixes() {
|
|
60
|
+
if (typeof navigator === "undefined") return {
|
|
61
|
+
webkit: false,
|
|
62
|
+
moz: false,
|
|
63
|
+
o: false,
|
|
64
|
+
ms: false
|
|
65
|
+
};
|
|
66
|
+
const nav = navigator;
|
|
67
|
+
return {
|
|
68
|
+
webkit: nav.webkitGetUserMedia !== void 0,
|
|
69
|
+
moz: nav.mozGetUserMedia !== void 0,
|
|
70
|
+
o: nav.oGetUserMedia !== void 0,
|
|
71
|
+
ms: nav.msGetUserMedia !== void 0
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
getMaxTouchPoints() {
|
|
75
|
+
if (typeof navigator === "undefined") return 0;
|
|
76
|
+
return navigator.maxTouchPoints;
|
|
77
|
+
}
|
|
78
|
+
hasOnTouchStart() {
|
|
79
|
+
if (typeof window !== "undefined" && "ontouchstart" in window) return true;
|
|
80
|
+
if (typeof document !== "undefined") return "ontouchstart" in document.documentElement;
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
getNavigatorProductSub() {
|
|
84
|
+
if (typeof navigator === "undefined") return;
|
|
85
|
+
return navigator.productSub;
|
|
86
|
+
}
|
|
87
|
+
getEvalToStringLength() {
|
|
88
|
+
return eval.toString().length;
|
|
89
|
+
}
|
|
90
|
+
tryFirefoxToSource() {
|
|
91
|
+
try {
|
|
92
|
+
throw "a";
|
|
93
|
+
} catch (err) {
|
|
94
|
+
try {
|
|
95
|
+
err.toSource();
|
|
96
|
+
return true;
|
|
97
|
+
} catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async fetchJson(url, timeoutMs = 3e3) {
|
|
103
|
+
try {
|
|
104
|
+
if (typeof fetch === "undefined") return null;
|
|
105
|
+
const controller = new AbortController();
|
|
106
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
107
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
108
|
+
clearTimeout(timeoutId);
|
|
109
|
+
return await response.json();
|
|
110
|
+
} catch {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async enumerateVideoDeviceLabels() {
|
|
115
|
+
try {
|
|
116
|
+
if (typeof navigator === "undefined" || !navigator.mediaDevices?.enumerateDevices) return [];
|
|
117
|
+
return (await navigator.mediaDevices.enumerateDevices()).filter((device) => device.kind === "videoinput").map((device) => device.label);
|
|
118
|
+
} catch {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
getTimestamp() {
|
|
123
|
+
return Date.now();
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region ../infra/src/providers/browser/BrowserInfoProvider.ts
|
|
128
|
+
var BrowserInfoProvider = class {
|
|
129
|
+
checkWebRtcSupport() {
|
|
130
|
+
if (typeof window === "undefined") return false;
|
|
131
|
+
const hasRTCPeerConnection = "RTCPeerConnection" in window || "webkitRTCPeerConnection" in window || "mozRTCPeerConnection" in window;
|
|
132
|
+
const hasGetUserMedia = typeof navigator !== "undefined" && navigator.mediaDevices?.getUserMedia !== void 0;
|
|
133
|
+
return hasRTCPeerConnection && hasGetUserMedia;
|
|
134
|
+
}
|
|
135
|
+
getBrowserInfo() {
|
|
136
|
+
const userAgent = typeof navigator !== "undefined" ? navigator.userAgent : "";
|
|
137
|
+
const result = new UAParser(userAgent).getResult();
|
|
138
|
+
return {
|
|
139
|
+
userAgent,
|
|
140
|
+
isWebRtcSupported: this.checkWebRtcSupport(),
|
|
141
|
+
browser: {
|
|
142
|
+
name: result.browser.name,
|
|
143
|
+
version: result.browser.version
|
|
144
|
+
},
|
|
145
|
+
os: {
|
|
146
|
+
name: result.os.name,
|
|
147
|
+
version: result.os.version
|
|
148
|
+
},
|
|
149
|
+
device: {
|
|
150
|
+
model: result.device.model,
|
|
151
|
+
type: result.device.type,
|
|
152
|
+
vendor: result.device.vendor
|
|
153
|
+
},
|
|
154
|
+
engine: {
|
|
155
|
+
name: result.engine.name,
|
|
156
|
+
version: result.engine.version
|
|
157
|
+
},
|
|
158
|
+
cpu: { architecture: result.cpu.architecture }
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region ../infra/src/device/getDeviceData.ts
|
|
164
|
+
const HIGH_ENTROPY_HINTS = /* @__PURE__ */ new Set([
|
|
165
|
+
"model",
|
|
166
|
+
"platformVersion",
|
|
167
|
+
"fullVersionList",
|
|
168
|
+
"brands",
|
|
169
|
+
"platform"
|
|
170
|
+
]);
|
|
171
|
+
function getFallbackDeviceInfo() {
|
|
172
|
+
const parsed = getParsedUserAgent();
|
|
173
|
+
return {
|
|
174
|
+
device: { model: parsed.device.model },
|
|
175
|
+
os: {
|
|
176
|
+
name: parsed.os.name,
|
|
177
|
+
version: parsed.os.version
|
|
178
|
+
},
|
|
179
|
+
browser: {
|
|
180
|
+
name: parsed.browser.name,
|
|
181
|
+
version: parsed.browser.version
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function sanitizeString(value) {
|
|
186
|
+
return value?.trim() || void 0;
|
|
187
|
+
}
|
|
188
|
+
function extractPrimaryBrandInfo(fullVersionList, brands) {
|
|
189
|
+
const primaryBrand = fullVersionList?.[0] || brands?.[0];
|
|
190
|
+
return {
|
|
191
|
+
name: sanitizeString(primaryBrand?.brand),
|
|
192
|
+
version: sanitizeString(primaryBrand?.version)
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
async function getHighEntropyDeviceInfo(userAgentData) {
|
|
196
|
+
const highEntropyValues = await userAgentData.getHighEntropyValues(Array.from(HIGH_ENTROPY_HINTS));
|
|
197
|
+
const { name: browserName, version: browserVersion } = extractPrimaryBrandInfo(highEntropyValues.fullVersionList, userAgentData.brands);
|
|
198
|
+
return {
|
|
199
|
+
device: { model: sanitizeString(highEntropyValues.model) },
|
|
200
|
+
os: {
|
|
201
|
+
name: sanitizeString(highEntropyValues.platform),
|
|
202
|
+
version: sanitizeString(highEntropyValues.platformVersion)
|
|
203
|
+
},
|
|
204
|
+
browser: {
|
|
205
|
+
name: browserName,
|
|
206
|
+
version: browserVersion
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const checkForUnbrandedBrowser = (browser) => {
|
|
211
|
+
const userAgent = typeof navigator !== "undefined" ? navigator.userAgent : "";
|
|
212
|
+
const fallback = getFallbackDeviceInfo();
|
|
213
|
+
if (!userAgent) return browser;
|
|
214
|
+
try {
|
|
215
|
+
return {
|
|
216
|
+
...browser,
|
|
217
|
+
name: fallback.browser.name,
|
|
218
|
+
version: fallback.browser.version
|
|
219
|
+
};
|
|
220
|
+
} catch {
|
|
221
|
+
return {
|
|
222
|
+
...browser,
|
|
223
|
+
name: "Unknown",
|
|
224
|
+
version: "Unknown"
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
function mergeDeviceInfo(fallback, enhanced) {
|
|
229
|
+
return {
|
|
230
|
+
device: { model: enhanced.device?.model || fallback.device.model },
|
|
231
|
+
os: {
|
|
232
|
+
name: enhanced.os?.name || fallback.os.name,
|
|
233
|
+
version: enhanced.os?.version || fallback.os.version
|
|
234
|
+
},
|
|
235
|
+
browser: checkForUnbrandedBrowser({
|
|
236
|
+
name: enhanced.browser?.name || fallback.browser.name,
|
|
237
|
+
version: enhanced.browser?.version || fallback.browser.version
|
|
238
|
+
})
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function isUserAgentClientHintsSupported(navigator) {
|
|
242
|
+
return Boolean(navigator.userAgentData?.getHighEntropyValues && typeof navigator.userAgentData.getHighEntropyValues === "function");
|
|
243
|
+
}
|
|
244
|
+
async function getDeviceFingerprintInfo() {
|
|
245
|
+
if (typeof navigator === "undefined") return {
|
|
246
|
+
device: {},
|
|
247
|
+
os: {},
|
|
248
|
+
browser: {}
|
|
249
|
+
};
|
|
250
|
+
const customNavigator = navigator;
|
|
251
|
+
const fallbackInfo = getFallbackDeviceInfo();
|
|
252
|
+
if (!isUserAgentClientHintsSupported(customNavigator)) return fallbackInfo;
|
|
253
|
+
try {
|
|
254
|
+
return mergeDeviceInfo(fallbackInfo, await getHighEntropyDeviceInfo(customNavigator.userAgentData));
|
|
255
|
+
} catch {
|
|
256
|
+
return fallbackInfo;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//#endregion
|
|
260
|
+
//#region ../../node_modules/.pnpm/@thumbmarkjs+thumbmarkjs@1.6.4/node_modules/@thumbmarkjs/thumbmarkjs/dist/thumbmark.esm.js
|
|
261
|
+
const e = 2592e5;
|
|
262
|
+
const t = "thumbmark";
|
|
263
|
+
const n = "https://api.thumbmarkjs.com";
|
|
264
|
+
const o = {
|
|
265
|
+
exclude: [],
|
|
266
|
+
include: [],
|
|
267
|
+
stabilize: ["private", "iframe"],
|
|
268
|
+
logging: !0,
|
|
269
|
+
timeout: 5e3,
|
|
270
|
+
cache_api_call: !0,
|
|
271
|
+
cache_lifetime_in_ms: 0,
|
|
272
|
+
performance: !1,
|
|
273
|
+
experimental: !1,
|
|
274
|
+
property_name_factory: (e) => `${t}_${e}`
|
|
275
|
+
};
|
|
276
|
+
({ ...o });
|
|
277
|
+
const a = {
|
|
278
|
+
private: [
|
|
279
|
+
{
|
|
280
|
+
exclude: ["canvas"],
|
|
281
|
+
browsers: [
|
|
282
|
+
"firefox",
|
|
283
|
+
"safari>=17",
|
|
284
|
+
"brave"
|
|
285
|
+
]
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
exclude: ["audio"],
|
|
289
|
+
browsers: ["samsungbrowser", "safari"]
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
exclude: ["fonts"],
|
|
293
|
+
browsers: ["firefox"]
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
exclude: [
|
|
297
|
+
"audio.sampleHash",
|
|
298
|
+
"hardware.deviceMemory",
|
|
299
|
+
"header.acceptLanguage.q",
|
|
300
|
+
"system.hardwareConcurrency",
|
|
301
|
+
"plugins"
|
|
302
|
+
],
|
|
303
|
+
browsers: ["brave"]
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
exclude: ["tls.extensions"],
|
|
307
|
+
browsers: [
|
|
308
|
+
"firefox",
|
|
309
|
+
"chrome",
|
|
310
|
+
"safari"
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
exclude: ["header.acceptLanguage"],
|
|
315
|
+
browsers: ["edge", "chrome"]
|
|
316
|
+
}
|
|
317
|
+
],
|
|
318
|
+
iframe: [{
|
|
319
|
+
exclude: ["system.applePayVersion", "system.cookieEnabled"],
|
|
320
|
+
browsers: ["safari"]
|
|
321
|
+
}, { exclude: ["permissions"] }],
|
|
322
|
+
vpn: [{ exclude: ["ip"] }]
|
|
323
|
+
};
|
|
324
|
+
const s = "undefined" != typeof window ? window.OfflineAudioContext || window.webkitOfflineAudioContext : null;
|
|
325
|
+
function c(e) {
|
|
326
|
+
let t = 0;
|
|
327
|
+
for (let n = 0; n < e.length; ++n) t += Math.abs(e[n]);
|
|
328
|
+
return t;
|
|
329
|
+
}
|
|
330
|
+
function l(e, t, n) {
|
|
331
|
+
let o = [];
|
|
332
|
+
for (let t = 0; t < e[0].data.length; t++) {
|
|
333
|
+
let n = [];
|
|
334
|
+
for (let o = 0; o < e.length; o++) n.push(e[o].data[t]);
|
|
335
|
+
o.push(u(n));
|
|
336
|
+
}
|
|
337
|
+
const r = new Uint8ClampedArray(o);
|
|
338
|
+
return new ImageData(r, t, n);
|
|
339
|
+
}
|
|
340
|
+
function u(e) {
|
|
341
|
+
if (0 === e.length) return 0;
|
|
342
|
+
const t = {};
|
|
343
|
+
for (const n of e) t[n] = (t[n] || 0) + 1;
|
|
344
|
+
let n = e[0];
|
|
345
|
+
for (const e in t) t[e] > t[n] && (n = parseInt(e, 10));
|
|
346
|
+
return n;
|
|
347
|
+
}
|
|
348
|
+
function d(e) {
|
|
349
|
+
return e ^= e >>> 16, e = Math.imul(e, 2246822507), e ^= e >>> 13, e = Math.imul(e, 3266489909), (e ^= e >>> 16) >>> 0;
|
|
350
|
+
}
|
|
351
|
+
const m = new Uint32Array([
|
|
352
|
+
597399067,
|
|
353
|
+
2869860233,
|
|
354
|
+
951274213,
|
|
355
|
+
2716044179
|
|
356
|
+
]);
|
|
357
|
+
function f(e, t) {
|
|
358
|
+
return e << t | e >>> 32 - t;
|
|
359
|
+
}
|
|
360
|
+
function h(e, t = 0) {
|
|
361
|
+
if (t = t ? 0 | t : 0, "string" == typeof e && (e = function(e) {
|
|
362
|
+
if ("undefined" != typeof TextEncoder) return new TextEncoder().encode(e).buffer;
|
|
363
|
+
const t = [];
|
|
364
|
+
for (let n = 0; n < e.length; n++) {
|
|
365
|
+
let o = e.charCodeAt(n);
|
|
366
|
+
o < 128 ? t.push(o) : o < 2048 ? t.push(192 | o >> 6, 128 | 63 & o) : o < 55296 || o >= 57344 ? t.push(224 | o >> 12, 128 | o >> 6 & 63, 128 | 63 & o) : (n++, o = 65536 + ((1023 & o) << 10 | 1023 & e.charCodeAt(n)), t.push(240 | o >> 18, 128 | o >> 12 & 63, 128 | o >> 6 & 63, 128 | 63 & o));
|
|
367
|
+
}
|
|
368
|
+
return new Uint8Array(t).buffer;
|
|
369
|
+
}(e)), !(e instanceof ArrayBuffer)) throw new TypeError("Expected key to be ArrayBuffer or string");
|
|
370
|
+
const n = new Uint32Array([
|
|
371
|
+
t,
|
|
372
|
+
t,
|
|
373
|
+
t,
|
|
374
|
+
t
|
|
375
|
+
]);
|
|
376
|
+
(function(e, t) {
|
|
377
|
+
const n = e.byteLength / 16 | 0, o = new Uint32Array(e, 0, 4 * n);
|
|
378
|
+
for (let e = 0; e < n; e++) {
|
|
379
|
+
const n = o.subarray(4 * e, 4 * (e + 1));
|
|
380
|
+
n[0] = Math.imul(n[0], m[0]), n[0] = f(n[0], 15), n[0] = Math.imul(n[0], m[1]), t[0] = t[0] ^ n[0], t[0] = f(t[0], 19), t[0] = t[0] + t[1], t[0] = Math.imul(t[0], 5) + 1444728091, n[1] = Math.imul(n[1], m[1]), n[1] = f(n[1], 16), n[1] = Math.imul(n[1], m[2]), t[1] = t[1] ^ n[1], t[1] = f(t[1], 17), t[1] = t[1] + t[2], t[1] = Math.imul(t[1], 5) + 197830471, n[2] = Math.imul(n[2], m[2]), n[2] = f(n[2], 17), n[2] = Math.imul(n[2], m[3]), t[2] = t[2] ^ n[2], t[2] = f(t[2], 15), t[2] = t[2] + t[3], t[2] = Math.imul(t[2], 5) + 2530024501, n[3] = Math.imul(n[3], m[3]), n[3] = f(n[3], 18), n[3] = Math.imul(n[3], m[0]), t[3] = t[3] ^ n[3], t[3] = f(t[3], 13), t[3] = t[3] + t[0], t[3] = Math.imul(t[3], 5) + 850148119;
|
|
381
|
+
}
|
|
382
|
+
})(e, n), function(e, t) {
|
|
383
|
+
const n = e.byteLength / 16 | 0, o = e.byteLength % 16, r = /* @__PURE__ */ new Uint32Array(4), i = new Uint8Array(e, 16 * n, o);
|
|
384
|
+
switch (o) {
|
|
385
|
+
case 15: r[3] = r[3] ^ i[14] << 16;
|
|
386
|
+
case 14: r[3] = r[3] ^ i[13] << 8;
|
|
387
|
+
case 13: r[3] = r[3] ^ i[12], r[3] = Math.imul(r[3], m[3]), r[3] = f(r[3], 18), r[3] = Math.imul(r[3], m[0]), t[3] = t[3] ^ r[3];
|
|
388
|
+
case 12: r[2] = r[2] ^ i[11] << 24;
|
|
389
|
+
case 11: r[2] = r[2] ^ i[10] << 16;
|
|
390
|
+
case 10: r[2] = r[2] ^ i[9] << 8;
|
|
391
|
+
case 9: r[2] = r[2] ^ i[8], r[2] = Math.imul(r[2], m[2]), r[2] = f(r[2], 17), r[2] = Math.imul(r[2], m[3]), t[2] = t[2] ^ r[2];
|
|
392
|
+
case 8: r[1] = r[1] ^ i[7] << 24;
|
|
393
|
+
case 7: r[1] = r[1] ^ i[6] << 16;
|
|
394
|
+
case 6: r[1] = r[1] ^ i[5] << 8;
|
|
395
|
+
case 5: r[1] = r[1] ^ i[4], r[1] = Math.imul(r[1], m[1]), r[1] = f(r[1], 16), r[1] = Math.imul(r[1], m[2]), t[1] = t[1] ^ r[1];
|
|
396
|
+
case 4: r[0] = r[0] ^ i[3] << 24;
|
|
397
|
+
case 3: r[0] = r[0] ^ i[2] << 16;
|
|
398
|
+
case 2: r[0] = r[0] ^ i[1] << 8;
|
|
399
|
+
case 1: r[0] = r[0] ^ i[0], r[0] = Math.imul(r[0], m[0]), r[0] = f(r[0], 15), r[0] = Math.imul(r[0], m[1]), t[0] = t[0] ^ r[0];
|
|
400
|
+
}
|
|
401
|
+
}(e, n), function(e, t) {
|
|
402
|
+
t[0] = t[0] ^ e.byteLength, t[1] = t[1] ^ e.byteLength, t[2] = t[2] ^ e.byteLength, t[3] = t[3] ^ e.byteLength, t[0] = t[0] + t[1] | 0, t[0] = t[0] + t[2] | 0, t[0] = t[0] + t[3] | 0, t[1] = t[1] + t[0] | 0, t[2] = t[2] + t[0] | 0, t[3] = t[3] + t[0] | 0, t[0] = d(t[0]), t[1] = d(t[1]), t[2] = d(t[2]), t[3] = d(t[3]), t[0] = t[0] + t[1] | 0, t[0] = t[0] + t[2] | 0, t[0] = t[0] + t[3] | 0, t[1] = t[1] + t[0] | 0, t[2] = t[2] + t[0] | 0, t[3] = t[3] + t[0] | 0;
|
|
403
|
+
}(e, n);
|
|
404
|
+
const o = new Uint8Array(n.buffer);
|
|
405
|
+
return Array.from(o).map(((e) => e.toString(16).padStart(2, "0"))).join("");
|
|
406
|
+
}
|
|
407
|
+
const p = 280;
|
|
408
|
+
async function g(e) {
|
|
409
|
+
for (var t; !document.body;) await w(50);
|
|
410
|
+
const n = document.createElement("iframe");
|
|
411
|
+
n.setAttribute("frameBorder", "0");
|
|
412
|
+
const o = n.style;
|
|
413
|
+
o.setProperty("position", "fixed"), o.setProperty("display", "block", "important"), o.setProperty("visibility", "visible"), o.setProperty("border", "0"), o.setProperty("opacity", "0"), n.src = "about:blank", document.body.appendChild(n);
|
|
414
|
+
const r = n.contentDocument || (null === (t = n.contentWindow) || void 0 === t ? void 0 : t.document);
|
|
415
|
+
if (!r) throw new Error("Iframe document is not accessible");
|
|
416
|
+
e({ iframe: r }), setTimeout((() => {
|
|
417
|
+
document.body.removeChild(n);
|
|
418
|
+
}), 0);
|
|
419
|
+
}
|
|
420
|
+
function w(e, t) {
|
|
421
|
+
return new Promise(((n) => setTimeout(n, e, t)));
|
|
422
|
+
}
|
|
423
|
+
const v = [
|
|
424
|
+
"Arial",
|
|
425
|
+
"Arial Black",
|
|
426
|
+
"Arial Narrow",
|
|
427
|
+
"Arial Rounded MT",
|
|
428
|
+
"Arimo",
|
|
429
|
+
"Archivo",
|
|
430
|
+
"Barlow",
|
|
431
|
+
"Bebas Neue",
|
|
432
|
+
"Bitter",
|
|
433
|
+
"Bookman",
|
|
434
|
+
"Calibri",
|
|
435
|
+
"Cabin",
|
|
436
|
+
"Candara",
|
|
437
|
+
"Century",
|
|
438
|
+
"Century Gothic",
|
|
439
|
+
"Comic Sans MS",
|
|
440
|
+
"Constantia",
|
|
441
|
+
"Courier",
|
|
442
|
+
"Courier New",
|
|
443
|
+
"Crimson Text",
|
|
444
|
+
"DM Mono",
|
|
445
|
+
"DM Sans",
|
|
446
|
+
"DM Serif Display",
|
|
447
|
+
"DM Serif Text",
|
|
448
|
+
"Dosis",
|
|
449
|
+
"Droid Sans",
|
|
450
|
+
"Exo",
|
|
451
|
+
"Fira Code",
|
|
452
|
+
"Fira Sans",
|
|
453
|
+
"Franklin Gothic Medium",
|
|
454
|
+
"Garamond",
|
|
455
|
+
"Geneva",
|
|
456
|
+
"Georgia",
|
|
457
|
+
"Gill Sans",
|
|
458
|
+
"Helvetica",
|
|
459
|
+
"Impact",
|
|
460
|
+
"Inconsolata",
|
|
461
|
+
"Indie Flower",
|
|
462
|
+
"Inter",
|
|
463
|
+
"Josefin Sans",
|
|
464
|
+
"Karla",
|
|
465
|
+
"Lato",
|
|
466
|
+
"Lexend",
|
|
467
|
+
"Lucida Bright",
|
|
468
|
+
"Lucida Console",
|
|
469
|
+
"Lucida Sans Unicode",
|
|
470
|
+
"Manrope",
|
|
471
|
+
"Merriweather",
|
|
472
|
+
"Merriweather Sans",
|
|
473
|
+
"Montserrat",
|
|
474
|
+
"Myriad",
|
|
475
|
+
"Noto Sans",
|
|
476
|
+
"Nunito",
|
|
477
|
+
"Nunito Sans",
|
|
478
|
+
"Open Sans",
|
|
479
|
+
"Optima",
|
|
480
|
+
"Orbitron",
|
|
481
|
+
"Oswald",
|
|
482
|
+
"Pacifico",
|
|
483
|
+
"Palatino",
|
|
484
|
+
"Perpetua",
|
|
485
|
+
"PT Sans",
|
|
486
|
+
"PT Serif",
|
|
487
|
+
"Poppins",
|
|
488
|
+
"Prompt",
|
|
489
|
+
"Public Sans",
|
|
490
|
+
"Quicksand",
|
|
491
|
+
"Rajdhani",
|
|
492
|
+
"Recursive",
|
|
493
|
+
"Roboto",
|
|
494
|
+
"Roboto Condensed",
|
|
495
|
+
"Rockwell",
|
|
496
|
+
"Rubik",
|
|
497
|
+
"Segoe Print",
|
|
498
|
+
"Segoe Script",
|
|
499
|
+
"Segoe UI",
|
|
500
|
+
"Sora",
|
|
501
|
+
"Source Sans Pro",
|
|
502
|
+
"Space Mono",
|
|
503
|
+
"Tahoma",
|
|
504
|
+
"Taviraj",
|
|
505
|
+
"Times",
|
|
506
|
+
"Times New Roman",
|
|
507
|
+
"Titillium Web",
|
|
508
|
+
"Trebuchet MS",
|
|
509
|
+
"Ubuntu",
|
|
510
|
+
"Varela Round",
|
|
511
|
+
"Verdana",
|
|
512
|
+
"Work Sans"
|
|
513
|
+
];
|
|
514
|
+
const y = [
|
|
515
|
+
"monospace",
|
|
516
|
+
"sans-serif",
|
|
517
|
+
"serif"
|
|
518
|
+
];
|
|
519
|
+
function S(e, t) {
|
|
520
|
+
return e.font = `72px ${t}`, e.measureText("WwMmLli0Oo").width;
|
|
521
|
+
}
|
|
522
|
+
function b() {
|
|
523
|
+
var e;
|
|
524
|
+
const t = document.createElement("canvas"), n = null !== (e = t.getContext("webgl")) && void 0 !== e ? e : t.getContext("experimental-webgl");
|
|
525
|
+
if (n && "getParameter" in n) try {
|
|
526
|
+
const e = (n.getParameter(n.VENDOR) || "").toString(), t = (n.getParameter(n.RENDERER) || "").toString();
|
|
527
|
+
let o = {
|
|
528
|
+
vendor: e,
|
|
529
|
+
renderer: t,
|
|
530
|
+
version: (n.getParameter(n.VERSION) || "").toString(),
|
|
531
|
+
shadingLanguageVersion: (n.getParameter(n.SHADING_LANGUAGE_VERSION) || "").toString()
|
|
532
|
+
};
|
|
533
|
+
if (!t.length || !e.length) {
|
|
534
|
+
const e = n.getExtension("WEBGL_debug_renderer_info");
|
|
535
|
+
if (e) {
|
|
536
|
+
const t = (n.getParameter(e.UNMASKED_VENDOR_WEBGL) || "").toString(), r = (n.getParameter(e.UNMASKED_RENDERER_WEBGL) || "").toString();
|
|
537
|
+
t && (o.vendorUnmasked = t), r && (o.rendererUnmasked = r);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
return o;
|
|
541
|
+
} catch (e) {}
|
|
542
|
+
return "undefined";
|
|
543
|
+
}
|
|
544
|
+
function E() {
|
|
545
|
+
const e = /* @__PURE__ */ new Float32Array(1), t = new Uint8Array(e.buffer);
|
|
546
|
+
return e[0] = Infinity, e[0] = e[0] - e[0], t[3];
|
|
547
|
+
}
|
|
548
|
+
const M = (e, t, n, o) => {
|
|
549
|
+
const r = (n - t) / o;
|
|
550
|
+
let i = 0;
|
|
551
|
+
for (let n = 0; n < o; n++) i += e(t + (n + .5) * r);
|
|
552
|
+
return i * r;
|
|
553
|
+
};
|
|
554
|
+
function P(e, t) {
|
|
555
|
+
const n = {};
|
|
556
|
+
return t.forEach(((t) => {
|
|
557
|
+
const o = function(e) {
|
|
558
|
+
if (0 === e.length) return null;
|
|
559
|
+
const t = {};
|
|
560
|
+
e.forEach(((e) => {
|
|
561
|
+
const n = String(e);
|
|
562
|
+
t[n] = (t[n] || 0) + 1;
|
|
563
|
+
}));
|
|
564
|
+
let n = e[0], o = 1;
|
|
565
|
+
return Object.keys(t).forEach(((e) => {
|
|
566
|
+
t[e] > o && (n = e, o = t[e]);
|
|
567
|
+
})), n;
|
|
568
|
+
}(e.map(((e) => t in e ? e[t] : void 0)).filter(((e) => void 0 !== e)));
|
|
569
|
+
o && (n[t] = o);
|
|
570
|
+
})), n;
|
|
571
|
+
}
|
|
572
|
+
const A = [
|
|
573
|
+
"accelerometer",
|
|
574
|
+
"accessibility",
|
|
575
|
+
"accessibility-events",
|
|
576
|
+
"ambient-light-sensor",
|
|
577
|
+
"background-fetch",
|
|
578
|
+
"background-sync",
|
|
579
|
+
"bluetooth",
|
|
580
|
+
"camera",
|
|
581
|
+
"clipboard-read",
|
|
582
|
+
"clipboard-write",
|
|
583
|
+
"device-info",
|
|
584
|
+
"display-capture",
|
|
585
|
+
"gyroscope",
|
|
586
|
+
"geolocation",
|
|
587
|
+
"local-fonts",
|
|
588
|
+
"magnetometer",
|
|
589
|
+
"microphone",
|
|
590
|
+
"midi",
|
|
591
|
+
"nfc",
|
|
592
|
+
"notifications",
|
|
593
|
+
"payment-handler",
|
|
594
|
+
"persistent-storage",
|
|
595
|
+
"push",
|
|
596
|
+
"speaker",
|
|
597
|
+
"storage-access",
|
|
598
|
+
"top-level-storage-access",
|
|
599
|
+
"window-management",
|
|
600
|
+
"query"
|
|
601
|
+
];
|
|
602
|
+
function x() {
|
|
603
|
+
var e, t, n, o, r, i;
|
|
604
|
+
if ("undefined" == typeof navigator) return {
|
|
605
|
+
name: "unknown",
|
|
606
|
+
version: "unknown"
|
|
607
|
+
};
|
|
608
|
+
const a = navigator.userAgent, s = [
|
|
609
|
+
/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,
|
|
610
|
+
/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,
|
|
611
|
+
/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,
|
|
612
|
+
/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,
|
|
613
|
+
/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,
|
|
614
|
+
/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,
|
|
615
|
+
/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,
|
|
616
|
+
/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,
|
|
617
|
+
/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,
|
|
618
|
+
/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,
|
|
619
|
+
/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,
|
|
620
|
+
/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,
|
|
621
|
+
/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,
|
|
622
|
+
/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,
|
|
623
|
+
/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/
|
|
624
|
+
], c = {
|
|
625
|
+
edg: "Edge",
|
|
626
|
+
edga: "Edge",
|
|
627
|
+
edgios: "Edge",
|
|
628
|
+
opr: "Opera",
|
|
629
|
+
opx: "Opera",
|
|
630
|
+
crios: "Chrome",
|
|
631
|
+
fxios: "Firefox",
|
|
632
|
+
samsung: "SamsungBrowser",
|
|
633
|
+
vivaldi: "Vivaldi",
|
|
634
|
+
brave: "Brave"
|
|
635
|
+
};
|
|
636
|
+
for (const l of s) {
|
|
637
|
+
const s = a.match(l);
|
|
638
|
+
if (s) {
|
|
639
|
+
let a = null === (e = s.groups) || void 0 === e ? void 0 : e.name, u = (null === (t = s.groups) || void 0 === t ? void 0 : t.version) || (null === (n = s.groups) || void 0 === n ? void 0 : n.version1) || (null === (o = s.groups) || void 0 === o ? void 0 : o.version2);
|
|
640
|
+
if (a || !(null === (r = s.groups) || void 0 === r ? void 0 : r.version1) && !(null === (i = s.groups) || void 0 === i ? void 0 : i.version2) || (a = "Safari"), !a && l.source.includes("Opera Mini") && (a = "Opera Mini"), !a && l.source.includes("Opera Mobi") && (a = "Opera Mobi"), !a && l.source.includes("Opera") && (a = "Opera"), !a && s[1] && (a = s[1]), !u && s[2] && (u = s[2]), a) return {
|
|
641
|
+
name: c[a.toLowerCase()] || a,
|
|
642
|
+
version: u || "unknown"
|
|
643
|
+
};
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
return {
|
|
647
|
+
name: "unknown",
|
|
648
|
+
version: "unknown"
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
function C() {
|
|
652
|
+
if ("undefined" == typeof navigator || !navigator.userAgent) return !1;
|
|
653
|
+
const e = navigator.userAgent;
|
|
654
|
+
return /Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(e) && !/iPad/i.test(e);
|
|
655
|
+
}
|
|
656
|
+
function _() {
|
|
657
|
+
let e = [];
|
|
658
|
+
const t = {
|
|
659
|
+
"prefers-contrast": [
|
|
660
|
+
"high",
|
|
661
|
+
"more",
|
|
662
|
+
"low",
|
|
663
|
+
"less",
|
|
664
|
+
"forced",
|
|
665
|
+
"no-preference"
|
|
666
|
+
],
|
|
667
|
+
"any-hover": ["hover", "none"],
|
|
668
|
+
"any-pointer": [
|
|
669
|
+
"none",
|
|
670
|
+
"coarse",
|
|
671
|
+
"fine"
|
|
672
|
+
],
|
|
673
|
+
pointer: [
|
|
674
|
+
"none",
|
|
675
|
+
"coarse",
|
|
676
|
+
"fine"
|
|
677
|
+
],
|
|
678
|
+
hover: ["hover", "none"],
|
|
679
|
+
update: ["fast", "slow"],
|
|
680
|
+
"inverted-colors": ["inverted", "none"],
|
|
681
|
+
"prefers-reduced-motion": ["reduce", "no-preference"],
|
|
682
|
+
"prefers-reduced-transparency": ["reduce", "no-preference"],
|
|
683
|
+
scripting: [
|
|
684
|
+
"none",
|
|
685
|
+
"initial-only",
|
|
686
|
+
"enabled"
|
|
687
|
+
],
|
|
688
|
+
"forced-colors": ["active", "none"]
|
|
689
|
+
};
|
|
690
|
+
return Object.keys(t).forEach(((n) => {
|
|
691
|
+
t[n].forEach(((t) => {
|
|
692
|
+
matchMedia(`(${n}: ${t})`).matches && e.push(`${n}: ${t}`);
|
|
693
|
+
}));
|
|
694
|
+
})), e;
|
|
695
|
+
}
|
|
696
|
+
function I() {
|
|
697
|
+
if ("https:" === window.location.protocol && "function" == typeof window.ApplePaySession) try {
|
|
698
|
+
const e = window.ApplePaySession.supportsVersion;
|
|
699
|
+
for (let t = 15; t > 0; t--) if (e(t)) return t;
|
|
700
|
+
} catch (e) {
|
|
701
|
+
return 0;
|
|
702
|
+
}
|
|
703
|
+
return 0;
|
|
704
|
+
}
|
|
705
|
+
const T = "SamsungBrowser" !== x().name ? 1 : 3;
|
|
706
|
+
let R;
|
|
707
|
+
let k = null;
|
|
708
|
+
function O(e) {
|
|
709
|
+
const t = [];
|
|
710
|
+
return function e(n) {
|
|
711
|
+
if (n && n.toJSON && "function" == typeof n.toJSON && (n = n.toJSON()), void 0 === n) return;
|
|
712
|
+
if ("number" == typeof n) return isFinite(n) ? "" + n : "null";
|
|
713
|
+
if ("object" != typeof n) return JSON.stringify(n);
|
|
714
|
+
let o, r;
|
|
715
|
+
if (Array.isArray(n)) {
|
|
716
|
+
for (r = "[", o = 0; o < n.length; o++) o && (r += ","), r += e(n[o]) || "null";
|
|
717
|
+
return r + "]";
|
|
718
|
+
}
|
|
719
|
+
if (null === n) return "null";
|
|
720
|
+
if (-1 !== t.indexOf(n)) throw new TypeError("Converting circular structure to JSON");
|
|
721
|
+
const i = t.push(n) - 1, a = Object.keys(n).sort();
|
|
722
|
+
for (r = "", o = 0; o < a.length; o++) {
|
|
723
|
+
const t = a[o], i = e(n[t]);
|
|
724
|
+
i && (r && (r += ","), r += JSON.stringify(t) + ":" + i);
|
|
725
|
+
}
|
|
726
|
+
return t.splice(i, 1), "{" + r + "}";
|
|
727
|
+
}(e) || "";
|
|
728
|
+
}
|
|
729
|
+
const L = [
|
|
730
|
+
"𝔄",
|
|
731
|
+
"𝔅",
|
|
732
|
+
"ℭ",
|
|
733
|
+
"𝔇",
|
|
734
|
+
"𝔈",
|
|
735
|
+
"𝔉",
|
|
736
|
+
"𝔸",
|
|
737
|
+
"𝔹",
|
|
738
|
+
"ℂ",
|
|
739
|
+
"𝔻",
|
|
740
|
+
"𝔼",
|
|
741
|
+
"𝔽"
|
|
742
|
+
];
|
|
743
|
+
const B = [
|
|
744
|
+
"β",
|
|
745
|
+
"ψ",
|
|
746
|
+
"λ",
|
|
747
|
+
"ε",
|
|
748
|
+
"ζ",
|
|
749
|
+
"α",
|
|
750
|
+
"ξ",
|
|
751
|
+
"μ",
|
|
752
|
+
"ρ",
|
|
753
|
+
"φ",
|
|
754
|
+
"κ",
|
|
755
|
+
"τ",
|
|
756
|
+
"η",
|
|
757
|
+
"σ",
|
|
758
|
+
"ι",
|
|
759
|
+
"ω",
|
|
760
|
+
"γ",
|
|
761
|
+
"ν",
|
|
762
|
+
"χ",
|
|
763
|
+
"δ",
|
|
764
|
+
"θ",
|
|
765
|
+
"π",
|
|
766
|
+
"υ",
|
|
767
|
+
"ο"
|
|
768
|
+
];
|
|
769
|
+
function D(e, t) {
|
|
770
|
+
return `<math><mrow>${t}</mrow></math>`;
|
|
771
|
+
}
|
|
772
|
+
function N() {
|
|
773
|
+
let e = "<mo>∏</mo>";
|
|
774
|
+
return L.forEach(((t, n) => {
|
|
775
|
+
const o = 2 * n, r = B.slice(o, o + 2);
|
|
776
|
+
2 === r.length && (e += `<mmultiscripts><mi>${t}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`);
|
|
777
|
+
})), D(0, `<munderover><mmultiscripts>${e}</mmultiscripts></munderover>`);
|
|
778
|
+
}
|
|
779
|
+
function $() {
|
|
780
|
+
const e = [];
|
|
781
|
+
return L.forEach(((t, n) => {
|
|
782
|
+
const o = 2 * n, r = B.slice(o, o + 2);
|
|
783
|
+
2 === r.length && e.push(D(0, `<mmultiscripts><mi>${t}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`));
|
|
784
|
+
})), e;
|
|
785
|
+
}
|
|
786
|
+
const V = {
|
|
787
|
+
audio: async function() {
|
|
788
|
+
return s ? async function() {
|
|
789
|
+
return new Promise(((e, t) => {
|
|
790
|
+
try {
|
|
791
|
+
const t = new s(1, 5e3, 44100), n = t.createBufferSource(), o = t.createOscillator();
|
|
792
|
+
o.frequency.value = 1e3;
|
|
793
|
+
const r = t.createDynamicsCompressor();
|
|
794
|
+
let i;
|
|
795
|
+
r.threshold.value = -50, r.knee.value = 40, r.ratio.value = 12, r.attack.value = 0, r.release.value = .2, o.connect(r), r.connect(t.destination), o.start(), t.oncomplete = (o) => {
|
|
796
|
+
i = o.renderedBuffer.getChannelData(0), e({
|
|
797
|
+
sampleHash: c(i),
|
|
798
|
+
maxChannels: t.destination.maxChannelCount,
|
|
799
|
+
channelCountMode: n.channelCountMode
|
|
800
|
+
});
|
|
801
|
+
}, t.startRendering();
|
|
802
|
+
} catch (e) {
|
|
803
|
+
console.error("Error creating audio fingerprint:", e), t(e);
|
|
804
|
+
}
|
|
805
|
+
}));
|
|
806
|
+
}() : null;
|
|
807
|
+
},
|
|
808
|
+
canvas: async function() {
|
|
809
|
+
return new Promise(((e) => {
|
|
810
|
+
const t = Array.from({ length: 3 }, (() => function() {
|
|
811
|
+
const e = document.createElement("canvas"), t = e.getContext("2d");
|
|
812
|
+
if (!t) return null;
|
|
813
|
+
e.width = p, e.height = 20;
|
|
814
|
+
const n = t.createLinearGradient(0, 0, e.width, e.height);
|
|
815
|
+
n.addColorStop(0, "red"), n.addColorStop(1 / 6, "orange"), n.addColorStop(2 / 6, "yellow"), n.addColorStop(.5, "green"), n.addColorStop(4 / 6, "blue"), n.addColorStop(5 / 6, "indigo"), n.addColorStop(1, "violet"), t.fillStyle = n, t.fillRect(0, 0, e.width, e.height);
|
|
816
|
+
const o = "Random Text WMwmil10Oo";
|
|
817
|
+
t.font = "23.123px Arial", t.fillStyle = "black", t.fillText(o, -5, 15), t.fillStyle = "rgba(0, 0, 255, 0.5)", t.fillText(o, -3.3, 17.7), t.beginPath(), t.moveTo(0, 0), t.lineTo(2 * e.width / 7, e.height), t.strokeStyle = "white", t.lineWidth = 2, t.stroke();
|
|
818
|
+
return t.getImageData(0, 0, e.width, e.height);
|
|
819
|
+
}())).filter(((e) => null !== e));
|
|
820
|
+
0 !== t.length ? e({ commonPixelsHash: h(l(t, p, 20).data.toString()).toString() }) : e(null);
|
|
821
|
+
}));
|
|
822
|
+
},
|
|
823
|
+
fonts: async function(e) {
|
|
824
|
+
return new Promise(((e) => {
|
|
825
|
+
try {
|
|
826
|
+
g((async ({ iframe: t }) => {
|
|
827
|
+
const n = t.createElement("canvas").getContext("2d");
|
|
828
|
+
if (!n) return void e(null);
|
|
829
|
+
const o = y.map(((e) => S(n, e)));
|
|
830
|
+
let r = {};
|
|
831
|
+
v.forEach(((e) => {
|
|
832
|
+
const t = S(n, e);
|
|
833
|
+
o.includes(t) || (r[e] = t);
|
|
834
|
+
})), e(r);
|
|
835
|
+
}));
|
|
836
|
+
} catch (t) {
|
|
837
|
+
e(null);
|
|
838
|
+
}
|
|
839
|
+
}));
|
|
840
|
+
},
|
|
841
|
+
hardware: function() {
|
|
842
|
+
return new Promise(((e, t) => {
|
|
843
|
+
const n = void 0 !== navigator.deviceMemory ? navigator.deviceMemory : 0, o = window.performance && window.performance.memory ? window.performance.memory : 0;
|
|
844
|
+
e({
|
|
845
|
+
videocard: b(),
|
|
846
|
+
architecture: E(),
|
|
847
|
+
deviceMemory: n.toString() || "undefined",
|
|
848
|
+
jsHeapSizeLimit: o.jsHeapSizeLimit || 0
|
|
849
|
+
});
|
|
850
|
+
}));
|
|
851
|
+
},
|
|
852
|
+
locales: function() {
|
|
853
|
+
return new Promise(((e) => {
|
|
854
|
+
e({
|
|
855
|
+
languages: navigator.language,
|
|
856
|
+
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
857
|
+
});
|
|
858
|
+
}));
|
|
859
|
+
},
|
|
860
|
+
math: function() {
|
|
861
|
+
return new Promise(((e) => {
|
|
862
|
+
e({
|
|
863
|
+
acos: Math.acos(.5),
|
|
864
|
+
asin: M(Math.asin, -1, 1, 97),
|
|
865
|
+
cos: M(Math.cos, 0, Math.PI, 97),
|
|
866
|
+
largeCos: Math.cos(0x56bc75e2d63100000),
|
|
867
|
+
largeSin: Math.sin(0x56bc75e2d63100000),
|
|
868
|
+
largeTan: Math.tan(0x56bc75e2d63100000),
|
|
869
|
+
sin: M(Math.sin, -Math.PI, Math.PI, 97),
|
|
870
|
+
tan: M(Math.tan, 0, 2 * Math.PI, 97)
|
|
871
|
+
});
|
|
872
|
+
}));
|
|
873
|
+
},
|
|
874
|
+
permissions: async function(e) {
|
|
875
|
+
const t = (null == e ? void 0 : e.permissions_to_check) || A;
|
|
876
|
+
return P(await Promise.all(Array.from({ length: 3 }, (() => async function(e) {
|
|
877
|
+
const t = {};
|
|
878
|
+
for (const n of e) try {
|
|
879
|
+
t[n] = (await navigator.permissions.query({ name: n })).state.toString();
|
|
880
|
+
} catch (e) {}
|
|
881
|
+
return t;
|
|
882
|
+
}(t)))), t);
|
|
883
|
+
},
|
|
884
|
+
plugins: async function() {
|
|
885
|
+
const e = [];
|
|
886
|
+
if (navigator.plugins) for (let t = 0; t < navigator.plugins.length; t++) {
|
|
887
|
+
const n = navigator.plugins[t];
|
|
888
|
+
e.push([
|
|
889
|
+
n.name,
|
|
890
|
+
n.filename,
|
|
891
|
+
n.description
|
|
892
|
+
].join("|"));
|
|
893
|
+
}
|
|
894
|
+
return new Promise(((t) => {
|
|
895
|
+
t({ plugins: e });
|
|
896
|
+
}));
|
|
897
|
+
},
|
|
898
|
+
screen: function() {
|
|
899
|
+
return new Promise(((e) => {
|
|
900
|
+
if ("undefined" == typeof matchMedia || "undefined" == typeof screen) return void e(null);
|
|
901
|
+
const t = {
|
|
902
|
+
is_touchscreen: navigator.maxTouchPoints > 0,
|
|
903
|
+
maxTouchPoints: navigator.maxTouchPoints,
|
|
904
|
+
colorDepth: screen.colorDepth,
|
|
905
|
+
mediaMatches: _()
|
|
906
|
+
};
|
|
907
|
+
C() && navigator.maxTouchPoints > 0 && (t.resolution = function() {
|
|
908
|
+
const e = window.screen.width, t = window.screen.height;
|
|
909
|
+
return `${Math.max(e, t).toString()}x${Math.min(e, t).toString()}`;
|
|
910
|
+
}()), e(t);
|
|
911
|
+
}));
|
|
912
|
+
},
|
|
913
|
+
system: function() {
|
|
914
|
+
return new Promise(((e) => {
|
|
915
|
+
const t = x();
|
|
916
|
+
e({
|
|
917
|
+
platform: window.navigator.platform,
|
|
918
|
+
productSub: navigator.productSub,
|
|
919
|
+
product: navigator.product,
|
|
920
|
+
useragent: navigator.userAgent,
|
|
921
|
+
hardwareConcurrency: navigator.hardwareConcurrency,
|
|
922
|
+
browser: {
|
|
923
|
+
name: t.name,
|
|
924
|
+
version: t.version
|
|
925
|
+
},
|
|
926
|
+
mobile: C(),
|
|
927
|
+
applePayVersion: I(),
|
|
928
|
+
cookieEnabled: window.navigator.cookieEnabled
|
|
929
|
+
});
|
|
930
|
+
}));
|
|
931
|
+
},
|
|
932
|
+
webgl: async function() {
|
|
933
|
+
"undefined" != typeof document && (R = document.createElement("canvas"), R.width = 200, R.height = 100, k = R.getContext("webgl"));
|
|
934
|
+
try {
|
|
935
|
+
if (!k) throw new Error("WebGL not supported");
|
|
936
|
+
return { commonPixelsHash: h(l(Array.from({ length: T }, (() => function() {
|
|
937
|
+
try {
|
|
938
|
+
if (!k) throw new Error("WebGL not supported");
|
|
939
|
+
const e = "\n attribute vec2 position;\n void main() {\n gl_Position = vec4(position, 0.0, 1.0);\n }\n ", t = "\n precision mediump float;\n void main() {\n gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color\n }\n ", n = k.createShader(k.VERTEX_SHADER), o = k.createShader(k.FRAGMENT_SHADER);
|
|
940
|
+
if (!n || !o) throw new Error("Failed to create shaders");
|
|
941
|
+
if (k.shaderSource(n, e), k.shaderSource(o, t), k.compileShader(n), !k.getShaderParameter(n, k.COMPILE_STATUS)) throw new Error("Vertex shader compilation failed: " + k.getShaderInfoLog(n));
|
|
942
|
+
if (k.compileShader(o), !k.getShaderParameter(o, k.COMPILE_STATUS)) throw new Error("Fragment shader compilation failed: " + k.getShaderInfoLog(o));
|
|
943
|
+
const r = k.createProgram();
|
|
944
|
+
if (!r) throw new Error("Failed to create shader program");
|
|
945
|
+
if (k.attachShader(r, n), k.attachShader(r, o), k.linkProgram(r), !k.getProgramParameter(r, k.LINK_STATUS)) throw new Error("Shader program linking failed: " + k.getProgramInfoLog(r));
|
|
946
|
+
k.useProgram(r);
|
|
947
|
+
const i = 137, a = new Float32Array(4 * i), s = 2 * Math.PI / i;
|
|
948
|
+
for (let e = 0; e < i; e++) {
|
|
949
|
+
const t = e * s;
|
|
950
|
+
a[4 * e] = 0, a[4 * e + 1] = 0, a[4 * e + 2] = Math.cos(t) * (R.width / 2), a[4 * e + 3] = Math.sin(t) * (R.height / 2);
|
|
951
|
+
}
|
|
952
|
+
const c = k.createBuffer();
|
|
953
|
+
k.bindBuffer(k.ARRAY_BUFFER, c), k.bufferData(k.ARRAY_BUFFER, a, k.STATIC_DRAW);
|
|
954
|
+
const l = k.getAttribLocation(r, "position");
|
|
955
|
+
k.enableVertexAttribArray(l), k.vertexAttribPointer(l, 2, k.FLOAT, !1, 0, 0), k.viewport(0, 0, R.width, R.height), k.clearColor(0, 0, 0, 1), k.clear(k.COLOR_BUFFER_BIT), k.drawArrays(k.LINES, 0, 2 * i);
|
|
956
|
+
const u = new Uint8ClampedArray(R.width * R.height * 4);
|
|
957
|
+
k.readPixels(0, 0, R.width, R.height, k.RGBA, k.UNSIGNED_BYTE, u);
|
|
958
|
+
return new ImageData(u, R.width, R.height);
|
|
959
|
+
} catch (e) {
|
|
960
|
+
return new ImageData(1, 1);
|
|
961
|
+
} finally {
|
|
962
|
+
k && (k.bindBuffer(k.ARRAY_BUFFER, null), k.useProgram(null), k.viewport(0, 0, k.drawingBufferWidth, k.drawingBufferHeight), k.clearColor(0, 0, 0, 0));
|
|
963
|
+
}
|
|
964
|
+
}())), R.width, R.height).data.toString()).toString() };
|
|
965
|
+
} catch (e) {
|
|
966
|
+
return { webgl: "unsupported" };
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
};
|
|
970
|
+
const F = {
|
|
971
|
+
webrtc: async function() {
|
|
972
|
+
return new Promise(((e) => {
|
|
973
|
+
try {
|
|
974
|
+
const t = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
|
|
975
|
+
if (!t) return void e({
|
|
976
|
+
supported: !1,
|
|
977
|
+
error: "WebRTC not supported"
|
|
978
|
+
});
|
|
979
|
+
const n = new t({
|
|
980
|
+
iceCandidatePoolSize: 1,
|
|
981
|
+
iceServers: []
|
|
982
|
+
});
|
|
983
|
+
n.createDataChannel("");
|
|
984
|
+
(async () => {
|
|
985
|
+
try {
|
|
986
|
+
const o = await n.createOffer({
|
|
987
|
+
offerToReceiveAudio: !0,
|
|
988
|
+
offerToReceiveVideo: !0
|
|
989
|
+
});
|
|
990
|
+
await n.setLocalDescription(o);
|
|
991
|
+
const r = o.sdp || "", i = [...new Set((r.match(/extmap:\d+ [^\n\r]+/g) || []).map(((e) => e.replace(/extmap:\d+ /, ""))))].sort(), a = (e) => {
|
|
992
|
+
const t = r.match(new RegExp(`m=${e} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));
|
|
993
|
+
return t ? t[1].split(" ") : [];
|
|
994
|
+
}, s = (e, t) => t.map(((t) => {
|
|
995
|
+
const n = new RegExp(`(rtpmap|fmtp|rtcp-fb):${t} (.+)`, "g"), o = [...r.matchAll(n)];
|
|
996
|
+
if (!o.length) return null;
|
|
997
|
+
const i = {};
|
|
998
|
+
return o.forEach(((t) => {
|
|
999
|
+
const [n, o, r] = t, a = r.split("/");
|
|
1000
|
+
"rtpmap" === o ? (i.mimeType = `${e}/${a[0]}`, i.clockRate = +a[1], "audio" === e && (i.channels = +a[2] || 1)) : "rtcp-fb" === o ? (i.feedbackSupport = i.feedbackSupport || [], i.feedbackSupport.push(r)) : "fmtp" === o && (i.sdpFmtpLine = r);
|
|
1001
|
+
})), i;
|
|
1002
|
+
})).filter(Boolean), c = s("audio", a("audio")), l = s("video", a("video")), u = {
|
|
1003
|
+
audio: {
|
|
1004
|
+
count: c.length,
|
|
1005
|
+
hash: h(O(c))
|
|
1006
|
+
},
|
|
1007
|
+
video: {
|
|
1008
|
+
count: l.length,
|
|
1009
|
+
hash: h(O(l))
|
|
1010
|
+
},
|
|
1011
|
+
extensionsHash: h(O(i))
|
|
1012
|
+
}, d = await new Promise(((e) => {
|
|
1013
|
+
const t = setTimeout((() => {
|
|
1014
|
+
n.removeEventListener("icecandidate", o), n.close(), e({
|
|
1015
|
+
supported: !0,
|
|
1016
|
+
...u,
|
|
1017
|
+
timeout: !0
|
|
1018
|
+
});
|
|
1019
|
+
}), 3e3), o = (r) => {
|
|
1020
|
+
const i = r.candidate;
|
|
1021
|
+
i && i.candidate && (clearTimeout(t), n.removeEventListener("icecandidate", o), n.close(), e({
|
|
1022
|
+
supported: !0,
|
|
1023
|
+
...u,
|
|
1024
|
+
candidateType: i.type || ""
|
|
1025
|
+
}));
|
|
1026
|
+
};
|
|
1027
|
+
n.addEventListener("icecandidate", o);
|
|
1028
|
+
}));
|
|
1029
|
+
e({
|
|
1030
|
+
details: d,
|
|
1031
|
+
hash: h(O(d))
|
|
1032
|
+
});
|
|
1033
|
+
} catch (t) {
|
|
1034
|
+
n.close(), e({
|
|
1035
|
+
supported: !0,
|
|
1036
|
+
error: `WebRTC offer failed: ${t.message}`
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
})();
|
|
1040
|
+
} catch (t) {
|
|
1041
|
+
e({
|
|
1042
|
+
supported: !1,
|
|
1043
|
+
error: `WebRTC error: ${t.message}`
|
|
1044
|
+
});
|
|
1045
|
+
}
|
|
1046
|
+
}));
|
|
1047
|
+
},
|
|
1048
|
+
mathml: async function() {
|
|
1049
|
+
return new Promise(((e) => {
|
|
1050
|
+
try {
|
|
1051
|
+
g((async ({ iframe: t }) => {
|
|
1052
|
+
try {
|
|
1053
|
+
if (!function(e) {
|
|
1054
|
+
try {
|
|
1055
|
+
const t = e.createElement("math");
|
|
1056
|
+
t.innerHTML = "<mrow><mi>x</mi></mrow>", t.style.position = "absolute", t.style.visibility = "hidden", e.body.appendChild(t);
|
|
1057
|
+
const n = t.getBoundingClientRect();
|
|
1058
|
+
return e.body.removeChild(t), n.width > 0 && n.height > 0;
|
|
1059
|
+
} catch (e) {
|
|
1060
|
+
return !1;
|
|
1061
|
+
}
|
|
1062
|
+
}(t)) return void e({
|
|
1063
|
+
supported: !1,
|
|
1064
|
+
error: "MathML not supported"
|
|
1065
|
+
});
|
|
1066
|
+
const n = [
|
|
1067
|
+
D("integral", "<msubsup><mo>∫</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),
|
|
1068
|
+
D("fraction", "<mfrac><mrow><mi>π</mi><mo>×</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>σ</mi></mrow></mfrac>"),
|
|
1069
|
+
D("matrix", "<mo>[</mo><mtable><mtr><mtd><mi>α</mi></mtd><mtd><mi>β</mi></mtd></mtr><mtr><mtd><mi>γ</mi></mtd><mtd><mi>δ</mi></mtd></mtr></mtable><mo>]</mo>"),
|
|
1070
|
+
N(),
|
|
1071
|
+
...$()
|
|
1072
|
+
], o = [];
|
|
1073
|
+
let r = "";
|
|
1074
|
+
n.forEach(((e, n) => {
|
|
1075
|
+
const i = function(e, t) {
|
|
1076
|
+
try {
|
|
1077
|
+
const n = t.createElement("math");
|
|
1078
|
+
n.innerHTML = e.replace(/<\/?math>/g, ""), n.style.whiteSpace = "nowrap", n.style.position = "absolute", n.style.visibility = "hidden", n.style.top = "-9999px", t.body.appendChild(n);
|
|
1079
|
+
const o = n.getBoundingClientRect(), r = (t.defaultView || window).getComputedStyle(n), i = {
|
|
1080
|
+
dimensions: {
|
|
1081
|
+
width: o.width,
|
|
1082
|
+
height: o.height
|
|
1083
|
+
},
|
|
1084
|
+
fontInfo: {
|
|
1085
|
+
fontFamily: r.fontFamily,
|
|
1086
|
+
fontSize: r.fontSize,
|
|
1087
|
+
fontWeight: r.fontWeight,
|
|
1088
|
+
fontStyle: r.fontStyle,
|
|
1089
|
+
lineHeight: r.lineHeight,
|
|
1090
|
+
fontVariant: r.fontVariant || "normal",
|
|
1091
|
+
fontStretch: r.fontStretch || "normal",
|
|
1092
|
+
fontSizeAdjust: r.fontSizeAdjust || "none",
|
|
1093
|
+
textRendering: r.textRendering || "auto",
|
|
1094
|
+
fontFeatureSettings: r.fontFeatureSettings || "normal",
|
|
1095
|
+
fontVariantNumeric: r.fontVariantNumeric || "normal",
|
|
1096
|
+
fontKerning: r.fontKerning || "auto"
|
|
1097
|
+
}
|
|
1098
|
+
};
|
|
1099
|
+
return t.body.removeChild(n), i;
|
|
1100
|
+
} catch (e) {
|
|
1101
|
+
return { error: e.message };
|
|
1102
|
+
}
|
|
1103
|
+
}(e, t);
|
|
1104
|
+
o.push({
|
|
1105
|
+
width: i.dimensions.width,
|
|
1106
|
+
height: i.dimensions.height
|
|
1107
|
+
}), 0 === n && i.fontInfo && (r = h(O(i.fontInfo)));
|
|
1108
|
+
}));
|
|
1109
|
+
const i = {
|
|
1110
|
+
fontStyleHash: r,
|
|
1111
|
+
dimensions: o
|
|
1112
|
+
};
|
|
1113
|
+
e({
|
|
1114
|
+
details: i,
|
|
1115
|
+
hash: h(O(i))
|
|
1116
|
+
});
|
|
1117
|
+
} catch (t) {
|
|
1118
|
+
e({
|
|
1119
|
+
supported: !1,
|
|
1120
|
+
error: `MathML error: ${t.message}`
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
1123
|
+
}));
|
|
1124
|
+
} catch (t) {
|
|
1125
|
+
e({
|
|
1126
|
+
supported: !1,
|
|
1127
|
+
error: `MathML error: ${t.message}`
|
|
1128
|
+
});
|
|
1129
|
+
}
|
|
1130
|
+
}));
|
|
1131
|
+
},
|
|
1132
|
+
speech: async function() {
|
|
1133
|
+
return new Promise(((e) => {
|
|
1134
|
+
try {
|
|
1135
|
+
if ("undefined" == typeof window || !window.speechSynthesis || "function" != typeof window.speechSynthesis.getVoices) return void e({
|
|
1136
|
+
supported: !1,
|
|
1137
|
+
error: "Speech Synthesis API not supported"
|
|
1138
|
+
});
|
|
1139
|
+
let t = !1, n = null;
|
|
1140
|
+
const o = (o) => {
|
|
1141
|
+
if (!t) {
|
|
1142
|
+
t = !0, n && clearTimeout(n);
|
|
1143
|
+
try {
|
|
1144
|
+
const t = o.map(((e) => {
|
|
1145
|
+
const t = (e) => e.replace(/\\/g, "\\\\").replace(/,/g, "\\,");
|
|
1146
|
+
return [
|
|
1147
|
+
t(e.voiceURI || ""),
|
|
1148
|
+
t(e.name || ""),
|
|
1149
|
+
t(e.lang || ""),
|
|
1150
|
+
e.localService ? "1" : "0",
|
|
1151
|
+
e.default ? "1" : "0"
|
|
1152
|
+
].join(",");
|
|
1153
|
+
}));
|
|
1154
|
+
t.sort();
|
|
1155
|
+
const n = {
|
|
1156
|
+
voiceCount: o.length,
|
|
1157
|
+
voicesHash: h(O(t))
|
|
1158
|
+
};
|
|
1159
|
+
e({
|
|
1160
|
+
details: n,
|
|
1161
|
+
hash: h(O(n))
|
|
1162
|
+
});
|
|
1163
|
+
} catch (t) {
|
|
1164
|
+
e({
|
|
1165
|
+
supported: !0,
|
|
1166
|
+
error: `Voice processing failed: ${t.message}`
|
|
1167
|
+
});
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
}, r = window.speechSynthesis.getVoices();
|
|
1171
|
+
if (r.length > 0) return void o(r);
|
|
1172
|
+
n = setTimeout((() => {
|
|
1173
|
+
const e = window.speechSynthesis.getVoices();
|
|
1174
|
+
o(e);
|
|
1175
|
+
}), 800);
|
|
1176
|
+
const i = () => {
|
|
1177
|
+
window.speechSynthesis.removeEventListener("voiceschanged", i);
|
|
1178
|
+
const e = window.speechSynthesis.getVoices();
|
|
1179
|
+
o(e);
|
|
1180
|
+
};
|
|
1181
|
+
window.speechSynthesis.addEventListener("voiceschanged", i);
|
|
1182
|
+
} catch (t) {
|
|
1183
|
+
e({
|
|
1184
|
+
supported: !1,
|
|
1185
|
+
error: `Speech Synthesis error: ${t.message}`
|
|
1186
|
+
});
|
|
1187
|
+
}
|
|
1188
|
+
}));
|
|
1189
|
+
}
|
|
1190
|
+
};
|
|
1191
|
+
const U = {};
|
|
1192
|
+
const j = { timeout: "true" };
|
|
1193
|
+
const W = (e, t, n) => {
|
|
1194
|
+
U[e] = t;
|
|
1195
|
+
};
|
|
1196
|
+
function G(e, t) {
|
|
1197
|
+
var n;
|
|
1198
|
+
let o = x();
|
|
1199
|
+
if ("unknown" === o.name && e.system && "object" == typeof e.system && !Array.isArray(e.system)) {
|
|
1200
|
+
const t = e.system.browser;
|
|
1201
|
+
if (t && "object" == typeof t && !Array.isArray(t)) {
|
|
1202
|
+
const e = t;
|
|
1203
|
+
o = {
|
|
1204
|
+
name: e.name || "unknown",
|
|
1205
|
+
version: e.version || "unknown"
|
|
1206
|
+
};
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
const r = o.name.toLowerCase(), i = o.version.split(".")[0] || "0", s = parseInt(i, 10), c = [...(null == t ? void 0 : t.exclude) || []], l = (null == t ? void 0 : t.stabilize) || [], u = (null == t ? void 0 : t.include) || [];
|
|
1210
|
+
for (const e of l) {
|
|
1211
|
+
const t = a[e];
|
|
1212
|
+
if (t) for (const e of t) {
|
|
1213
|
+
const t = !("browsers" in e), o = !t && (null === (n = e.browsers) || void 0 === n ? void 0 : n.some(((e) => {
|
|
1214
|
+
const t = e.match(/(.+?)(>=)(\d+)/);
|
|
1215
|
+
if (t) {
|
|
1216
|
+
const [, e, , n] = t;
|
|
1217
|
+
return r === e && s >= parseInt(n, 10);
|
|
1218
|
+
}
|
|
1219
|
+
return r === e;
|
|
1220
|
+
})));
|
|
1221
|
+
(t || o) && c.push(...e.exclude);
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
return function e(t, n = "") {
|
|
1225
|
+
const o = {};
|
|
1226
|
+
for (const [r, i] of Object.entries(t)) {
|
|
1227
|
+
const t = n ? `${n}.${r}` : r;
|
|
1228
|
+
if ("object" != typeof i || Array.isArray(i) || null === i) {
|
|
1229
|
+
const e = c.some(((e) => t.startsWith(e))), n = u.some(((e) => t.startsWith(e)));
|
|
1230
|
+
e && !n || (o[r] = i);
|
|
1231
|
+
} else {
|
|
1232
|
+
const n = e(i, t);
|
|
1233
|
+
Object.keys(n).length > 0 && (o[r] = n);
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
return o;
|
|
1237
|
+
}(e);
|
|
1238
|
+
}
|
|
1239
|
+
const z = "visitor_id";
|
|
1240
|
+
function J(e) {
|
|
1241
|
+
return e.storage_property_name ? e.storage_property_name : e.property_name_factory(z);
|
|
1242
|
+
}
|
|
1243
|
+
const q = `${t}_${z}`;
|
|
1244
|
+
function K(e, t) {
|
|
1245
|
+
try {
|
|
1246
|
+
localStorage.setItem(J(t), e);
|
|
1247
|
+
} catch (e) {}
|
|
1248
|
+
}
|
|
1249
|
+
const Y = "cache";
|
|
1250
|
+
function X(e) {
|
|
1251
|
+
try {
|
|
1252
|
+
const t = localStorage.getItem(e.property_name_factory(Y));
|
|
1253
|
+
return JSON.parse(t) || {};
|
|
1254
|
+
} catch (e) {}
|
|
1255
|
+
return {};
|
|
1256
|
+
}
|
|
1257
|
+
function Z(t) {
|
|
1258
|
+
return t.cache_lifetime_in_ms > e ? Date.now() + e : Date.now() + t.cache_lifetime_in_ms;
|
|
1259
|
+
}
|
|
1260
|
+
let Q = null;
|
|
1261
|
+
let ee = null;
|
|
1262
|
+
const te = (e, t) => {
|
|
1263
|
+
if (e.cache_api_call) {
|
|
1264
|
+
if (ee) return Promise.resolve(ee);
|
|
1265
|
+
const t = function(e) {
|
|
1266
|
+
const t = X(e);
|
|
1267
|
+
if (t && t.apiResponse && t.apiResponseExpiry && Date.now() <= t.apiResponseExpiry) return t.apiResponse;
|
|
1268
|
+
}(e);
|
|
1269
|
+
if (t) return Promise.resolve(t);
|
|
1270
|
+
if (Q) return Q;
|
|
1271
|
+
}
|
|
1272
|
+
const o = `${e.api_endpoint || n}/thumbmark`, r = function(e) {
|
|
1273
|
+
try {
|
|
1274
|
+
const t = J(e);
|
|
1275
|
+
let n = localStorage.getItem(t);
|
|
1276
|
+
return n || t === q || (n = localStorage.getItem(q), n && K(n, e)), n;
|
|
1277
|
+
} catch (e) {
|
|
1278
|
+
return null;
|
|
1279
|
+
}
|
|
1280
|
+
}(e), i = {
|
|
1281
|
+
components: t,
|
|
1282
|
+
options: e,
|
|
1283
|
+
clientHash: h(O(t)),
|
|
1284
|
+
version: "1.6.3"
|
|
1285
|
+
};
|
|
1286
|
+
r && (i.visitorId = r);
|
|
1287
|
+
const a = fetch(o, {
|
|
1288
|
+
method: "POST",
|
|
1289
|
+
headers: {
|
|
1290
|
+
"x-api-key": e.api_key,
|
|
1291
|
+
Authorization: "custom-authorized",
|
|
1292
|
+
"Content-Type": "application/json"
|
|
1293
|
+
},
|
|
1294
|
+
body: JSON.stringify(i)
|
|
1295
|
+
}).then(((e) => {
|
|
1296
|
+
if (!e.ok) {
|
|
1297
|
+
if (403 === e.status) throw new Error("INVALID_API_KEY");
|
|
1298
|
+
throw new Error(`HTTP error! status: ${e.status}`);
|
|
1299
|
+
}
|
|
1300
|
+
return e.json();
|
|
1301
|
+
})).then(((t) => (t.visitorId && t.visitorId !== r && K(t.visitorId, e), ee = t, function(e, t) {
|
|
1302
|
+
if (!e.cache_api_call || !e.cache_lifetime_in_ms) return;
|
|
1303
|
+
(function(e, t) {
|
|
1304
|
+
const n = {
|
|
1305
|
+
...X(e),
|
|
1306
|
+
...t
|
|
1307
|
+
};
|
|
1308
|
+
try {
|
|
1309
|
+
localStorage.setItem(e.property_name_factory(Y), JSON.stringify(n));
|
|
1310
|
+
} catch (e) {}
|
|
1311
|
+
})(e, {
|
|
1312
|
+
apiResponseExpiry: Z(e),
|
|
1313
|
+
apiResponse: t
|
|
1314
|
+
});
|
|
1315
|
+
}(e, t), Q = null, t))).catch(((e) => {
|
|
1316
|
+
if (console.error("Error fetching pro data", e), Q = null, "INVALID_API_KEY" === e.message) throw e;
|
|
1317
|
+
return null;
|
|
1318
|
+
})), s = e.timeout || 5e3, c = new Promise(((t) => {
|
|
1319
|
+
setTimeout((() => {
|
|
1320
|
+
const n = X(e);
|
|
1321
|
+
n && n.apiResponse ? t(n.apiResponse) : t({
|
|
1322
|
+
info: { timed_out: !0 },
|
|
1323
|
+
...r && { visitorId: r }
|
|
1324
|
+
});
|
|
1325
|
+
}), s);
|
|
1326
|
+
}));
|
|
1327
|
+
return Q = Promise.race([a, c]), Q;
|
|
1328
|
+
};
|
|
1329
|
+
async function ne(e) {
|
|
1330
|
+
var t;
|
|
1331
|
+
if ("undefined" == typeof document || "undefined" == typeof window) return {
|
|
1332
|
+
thumbmark: "",
|
|
1333
|
+
components: {},
|
|
1334
|
+
info: {},
|
|
1335
|
+
version: "1.6.3",
|
|
1336
|
+
error: "Browser environment required"
|
|
1337
|
+
};
|
|
1338
|
+
const r = {
|
|
1339
|
+
...o,
|
|
1340
|
+
...e
|
|
1341
|
+
}, i = r.logging && !sessionStorage.getItem("_tmjs_l") && Math.random() < 1e-4, { elapsed: s, resolvedComponents: c } = await oe({
|
|
1342
|
+
...V,
|
|
1343
|
+
...U
|
|
1344
|
+
}, r);
|
|
1345
|
+
let l = {}, u = {};
|
|
1346
|
+
if (i || r.experimental) {
|
|
1347
|
+
const { elapsed: e, resolvedComponents: t } = await oe(F, r);
|
|
1348
|
+
l = t, u = e;
|
|
1349
|
+
}
|
|
1350
|
+
const d = r.api_key ? te(r, c) : null;
|
|
1351
|
+
let m = null;
|
|
1352
|
+
if (d) try {
|
|
1353
|
+
m = await d;
|
|
1354
|
+
} catch (e) {
|
|
1355
|
+
if (e instanceof Error && "INVALID_API_KEY" === e.message) return {
|
|
1356
|
+
error: "Invalid API key or quota exceeded",
|
|
1357
|
+
components: {},
|
|
1358
|
+
info: {},
|
|
1359
|
+
version: "1.6.3",
|
|
1360
|
+
thumbmark: ""
|
|
1361
|
+
};
|
|
1362
|
+
throw e;
|
|
1363
|
+
}
|
|
1364
|
+
const f = {
|
|
1365
|
+
...s,
|
|
1366
|
+
...u
|
|
1367
|
+
}, p = r.performance ? { elapsed: f } : {}, g = G((null == m ? void 0 : m.components) || {}, r), w = {
|
|
1368
|
+
...c,
|
|
1369
|
+
...g
|
|
1370
|
+
}, v = (null == m ? void 0 : m.info) || { uniqueness: { score: "api only" } }, y = null !== (t = null == m ? void 0 : m.thumbmark) && void 0 !== t ? t : h(O(w));
|
|
1371
|
+
i && async function(e, t, o, r = {}) {
|
|
1372
|
+
var i;
|
|
1373
|
+
const a = `${n}/log`, s = {
|
|
1374
|
+
thumbmark: e,
|
|
1375
|
+
components: t,
|
|
1376
|
+
experimental: r,
|
|
1377
|
+
version: "1.6.3",
|
|
1378
|
+
options: o,
|
|
1379
|
+
path: null === (i = null === window || void 0 === window ? void 0 : window.location) || void 0 === i ? void 0 : i.pathname
|
|
1380
|
+
};
|
|
1381
|
+
sessionStorage.setItem("_tmjs_l", "1");
|
|
1382
|
+
try {
|
|
1383
|
+
await fetch(a, {
|
|
1384
|
+
method: "POST",
|
|
1385
|
+
headers: { "Content-Type": "application/json" },
|
|
1386
|
+
body: JSON.stringify(s)
|
|
1387
|
+
});
|
|
1388
|
+
} catch (e) {}
|
|
1389
|
+
}(y, w, r, l).catch((() => {}));
|
|
1390
|
+
return {
|
|
1391
|
+
...(null == m ? void 0 : m.visitorId) && { visitorId: m.visitorId },
|
|
1392
|
+
thumbmark: y,
|
|
1393
|
+
components: w,
|
|
1394
|
+
info: v,
|
|
1395
|
+
version: "1.6.3",
|
|
1396
|
+
...p,
|
|
1397
|
+
...Object.keys(l).length > 0 && r.experimental && { experimental: l },
|
|
1398
|
+
...(null == m ? void 0 : m.requestId) && { requestId: m.requestId }
|
|
1399
|
+
};
|
|
1400
|
+
}
|
|
1401
|
+
async function oe(e, t) {
|
|
1402
|
+
const n = {
|
|
1403
|
+
...o,
|
|
1404
|
+
...t
|
|
1405
|
+
}, r = Object.entries(e).filter((([e]) => {
|
|
1406
|
+
var t;
|
|
1407
|
+
return !(null === (t = null == n ? void 0 : n.exclude) || void 0 === t ? void 0 : t.includes(e));
|
|
1408
|
+
})).filter((([e]) => {
|
|
1409
|
+
var t, o, r, i;
|
|
1410
|
+
return (null === (t = null == n ? void 0 : n.include) || void 0 === t ? void 0 : t.some(((e) => e.includes(".")))) ? null === (o = null == n ? void 0 : n.include) || void 0 === o ? void 0 : o.some(((t) => t.startsWith(e))) : 0 === (null === (r = null == n ? void 0 : n.include) || void 0 === r ? void 0 : r.length) || (null === (i = null == n ? void 0 : n.include) || void 0 === i ? void 0 : i.includes(e));
|
|
1411
|
+
})), i = r.map((([e]) => e)), s = await function(e, t, n) {
|
|
1412
|
+
return Promise.all(e.map(((e) => {
|
|
1413
|
+
const o = performance.now();
|
|
1414
|
+
return Promise.race([e.then(((e) => ({
|
|
1415
|
+
value: e,
|
|
1416
|
+
elapsed: performance.now() - o
|
|
1417
|
+
}))), (r = t, i = n, new Promise(((e) => {
|
|
1418
|
+
setTimeout((() => e(i)), r);
|
|
1419
|
+
}))).then(((e) => ({
|
|
1420
|
+
value: e,
|
|
1421
|
+
elapsed: performance.now() - o
|
|
1422
|
+
})))]);
|
|
1423
|
+
var r, i;
|
|
1424
|
+
})));
|
|
1425
|
+
}(r.map((([e, n]) => n(t))), (null == n ? void 0 : n.timeout) || 5e3, j), c = {}, l = {};
|
|
1426
|
+
s.forEach(((e, t) => {
|
|
1427
|
+
var n;
|
|
1428
|
+
null != e.value && (l[i[t]] = e.value, c[i[t]] = null !== (n = e.elapsed) && void 0 !== n ? n : 0);
|
|
1429
|
+
}));
|
|
1430
|
+
return {
|
|
1431
|
+
elapsed: c,
|
|
1432
|
+
resolvedComponents: G(l, n)
|
|
1433
|
+
};
|
|
1434
|
+
}
|
|
1435
|
+
var se = class {
|
|
1436
|
+
constructor(e) {
|
|
1437
|
+
this.options = {
|
|
1438
|
+
...o,
|
|
1439
|
+
...e
|
|
1440
|
+
};
|
|
1441
|
+
}
|
|
1442
|
+
async get(e) {
|
|
1443
|
+
return ne({
|
|
1444
|
+
...this.options,
|
|
1445
|
+
...e
|
|
1446
|
+
});
|
|
1447
|
+
}
|
|
1448
|
+
getVersion() {
|
|
1449
|
+
return "1.6.3";
|
|
1450
|
+
}
|
|
1451
|
+
includeComponent(e, t) {
|
|
1452
|
+
W(e, t);
|
|
1453
|
+
}
|
|
1454
|
+
};
|
|
1455
|
+
//#endregion
|
|
1456
|
+
//#region ../infra/src/providers/browser/thumbmarkAdapter.ts
|
|
1457
|
+
/**
|
|
1458
|
+
* Adapter for @thumbmarkjs/thumbmarkjs. Single point of dependency so bundlers
|
|
1459
|
+
* resolve it from infra's node_modules when building apps that depend on core → infra.
|
|
1460
|
+
*/
|
|
1461
|
+
const THUMBMARK_ALGORITHM = {
|
|
1462
|
+
algorithmName: "thumbmarkjs",
|
|
1463
|
+
algorithmVersion: "1.6.4"
|
|
1464
|
+
};
|
|
1465
|
+
/**
|
|
1466
|
+
* `logging` must stay disabled. With it on (the upstream default) `getThumbmark()`
|
|
1467
|
+
* evaluates a bare, unguarded storage read:
|
|
1468
|
+
*
|
|
1469
|
+
* options.logging && !sessionStorage.getItem("_tmjs_l") && Math.random() < 1e-4
|
|
1470
|
+
*
|
|
1471
|
+
* Hosts that delete the bare global as a self-XSS mitigation (`delete
|
|
1472
|
+
* window.sessionStorage`) make that a `ReferenceError`, which would cost us the
|
|
1473
|
+
* device fingerprint. `logging: false` short-circuits the expression before the
|
|
1474
|
+
* read. It also stops upstream's 1-in-10 000 telemetry POST to
|
|
1475
|
+
* api.thumbmarkjs.com. Re-check this when bumping the dependency.
|
|
1476
|
+
*/
|
|
1477
|
+
const THUMBMARK_OPTIONS = { logging: false };
|
|
1478
|
+
async function getThumbmarkId() {
|
|
1479
|
+
return (await new se(THUMBMARK_OPTIONS).get()).thumbmark;
|
|
1480
|
+
}
|
|
1481
|
+
//#endregion
|
|
1482
|
+
//#region ../infra/src/providers/browser/FingerprintProvider.ts
|
|
1483
|
+
var FingerprintProvider = class {
|
|
1484
|
+
constructor(ipLookup) {
|
|
1485
|
+
this.ipLookup = ipLookup;
|
|
1486
|
+
}
|
|
1487
|
+
async getFingerprint(disableIpify = false) {
|
|
1488
|
+
const visitorId = await getThumbmarkId();
|
|
1489
|
+
const [deviceInfo, ip] = await Promise.all([getDeviceFingerprintInfo(), disableIpify ? Promise.resolve("") : this.ipLookup.getIp()]);
|
|
1490
|
+
return {
|
|
1491
|
+
visitorId,
|
|
1492
|
+
ip,
|
|
1493
|
+
deviceInfo,
|
|
1494
|
+
...THUMBMARK_ALGORITHM
|
|
1495
|
+
};
|
|
1496
|
+
}
|
|
1497
|
+
};
|
|
1498
|
+
//#endregion
|
|
1499
|
+
//#region ../infra/src/providers/browser/IpifyProvider.ts
|
|
1500
|
+
let cachedIp;
|
|
1501
|
+
let inFlightLookup;
|
|
1502
|
+
/**
|
|
1503
|
+
* Resets the module-level IP cache. Intended for tests and full session resets.
|
|
1504
|
+
*/
|
|
1505
|
+
function resetIpifyCache() {
|
|
1506
|
+
cachedIp = void 0;
|
|
1507
|
+
inFlightLookup = void 0;
|
|
1508
|
+
}
|
|
1509
|
+
async function fetchIpFromIpify() {
|
|
1510
|
+
if (typeof fetch === "undefined") return "";
|
|
1511
|
+
let timeoutId = 0;
|
|
1512
|
+
const controller = new AbortController();
|
|
1513
|
+
if (AbortSignal.timeout) {
|
|
1514
|
+
const signal = AbortSignal.timeout(3e3);
|
|
1515
|
+
return (await (await fetch("https://api.ipify.org?format=json", { signal })).json()).ip;
|
|
1516
|
+
}
|
|
1517
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
1518
|
+
timeoutId = setTimeout(() => {
|
|
1519
|
+
controller.abort();
|
|
1520
|
+
reject(/* @__PURE__ */ new Error("Request timeout"));
|
|
1521
|
+
}, 3e3);
|
|
1522
|
+
});
|
|
1523
|
+
const fetchPromise = fetch("https://api.ipify.org?format=json", { signal: controller.signal }).then((res) => res.json()).then((data) => data.ip);
|
|
1524
|
+
const result = await Promise.race([fetchPromise, timeoutPromise]);
|
|
1525
|
+
clearTimeout(timeoutId);
|
|
1526
|
+
return result;
|
|
1527
|
+
}
|
|
1528
|
+
var IpifyProvider = class {
|
|
1529
|
+
async getIp() {
|
|
1530
|
+
if (cachedIp !== void 0) return cachedIp;
|
|
1531
|
+
if (inFlightLookup) return inFlightLookup;
|
|
1532
|
+
inFlightLookup = (async () => {
|
|
1533
|
+
try {
|
|
1534
|
+
const ip = await fetchIpFromIpify();
|
|
1535
|
+
cachedIp = ip;
|
|
1536
|
+
return ip;
|
|
1537
|
+
} catch {
|
|
1538
|
+
cachedIp = "";
|
|
1539
|
+
return "";
|
|
1540
|
+
} finally {
|
|
1541
|
+
inFlightLookup = void 0;
|
|
1542
|
+
}
|
|
1543
|
+
})();
|
|
1544
|
+
return inFlightLookup;
|
|
1545
|
+
}
|
|
1546
|
+
};
|
|
1547
|
+
//#endregion
|
|
1548
|
+
//#region src/internal/fingerprint/fingerprintApi.ts
|
|
1549
|
+
async function getFingerprint(disableIpify) {
|
|
1550
|
+
const shouldDisableIpify = disableIpify ?? getDisableIpify();
|
|
1551
|
+
return new FingerprintProvider(new IpifyProvider()).getFingerprint(shouldDisableIpify);
|
|
1552
|
+
}
|
|
1553
|
+
//#endregion
|
|
1554
|
+
//#region src/internal/device/hasLiedBrowser.ts
|
|
1555
|
+
function detectBrowserFromUserAgent(userAgent) {
|
|
1556
|
+
if (userAgent.indexOf("edge/") >= 0 || userAgent.indexOf("iemobile/") >= 0) return "Other";
|
|
1557
|
+
if (userAgent.indexOf("opera mini") >= 0) return "Other";
|
|
1558
|
+
if (userAgent.indexOf("firefox/") >= 0) return "Firefox";
|
|
1559
|
+
if (userAgent.indexOf("opera/") >= 0 || userAgent.indexOf(" opr/") >= 0) return "Opera";
|
|
1560
|
+
if (userAgent.indexOf("chrome/") >= 0) return "Chrome";
|
|
1561
|
+
if (userAgent.indexOf("safari/") >= 0) {
|
|
1562
|
+
if (userAgent.indexOf("android 1.") >= 0 || userAgent.indexOf("android 2.") >= 0 || userAgent.indexOf("android 3.") >= 0 || userAgent.indexOf("android 4.") >= 0) return "AOSP";
|
|
1563
|
+
return "Safari";
|
|
1564
|
+
}
|
|
1565
|
+
if (userAgent.indexOf("trident/") >= 0) return "Internet Explorer";
|
|
1566
|
+
return "Other";
|
|
1567
|
+
}
|
|
1568
|
+
function hasLiedBrowser(browserEnv) {
|
|
1569
|
+
const userAgent = getUserAgent().toLowerCase();
|
|
1570
|
+
if (userAgent.indexOf("edge/") >= 0 || userAgent.indexOf("iemobile/") >= 0) return false;
|
|
1571
|
+
if (userAgent.indexOf("opera mini") >= 0) return false;
|
|
1572
|
+
const browser = detectBrowserFromUserAgent(userAgent);
|
|
1573
|
+
const productSub = browserEnv.getNavigatorProductSub();
|
|
1574
|
+
if ((browser === "Chrome" || browser === "Safari" || browser === "Opera") && productSub !== "20030107") return true;
|
|
1575
|
+
const evalLength = browserEnv.getEvalToStringLength();
|
|
1576
|
+
if (evalLength === 37 && browser !== "Safari" && browser !== "Firefox" && browser !== "Other") return true;
|
|
1577
|
+
if (evalLength === 39 && browser !== "Internet Explorer" && browser !== "Other") return true;
|
|
1578
|
+
if (evalLength === 33 && browser !== "Chrome" && browser !== "AOSP" && browser !== "Opera" && browser !== "Other") return true;
|
|
1579
|
+
return browserEnv.tryFirefoxToSource() && browser !== "Firefox" && browser !== "Other";
|
|
1580
|
+
}
|
|
1581
|
+
//#endregion
|
|
1582
|
+
//#region src/internal/device/browserSimulation.ts
|
|
1583
|
+
const AUTOMATION_MARKERS = {
|
|
1584
|
+
window: [
|
|
1585
|
+
"callPhantom",
|
|
1586
|
+
"_phantom",
|
|
1587
|
+
"phantom",
|
|
1588
|
+
"__nightmare",
|
|
1589
|
+
"domAutomation",
|
|
1590
|
+
"domAutomationController"
|
|
1591
|
+
],
|
|
1592
|
+
navigator: ["webdriver"]
|
|
1593
|
+
};
|
|
1594
|
+
function hasAutomationMarker(browserEnv) {
|
|
1595
|
+
for (const prop of AUTOMATION_MARKERS.window) if (browserEnv.getWindowProperty(prop)) return true;
|
|
1596
|
+
for (const prop of AUTOMATION_MARKERS.navigator) if (browserEnv.getNavigatorProperty(prop)) return true;
|
|
1597
|
+
return false;
|
|
1598
|
+
}
|
|
1599
|
+
function isBrowserSimulation(browserEnv) {
|
|
1600
|
+
if (hasAutomationMarker(browserEnv)) return true;
|
|
1601
|
+
if (!getParsedUserAgent().browser.name) return true;
|
|
1602
|
+
const touchPoints = browserEnv.getMaxTouchPoints();
|
|
1603
|
+
const isTouch = touchPoints > 0 || browserEnv.hasOnTouchStart();
|
|
1604
|
+
if (isTouch && touchPoints !== 1) return false;
|
|
1605
|
+
const ua = getUserAgent();
|
|
1606
|
+
if (isTouch && (hasLiedBrowser(browserEnv) || ua.includes("Mobile"))) return true;
|
|
1607
|
+
if (isIOS(ua) && !browserEnv.hasOnTouchStart()) return true;
|
|
1608
|
+
return false;
|
|
1609
|
+
}
|
|
1610
|
+
//#endregion
|
|
1611
|
+
//#region src/internal/fingerprint/fingerprintService.ts
|
|
1612
|
+
function formatOsVersion(os) {
|
|
1613
|
+
return `${os.name || "Unknown"} ${os.version || ""}`.trim();
|
|
1614
|
+
}
|
|
1615
|
+
function formatBrowser(browser) {
|
|
1616
|
+
if (!browser.name || !browser.version) return "Unknown";
|
|
1617
|
+
return `${browser.name} ${browser.version}`;
|
|
1618
|
+
}
|
|
1619
|
+
async function submitDeviceFingerprint(options = {}, dependencies) {
|
|
1620
|
+
const { disableIpify = false, hostingApp, signal } = options;
|
|
1621
|
+
const fingerprint = await dependencies.fingerprintProvider.getFingerprint(disableIpify);
|
|
1622
|
+
const hasLiedBrowser = isBrowserSimulation(dependencies.browserEnv);
|
|
1623
|
+
const payload = {
|
|
1624
|
+
hash: fingerprint.visitorId || "",
|
|
1625
|
+
ip: fingerprint.ip || "",
|
|
1626
|
+
deviceType: "WEBAPP",
|
|
1627
|
+
data: JSON.stringify(fingerprint),
|
|
1628
|
+
osVersion: formatOsVersion(fingerprint.deviceInfo.os),
|
|
1629
|
+
deviceModel: fingerprint.deviceInfo.device.model || "",
|
|
1630
|
+
browser: formatBrowser(fingerprint.deviceInfo.browser),
|
|
1631
|
+
hasLiedBrowser,
|
|
1632
|
+
sdkVersion: SDK_VERSION,
|
|
1633
|
+
hostingApp: hostingApp ?? "Web SDK",
|
|
1634
|
+
algorithmName: fingerprint.algorithmName,
|
|
1635
|
+
algorithmVersion: fingerprint.algorithmVersion
|
|
1636
|
+
};
|
|
1637
|
+
const response = await api.post(endpoints.deviceFingerprint, payload, { signal });
|
|
1638
|
+
if (!response.ok) throw new Error(`Failed to submit fingerprint: ${response.status} ${response.statusText}`);
|
|
1639
|
+
return response.data;
|
|
1640
|
+
}
|
|
1641
|
+
//#endregion
|
|
1642
|
+
//#region src/internal/session/standaloneFlowPolicy.ts
|
|
1643
|
+
let standaloneFlowPolicy = Object.freeze({
|
|
1644
|
+
enabled: true,
|
|
1645
|
+
mergeConfig: false
|
|
1646
|
+
});
|
|
1647
|
+
let flowPreloader;
|
|
1648
|
+
function resolveStandaloneFlowPolicy(flow) {
|
|
1649
|
+
return Object.freeze({
|
|
1650
|
+
enabled: flow !== false,
|
|
1651
|
+
mergeConfig: flow !== false && (typeof flow === "object" ? flow : {}).mergeConfig === true
|
|
1652
|
+
});
|
|
1653
|
+
}
|
|
1654
|
+
function setStandaloneFlowPolicy(policy) {
|
|
1655
|
+
standaloneFlowPolicy = policy;
|
|
1656
|
+
}
|
|
1657
|
+
function getStandaloneFlowPolicy() {
|
|
1658
|
+
return standaloneFlowPolicy;
|
|
1659
|
+
}
|
|
1660
|
+
function registerFlowPreloader(preloader) {
|
|
1661
|
+
flowPreloader = preloader;
|
|
1662
|
+
}
|
|
1663
|
+
function preloadSessionFlow() {
|
|
1664
|
+
return flowPreloader?.() ?? Promise.resolve();
|
|
1665
|
+
}
|
|
1666
|
+
function resetStandaloneFlowPolicy() {
|
|
1667
|
+
standaloneFlowPolicy = resolveStandaloneFlowPolicy(void 0);
|
|
1668
|
+
flowPreloader = void 0;
|
|
1669
|
+
}
|
|
1670
|
+
//#endregion
|
|
1671
|
+
//#region src/internal/session/sessionInitializer.ts
|
|
1672
|
+
let sessionInitialized = false;
|
|
1673
|
+
let cachedFeatures = null;
|
|
1674
|
+
let cachedDisableIpify = false;
|
|
1675
|
+
let clientIpLookupEnabled = true;
|
|
1676
|
+
let clientFingerprintEnabled = true;
|
|
1677
|
+
function setClientIpLookupEnabled(enabled) {
|
|
1678
|
+
clientIpLookupEnabled = enabled;
|
|
1679
|
+
}
|
|
1680
|
+
function setClientFingerprintEnabled(enabled) {
|
|
1681
|
+
clientFingerprintEnabled = enabled;
|
|
1682
|
+
}
|
|
1683
|
+
function resolveDisableIpify(serverDisableIpify) {
|
|
1684
|
+
return !clientIpLookupEnabled || serverDisableIpify;
|
|
1685
|
+
}
|
|
1686
|
+
/** `"Chrome" + "126"` -> `"Chrome 126"`; undefined when nothing was parsed. */
|
|
1687
|
+
function composeNameVersion(name, version) {
|
|
1688
|
+
const value = [name, version].filter(Boolean).join(" ");
|
|
1689
|
+
return value === "" ? void 0 : value;
|
|
1690
|
+
}
|
|
1691
|
+
function preloadOptionalFlow() {
|
|
1692
|
+
try {
|
|
1693
|
+
return preloadSessionFlow().catch(() => void 0);
|
|
1694
|
+
} catch {
|
|
1695
|
+
return Promise.resolve();
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
let cachedFingerprintSuccess = false;
|
|
1699
|
+
let cachedFingerprintResult;
|
|
1700
|
+
let sessionInitPromise = null;
|
|
1701
|
+
/**
|
|
1702
|
+
* Activates a session by setting the auth token on the HTTP client and
|
|
1703
|
+
* preloading session-scoped state.
|
|
1704
|
+
*
|
|
1705
|
+
* Performs:
|
|
1706
|
+
* 1. Sets the token (and clears stale session-init cache if the token changed)
|
|
1707
|
+
* 2. Links the session with the TRI activity if TRI is enabled
|
|
1708
|
+
* 3. Fetches feature configuration from backend
|
|
1709
|
+
* 4. Submits device fingerprint
|
|
1710
|
+
* 5. Starts the analytics batcher so buffered events are flushed
|
|
1711
|
+
*
|
|
1712
|
+
* Results are cached per token. Calling again with the same token returns the
|
|
1713
|
+
* cached result; calling with a different token re-initializes from scratch.
|
|
1714
|
+
*
|
|
1715
|
+
* @param options - Session activation options (`token` required)
|
|
1716
|
+
* @returns Session initialization result with feature config
|
|
1717
|
+
*
|
|
1718
|
+
* @example
|
|
1719
|
+
* ```ts
|
|
1720
|
+
* await setup({ apiURL: 'https://api.incode.com' });
|
|
1721
|
+
* const session = await createSession('api-key', options);
|
|
1722
|
+
* const { features } = await initializeSession({ token: session.token });
|
|
1723
|
+
*
|
|
1724
|
+
* // Check feature flags
|
|
1725
|
+
* if (isFeatureEnabled('DISABLE_IPIFY', features.features)) {
|
|
1726
|
+
* // Handle disabled ipify
|
|
1727
|
+
* }
|
|
1728
|
+
* ```
|
|
1729
|
+
*/
|
|
1730
|
+
async function initializeSession(options = {}) {
|
|
1731
|
+
const { token, hostingApp, signal, preloadFlow } = options;
|
|
1732
|
+
let triLinkPromise = Promise.resolve();
|
|
1733
|
+
if (token !== void 0 && token !== getToken()) {
|
|
1734
|
+
setToken(token);
|
|
1735
|
+
resetSessionInit();
|
|
1736
|
+
if (isTRIStarted()) triLinkPromise = linkSessionWithTRI(token);
|
|
1737
|
+
}
|
|
1738
|
+
if (token !== void 0) noteTokenActivated();
|
|
1739
|
+
const flowPreloadPromise = getToken() && preloadFlow === true ? preloadOptionalFlow() : Promise.resolve();
|
|
1740
|
+
await triLinkPromise;
|
|
1741
|
+
if (sessionInitialized && cachedFeatures) {
|
|
1742
|
+
await flowPreloadPromise;
|
|
1743
|
+
return {
|
|
1744
|
+
features: cachedFeatures,
|
|
1745
|
+
disableIpify: cachedDisableIpify,
|
|
1746
|
+
fingerprintSuccess: cachedFingerprintSuccess,
|
|
1747
|
+
fingerprintResult: cachedFingerprintResult
|
|
1748
|
+
};
|
|
1749
|
+
}
|
|
1750
|
+
if (sessionInitPromise) {
|
|
1751
|
+
const result = await sessionInitPromise;
|
|
1752
|
+
await flowPreloadPromise;
|
|
1753
|
+
return result;
|
|
1754
|
+
}
|
|
1755
|
+
sessionInitPromise = (async () => {
|
|
1756
|
+
let features;
|
|
1757
|
+
let serverDisableIpify = false;
|
|
1758
|
+
try {
|
|
1759
|
+
features = await fetchFeatureConfig(signal);
|
|
1760
|
+
serverDisableIpify = isFeatureEnabled("DISABLE_IPIFY", features.features);
|
|
1761
|
+
startTrueSightCollection(features);
|
|
1762
|
+
} catch {
|
|
1763
|
+
features = { sessionIdentifier: "" };
|
|
1764
|
+
trueSightLog("warning", "session", "orchestration", "feature-config fetch failed");
|
|
1765
|
+
startTrueSightCollection();
|
|
1766
|
+
}
|
|
1767
|
+
const disableIpify = resolveDisableIpify(serverDisableIpify);
|
|
1768
|
+
await updateFeatureManagementUser({ customIDs: { hashed_onboarding_id: features.sessionIdentifier || void 0 } });
|
|
1769
|
+
let fingerprintSuccess = false;
|
|
1770
|
+
let fingerprintResult;
|
|
1771
|
+
if (clientFingerprintEnabled) try {
|
|
1772
|
+
const fingerprintProvider = new FingerprintProvider(new IpifyProvider());
|
|
1773
|
+
const browserEnv = new BrowserEnvironmentProvider();
|
|
1774
|
+
fingerprintResult = await submitDeviceFingerprint({
|
|
1775
|
+
disableIpify,
|
|
1776
|
+
hostingApp,
|
|
1777
|
+
signal
|
|
1778
|
+
}, {
|
|
1779
|
+
fingerprintProvider,
|
|
1780
|
+
browserEnv
|
|
1781
|
+
});
|
|
1782
|
+
fingerprintSuccess = true;
|
|
1783
|
+
flushDeviceStatsQueue();
|
|
1784
|
+
} catch (error) {
|
|
1785
|
+
console.warn("Failed to submit device fingerprint:", error);
|
|
1786
|
+
trueSightLog("warning", "session", "other", "device fingerprint submit failed");
|
|
1787
|
+
}
|
|
1788
|
+
else flushDeviceStatsQueue();
|
|
1789
|
+
try {
|
|
1790
|
+
const browserInfo = new BrowserInfoProvider().getBrowserInfo();
|
|
1791
|
+
const language = new BrowserEnvironmentProvider().getNavigatorProperty("language");
|
|
1792
|
+
noteEnvironment({
|
|
1793
|
+
browser: composeNameVersion(browserInfo.browser.name, browserInfo.browser.version),
|
|
1794
|
+
osVersion: composeNameVersion(browserInfo.os.name, browserInfo.os.version),
|
|
1795
|
+
osLanguage: typeof language === "string" ? language : void 0
|
|
1796
|
+
});
|
|
1797
|
+
addEvent({
|
|
1798
|
+
code: "browser",
|
|
1799
|
+
payload: {
|
|
1800
|
+
userAgent: browserInfo.userAgent,
|
|
1801
|
+
isWebRtcSupported: browserInfo.isWebRtcSupported,
|
|
1802
|
+
browser: browserInfo.browser,
|
|
1803
|
+
os: browserInfo.os,
|
|
1804
|
+
device: browserInfo.device,
|
|
1805
|
+
engine: browserInfo.engine,
|
|
1806
|
+
cpu: browserInfo.cpu
|
|
1807
|
+
}
|
|
1808
|
+
});
|
|
1809
|
+
} catch (error) {
|
|
1810
|
+
console.warn("Failed to send browser info event:", error);
|
|
1811
|
+
}
|
|
1812
|
+
sessionInitialized = true;
|
|
1813
|
+
cachedFeatures = features;
|
|
1814
|
+
cachedDisableIpify = disableIpify;
|
|
1815
|
+
cachedFingerprintSuccess = fingerprintSuccess;
|
|
1816
|
+
cachedFingerprintResult = fingerprintResult;
|
|
1817
|
+
await flowPreloadPromise;
|
|
1818
|
+
return {
|
|
1819
|
+
features,
|
|
1820
|
+
disableIpify,
|
|
1821
|
+
fingerprintSuccess,
|
|
1822
|
+
fingerprintResult
|
|
1823
|
+
};
|
|
1824
|
+
})().finally(() => {
|
|
1825
|
+
sessionInitPromise = null;
|
|
1826
|
+
getAnalyticsBatcher()?.start();
|
|
1827
|
+
});
|
|
1828
|
+
return sessionInitPromise;
|
|
1829
|
+
}
|
|
1830
|
+
/**
|
|
1831
|
+
* Gets the cached disableIpify flag.
|
|
1832
|
+
* Returns false if session hasn't been initialized.
|
|
1833
|
+
*/
|
|
1834
|
+
function getDisableIpify() {
|
|
1835
|
+
if (!clientIpLookupEnabled) return true;
|
|
1836
|
+
return cachedDisableIpify;
|
|
1837
|
+
}
|
|
1838
|
+
function getSessionFingerprintResult() {
|
|
1839
|
+
return cachedFingerprintResult;
|
|
1840
|
+
}
|
|
1841
|
+
/**
|
|
1842
|
+
* Gets whether client-side device-fingerprint submission is enabled.
|
|
1843
|
+
* Consumed by `loadDeepsightSession` to resolve `disableFingerprint`
|
|
1844
|
+
* (mirrors how `getDisableIpify` is used).
|
|
1845
|
+
*/
|
|
1846
|
+
function getFingerprintEnabled() {
|
|
1847
|
+
return clientFingerprintEnabled;
|
|
1848
|
+
}
|
|
1849
|
+
/**
|
|
1850
|
+
* Resets session initialization state.
|
|
1851
|
+
* Useful for testing or when starting a new session.
|
|
1852
|
+
*/
|
|
1853
|
+
function resetSessionInit() {
|
|
1854
|
+
sessionInitialized = false;
|
|
1855
|
+
cachedFeatures = null;
|
|
1856
|
+
cachedDisableIpify = false;
|
|
1857
|
+
cachedFingerprintSuccess = false;
|
|
1858
|
+
cachedFingerprintResult = void 0;
|
|
1859
|
+
sessionInitPromise = null;
|
|
1860
|
+
resetFeatureConfigCache();
|
|
1861
|
+
resetIpifyCache();
|
|
1862
|
+
resetDeviceStatsQueue();
|
|
1863
|
+
}
|
|
1864
|
+
//#endregion
|
|
1865
|
+
export { getDeviceFingerprintInfo as _, resetSessionInit as a, getStandaloneFlowPolicy as c, resolveStandaloneFlowPolicy as d, setStandaloneFlowPolicy as f, getThumbmarkId as g, IpifyProvider as h, initializeSession as i, registerFlowPreloader as l, getFingerprint as m, getFingerprintEnabled as n, setClientFingerprintEnabled as o, isBrowserSimulation as p, getSessionFingerprintResult as r, setClientIpLookupEnabled as s, getDisableIpify as t, resetStandaloneFlowPolicy as u, BrowserEnvironmentProvider as v };
|