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