FromDoppler / doppler-session-mfe

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Doppler Session Micro-Frontend

Doppler Session Polling

Basic behavior of DopplerSession micro-frontend:

sequenceDiagram
  participant Browser
  participant DopplerSessionMFE
  participant window
  participant DopplerMVC

  Browser->>+DopplerSessionMFE: start
  DopplerSessionMFE->>window: WRITE dopplerSessionState = undefined
  DopplerSessionMFE-)window:dispatchEvent("doppler-session-state-update")
  alt User does not have a session in Doppler
    DopplerSessionMFE->>+DopplerMVC: GetUserData(cookie)
    DopplerMVC-->>-DopplerSessionMFE: Error
    DopplerSessionMFE->>window: WRITE dopplerSessionState = { status: "non-authenticated" }
    DopplerSessionMFE-)window: dispatchEvent("doppler-session-state-update", { status: "non-authenticated" })
  else User has a session in Doppler
    DopplerSessionMFE->>+DopplerMVC: GetUserData(cookie)
    DopplerMVC-->>-DopplerSessionMFE: UserData
    DopplerSessionMFE->>window: WRITE dopplerSessionState = { status: "authenticated", . . . }
    DopplerSessionMFE-)window: dispatchEvent("doppler-session-state-update", { status: "authenticated", . . . })
  end
  deactivate DopplerSessionMFE

  loop Each 5 min
  Browser->>+DopplerSessionMFE: interval
  alt User does not have a session in Doppler
    DopplerSessionMFE->>+DopplerMVC: GetUserData(cookie)
    DopplerMVC-->>-DopplerSessionMFE: Error
    DopplerSessionMFE->>window: WRITE dopplerSessionState = { status: "non-authenticated" }
    DopplerSessionMFE-)window: dispatchEvent("doppler-session-state-update", { status: "non-authenticated" })
  else User has a session in Doppler
    DopplerSessionMFE->>+DopplerMVC: GetUserData(cookie)
    DopplerMVC-->>-DopplerSessionMFE: UserData
    DopplerSessionMFE->>window: WRITE dopplerSessionState = { status: "authenticated", . . . }
    DopplerSessionMFE-)window: dispatchEvent("doppler-session-state-update", { status: "authenticated", . . . })
  end
  deactivate DopplerSessionMFE
  end

Opening a private page in a WebApp micro-frontend:

sequenceDiagram
  participant Browser
  participant WebAppMFE
  participant window

  Browser->>+WebAppMFE: start
  WebAppMFE-)window: addEventListener ("doppler-session-state-update", . . .)
  WebAppMFE->>+window: READ dopplerSessionState
  window-->>-WebAppMFE: READ undefined [*]
  WebAppMFE-->>-Browser: Show spinner
  alt WebAppMFE loaded before DopplerSessionMFE be ready
    window->>+WebAppMFE: on "doppler-session-state-update"
    WebAppMFE->>+window: READ dopplerSessionState
    window-->>-WebAppMFE: READ undefined [*]
    WebAppMFE-->>-Browser: Show spinner
  end
  alt User does not have a session in Doppler
    window->>+WebAppMFE: on "doppler-session-state-update"
    WebAppMFE->>+window: READ dopplerSessionState
    window-->>-WebAppMFE: READ { status = "non-authenticated" }
    WebAppMFE-->>-Browser: Redirect to Login
  else User has a session in Doppler
    window->>+WebAppMFE: on "doppler-session-state-update"
    WebAppMFE->>+window: READ dopplerSessionState
    window-->>-WebAppMFE: READ { status = "authenticated", . . . }
    WebAppMFE-->>-Browser: Render the page
  end

[*] At the moment, the first answers for READ dopplerSessionState will always be undefined. But in the future, DopplerSession micro-frontend is going to be improved to cache the last session state (for example, in local storage), so the first steps could be omitted.

About


Languages

Language:TypeScript 47.8%Language:Shell 28.5%Language:Groovy 7.9%Language:HTML 7.3%Language:JavaScript 7.1%Language:Dockerfile 1.4%