@microsoft/mgt
Version:
The Microsoft Graph Toolkit
166 lines (153 loc) • 3.85 kB
text/typescript
/**
* -------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License.
* See License in the project root for license information.
* -------------------------------------------------------------------------------------------
*/
import { AuthenticationProvider } from '@microsoft/microsoft-graph-client/lib/es/IAuthenticationProvider';
import { AuthenticationProviderOptions } from '@microsoft/microsoft-graph-client/lib/es/IAuthenticationProviderOptions';
import { Graph } from '../Graph';
import { EventDispatcher } from './EventDispatcher';
/**
* Provider Type to be extended for implmenting new providers
*
* @export
* @abstract
* @class IProvider
* @implements {AuthenticationProvider}
*/
export abstract class IProvider implements AuthenticationProvider {
/**
* The Graph object that contains the Graph client sdk
*
* @type {Graph}
* @memberof IProvider
*/
public graph: Graph;
private _state: ProviderState;
private _loginChangedDispatcher = new EventDispatcher<LoginChangedEvent>();
/**
* returns state of Provider
*
* @readonly
* @type {ProviderState}
* @memberof IProvider
*/
public get state(): ProviderState {
return this._state;
}
constructor() {
this._state = ProviderState.Loading;
}
/**
* sets state of Provider and fires loginchangedDispatcher
*
* @param {ProviderState} state
* @memberof IProvider
*/
public setState(state: ProviderState) {
if (state !== this._state) {
this._state = state;
this._loginChangedDispatcher.fire({});
}
}
/**
* event handler when login changes
*
* @param {EventHandler<LoginChangedEvent>} eventHandler
* @memberof IProvider
*/
public onStateChanged(eventHandler: EventHandler<LoginChangedEvent>) {
this._loginChangedDispatcher.add(eventHandler);
}
/**
* removes event handler for when login changes
*
* @param {EventHandler<LoginChangedEvent>} eventHandler
* @memberof IProvider
*/
public removeStateChangedHandler(eventHandler: EventHandler<LoginChangedEvent>) {
this._loginChangedDispatcher.remove(eventHandler);
}
/**
* option implementation that can be called to sign in user (required for mgt-login to work)
*
* @returns {Promise<void>}
* @memberof IProvider
*/
public login?(): Promise<void>;
/**
* optional implementation that can be called to sign out user (required for mgt-login to work)
*
* @returns {Promise<void>}
* @memberof IProvider
*/
public logout?(): Promise<void>;
/**
* uses scopes to recieve access token
*
* @param {...string[]} scopes
* @returns {Promise<string>}
* @memberof IProvider
*/
public getAccessTokenForScopes(...scopes: string[]): Promise<string> {
return this.getAccessToken({ scopes });
}
/**
* Promise to receive access token using Provider options
*
* @abstract
* @param {AuthenticationProviderOptions} [options]
* @returns {Promise<string>}
* @memberof IProvider
*/
public abstract getAccessToken(options?: AuthenticationProviderOptions): Promise<string>;
}
/**
* An EventHandler for custom events
*/
export type EventHandler<E> = (event: E) => void;
/**
* loginChangedEvent
*
* @export
* @interface LoginChangedEvent
*/
// tslint:disable-next-line: no-empty-interface
export interface LoginChangedEvent {}
/**
* LoginType
*
* @export
* @enum {number}
*/
export enum LoginType {
/**
* Popup = 0
*/
Popup,
/**
* Redirect = 1
*/
Redirect
}
/**
* ProviderState
*
* @export
* @enum {number}
*/
export enum ProviderState {
/**
* Loading = 0
*/
Loading,
/**
* SignedOut = 1
*/
SignedOut,
/**
* SignedIn = 1
*/
SignedIn
}