{"version":3,"file":"slr-angularx-social-login.mjs","sources":["../../../projects/lib/src/entities/base-login-provider.ts","../../../projects/lib/src/entities/social-user.ts","../../../projects/lib/src/providers/google-login-provider.ts","../../../projects/lib/src/socialauth.service.ts","../../../projects/lib/src/sociallogin.module.ts","../../../projects/lib/src/providers/dummy-login-provider.ts","../../../projects/lib/src/providers/facebook-login-provider.ts","../../../projects/lib/src/providers/amazon-login-provider.ts","../../../projects/lib/src/providers/vk-login-provider.ts","../../../projects/lib/src/providers/microsoft-login-provider.ts","../../../projects/lib/src/slr-angularx-social-login.ts"],"sourcesContent":["import { LoginProvider } from './login-provider';\nimport { SocialUser } from './social-user';\n\nexport abstract class BaseLoginProvider implements LoginProvider {\n  constructor() {}\n\n  abstract initialize(): Promise<void>;\n  abstract getLoginStatus(): Promise<SocialUser>;\n  abstract signIn(): Promise<SocialUser>;\n  abstract signOut(revoke?: boolean): Promise<void>;\n\n  protected loadScript(\n    id: string,\n    src: string,\n    onload: any,\n    parentElement = null\n  ): void {\n    // get document if platform is only browser\n    if (typeof document !== 'undefined' && !document.getElementById(id)) {\n      let signInJS = document.createElement('script');\n\n      signInJS.async = true;\n      signInJS.src = src;\n      signInJS.onload = onload;\n\n      if (!parentElement) {\n        parentElement = document.head;\n      }\n\n      parentElement.appendChild(signInJS);\n    }\n  }\n}\n","export class SocialUser {\n  provider: string;\n  id: string;\n  email: string;\n  name: string;\n  photoUrl: string;\n  firstName: string;\n  lastName: string;\n  authToken: string;\n\n  idToken: string; // Reference https://developers.google.com/identity/sign-in/web/backend-auth\n  authorizationCode: string; // Reference https://developers.google.com/identity/sign-in/web/reference#googleauthgrantofflineaccessoptions\n\n  response: any;\n}\n","import { BaseLoginProvider } from '../entities/base-login-provider';\nimport { SocialUser } from '../entities/social-user';\n\ndeclare let gapi: any;\n\nexport class GoogleLoginProvider extends BaseLoginProvider {\n  public static readonly PROVIDER_ID: string = 'GOOGLE';\n\n  protected auth2: any;\n\n  constructor(\n    private clientId: string,\n    private initOptions: any = { scope: 'email' }\n  ) {\n    super();\n  }\n\n  initialize(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      try {\n        this.loadScript(\n          GoogleLoginProvider.PROVIDER_ID,\n          'https://apis.google.com/js/platform.js',\n          () => {\n            gapi.load('auth2', () => {\n              this.auth2 = gapi.auth2.init({\n                ...this.initOptions,\n                client_id: this.clientId,\n              });\n\n              this.auth2\n                .then(() => {\n                  resolve();\n                })\n                .catch((err: any) => {\n                  reject(err);\n                });\n            });\n          }\n        );\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  getLoginStatus(loginStatusOptions?: any): Promise<SocialUser> {\n    const options = {...this.initOptions, ...loginStatusOptions};\n\n    return new Promise((resolve, reject) => {\n      if (this.auth2.isSignedIn.get()) {\n        let user: SocialUser = new SocialUser();\n\n        const profile = this.auth2.currentUser.get().getBasicProfile();\n        const authResponse = this.auth2.currentUser.get().getAuthResponse(true);  // get complete authResponse object\n        user.id = profile.getId();\n        user.name = profile.getName();\n        user.email = profile.getEmail();\n        user.photoUrl = profile.getImageUrl();\n        user.firstName = profile.getGivenName();\n        user.lastName = profile.getFamilyName();\n        user.response = authResponse;\n\n        const resolveUser = authResponse => {\n          user.authToken = authResponse.access_token;\n          user.idToken = authResponse.id_token;\n\n          resolve(user);\n        };\n\n        if (options.refreshToken) {\n          this.auth2.currentUser.get().reloadAuthResponse().then(resolveUser);\n        } else {\n          const authResponse = this.auth2.currentUser.get().getAuthResponse(true);\n          resolveUser(authResponse);\n        }\n      } else {\n        reject(\n          `No user is currently logged in with ${GoogleLoginProvider.PROVIDER_ID}`\n        );\n      }\n    });\n  }\n\n  signIn(signInOptions?: any): Promise<SocialUser> {\n    const options = { ...this.initOptions, ...signInOptions };\n\n    return new Promise((resolve, reject) => {\n      const offlineAccess: boolean = options && options.offline_access;\n      let promise = !offlineAccess\n        ? this.auth2.signIn(signInOptions)\n        : this.auth2.grantOfflineAccess(signInOptions);\n\n      promise\n        .then(\n          (response: any) => {\n            let user: SocialUser = new SocialUser();\n\n            if (response && response.code) {\n              user.authorizationCode = response.code;\n            } else {\n              let profile = this.auth2.currentUser.get().getBasicProfile();\n              let authResponse = this.auth2.currentUser.get().getAuthResponse(true);\n\n              let token = authResponse.access_token;\n              let backendToken = authResponse.id_token;\n\n              user.id = profile.getId();\n              user.name = profile.getName();\n              user.email = profile.getEmail();\n              user.photoUrl = profile.getImageUrl();\n              user.firstName = profile.getGivenName();\n              user.lastName = profile.getFamilyName();\n              user.authToken = token;\n              user.idToken = backendToken;\n\n              user.response = authResponse;\n            }\n\n            resolve(user);\n          },\n          (closed: any) => {\n            reject(closed);\n          }\n        )\n        .catch((err: any) => {\n          reject(err);\n        });\n    });\n  }\n\n  signOut(revoke?: boolean): Promise<void> {\n    return new Promise((resolve, reject) => {\n      let signOutPromise: Promise<any>;\n\n      if (revoke) {\n        signOutPromise = this.auth2.disconnect();\n      } else {\n        signOutPromise = this.auth2.signOut();\n      }\n\n      signOutPromise\n        .then((err: any) => {\n          if (err) {\n            reject(err);\n          } else {\n            resolve();\n          }\n        })\n        .catch((err: any) => {\n          reject(err);\n        });\n    });\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { AsyncSubject, Observable, ReplaySubject } from 'rxjs';\nimport { LoginProvider } from './entities/login-provider';\nimport { SocialUser } from './entities/social-user';\nimport { GoogleLoginProvider } from './providers/google-login-provider';\n\n/**\n * An interface to define the shape of the service configuration options.\n */\nexport interface SocialAuthServiceConfig {\n  autoLogin?: boolean;\n  providers: { id: string; provider: LoginProvider }[];\n  onError?: (error: any) => any;\n}\n\n/**\n * The service encapsulating the social login functionality. Exposes methods like\n * `signIn`, `signOut`. Also, exposes an `authState` `Observable` that one can\n * subscribe to get the current logged in user information.\n *\n * @dynamic\n */\n@Injectable()\nexport class SocialAuthService {\n  private static readonly ERR_LOGIN_PROVIDER_NOT_FOUND =\n    'Login provider not found';\n  private static readonly ERR_NOT_LOGGED_IN = 'Not logged in';\n  private static readonly ERR_NOT_INITIALIZED =\n    'Login providers not ready yet. Are there errors on your console?';\n  private static readonly ERR_NOT_SUPPORTED_FOR_REFRESH_TOKEN =\n    'Chosen login provider is not supported for refreshing a token';\n\n  private providers: Map<string, LoginProvider> = new Map();\n  private autoLogin = false;\n\n  private _user: SocialUser = null;\n  private _authState: ReplaySubject<SocialUser> = new ReplaySubject(1);\n\n  /* Consider making this an enum comprising LOADING, LOADED, FAILED etc. */\n  private initialized = false;\n  private _initState: AsyncSubject<boolean> = new AsyncSubject();\n\n  /** An `Observable` that one can subscribe to get the current logged in user information */\n  get authState(): Observable<SocialUser> {\n    return this._authState.asObservable();\n  }\n\n  /** An `Observable` to communicate the readiness of the service and associated login providers */\n  get initState(): Observable<boolean> {\n    return this._initState.asObservable();\n  }\n\n  /**\n   * @param config A `SocialAuthServiceConfig` object or a `Promise` that resolves to a `SocialAuthServiceConfig` object\n   */\n  constructor(\n    @Inject('SocialAuthServiceConfig')\n    config: SocialAuthServiceConfig | Promise<SocialAuthServiceConfig>\n  ) {\n    if (config instanceof Promise) {\n      config.then((config) => {\n        this.initialize(config);\n      });\n    } else {\n      this.initialize(config);\n    }\n  }\n\n  private initialize(config: SocialAuthServiceConfig) {\n    this.autoLogin = config.autoLogin !== undefined ? config.autoLogin : false;\n    const { onError = console.error } = config;\n\n    config.providers.forEach((item) => {\n      this.providers.set(item.id, item.provider);\n    });\n\n    Promise.all(\n      Array.from(this.providers.values()).map((provider) =>\n        provider.initialize()\n      )\n    )\n      .then(() => {\n        if (this.autoLogin) {\n          const loginStatusPromises = [];\n          let loggedIn = false;\n\n          this.providers.forEach((provider: LoginProvider, key: string) => {\n            let promise = provider.getLoginStatus();\n            loginStatusPromises.push(promise);\n            promise\n              .then((user: SocialUser) => {\n                user.provider = key;\n\n                this._user = user;\n                this._authState.next(user);\n                loggedIn = true;\n              })\n              .catch(console.debug);\n          });\n          Promise.all(loginStatusPromises).catch(() => {\n            if (!loggedIn) {\n              this._user = null;\n              this._authState.next(null);\n            }\n          });\n        }\n      })\n      .catch((error) => {\n        onError(error);\n      })\n      .finally(() => {\n        this.initialized = true;\n        this._initState.next(this.initialized);\n        this._initState.complete();\n      });\n  }\n\n  refreshAuthToken(providerId: string): Promise<void> {\n    return new Promise((resolve, reject) => {\n      if (!this.initialized) {\n        reject(SocialAuthService.ERR_NOT_INITIALIZED);\n      } else if (providerId !== GoogleLoginProvider.PROVIDER_ID) {\n        reject(SocialAuthService.ERR_NOT_SUPPORTED_FOR_REFRESH_TOKEN);\n      } else {\n        const providerObject = this.providers.get(providerId);\n        if (providerObject) {\n          providerObject\n            .getLoginStatus({ refreshToken: true })\n            .then((user: SocialUser) => {\n              user.provider = providerId;\n              this._user = user;\n              this._authState.next(user);\n              resolve();\n            })\n            .catch((err) => {\n              reject(err);\n            });\n        } else {\n          reject(SocialAuthService.ERR_LOGIN_PROVIDER_NOT_FOUND);\n        }\n      }\n    });\n  }\n\n  /**\n   * A method used to sign in a user with a specific `LoginProvider`.\n   *\n   * @param providerId Id with which the `LoginProvider` has been registered with the service\n   * @param signInOptions Optional `LoginProvider` specific arguments\n   * @returns A `Promise` that resolves to the authenticated user information\n   */\n  signIn(providerId: string, signInOptions?: any): Promise<SocialUser> {\n    return new Promise((resolve, reject) => {\n      if (!this.initialized) {\n        reject(SocialAuthService.ERR_NOT_INITIALIZED);\n      } else {\n        let providerObject = this.providers.get(providerId);\n        if (providerObject) {\n          providerObject\n            .signIn(signInOptions)\n            .then((user: SocialUser) => {\n              user.provider = providerId;\n              resolve(user);\n\n              this._user = user;\n              this._authState.next(user);\n            })\n            .catch((err) => {\n              reject(err);\n            });\n        } else {\n          reject(SocialAuthService.ERR_LOGIN_PROVIDER_NOT_FOUND);\n        }\n      }\n    });\n  }\n\n  /**\n   * A method used to sign out the currently loggen in user.\n   *\n   * @param revoke Optional parameter to specify whether a hard sign out is to be performed\n   * @returns A `Promise` that resolves if the operation is successful, rejects otherwise\n   */\n  signOut(revoke: boolean = false): Promise<void> {\n    return new Promise((resolve, reject) => {\n      if (!this.initialized) {\n        reject(SocialAuthService.ERR_NOT_INITIALIZED);\n      } else if (!this._user) {\n        reject(SocialAuthService.ERR_NOT_LOGGED_IN);\n      } else {\n        let providerId = this._user.provider;\n        let providerObject = this.providers.get(providerId);\n        if (providerObject) {\n          providerObject\n            .signOut(revoke)\n            .then(() => {\n              resolve();\n\n              this._user = null;\n              this._authState.next(null);\n            })\n            .catch((err) => {\n              reject(err);\n            });\n        } else {\n          reject(SocialAuthService.ERR_LOGIN_PROVIDER_NOT_FOUND);\n        }\n      }\n    });\n  }\n}\n","import {\n  NgModule,\n  Optional,\n  SkipSelf,\n  ModuleWithProviders\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SocialAuthService, SocialAuthServiceConfig } from './socialauth.service';\n\n/**\n * The main module of angularx-social-login library.\n */\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  providers: [\n    SocialAuthService\n  ]\n})\nexport class SocialLoginModule {\n  public static initialize(config: SocialAuthServiceConfig): ModuleWithProviders<SocialLoginModule> {\n    return {\n      ngModule: SocialLoginModule,\n      providers: [\n        SocialAuthService,\n        {\n          provide: 'SocialAuthServiceConfig',\n          useValue: config\n        }\n      ]\n    };\n  }\n\n  constructor(@Optional() @SkipSelf() parentModule: SocialLoginModule) {\n    if (parentModule) {\n      throw new Error(\n        'SocialLoginModule is already loaded. Import it in the AppModule only');\n    }\n  }\n}\n","import { BaseLoginProvider } from '../entities/base-login-provider';\nimport { SocialUser } from '../entities/social-user';\n\n// Simulates login / logout without actually requiring an Internet connection.\n//\n// Useful for certain development situations.\n//\n// For example, if you want to simulate the greatest football referee England has ever produced:\n//\n//  const dummyUser: SocialUser = {\n//     id: '0123456789',\n//     name: 'Howard Webb',\n//     email: 'howard@webb.com',\n//     firstName: 'Howard',\n//     lastName: 'Webb',\n//     authToken: 'dummyAuthToken',\n//     photoUrl: 'https://en.wikipedia.org/wiki/Howard_Webb#/media/File:Howard_Webb_march11.jpg',\n//     provider: 'DUMMY',\n//     idToken: 'dummyIdToken',\n//     authorizationCode: 'dummyAuthCode'\n// };\n//\n//  let config = new AuthServiceConfig([\n//  { ... },\n//  {\n//       id: DummyLoginProvider.PROVIDER_ID,\n//       provider: new DummyLoginProvider(dummyUser)  // Pass your user into the constructor\n//   },\n//  { ... }\n//  ]);\n\nexport class DummyLoginProvider extends BaseLoginProvider {\n  public static readonly PROVIDER_ID: string = 'DUMMY';\n\n  static readonly DEFAULT_USER = {\n    id: '1234567890',\n    name: 'Mickey Mouse',\n    email: 'mickey@mouse.com',\n    firstName: 'Mickey',\n    lastName: 'Mouse',\n    authToken: 'dummyAuthToken',\n    photoUrl: 'https://en.wikipedia.org/wiki/File:Mickey_Mouse.png',\n    provider: 'DUMMY',\n    idToken: 'dummyIdToken',\n    authorizationCode: 'dummyAuthCode',\n    response: {},\n  };\n\n  private dummy: SocialUser;\n\n  private loggedIn: boolean;\n\n  constructor(dummy?: SocialUser) {\n    super();\n    if (dummy) {\n      this.dummy = dummy;\n    } else {\n      this.dummy = DummyLoginProvider.DEFAULT_USER;\n    }\n\n    // Start not logged in\n    this.loggedIn = false;\n  }\n\n  getLoginStatus(): Promise<SocialUser> {\n    return new Promise((resolve, reject) => {\n      if (this.loggedIn) {\n        resolve(this.dummy);\n      } else {\n        reject('No user is currently logged in.');\n      }\n    });\n  }\n\n  initialize(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      resolve();\n    });\n  }\n\n  signIn(): Promise<SocialUser> {\n    return new Promise((resolve, reject) => {\n      this.loggedIn = true;\n      resolve(this.dummy);\n    });\n  }\n\n  signOut(revoke?: boolean): Promise<void> {\n    return new Promise((resolve, reject) => {\n      this.loggedIn = false;\n      resolve();\n    });\n  }\n}\n","import { BaseLoginProvider } from '../entities/base-login-provider';\nimport { SocialUser } from '../entities/social-user';\n\ndeclare let FB: any;\n\nexport class FacebookLoginProvider extends BaseLoginProvider {\n  public static readonly PROVIDER_ID: string = 'FACEBOOK';\n\n  private requestOptions = {\n    scope: 'email,public_profile',\n    locale: 'en_US',\n    fields: 'name,email,picture,first_name,last_name',\n    version: 'v10.0',\n  };\n\n  constructor(private clientId: string, initOptions: Object = {}) {\n    super();\n\n    this.requestOptions = {\n      ...this.requestOptions,\n      ...initOptions,\n    };\n  }\n\n  initialize(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      try {\n        this.loadScript(\n          FacebookLoginProvider.PROVIDER_ID,\n          `//connect.facebook.net/${this.requestOptions.locale}/sdk.js`,\n          () => {\n            FB.init({\n              appId: this.clientId,\n              autoLogAppEvents: true,\n              cookie: true,\n              xfbml: true,\n              version: this.requestOptions.version,\n            });\n\n            resolve();\n          }\n        );\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  getLoginStatus(): Promise<SocialUser> {\n    return new Promise((resolve, reject) => {\n      FB.getLoginStatus((response: any) => {\n        if (response.status === 'connected') {\n          let authResponse = response.authResponse;\n          FB.api(`/me?fields=${this.requestOptions.fields}`, (fbUser: any) => {\n            let user: SocialUser = new SocialUser();\n\n            user.id = fbUser.id;\n            user.name = fbUser.name;\n            user.email = fbUser.email;\n            user.photoUrl =\n              'https://graph.facebook.com/' +\n              fbUser.id +\n              '/picture?type=normal&access_token=' +\n              authResponse.accessToken;\n            user.firstName = fbUser.first_name;\n            user.lastName = fbUser.last_name;\n            user.authToken = authResponse.accessToken;\n\n            user.response = fbUser;\n\n            resolve(user);\n          });\n        } else {\n          reject(\n            `No user is currently logged in with ${FacebookLoginProvider.PROVIDER_ID}`\n          );\n        }\n      });\n    });\n  }\n\n  signIn(signInOptions?: any): Promise<SocialUser> {\n    const options = { ...this.requestOptions, ...signInOptions };\n    return new Promise((resolve, reject) => {\n      FB.login((response: any) => {\n        if (response.authResponse) {\n          let authResponse = response.authResponse;\n          FB.api(`/me?fields=${options.fields}`, (fbUser: any) => {\n            let user: SocialUser = new SocialUser();\n\n            user.id = fbUser.id;\n            user.name = fbUser.name;\n            user.email = fbUser.email;\n            user.photoUrl =\n              'https://graph.facebook.com/' +\n              fbUser.id +\n              '/picture?type=normal';\n            user.firstName = fbUser.first_name;\n            user.lastName = fbUser.last_name;\n            user.authToken = authResponse.accessToken;\n\n            user.response = fbUser;\n\n            resolve(user);\n          });\n        } else {\n          reject('User cancelled login or did not fully authorize.');\n        }\n      }, options);\n    });\n  }\n\n  signOut(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      FB.logout((response: any) => {\n        resolve();\n      });\n    });\n  }\n}\n","import { BaseLoginProvider } from '../entities/base-login-provider';\nimport { SocialUser } from '../entities/social-user';\n\ndeclare let amazon: any, window: any;\n\nexport class AmazonLoginProvider extends BaseLoginProvider {\n  public static readonly PROVIDER_ID: string = 'AMAZON';\n\n  constructor(\n    private clientId: string,\n    private initOptions: any = {\n      scope: 'profile',\n      scope_data: {\n        profile: { essential: false },\n      },\n      redirect_uri: location.origin,\n    }\n  ) {\n    super();\n  }\n\n  initialize(): Promise<void> {\n    let amazonRoot = null;\n    if (document) {\n      amazonRoot = document.createElement('div');\n      amazonRoot.id = 'amazon-root';\n      document.body.appendChild(amazonRoot);\n    }\n\n    window.onAmazonLoginReady = () => {\n      amazon.Login.setClientId(this.clientId);\n    };\n\n    return new Promise((resolve, reject) => {\n      try {\n        this.loadScript(\n          'amazon-login-sdk',\n          'https://assets.loginwithamazon.com/sdk/na/login1.js',\n          () => {\n            resolve();\n          },\n          amazonRoot\n        );\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  getLoginStatus(): Promise<SocialUser> {\n    return new Promise((resolve, reject) => {\n      let token = this.retrieveToken();\n\n      if (token) {\n        amazon.Login.retrieveProfile(token, (response) => {\n          if (response.success) {\n            let user: SocialUser = new SocialUser();\n\n            user.id = response.profile.CustomerId;\n            user.name = response.profile.Name;\n            user.email = response.profile.PrimaryEmail;\n            user.response = response.profile;\n\n            resolve(user);\n          } else {\n            reject(response.error);\n          }\n        });\n      } else {\n        reject(`No user is currently logged in with ${AmazonLoginProvider.PROVIDER_ID}`);\n      }\n    });\n  }\n\n  signIn(signInOptions?: any): Promise<SocialUser> {\n    const options = { ...this.initOptions, ...signInOptions };\n    return new Promise((resolve, reject) => {\n      amazon.Login.authorize(options, (authResponse) => {\n        if (authResponse.error) {\n          reject(authResponse.error);\n        } else {\n          amazon.Login.retrieveProfile(\n            authResponse.access_token,\n            (response) => {\n              let user: SocialUser = new SocialUser();\n\n              user.id = response.profile.CustomerId;\n              user.name = response.profile.Name;\n              user.email = response.profile.PrimaryEmail;\n              user.authToken = authResponse.access_token;\n              user.response = response.profile;\n\n              this.persistToken(authResponse.access_token);\n\n              resolve(user);\n            }\n          );\n        }\n      });\n    });\n  }\n\n  signOut(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      try {\n        amazon.Login.logout();\n\n        this.clearToken();\n        resolve();\n      } catch (err) {\n        reject(err.message);\n      }\n    });\n  }\n\n  private persistToken(token: string): void {\n    localStorage.setItem(`${AmazonLoginProvider.PROVIDER_ID}_token`, token);\n  }\n\n  private retrieveToken(): string {\n    return localStorage.getItem(`${AmazonLoginProvider.PROVIDER_ID}_token`);\n  }\n\n  private clearToken(): void {\n    localStorage.removeItem(`${AmazonLoginProvider.PROVIDER_ID}_token`);\n  }\n}\n","import { BaseLoginProvider } from '../entities/base-login-provider';\nimport { SocialUser } from '../entities/social-user';\n\ndeclare let VK: any;\n\nexport class VKLoginProvider extends BaseLoginProvider {\n  constructor(\n    private clientId: string,\n    private initOptions: any = {\n      fields: 'photo_max,contacts',\n      version: '5.124',\n    }\n  ) {\n    super();\n  }\n\n  public static readonly PROVIDER_ID: string = 'VK';\n\n  private readonly VK_API_URL = '//vk.com/js/api/openapi.js';\n  private readonly VK_API_GET_USER = 'users.get';\n\n  initialize(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      try {\n        this.loadScript(\n          VKLoginProvider.PROVIDER_ID,\n          this.VK_API_URL,\n          () => {\n            VK.init({\n              apiId: this.clientId,\n            });\n\n            resolve();\n          }\n        );\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  getLoginStatus(): Promise<SocialUser> {\n    return new Promise<SocialUser>((resolve: any, reject: any) =>\n      this.getLoginStatusInternal(resolve, reject)\n    );\n  }\n\n  signIn(): Promise<SocialUser> {\n    return new Promise<SocialUser>((resolve: any, reject: any) =>\n      this.signInInternal(resolve, reject)\n    );\n  }\n\n  signOut(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      VK.Auth.logout((response: any) => {\n        resolve();\n      });\n    });\n  }\n\n  private signInInternal(resolve: any, reject: any) {\n    VK.Auth.login((loginResponse: any) => {\n      if (loginResponse.status === 'connected') {\n        this.getUser(\n          loginResponse.session.mid,\n          loginResponse.session.sid,\n          resolve\n        );\n      }\n    });\n  }\n\n  private getUser(userId: any, token: any, resolve: any) {\n    VK.Api.call(\n      this.VK_API_GET_USER,\n      {\n        user_id: userId,\n        fields: this.initOptions.fields,\n        v: this.initOptions.version,\n      },\n      (userResponse: any) => {\n        resolve(\n          this.createUser(\n            Object.assign({}, { token }, userResponse.response[0])\n          )\n        );\n      }\n    );\n  }\n\n  private getLoginStatusInternal(resolve: any, reject: any) {\n    VK.Auth.getLoginStatus((loginResponse: any) => {\n      if (loginResponse.status === 'connected') {\n        this.getUser(\n          loginResponse.session.mid,\n          loginResponse.session.sid,\n          resolve\n        );\n      }\n    });\n  }\n\n  private createUser(response: any): SocialUser {\n    const user: SocialUser = new SocialUser();\n    user.id = response.id;\n    user.name = `${response.first_name} ${response.last_name}`;\n    user.photoUrl = response.photo_max;\n    user.authToken = response.token;\n    return user;\n  }\n}\n","import { BaseLoginProvider } from '../entities/base-login-provider';\nimport { SocialUser } from '../entities/social-user';\n\n/**\n * Protocol modes supported by MSAL.\n */\nexport enum ProtocolMode {\n  AAD = 'AAD',\n  OIDC = 'OIDC'\n}\n\n/**\n * Initialization Options for Microsoft Provider: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/initialization.md\n * Details (not all options are supported): https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md\n */\nexport type MicrosoftOptions = {\n  redirect_uri?: string,\n  logout_redirect_uri?: string,\n  authority?: string,\n  knownAuthorities?: string[],\n  protocolMode?: ProtocolMode,\n  clientCapabilities?: string[],\n  cacheLocation?: string,\n  scopes?: string[],\n  prompt?: string,\n};\n\n// Collection of internal MSAL interfaces from: https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser/src\n\ninterface MSALAccount {\n  environment: string;\n  homeAccountId: string;\n  tenantId: string;\n  username: string;\n}\n\ninterface MSGraphUserInfo {\n  businessPhones: string[];\n  displayName: string;\n  givenName: string;\n  id: string;\n  jobTitle: string;\n  mail: string;\n  mobilePhone: string;\n  officeLocation: string;\n  preferredLanguage: string;\n  surname: string;\n  userPrincipalName: string;\n}\n\ninterface MSALLoginRequest {\n  scopes?: string[];\n  sid?: string;\n  loginHint?: string;\n  domainHint?: string;\n  prompt?: string;\n}\n\ninterface MSALLoginResponse {\n  accessToken: string;\n  account: MSALAccount;\n  expiresOn: Date;\n  extExpiresOn: Date;\n  familyId: string;\n  fromCache: boolean;\n  idToken: string;\n  idTokenClaims: any;\n  scopes: string[];\n  state: string;\n  tenantId: string;\n  uniqueId: string;\n}\n\ninterface MSALLogoutRequest {\n  account?: MSALAccount;\n  postLogoutRedirectUri?: string;\n  authority?: string;\n  correlationId?: string;\n}\n\ninterface MSALClientApplication {\n  getAllAccounts(): MSALAccount[];\n  logoutPopup(logoutRequest?: MSALLogoutRequest): Promise<void>;\n  loginPopup(loginRequest: MSALLoginRequest): Promise<MSALLoginResponse>;\n  ssoSilent(loginRequest: MSALLoginRequest): Promise<MSALLoginResponse>;\n  acquireTokenSilent(loginRequest: MSALLoginRequest): Promise<MSALLoginResponse>;\n  getAccountByHomeId(homeAccountId: string): MSALAccount;\n}\n\ndeclare let msal: any;\n\nconst COMMON_AUTHORITY: string = 'https://login.microsoftonline.com/common/';\n\n/**\n * Microsoft Authentication using MSAL v2: https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser\n */\nexport class MicrosoftLoginProvider extends BaseLoginProvider {\n  private _instance: MSALClientApplication;\n  public static readonly PROVIDER_ID: string = 'MICROSOFT';\n\n  private initOptions: MicrosoftOptions = {\n    authority: COMMON_AUTHORITY,\n    scopes: ['openid', 'email', 'profile', 'User.Read'],\n    knownAuthorities: [],\n    protocolMode: ProtocolMode.AAD,\n    clientCapabilities: [],\n    cacheLocation: 'sessionStorage'\n  };\n\n  constructor(\n    private clientId: string,\n    initOptions?: MicrosoftOptions\n  ) {\n    super();\n\n    this.initOptions = {\n      ...this.initOptions,\n      ...initOptions\n    };\n  }\n\n  initialize(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      this.loadScript(\n        MicrosoftLoginProvider.PROVIDER_ID,\n        'https://alcdn.msauth.net/browser/2.13.1/js/msal-browser.js',\n        () => {\n          try {\n            const config = {\n              auth: {\n                clientId: this.clientId,\n                redirectUri: this.initOptions.redirect_uri ?? location.origin,\n                authority: this.initOptions.authority,\n                knownAuthorities: this.initOptions.knownAuthorities,\n                protocolMode: this.initOptions.protocolMode,\n                clientCapabilities: this.initOptions.clientCapabilities\n              },\n              cache: !this.initOptions.cacheLocation ? null : {\n                cacheLocation: this.initOptions.cacheLocation\n              }\n            };\n\n            this._instance = new msal.PublicClientApplication(config);\n            resolve();\n          } catch (e) {\n            reject(e);\n          }\n        }\n      );\n    });\n  }\n\n  private getSocialUser(loginResponse): Promise<SocialUser> {\n    return new Promise<SocialUser>((resolve, reject) => {\n      //After login, use Microsoft Graph API to get user info\n      let meRequest = new XMLHttpRequest();\n      meRequest.onreadystatechange = () => {\n        if (meRequest.readyState == 4) {\n          try {\n            if (meRequest.status == 200) {\n              let userInfo = <MSGraphUserInfo>JSON.parse(meRequest.responseText);\n\n              let user: SocialUser = new SocialUser();\n              user.provider = MicrosoftLoginProvider.PROVIDER_ID;\n              user.id = loginResponse.idToken;\n              user.authToken = loginResponse.accessToken;\n              user.name = loginResponse.idTokenClaims.name;\n              user.email = loginResponse.account.username;\n              user.idToken = loginResponse.idToken;\n              user.response = loginResponse;\n              user.firstName = userInfo.givenName;\n              user.lastName = userInfo.surname;\n\n              resolve(user);\n            } else {\n              reject(`Error retrieving user info: ${meRequest.status}`);\n            }\n          } catch (err) {\n            reject(err);\n          }\n        }\n      };\n\n      //Microsoft Graph ME Endpoint: https://docs.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0&tabs=http\n      meRequest.open('GET', 'https://graph.microsoft.com/v1.0/me');\n      meRequest.setRequestHeader('Authorization', `Bearer ${loginResponse.accessToken}`);\n      try {\n        meRequest.send();\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  async getLoginStatus(): Promise<SocialUser> {\n    const accounts = this._instance.getAllAccounts();\n    if (accounts?.length > 0) {\n      const loginResponse = await this._instance.ssoSilent({\n        scopes: this.initOptions.scopes,\n        loginHint: accounts[0].username\n      });\n      return await this.getSocialUser(loginResponse);\n    } else {\n      throw `No user is currently logged in with ${MicrosoftLoginProvider.PROVIDER_ID}`;\n    }\n  }\n\n  async signIn(): Promise<SocialUser> {\n    const loginResponse = await this._instance.loginPopup({\n      scopes: this.initOptions.scopes,\n      prompt: this.initOptions.prompt,\n    });\n    return await this.getSocialUser(loginResponse);\n  }\n\n  async signOut(revoke?: boolean): Promise<void> {\n    const accounts = this._instance.getAllAccounts();\n    if (accounts?.length > 0) {\n      await this._instance.logoutPopup({\n        account: accounts[0],\n        postLogoutRedirectUri: this.initOptions.logout_redirect_uri ?? this.initOptions.redirect_uri ?? location.href\n      })\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}