Created
September 24, 2021 19:55
-
-
Save lamtranweb/c5a4b9179002ae0b934735d5b1ccaade to your computer and use it in GitHub Desktop.
Revisions
-
lamtranweb created this gist
Sep 24, 2021 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,417 @@ const machineDefinition = Machine({ id: 'KYC', initial: 'pre_init', context: { phoneNumber: null, supportsGetUserMedia: true, forcedDesktop: false, }, states: { pre_init: { invoke: { src: 'initialize', onDone: { actions: ['initMachine'], target: 'init', }, }, }, init: { on: { VERIFY_PHONE_NUMBER: 'phone_number_verification_start', KYC: 'intro', KYC_INITIATED: 'reinit_verifying', }, }, reinit_verifying: { invoke: { src: 'fetchKycChecks', onDone: { actions: ['restoreKycChecks'], target: 'submit_verification', }, }, }, phone_number_verification_start: { // invoke: { // src: phoneMachine, // onDone: { // actions: ['savePhoneNumber'], // target: '#KYC.init', // }, // }, }, intro: { on: { // we temporarily do not show passport choice // since it does not have the user's state NEXT: [ { target: 'launch_dl_camera', cond: 'isMobile', }, { target: 'dl_camera', cond: 'isDesktop', }, ], NEXT_MANUAL: 'manual_dl_camera', FORCE_DESKTOP: { actions: ['forceDesktop'], target: 'intro_desktop', }, // this is here just for testing the passport screen // since we'll need to use it later PASSPORT: 'launch_passport_camera', }, }, intro_desktop: { on: { DESKTOP_NEXT_FILE: { actions: 'saveDriverLicenseFront', target: 'desktop_launch_barcode_camera', }, DESKTOP_ERROR: { actions: ['saveDriverLicenseFront', 'saveDriverLicenseError'], target: 'desktop_manual_dl_camera_error', }, }, }, desktop_launch_barcode_camera: { on: { DESKTOP_NEXT_FILE: { actions: 'saveBarcode', target: 'desktop_launch_selfie_camera', }, DESKTOP_ERROR: { actions: ['saveDriverLicenseBack', 'saveDriverLicenseError'], target: 'desktop_manual_barcode_camera_error', }, }, }, desktop_launch_selfie_camera: { on: { DESKTOP_NEXT_FILE: { actions: 'saveSelfie', target: 'launch_verify', }, DESKTOP_ERROR: { actions: ['safeSelfie', 'saveSelfieError'], target: 'desktop_manual_selfie_camera_error', }, }, }, document_chooser: { on: { DRIVER_LICENSE: 'launch_dl_camera', PASSPORT: 'launch_passport_camera', }, }, launch_dl_camera: { on: { NEXT: 'dl_camera', CAMERA_NEXT: { actions: 'saveDriverLicenseFront', target: 'launch_barcode_camera', }, CAMERA_ERROR: { actions: ['saveDriverLicenseFront', 'saveDriverLicenseError'], target: 'manual_dl_camera_error', }, }, }, launch_passport_camera: { on: { NEXT: 'passport_camera', }, }, dl_camera: { on: { CAMERA_NEXT: { actions: 'saveDriverLicenseFront', target: 'launch_barcode_camera', }, LAUNCH_MANUAL: 'manual_dl_camera', LAUNCH_MANUAL_FORCED: 'manual_dl_camera_forced', ERROR: { actions: ['saveError'], target: 'error', }, CAMERA_ERROR: { actions: ['saveDriverLicenseFront', 'saveDriverLicenseError'], target: 'manual_dl_camera_error', }, // only used in KycDesktop CLOSE: 'intro', }, }, manual_dl_camera: { on: { CAMERA_NEXT: { actions: 'saveDriverLicenseFront', target: 'launch_barcode_camera', }, CAMERA_ERROR: { actions: ['saveDriverLicenseFront', 'saveDriverLicenseError'], target: 'manual_dl_camera_error', }, CLOSE: 'intro', LAUNCH_AUTO: 'dl_camera', }, }, manual_dl_camera_forced: { on: { CAMERA_NEXT: { actions: 'saveDriverLicenseFront', target: 'launch_barcode_camera', }, CAMERA_ERROR: { actions: ['saveDriverLicenseFront', 'saveDriverLicenseError'], target: 'manual_dl_camera_error', }, CLOSE: 'intro', }, }, manual_dl_camera_error: { on: { NEXT: 'dl_camera', NEXT_MANUAL: 'manual_dl_camera', RETRY: 'manual_dl_camera', RELAUNCH: 'launch_dl_camera', PROCEED: 'launch_barcode_camera', }, }, desktop_manual_dl_camera_error: { on: { DESKTOP_NEXT_FILE: { actions: 'saveDriverLicenseFront', target: 'desktop_launch_barcode_camera', }, DESKTOP_ERROR: { actions: ['saveDriverLicenseFront', 'saveDriverLicenseError'], target: 'desktop_manual_dl_camera_error', }, }, }, launch_barcode_camera: { on: { NEXT: 'barcode_camera', NEXT_MANUAL: 'manual_barcode_camera', CAMERA_NEXT: { actions: 'saveBarcode', target: 'launch_selfie_camera', }, CAMERA_ERROR: { actions: ['saveDriverLicenseBack', 'saveDriverLicenseError'], target: 'manual_barcode_camera_error', }, }, }, barcode_camera: { on: { CAMERA_NEXT: { actions: 'saveBarcode', target: 'launch_selfie_camera', }, LAUNCH_MANUAL: 'manual_barcode_camera', LAUNCH_MANUAL_FORCED: 'manual_barcode_camera_forced', ERROR: { actions: ['saveError'], target: 'error', }, CAMERA_ERROR: { actions: ['saveDriverLicenseBack', 'saveDriverLicenseError'], target: 'manual_barcode_camera_error', }, CLOSE: 'launch_barcode_camera', }, }, manual_barcode_camera: { on: { CAMERA_NEXT: { actions: 'saveBarcode', target: 'launch_selfie_camera', }, CAMERA_ERROR: { actions: ['saveDriverLicenseBack', 'saveDriverLicenseError'], target: 'manual_barcode_camera_error', }, CLOSE: 'launch_barcode_camera', LAUNCH_AUTO: 'barcode_camera', }, }, manual_barcode_camera_forced: { on: { CAMERA_NEXT: { actions: 'saveBarcode', target: 'launch_selfie_camera', }, CAMERA_ERROR: { actions: ['saveDriverLicenseBack', 'saveDriverLicenseError'], target: 'manual_dl_camera_error', }, CLOSE: 'launch_barcode_camera', }, }, manual_barcode_camera_error: { on: { NEXT: 'barcode_camera', NEXT_MANUAL: 'manual_barcode_camera', RETRY: 'manual_barcode_camera', RELAUNCH: 'launch_barcode_camera', PROCEED: 'launch_selfie_camera', }, }, desktop_manual_barcode_camera_error: { on: { DESKTOP_NEXT_FILE: { actions: 'saveBarcode', target: 'desktop_launch_selfie_camera', }, DESKTOP_ERROR: { actions: ['saveDriverLicenseBack', 'saveDriverLicenseError'], target: 'desktop_manual_barcode_camera_error', }, }, }, passport_camera: { on: { CAMERA_NEXT: { actions: 'savePassport', target: 'launch_selfie_camera', }, LAUNCH_MANUAL: 'manual_passport_camera', ERROR: { actions: ['saveError'], target: 'error', }, }, }, manual_passport_camera: { on: { CAMERA_NEXT: { actions: 'savePassport', target: 'launch_selfie_camera', }, CLOSE: 'intro', }, }, launch_selfie_camera: { on: { NEXT: 'selfie_camera', NEXT_MANUAL: 'manual_selfie_camera', CAMERA_NEXT: { actions: 'saveSelfie', target: 'launch_verify', }, CAMERA_ERROR: { actions: ['saveSelfie', 'saveSelfieError'], target: 'manual_selfie_camera_error', }, }, }, selfie_camera: { on: { CAMERA_NEXT: { actions: 'saveSelfie', target: 'launch_verify', }, LAUNCH_MANUAL: 'manual_selfie_camera', LAUNCH_MANUAL_FORCED: 'manual_selfie_camera_forced', CAMERA_ERROR: { actions: ['saveSelfie', 'saveSelfieError'], target: 'manual_selfie_camera_error', }, ERROR: { actions: ['saveError'], target: 'error', }, CLOSE: 'launch_selfie_camera', }, }, manual_selfie_camera: { on: { CAMERA_NEXT: { actions: 'saveSelfie', target: 'launch_verify', }, CAMERA_ERROR: { actions: ['saveSelfie', 'saveSelfieError'], target: 'manual_selfie_camera_error', }, CLOSE: 'launch_selfie_camera', LAUNCH_AUTO: 'selfie_camera', }, }, manual_selfie_camera_error: { on: { NEXT: 'selfie_camera', NEXT_MANUAL: 'manual_selfie_camera', RETRY: 'manual_selfie_camera', RELAUNCH: 'launch_selfie_camera', PROCEED: 'launch_verify', }, }, desktop_manual_selfie_camera_error: { on: { DESKTOP_NEXT_FILE: { actions: 'saveSelfie', target: 'launch_verify', }, DESKTOP_ERROR: { actions: ['safeSelfie', 'saveSelfieError'], target: 'desktop_manual_selfie_camera_error', }, }, }, manual_selfie_camera_forced: { on: { CAMERA_NEXT: { actions: 'saveSelfie', target: 'launch_verify', }, CLOSE: 'launch_selfie_camera', }, }, launch_verify: { on: { NEXT: 'verify', }, }, verify: { on: { FINAL_VERIFY: { actions: ['saveUserDataFromMitek'], target: 'submit_verification', }, NO_SUPPORT_STATE: { actions: ['clearData'], target: 'no_support_state', }, CLOSE: { actions: ['clearData'], target: 'intro', }, }, }, submit_verification: { on: { SUCCESS: 'success', UPDATE_INFO: { actions: ['updateUserData'], }, FAILURE_CONTACT_US: 'failure_contact_us', FAILURE_NO_CONTACT_US: 'failure_no_contact_us', CLOSE: 'intro', }, }, success: {}, failure_contact_us: {}, failure_no_contact_us: {}, no_support_state: {}, error: {}, }, });