Last active
March 18, 2020 20:48
-
-
Save wmcbain/d5833d856195aa2b1e25511c958ef674 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 authMachine = Machine({ | |
| id: 'auth_machine', | |
| initial: 'authIsLoading', | |
| context: { | |
| sessionToken: null, | |
| }, | |
| states: { | |
| authIsLoading: { | |
| on: { | |
| LOGGED_IN: 'isLoggedIn', | |
| NOT_LOGGED_IN: 'waitForUserChoice', | |
| }, | |
| }, | |
| isLoggedIn: { | |
| entry: 'redirectToAccount', | |
| on: { | |
| LOG_OUT: 'logout', | |
| }, | |
| }, | |
| waitForUserChoice: { | |
| on: { | |
| REGISTER: 'forkInRoad', | |
| LOG_IN: 'login', | |
| DEEPLINK_CAPTURED: 'registerNewUser', | |
| FORGOT_PASSWORD: 'forgotPassword', | |
| BD_USER_DEEPLINK_CAPTURED: 'verifyBDUser', | |
| RESET_PASSWORD_DEEPLINK_CAPTURED: 'resetPassword', | |
| }, | |
| }, | |
| login: { | |
| initial: 'oktaLogin', | |
| onDone: 'isLoggedIn', | |
| on: { | |
| CANCEL: 'waitForUserChoice', | |
| }, | |
| states: { | |
| oktaLogin: { | |
| entry: 'startOktaLogin', | |
| on: { | |
| USER_AUTHENTICATED: 'authenticated', | |
| }, | |
| }, | |
| authenticated: { | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| forkInRoad: { | |
| entry: 'redirectToForkInRoad', | |
| on: { | |
| CANCEL: 'waitForUserChoice', | |
| MIGRATE_BD_USER: 'loginBDUser', | |
| REGISTER_PHONE_NUMBER: 'registerNewUserPhoneNumber', | |
| }, | |
| }, | |
| loginBDUser: { | |
| entry: 'redirectToLoginBD', | |
| initial: 'bdLogin', | |
| onDone: 'waitForUserChoice', | |
| on: { | |
| CANCEL: 'waitForUserChoice', | |
| REQUEST_MIGRATION: 'requestMigration', | |
| }, | |
| states: { | |
| bdLogin: { | |
| on: { | |
| LOGGED_INTO_BD: 'routeBDUser', | |
| }, | |
| }, | |
| routeBDUser: { | |
| entry: 'routeBDUser', | |
| on: { | |
| IS_EXISTING_ALLE_MEMBER: 'isExistingAlleMember', | |
| MIGRATE_PHONE_NUMBER: 'migratePhoneNumber', | |
| HAS_PHONE_NUMBER: 'hasPhoneNumber', | |
| }, | |
| }, | |
| isExistingAlleMember: { | |
| on: { | |
| RETRY_BD_LOGIN: 'bdLogin', | |
| }, | |
| }, | |
| migratePhoneNumber: { | |
| entry: ['setSessionToken', 'redirectToRegisterPhone'], | |
| on: { | |
| PHONE_NUMBER_SUBMITTED: 'submitPhoneNumber', | |
| }, | |
| }, | |
| submitPhoneNumber: { | |
| entry: 'redirectToHomeScreen', | |
| type: 'final', | |
| }, | |
| hasPhoneNumber: { | |
| entry: 'setSessionToken', | |
| }, | |
| }, | |
| }, | |
| verifyBDUser: { | |
| initial: 'verifyPhoneNumber', | |
| onDone: 'requestMigration', | |
| states: { | |
| verifyPhoneNumber: { | |
| entry: 'verifyBDPhoneNumber', | |
| on: { | |
| BD_USER_PHONE_VERIFIED: 'phoneNumberVerified', | |
| }, | |
| }, | |
| phoneNumberVerified: { | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| requestMigration: { | |
| entry: 'redirectToRequestMigrationScreen', | |
| on: { | |
| SUBMIT_MIGRATION: 'migrateBDUser', | |
| CANCEL: 'waitForUserChoice', | |
| }, | |
| }, | |
| migrateBDUser: { | |
| initial: 'startBDMigration', | |
| onDone: 'isLoggedIn', | |
| on: { | |
| MIGRATION_ERROR: 'requestMigration', | |
| }, | |
| states: { | |
| startBDMigration: { | |
| entry: 'redirectToBDMigrationScreen', | |
| on: { | |
| REGISTER_BD_USER: 'registerBDUser', | |
| TOO_MANY_ATTEMPTS: 'lockMigration', | |
| }, | |
| }, | |
| lockMigration: {}, | |
| registerBDUser: { | |
| entry: 'redirectToRegisterBDUserScreen', | |
| on: { | |
| USER_REGISTERED: 'registrationComplete', | |
| }, | |
| }, | |
| registrationComplete: { | |
| entry: 'authenticateUser', | |
| on: { | |
| USER_AUTHENTICATED: 'authenticated', | |
| }, | |
| }, | |
| authenticated: { | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| registerNewUserPhoneNumber: { | |
| initial: 'registerPhoneNumber', | |
| onDone: 'waitForUserChoice', | |
| on: { | |
| CANCEL: 'waitForUserChoice', | |
| }, | |
| states: { | |
| registerPhoneNumber: { | |
| entry: 'redirectToRegisterPhone', | |
| on: { | |
| PHONE_NUMBER_SUBMITTED: 'submitPhoneNumber', | |
| }, | |
| }, | |
| submitPhoneNumber: { | |
| entry: 'redirectToHomeScreen', | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| registerNewUser: { | |
| initial: 'verifyPhoneNumber', | |
| onDone: 'isLoggedIn', | |
| states: { | |
| verifyPhoneNumber: { | |
| entry: 'verifyPhoneNumber', | |
| on: { | |
| REGISTER_USER: 'registerUser', | |
| }, | |
| }, | |
| registerUser: { | |
| entry: 'setSessionToken', | |
| on: { | |
| USER_REGISTERED: 'registrationComplete', | |
| }, | |
| }, | |
| registrationComplete: { | |
| entry: 'authenticateUser', | |
| on: { | |
| USER_AUTHENTICATED: 'authenticated', | |
| }, | |
| }, | |
| authenticated: { | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| forgotPassword: { | |
| initial: 'submitUsername', | |
| on: { | |
| CANCEL: 'waitForUserChoice', | |
| }, | |
| onDone: 'waitForUserChoice', | |
| states: { | |
| submitUsername: { | |
| entry: 'redirectToForgotPasswordScreen', | |
| on: { | |
| USERNAME_SUBMITTED: 'codeRequested', | |
| }, | |
| }, | |
| codeRequested: { | |
| entry: 'redirectToHomeScreen', | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| resetPassword: { | |
| initial: 'verifyResetPasswordToken', | |
| onDone: 'isLoggedIn', | |
| on: { | |
| CANCEL: 'waitForUserChoice', | |
| }, | |
| states: { | |
| verifyResetPasswordToken: { | |
| entry: 'verifyResetPasswordToken', | |
| on: { | |
| VERIFIED_RESET_PASSWORD_TOKEN: 'createNewPassword', | |
| RESET_PASSWORD_TOKEN_ERROR: 'resetPasswordError', | |
| }, | |
| }, | |
| createNewPassword: { | |
| entry: 'setSessionToken', | |
| on: { | |
| PASSWORD_CHANGED: 'authenticateUser', | |
| }, | |
| }, | |
| resetPasswordError: {}, | |
| authenticateUser: { | |
| entry: 'authenticateUser', | |
| on: { | |
| USER_AUTHENTICATED: 'authenticated', | |
| }, | |
| }, | |
| authenticated: { | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| logout: { | |
| initial: 'oktaLogout', | |
| onDone: 'waitForUserChoice', | |
| on: { | |
| CANCEL: 'isLoggedIn', | |
| }, | |
| states: { | |
| oktaLogout: { | |
| entry: 'startOktaLogout', | |
| on: { | |
| USER_LOGGED_OUT: 'loggedOut', | |
| }, | |
| }, | |
| loggedOut: { | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| }, | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment