Created
September 24, 2021 19:55
-
-
Save lamtranweb/c5a4b9179002ae0b934735d5b1ccaade to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
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 characters
| 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: {}, | |
| }, | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment