@incodetech/core 2.1.1 → 2.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{3dAvatarProvider-BwOmTMOy.esm.js → 3dAvatarProvider-g02DTFqT.esm.js} +811 -880
- package/dist/Actor-iTq7YY48.d.ts +1 -0
- package/dist/BrowserDiagnosticsCryptoProvider-BwGL3Lmi.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-oiEnJIlk.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-Dq_tudSW.esm.js} +7 -10
- package/dist/{authenticationStateMachine-DbdxfGHx.esm.js → authenticationStateMachine-D4koAtP3.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-CWE0SvF1.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-B3t0ydtg.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-B-OmpJkU.esm.js} +48 -9
- package/dist/{dynamicFormsManager-CKZkE7Wo.d.ts → dynamicFormsManager-fhK0yINk.d.ts} +22 -46
- package/dist/{dynamicFormsStateMachine-DJ1HGZff.esm.js → dynamicFormsStateMachine-D_3oLtOE.esm.js} +161 -34
- package/dist/ekyb.d.ts +5 -137
- package/dist/ekyb.esm.js +4 -179
- package/dist/ekybManager-BJVp2ahf.esm.js +178 -0
- package/dist/ekybManager-Dzswb_b8.d.ts +114 -0
- package/dist/{ekybStateMachine-D9GzA4MW.esm.js → ekybStateMachine-BYcc9VaR.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/{electronicSignatureManager-DESRgObX.esm.js → electronicSignatureManager-CApcBEQd.esm.js} +47 -33
- package/dist/{index-36QX_21w.d.ts → electronicSignatureManager-CcUXQZS7.d.ts} +220 -251
- 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-4VejGOQX.esm.js} +52 -31
- package/dist/{faceCaptureManagerFactory-DiJ64oem.d.ts → faceCaptureManagerFactory-BxWPpxyd.d.ts} +63 -24
- package/dist/{faceCaptureSetup-BqhqfFHL.esm.js → faceCaptureSetup-BB5KEtbV.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-Bt3wD28k.esm.js} +4 -6
- package/dist/flowServices-b0Pd4F1K.esm.js +620 -0
- package/dist/geolocation.d.ts +1 -4
- package/dist/geolocation.esm.js +3 -9
- package/dist/geolocationManager-Cz744E5S.d.ts +506 -0
- package/dist/{geolocationManager-CF6-NizA.esm.js → geolocationManager-DGwnL5lg.esm.js} +44 -16
- package/dist/{geolocationStateMachine-CD2XJs1b.esm.js → geolocationStateMachine-il6jz5DZ.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-DgohUfUQ.esm.js} +173 -34
- package/dist/idCaptureServices-RDiDS9tg.esm.js +396 -0
- package/dist/{idCaptureStateMachine-DZ2ZTSxu.esm.js → idCaptureStateMachine-DWocZD_m.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-C6IRJHQB.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-N4RhdyiT.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-DpRmKWV0.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-CmoNiluM.esm.js} +7 -10
- package/dist/{selfieManager-4juKfrHG.d.ts → selfieManager-DwlCppg0.d.ts} +3 -4
- package/dist/{selfieStateMachine-D0TS93Tu.esm.js → selfieStateMachine-L9pghTly.esm.js} +14 -29
- package/dist/{session-CLsU2Jnb.esm.js → session-DeR_I24J.esm.js} +16 -7
- package/dist/session.d.ts +12 -10
- package/dist/session.esm.js +5 -15
- package/dist/sessionInitializer-DNgRpf5Y.esm.js +1865 -0
- package/dist/{setup-CfNsYAeB.esm.js → setup-DuYKUt0r.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-BTl_vvd3.esm.js +1 -0
- package/dist/trueSightService-s3T95geD.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-DPx5Lm3d.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
package/dist/{faceMatchStateMachine-MDb30gCm.esm.js → faceMatchStateMachine-CJiO2yLO.esm.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as api } from "./api-
|
|
2
|
-
import { t as endpoints } from "./endpoints-
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import { t as api } from "./api-Bx3gKW_y.esm.js";
|
|
2
|
+
import { t as endpoints } from "./endpoints-CCzL3XD_.esm.js";
|
|
3
|
+
import { r as assign, t as setup } from "./xstate.esm-Cf4e0Cfd.esm.js";
|
|
4
|
+
import { n as fromPromise } from "./xstate-actors.esm-CtI5S0f4.esm.js";
|
|
5
5
|
//#region src/modules/face-match/constants.ts
|
|
6
6
|
/**
|
|
7
7
|
* Backend error code returned by face-match endpoints (e.g. `/omni/process/face`,
|
|
@@ -22,9 +22,8 @@ const ID_FACE_EXTRACTION_SKIPPED_CODE = 4084;
|
|
|
22
22
|
function isFaceExtractionSkippedError(error) {
|
|
23
23
|
if (!error || typeof error !== "object") return false;
|
|
24
24
|
const err = error;
|
|
25
|
-
return err.status ===
|
|
25
|
+
return err.status === 4084 || err.data?.status === 4084;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
27
|
//#endregion
|
|
29
28
|
//#region src/modules/face-match/faceMatchServices.ts
|
|
30
29
|
/**
|
|
@@ -105,7 +104,6 @@ async function fetchFaceMatchData(config, signal) {
|
|
|
105
104
|
result: resultRes
|
|
106
105
|
};
|
|
107
106
|
}
|
|
108
|
-
|
|
109
107
|
//#endregion
|
|
110
108
|
//#region src/modules/face-match/faceMatchStateMachine.ts
|
|
111
109
|
const faceMatchMachine = setup({
|
|
@@ -136,6 +134,7 @@ const faceMatchMachine = setup({
|
|
|
136
134
|
},
|
|
137
135
|
guards: {
|
|
138
136
|
isAnimationDisabled: ({ context }) => context.config.disableFaceMatchAnimation === true,
|
|
137
|
+
isFaceMatchSkipped: ({ context }) => context.config.skipFaceMatch === true,
|
|
139
138
|
isFaceExtractionSkipped: ({ event }) => isFaceExtractionSkippedError(event.error)
|
|
140
139
|
}
|
|
141
140
|
}).createMachine({
|
|
@@ -148,7 +147,13 @@ const faceMatchMachine = setup({
|
|
|
148
147
|
error: void 0
|
|
149
148
|
}),
|
|
150
149
|
states: {
|
|
151
|
-
idle: {
|
|
150
|
+
idle: {
|
|
151
|
+
always: [{
|
|
152
|
+
target: "finished",
|
|
153
|
+
guard: "isFaceMatchSkipped"
|
|
154
|
+
}],
|
|
155
|
+
on: { LOAD: { target: "loading" } }
|
|
156
|
+
},
|
|
152
157
|
loading: { invoke: {
|
|
153
158
|
id: "fetchData",
|
|
154
159
|
src: "fetchData",
|
|
@@ -178,6 +183,5 @@ const faceMatchMachine = setup({
|
|
|
178
183
|
} } }
|
|
179
184
|
}
|
|
180
185
|
});
|
|
181
|
-
|
|
182
186
|
//#endregion
|
|
183
|
-
export { ID_FACE_EXTRACTION_SKIPPED_CODE as n, isFaceExtractionSkippedError as r, faceMatchMachine as t };
|
|
187
|
+
export { ID_FACE_EXTRACTION_SKIPPED_CODE as n, isFaceExtractionSkippedError as r, faceMatchMachine as t };
|
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
import { a as __toESM } from "./rolldown-runtime-FZ4Itg2g.esm.js";
|
|
2
|
+
import { t as BrowserLazyImportProvider } from "./BrowserLazyImportProvider-BhoA957O.esm.js";
|
|
3
|
+
let currentEnvironment;
|
|
4
|
+
/** Effective tier: the explicitly-set value, else the default (see note above). */
|
|
5
|
+
function getEnvironment() {
|
|
6
|
+
return currentEnvironment ?? "production";
|
|
7
|
+
}
|
|
8
|
+
/** Clears the stored tier. Called by the SDK's `reset()`. */
|
|
9
|
+
function resetEnvironment() {
|
|
10
|
+
currentEnvironment = void 0;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Applies a requested tier from a `setup()` call and reports the transition:
|
|
14
|
+
* - `'unchanged'` — omitted, same value as already stored, or first-set to
|
|
15
|
+
* the default.
|
|
16
|
+
* - `'changed'` — first-set (was defaulting) to a non-default value.
|
|
17
|
+
* Informational only: no consumer reconstructs on this today. Feature
|
|
18
|
+
* management reads the tier once at its own first initialization and never
|
|
19
|
+
* rebuilds, regardless of this status.
|
|
20
|
+
* - `'rejected'` — already locked to a different value; logs a
|
|
21
|
+
* `console.error` and keeps the locked value.
|
|
22
|
+
*/
|
|
23
|
+
function applyEnvironment(next) {
|
|
24
|
+
if (next === void 0) return "unchanged";
|
|
25
|
+
if (currentEnvironment === void 0) {
|
|
26
|
+
currentEnvironment = next;
|
|
27
|
+
return next === "production" ? "unchanged" : "changed";
|
|
28
|
+
}
|
|
29
|
+
if (next === currentEnvironment) return "unchanged";
|
|
30
|
+
console.error(`[environment] \`environment\` cannot be changed after the initial setup() call. Keeping '${currentEnvironment}'; ignoring '${next}'. Call reset() to change it.`);
|
|
31
|
+
return "rejected";
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region ../infra/src/providers/browser/FeatureManagementProvider.ts
|
|
35
|
+
/**
|
|
36
|
+
* A client SDK key is safe to ship in a public bundle — it only grants
|
|
37
|
+
* read-only evaluation, no console/admin access.
|
|
38
|
+
*
|
|
39
|
+
* Note: Proper improvement would be if backend creates specialized
|
|
40
|
+
* endpoint for returning these type of information, so we could have full decoupling.
|
|
41
|
+
*/
|
|
42
|
+
const CLIENT_SDK_KEY = "client-GBTzsiJ99rvyZQdNXDFkftx3ZoMF1TED2rsB3m3IUqc";
|
|
43
|
+
const LOAD_TIMEOUT_MS = 1e4;
|
|
44
|
+
const FEATURE_MANAGEMENT_REQUEST_TIMEOUT_MS = 3e3;
|
|
45
|
+
const LAZY_IMPORT_OPTIONS = {
|
|
46
|
+
label: "FeatureManagement",
|
|
47
|
+
moduleName: "@statsig/js-client",
|
|
48
|
+
timeoutMs: LOAD_TIMEOUT_MS,
|
|
49
|
+
disabledMessage: "Feature gates/experiments/layers will be disabled for this session."
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Resolved default for {@link FeatureManagementConfig.redactedUserInfo}:
|
|
53
|
+
* `ip` and `country` are redacted unless a caller explicitly opts out.
|
|
54
|
+
*/
|
|
55
|
+
const DEFAULT_REDACTED_USER_INFO = {
|
|
56
|
+
ip: true,
|
|
57
|
+
country: true
|
|
58
|
+
};
|
|
59
|
+
const fallbackTypedGetter = (_paramName, fallback) => fallback;
|
|
60
|
+
function createFallback(status) {
|
|
61
|
+
return Object.freeze({
|
|
62
|
+
get: fallbackTypedGetter,
|
|
63
|
+
groupName: null,
|
|
64
|
+
status
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Concrete {@link IFeatureManagementCapability} backed by Statsig
|
|
69
|
+
* (`@statsig/js-client`), lazy-loaded on first `initialize()` call so
|
|
70
|
+
* consumers that never read a gate/experiment/layer never pay its bundle cost.
|
|
71
|
+
*
|
|
72
|
+
* No `apiKey` is ever passed to Statsig — identity is built up purely from
|
|
73
|
+
* randomization-unit `customIDs` supplied at `initialize()`/`updateUser()`
|
|
74
|
+
* time, plus the client SDK's own auto-generated StableID.
|
|
75
|
+
*
|
|
76
|
+
* Mirrors {@link TransactionalRiskIntelligenceProvider}: every public method
|
|
77
|
+
* is graceful — a load failure, timeout, or evaluation error never throws
|
|
78
|
+
* and never rejects. Reads fall back to their documented defaults and
|
|
79
|
+
* mutating calls become no-ops.
|
|
80
|
+
*/
|
|
81
|
+
var FeatureManagementProvider = class FeatureManagementProvider {
|
|
82
|
+
constructor() {
|
|
83
|
+
this._user = {};
|
|
84
|
+
this._redactedUserInfo = { ...DEFAULT_REDACTED_USER_INFO };
|
|
85
|
+
this._lazySdk = BrowserLazyImportProvider.getInstance().create(importStatsigJsClient, LAZY_IMPORT_OPTIONS);
|
|
86
|
+
}
|
|
87
|
+
static getInstance() {
|
|
88
|
+
return this._instance ??= new FeatureManagementProvider();
|
|
89
|
+
}
|
|
90
|
+
static resetInstance() {
|
|
91
|
+
this._instance = void 0;
|
|
92
|
+
}
|
|
93
|
+
get initialized() {
|
|
94
|
+
return this._client !== void 0;
|
|
95
|
+
}
|
|
96
|
+
async initialize(config) {
|
|
97
|
+
try {
|
|
98
|
+
const module = await this._lazySdk.load();
|
|
99
|
+
if (!module) return;
|
|
100
|
+
this._redactedUserInfo = {
|
|
101
|
+
...DEFAULT_REDACTED_USER_INFO,
|
|
102
|
+
...config.redactedUserInfo
|
|
103
|
+
};
|
|
104
|
+
this._user = this._getAdjustedUser({
|
|
105
|
+
customIDs: config.customIDs,
|
|
106
|
+
custom: config.custom
|
|
107
|
+
});
|
|
108
|
+
const client = new module.StatsigClient(CLIENT_SDK_KEY, this._user, {
|
|
109
|
+
environment: { tier: config.environment },
|
|
110
|
+
disableStableID: config.disableStableId,
|
|
111
|
+
disableStorage: config.disablePersistence
|
|
112
|
+
});
|
|
113
|
+
await client.initializeAsync({ timeoutMs: FEATURE_MANAGEMENT_REQUEST_TIMEOUT_MS });
|
|
114
|
+
this._client = client;
|
|
115
|
+
} catch (error) {
|
|
116
|
+
console.warn("[FeatureManagement] initialize() failed; gates/experiments/layers will be disabled for this session.", error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async updateUser(user) {
|
|
120
|
+
if (!this._client) return;
|
|
121
|
+
this._user = this._getAdjustedUser(user);
|
|
122
|
+
try {
|
|
123
|
+
await this._client.updateUserAsync(this._user, { timeoutMs: FEATURE_MANAGEMENT_REQUEST_TIMEOUT_MS });
|
|
124
|
+
} catch (error) {
|
|
125
|
+
console.warn("[FeatureManagement] updateUser() failed.", error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
getFeatureGate(name) {
|
|
129
|
+
if (!this._client) return {
|
|
130
|
+
enabled: false,
|
|
131
|
+
status: "uninitialized"
|
|
132
|
+
};
|
|
133
|
+
try {
|
|
134
|
+
return {
|
|
135
|
+
enabled: this._client.checkGate(name),
|
|
136
|
+
status: "initialized"
|
|
137
|
+
};
|
|
138
|
+
} catch {
|
|
139
|
+
return {
|
|
140
|
+
enabled: false,
|
|
141
|
+
status: "error"
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
getExperiment(name) {
|
|
146
|
+
if (!this._client) return createFallback("uninitialized");
|
|
147
|
+
try {
|
|
148
|
+
const experiment = this._client.getExperiment(name);
|
|
149
|
+
return {
|
|
150
|
+
get: experiment.get,
|
|
151
|
+
groupName: experiment.groupName,
|
|
152
|
+
status: "initialized"
|
|
153
|
+
};
|
|
154
|
+
} catch {
|
|
155
|
+
return createFallback("error");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
getLayer(name) {
|
|
159
|
+
if (!this._client) return createFallback("uninitialized");
|
|
160
|
+
try {
|
|
161
|
+
const layer = this._client.getLayer(name);
|
|
162
|
+
return {
|
|
163
|
+
get: layer.get,
|
|
164
|
+
groupName: layer.groupName,
|
|
165
|
+
status: "initialized"
|
|
166
|
+
};
|
|
167
|
+
} catch {
|
|
168
|
+
return createFallback("error");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
getParameterStore(name, options) {
|
|
172
|
+
if (!this._client) return createFallback("uninitialized");
|
|
173
|
+
try {
|
|
174
|
+
const statsigOptions = options === void 0 ? void 0 : { disableExposureLog: options.disableExposureLog };
|
|
175
|
+
return {
|
|
176
|
+
get: this._client.getParameterStore(name, statsigOptions).get,
|
|
177
|
+
status: "initialized"
|
|
178
|
+
};
|
|
179
|
+
} catch {
|
|
180
|
+
return createFallback("error");
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
getDynamicConfig(name) {
|
|
184
|
+
if (!this._client) return null;
|
|
185
|
+
try {
|
|
186
|
+
return this._client.getDynamicConfig(name).value;
|
|
187
|
+
} catch {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
logEvent(name, value, options) {
|
|
192
|
+
if (!this._client) return;
|
|
193
|
+
try {
|
|
194
|
+
const metadata = options?.metadata ? stringifyEventMetadata(options.metadata) : void 0;
|
|
195
|
+
this._client.logEvent(name, value, metadata);
|
|
196
|
+
if (options?.type === "immediate") this._client.flush().catch(() => {});
|
|
197
|
+
} catch {}
|
|
198
|
+
}
|
|
199
|
+
async reset() {
|
|
200
|
+
const client = this._client;
|
|
201
|
+
this._client = void 0;
|
|
202
|
+
this._user = {};
|
|
203
|
+
this._redactedUserInfo = { ...DEFAULT_REDACTED_USER_INFO };
|
|
204
|
+
return client?.shutdown().catch(() => {});
|
|
205
|
+
}
|
|
206
|
+
_getAdjustedUser(user) {
|
|
207
|
+
const persistedUserCustomIDs = this._user.customIDs ?? {};
|
|
208
|
+
const persistedUserCustom = this._user.custom ?? {};
|
|
209
|
+
return {
|
|
210
|
+
customIDs: {
|
|
211
|
+
...persistedUserCustomIDs,
|
|
212
|
+
...user.customIDs
|
|
213
|
+
},
|
|
214
|
+
custom: {
|
|
215
|
+
...persistedUserCustom,
|
|
216
|
+
...user.custom
|
|
217
|
+
},
|
|
218
|
+
...this._getRedactedFields()
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/** Blanks out every `StatsigUser` field flagged in {@link _redactedUserInfo}. */
|
|
222
|
+
_getRedactedFields() {
|
|
223
|
+
const fields = {};
|
|
224
|
+
for (const key in this._redactedUserInfo) if (this._redactedUserInfo[key]) fields[key] = "";
|
|
225
|
+
return fields;
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Statsig's `logEvent` only accepts string metadata values. Non-string
|
|
230
|
+
* values (booleans, numbers, nested objects) are JSON-stringified so
|
|
231
|
+
* callers can pass richer metadata without needing to know that constraint.
|
|
232
|
+
*/
|
|
233
|
+
const stringifyEventMetadata = (metadata) => {
|
|
234
|
+
const stringified = {};
|
|
235
|
+
for (const key in metadata) {
|
|
236
|
+
const value = metadata[key];
|
|
237
|
+
if (typeof value === "string") stringified[key] = value;
|
|
238
|
+
else stringified[key] = JSON.stringify(value);
|
|
239
|
+
}
|
|
240
|
+
return stringified;
|
|
241
|
+
};
|
|
242
|
+
const importStatsigJsClient = () => import("./src-0Jurt29N.esm.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
|
|
243
|
+
//#endregion
|
|
244
|
+
//#region src/integrations/feature-management/featureManagement.ts
|
|
245
|
+
/**
|
|
246
|
+
* Returns the active FeatureManagement capability implementation.
|
|
247
|
+
*
|
|
248
|
+
* Core functions depend on {@link IFeatureManagementCapability} (the
|
|
249
|
+
* interface) rather than the concrete provider class. The provider is
|
|
250
|
+
* referenced here only to supply the default singleton — this integration
|
|
251
|
+
* module is the single owner of the concrete provider reference.
|
|
252
|
+
*/
|
|
253
|
+
function getProvider() {
|
|
254
|
+
return FeatureManagementProvider.getInstance();
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Name of the shared Statsig parameter store fronting SDK-module
|
|
258
|
+
* experiments that need mutual exclusion. Callers read only this store via
|
|
259
|
+
* {@link getFeatureParameterStore} (or the UI's `useFeatureManagement`) —
|
|
260
|
+
* each param is wired, in the Statsig console, to a Layer's param, which in
|
|
261
|
+
* turn delegates to the individual Experiment; the Layer guarantees at most
|
|
262
|
+
* one experiment sharing it is ever allocated for a given user, so callers
|
|
263
|
+
* reading different experiments from different surfaces don't need to
|
|
264
|
+
* coordinate that themselves. See the ID module's `useIdExperiment`
|
|
265
|
+
* (`packages/ui/src/modules/id/experiments/`) for the reference
|
|
266
|
+
* integration.
|
|
267
|
+
*/
|
|
268
|
+
const ONBOARDING_WEB_SDK_PARAMETER_STORE = "onboarding_web_sdk_ps";
|
|
269
|
+
let resolveReady;
|
|
270
|
+
const freshReady = () => new Promise((resolve) => {
|
|
271
|
+
resolveReady = resolve;
|
|
272
|
+
});
|
|
273
|
+
let readyPromise = freshReady();
|
|
274
|
+
let version = 0;
|
|
275
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
276
|
+
/**
|
|
277
|
+
* Subscribes to changes in the FeatureManagement user identity (readiness
|
|
278
|
+
* settling, `updateFeatureManagementUser`, or `resetFeatureManagement`).
|
|
279
|
+
* Returns an unsubscribe function. Intended for UI to re-read
|
|
280
|
+
* gates/experiments/layers whenever the shared identity changes, no matter
|
|
281
|
+
* which caller triggered the change — see `getFeatureManagementVersion`.
|
|
282
|
+
*/
|
|
283
|
+
function subscribeFeatureManagement(listener) {
|
|
284
|
+
listeners.add(listener);
|
|
285
|
+
return () => {
|
|
286
|
+
listeners.delete(listener);
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Monotonically increasing revision of the FeatureManagement user identity.
|
|
291
|
+
* Pair with {@link subscribeFeatureManagement} (e.g. via
|
|
292
|
+
* `useSyncExternalStore`) to force a re-read after any identity change.
|
|
293
|
+
* The number itself carries no meaning beyond "has this changed since my
|
|
294
|
+
* last read".
|
|
295
|
+
*/
|
|
296
|
+
function getFeatureManagementVersion() {
|
|
297
|
+
return version;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Bumps {@link getFeatureManagementVersion} and notifies every
|
|
301
|
+
* {@link subscribeFeatureManagement} listener. Called after readiness
|
|
302
|
+
* settles, a successful `updateFeatureManagementUser`, and `resetFeatureManagement` —
|
|
303
|
+
* never for no-ops, so listeners aren't notified spuriously (which would
|
|
304
|
+
* cause unnecessary re-reads and, for experiments/layers, re-logged exposures).
|
|
305
|
+
*/
|
|
306
|
+
function notifyFeatureManagementChanged() {
|
|
307
|
+
version += 1;
|
|
308
|
+
for (const listener of listeners) listener();
|
|
309
|
+
}
|
|
310
|
+
let isFeatureManagementLocked = false;
|
|
311
|
+
/**
|
|
312
|
+
* Initializes feature management for the current (anonymous) user.
|
|
313
|
+
*
|
|
314
|
+
* Deliberately takes no `apiKey` — identity starts with only the client
|
|
315
|
+
* SDK's auto-generated StableID plus the deployment tier from
|
|
316
|
+
* `options.environment` (defaults to `'production'` when omitted), plus
|
|
317
|
+
* `client_experiment_id` when supplied. Additional randomization units
|
|
318
|
+
* (`hashed_onboarding_id`, `flow_id`, and `workflow_id`) are merged in later via
|
|
319
|
+
* {@link updateFeatureManagementUser} as they become known during the
|
|
320
|
+
* session lifecycle.
|
|
321
|
+
*
|
|
322
|
+
* May be called only once per SDK lifecycle. Every later call logs a
|
|
323
|
+
* `console.error` and is ignored; {@link resetFeatureManagement} starts a new
|
|
324
|
+
* lifecycle.
|
|
325
|
+
*
|
|
326
|
+
* Never throws — a failure here must never block SDK boot.
|
|
327
|
+
*/
|
|
328
|
+
async function initializeFeatureManagement(options = {}) {
|
|
329
|
+
if (isFeatureManagementLocked) return;
|
|
330
|
+
isFeatureManagementLocked = true;
|
|
331
|
+
try {
|
|
332
|
+
const initializeOptions = buildInitializeOptions(options);
|
|
333
|
+
await getProvider().initialize(initializeOptions);
|
|
334
|
+
} catch (error) {
|
|
335
|
+
console.warn("Feature management initialization failed:", error);
|
|
336
|
+
} finally {
|
|
337
|
+
settleFeatureManagementReady(getProvider().initialized);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Records the opt-out decision for the current SDK lifecycle: locks feature
|
|
342
|
+
* management (so no later `setup()` call can enable it) and settles
|
|
343
|
+
* readiness to `false`.
|
|
344
|
+
*
|
|
345
|
+
* Like {@link initializeFeatureManagement}, this may only run once per SDK
|
|
346
|
+
* lifecycle — call from `setup()` only when the lock is not already held.
|
|
347
|
+
* {@link resetFeatureManagement} starts a new lifecycle.
|
|
348
|
+
*/
|
|
349
|
+
function optOutFeatureManagement() {
|
|
350
|
+
isFeatureManagementLocked = true;
|
|
351
|
+
settleFeatureManagementReady(false);
|
|
352
|
+
}
|
|
353
|
+
/** Settles feature-management readiness for the current SDK lifecycle. */
|
|
354
|
+
function settleFeatureManagementReady(initialized) {
|
|
355
|
+
resolveReady(initialized);
|
|
356
|
+
notifyFeatureManagementChanged();
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Resolves once feature-management boot for the current SDK lifecycle has
|
|
360
|
+
* settled.
|
|
361
|
+
*/
|
|
362
|
+
function getIsFeatureManagementInitialized() {
|
|
363
|
+
return readyPromise;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Merges additional randomization-unit custom IDs (and, optionally,
|
|
367
|
+
* analytics/targeting-only `custom` attributes) into the active
|
|
368
|
+
* FeatureManagement user and re-evaluates.
|
|
369
|
+
*
|
|
370
|
+
* `flow_id` is populated from the flow response before `getFlow` resolves;
|
|
371
|
+
* `workflow_id` is populated from the workflow configuration before
|
|
372
|
+
* `loadWorkflow` resolves. `custom` lets callers enrich identity with
|
|
373
|
+
* attributes discovered later in the session (e.g. a backend-driven flag)
|
|
374
|
+
* without needing a randomization unit — unlike `customIDs`, `custom`
|
|
375
|
+
* values never bucket experiments, only affect targeting conditions and
|
|
376
|
+
* event annotation.
|
|
377
|
+
*
|
|
378
|
+
* `undefined` values in `customIDs` are dropped before merging — they mean
|
|
379
|
+
* "not yet known", never "clear this ID". No-op when every `customIDs`
|
|
380
|
+
* value is `undefined` and no `custom` is supplied, or when
|
|
381
|
+
* `initializeFeatureManagement` was never called (or failed).
|
|
382
|
+
*/
|
|
383
|
+
async function updateFeatureManagementUser(update) {
|
|
384
|
+
const { customIDs = {}, custom } = update;
|
|
385
|
+
let hasAdaptedCustomIDs = false;
|
|
386
|
+
const adaptedCustomIDs = {};
|
|
387
|
+
for (const key in customIDs) if (customIDs[key] !== void 0) {
|
|
388
|
+
adaptedCustomIDs[key] = customIDs[key];
|
|
389
|
+
hasAdaptedCustomIDs = true;
|
|
390
|
+
}
|
|
391
|
+
if (!hasAdaptedCustomIDs && !custom) return;
|
|
392
|
+
await getProvider().updateUser({
|
|
393
|
+
customIDs: adaptedCustomIDs,
|
|
394
|
+
custom
|
|
395
|
+
});
|
|
396
|
+
notifyFeatureManagementChanged();
|
|
397
|
+
}
|
|
398
|
+
/** Evaluates a feature gate. Returns a fallback-only result before initialization. */
|
|
399
|
+
function getFeatureGate(name) {
|
|
400
|
+
return getProvider().getFeatureGate(name);
|
|
401
|
+
}
|
|
402
|
+
/** Evaluates an experiment. Returns a fallback-only result before initialization. */
|
|
403
|
+
function getExperiment(name) {
|
|
404
|
+
return getProvider().getExperiment(name);
|
|
405
|
+
}
|
|
406
|
+
/** Evaluates a layer. Returns a fallback-only result before initialization. Exposure is logged natively per-parameter on `.get()`. */
|
|
407
|
+
function getLayer(name) {
|
|
408
|
+
return getProvider().getLayer(name);
|
|
409
|
+
}
|
|
410
|
+
/** Evaluates a parameter store. Returns a fallback-only result before initialization. Exposure is logged natively for the mapped source on `.get()`. */
|
|
411
|
+
function getFeatureParameterStore(name, options) {
|
|
412
|
+
return getProvider().getParameterStore(name, options);
|
|
413
|
+
}
|
|
414
|
+
/** Evaluates a dynamic config. Returns `null` before initialization or if the config is unknown. */
|
|
415
|
+
function getFeatureDynamicConfig(name) {
|
|
416
|
+
return getProvider().getDynamicConfig(name);
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Logs a custom analytics event to the FeatureManagement provider. No-op
|
|
420
|
+
* before initialization.
|
|
421
|
+
*
|
|
422
|
+
* `type: 'scheduled'` (default) batches the event with the underlying
|
|
423
|
+
* SDK's normal flush cadence. `type: 'immediate'` logs then flushes right
|
|
424
|
+
* away — use for events that must reach the backend even if the page is
|
|
425
|
+
* about to unload (e.g. a one-time experiment-assignment event).
|
|
426
|
+
*/
|
|
427
|
+
function logEvent(name, value, options) {
|
|
428
|
+
getProvider().logEvent(name, value, options);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Tears down the active FeatureManagement client and clears the
|
|
432
|
+
* initialization-attempt flag, so a
|
|
433
|
+
* subsequent `setup()` call starts fresh instead of treating the SDK as
|
|
434
|
+
* already booted. Call from the SDK's `reset()`. Safe no-op when never
|
|
435
|
+
* initialized.
|
|
436
|
+
*/
|
|
437
|
+
function resetFeatureManagement() {
|
|
438
|
+
isFeatureManagementLocked = false;
|
|
439
|
+
readyPromise = freshReady();
|
|
440
|
+
getProvider().reset();
|
|
441
|
+
notifyFeatureManagementChanged();
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Discards the cached FeatureManagement provider singleton (including its
|
|
445
|
+
* lazy-import cache) so the next access constructs a fresh instance. Call
|
|
446
|
+
* from the SDK's `reset()` alongside {@link resetFeatureManagement}.
|
|
447
|
+
*/
|
|
448
|
+
function resetFeatureManagementProviderInstance() {
|
|
449
|
+
FeatureManagementProvider.resetInstance();
|
|
450
|
+
}
|
|
451
|
+
function getIsFeatureManagementLocked() {
|
|
452
|
+
return isFeatureManagementLocked;
|
|
453
|
+
}
|
|
454
|
+
function buildInitializeOptions(options) {
|
|
455
|
+
const initializeOptions = { environment: options.environment ?? "production" };
|
|
456
|
+
if (options.clientExperimentId) initializeOptions.customIDs = { client_experiment_id: options.clientExperimentId };
|
|
457
|
+
if (options.custom) initializeOptions.custom = options.custom;
|
|
458
|
+
if (options.redactedUserInfo) initializeOptions.redactedUserInfo = options.redactedUserInfo;
|
|
459
|
+
initializeOptions.disableStableId = options.disableStableId ?? true;
|
|
460
|
+
initializeOptions.disablePersistence = options.disablePersistence ?? true;
|
|
461
|
+
return initializeOptions;
|
|
462
|
+
}
|
|
463
|
+
//#endregion
|
|
464
|
+
//#region src/integrations/feature-management/experiments.ts
|
|
465
|
+
const EXPERIMENT_ASSIGNED_ANALYTICS_EVENT_GATE = "experiment_assigned_analytics_event";
|
|
466
|
+
const resolvedExperiments = /* @__PURE__ */ new Map();
|
|
467
|
+
const exposedExperiments = /* @__PURE__ */ new Set();
|
|
468
|
+
/**
|
|
469
|
+
* Non-null fallback compared by reference. A `null` code fallback disables
|
|
470
|
+
* Statsig validation; this sentinel distinguishes `unavailable` from console
|
|
471
|
+
* `not_allocated`.
|
|
472
|
+
*/
|
|
473
|
+
const EXPERIMENT_UNAVAILABLE_SENTINEL = Object.freeze({
|
|
474
|
+
schema: "v1",
|
|
475
|
+
status: "not_allocated",
|
|
476
|
+
arm: "",
|
|
477
|
+
flagKey: "",
|
|
478
|
+
experimentId: "",
|
|
479
|
+
experimentName: "",
|
|
480
|
+
params: {}
|
|
481
|
+
});
|
|
482
|
+
function isRecord(value) {
|
|
483
|
+
return typeof value === "object" && value !== null;
|
|
484
|
+
}
|
|
485
|
+
function defaultsResult(spec) {
|
|
486
|
+
return {
|
|
487
|
+
params: { ...spec.defaults },
|
|
488
|
+
assignment: null
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
function buildAssignment(payload) {
|
|
492
|
+
const flagKey = payload.flagKey;
|
|
493
|
+
const experimentId = payload.experimentId;
|
|
494
|
+
const experimentName = payload.experimentName;
|
|
495
|
+
const arm = payload.arm;
|
|
496
|
+
if (typeof flagKey !== "string" || typeof experimentId !== "string" || typeof experimentName !== "string" || typeof arm !== "string" || !flagKey || !experimentId || !experimentName || !arm) return null;
|
|
497
|
+
return {
|
|
498
|
+
flagKey,
|
|
499
|
+
experimentId,
|
|
500
|
+
experimentName,
|
|
501
|
+
variant: arm
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
function evaluateExperimentPayload(spec, raw) {
|
|
505
|
+
if (raw === EXPERIMENT_UNAVAILABLE_SENTINEL) return defaultsResult(spec);
|
|
506
|
+
if (!isRecord(raw) || raw.schema !== "v1") return defaultsResult(spec);
|
|
507
|
+
const status = raw.status;
|
|
508
|
+
if (status !== "ongoing" && status !== "completed" && status !== "not_allocated") return defaultsResult(spec);
|
|
509
|
+
if (status === "not_allocated") return defaultsResult(spec);
|
|
510
|
+
const rawParams = isRecord(raw.params) ? raw.params : {};
|
|
511
|
+
const parsedParams = spec.parseParams(rawParams);
|
|
512
|
+
if (parsedParams === null) return defaultsResult(spec);
|
|
513
|
+
const params = {
|
|
514
|
+
...spec.defaults,
|
|
515
|
+
...parsedParams
|
|
516
|
+
};
|
|
517
|
+
if (status === "completed") return {
|
|
518
|
+
params,
|
|
519
|
+
assignment: null
|
|
520
|
+
};
|
|
521
|
+
if (!getFeatureGate(EXPERIMENT_ASSIGNED_ANALYTICS_EVENT_GATE).enabled) return {
|
|
522
|
+
params,
|
|
523
|
+
assignment: null
|
|
524
|
+
};
|
|
525
|
+
return {
|
|
526
|
+
params,
|
|
527
|
+
assignment: buildAssignment(raw)
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Resolves an object-shaped experiment param with exposure suppressed (phase 1).
|
|
532
|
+
* Pass `store` when the caller already holds a reactive parameter-store handle
|
|
533
|
+
* (UI hooks) so the read logs exposure through that handle instead.
|
|
534
|
+
*/
|
|
535
|
+
function resolveExperiment(spec, options) {
|
|
536
|
+
return evaluateExperimentPayload(spec, (options?.store ?? getFeatureParameterStore("onboarding_web_sdk_ps", { disableExposureLog: true })).get(spec.storeParam, EXPERIMENT_UNAVAILABLE_SENTINEL));
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Phase 1 (core). Memoized for the SDK session: the first resolution is the arm
|
|
540
|
+
* the user actually experiences, so later identity changes cannot retroactively
|
|
541
|
+
* rewrite it. Exposure suppressed.
|
|
542
|
+
*/
|
|
543
|
+
function resolveExperimentOnce(spec) {
|
|
544
|
+
const memoized = resolvedExperiments.get(spec.storeParam);
|
|
545
|
+
if (memoized) return memoized;
|
|
546
|
+
const resolved = resolveExperiment(spec);
|
|
547
|
+
resolvedExperiments.set(spec.storeParam, resolved);
|
|
548
|
+
return resolved;
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Phase 2 (core). Performs the exposing read for its Statsig side effect at
|
|
552
|
+
* most once per SDK session (keyed by `storeParam`), then returns the memoized
|
|
553
|
+
* phase-1 assignment so analytics reports what the user saw.
|
|
554
|
+
*/
|
|
555
|
+
function exposeExperimentOnce(spec) {
|
|
556
|
+
const memoized = resolvedExperiments.get(spec.storeParam);
|
|
557
|
+
if (exposedExperiments.has(spec.storeParam)) return memoized?.assignment ?? null;
|
|
558
|
+
exposedExperiments.add(spec.storeParam);
|
|
559
|
+
const raw = getFeatureParameterStore(ONBOARDING_WEB_SDK_PARAMETER_STORE, { disableExposureLog: false }).get(spec.storeParam, EXPERIMENT_UNAVAILABLE_SENTINEL);
|
|
560
|
+
if (memoized) return memoized.assignment;
|
|
561
|
+
const resolved = evaluateExperimentPayload(spec, raw);
|
|
562
|
+
resolvedExperiments.set(spec.storeParam, resolved);
|
|
563
|
+
return resolved.assignment;
|
|
564
|
+
}
|
|
565
|
+
/** Clears phase-1 memoization and phase-2 exposure dedup. Called from SDK `reset()`. */
|
|
566
|
+
function resetResolvedExperiments() {
|
|
567
|
+
resolvedExperiments.clear();
|
|
568
|
+
exposedExperiments.clear();
|
|
569
|
+
}
|
|
570
|
+
//#endregion
|
|
571
|
+
//#region src/integrations/feature-management/experimentParams.ts
|
|
572
|
+
const booleanParam = (defaultValue) => ({
|
|
573
|
+
default: defaultValue,
|
|
574
|
+
isValid: (value) => typeof value === "boolean"
|
|
575
|
+
});
|
|
576
|
+
const numberParam = (defaultValue, bounds = {}) => ({
|
|
577
|
+
default: defaultValue,
|
|
578
|
+
isValid: (value) => typeof value === "number" && Number.isFinite(value) && (!bounds.integer || Number.isInteger(value)) && (bounds.min === void 0 || value >= bounds.min) && (bounds.max === void 0 || value <= bounds.max)
|
|
579
|
+
});
|
|
580
|
+
/** Empty strings are console mistakes, not values. */
|
|
581
|
+
const stringParam = (defaultValue) => ({
|
|
582
|
+
default: defaultValue,
|
|
583
|
+
isValid: (value) => typeof value === "string" && value.length > 0
|
|
584
|
+
});
|
|
585
|
+
const enumParam = (defaultValue, allowed) => ({
|
|
586
|
+
default: defaultValue,
|
|
587
|
+
isValid: (value) => typeof value === "string" && allowed.includes(value)
|
|
588
|
+
});
|
|
589
|
+
/**
|
|
590
|
+
* Derives the `defaults` / `parseParams` half of an `ExperimentSpec` from a
|
|
591
|
+
* schema. An omitted param keeps its code default (control users still get
|
|
592
|
+
* shipped behavior); a present-but-invalid param rejects the whole payload so
|
|
593
|
+
* a corrupt console edit can never produce a half-applied treatment.
|
|
594
|
+
*/
|
|
595
|
+
function defineExperimentParams(schema) {
|
|
596
|
+
const keys = Object.keys(schema);
|
|
597
|
+
return {
|
|
598
|
+
defaults: Object.freeze(keys.reduce((acc, key) => {
|
|
599
|
+
acc[key] = schema[key].default;
|
|
600
|
+
return acc;
|
|
601
|
+
}, {})),
|
|
602
|
+
parseParams(raw) {
|
|
603
|
+
const parsed = {};
|
|
604
|
+
for (const key of keys) {
|
|
605
|
+
if (!(key in raw) || raw[key] === void 0) continue;
|
|
606
|
+
const value = raw[key];
|
|
607
|
+
if (!schema[key].isValid(value)) return null;
|
|
608
|
+
parsed[key] = value;
|
|
609
|
+
}
|
|
610
|
+
return parsed;
|
|
611
|
+
}
|
|
612
|
+
};
|
|
613
|
+
}
|
|
614
|
+
//#endregion
|
|
615
|
+
export { resetFeatureManagement as C, applyEnvironment as D, updateFeatureManagementUser as E, getEnvironment as O, optOutFeatureManagement as S, subscribeFeatureManagement as T, getIsFeatureManagementInitialized as _, stringParam as a, initializeFeatureManagement as b, resetResolvedExperiments as c, ONBOARDING_WEB_SDK_PARAMETER_STORE as d, getExperiment as f, getFeatureParameterStore as g, getFeatureManagementVersion as h, numberParam as i, resetEnvironment as k, resolveExperiment as l, getFeatureGate as m, defineExperimentParams as n, EXPERIMENT_UNAVAILABLE_SENTINEL as o, getFeatureDynamicConfig as p, enumParam as r, exposeExperimentOnce as s, booleanParam as t, resolveExperimentOnce as u, getIsFeatureManagementLocked as v, resetFeatureManagementProviderInstance as w, logEvent as x, getLayer as y };
|