Skip to content

Instantly share code, notes, and snippets.

@UberMouse
Created May 15, 2020 01:38
Show Gist options
  • Save UberMouse/dbca2575df5e2b1df5459f41680f45e1 to your computer and use it in GitHub Desktop.
Save UberMouse/dbca2575df5e2b1df5459f41680f45e1 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
var Actions;
(function (Actions) {
Actions["storeRefreshToken"] = "storeRefreshToken";
Actions["removeRefreshToken"] = "removeRefreshToken";
})(Actions || (Actions = {}));
var Services;
(function (Services) {
Services["checkToken"] = "checkToken";
Services["performOauthFlow"] = "performOauthFlow";
Services["retrieveTokens"] = "retrieveTokens";
Services["refreshToken"] = "refreshToken";
Services["retrieveApiToken"] = "retrieveApiToken";
})(Services || (Services = {}));
const machine = Machine({
id: "main-auth",
initial: "checkingToken",
states: {
checkingToken: {
invoke: {
id: Services.checkToken,
src: Services.checkToken,
onDone: "refreshingToken",
onError: "loggedOut",
},
},
loggingIn: {
initial: "userAuthorizing",
states: {
userAuthorizing: {
invoke: {
id: Services.performOauthFlow,
src: Services.performOauthFlow,
onDone: "retrievingToken",
onError: "#loggedOut",
},
},
retrievingToken: {
invoke: {
id: Services.retrieveTokens,
src: Services.retrieveTokens,
onDone: {
target: "#retrievingApiToken",
internal: false,
actions: [Actions.storeRefreshToken],
},
onError: "#error",
},
},
},
},
refreshingToken: {
invoke: {
id: Services.refreshToken,
src: Services.refreshToken,
onDone: {
target: "retrievingApiToken",
internal: false,
actions: [Actions.storeRefreshToken],
},
onError: "error",
},
},
retrievingApiToken: {
id: "retrievingApiToken",
invoke: {
id: Services.retrieveApiToken,
src: Services.retrieveApiToken,
onDone: "authenticated",
onError: "error",
},
},
authenticated: {
on: {
LOG_OUT: {
actions: [Actions.removeRefreshToken],
target: "loggedOut",
},
},
},
loggedOut: {
id: "loggedOut",
on: {
LOG_IN: "loggingIn",
},
},
error: {
id: "error",
},
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment