import { LoginProvider } from './login-provider'; import { SocialUser } from './user'; import { Observable, BehaviorSubject } from 'rxjs'; export abstract class BaseLoginProvider implements LoginProvider { protected _readyState: BehaviorSubject = new BehaviorSubject(false); constructor() { } protected onReady(): Promise { return new Promise((resolve, reject) => { this._readyState.subscribe((isReady) => { if (isReady) { resolve(); } }) }); } abstract initialize(): Promise; abstract getLoginStatus(): Promise; abstract signIn(): Promise; abstract signOut(revoke?: boolean): Promise; loadScript(id: string, src: string, onload: any, async = true, inner_text_content = ''): void { if (document.getElementById(id)) { return; } let signInJS = document.createElement('script'); signInJS.async = async; signInJS.src = src; signInJS.onload = onload; signInJS.text = inner_text_content; // LinkedIn document.head.appendChild(signInJS); } }