UNPKG

ems-web-app-cognito

Version:

This angular.io module includes a component, service and supporting classes that wrap the Amazon Cognito Identity SDK to enable simple username/password authentication.

1 lines 97.8 kB
{"version":3,"file":"ems-web-app-cognito.mjs","sources":["../../src/lib/cognito.types.ts","../../src/lib/cognito.classes.ts","../../src/lib/cognito.utils.ts","../../src/lib/cognito.service.ts","../../src/lib/cognito.pipes.ts","../../src/lib/cognito.component.ts","../../src/lib/cognito.component.html","../../src/lib/cognito.module.ts","../../src/public-api.ts","../../src/ems-web-app-cognito.ts"],"sourcesContent":["export enum CognitoResponseType {\n\tAuthenticated = \"authenticated\",\n\tPasswordReset = \"NEW_PASSWORD_REQUIRED\",\n\tNotAuthorized = \"NotAuthorizedException\",\n\tForcePasswordReset = \"PasswordResetRequiredException\",\n\tInvalidCode = \"CodeMismatchException\",\n\tLimitExceededException = \"LimitExceededException\",\n\tOtpChallenge = \"OtpChallenge\",\n\tMagicLink = \"MagicLink\",\n\tPasskey = \"Passkey\",\n\tSuccess = \"SUCCESS\"\n}\n\nexport enum CognitoRequestType {\n\tAuthentication = \"authentication\",\n\tNewUserPasswordReset = \"new-user-password-reset\",\n\tForcePasswordReset = \"force-password-reset\",\n\tForgotPassword = \"forgot-password\",\n\tUpdatePasswordWithCode = \"update-password-with-code\",\n\tPasswordReset = \"password-reset\",\n\tConfirmPassword = \"confirm-password\",\n\tOtpChallenge = \"otp-challenge\",\n\tPasskey = \"passkey\",\n\tMagicLink = \"magic-link\"\n}\n\nexport enum CognitoFormType {\n\tLogin = \"login\",\n\tNewUser = \"new-user\",\n\tForcePasswordReset = \"force-password-reset\",\n\tUserPasswordReset = \"user-password-reset\",\n\tUserVerificationRequest = \"user-verification-request\",\n\tPasswordUpdateSuccessful = \"password-update-successful\",\n\tGoogleSignIn = \"google-sign-in\"\n}","export class CognitoStrings {\n\t public static onUserPasswordChangeSuccessful: string  = \"Update successful. Please log in with your new password.\";\n\t public static onVerificationCodeSent: string = \"Enter your email below to generate a verification code.\";\n\t public static onNewPasswordRequired: string = \"You need to create a new password. Please check your email for a verification code and then complete the form below.\";\n\t public static onFirstLogin: string = \"Please complete the fields below to finish account creation.\";\n\t public static onTooManyAttempts: string = \"Too many attempts. Please try again in 15 minutes.\";\n\t public static onPasswordUpdated: string = \"Your password has been updated successfully.\";\n\t public static labelEmail: string = \"Email Address\";\n\t public static labelPassword: string = \"Password\";\n\t public static labelForgotPassword: string = \"Forgot Password\";\n\t public static labelNewPassword: string = \"New Password\";\n\t public static labelCurrentPassword: string = \"Current Password\";\n\t public static labelConfirmNewPassword: string = \"Confirm New Password\";\n\t public static labelSubmit: string = \"Submit\";\n\t public static labelCode: string = \"Code\";\n\t public static labelClose: string = \"Close\";\n\t public static labelUseRegularPassword: string = \"Use Standard Password\";\n\t public static labelOtp: string = \"Email me a One Time Password (OTP)\";\n\t public static labelOtpEnter: string = \"Enter the code that was just emailed to you.\";\n\t public static labelMagicLink: string = \"Email me a magic link\";\n\t public static labelPasskeys: string = \"Use a passkey\";\n\t public static labelPasskeyEnter: string = \"Enter the code that was just emailed to you.\"\n\t public static labelPasswordRequirement: string = \"Must be at least 8 characters and contain a number, special character, uppercase and lowercase letter.\";\n\t public static labelSso: string = \"SSO\";\n\t public static labelOrSignInWith: string = \"Or sign in with...\";\n}\n\n\nexport class EphemeralStorage {\n\tprivate _cache: any = {};\n\n\tgetItem(key: string): any {\n\t\treturn this._cache[key];\n\t}\n\n\tsetItem(key: string, value: any):string {\n\t\tthis._cache[key] = value;\n\t\treturn this.getItem(key);\n\t}\n\n\tremoveItem(key: string) {\n\t\tdelete this._cache[key];\n\t}\n\n\tclear() {\n\t\tthis._cache= {};\n\t}\n}","export function unsnake(input: string = \"\"): string {\n\treturn input\n\t\t\t.split(\"_\")\n\t\t\t.map(p => p.substring(0,1).toUpperCase() + p.substring(1).toLowerCase())\n\t\t\t.join(\" \");\n}\n\nexport function tick(duration: number = 0) {\n\treturn new Promise((resolve: (value: any) => void) => {\n\t\twindow.setTimeout(() => resolve(duration), duration);\n\t});\n}\n\nexport function trim(input?: string) {\n    if(!input) return input;\n    return input.replace(/^\\s+/, '').replace(/\\s+$/, '');\n}\n\nexport function params(requestedProperty?: string): any {\n  const vars = {} as any;\n  const parts = window.location.href.replace(/[?&#]+([^=&]+)=([^&]*)/gi, ((m: any, key: string, value: any) => {\n    vars[key] = value;\n  }) as any);\n\n  for (const prop in vars) {\n    if (vars[prop].toLowerCase() === 'true') vars[prop] = true;\n    else if (vars[prop].toLowerCase() === 'false') vars[prop] = false;\n    else if (!isNaN(parseFloat(vars[prop])) && !vars[prop].match(/[^0-9]+/gim)) vars[prop] = parseFloat(vars[prop]);\n  }\n\n  if (requestedProperty) return vars[requestedProperty];\n  return vars;\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport 'cross-fetch/polyfill';\nimport { CognitoUser, CognitoUserPool, CognitoUserSession, CognitoIdToken, CognitoAccessToken, CognitoRefreshToken, AuthenticationDetails }  from 'amazon-cognito-identity-js';\nimport { ICognitoResponse, ICognitoUserData } from \"./cognito.interfaces\";\nimport { CognitoResponseType, CognitoRequestType, CognitoFormType } from \"./cognito.types\";\nimport { EphemeralStorage } from \"./cognito.classes\";\nimport { params } from \"./cognito.utils\";\nimport { jwtDecode } from \"jwt-decode\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CognitoService {\n\n  private sessionSource: BehaviorSubject<CognitoUserSession | null> = new BehaviorSubject<CognitoUserSession | null>(null);\n  public session$: Observable<CognitoUserSession | null> = this.sessionSource.asObservable();\n\n  private userSource: BehaviorSubject<CognitoUser | null> = new BehaviorSubject<CognitoUser | null>(null);\n  public user$: Observable<CognitoUser | null> = this.userSource.asObservable();\n\n  private formSource: BehaviorSubject<CognitoFormType | null> = new BehaviorSubject<CognitoFormType | null>(null);\n  public form$: Observable<CognitoFormType | null> = this.formSource.asObservable();\n\n\n  private user: CognitoUser | null = null;\n  private pool!: CognitoUserPool;\n\n  private accessToken?: string;\n  private idToken?: string;\n  private storage: EphemeralStorage = new EphemeralStorage();\n  private useLocalStorage: boolean = true;\n\n  constructor(private http: HttpClient) {\n\n  }\n\n  public initialize(UserPoolId: string, ClientId: string, useLocalStorage: boolean = true, idToken?: string, accessToken?: string, refreshToken?: string ) {\n\n    //for federated users\n    const access = params(\"access_token\") ?? accessToken ?? localStorage.getItem(\"ems_access_token\") ?? null;\n    const id = params(\"id_token\") ?? idToken ?? localStorage.getItem(\"ems_id_token\") ?? null;\n    const sessionId = params(\"sessionId\") ?? null;\n    const otp = params(\"otp\") ?? null;\n\n    this.useLocalStorage = useLocalStorage;\n\n    if(useLocalStorage && access && id) {\n      localStorage.setItem(\"ems_access_token\", access);\n      localStorage.setItem(\"ems_id_token\", id);\n      window.location.hash = \"\";\n    } \n\n    this.accessToken = access;\n    this.idToken = id;\n\n    //for srp users\n    if(useLocalStorage) {\n      this.pool = new CognitoUserPool({ UserPoolId, ClientId });\n      this.user = this.pool.getCurrentUser();\n      this.userSource.next(this.user);\n      this.user?.getSession((e: Error, session: null) => this.sessionSource.next(session));\n    } else {\n      this.setCognitoUserFromToken(UserPoolId, ClientId, idToken, accessToken, refreshToken);\n    }\n    \n  }\n\n  public setCognitoUserFromToken (UserPoolId: string, ClientId: string, idToken?: string, accessToken?: string, refreshToken?: string) {\n      this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage: this.storage });\n      \n      if(idToken) {\n        const decoded: any = jwtDecode(idToken);\n        this.user = new CognitoUser({\n            Username: decoded['cognito:username'],\n            Pool: this.pool, \n            Storage: this.storage\n        });\n\n        const idTokenObj = new CognitoIdToken({ IdToken: idToken });\n        const accessTokenObj = new CognitoAccessToken({ AccessToken: accessToken! });\n        const refreshTokenObj = new CognitoRefreshToken({ RefreshToken: refreshToken! });\n        const session = new CognitoUserSession({ IdToken: idTokenObj, AccessToken: accessTokenObj, RefreshToken: refreshTokenObj });\n\n        // Set the session to the Cognito user\n        this.user.setSignInUserSession(session);\n        \n      } else {\n        this.user = this.pool.getCurrentUser();\n      }\n      \n      this.userSource.next(this.user);\n      this.user?.getSession((e: Error, session: null) => this.sessionSource.next(session));\n      return this.user;\n  };\n\n  public magicLinkAuthenticate(Username: string, ChallengeResponse?: string, SessionId?: string) {\n    const request = ChallengeResponse ? CognitoRequestType.MagicLink : CognitoRequestType.Authentication;\n    const details = new AuthenticationDetails({ Username });\n    const data: any = { Username, Pool: this.pool };\n    if(!this.useLocalStorage) data.Storage = this.storage;\n    const user = this.user = this.user ?? new CognitoUser(data);\n    this.user.setAuthenticationFlowType('CUSTOM_AUTH');\n\n    //@ts-ignore\n    if(SessionId) this.user.Session = SessionId;\n\n    return new Promise(async( resolve: (result: any) =>void, reject: (result: any) => void) => {\n      const handler = {\n        onSuccess: (session: CognitoUserSession) => {\n          this.sessionSource.next(session);\n          this.userSource.next(this.user);\n          resolve({ type: CognitoResponseType.Authenticated, session, user, request })\n        },\n        onFailure: (error: any)=> reject({ type: CognitoResponseType.NotAuthorized, error, user, request, session: null }),\n        customChallenge: (challengeParameters: any) => {\n          resolve({ type: CognitoResponseType.MagicLink, user, request, challengeParameters });\n        }\n      };\n      \n      if(ChallengeResponse) user.sendCustomChallengeAnswer(ChallengeResponse, handler);\n      else user.initiateAuth(details, handler);\n    });\n  }\n\n  public passkeyAuthenticate(Username: string, ChallengeResponse?: string) {\n    const request = ChallengeResponse ? CognitoRequestType.Passkey : CognitoRequestType.Authentication;\n    const details = new AuthenticationDetails({ Username });\n    const data:any = { Username, Pool: this.pool };\n    if(!this.useLocalStorage) data.Storage = this.storage;\n    const user = this.user = this.user ?? new CognitoUser(data);\n    this.user.setAuthenticationFlowType('CUSTOM_AUTH');\n\n    return new Promise(async( resolve: (result: any) =>void, reject: (result: any) => void) => {\n      const handler = {\n        onSuccess: (session: CognitoUserSession) => {\n          this.sessionSource.next(session);\n          this.userSource.next(this.user);\n          resolve({ type: CognitoResponseType.Authenticated, session, user, request })\n        },\n        onFailure: (error: any)=> reject({ type: CognitoResponseType.NotAuthorized, error, user, request, session: null }),\n        customChallenge: (challengeParameters: any) => resolve({ type: CognitoResponseType.Passkey, user, request, challengeParameters })\n      };\n      \n      if(ChallengeResponse) user.sendCustomChallengeAnswer(ChallengeResponse, handler);\n      else user.initiateAuth(details, handler);\n    });\n  }\n\n  public otpAuthenticate(Username: string, ChallengeResponse?: string) {\n    const request = ChallengeResponse ? CognitoRequestType.OtpChallenge : CognitoRequestType.Authentication;\n    const details = new AuthenticationDetails({ Username });\n    const data:any = { Username, Pool: this.pool };\n    if(!this.useLocalStorage) data.Storage = this.storage;\n    const user = this.user = this.user ?? new CognitoUser(data);\n    this.user.setAuthenticationFlowType('CUSTOM_AUTH');\n\n    return new Promise(async( resolve: (result: any) =>void, reject: (result: any) => void) => {\n      const handler = {\n        onSuccess: (session: CognitoUserSession) => {\n          this.sessionSource.next(session);\n          this.userSource.next(this.user);\n          resolve({ type: CognitoResponseType.Authenticated, session, user, request })\n        },\n        onFailure: (error: any)=> reject({ type: CognitoResponseType.NotAuthorized, error, user, request, session: null }),\n        customChallenge: (challengeParameters: any) => resolve({ type: CognitoResponseType.OtpChallenge, user, request, challengeParameters })\n      };\n      \n      if(ChallengeResponse) user.sendCustomChallengeAnswer(ChallengeResponse, handler);\n      else user.initiateAuth(details, handler);\n    });\n  }\n\n  public getUserInfo(url: string): Promise<ICognitoUserData | HttpErrorResponse | undefined> {\n    const request = `${url}/oauth2/userInfo`\n    const headers = this.headers();\n\n    return this.http.get(request, { headers, withCredentials: true } ).pipe(\n        map((result: any) => \n          { return {\n            email: result.email,\n            username: result.username,\n            sub: result.sub,\n            firstName: result.given_name,\n            lastName: result.family_name,\n            accessToken: this.accessToken!,\n            idToken: this.idToken!\n          }}\n        )\n     ).toPromise();\n\n    //, catchError(this.handleErrorQuietly)\n  }\n\n  public setUserSession(session: CognitoUserSession) {\n    this.sessionSource.next(session);\n  }\n\n  public showForm(form: CognitoFormType | null) {\n    this.formSource.next(form);\n  }\n\n  public logout() {\n    return new Promise((resolve: (result: any) => void, reject: (result: any) => void) => {\n      if(this.user) {\n        this.userSource.next(null);\n        this.sessionSource.next(null);\n        localStorage.removeItem(\"ems_id_token\");\n        localStorage.removeItem(\"ems_access_token\");\n        this.user.globalSignOut({\n          onSuccess: resolve,\n          onFailure: () => {\n            //if user is disabled, must manually clear local storage (apparently)\n            for(let prop in localStorage) {\n              if(prop.match(/cognito/i)) localStorage.removeItem(prop);\n            }\n            resolve(null);\n          }\n        });\n      } else {\n        resolve(null);\n      }\n    });\n    \n  }\n\n  public authenticate(Username: string, Password: string): Promise<ICognitoResponse> {\n    const details = new AuthenticationDetails({ Username, Password});\n    const data:any = { Username, Pool: this.pool };\n    if(!this.useLocalStorage) data.Storage = this.storage;\n    const user = new CognitoUser(data);\n    return new Promise((resolve: (result: any) => void, reject: (result: any) => void) => {\n        if(!this.user) this.authenticateUser(user, details, resolve, reject);\n        else this.getUserSession(resolve, reject)\n    });\n  }\n\n  public createFederatedSession(IdToken: string, AccessToken: string) {\n\n    const session = new CognitoUserSession({\n          IdToken: new CognitoIdToken({ IdToken }),\n          AccessToken: new CognitoAccessToken({ AccessToken }),\n    });\n\n    const Username = session.getIdToken().payload[\"cognito:username\"];\n    const data:any = { Username, Pool: this.pool };\n    if(!this.useLocalStorage) data.Storage = this.storage;\n    this.user = new CognitoUser(data);\n    this.userSource.next(this.user);\n    this.sessionSource.next(session);\n  }\n\n  public completePasswordUpdate(password: string, user: CognitoUser, attributes: any): Promise<ICognitoResponse> {\n    const request = CognitoRequestType.NewUserPasswordReset;\n    return new Promise((resolve: (result: ICognitoResponse) => void, reject: (result: ICognitoResponse) => void) => {\n      user.completeNewPasswordChallenge(password, attributes, {\n        onSuccess: (session: CognitoUserSession) => {\n          this.user = user;\n          this.userSource.next(user);\n          this.sessionSource.next(session);\n          resolve({ type: CognitoResponseType.Authenticated, session, user, request: CognitoRequestType.Authentication });\n        },\n        onFailure: (error: any) => reject({ type: CognitoResponseType.NotAuthorized, error, user, request, session: null })\n      })\n    });\n  }\n\n  public requestVerificationCode(Username: string): Promise<ICognitoResponse> {\n    const data: any = { Username, Pool: this.pool };\n    if(!this.useLocalStorage) data.Storage = this.storage;\n    const user = new CognitoUser(data);\n    return this.forgotPassword(user);\n  }\n\n  public resetPassword(user: CognitoUser, oldPassword: string, newPassword: string): Promise<ICognitoResponse> {\n    const request = CognitoRequestType.PasswordReset;\n    return new Promise((resolve: (result: ICognitoResponse) => void, reject: (result: ICognitoResponse) => void) => {\n       user.changePassword(oldPassword, newPassword, (error, result) => {\n         if(error) reject({ type: CognitoResponseType.LimitExceededException, user, request, error, session: null});\n         else resolve({ type: CognitoResponseType.Success, user, request, session: null });\n       })\n    });\n  }\n\n  public forgotPassword(user: CognitoUser): Promise<ICognitoResponse> {\n    const request = CognitoRequestType.ForgotPassword;\n    return new Promise((resolve: (result: ICognitoResponse) => void, reject: (result: ICognitoResponse) => void) => {\n       user.forgotPassword({\n         onSuccess: (response: any) => resolve({ type: CognitoResponseType.Success, user, request, session: null }),\n         onFailure: (error: any) => reject({ type: CognitoResponseType.LimitExceededException, error, user, request, session: null })\n       })\n    });\n  }\n\n  public confirmPassword(user: CognitoUser, code: string, password: string): Promise<ICognitoResponse> {\n    const request = CognitoRequestType.ConfirmPassword;\n    return new Promise((resolve: (result: ICognitoResponse) => void, reject: (result: ICognitoResponse) => void) => {\n       user.confirmPassword(code, password, {\n         onSuccess: (response: any) => { resolve({ type: CognitoResponseType.Success, user, request, session: null }) },\n         onFailure: (error: any) => reject({ type: CognitoResponseType.InvalidCode, error, user, request, session: null })\n       })\n    });\n  }\n\n  private authenticateUser(user: CognitoUser, details: AuthenticationDetails, resolve: (result: ICognitoResponse) => void, reject: (result: ICognitoResponse) => void ) {\n    const request = CognitoRequestType.Authentication;\n    user.authenticateUser(details, {\n        onSuccess: (session: CognitoUserSession) => {\n          this.sessionSource.next(session);\n          this.userSource.next(user);\n          this.user = user;\n          resolve({ type: CognitoResponseType.Authenticated, session, user, request });\n        },\n        onFailure: (error: any) => reject({ type: CognitoResponseType.NotAuthorized, error, user, request, session: null }),\n        newPasswordRequired: (userAttributes, requiredAttributes) => {\n          resolve({type: CognitoResponseType.PasswordReset, userAttributes, requiredAttributes, user, request, session: null })\n        }\n    });\n  }\n\n  private getUserSession(resolve: (result: ICognitoResponse) => void, reject: (result: ICognitoResponse) => void) {\n    const request = CognitoRequestType.Authentication;\n    this.user!.getSession((error: Error, session: null) => {\n      if(error) reject({ type: CognitoResponseType.Authenticated, session, user: this.user!, request, error });\n      else {\n        this.sessionSource.next(session);\n        resolve({ type: CognitoResponseType.Authenticated, session, user: this.user!, request });\n      }\n    })\n  }\n\n  private handleErrorQuietly(error: HttpErrorResponse) {\n    return of(error);\n  }\n\n  private headers(custom: any = {}) {\n    const headers = { \n          \"Content-Type\": \"application/json\",\n          \"Authorization\": this.accessToken ? `Bearer ${this.accessToken}` : \"\"\n       };\n    return new HttpHeaders(headers);\n  }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'labeler'\n})\n@Injectable()\nexport class LabelerPipe implements PipeTransform {\n\n\ttransform(label: string): string {\n\t\tif(label?.match(/given name/i)) return \"First Name\";\n\t\tif(label?.match(/family name/i)) return \"Last Name\";\n\t\treturn label;\n\t}\n}","import { Component, OnInit, HostBinding, AfterViewInit, Input, Output, EventEmitter } from '@angular/core';\nimport { CognitoService } from \"./cognito.service\";\nimport { CognitoUser, CognitoUserSession, CognitoIdToken, CognitoAccessToken }  from 'amazon-cognito-identity-js';\nimport { ICognitoResponse, ICognitoUserData, ISSOProvider } from \"./cognito.interfaces\";\nimport { CognitoStrings } from \"./cognito.classes\";\nimport { CognitoResponseType, CognitoRequestType, CognitoFormType } from \"./cognito.types\";\nimport { unsnake, tick, params, trim } from \"./cognito.utils\";\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { startAuthentication, startRegistration } from '@simplewebauthn/browser';\n\n@Component({\n  selector: 'cognito',\n  templateUrl: \"./cognito.component.html\",\n  styleUrls: [ \"./cognito.component.less\" ]\n})\nexport class CognitoComponent implements OnInit, AfterViewInit {\n\n\n  @HostBinding(\"style\") hostStyle: Record<string, string | number> = {};\n  @HostBinding(\"class.render\") showForm: boolean = false;\n  @HostBinding(\"class.transitioning\") transitioning: boolean = false;\n\n  @Input(\"pool-id\") poolId!: string;\n  @Input(\"provider-name\") providerName: string = \"Google\";\n  @Input(\"client-id\") clientId!: string;\n  @Input(\"cognito-signin-url\") cognitoUrl?: string;\n  @Input(\"region\") region!: string;\n  @Input(\"modal-background\") modalBackground: string = \"rgba(255,255,255,0.5)\";\n  @Input(\"z-index\") zIndex: number = 1000;\n  @Input(\"hook\") hook?: (state: any) => Promise<boolean>;\n  @Input(\"srp\") srp: boolean = true;\n  @Input(\"otp\") otp: boolean = false;\n  @Input(\"sso\") sso: boolean = false;\n  @Input(\"magic-link\") magicLink: boolean = false;\n  @Input(\"magic-link-generator\") magicLinkGenerator?: Promise<boolean>;\n  @Input(\"reload-after-link-authentication\") reloadAfterLinkAuthentication: boolean = true;\n  @Input(\"passkeys\") passkeys: boolean = false;\n  @Input(\"useLocalStorage\") useLocalStorage: boolean = true;\n  @Input(\"idToken\") idToken: string | undefined;\n  @Input(\"accessToken\") accessToken: string | undefined;\n  @Input(\"refreshToken\") refreshToken: string | undefined;\n  @Input(\"sso-link\") ssoLink: string | undefined;\n  @Input(\"sso-providers\") ssoProviders: ISSOProvider[] = [];\n\n  @Input(\"passkeys-get-user-id\") getUserId!: (username: string) => Promise<string>;\n  @Input(\"passkeys-generate-authentication-options\") generateAuthenticationOptions!: (email: string) => Promise<any>;\n  @Input(\"passkeys-generate-registration-options\") generateRegistrationOptions!: (token: string) => Promise<any>;\n  @Input(\"passkeys-verify-registration\") verifyRegistration!: (input: any, token: string ) => Promise<any>;\n  @Input(\"passkeys-verify-authentication\") verifyAuthentication!: (input: any) => Promise<any>;\n\n  @Output(\"ready\") onReady: EventEmitter<any> = new EventEmitter();\n  @Output(\"connecting\") onConnecting: EventEmitter<boolean> = new EventEmitter();\n  @Output(\"authenticated\") onAuthenticated: EventEmitter<ICognitoUserData | null> = new EventEmitter();\n  @Output(\"response\") onResponse: EventEmitter<any> = new EventEmitter(); \n  @Output(\"usernameEntered\") onUsernameEntered: EventEmitter<string> = new EventEmitter();\n  @Output(\"providerSelect\") onProviderSelect: EventEmitter<string> = new EventEmitter();\n\n  public model: any = { username: null, password: null};\n  public componentStyle: Record<string, string | number> = {};\n  public formType: CognitoFormType | null = null;\n  public CognitoFormType = CognitoFormType;\n  public rows: any[] = [];\n  public error: string | null = null;\n  public prompt: string | null = null;\n  public cache: ICognitoResponse | null = null;\n  public strings = CognitoStrings;\n  public showPasswordField: boolean = true;\n  public showEmailSubmitButton: boolean = true;\n  public disableUsername: boolean = false;\n\n  private session: CognitoUserSession | null = null;\n  private user: CognitoUser | null = null;\n  public passkeyAuthOptions?: any;\n  public passkeyRegOptions?: any;\n\n  constructor(private cognito: CognitoService) {\n    \n  }\n\n  ngOnInit(): void {\n    \n    this.cognito.initialize(this.poolId, this.clientId, this.useLocalStorage, this.idToken, this.accessToken, this.refreshToken);\n\n    this.cognito.form$.subscribe(form => {\n      this.formType = form;\n      this.showCurrentForm();\n    });\n    \n    this.cognito.session$.subscribe(session => {\n      this.session = session;\n    });\n    this.cognito.user$.subscribe(user => {\n      this.user = user;\n    });\n\n    this.updateButtons();\n  }\n\n  ngAfterViewInit(): void {\n    setTimeout(() => this.initialize());\n  }\n\n  onEnterUsername() {\n    this.showEmailSubmitButton = false;\n    this.onUsernameEntered.emit(this.model.username!.replace(/\\s+/gim,\"\"));\n  }\n\n  selectProvider(providerId: string, event?: Event) {\n    if(event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.onProviderSelect.emit(providerId);\n  }\n\n  trackByProviderId(index: number, provider: ISSOProvider): string {\n    return provider.id;\n  }\n\n  updateButtons() {\n    if(this.otp || this.magicLink || this.passkeys) {\n      this.showPasswordField = false;\n    }\n  }\n\n  async login() {\n\n    if(!this.srp && this.otp) {\n      return this.getOtp();\n    } else if(!this.srp && this.magicLink) {\n      return this.getMagicLink();\n    } else if(!this.srp && this.passkeys) {\n      return this.getPasskey();\n    } else if(!this.srp) {\n      return this.onEnterUsername();\n    }\n\n    let response: ICognitoResponse;\n    this.error = null;\n    this.model.password = trim(this.model.password);\n\n    if(this.hook) {\n      const proceed = await this.hook({ \"state\": \"before-login\", model: this.model });\n      if(!proceed) return;\n    }\n\n    try {\n      const username = this.model.username!.replace(/\\s+/gim,\"\");\n      this.onConnecting.emit(true);\n      response = await this.cognito.authenticate(username, this.model.password!);\n    } catch(e: any) {\n      response = e;\n    } finally {\n      this.handleResponse(response!);\n    }\n  }\n\n  async getOtp() {\n    let response: ICognitoResponse;\n    this.error = null;\n\n    try {\n      this.onConnecting.emit(true);\n\n      const username = this.model.username!.replace(/\\s+/gim,\"\");\n      const otp = this.model.otp ? trim(this.model.otp) : undefined;\n\n      this.srp = false;\n      this.magicLink = false;\n      this.passkeys = false;\n\n      if(this.hook) {\n        const proceed = await this.hook({ \"state\": \"before-otp-request\", model: this.model });\n        if(!proceed) return this.connectionComplete();\n      }\n      \n      response  = await this.cognito.otpAuthenticate(username, otp);\n\n      if(this.hook) {\n        //@ts-ignore\n        const proceed = await this.hook({ \"state\": \"after-otp-request\", model: this.model, sessionId: response.user.Session });\n        if(!proceed) throw new Error(\"Unable to proceed\");\n      }\n    } catch(e: any) {\n      response = e;\n    } finally {\n      this.handleResponse(response!);\n    }\n  }\n\n  async getMagicLink() {\n    \n    let response: ICognitoResponse;\n    this.error = null;\n\n    try {\n      const username = this.model.username!.replace(/\\s+/gim,\"\");\n      this.onConnecting.emit(true);\n\n      if(this.hook) {\n        const proceed = await this.hook({ \"state\": \"before-magic-link-request\", model: this.model });\n        if(!proceed) return this.connectionComplete();\n      }\n\n      response = await this.cognito.magicLinkAuthenticate(username);\n      \n      if(this.hook) {\n        //@ts-ignore\n        const proceed = await this.hook({ \"state\": \"after-magic-link-request\", model: this.model, sessionId: response.user.Session });\n        if(!proceed) return this.connectionComplete();\n      }\n    } catch(e: any) {\n      response = e;\n    } finally {\n      this.connectionComplete();\n    }\n  }\n\n  async processMagicLink(email: string, code: string, sessionId: string) {\n    try {\n      this.onConnecting.emit(true);\n      await this.cognito.magicLinkAuthenticate(email, code, sessionId);\n      if(this.reloadAfterLinkAuthentication) {\n        window.location.href = window.location.origin;\n      } else {\n        this.onAuthenticated.emit(this.getUserData()); //connected\n        this.showForm = false;\n        this.connectionComplete();\n      }\n    } catch(e: any) { } \n  }\n\n  async getPasskey() {\n    const username = this.model.username!.replace(/\\s+/gim,\"\");\n    this.passkeyAuthOptions = await this.generateAuthenticationOptions(username);\n    \n    const credentials = this.passkeyAuthOptions?.allowCredentials ?? [];\n    if(!credentials.length && !this.model.passkey) this.sendPasskeyCode();\n    else if(!credentials.length) this.registerPasskey();\n    else this.usePasskey();\n  }\n\n  private async sendPasskeyCode() {\n    const username = this.model.username!.replace(/\\s+/gim,\"\");\n    const token = await this.getUserId(username);\n    this.srp = false;\n    this.otp = false;\n    this.magicLink = false;\n    this.model.showChallengeEntry = true;\n  }\n\n  private async usePasskey() {\n    const username = this.model.username!.replace(/\\s+/gim,\"\");\n    this.onConnecting.emit(true);\n    const authentication = await startAuthentication(this.passkeyAuthOptions);\n    const outcome = await this.verifyAuthentication(authentication);\n    await this.cognito.passkeyAuthenticate(username);\n    \n    if(outcome.verified) {\n      await this.cognito.passkeyAuthenticate(username, outcome.uid);\n      this.onAuthenticated.emit(this.getUserData());\n      this.showForm = false;\n      this.connectionComplete();\n    }\n  }\n\n  private async registerPasskey() {\n    const username = this.model.username!.replace(/\\s+/gim,\"\");\n    const code = this.model.passkey!.replace(/\\s+/gim,\"\");\n\n    this.onConnecting.emit(true);\n    const options = await this.generateRegistrationOptions(code);\n    const registration = await startRegistration(options);\n    const outcome = await this.verifyRegistration(registration, code);\n    await this.cognito.passkeyAuthenticate(username);\n    \n    if(outcome.verified) {\n      await this.cognito.passkeyAuthenticate(username, outcome.uid);\n      this.onAuthenticated.emit(this.getUserData());\n      this.showForm = false;\n      this.connectionComplete();\n    }\n  }\n\n  async onNewUser() {\n    let response: ICognitoResponse;\n    this.error = null;\n    this.model.newPassword = trim(this.model.newPassword);\n\n    if(this.hook) {\n      const proceed = await this.hook({ \"state\": \"before-registration\", model: this.model });\n      if(!proceed) return;\n    }\n    \n    try {\n      this.onConnecting.emit(true);\n      response = await this.cognito.completePasswordUpdate(this.model.newPassword!, this.cache!.user, this.getUserAttributes());\n    } catch(e: any) {\n      response = e;\n    } finally {\n      this.handleResponse(response!);\n    }\n\n  }\n\n  async onForcePasswordReset() {\n    \n    this.model.code = trim(this.model.code);\n    this.model.newPassword = trim(this.model.newPassword);\n    this.onConnecting.emit(true);\n\n    if(this.hook) {\n      const proceed = await this.hook({ \"state\": \"before-force-password-reset\", model: this.model });\n      if(!proceed) return;\n    }\n    \n    try {\n      const response = await this.cognito.confirmPassword(this.cache!.user, this.model.code, this.model.newPassword);\n      this.error = null;\n      this.transitioning = true;\n      await tick(250);\n      this.formType = CognitoFormType.Login;\n      this.setMessaging(response, CognitoStrings.onUserPasswordChangeSuccessful);\n      await tick(0);\n      this.transitioning = false;\n    } catch(e: any) {\n      this.setMessaging(e as ICognitoResponse);\n    } finally {\n      this.onConnecting.emit(false);\n    }\n  }\n\n  async onUserPasswordReset() {\n\n    this.error = null;\n    this.onConnecting.emit(true);\n\n    this.model.password = trim(this.model.password);\n    this.model.newPassword = trim(this.model.newPassword);\n\n    if(this.hook) {\n      const proceed = await this.hook({ \"state\": \"before-user-password-reset\", model: this.model });\n      if(!proceed) return;\n    }\n    \n    try {\n      const response = await this.cognito.resetPassword(this.user!, this.model.password!, this.model.newPassword);\n      this.transitioning = true;\n      await tick(250);\n      this.formType = CognitoFormType.PasswordUpdateSuccessful;\n      this.prompt = CognitoStrings.onPasswordUpdated;\n      this.error = null;\n      await tick();\n      this.transitioning = false;\n    } catch(e: any) {\n      this.setMessaging(e as ICognitoResponse);\n    } finally {\n      this.onConnecting.emit(false);\n    }\n\n  }\n\n  async onForgotPassword($event: MouseEvent) {\n    $event.preventDefault();\n    $event.stopImmediatePropagation();\n    \n    this.transitioning = true;\n    await tick(250);\n    this.formType = CognitoFormType.UserVerificationRequest;\n    this.prompt = CognitoStrings.onVerificationCodeSent;\n    this.error = null;\n    await tick();\n    this.transitioning = false;\n  }\n\n  async onRequestVerificationCode() {\n\n    const username = this.model.username!.replace(/\\s+/gim,\"\");\n    const model = { username };\n\n    if(this.hook) {\n      const proceed = await this.hook({ \"state\": \"request-verification-code\", \"username\": username, model });\n      if(!proceed) return;\n      this.model.username = model.username;\n    }\n\n    this.onConnecting.emit(true);\n    this.error = null;\n    \n    try {\n      const response = await this.cognito.requestVerificationCode(model.username);\n      this.transitioning = true;\n      await tick(250);\n      this.setMessaging(response, CognitoStrings.onNewPasswordRequired);\n      this.showPasswordResetForm(response, false);\n    } catch(e: any) {\n      this.setMessaging(e as ICognitoResponse);\n    } finally {\n      this.connectionComplete();\n    }\n  }\n\n  newUserFormDisabled() {\n    let disabled = false;\n    this.cache?.requiredAttributes?.forEach(key => {\n      if(!this.model[key]) disabled = true;\n    });\n\n    if(!this.model.newPassword || !this.model.newPasswordConfirm) {\n      disabled = true;\n    }\n\n    if(this.model.newPassword !== this.model.newPasswordConfirm) {\n      disabled = true;\n    }\n\n    return disabled;\n  }\n\n  private async initialize() {\n    try {\n      if(this.cognitoUrl && localStorage.getItem(\"ems_access_token\")) {\n        \n        const info = await this.cognito.getUserInfo(this.cognitoUrl) as ICognitoUserData;\n\n        //emulate cognito user/session for federated login\n        this.session = new CognitoUserSession({\n          IdToken: new CognitoIdToken({ IdToken: info.idToken }),\n          AccessToken: new CognitoAccessToken({ AccessToken: info.accessToken }),\n        });\n        this.cognito.createFederatedSession(info.idToken, info.accessToken)\n      }\n    } catch (error: any) {\n    } finally {\n      if(this.session) {\n        this.onAuthenticated.emit(this.getUserData());\n      }\n    }\n  }\n\n  private async handleResponse(response: ICognitoResponse) {\n\n    this.transitioning = true;\n    \n    await tick(250);\n\n    this.setMessaging(response);\n    this.cache = response.userAttributes ? response : this.cache;\n\n    if(response.error?.code === CognitoResponseType.NotAuthorized && response.request === CognitoRequestType.Authentication) {\n      this.connectionComplete(); //likely bad password or too many attempts\n    } else if(response.error?.code === CognitoResponseType.ForcePasswordReset && response.request === CognitoRequestType.Authentication) {\n      this.initiatePasswordReset(response); //admin has forced user password reset\n    } else if(response.type === CognitoResponseType.OtpChallenge) {\n      this.model.showChallengeEntry = true;\n      this.connectionComplete();\n    } else if(response.type === CognitoResponseType.PasswordReset && response.request === CognitoRequestType.Authentication) {\n      this.prompt = CognitoStrings.onFirstLogin;\n      this.showPasswordResetForm(response); //new user\n    } else if(!response.error?.code && (response.request === CognitoRequestType.Authentication || response.type === CognitoResponseType.Authenticated )) {\n      this.onAuthenticated.emit(this.getUserData()); //connected\n      this.showForm = false;\n      this.connectionComplete();\n    } else {\n      this.connectionComplete(); //unsupported response -- hopefully described in messaging\n    }\n\n    this.onResponse.emit({ response, model: this.model });\n  }\n\n  private async initiatePasswordReset(response: ICognitoResponse) {\n    this.error = null;\n    try {\n      const result = await this.cognito.forgotPassword(response.user);\n      this.setMessaging(result, CognitoStrings.onNewPasswordRequired);\n      await tick(250);\n      this.showPasswordResetForm(response, false);\n    } catch(e: any) {\n      this.setMessaging(e as ICognitoResponse);\n    } finally {\n      this.connectionComplete();\n    }\n  }\n\n  private setMessaging(response: ICognitoResponse, prompt: string | null = null) {\n    if(response.error?.code === CognitoResponseType.LimitExceededException) {\n      this.error = CognitoStrings.onTooManyAttempts;\n    } else {\n      this.error = response.error?.message ?? null;\n    }\n\n    this.prompt = prompt;\n  }\n\n  private async connectionComplete() {\n    await tick();\n    this.transitioning = false;\n    this.onConnecting.emit(false);\n  }\n\n  private async showCurrentForm() {\n    if(!this.formType) return;\n\n    if(this.formType === CognitoFormType.GoogleSignIn) {\n      return this.signInWithGoogle();\n    }\n\n    this.hostStyle = {\n      \"background\": this.modalBackground,\n      \"z-index\": this.zIndex\n    }\n\n    await tick();\n\n    this.showForm = true;\n    this.onReady.emit();\n  }\n\n  private async showPasswordResetForm(result: ICognitoResponse, isNewUser: boolean = true) {\n    this.cache = result;\n    this.rows = [];\n    this.formType = isNewUser ? CognitoFormType.NewUser : CognitoFormType.ForcePasswordReset;\n    \n    //bubble first and last name fields to the top of the attributes list\n    result.requiredAttributes?.sort((a,b) => {\n      if(a === \"given_name\" && b === \"family_name\") return -1;\n      if(b === \"given_name\" && a === \"family_name\") return 1;\n      if(a === \"given_name\") return -1;\n      if(a === \"family_name\") return - 1;\n      if(b === \"given_name\") return 1;\n      if(b === \"family_name\") return 1;\n      return a > b ? 1 : -1;\n    });\n\n    //inject formrows for required attributes\n    result.requiredAttributes?.forEach(key => {\n      if(key.match(/^email/)) return;\n      const value = result.userAttributes![key]\n      this.rows.push({\n        label: unsnake(key),\n        key\n      });\n      this.model[key] = value && value.length ? value : undefined\n    });\n\n    await tick();\n    this.connectionComplete();\n  }\n\n  private getUserAttributes(): Record<string,string> {\n    const attributes = {} as Record<string,string>;\n    if(!this.cache?.requiredAttributes) return attributes;\n    this.cache!.requiredAttributes!.forEach(key => attributes[key] = this.model[key]);\n    return attributes;\n  }\n\n  private signInWithGoogle() {\n    const url = `${this.cognitoUrl}/oauth2/authorize?identity_provider=${this.providerName}&redirect_uri=${window.location.origin}&response_type=TOKEN&client_id=${this.clientId}&scope=email openid profile aws.cognito.signin.user.admin`;\n    window.location.href = url;\n  }\n\n  private getUserData(): ICognitoUserData {\n    return {\n      email: this.session!.getIdToken().payload[\"email\"],\n      username: this.session!.getIdToken().payload[\"cognito:username\"],\n      sub:  this.session!.getIdToken().payload[\"sub\"],\n      firstName: this.session!.getIdToken().payload[\"given_name\"],\n      lastName: this.session!.getIdToken().payload[\"family_name\"],\n      idToken:  this.session!.getIdToken().getJwtToken(),\n      accessToken:  this.session!.getAccessToken().getJwtToken(),\n    }\n  }\n\n}\n","<form *ngIf=\"showForm && formType === CognitoFormType.Login\" class=\"cognito-form\" (submit)=\"login()\">\n\t<button class=\"button close\" (click)=\"showForm=false\" type=\"button\"><span class=\"buttontext\">{{ strings.labelClose }}</span></button>\n\t<div *ngIf=\"prompt\" class=\"prompt\" [innerHtml]=\"prompt\"></div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"username\">{{ strings.labelEmail }}</label>\n\t\t<input id=\"username\" class=\"cognito-input cognito-text\" type=\"text\" name=\"username\" [(ngModel)]=\"model.username\" [disabled]=\"disableUsername\"/>\n\t</div>\n\t<div *ngIf=\"!srp && !otp && !passkeys && !magicLink && showEmailSubmitButton\" class=\"cognito-buttons\">\n\t\t<button class=\"cognito-input cognito-submit cognito-button\" type=\"button\" (click)=\"onEnterUsername()\" [disabled]=\"!model.username\">{{ strings.labelSubmit }}</button>\n\t</div>\n\t<div *ngIf=\"srp && !showPasswordField\" class=\"cognito-buttons\">\n\t\t<button class=\"cognito-input cognito-submit cognito-button\" type=\"button\" (click)=\"showPasswordField = true; otp = false; magicLink = false; passkeys = false; sso = false;\" [disabled]=\"!model.username\">{{ strings.labelUseRegularPassword }}</button>\n\t</div>\n\t<div *ngIf=\"srp && showPasswordField\" class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"password\">{{ strings.labelPassword }}</label>\n\t\t<input id=\"password\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password\" [(ngModel)]=\"model.password\"/>\n\t</div>\n\t<div *ngIf=\"srp && showPasswordField\" class=\"cognito-buttons\">\n\t\t<button type=\"button\" class=\"a\" (click)=\"onForgotPassword($event)\">{{ strings.labelForgotPassword }}</button>\n\t\t<input class=\"cognito-input cognito-submit cognito-button\" type=\"submit\" [value]=\"strings.labelSubmit\"/>\n\t</div>\n\t<div *ngIf=\"ssoProviders.length\" class=\"cognito-sso-section\">\n\t\t<hr class=\"cognito-sso-divider\" />\n\t\t<p class=\"cognito-sso-label\">{{ strings.labelOrSignInWith }}</p>\n\t\t<div class=\"cognito-sso-buttons\">\n\t\t\t<button *ngFor=\"let provider of ssoProviders; trackBy: trackByProviderId\" type=\"button\" class=\"cognito-input cognito-button cognito-sso-provider\" (click)=\"selectProvider(provider.id, $event)\" [title]=\"provider.hoverText\">\n\t\t\t\t<img [src]=\"provider.icon\" [alt]=\"provider.label\" class=\"cognito-sso-icon\" /><span>{{ provider.label }}</span>\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"otp && model.showChallengeEntry\" class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"otp\">{{ strings.labelOtpEnter }}</label>\n\t\t<input id=\"otp\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"text\" name=\"otp\" [(ngModel)]=\"model.otp\"/>\n\t</div>\n\t<div *ngIf=\"passkeys && model.showChallengeEntry\" class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"passkey-reg\">{{ strings.labelPasskeyEnter }}</label>\n\t\t<textarea id=\"passkey-reg\" autocomplete=\"off\" class=\"cognito-input cognito-text\" name=\"passkey-reg\" [(ngModel)]=\"model.passkey\"></textarea>\n\t</div>\n\t<div *ngIf=\"otp\" class=\"cognito-buttons\">\n\t\t<button class=\"cognito-input cognito-submit cognito-button\" type=\"button\" (click)=\"getOtp()\" [disabled]=\"!model.username\">{{ model.showChallengeEntry ? strings.labelSubmit : strings.labelOtp }}</button>\n\t</div>\t\n\t<div *ngIf=\"magicLink\" class=\"cognito-buttons\">\n\t\t<button class=\"cognito-input cognito-submit cognito-button\" type=\"button\" (click)=\"getMagicLink()\" [disabled]=\"!model.username\">{{ strings.labelMagicLink }}</button>\n\t</div>\t\n\t<div *ngIf=\"passkeys\" class=\"cognito-buttons\">\n\t\t<button class=\"cognito-input cognito-submit cognito-button\" type=\"button\" (click)=\"getPasskey()\" [disabled]=\"!model.username\">{{ model.showChallengeEntry ? strings.labelSubmit : strings.labelPasskeys }}</button>\n\t</div>\t\n\t<div *ngIf=\"sso && ssoLink\" class=\"cognito-buttons\">\n\t\t<a class=\"cognito-input cognito-submit cognito-button\" type=\"button\" [href]=\"ssoLink\">{{ strings.labelSso }}</a>\n\t</div>\t\n\t<div *ngIf=\"error\" class=\"error\" [innerHtml]=\"error\"></div>\n</form>\n<form *ngIf=\"showForm && formType === CognitoFormType.NewUser\" class=\"cognito-form\" (submit)=\"onNewUser()\">\n\t<button class=\"button close\" (click)=\"showForm=false\" type=\"button\"><span class=\"buttontext\">{{ strings.labelClose }}</span></button>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"username\">{{ strings.labelEmail }}</label>\n\t\t<input id=\"username\" class=\"cognito-input cognito-text\" type=\"text\" name=\"username\" [(ngModel)]=\"model.username\" disabled />\n\t</div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label no-mb\" for=\"new-password\">{{ strings.labelNewPassword }}</label>\n\t\t<p class=\"cognito-sublabel\">{{ strings.labelPasswordRequirement }}</p>\n\t\t<input id=\"new-password\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password-new\" [(ngModel)]=\"model.newPassword\"/>\n\t</div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"password-confirm\">{{ strings.labelConfirmNewPassword }}</label>\n\t\t<input id=\"password-confirm\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password-confirm\" [(ngModel)]=\"model.newPasswordConfirm\"/>\n\t</div>\n\t<div class=\"cognito-formrow\" *ngFor=\"let row of rows\">\n\t\t<label class=\"cognito-label\" for=\"username\">{{ row.label|labeler }}</label>\n\t\t<input [id]=\"row.key\"  class=\"cognito-input cognito-text\" type=\"text\" [name]=\"row.key\" [(ngModel)]=\"model[row.key]\"/>\n\t</div>\n\t<div class=\"cognito-buttons\">\n\t\t<input class=\"cognito-input cognito-submit cognito-button\" type=\"submit\" [disabled]=\"newUserFormDisabled()\" [value]=\"strings.labelSubmit\"/>\n\t</div>\t\n\t<div *ngIf=\"error\" class=\"error\" [innerHtml]=\"error\"></div>\n</form>\n<form *ngIf=\"showForm && formType === CognitoFormType.ForcePasswordReset\" class=\"cognito-form\" (submit)=\"onForcePasswordReset()\">\n\t<button class=\"button close\" (click)=\"showForm=false\" type=\"button\"><span class=\"buttontext\">{{ strings.labelClose }}</span></button>\n\t<div *ngIf=\"prompt\" class=\"prompt\" [innerHtml]=\"prompt\"></div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"username\">{{ strings.labelEmail }}</label>\n\t\t<input id=\"username\" class=\"cognito-input cognito-text\" type=\"text\" name=\"username\" [(ngModel)]=\"model.username\" disabled />\n\t</div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"code\">{{ strings.labelCode }}</label>\n\t\t<input id=\"code\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"text\" name=\"code\" [(ngModel)]=\"model.code\"/>\n\t</div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"new-password\">{{ strings.labelNewPassword }}</label>\n\t\t<p class=\"cognito-sublabel\">{{ strings.labelPasswordRequirement }}</p>\n\t\t<input id=\"new-password\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password-new\" [(ngModel)]=\"model.newPassword\"/>\n\t</div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"password-confirm\">{{ strings.labelConfirmNewPassword }}</label>\n\t\t<input id=\"password-confirm\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password-confirm\" [(ngModel)]=\"model.newPasswordConfirm\"/>\n\t</div>\n\t<div class=\"cognito-buttons\">\n\t\t<input class=\"cognito-input cognito-submit cognito-button\" type=\"submit\" [disabled]=\"newUserFormDisabled()\" [value]=\"strings.labelSubmit\"/>\n\t</div>\t\n\t<div *ngIf=\"error\" class=\"error\" [innerHtml]=\"error\"></div>\n</form>\n<form *ngIf=\"showForm && formType === CognitoFormType.UserVerificationRequest\" class=\"cognito-form\" (submit)=\"onRequestVerificationCode()\">\n\t<button class=\"button close\" (click)=\"showForm=false\" type=\"button\"><span class=\"buttontext\">{{ strings.labelClose }}</span></button>\n\t<div *ngIf=\"prompt\" class=\"prompt\" [innerHtml]=\"prompt\"></div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"username\">{{ strings.labelEmail }}</label>\n\t\t<input id=\"username\" class=\"cognito-input cognito-text\" type=\"text\" name=\"username\" [(ngModel)]=\"model.username\"/>\n\t</div>\n\t<div class=\"cognito-buttons\">\n\t\t<input class=\"cognito-input cognito-submit cognito-button\" type=\"submit\" [disabled]=\"!model.username\" [value]=\"strings.labelSubmit\"/>\n\t</div>\t\n\t<div *ngIf=\"error\" class=\"error\" [innerHtml]=\"error\"></div>\n</form>\n<form *ngIf=\"showForm && formType === CognitoFormType.UserPasswordReset\" class=\"cognito-form\" (submit)=\"onUserPasswordReset()\">\n\t<button class=\"button close\" (click)=\"showForm=false\" type=\"button\"><span class=\"buttontext\">{{ strings.labelClose }}</span></button>\n\t<div *ngIf=\"prompt\" class=\"prompt\" [innerHtml]=\"prompt\"></div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"current-password\">{{ strings.labelCurrentPassword }}</label>\n\t\t<input id=\"current-password\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password\" [(ngModel)]=\"model.password\"/>\n\t</div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"new-password\">{{ strings.labelNewPassword }}</label>\n\t\t<p class=\"cognito-sublabel\">{{ strings.labelPasswordRequirement }}</p>\n\t\t<input id=\"new-password\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password-new\" [(ngModel)]=\"model.newPassword\"/>\n\t</div>\n\t<div class=\"cognito-formrow\">\n\t\t<label class=\"cognito-label\" for=\"password-confirm\">{{ strings.labelConfirmNewPassword }}</label>\n\t\t<input id=\"password-confirm\" autocomplete=\"off\" class=\"cognito-input cognito-text\" type=\"password\" name=\"password-confirm\" [(ngModel)]=\"model.newPasswordConfirm\"/>\n\t</div>\n\t<div class=\"cognito-buttons\">\n\t\t<input class=\"cognito-input cognito-submit cognito-button\" type=\"submit\" [disabled]=\"newUserFormDisabled()\" [value]=\"strings.labelSubmit\"/>\n\t</div>\t\n\t<div *ngIf=\"error\" class=\"error\" [innerHtml]=\"error\"></div>\n</form>\n<form *ngIf=\"showForm && formType === CognitoFormType.PasswordUpdateSuccessful\" class=\"cognito-form\" (submit)=\"showForm = false\">\n\t<div class=\"prompt\" [innerHtml]=\"prompt\"></div>\n\t<div class=\"cognito-buttons\">\n\t\t<input class=\"cognito-input cognito-submit cognito-button\" type=\"submit\" [value]=\"strings.labelClose\"/>\n\t</div>\t\n</form>","import { NgModule } from '@angular/core';\nimport { CognitoComponent } from './cognito.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { LabelerPipe } from \"./cognito.pipes\";\n\n\n@NgModule({\n  declarations: [\n    CognitoComponent,\n    LabelerPipe\n  ],\n  imports: [\n    FormsModule,\n    CommonModule,\n    HttpClientModule\n  ],\n  exports: [\n    CognitoComponent\n  ]\n})\nexport class CognitoModule { }\n","/*\n * Public API Surface of cognito\n */\n\nexport * from './lib/cognito.service';\nexport * from './lib/cognito.component';\nexport * from './lib/cognito.module';\nexport * from './lib/cognito.classes';\nexport { ICognitoUserData, ISSOProvider } from \"./lib/cognito.interfaces\";\nexport { CognitoFormType} from './lib/cognito.types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CognitoService","i4.LabelerPipe"],"mappings":"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"}