Special Middleware to use in at http API to provide an authentication for every request. The type-parameter P represents the principal information, which contains all login-information needed to authenticate against the external HTTP API. The principal information is held inside and available as flow by calling data. To use this Middleware you need to implement the addAuthentication method, where you get the principal information, when available, to add it to your requests. To implement the client side of authentication process you also need to implement the authenticate method in which you specify what is needed to authenticate the user (e.g. open up a login modal). When your authentication process is done you have to call the complete function and set your principal. Then all requests, that have been initialized while the authentication was running, will be re-executed with the additional authentication information provided by the addAuthentication method. When the user logs out you have to call the clear function to clear all authentication information.
Returns the current principal information. When the principal is available it is returned. When an authentication-process is running the function is waiting for the process to be finished. Otherwise, it returns null if no authentication-process is running or no principal information is available.