Skip to content

Instantly share code, notes, and snippets.

@dstockto
Last active July 9, 2020 03:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dstockto/5c761764c8d00dad1665594c1686b518 to your computer and use it in GitHub Desktop.
Save dstockto/5c761764c8d00dad1665594c1686b518 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
// - XState (all XState exports)
const loginAllowed = (context, event) => {
return (context.username && context.password);
}
const mfaLoginAllowed = (context, event) => {
return loginAllowed(context, event) && context.mfaCode;
}
const fetchMachine = Machine({
id: 'fetch',
initial: 'loggedOut',
context: {
username: '',
password: '',
mfaCode:'',
},
states: {
loggedOut:{
on: {
LOGIN: {
target: 'submitCredentials',
cond: loginAllowed,
},
USE_MFA_CODE: 'getMfaCode',
PROVIDE_USER: 'provideUsername',
PROVDE_PASSWORD: 'providePassword',
}
},
provideUsername: {
on: {
TYPE_USER: {
actions: assign({
username: (ctx, evt) => {
console.log({evt})
return evt.username}
}),
target: 'loggedOut'
}
}
},
providePassword: {
on: {
TYPE_PASSWORD: {
actions: assign({password: 'password'}),
target: 'loggedOut'
}
}
},
submitCredentials: {
on: {
LOGIN_SUCCESS: 'loggedIn',
LOGIN_FAILURE: 'loggedOut',
LOGIN_MFA_REQUIRED: 'getMfaCode',
},
invoke: {
src: "submitUserAndPassword"
}
},
getMfaCode: {
on: {
NO_MFA_CODE: 'loggedOut',
SUBMIT_MFA_AND_CREDENTIALS: {
target: 'validateMfa',
cond: mfaLoginAllowed
},
TYPE_MFA_CODE: 'provideMfaCode',
}
},
provideMfaCode: {
on: {
TYPE_MFA_CODE: {
actions: assign((evt, ctx) => {mfaCode: evt.mfaCode}),
target: 'getMfaCode'
}
}
},
validateMfa: {
on: {
MFA_SUCCESS: 'loggedIn',
MFA_FAILURE: {
target: 'getMfaCode',
actions: assign({mfaCode: ''}),
}
},
invoke: {
src: "submitUserPassandCode"
}
},
loggedIn: {
on: {
LOGOUT: 'loggedOut'
}
}
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment