Skip to content

Instantly share code, notes, and snippets.

@wmcbain
Last active March 14, 2020 17:45
Show Gist options
  • Save wmcbain/1865eff95d5e7bbf4ca6e091137c4bd5 to your computer and use it in GitHub Desktop.
Save wmcbain/1865eff95d5e7bbf4ca6e091137c4bd5 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
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',
},
},
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: 'migrateBDUser',
REGISTER_PHONE_NUMBER: 'registerPhoneNumber',
},
},
migrateBDUser: {
entry: 'redirectToLoginBD',
initial: 'logIntoBD',
onDone: 'isLoggedIn',
on: {
CANCEL: 'waitForUserChoice',
},
states: {
logIntoBD: {
on: {
LOGGED_INTO_BD: 'routeBDUser',
},
},
routeBDUser: {
entry: 'routeBDUser',
on: {
IS_EXISTING_ALLE_MEMBER: 'isExistingAlleMember',
MIGRATE_PHONE_NUMBER: 'migratePhoneNumber',
HAS_PHONE_NUMBER: 'requestMigrationPhoneVerified',
},
},
isExistingAlleMember: {
entry: 'showExistingMembershipError',
},
migratePhoneNumber: {
entry: ['setSessionToken', 'redirectToRegisterPhone'],
on: {
PHONE_NUMBER_SUBMITTED: 'submitPhoneNumber',
},
},
submitPhoneNumber: {
entry: 'phoneNumberSubmitted',
on: {
BD_USER_SMS_CAPTURED: 'verifySMSCode',
},
},
verifySMSCode: {
entry: 'verifySMSCode',
on: {
BD_USER_SMS_VERIFIED: 'requestMigration',
},
},
requestMigrationPhoneVerified: {
entry: ['setSessionToken', 'redirectToRequestMigrationScreen'],
on: {
SUBMIT_MIGRATION: 'startBDMigration',
},
},
requestMigration: {
on: {
SUBMIT_MIGRATION: 'startBDMigration',
CANCEL: 'submitPhoneNumber',
},
},
startBDMigration: {
entry: 'redirectToBDMigrationScreen',
on: {
REGISTER_BD_USER: 'registerBDUser',
TOO_MANY_ATTEMPTS: 'lockMigration',
MIGRATION_ERROR: 'requestMigration',
},
},
lockMigration: {},
registerBDUser: {
entry: 'redirectToRegisterBDUserScreen',
on: {
USER_REGISTERED: 'registrationComplete',
},
},
registrationComplete: {
entry: 'authenticateUser',
on: {
USER_AUTHENTICATED: 'authenticated',
},
},
authenticated: {
type: 'final',
},
},
},
registerPhoneNumber: {
initial: 'captureCredentials',
onDone: 'registerNewUser',
on: {
CANCEL: 'waitForUserChoice',
},
states: {
captureCredentials: {
entry: 'redirectToRegisterPhone',
on: {
PHONE_NUMBER_SUBMITTED: 'submitPhoneNumber',
},
},
submitPhoneNumber: {
entry: 'phoneNumberSubmitted',
type: 'final',
},
},
},
registerNewUser: {
initial: 'waitForDeeplink',
onDone: 'isLoggedIn',
states: {
waitForDeeplink: {
on: {
DEEPLINK_CAPTURED: 'verifySMSCode',
},
},
verifySMSCode: {
entry: 'verifySMSCode',
on: {
REGISTER_USER: 'registerUser',
},
},
registerUser: {
entry: 'setSessionToken',
on: {
USER_REGISTERED: 'registrationComplete',
},
},
registrationComplete: {
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