@incodetech/core 2.1.0-rc.1 → 2.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/3dAvatarProvider-ChciZmjE.esm.js +28214 -0
- package/dist/{BrowserStorageProvider-BpJM-gIl.esm.js → BrowserStorageProvider-CrrN540a.esm.js} +1 -8
- package/dist/BrowserVisibilityObserverProvider-rim9Jrz-.esm.js +25 -0
- package/dist/Face2DProvider-BeLlYBbB.esm.js +824 -0
- package/dist/FaceDetectionProvider-B78455D4.d.ts +119 -0
- package/dist/IVisibilityObserverCapability-BbWjgpiF.d.ts +12 -0
- package/dist/IWasmUtilCapability-d2XvzaCk.d.ts +145 -0
- package/dist/IpifyProvider-BRW14_uo.esm.js +51 -0
- package/dist/{OpenViduRecordingProvider-O4GjBseO.esm.js → OpenViduRecordingProvider-B_0GKkzc.esm.js} +1 -1
- package/dist/PrivacyLensProvider-hDzaDzZ6.esm.js +339 -0
- package/dist/{StreamCanvasCapture-ImiDQdVA.esm.js → StreamCanvasCapture-Bz17q4FP.esm.js} +1 -1
- package/dist/StreamCanvasCapture-DS1TOoiH.d.ts +42 -0
- package/dist/{WasmUtilProvider-BKWm8rSA.esm.js → WasmUtilProvider-ADG54T6M.esm.js} +26 -2
- package/dist/{addressSearch-DvmWXKZg.esm.js → addressSearch-DJyNTg5S.esm.js} +4 -4
- package/dist/{ae-signature-BFZta3TZ.esm.js → ae-signature-DlElqFrZ.esm.js} +1 -1
- package/dist/ae-signature.d.ts +4 -3
- package/dist/ae-signature.esm.js +10 -7
- package/dist/antifraud.d.ts +4 -3
- package/dist/antifraud.esm.js +7 -6
- package/dist/antifraudManager-BKdQoMFf.esm.js +84 -0
- package/dist/{antifraudManager-CznnhyvD.d.ts → antifraudManager-DpIvbrZP.d.ts} +2 -2
- package/dist/{antifraudStateMachine-Ccrb-Jxc.esm.js → antifraudStateMachine-C0NGnP9W.esm.js} +3 -3
- package/dist/{api-CESGtpbH.esm.js → api-DsbUi7TO.esm.js} +21 -2
- package/dist/authentication.d.ts +19 -13
- package/dist/authentication.esm.js +33 -27
- package/dist/{authenticationManager-CaiQbp-q.d.ts → authenticationManager-CdPbNS2H.d.ts} +13 -3
- package/dist/{authenticationManager-BlR6mSaG.esm.js → authenticationManager-Dtl1vcET.esm.js} +17 -8
- package/dist/{authenticationStateMachine-DkcGUMw5.esm.js → authenticationStateMachine-D-hOlg8p.esm.js} +20 -23
- package/dist/avatar.d.ts +3 -0
- package/dist/avatar.esm.js +3 -0
- package/dist/{backCameraStream-D7Wo4Nbx.esm.js → backCameraStream-ZyqrFyjO.esm.js} +3 -3
- package/dist/browser-DlFgHpoC-qLKs75Qp.esm.js +1425 -0
- package/dist/{browserSimulation-B1dWiXp7.esm.js → browserSimulation-TsSoavQv.esm.js} +153 -1216
- package/dist/camera-DUkgmYMo.esm.js +79 -0
- package/dist/camera.d.ts +7 -1
- package/dist/camera.esm.js +4 -4
- package/dist/{StreamCanvasCapture-yyl20qd9.d.ts → canvas-CJUmoXSD.d.ts} +1 -41
- package/dist/certificate-issuance.d.ts +312 -0
- package/dist/certificate-issuance.esm.js +74 -0
- package/dist/certificateIssuanceStateMachine-C07m7qtP.esm.js +127 -0
- package/dist/clientLifecycle-Ct7h9uxx.esm.js +534 -0
- package/dist/consent.d.ts +4 -3
- package/dist/consent.esm.js +7 -6
- package/dist/{consentManager-BYo9Nu1r.esm.js → consentManager-BtnPZUW4.esm.js} +30 -5
- package/dist/{consentManager-Cg5Sk2tv.d.ts → consentManager-DufVo9D9.d.ts} +55 -55
- package/dist/{consentStateMachine-BG3yL8aC.esm.js → consentStateMachine-DO2JqoZW.esm.js} +3 -3
- package/dist/cpf-ocr.d.ts +4 -3
- package/dist/cpf-ocr.esm.js +7 -6
- package/dist/{cpfOcrManager-sSKegxox.esm.js → cpfOcrManager-C4rLgKsu.esm.js} +6 -5
- package/dist/{cpfOcrManager-Dg1s_TY5.d.ts → cpfOcrManager-DqZZ94Gt.d.ts} +19 -19
- package/dist/createFaceAvatar-B8pFpy6o.d.ts +401 -0
- package/dist/createFaceAvatar-BOHDKQRq.esm.js +46 -0
- package/dist/cross-document-data-match.d.ts +2 -1
- package/dist/cross-document-data-match.esm.js +6 -5
- package/dist/curp-validation.d.ts +10 -7
- package/dist/curp-validation.esm.js +7 -6
- package/dist/{curpValidationManager-CFem6zP9.esm.js → curpValidationManager-BafobPXC.esm.js} +52 -5
- package/dist/{curpValidationManager-RttixpIc.d.ts → curpValidationManager-Co6LZAHT.d.ts} +4 -3
- package/dist/{curpValidationStateMachine-B7V_qp66.esm.js → curpValidationStateMachine-DXTPK6vI.esm.js} +3 -3
- package/dist/custom-fields.d.ts +4 -2
- package/dist/custom-fields.esm.js +49 -6
- package/dist/custom-watchlist.d.ts +2 -1
- package/dist/custom-watchlist.esm.js +27 -6
- package/dist/{customWatchlistStateMachine-HmFybXLX.esm.js → customWatchlistStateMachine-B4G3Chkx.esm.js} +3 -3
- package/dist/{deepsightLoader-8tnddNx-.esm.js → deepsightLoader-DHSVD776.esm.js} +14 -13
- package/dist/{deepsightService-CrHmvx8X.esm.js → deepsightService-CDahSjGP.esm.js} +9 -38
- package/dist/deepsightService-CMB9XjES.d.ts +69 -0
- package/dist/device.d.ts +9 -1
- package/dist/device.esm.js +5 -5
- package/dist/document-capture.d.ts +178 -177
- package/dist/document-capture.esm.js +78 -14
- package/dist/document-upload.d.ts +51 -50
- package/dist/document-upload.esm.js +10 -9
- package/dist/{documentCaptureStateMachine-CUTUzUw_.esm.js → documentCaptureStateMachine-DSOX2epf.esm.js} +7 -7
- package/dist/dynamic-forms.d.ts +4 -192
- package/dist/dynamic-forms.esm.js +8 -410
- package/dist/dynamicFormsManager-BOefZbyF.esm.js +168 -0
- package/dist/dynamicFormsManager-CUYLOj9g.d.ts +239 -0
- package/dist/dynamicFormsStateMachine-BXHcaocI.esm.js +284 -0
- package/dist/ekyb.d.ts +10 -6
- package/dist/ekyb.esm.js +62 -17
- package/dist/{ekybStateMachine-klc-AImJ.esm.js → ekybStateMachine-CCSeqjCt.esm.js} +5 -5
- package/dist/ekyc.d.ts +5 -3
- package/dist/ekyc.esm.js +55 -9
- package/dist/{ekycStateMachine-CXbpaJJn.esm.js → ekycStateMachine-DkLVTOyA.esm.js} +5 -5
- package/dist/electronic-signature.d.ts +4 -3
- package/dist/electronic-signature.esm.js +9 -6
- package/dist/{electronicSignatureManager-BaECdJ1u.esm.js → electronicSignatureManager-DjzUzqZj.esm.js} +135 -92
- package/dist/email.d.ts +5 -4
- package/dist/email.esm.js +9 -8
- package/dist/{emailManager--D5G3ChB.esm.js → emailManager-B_XzEsXH.esm.js} +47 -6
- package/dist/{emailManager-lAzDoQOs.d.ts → emailManager-fHASH6uo.d.ts} +4 -3
- package/dist/{emailStateMachine-CxTOMAjC.esm.js → emailStateMachine-fqJ42b19.esm.js} +5 -5
- package/dist/{endpoints-BeTK0Mlt.esm.js → endpoints-BzMJFAPV.esm.js} +15 -0
- package/dist/{events-Dvvriq9l.esm.js → events-CqGY1yMq.esm.js} +87 -206
- package/dist/events.d.ts +23 -16
- package/dist/events.esm.js +3 -2
- package/dist/extensibility.d.ts +37 -27
- package/dist/extensibility.esm.js +74 -57
- package/dist/externalFetch-CyhBfD-n.esm.js +22 -0
- package/dist/face-match.d.ts +2 -2
- package/dist/face-match.esm.js +6 -5
- package/dist/{faceCaptureManagerFactory-ej2j1LMr.esm.js → faceCaptureManagerFactory-2brKTzMb.esm.js} +115 -25
- package/dist/faceCaptureManagerFactory-CGKbf7zt.d.ts +400 -0
- package/dist/{faceCaptureSetup-B9t6bYze.esm.js → faceCaptureSetup-CDUVU1nl.esm.js} +97 -13
- package/dist/{faceMatchStateMachine-DeXXzSuz.esm.js → faceMatchStateMachine-DUeUjEPx.esm.js} +3 -3
- package/dist/field-comparison.d.ts +4 -3
- package/dist/field-comparison.esm.js +6 -5
- package/dist/{fieldComparisonManager-COGI2ARD.esm.js → fieldComparisonManager-B9W0a9A5.esm.js} +5 -4
- package/dist/{fieldComparisonManager-Bu5TaSr3.d.ts → fieldComparisonManager-DdLqDeB2.d.ts} +2 -2
- package/dist/fiscal-qr.d.ts +5 -3
- package/dist/fiscal-qr.esm.js +13 -12
- package/dist/flow-events.d.ts +8 -6
- package/dist/flow.d.ts +34 -16
- package/dist/flow.esm.js +53 -30
- package/dist/flowCompletionService-BIqSTZcd.d.ts +28 -0
- package/dist/flowCompletionService-qEqh_g14.esm.js +42 -0
- package/dist/{flowServices-ChgTNggJ.esm.js → flowServices-C4piblgx.esm.js} +24 -9
- package/dist/geolocation.d.ts +4 -126
- package/dist/geolocation.esm.js +8 -87
- package/dist/geolocationManager-BP2Do9O-.esm.js +123 -0
- package/dist/geolocationManager-Cs50eRlC.d.ts +156 -0
- package/dist/{geolocationStateMachine-Dvh7X0wF.esm.js → geolocationStateMachine-BYfOOOG0.esm.js} +4 -4
- package/dist/{getDeviceClass-C8Do2qYu.esm.js → getDeviceClass-DGGzzfqm.esm.js} +1 -1
- package/dist/getDeviceData-TrKM8NPh.esm.js +101 -0
- package/dist/government-validation.d.ts +4 -3
- package/dist/government-validation.esm.js +43 -8
- package/dist/{governmentValidationStateMachine-DcJ-BfsC.esm.js → governmentValidationStateMachine-CwoPPO8b.esm.js} +5 -5
- package/dist/home.d.ts +18 -15
- package/dist/home.esm.js +5 -4
- package/dist/http.d.ts +1 -0
- package/dist/http.esm.js +2 -2
- package/dist/id-ocr.d.ts +4 -625
- package/dist/id-ocr.esm.js +8 -84
- package/dist/id-verification.d.ts +28 -27
- package/dist/id-verification.esm.js +6 -5
- package/dist/id.d.ts +24 -13
- package/dist/id.esm.js +48 -33
- package/dist/idCaptureDefaults-DNJON8Xo.esm.js +188 -0
- package/dist/{idCaptureManager-ChCNmgBj.d.ts → idCaptureManager-BVdvfJys.d.ts} +47 -12
- package/dist/{idCaptureManager-D3pwWutw.esm.js → idCaptureManager-Bo9DCQSU.esm.js} +100 -15
- package/dist/{idCaptureStateMachine-B3AiDIsT.esm.js → idCaptureStateMachine-BeDidMLU.esm.js} +525 -439
- package/dist/idOcrManager-BkRDrpZu.esm.js +92 -0
- package/dist/idOcrManager-CJzrmM91.d.ts +641 -0
- package/dist/{idOcrStateMachine-CDQ5d_VM.esm.js → idOcrStateMachine-DRZc4FBl.esm.js} +5 -5
- package/dist/{idVerificationStateMachine-kRxwImzO.esm.js → idVerificationStateMachine-oqiERKpg.esm.js} +3 -3
- package/dist/identity-reuse.d.ts +4 -3
- package/dist/identity-reuse.esm.js +7 -6
- package/dist/{identityReuseManager-C6n_97dw.esm.js → identityReuseManager-Bu62LToE.esm.js} +4 -3
- package/dist/{identityReuseManager-Cww-NDtd.d.ts → identityReuseManager-TWKbXuvY.d.ts} +33 -33
- package/dist/{identityReuseStateMachine-BfE5YiEr.esm.js → identityReuseStateMachine-BmONeF6B.esm.js} +3 -3
- package/dist/{index-B5hPA0Bg.d.ts → index-DtUlD-bz.d.ts} +2 -2
- package/dist/{index-B9NysVDB.d.ts → index-Icld-cKW.d.ts} +175 -295
- package/dist/index-XTtxaahe.d.ts +93 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.esm.js +16 -12
- package/dist/{invokeOnCaptureCallback-ygByVdnn.esm.js → invokeOnCaptureCallback-v_PV_IJz.esm.js} +1 -1
- package/dist/{lib-BY67lgbq.esm.js → lib-B050WTth.esm.js} +1 -1
- package/dist/mandatory-consent.d.ts +10 -7
- package/dist/mandatory-consent.esm.js +7 -6
- package/dist/{mandatoryConsentManager-Dq6WiOZh.d.ts → mandatoryConsentManager-Bmdjo14S.d.ts} +50 -50
- package/dist/{mandatoryConsentManager-H6D18cZB.esm.js → mandatoryConsentManager-CQ3jirlZ.esm.js} +4 -3
- package/dist/{mandatoryConsentStateMachine-DtQNW1ji.esm.js → mandatoryConsentStateMachine-DkJJLHqC.esm.js} +3 -3
- package/dist/mediaRecorderOptions-C3NAkVgK.esm.js +42 -0
- package/dist/mediapipeShared-CRAKVElv.esm.js +67 -0
- package/dist/{recordingService-yRw7hfzU.esm.js → onDeviceFaceResults-DVBggeq8.esm.js} +71 -389
- package/dist/{openviduLazy-Dh14JNJc.esm.js → openviduLazy-BTOIauGP.esm.js} +2 -2
- package/dist/openviduLazy-Dov8oKfL.esm.js +3 -0
- package/dist/{permissionGuards-D0wGddy7.esm.js → permissionGuards-BR2oN573.esm.js} +1 -1
- package/dist/{permissionServices-Doec4X5L.esm.js → permissionServices-BJhGL13R.esm.js} +7 -4
- package/dist/personhood.d.ts +534 -0
- package/dist/personhood.esm.js +1494 -0
- package/dist/phone.d.ts +5 -4
- package/dist/phone.esm.js +9 -8
- package/dist/{phoneManager-fPmIBYQK.d.ts → phoneManager-BOTcjXgs.d.ts} +4 -3
- package/dist/{phoneManager-BmF-0Ez4.esm.js → phoneManager-BWlxqbyD.esm.js} +48 -6
- package/dist/{phoneStateMachine-BiV0yoEx.esm.js → phoneStateMachine-B_V9nODs.esm.js} +5 -5
- package/dist/{qe-signature-CUYPcHVo.esm.js → qe-signature-BhFnI9pT.esm.js} +1 -1
- package/dist/qe-signature.d.ts +4 -3
- package/dist/qe-signature.esm.js +10 -7
- package/dist/recordingService-m_1xCthr.esm.js +347 -0
- package/dist/redirect-to-mobile.d.ts +4 -3
- package/dist/redirect-to-mobile.esm.js +9 -7
- package/dist/{redirectToMobileManager-Dy3t7o0C.esm.js → redirectToMobileManager-BaAo9rgi.esm.js} +5 -4
- package/dist/{redirectToMobileManager-BNe3IzC_.d.ts → redirectToMobileManager-Br0KZK1G.d.ts} +2 -2
- package/dist/{redirectToMobileStateMachine-DyAdRxfP.esm.js → redirectToMobileStateMachine-DoAnf2ql.esm.js} +16 -28
- package/dist/{runChildModule-CuoHZ1cx.esm.js → runChildModule-0nQfjVVo.esm.js} +14 -24
- package/dist/selfie.d.ts +27 -14
- package/dist/selfie.esm.js +43 -30
- package/dist/{selfieManager-BNuTIGAz.esm.js → selfieManager-D_ZFERsE.esm.js} +17 -8
- package/dist/{selfieManager-C2y_t6DG.d.ts → selfieManager-R0Jw5sjb.d.ts} +13 -3
- package/dist/{selfieStateMachine-Bv99bZJE.esm.js → selfieStateMachine-CIgeeiN9.esm.js} +4 -4
- package/dist/{session-DoVb-OcB.esm.js → session-9jIfKFCc.esm.js} +3 -3
- package/dist/session.d.ts +11 -8
- package/dist/session.esm.js +16 -12
- package/dist/{sessionInitializer-DRB-hgbV.esm.js → sessionInitializer-C_TYIgyk.esm.js} +16 -109
- package/dist/{setup-BwCluiw3.d.ts → setup-CpRnXxn8.d.ts} +61 -2
- package/dist/setup-DHc6OaHm.esm.js +562 -0
- package/dist/signature.d.ts +4 -2
- package/dist/signature.esm.js +49 -6
- package/dist/{signatureStateMachine-C5qqYLRz.esm.js → signatureStateMachine-DtoiPzys.esm.js} +21 -39
- package/dist/{stats-BMNUG1AU.esm.js → stats-CYcScXcO.esm.js} +2 -2
- package/dist/stats.esm.js +3 -3
- package/dist/thumbmarkAdapter-fHBUDlAP.esm.js +1194 -0
- package/dist/tri-BG1iJsr4.esm.js +399 -0
- package/dist/tri.d.ts +2 -0
- package/dist/tri.esm-DUC01NgO.esm.js +2593 -0
- package/dist/tri.esm.js +4 -0
- package/dist/trust-graph.d.ts +4 -3
- package/dist/trust-graph.esm.js +4 -3
- package/dist/{types-NuT8ftBV.d.ts → types-BklZ_Wne.d.ts} +2 -1
- package/dist/{types-DOUhndhT.d.ts → types-BsYXnC5s.d.ts} +39 -3
- package/dist/{types-DsnEVMhr.esm.js → types-CMcxlSmH.esm.js} +2 -1
- package/dist/types-CxW2e0Ar.d.ts +132 -0
- package/dist/{types-Bj9hdFjU.d.ts → types-DgGlgyZT.d.ts} +1 -1
- package/dist/types-ElOJAGaM.esm.js +189 -0
- package/dist/urlUtils-BZqFU9rR.esm.js +16 -0
- package/dist/video-C2WIj6TS.esm.js +36 -0
- package/dist/video-selfie.d.ts +351 -0
- package/dist/video-selfie.esm.js +1509 -0
- package/dist/videoSelfieSteps-7M5vxKn-.esm.js +58 -0
- package/dist/{warmup-Dg8Lh-50.d.ts → warmup-BJZPQIiX.d.ts} +5 -1
- package/dist/wasm.d.ts +4 -3
- package/dist/wasm.esm.js +17 -13
- package/dist/watchlist-for-business.d.ts +2 -1
- package/dist/watchlist-for-business.esm.js +30 -7
- package/dist/watchlist.d.ts +2 -1
- package/dist/watchlist.esm.js +28 -6
- package/dist/{watchlistForBusinessStateMachine-DMl8j2Ov.esm.js → watchlistForBusinessStateMachine-DvEunDxs.esm.js} +3 -3
- package/dist/{watchlistStateMachine-DmQlqI6L.esm.js → watchlistStateMachine-AHXVf-TB.esm.js} +3 -3
- package/dist/workflow.d.ts +296 -103
- package/dist/workflow.esm.js +137 -74
- package/dist/{xstate.esm-C9wncMQa.esm.js → xstate.esm-Bomq1a0z.esm.js} +54 -5
- package/package.json +26 -1
- package/dist/IpifyProvider-D4LWD15E.esm.js +0 -167
- package/dist/antifraudManager-CkV4u-LE.esm.js +0 -55
- package/dist/camera-DJWm3V4g.esm.js +0 -22
- package/dist/deepsightService-Dh5P-hLf.d.ts +0 -265
- package/dist/faceCaptureManagerFactory-CjdBUS6s.d.ts +0 -721
- package/dist/flowCompletionService-BdR2cGgB.d.ts +0 -19
- package/dist/flowCompletionService-DdGojV9K.esm.js +0 -20
- package/dist/getBrowser-C8DP7oTB.esm.js +0 -8
- package/dist/openviduLazy-B8L--0oe.esm.js +0 -3
- package/dist/setup-CUO4mErT.esm.js +0 -1037
- /package/dist/{Actor-Y0_Fj-KL.d.ts → Actor-CGEelYtQ.d.ts} +0 -0
- /package/dist/{BrowserTimerProvider-DhNc_x02.esm.js → BrowserTimerProvider-CHloo0eQ.esm.js} +0 -0
- /package/dist/{ITimerCapability-CB0I1Uf2.esm.js → ITimerCapability-pltuG1E8.esm.js} +0 -0
- /package/dist/{Manager-BHn8wH8K.d.ts → Manager-CJ3G2zqi.d.ts} +0 -0
- /package/dist/{MotionSensorProvider-Bx7Mpzt0.esm.js → MotionSensorProvider-DCbId4De.esm.js} +0 -0
- /package/dist/{StateMachine-BC_nGvrc.d.ts → StateMachine-C_AY4cs7.d.ts} +0 -0
- /package/dist/{apiError-B-j-gyDx.esm.js → apiError-DNS2OCEX.esm.js} +0 -0
- /package/dist/{camera-SRBpPq2X.d.ts → camera-CNVUo-bC.d.ts} +0 -0
- /package/dist/{canvas-SKcRBxsk.esm.js → canvas-_I95hkPg.esm.js} +0 -0
- /package/dist/{chunk-CMUKZ2uL.esm.js → chunk-CIKcdghV.esm.js} +0 -0
- /package/dist/{cpf-BRzggV8G.esm.js → cpf-BKaho0j_.esm.js} +0 -0
- /package/dist/{dateUtils-AksLQmgV.esm.js → dateUtils-7-tQYRNN.esm.js} +0 -0
- /package/dist/{getDeviceClass-C0olyNFS.esm.js → getDeviceClass-DavNdcxh.esm.js} +0 -0
- /package/dist/{http-Cai3IoLS.esm.js → http-BkiUT7EB.esm.js} +0 -0
- /package/dist/{otp-CGMdUzBC.esm.js → otp-Bfnzf7I3.esm.js} +0 -0
- /package/dist/{otp-DF5A0sFx.d.ts → otp-M4iy57XY.d.ts} +0 -0
- /package/dist/{platform-SKvEfCBh.esm.js → platform-uIVQUnJP.esm.js} +0 -0
- /package/dist/{types-DvGZI7BF.d.ts → types-D_IceWxT.d.ts} +0 -0
- /package/dist/{types-ya0LN_MX.d.ts → types-Duy2rDxF.d.ts} +0 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { t as Manager } from "./Manager-CJ3G2zqi.js";
|
|
2
|
+
import { t as ActorRefFrom } from "./Actor-CGEelYtQ.js";
|
|
3
|
+
|
|
4
|
+
//#region src/modules/dynamic-forms/types.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Input types supported by dynamic form questions.
|
|
8
|
+
* `inputType` on `Question` is optional so unknown future API values degrade
|
|
9
|
+
* gracefully to the text fallback rather than requiring this union to be widened.
|
|
10
|
+
*/
|
|
11
|
+
type InputType = 'TEXT' | 'DATE' | 'COUNTRY' | 'NATIONALITY' | 'NUMBER' | 'EMAIL' | 'PHONE' | 'CPF' | 'NAME' | 'YESNO' | 'SELECT' | 'MULTISELECT';
|
|
12
|
+
/**
|
|
13
|
+
* A single question within a dynamic form screen.
|
|
14
|
+
*/
|
|
15
|
+
type Question = {
|
|
16
|
+
questionId: string;
|
|
17
|
+
/** Display label shown to the user */
|
|
18
|
+
question: string;
|
|
19
|
+
inputType?: InputType;
|
|
20
|
+
/** Fallback type used when `inputType` is absent */
|
|
21
|
+
overrides?: InputType;
|
|
22
|
+
isPredefined?: boolean;
|
|
23
|
+
isOptional?: boolean;
|
|
24
|
+
options?: string[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* A single screen within the dynamic form flow.
|
|
28
|
+
*/
|
|
29
|
+
type Screen = {
|
|
30
|
+
title?: string;
|
|
31
|
+
hideTitle?: boolean;
|
|
32
|
+
questions: Question[];
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Configuration for the dynamic forms module.
|
|
36
|
+
* Provide either `screens` (pre-loaded) or `flowId` (fetched from API).
|
|
37
|
+
*/
|
|
38
|
+
type DynamicFormsConfig = {
|
|
39
|
+
/** Flow ID used to fetch screens from the API when `screens` is not provided */
|
|
40
|
+
flowId?: string;
|
|
41
|
+
/** Pre-loaded screens — skips the API fetch when provided */
|
|
42
|
+
screens?: Screen[];
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/modules/dynamic-forms/dynamicFormsFields.d.ts
|
|
46
|
+
/** Map of `questionId` → currently-displayed i18n error key. */
|
|
47
|
+
type DynamicFormsValidationErrors = Partial<Record<string, string>>;
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/modules/dynamic-forms/dynamicFormsStateMachine.d.ts
|
|
50
|
+
/** Whether the form completed normally or was skipped due to a screen-loading failure. */
|
|
51
|
+
type DynamicFormsResult = 'completed' | 'skipped';
|
|
52
|
+
declare const dynamicFormsMachine: any;
|
|
53
|
+
type DynamicFormsMachine = typeof dynamicFormsMachine;
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/modules/dynamic-forms/dynamicFormsActor.d.ts
|
|
56
|
+
type CreateDynamicFormsActorOptions = {
|
|
57
|
+
config: DynamicFormsConfig;
|
|
58
|
+
};
|
|
59
|
+
type DynamicFormsActor = ActorRefFrom<DynamicFormsMachine>;
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/modules/dynamic-forms/dynamicFormsManager.d.ts
|
|
62
|
+
/** Dynamic forms manager is in initial state, waiting for `load()` */
|
|
63
|
+
type DynamicFormsIdleState = {
|
|
64
|
+
status: 'idle';
|
|
65
|
+
};
|
|
66
|
+
/** Fetching screen configuration from the backend */
|
|
67
|
+
type DynamicFormsLoadingState = {
|
|
68
|
+
status: 'loadingScreens';
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Ready for user input on the current screen.
|
|
72
|
+
* @property currentScreen - The screen definition to render
|
|
73
|
+
* @property screenIndex - 0-based index of the current screen
|
|
74
|
+
* @property totalScreens - Total number of screens in the form
|
|
75
|
+
* @property answers - Current answer values keyed by questionId
|
|
76
|
+
* @property answerValidity - Per-question format validity reported via `setAnswerValidity` (phone, email, CPF, etc.)
|
|
77
|
+
* @property validationErrors - Errors currently surfaced to the user, keyed by questionId. Entries appear on blur or submit, clear on type. Render as-is — no further UI-side gating.
|
|
78
|
+
* @property canSubmit - True when no validation errors are currently displayed. Optimistic semantic: enabled on initial empty form; disables only after a submit attempt populates errors.
|
|
79
|
+
*/
|
|
80
|
+
type DynamicFormsInputtingState = {
|
|
81
|
+
status: 'inputting';
|
|
82
|
+
currentScreen: Screen;
|
|
83
|
+
screenIndex: number;
|
|
84
|
+
totalScreens: number;
|
|
85
|
+
answers: Record<string, string>;
|
|
86
|
+
answerValidity: Record<string, boolean>;
|
|
87
|
+
validationErrors?: DynamicFormsValidationErrors;
|
|
88
|
+
canSubmit: boolean;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Submitting the current screen's answers to the backend.
|
|
92
|
+
* The screen data is preserved so the UI can keep the form visible (with
|
|
93
|
+
* disabled fields and a button spinner) while the request is in-flight.
|
|
94
|
+
* @property screenIndex - Index of the screen being submitted
|
|
95
|
+
* @property totalScreens - Total number of screens in the form
|
|
96
|
+
* @property currentScreen - The screen whose answers are being submitted
|
|
97
|
+
* @property answers - Frozen answer values at submission time
|
|
98
|
+
* @property answerValidity - Frozen validity flags at submission time
|
|
99
|
+
*/
|
|
100
|
+
type DynamicFormsSubmittingState = {
|
|
101
|
+
status: 'submitting';
|
|
102
|
+
screenIndex: number;
|
|
103
|
+
totalScreens: number;
|
|
104
|
+
currentScreen: Screen;
|
|
105
|
+
answers: Record<string, string>;
|
|
106
|
+
answerValidity: Record<string, boolean>;
|
|
107
|
+
validationErrors?: DynamicFormsValidationErrors;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* All screens submitted — success screen visible for ~3 s before
|
|
111
|
+
* transitioning to `finished`.
|
|
112
|
+
*/
|
|
113
|
+
type DynamicFormsSuccessState = {
|
|
114
|
+
status: 'success';
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* All screens completed or skipped.
|
|
118
|
+
* @property result - `'completed'` when all screens were submitted successfully;
|
|
119
|
+
* `'skipped'` when screen configuration could not be loaded (fire-and-forget).
|
|
120
|
+
*/
|
|
121
|
+
type DynamicFormsFinishedState = {
|
|
122
|
+
status: 'finished';
|
|
123
|
+
result: DynamicFormsResult;
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Neither `screens` nor `flowId` was provided — misconfiguration, not a runtime error.
|
|
127
|
+
* Call `close()` to dismiss. Fix the config (provide `screens` or `flowId`) instead.
|
|
128
|
+
*/
|
|
129
|
+
type DynamicFormsMisconfiguredState = {
|
|
130
|
+
status: 'misconfigured';
|
|
131
|
+
};
|
|
132
|
+
/** User dismissed the module */
|
|
133
|
+
type DynamicFormsClosedState = {
|
|
134
|
+
status: 'closed';
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Union of all possible dynamic forms manager states.
|
|
138
|
+
*/
|
|
139
|
+
type DynamicFormsState = DynamicFormsIdleState | DynamicFormsLoadingState | DynamicFormsInputtingState | DynamicFormsSubmittingState | DynamicFormsSuccessState | DynamicFormsFinishedState | DynamicFormsMisconfiguredState | DynamicFormsClosedState;
|
|
140
|
+
/**
|
|
141
|
+
* Creates a dynamic forms manager for headless or UI-driven usage.
|
|
142
|
+
*
|
|
143
|
+
* @param options - Configuration options
|
|
144
|
+
* @param options.config - Dynamic forms configuration (flowId or pre-loaded screens)
|
|
145
|
+
*
|
|
146
|
+
* @returns Dynamic forms manager with state, API methods, and subscription
|
|
147
|
+
*/
|
|
148
|
+
declare function createDynamicFormsManager(options: CreateDynamicFormsActorOptions): Manager<DynamicFormsState> & {
|
|
149
|
+
/**
|
|
150
|
+
* Initializes the dynamic forms flow.
|
|
151
|
+
* Transitions from 'idle' to 'loadingScreens' or 'inputting'.
|
|
152
|
+
* Must be called before any other method.
|
|
153
|
+
*/
|
|
154
|
+
load(): void;
|
|
155
|
+
/**
|
|
156
|
+
* Updates the answer value for a single question.
|
|
157
|
+
* Should be called when state is 'inputting'.
|
|
158
|
+
*
|
|
159
|
+
* @param questionId - The question ID from the screen definition
|
|
160
|
+
* @param value - The raw user input value (formatting is stripped in Core before submission)
|
|
161
|
+
*/
|
|
162
|
+
setAnswer(questionId: string, value: string): void;
|
|
163
|
+
/**
|
|
164
|
+
* Reports the format validity of a question's current value.
|
|
165
|
+
* Used for fields with format constraints (PHONE, EMAIL, CPF).
|
|
166
|
+
* A `false` entry feeds into the `formatViaAnswerValidity` validation rule
|
|
167
|
+
* and surfaces as a `validationErrors[questionId]` entry once validated.
|
|
168
|
+
*
|
|
169
|
+
* @param questionId - The question ID from the screen definition
|
|
170
|
+
* @param isValid - Whether the current value passes format validation
|
|
171
|
+
*/
|
|
172
|
+
setAnswerValidity(questionId: string, isValid: boolean): void;
|
|
173
|
+
/**
|
|
174
|
+
* Triggers validation for a single field (e.g., on blur).
|
|
175
|
+
* Populates or clears `validationErrors[questionId]` accordingly.
|
|
176
|
+
*
|
|
177
|
+
* @param questionId - The question ID from the screen definition
|
|
178
|
+
*/
|
|
179
|
+
validateField(questionId: string): void;
|
|
180
|
+
/**
|
|
181
|
+
* Submits the current screen's answers.
|
|
182
|
+
* Transitions to 'submitting', then advances to the next screen or 'finished'.
|
|
183
|
+
* Answer submission failures are fire-and-forget and do not block progression.
|
|
184
|
+
*/
|
|
185
|
+
submit(): void;
|
|
186
|
+
/**
|
|
187
|
+
* Dismisses the module from 'misconfigured' state.
|
|
188
|
+
* Fix the config (provide `screens` or `flowId`) rather than calling `reset()`.
|
|
189
|
+
*/
|
|
190
|
+
close(): void;
|
|
191
|
+
};
|
|
192
|
+
declare function createDynamicFormsManagerFromActor(actor: DynamicFormsActor): Manager<DynamicFormsState> & {
|
|
193
|
+
/**
|
|
194
|
+
* Initializes the dynamic forms flow.
|
|
195
|
+
* Transitions from 'idle' to 'loadingScreens' or 'inputting'.
|
|
196
|
+
* Must be called before any other method.
|
|
197
|
+
*/
|
|
198
|
+
load(): void;
|
|
199
|
+
/**
|
|
200
|
+
* Updates the answer value for a single question.
|
|
201
|
+
* Should be called when state is 'inputting'.
|
|
202
|
+
*
|
|
203
|
+
* @param questionId - The question ID from the screen definition
|
|
204
|
+
* @param value - The raw user input value (formatting is stripped in Core before submission)
|
|
205
|
+
*/
|
|
206
|
+
setAnswer(questionId: string, value: string): void;
|
|
207
|
+
/**
|
|
208
|
+
* Reports the format validity of a question's current value.
|
|
209
|
+
* Used for fields with format constraints (PHONE, EMAIL, CPF).
|
|
210
|
+
* A `false` entry feeds into the `formatViaAnswerValidity` validation rule
|
|
211
|
+
* and surfaces as a `validationErrors[questionId]` entry once validated.
|
|
212
|
+
*
|
|
213
|
+
* @param questionId - The question ID from the screen definition
|
|
214
|
+
* @param isValid - Whether the current value passes format validation
|
|
215
|
+
*/
|
|
216
|
+
setAnswerValidity(questionId: string, isValid: boolean): void;
|
|
217
|
+
/**
|
|
218
|
+
* Triggers validation for a single field (e.g., on blur).
|
|
219
|
+
* Populates or clears `validationErrors[questionId]` accordingly.
|
|
220
|
+
*
|
|
221
|
+
* @param questionId - The question ID from the screen definition
|
|
222
|
+
*/
|
|
223
|
+
validateField(questionId: string): void;
|
|
224
|
+
/**
|
|
225
|
+
* Submits the current screen's answers.
|
|
226
|
+
* Transitions to 'submitting', then advances to the next screen or 'finished'.
|
|
227
|
+
* Answer submission failures are fire-and-forget and do not block progression.
|
|
228
|
+
*/
|
|
229
|
+
submit(): void;
|
|
230
|
+
/**
|
|
231
|
+
* Dismisses the module from 'misconfigured' state.
|
|
232
|
+
* Fix the config (provide `screens` or `flowId`) rather than calling `reset()`.
|
|
233
|
+
*/
|
|
234
|
+
close(): void;
|
|
235
|
+
};
|
|
236
|
+
/** Type representing a dynamic forms manager instance. */
|
|
237
|
+
type DynamicFormsManager = ReturnType<typeof createDynamicFormsManager>;
|
|
238
|
+
//#endregion
|
|
239
|
+
export { DynamicFormsActor as a, DynamicFormsValidationErrors as c, Question as d, Screen as f, createDynamicFormsManagerFromActor as i, DynamicFormsConfig as l, DynamicFormsState as n, DynamicFormsResult as o, createDynamicFormsManager as r, dynamicFormsMachine as s, DynamicFormsManager as t, InputType as u };
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { t as api } from "./api-DsbUi7TO.esm.js";
|
|
2
|
+
import { t as endpoints } from "./endpoints-BzMJFAPV.esm.js";
|
|
3
|
+
import { a as fromPromise, r as assign, t as setup } from "./xstate.esm-Bomq1a0z.esm.js";
|
|
4
|
+
import { t as isoDateToMs } from "./dateUtils-7-tQYRNN.esm.js";
|
|
5
|
+
|
|
6
|
+
//#region src/modules/dynamic-forms/dynamicFormsFields.ts
|
|
7
|
+
function getEffectiveType(question) {
|
|
8
|
+
return question.inputType ?? question.overrides ?? "TEXT";
|
|
9
|
+
}
|
|
10
|
+
const FORMAT_ERROR_KEY_BY_TYPE = {
|
|
11
|
+
PHONE: "phone.invalidPhone",
|
|
12
|
+
EMAIL: "verification.errors.emailInvalid",
|
|
13
|
+
CPF: "dynamicForms.invalidCpf"
|
|
14
|
+
};
|
|
15
|
+
function buildQuestionValidation(question) {
|
|
16
|
+
const effectiveType = getEffectiveType(question);
|
|
17
|
+
const rules = [];
|
|
18
|
+
if (!question.isOptional) rules.push({ type: "required" });
|
|
19
|
+
const formatErrorKey = FORMAT_ERROR_KEY_BY_TYPE[effectiveType];
|
|
20
|
+
if (formatErrorKey) rules.push({
|
|
21
|
+
type: "formatViaAnswerValidity",
|
|
22
|
+
errorKey: formatErrorKey
|
|
23
|
+
});
|
|
24
|
+
return rules;
|
|
25
|
+
}
|
|
26
|
+
function buildScreenFields(formScreen) {
|
|
27
|
+
return formScreen.questions.map((q) => ({
|
|
28
|
+
questionId: q.questionId,
|
|
29
|
+
inputType: getEffectiveType(q),
|
|
30
|
+
isOptional: q.isOptional ?? false,
|
|
31
|
+
validation: buildQuestionValidation(q)
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/modules/dynamic-forms/dynamicFormsValidators.ts
|
|
37
|
+
const VALIDATORS = {
|
|
38
|
+
required: ({ value }) => value.trim().length === 0 ? "dynamicForms.fieldRequired" : void 0,
|
|
39
|
+
formatViaAnswerValidity: ({ questionId, answerValidity }, rule) => answerValidity[questionId] === false ? rule.errorKey : void 0
|
|
40
|
+
};
|
|
41
|
+
const normalizeValue = (value) => typeof value === "string" ? value : String(value ?? "");
|
|
42
|
+
function evaluateRules(input, rules) {
|
|
43
|
+
for (const rule of rules) {
|
|
44
|
+
const error = rule.type === "required" ? VALIDATORS.required(input) : VALIDATORS.formatViaAnswerValidity(input, rule);
|
|
45
|
+
if (error) return error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Runs full-screen validation. Returns first failing key per field; empty = pass. */
|
|
49
|
+
function validateScreenForm(answers, fields, answerValidity) {
|
|
50
|
+
return fields.reduce((errors, field) => {
|
|
51
|
+
const error = evaluateRules({
|
|
52
|
+
value: normalizeValue(answers[field.questionId]),
|
|
53
|
+
questionId: field.questionId,
|
|
54
|
+
answerValidity
|
|
55
|
+
}, field.validation);
|
|
56
|
+
if (error) errors[field.questionId] = error;
|
|
57
|
+
return errors;
|
|
58
|
+
}, {});
|
|
59
|
+
}
|
|
60
|
+
/** Runs single-field validation (blur). Unknown `questionId` → `undefined`. */
|
|
61
|
+
function validateScreenField(answers, questionId, fields, answerValidity) {
|
|
62
|
+
const field = fields.find((f) => f.questionId === questionId);
|
|
63
|
+
if (!field) return void 0;
|
|
64
|
+
return evaluateRules({
|
|
65
|
+
value: normalizeValue(answers[questionId]),
|
|
66
|
+
questionId,
|
|
67
|
+
answerValidity
|
|
68
|
+
}, field.validation);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
//#endregion
|
|
72
|
+
//#region src/modules/dynamic-forms/dynamicFormsServices.ts
|
|
73
|
+
async function fetchForms(flowId, signal) {
|
|
74
|
+
const url = `${endpoints.moduleConfig}?id=${encodeURIComponent(flowId)}&moduleKey=DYNAMIC_FORMS`;
|
|
75
|
+
const res = await api.get(url, { signal });
|
|
76
|
+
if (!res.ok) throw new Error(`GET ${endpoints.moduleConfig} failed: ${res.status} ${res.statusText}`);
|
|
77
|
+
return res.data;
|
|
78
|
+
}
|
|
79
|
+
async function submitFormAnswer(params, signal) {
|
|
80
|
+
const res = await api.post(endpoints.dynamicFormsSubmitAnswer, {
|
|
81
|
+
questionId: params.questionId,
|
|
82
|
+
answerDetails: { singleAnswer: params.singleAnswer }
|
|
83
|
+
}, { signal });
|
|
84
|
+
if (!res.ok) throw new Error(`POST ${endpoints.dynamicFormsSubmitAnswer} failed: ${res.status} ${res.statusText}`);
|
|
85
|
+
return res.data;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/modules/dynamic-forms/dynamicFormsStateMachine.ts
|
|
90
|
+
function transformAnswerValue(inputType, value) {
|
|
91
|
+
switch (inputType) {
|
|
92
|
+
case "CPF": return value.replace(/[-.]/g, "");
|
|
93
|
+
case "DATE": return isoDateToMs(value).toString();
|
|
94
|
+
default: return value;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const removeKey = (errors, key) => {
|
|
98
|
+
if (!errors?.[key]) return errors;
|
|
99
|
+
const next = { ...errors };
|
|
100
|
+
delete next[key];
|
|
101
|
+
return Object.keys(next).length > 0 ? next : void 0;
|
|
102
|
+
};
|
|
103
|
+
const upsertKey = (errors, key, message) => {
|
|
104
|
+
const next = { ...errors ?? {} };
|
|
105
|
+
if (message) next[key] = message;
|
|
106
|
+
else delete next[key];
|
|
107
|
+
return Object.keys(next).length > 0 ? next : void 0;
|
|
108
|
+
};
|
|
109
|
+
const dynamicFormsMachine = setup({
|
|
110
|
+
types: {
|
|
111
|
+
context: {},
|
|
112
|
+
events: {},
|
|
113
|
+
input: {}
|
|
114
|
+
},
|
|
115
|
+
actors: {
|
|
116
|
+
fetchScreens: fromPromise(async ({ input, signal }) => {
|
|
117
|
+
return fetchForms(input.flowId, signal);
|
|
118
|
+
}),
|
|
119
|
+
submitScreenAnswers: fromPromise(async ({ input, signal }) => {
|
|
120
|
+
const { screen: formScreen, answers } = input;
|
|
121
|
+
for (const question of formScreen.questions) {
|
|
122
|
+
const singleAnswer = transformAnswerValue(question.inputType ?? question.overrides ?? "TEXT", answers[question.questionId] ?? "");
|
|
123
|
+
try {
|
|
124
|
+
await submitFormAnswer({
|
|
125
|
+
questionId: question.questionId,
|
|
126
|
+
singleAnswer
|
|
127
|
+
}, signal);
|
|
128
|
+
} catch {}
|
|
129
|
+
}
|
|
130
|
+
return { success: true };
|
|
131
|
+
})
|
|
132
|
+
},
|
|
133
|
+
actions: {
|
|
134
|
+
setScreens: assign(({ event }) => {
|
|
135
|
+
const screens = event.output.screens;
|
|
136
|
+
const firstScreen = screens[0];
|
|
137
|
+
return {
|
|
138
|
+
screens,
|
|
139
|
+
answers: {},
|
|
140
|
+
currentScreenFields: firstScreen ? buildScreenFields(firstScreen) : []
|
|
141
|
+
};
|
|
142
|
+
}),
|
|
143
|
+
setAnswer: assign(({ context, event }) => {
|
|
144
|
+
const e = event;
|
|
145
|
+
return {
|
|
146
|
+
answers: {
|
|
147
|
+
...context.answers,
|
|
148
|
+
[e.questionId]: e.value
|
|
149
|
+
},
|
|
150
|
+
validationErrors: removeKey(context.validationErrors, e.questionId)
|
|
151
|
+
};
|
|
152
|
+
}),
|
|
153
|
+
setAnswerValidity: assign(({ context, event }) => {
|
|
154
|
+
const e = event;
|
|
155
|
+
return {
|
|
156
|
+
answerValidity: {
|
|
157
|
+
...context.answerValidity,
|
|
158
|
+
[e.questionId]: e.isValid
|
|
159
|
+
},
|
|
160
|
+
validationErrors: removeKey(context.validationErrors, e.questionId)
|
|
161
|
+
};
|
|
162
|
+
}),
|
|
163
|
+
validateFormField: assign(({ context, event }) => {
|
|
164
|
+
if (event.type !== "VALIDATE_FIELD") return {};
|
|
165
|
+
const message = validateScreenField(context.answers, event.questionId, context.currentScreenFields, context.answerValidity);
|
|
166
|
+
return { validationErrors: upsertKey(context.validationErrors, event.questionId, message) };
|
|
167
|
+
}),
|
|
168
|
+
computeValidationResult: assign(({ context }) => {
|
|
169
|
+
const errors = validateScreenForm(context.answers, context.currentScreenFields, context.answerValidity);
|
|
170
|
+
return { validationErrors: Object.keys(errors).length > 0 ? errors : void 0 };
|
|
171
|
+
}),
|
|
172
|
+
advanceScreen: assign(({ context }) => {
|
|
173
|
+
const nextIndex = context.currentScreenIndex + 1;
|
|
174
|
+
const nextScreen = context.screens[nextIndex];
|
|
175
|
+
return {
|
|
176
|
+
currentScreenIndex: nextIndex,
|
|
177
|
+
answers: {},
|
|
178
|
+
answerValidity: {},
|
|
179
|
+
currentScreenFields: nextScreen ? buildScreenFields(nextScreen) : [],
|
|
180
|
+
validationErrors: void 0
|
|
181
|
+
};
|
|
182
|
+
}),
|
|
183
|
+
markCompleted: assign({ result: "completed" }),
|
|
184
|
+
markSkipped: assign({ result: "skipped" })
|
|
185
|
+
},
|
|
186
|
+
guards: {
|
|
187
|
+
hasPreloadedScreens: ({ context }) => (context.config.screens?.length ?? 0) > 0,
|
|
188
|
+
hasFlowId: ({ context }) => !!context.config.flowId,
|
|
189
|
+
isLastScreen: ({ context }) => context.currentScreenIndex >= context.screens.length - 1,
|
|
190
|
+
isScreenValid: ({ context }) => Object.keys(context.validationErrors ?? {}).length === 0
|
|
191
|
+
}
|
|
192
|
+
}).createMachine({
|
|
193
|
+
id: "dynamicForms",
|
|
194
|
+
initial: "idle",
|
|
195
|
+
context: ({ input }) => {
|
|
196
|
+
const screens = input.config.screens ?? [];
|
|
197
|
+
const firstScreen = screens[0];
|
|
198
|
+
return {
|
|
199
|
+
config: input.config,
|
|
200
|
+
screens,
|
|
201
|
+
currentScreenIndex: 0,
|
|
202
|
+
answers: {},
|
|
203
|
+
answerValidity: {},
|
|
204
|
+
currentScreenFields: firstScreen ? buildScreenFields(firstScreen) : [],
|
|
205
|
+
result: null
|
|
206
|
+
};
|
|
207
|
+
},
|
|
208
|
+
states: {
|
|
209
|
+
idle: { on: { LOAD: [
|
|
210
|
+
{
|
|
211
|
+
target: "inputting",
|
|
212
|
+
guard: "hasPreloadedScreens"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
target: "loadingScreens",
|
|
216
|
+
guard: "hasFlowId"
|
|
217
|
+
},
|
|
218
|
+
{ target: "misconfigured" }
|
|
219
|
+
] } },
|
|
220
|
+
loadingScreens: { invoke: {
|
|
221
|
+
id: "fetchScreens",
|
|
222
|
+
src: "fetchScreens",
|
|
223
|
+
input: ({ context }) => ({ flowId: context.config.flowId ?? "" }),
|
|
224
|
+
onDone: {
|
|
225
|
+
target: "inputting",
|
|
226
|
+
actions: "setScreens"
|
|
227
|
+
},
|
|
228
|
+
onError: {
|
|
229
|
+
target: "finished",
|
|
230
|
+
actions: "markSkipped"
|
|
231
|
+
}
|
|
232
|
+
} },
|
|
233
|
+
inputting: {
|
|
234
|
+
initial: "editing",
|
|
235
|
+
states: {
|
|
236
|
+
editing: { on: {
|
|
237
|
+
ANSWER_CHANGED: { actions: "setAnswer" },
|
|
238
|
+
ANSWER_VALIDITY_CHANGED: { actions: "setAnswerValidity" },
|
|
239
|
+
VALIDATE_FIELD: { actions: "validateFormField" },
|
|
240
|
+
SUBMIT: { target: "validatingSubmit" }
|
|
241
|
+
} },
|
|
242
|
+
validatingSubmit: {
|
|
243
|
+
entry: "computeValidationResult",
|
|
244
|
+
always: [{
|
|
245
|
+
guard: "isScreenValid",
|
|
246
|
+
target: "#dynamicForms.submitting"
|
|
247
|
+
}, { target: "editing" }]
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
submitting: { invoke: {
|
|
252
|
+
id: "submitScreenAnswers",
|
|
253
|
+
src: "submitScreenAnswers",
|
|
254
|
+
input: ({ context }) => ({
|
|
255
|
+
screen: context.screens[context.currentScreenIndex],
|
|
256
|
+
answers: context.answers
|
|
257
|
+
}),
|
|
258
|
+
onDone: [{
|
|
259
|
+
target: "success",
|
|
260
|
+
guard: "isLastScreen"
|
|
261
|
+
}, {
|
|
262
|
+
target: "inputting",
|
|
263
|
+
actions: "advanceScreen"
|
|
264
|
+
}],
|
|
265
|
+
onError: [{
|
|
266
|
+
target: "success",
|
|
267
|
+
guard: "isLastScreen"
|
|
268
|
+
}, {
|
|
269
|
+
target: "inputting",
|
|
270
|
+
actions: "advanceScreen"
|
|
271
|
+
}]
|
|
272
|
+
} },
|
|
273
|
+
success: { after: { 3e3: {
|
|
274
|
+
target: "finished",
|
|
275
|
+
actions: "markCompleted"
|
|
276
|
+
} } },
|
|
277
|
+
finished: { type: "final" },
|
|
278
|
+
misconfigured: { on: { CLOSE: { target: "closed" } } },
|
|
279
|
+
closed: { type: "final" }
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
//#endregion
|
|
284
|
+
export { dynamicFormsMachine as t };
|
package/dist/ekyb.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "./
|
|
3
|
-
import "./
|
|
4
|
-
import "./
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
1
|
+
import "./StateMachine-C_AY4cs7.js";
|
|
2
|
+
import { t as Manager } from "./Manager-CJ3G2zqi.js";
|
|
3
|
+
import "./Actor-CGEelYtQ.js";
|
|
4
|
+
import "./camera-CNVUo-bC.js";
|
|
5
|
+
import "./types-DgGlgyZT.js";
|
|
6
|
+
import { c as AddressSuggestion, l as FieldDef } from "./types-D_IceWxT.js";
|
|
7
|
+
import "./canvas-CJUmoXSD.js";
|
|
8
|
+
import "./createFaceAvatar-B8pFpy6o.js";
|
|
9
|
+
import { i as FlowModuleConfig } from "./types-BsYXnC5s.js";
|
|
7
10
|
|
|
8
11
|
//#region src/modules/ekyb/types.d.ts
|
|
9
12
|
type UboEntry = {
|
|
@@ -60,6 +63,7 @@ type CreateEkybActorOptions = {
|
|
|
60
63
|
};
|
|
61
64
|
//#endregion
|
|
62
65
|
//#region src/modules/ekyb/ekybManager.d.ts
|
|
66
|
+
|
|
63
67
|
type EkybLoadingState = {
|
|
64
68
|
status: 'loading';
|
|
65
69
|
};
|
package/dist/ekyb.esm.js
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
import "./BrowserTimerProvider-
|
|
2
|
-
import "./api-
|
|
3
|
-
import { n as
|
|
4
|
-
import "./
|
|
5
|
-
import "./
|
|
6
|
-
import "./
|
|
7
|
-
import "./browserSimulation-
|
|
8
|
-
import "./sessionInitializer-
|
|
9
|
-
import "./
|
|
10
|
-
import "./
|
|
11
|
-
import
|
|
12
|
-
import "./
|
|
13
|
-
import
|
|
14
|
-
import "./
|
|
15
|
-
import "./
|
|
16
|
-
import "./
|
|
1
|
+
import "./BrowserTimerProvider-CHloo0eQ.esm.js";
|
|
2
|
+
import "./api-DsbUi7TO.esm.js";
|
|
3
|
+
import { n as createManagerInstrumentation, t as topLevelStateName } from "./events-CqGY1yMq.esm.js";
|
|
4
|
+
import { n as eventModuleNames } from "./types-ElOJAGaM.esm.js";
|
|
5
|
+
import "./endpoints-BzMJFAPV.esm.js";
|
|
6
|
+
import "./stats-CYcScXcO.esm.js";
|
|
7
|
+
import "./browserSimulation-TsSoavQv.esm.js";
|
|
8
|
+
import "./sessionInitializer-C_TYIgyk.esm.js";
|
|
9
|
+
import "./getDeviceData-TrKM8NPh.esm.js";
|
|
10
|
+
import "./thumbmarkAdapter-fHBUDlAP.esm.js";
|
|
11
|
+
import "./IpifyProvider-BRW14_uo.esm.js";
|
|
12
|
+
import "./platform-uIVQUnJP.esm.js";
|
|
13
|
+
import "./tri-BG1iJsr4.esm.js";
|
|
14
|
+
import { l as createManager, s as createActor } from "./xstate.esm-Bomq1a0z.esm.js";
|
|
15
|
+
import "./apiError-DNS2OCEX.esm.js";
|
|
16
|
+
import { a as SUPPORTED_COUNTRIES, i as DEV_ONLY_COUNTRIES, n as toEkybConfig, o as isSupportedCountry, r as ALL_COUNTRIES, t as ekybMachine } from "./ekybStateMachine-CCSeqjCt.esm.js";
|
|
17
|
+
import "./addressSearch-DJyNTg5S.esm.js";
|
|
18
|
+
import "./session-9jIfKFCc.esm.js";
|
|
19
|
+
import "./videoSelfieSteps-7M5vxKn-.esm.js";
|
|
20
|
+
import "./flowServices-C4piblgx.esm.js";
|
|
17
21
|
|
|
18
22
|
//#region src/modules/ekyb/ekybActor.ts
|
|
19
23
|
/**
|
|
@@ -26,6 +30,47 @@ function createEkybActor(options) {
|
|
|
26
30
|
|
|
27
31
|
//#endregion
|
|
28
32
|
//#region src/modules/ekyb/ekybManager.ts
|
|
33
|
+
/**
|
|
34
|
+
* Maps an eKYB state-machine snapshot to the exact Figma "Tracked
|
|
35
|
+
* Events" screen name. Source: eKYC / eKYB Figma file → Tracked Events
|
|
36
|
+
* canvas
|
|
37
|
+
* (`https://www.figma.com/design/TWgYZVhurQCizfC4tfLEut/eKYC---eKYB---Ready-for-Dev?node-id=2977-10474`).
|
|
38
|
+
* Family is `eKYB.*` and section names are returned verbatim, emitted as-is
|
|
39
|
+
* on `event.screen` by `createManagerInstrumentation` (e.g. `eKYB.default`,
|
|
40
|
+
* `eKYB.processing`). See `docs/patterns/INSTRUMENTATION.md`.
|
|
41
|
+
*
|
|
42
|
+
* Figma sub-states not currently surfaced by the state machine (the form
|
|
43
|
+
* state machine collapses country selection, business details, and UBO
|
|
44
|
+
* entry into a single `form` compound state):
|
|
45
|
+
*
|
|
46
|
+
* - `eKYB.bdetails` (business details, empty) — UI step after country
|
|
47
|
+
* selection.
|
|
48
|
+
* - `eKYB.filled` (business details filled) — UI sub-state when required
|
|
49
|
+
* fields have values.
|
|
50
|
+
* - `eKYB.UBO` (empty / filled — the Figma canvas duplicates the section
|
|
51
|
+
* name for both variants) — UBO entry step.
|
|
52
|
+
*
|
|
53
|
+
* All three collapse onto `eKYB.default` (the country selection / form
|
|
54
|
+
* entry surface). Promoting them requires the state machine to surface
|
|
55
|
+
* step-based sub-states; tracked for a follow-up.
|
|
56
|
+
*
|
|
57
|
+
* `closed` is intentionally unmapped (terminal user-dismissed state —
|
|
58
|
+
* handled by `moduleClosed`).
|
|
59
|
+
*/
|
|
60
|
+
function getEkybScreenName(snapshot) {
|
|
61
|
+
const stateName = topLevelStateName(snapshot.value);
|
|
62
|
+
if (stateName === void 0) return void 0;
|
|
63
|
+
switch (stateName) {
|
|
64
|
+
case "idle":
|
|
65
|
+
case "loading":
|
|
66
|
+
case "form": return "eKYB.default";
|
|
67
|
+
case "submitting": return "eKYB.processing";
|
|
68
|
+
case "success":
|
|
69
|
+
case "finished": return "eKYB.success";
|
|
70
|
+
case "error": return "eKYB.error";
|
|
71
|
+
default: return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
29
74
|
function mapState(snapshot) {
|
|
30
75
|
const typedSnapshot = snapshot;
|
|
31
76
|
const { context } = typedSnapshot;
|
|
@@ -129,7 +174,7 @@ function createEkybManager(options) {
|
|
|
129
174
|
actor: createEkybActor(options),
|
|
130
175
|
mapState,
|
|
131
176
|
createApi,
|
|
132
|
-
instrumentation: createManagerInstrumentation(eventModuleNames.ekyb)
|
|
177
|
+
instrumentation: createManagerInstrumentation(eventModuleNames.ekyb, { getEventScreenName: getEkybScreenName })
|
|
133
178
|
});
|
|
134
179
|
}
|
|
135
180
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as api } from "./api-
|
|
2
|
-
import { t as endpoints } from "./endpoints-
|
|
3
|
-
import { a as fromPromise, r as assign, t as setup } from "./xstate.esm-
|
|
4
|
-
import { a as getPostalCodeMaxLength, c as STREET_LEVEL_REQUIRED_ERROR, d as usStateOptions, i as getPostalCodeErrorKey, l as fillFromSuggestion, n as FIXED_DIGIT_POSTAL_CODE_LENGTH, o as validatePostalCode, r as formatPostalCode, s as DYNAMIC_REQUIRED_KEY, t as debounceSearchActor, u as getStreetLevelErrorForSuggestion } from "./addressSearch-
|
|
5
|
-
import { t as getFlow } from "./flowServices-
|
|
1
|
+
import { t as api } from "./api-DsbUi7TO.esm.js";
|
|
2
|
+
import { t as endpoints } from "./endpoints-BzMJFAPV.esm.js";
|
|
3
|
+
import { a as fromPromise, r as assign, t as setup } from "./xstate.esm-Bomq1a0z.esm.js";
|
|
4
|
+
import { a as getPostalCodeMaxLength, c as STREET_LEVEL_REQUIRED_ERROR, d as usStateOptions, i as getPostalCodeErrorKey, l as fillFromSuggestion, n as FIXED_DIGIT_POSTAL_CODE_LENGTH, o as validatePostalCode, r as formatPostalCode, s as DYNAMIC_REQUIRED_KEY, t as debounceSearchActor, u as getStreetLevelErrorForSuggestion } from "./addressSearch-DJyNTg5S.esm.js";
|
|
5
|
+
import { t as getFlow } from "./flowServices-C4piblgx.esm.js";
|
|
6
6
|
|
|
7
7
|
//#region src/modules/ekyb/ekybConstants.ts
|
|
8
8
|
const UBO_INPUT_LIMIT = 8;
|
package/dist/ekyc.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "./
|
|
3
|
-
import
|
|
1
|
+
import "./StateMachine-C_AY4cs7.js";
|
|
2
|
+
import { t as Manager } from "./Manager-CJ3G2zqi.js";
|
|
3
|
+
import "./Actor-CGEelYtQ.js";
|
|
4
|
+
import { a as EkycValidationError, c as AddressSuggestion, i as EkycModuleConfig, n as EkycFieldDef, o as EkycValidationErrors, r as EkycFormValues, t as EkycConfig } from "./types-D_IceWxT.js";
|
|
4
5
|
|
|
5
6
|
//#region src/modules/ekyc/ekycStateMachine.d.ts
|
|
6
7
|
declare const ekycMachine: any;
|
|
@@ -11,6 +12,7 @@ type CreateEkycActorOptions = {
|
|
|
11
12
|
};
|
|
12
13
|
//#endregion
|
|
13
14
|
//#region src/modules/ekyc/ekycManager.d.ts
|
|
15
|
+
|
|
14
16
|
type EkycLoadingState = {
|
|
15
17
|
status: 'loading';
|
|
16
18
|
};
|