{"version":3,"file":"41f16f.js","mappings":"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","sources":["webpack://@newday/servicing-main/./src/app/components/show-secret-toggle/show-password-toggle.component.ts","webpack://@newday/servicing-main/./src/app/components/show-secret-toggle/show-secret-toggle.component.html","webpack://@newday/servicing-main/./src/app/components/system-notifications/system-notifications.component.ts","webpack://@newday/servicing-main/./src/app/components/system-notifications/system-notifications.component.html","webpack://@newday/servicing-main/./src/app/components/system-notifications/system-notifications.module.ts","webpack://@newday/servicing-main/./src/app/components/threat-metrix/threat-metrix.component.ts","webpack://@newday/servicing-main/./src/app/components/tooltip/tooltip.component.ts","webpack://@newday/servicing-main/./src/app/components/tooltip/tooltip.component.html","webpack://@newday/servicing-main/./src/app/components/validation-messages/validation-messages.component.html","webpack://@newday/servicing-main/./src/app/components/validation-messages/validation-messages.component.ts","webpack://@newday/servicing-main/./src/app/directives/invalidInputFocus.directive.ts","webpack://@newday/servicing-main/./src/app/modules/components/tabs/tabs.module.ts","webpack://@newday/servicing-main/./src/app/services/strong-customer-authentication/non-SCA-store-staff-cards.service.ts","webpack://@newday/servicing-main/./src/app/components/upl-banner/upl-banner.component.html","webpack://@newday/servicing-main/./src/app/components/upl-banner/upl-banner.component.ts","webpack://@newday/servicing-main/./src/app/components/login/login.component.html","webpack://@newday/servicing-main/./src/app/components/login/login.component.ts","webpack://@newday/servicing-main/./src/app/components/login-sca/username/username.component.html","webpack://@newday/servicing-main/./src/app/components/login-sca/login-sca-enums.ts","webpack://@newday/servicing-main/./src/app/components/login-sca/username/username.component.ts","webpack://@newday/servicing-main/./src/app/components/login-sca/left-side-descriptions/left-side-descriptions.component.html","webpack://@newday/servicing-main/./src/app/components/login-sca/left-side-descriptions/left-side-descriptions.component.ts","webpack://@newday/servicing-main/./src/app/components/login-sca/call-loading-screen/call-loading-screen.component.ts","webpack://@newday/servicing-main/./src/app/components/login-sca/login-sca.component.html","webpack://@newday/servicing-main/./src/app/components/login-sca/login-sca.component.ts","webpack://@newday/servicing-main/./src/app/pages/login/login.component.html","webpack://@newday/servicing-main/./src/app/pages/login/login.component.ts","webpack://@newday/servicing-main/./src/app/modules/pages/login/login.routing.ts","webpack://@newday/servicing-main/./src/app/modules/pages/login/login.module.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { ShowSecretToggleComponent } from './show-secret-toggle.component';\n\n@Component({\n selector: 'show-password-toggle',\n templateUrl: './show-secret-toggle.component.html',\n})\nexport class ShowPasswordToggleComponent extends ShowSecretToggleComponent {\n constructor() {\n super();\n this.label = 'Show/hide password';\n this.iconClass = 'password-toggle';\n this.dataTestID = 'button-password-toggle';\n }\n}\n","\n {{ getLabel() }}\n {{ getLabel() }}\n\n","import { Component, Input } from '@angular/core';\nimport {\n SystemNotificationsService,\n ISystemNotification,\n} from './system-notifications.provider';\nimport { BrandService } from '../../services/brand.service';\nimport { UtilityService } from '../../services/utility.service';\nimport { ConfigService } from '../../services/configuration.service';\nimport { StringService } from '../../services/string.service';\n\nenum MessageType {\n ALERT = 'alert',\n INFORMATION = 'info',\n}\n\n@Component({\n selector: 'system-notifications',\n templateUrl: './system-notifications.component.html',\n})\nexport class SystemNotificationsComponent {\n @Input()\n set location(newLocation: string) {\n if (!newLocation) {\n return;\n }\n\n this._location = newLocation;\n this.setNotificationsForLocation(this._location);\n }\n\n notifications: ISystemNotification[];\n\n typeAlertMapping: { [key: string]: string } = {\n [MessageType.ALERT]: 'error',\n [MessageType.INFORMATION]: 'information',\n };\n\n private _location: string;\n private allNotifications: ISystemNotification[];\n private isMobile: boolean;\n\n constructor(\n private systemNotificationService: SystemNotificationsService,\n private brandService: BrandService,\n private utilityService: UtilityService,\n configService: ConfigService\n ) {\n this.isMobile = configService.Get('mobileView');\n this.loadNotifications();\n }\n\n private setNotificationsForLocation(location: string): void {\n if (!this.allNotifications || !location) {\n return;\n }\n\n this.notifications = this.allNotifications\n .filter((n) => n.location.includes(location))\n .map(this.processMessage.bind(this));\n }\n\n private processMessage(\n notification: ISystemNotification\n ): ISystemNotification {\n if (this.isMobile) {\n this.adjustMessageForMobile(notification);\n }\n\n this.fillBrandVariables(notification);\n this.createUniqueMessageName(notification);\n\n return notification;\n }\n\n private fillBrandVariables(\n notification: ISystemNotification\n ): ISystemNotification {\n notification.message = notification.message.replace(\n /\\[brand\\]/g,\n this.brandService.getBrand()\n );\n\n return notification;\n }\n\n private createUniqueMessageName(\n notification: ISystemNotification\n ): ISystemNotification {\n notification.uniqueName =\n notification.dismissType +\n SystemNotificationsService.COOKIE_PART +\n StringService.hashCode(notification.message);\n\n return notification;\n }\n\n private adjustMessageForMobile(\n notification: ISystemNotification\n ): ISystemNotification {\n notification.message = this.utilityService.stripHtmlTags(\n notification.message,\n 'a'\n );\n\n return notification;\n }\n\n private loadNotifications(): void {\n this.systemNotificationService\n .getSystemNotifications()\n .then((notifications) => {\n this.allNotifications = notifications;\n this.setNotificationsForLocation(this._location);\n });\n }\n}\n","
\n
\n
\n
\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CommonComponentsModule } from '../../modules/components/common/common.module';\nimport { SystemNotificationsService } from './system-notifications.provider';\nimport { SystemNotificationsComponent } from './system-notifications.component';\n\n@NgModule({\n declarations: [SystemNotificationsComponent],\n imports: [CommonModule, CommonComponentsModule],\n exports: [SystemNotificationsComponent],\n providers: [SystemNotificationsService],\n})\nexport class SystemNotificationsModule {}\n","import { Component, ElementRef, AfterViewInit } from '@angular/core';\nimport { ThreatMetrixService } from '../../services/threat-metrix.service';\n\n@Component({\n selector: '[data-component=threat-metrix]',\n templateUrl: './threat-metrix.component.html',\n})\nexport class ThreatMetrixComponent implements AfterViewInit {\n constructor(\n private elementRef: ElementRef,\n private threatMetrixService: ThreatMetrixService\n ) {}\n\n ngAfterViewInit() {\n this.insertScript();\n }\n\n private insertScript() {\n if (!this.threatMetrixService.enabled) return;\n\n const newScriptElement = document.createElement('script');\n newScriptElement.setAttribute('id', 'tmx');\n newScriptElement.setAttribute('src', this.createScriptSrc());\n newScriptElement.setAttribute('type', 'text/javascript');\n\n this.elementRef.nativeElement.appendChild(newScriptElement);\n }\n\n private createScriptSrc(): string {\n const sessionId = this.threatMetrixService.newSessionId();\n const orgId = this.threatMetrixService.orgId;\n const pageId = 'eServicing';\n return `https://h.online-metrix.net/fp/tags.js?org_id=${orgId}&session_id=${sessionId}&pageid=${pageId}&allow_reprofile=1`;\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { BrowserService } from '../../services/browser.service';\nimport { WindowRef } from '../../services/windowRef';\n\n@Component({\n selector: '[data-component=\"tooltip\"]',\n templateUrl: './tooltip.component.html',\n})\nexport class TooltipComponent implements OnInit, OnDestroy {\n @ViewChild('tooltip', { static: true }) tooltipElement: ElementRef;\n @Input() formInputName: string;\n @Input() text: string;\n @Input() label: string;\n @Input() helpIcon: boolean = false;\n @Output() onClick: EventEmitter = new EventEmitter();\n\n public visible: boolean = false;\n public positionX: string = 'center';\n public positionY: string = 'top';\n\n private ngUnsubscribe: Subject = new Subject();\n\n constructor(\n public browserService: BrowserService,\n private windowRef: WindowRef\n ) {}\n\n ngOnInit() {\n this.subscribeResizeCount();\n setTimeout(() => this.setPosition());\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getARIALabelText(): string {\n const text = 'Tooltip: ' + this.text;\n return this.formInputName ? `${this.formInputName} ${text}` : text;\n }\n\n public click(e: any): void {\n e.preventDefault();\n this.onClick.emit();\n\n if (this.browserService.isIOS()) {\n this.tooltipElement.nativeElement.focus();\n }\n }\n\n public show(): void {\n this.visible = true;\n }\n\n public hide(): void {\n this.visible = false;\n }\n\n private subscribeResizeCount(): void {\n this.browserService.resizeCount\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((viewport) => {\n this.setPosition();\n });\n }\n\n private setPosition(): void {\n const windowWidth = this.windowRef.windowWidth();\n if (windowWidth == 0) {\n this.positionX = 'center';\n return;\n }\n\n const left = this.tooltipElement.nativeElement.getBoundingClientRect().left;\n if (left > 0 && left < 90) {\n this.positionX = left < 40 ? 'right' : 'half-right';\n return;\n }\n\n if (left + 130 > windowWidth) {\n this.positionX = left + 80 > windowWidth ? 'left' : 'half-left';\n return;\n }\n\n this.positionX = 'center';\n }\n}\n","\n {{ label }}\n \n \n \n\n","\n {{ screenreaderErrorMessages }}\n

\n\n\n Error\n

Please note the following fields are required:

\n

\n {{ error }}\n

\n\n","import { Component, Input } from '@angular/core';\nimport { UtilityService } from '../../services/utility.service';\n\n@Component({\n selector: '[data-component=\"validation-messages\"]',\n templateUrl: './validation-messages.component.html',\n})\nexport class ValidationMessagesComponent {\n @Input() screenreaderErrorMessages: string = null;\n @Input() errors: Array = null;\n @Input() renderScreenreaderErrors: boolean = true;\n @Input() renderValidationSummary: boolean = true;\n\n constructor(public utilityService: UtilityService) {}\n\n public hasScreenreaderErrorMessages(): boolean {\n return (\n this.utilityService.isDefinedAndNotNull(this.screenreaderErrorMessages) &&\n this.screenreaderErrorMessages !== ''\n );\n }\n\n public hasErrors(): boolean {\n return (\n this.utilityService.isDefinedAndNotNull(this.errors) &&\n this.errors.length > 0\n );\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Directive({\n selector: '[invalidInputFocus]',\n})\nexport class InvalidInputFocusDirective {\n @Input()\n invalidInputFocus: FormGroup;\n\n constructor(private el: ElementRef) {}\n\n @HostListener('submit')\n focusOnFirstInvalidInput() {\n if (this.invalidInputFocus.invalid) {\n const invalidInput =\n this.el.nativeElement.querySelector('input.ng-invalid');\n\n if (invalidInput) {\n invalidInput.focus();\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// components\nimport { TabsComponent } from '../../../components/tabs/tabs.component';\n\n// directives\nimport { EqualHeightDirectiveModule } from '../../../modules/directives/equalHeightDirective/equalHeightDirective.module';\n\n@NgModule({\n declarations: [TabsComponent],\n imports: [CommonModule, EqualHeightDirectiveModule],\n exports: [TabsComponent],\n providers: [],\n})\nexport class TabsModule {}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class NonSCAStoreStaffCardsService {\n isNonScaLoginJourney: BehaviorSubject;\n username: BehaviorSubject;\n\n constructor() {\n this.isNonScaLoginJourney = new BehaviorSubject(false);\n this.username = new BehaviorSubject('');\n }\n\n notifyIsNonScaLoginJourneyObservers() {\n this.isNonScaLoginJourney.next(true);\n }\n\n setUsername(username: string) {\n this.username.next(username);\n }\n}\n","
\n
\n
\n
\n
{{ uplBanner.header }}
\n
{{ uplBanner.text }}
\n
\n
\n \n FIND OUT MORE\n \n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { ContentService } from '../../services/content.service';\nimport { WindowRef } from '../../services/windowRef';\nimport { BrandService } from '../../services/brand.service';\nimport {\n LoggedOutEntitlement,\n LoggedOutEntitlementsService,\n} from '../../services/logged-out-entitlements.service';\n\ninterface UplBannerDetails {\n url: string;\n text: string;\n header: string;\n}\n\n@Component({\n selector: 'upl-banner',\n templateUrl: './upl-banner.component.html',\n})\nexport class UplBannerComponent implements OnInit {\n constructor(\n private contentService: ContentService,\n private windowRef: WindowRef,\n private brandService: BrandService,\n private loggedOutEntitlementsService: LoggedOutEntitlementsService\n ) {}\n\n uplBannerEnabled: boolean = false;\n uplBanner: UplBannerDetails;\n brand: string;\n\n ngOnInit(): void {\n this.brand = this.brandService.getBrand();\n\n this.loggedOutEntitlementsService\n .hasEntitlement(LoggedOutEntitlement.uplBanner)\n .then((result) => (this.uplBannerEnabled = result));\n\n this.contentService.getContent().subscribe((result) => {\n if (!result) {\n return;\n }\n\n this.uplBanner = result.uplBanner;\n });\n }\n\n goToLink(url: string): void {\n this.windowRef.openNewWindow(url);\n }\n}\n","\n\nHow you log in and manage your account is changing

To keep your account secure we’ll be making some changes to the way you log in and manage your account. These changes mean you may be asked to enter a one-time passcode when you log in or use certain features within Online Account Manager.

'\n }\"\n>\n\n
\n
\n
\n

Online Account Manager

\n

Enter your Passcode

\n

\n Manage your account with the Online Account Manager any time, any place.\n

\n
\n

\n Not yet registered for Online Account Manager?\n {{ registerLink.text }}\n

\n
\n
\n \n
\n\n \n
\n \n {{ forgotUsernameLink.text }}\n \n \n
\n \n
\n\n
\n \n Username is required\n \n
\n
\n\n
\n \n {{ forgotPasswordLink.text }}\n \n \n
\n \n\n \n \n
\n\n
\n \n Password is required\n \n
\n
\n
\n\n
\n
\n \n {{ forgotPasscodeLink.text }}\n \n

Enter passcode

\n \n\n
\n \n Passcode is required\n \n \n Passcode is invalid\n \n
\n
\n
\n\n \n
\n
\n \n \n
\n
\n\n

\n Don't tick this box if you're using a public or shared device\n

\n
\n\n \n {{ credentialsMessage.message }}\n {{ credentialsMessage.linkText }}\n \n\n \n {{ credentialsMessage.message }}\n \n\n \n
\n \n {{ error.data }}\n {{ error.linkText }}\n \n\n \n \n \n\n \n {{ error.data }}\n \n
\n \n\n
\n We are currently experiencing some technical difficulties. We’re aware\n of the problem and we’re working hard to resolve it as soon as\n possible. Please try again later.\n
\n\n \n Log in\n \n \n \n \n\n \n
\n

Mobile App

\n
\n
\n

\n For the best experience and access to the latest features, download\n the {{ mobileAppName }} app today\n

\n
\n
\n \n \n \n \n \n
\n
\n \n\n\n\n","import {\n AfterContentChecked,\n Component,\n ViewChild,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { LinkItem } from '../../models/common';\nimport {\n AuthenticationService,\n Credentials,\n PasscodeChallenge,\n PasscodeChallengeResponse,\n} from '../../services/authentication.service';\nimport { PasscodeComponent } from '../../components/passcode/passcode.component';\nimport { BrandService } from '../../services/brand.service';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { NativeBridge } from '../../services/nativeBridge';\nimport { ErrorService } from '../../services/error.service';\nimport { BrandedRouter } from '../../services/brandedRouter';\nimport { InstrumentationService } from '../../services/instrumentation.service';\nimport { CookieService } from 'ngx-cookie-service';\nimport { WindowRef } from '../../services/windowRef';\nimport { takeUntil } from 'rxjs/operators';\nimport { ContentService } from '../../services/content.service';\nimport { ThreatMetrixService } from '../../services/threat-metrix.service';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { NonSCAStoreStaffCardsService } from '../../services/strong-customer-authentication/non-SCA-store-staff-cards.service';\nimport { Subject, Observable } from 'rxjs';\nimport { LoginService } from '../../services/login.service';\nimport {\n LoggedOutEntitlement,\n LoggedOutEntitlementsService,\n} from '../../services/logged-out-entitlements.service';\nimport {\n CookieConsentService,\n CookiePreferences,\n} from '../../services/cookie-consent.service';\nimport { ClientVariableService } from '../../services/clientConfigVariable.service';\nimport {\n gtmEventTracking,\n GTMTracking,\n} from '../../enums/google-analytics-tracking';\n\nclass CredentialsMessage {\n message: string;\n url: string;\n srMessage: string;\n detail: string;\n linkText: string;\n}\n\n@Component({\n selector: '[data-component=login]',\n templateUrl: './login.component.html',\n})\nexport class LoginComponent implements OnInit, AfterContentChecked {\n @Input() loginReady: boolean;\n @ViewChild('passcodeComponent') passcodeComponent: PasscodeComponent;\n\n public buildRoot = this.clientVariableService.getBuildRoot();\n private returnUrl: string = 'account-summary?tailored=true';\n private challengeVerificationToken: string;\n private ngUnsubscribe: Subject = new Subject();\n\n public errors: Array = [];\n public errorMessages: any = {\n username: 'Username is required.',\n password: 'Password is required.',\n passcode: 'Passcode is required.',\n };\n public credentialsMessage: CredentialsMessage = {\n url: '',\n message: '',\n srMessage: '',\n detail: '',\n linkText: '',\n };\n public passcodeInputs: any[] = [];\n public usernameInputHidden: boolean = false;\n public passwordInputHidden: boolean = true;\n public loginForm: FormGroup;\n public credentialsDirty: boolean = false;\n public step: number = 1;\n public forgotUsernameLink: LinkItem;\n public forgotPasswordLink: LinkItem;\n public forgotPasscodeLink: LinkItem;\n public registerLink: LinkItem;\n public formDirty: boolean = false;\n public isSubmitting: boolean = false;\n public screenreaderErrorMessages: string = '';\n public mobileLinksEnabled: boolean;\n public hasSCAEnabled: boolean;\n public brand: string;\n public googlePlayLink: string;\n public appStoreLink: string;\n public mobileAppName: string;\n public loginError = false;\n public psd2LoginBannerEnabled = false;\n public cookiePreferences: Observable;\n public GTMTracking = GTMTracking;\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private authenticationService: AuthenticationService,\n private brandedRouter: BrandedRouter,\n private brandService: BrandService, // todo using brand service and brand router\n private cookieService: CookieService,\n private elementRef: ElementRef,\n public errorService: ErrorService,\n private instrumentation: InstrumentationService,\n private nativeBridge: NativeBridge,\n private analyticsService: AnalyticsService,\n private windowRef: WindowRef,\n private contentService: ContentService,\n private nonSCAStoreStaffCardsService: NonSCAStoreStaffCardsService,\n private threatMetrixService: ThreatMetrixService,\n private loginService: LoginService,\n private loggedOutEntitlementsService: LoggedOutEntitlementsService,\n public cookieConsentService: CookieConsentService,\n private clientVariableService: ClientVariableService\n ) {\n this.brand = this.brandService.getBrand();\n this.checkEntitlements();\n this.loadContent();\n\n instrumentation.mark('LoginComponent constructor start');\n\n this.errorService.clear();\n\n this.initLinks();\n\n instrumentation.mark('LoginComponent constructor end');\n instrumentation.measure(\n 'LoginComponent constructor',\n 'LoginComponent constructor start',\n 'LoginComponent constructor end'\n );\n }\n\n ngOnInit() {\n // If a user clicks login on recover username, or ends up at login by some other mechanism\n // let the native app know so it can remove the webview\n this.nativeBridge.notifyTaskCompleted();\n\n const event = gtmEventTracking[GTMTracking.LoginVisitPage];\n this.analyticsService.trackPageView(\n `${this.brand}/${event.url}`,\n event.title\n );\n if (this.step == 1) {\n this.analyticsService.trackPageView(\n this.brand + '/login/step1',\n 'Login Step One'\n );\n }\n\n this.loginReady = true;\n this.activatedRoute.queryParams.subscribe((params: Params) => {\n if (\n typeof params['ReturnUrl'] !== 'undefined' &&\n params['ReturnUrl'].length > 0\n )\n this.returnUrl = params['ReturnUrl'];\n });\n\n this.cookiePreferences = this.cookieConsentService.cookiePreferences;\n\n this.initForm();\n }\n\n ngAfterContentChecked() {\n this.screenreaderErrorMessages = this.getScreenreaderErrorMessages();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public trackGAEvents(action: GTMTracking) {\n this.analyticsService.trackCtaActions(action);\n }\n\n public changePasswordInputVisibility(isHidden: boolean): void {\n this.trackGAEvents(GTMTracking.LoginRevelPassword);\n this.passwordInputHidden = isHidden;\n }\n\n public getCredentialsFormGroup() {\n return this.loginForm.controls['userCredentials'] as FormGroup;\n }\n\n public credentialFieldHasError(field: any) {\n const credentials = this.getCredentialsFormGroup();\n return (\n !credentials.controls[field].valid &&\n (this.credentialsDirty ||\n credentials.controls[field].dirty ||\n credentials.controls[field].touched)\n );\n }\n\n public credentialFieldHasRequiredError(field: any) {\n return this.getCredentialsFormGroup().controls[field].errors?.required;\n }\n\n public submitLogin() {\n this.formDirty = true;\n\n if (this.step == 1) this.submitStepOne();\n else if (this.step == 2) this.submitStepTwo();\n }\n\n private async checkEntitlements() {\n this.mobileLinksEnabled =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.mobileAppBanner\n );\n this.hasSCAEnabled = await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.scaLogin\n );\n this.psd2LoginBannerEnabled =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.psd2LoginBanner\n );\n }\n\n private loadContent(): void {\n this.contentService.getContent().subscribe((result) => {\n if (result === null) {\n return;\n }\n\n this.googlePlayLink = result.global.googlePlayStoreAppLink;\n this.appStoreLink = result.global.itunesStoreAppLink;\n this.mobileAppName =\n result.apps && result.apps.name ? result.apps.name : this.brand;\n });\n }\n\n private getScreenreaderErrorMessages(): string {\n this.processErrorMessages();\n if (\n !(\n this.getCredentialsFormGroup().dirty ||\n this.getCredentialsFormGroup().touched ||\n this.formDirty\n ) &&\n !this.getCredentialsFormGroup().valid\n ) {\n return null;\n }\n\n return this.errorService.getScreenreaderErrors(this.errors);\n }\n\n private async initForm() {\n const username: string = await this.getUsername();\n\n this.loginForm = new FormGroup({\n userCredentials: new FormGroup({\n userName: new FormControl(username, [Validators.required]),\n password: new FormControl('', [Validators.required]),\n }),\n rememberMe: new FormControl(false),\n passcode: new FormControl(),\n });\n }\n\n private getUsername(): Promise {\n return new Promise((resolve) => {\n let username: string;\n try {\n username = this.cookieService.get(this.brand + 'userName');\n } catch (exception) {\n username = '';\n }\n if (username) {\n resolve(username);\n } else {\n this.nonSCAStoreStaffCardsService.username\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((u) => resolve(u));\n }\n });\n }\n\n private initLinks() {\n this.forgotUsernameLink = new LinkItem(\n 'Forgotten username?',\n this.brandedRouter.getBrandedLink('/recovery/retrieve-username'),\n false,\n 'btnRetrieveUsername'\n );\n this.forgotPasswordLink = new LinkItem(\n 'Forgotten password?',\n this.brandedRouter.getBrandedLink('/recovery/reset-password'),\n false,\n 'btnResetPassword'\n );\n this.forgotPasscodeLink = new LinkItem(\n 'Forgotten passcode?',\n this.brandedRouter.getBrandedLink('/recovery/reset-passcode'),\n false,\n 'btnResetPasscode'\n );\n\n this.registerLink = new LinkItem(\n 'Sign up here',\n this.brandedRouter.getBrandedLink('/register'),\n false\n );\n }\n\n private gotoStep2() {\n const event = gtmEventTracking[GTMTracking.LoginVisitPagePasscode];\n this.analyticsService.trackPageView(\n `${this.brand}/${event.url}`,\n event.title\n );\n this.analyticsService.trackPageView(\n this.brand + '/login/step2',\n 'Login Step Two'\n );\n\n this.credentialsMessage = {\n url: '',\n message: '',\n srMessage: '',\n detail: '',\n linkText: '',\n };\n\n this.formDirty = false;\n this.step = 2;\n this.scrollToTop();\n this.setPasscodeFocus(50);\n }\n\n private scrollToTop() {\n const yPos = this.elementRef.nativeElement.offsetTop;\n this.windowRef.scrollTo(0, yPos);\n }\n\n private setPasscodeFocus(delay: number) {\n const that = this;\n setTimeout(() => {\n if (that.passcodeComponent == null) return;\n\n that.passcodeComponent.setFocus();\n }, delay);\n }\n\n private submitStepOne() {\n const that = this;\n\n this.loginError = false;\n\n this.credentialsDirty = true;\n if (this.credentialFieldHasRequiredError('password')) {\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginPasswordRequirementError]\n );\n }\n if (this.credentialFieldHasRequiredError('userName')) {\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginUsernameRequirementError]\n );\n }\n if (!this.loginForm.controls['userCredentials'].valid) return;\n\n this.isSubmitting = true;\n\n // get data\n const data: Credentials = {\n username:\n this.getCredentialsFormGroup().controls['userName'].value.trim(),\n password:\n this.getCredentialsFormGroup().controls['password'].value.trim(),\n tmxSessionId: this.threatMetrixService.getSessionId('Login'),\n };\n\n this.saveRememberMeCookie(data.username);\n\n this.errorService.clear();\n this.errors = [];\n\n this.authenticationService.getPasscodeChallenge(data).then(\n (result) => {\n that.challengeVerificationToken = result.challengeVerificationToken;\n that.passcodeInputs = that.getPasscodeArray(result.challenge);\n that.isSubmitting = false;\n this.loginError = false;\n\n that.gotoStep2();\n },\n (error) => {\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginUsernamePasswordError]\n );\n this.errorService.processError(error);\n that.getCredentialsFormGroup().controls['password'].reset();\n that.getCredentialsFormGroup().controls['password'].markAsPristine();\n that.getCredentialsFormGroup().controls['password'].markAsUntouched();\n that.credentialsDirty = false;\n that.isSubmitting = false;\n }\n );\n }\n\n private saveRememberMeCookie(username: string) {\n if (!this.loginForm.controls['rememberMe'].value) {\n return;\n }\n\n this.cookieService.set(\n this.brand + 'userName',\n username,\n new Date('2099-01-01T00:00:00Z'),\n '/',\n undefined,\n true\n );\n }\n\n private getPasscodeArray(challenge: PasscodeChallenge): Array {\n const arr = [];\n if (challenge.passcodeLength == null || challenge.passcodeLength == 0) {\n challenge.passcodeLength = 6;\n }\n\n // add blanks\n for (let i = 0; i < challenge.passcodeLength; i++) {\n arr.push(false);\n }\n\n // add inputs\n challenge.passcodeDigits.forEach((digit) => {\n arr[digit.position] = true;\n });\n\n return arr;\n }\n\n private submitStepTwo() {\n const that = this;\n\n this.loginError = false;\n this.passcodeComponent.submit();\n\n if (this.loginForm.invalid) {\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginRequiredPasscodeError]\n );\n return;\n }\n\n this.isSubmitting = true;\n\n const response: PasscodeChallengeResponse = {\n passcodeDigits: this.loginForm.controls['passcode'].value,\n challengeVerificationToken: this.challengeVerificationToken,\n username:\n this.getCredentialsFormGroup().controls['userName'].value.trim(),\n password:\n this.getCredentialsFormGroup().controls['password'].value.trim(),\n rememberMe: this.loginForm.controls['rememberMe'].value,\n tmxSessionId: this.threatMetrixService.getSessionId('Login'),\n };\n\n if (this.loginForm.controls['rememberMe'].value) {\n this.cookieService.set(\n this.brand + 'userName',\n response.username,\n new Date('2099-01-01T00:00:00Z'),\n '/',\n undefined,\n true\n );\n }\n\n this.authenticationService.submitPasscodeChallenge(response).then(\n (result) => {\n if (result.success) {\n this.loginService.loginRedirect(this.returnUrl);\n }\n },\n (error: HttpErrorResponse) => {\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginValidPasscodeError]\n );\n that.passcodeComponent.reset();\n that.isSubmitting = false;\n this.errorService.processError(error);\n if (error.status === 500) {\n this.loginError = true;\n }\n }\n );\n }\n\n private processErrorMessages() {\n const errors = [];\n\n if (this.credentialsMessage.srMessage) {\n errors.push(this.credentialsMessage.srMessage);\n }\n\n if (this.credentialFieldHasError('userName')) {\n errors.push(this.errorMessages.username);\n }\n\n if (this.credentialFieldHasError('password')) {\n errors.push(this.errorMessages.password);\n }\n\n if (this.passcodeComponent != null && !this.passcodeComponent.valid) {\n errors.push(this.errorMessages.passcode);\n }\n\n this.errors = errors;\n }\n}\n","
\n
\n \n {{ forgotUsernameLink.text }}\n \n \n
\n \n
\n
\n \n Username is required\n \n
\n
\n
\n
\n
\n \n \n
\n
\n

\n Don't tick this box if you're using a public or shared device\n

\n
\n
\n","export enum LoginJourney {\n Username = 'Username',\n Bound = 'Bound',\n Unbound = 'Unbound',\n OtpDeliverySelection = 'OtpDeliverySelection',\n OtpByPhone = 'OtpByPhone',\n OtpInput = 'OtpInput',\n UnboundInvalidCredentials = 'UnboundInvalidCredentials',\n UnableToSendOtp = 'UnableToSendOtp',\n}\n","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { FormGroup, FormControl, AbstractControl } from '@angular/forms';\nimport { CookieService } from 'ngx-cookie-service';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport { DeviceBindingService } from '../../../services/device-binding.service';\nimport { LinkItem } from '../../../models/common';\nimport {\n AuthenticationService,\n UsernameBindingCredentials,\n PasscodeChallengeContainer,\n} from '../../../services/authentication.service';\nimport { ErrorService } from '../../../services/error.service';\nimport { BrandService } from '../../../services/brand.service';\nimport { ThreatMetrixService } from '../../../services/threat-metrix.service';\nimport { BrandedRouter } from '../../../services/brandedRouter';\nimport { NonSCAStoreStaffCardsService } from '../../../services/strong-customer-authentication/non-SCA-store-staff-cards.service';\nimport { takeUntil } from 'rxjs/operators';\nimport { UsernameService } from './username.service';\nimport {\n CookieConsentService,\n CookiePreferences,\n} from '../../../services/cookie-consent.service';\nimport { FeatureFlagsService } from '../../../services/feature-flags.service';\nimport { Feature } from '../../../enums/features';\nimport { LivePersonService } from '../../../services/live-person.service';\n\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport {\n gtmEventTracking,\n GTMTracking,\n} from '../../../enums/google-analytics-tracking';\n\n@Component({\n selector: 'sca-username',\n templateUrl: './username.component.html',\n})\nexport class UsernameComponent implements OnInit, OnDestroy {\n private fingerprintedSubject = new BehaviorSubject(null);\n private ngUnsubscribe: Subject = new Subject();\n @Input() usernameGroup: FormGroup;\n\n public GTMTracking = GTMTracking;\n usernameInputHidden: boolean = false;\n brand: string;\n forgotUsernameLink: LinkItem;\n forgotPasscodeLink: LinkItem;\n registerLink: LinkItem;\n errors: Array = [];\n userName: string;\n userNameControl: AbstractControl;\n cookiePreferences: Observable;\n displayUserNameTooltip: boolean;\n\n @Output() isSubmittingChange = new EventEmitter();\n @Output() usernameResponseChange =\n new EventEmitter();\n @Output() userNameChange = new EventEmitter();\n\n constructor(\n private analyticsService: AnalyticsService,\n private authenticationService: AuthenticationService,\n private cookieService: CookieService,\n private brandService: BrandService,\n private threatMetrixService: ThreatMetrixService,\n private brandedRouter: BrandedRouter,\n private nonSCAStoreStaffCardsService: NonSCAStoreStaffCardsService,\n private errorService: ErrorService,\n private deviceBindingService: DeviceBindingService,\n private usernameService: UsernameService,\n private cookieConsentService: CookieConsentService,\n private featureFlagsService: FeatureFlagsService,\n private livePersonService: LivePersonService\n ) {\n this.brand = this.brandService.getBrand();\n this.featureFlagsService\n .hasFeatureFlag(\n Feature.DisplayUserNameTooltip,\n this.brandService.getBrand()\n )\n .then((result) => (this.displayUserNameTooltip = result));\n\n this.deviceBindingService.getDeviceFingerprint((deviceInfo) =>\n this.fingerprintedSubject.next(deviceInfo)\n );\n }\n\n ngOnInit(): void {\n this.initForm();\n this.initLinks();\n this.userNameControl = this.usernameGroup.controls['userName'];\n\n this.cookiePreferences = this.cookieConsentService.cookiePreferences;\n this.cookieConsentService.checkCookieSettings();\n this.livePersonService.clearLivePersonErrorTracking();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n submit(): void {\n if (this.userNameControl.invalid) {\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginUsernameRequirementError]\n );\n return;\n }\n\n this.isSubmittingChange.emit(true);\n\n const username = this.userNameControl.value.trim();\n this.usernameService.passUsername(username);\n this.saveRememberMeCookie(username);\n this.fingerprintedSubject\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((deviceInfo) => {\n if (deviceInfo) this.submitUsernameWithDeviceInfo(deviceInfo, username);\n });\n }\n\n private submitUsernameWithDeviceInfo(deviceInfo: string, username: string) {\n this.errorService.clear();\n\n const credentials: UsernameBindingCredentials = {\n username: username,\n deviceInfo: deviceInfo,\n tmxSessionId: this.threatMetrixService.getSessionId('Login'),\n };\n\n this.authenticationService.getPasscodeBindingChallenge(credentials).then(\n (result: PasscodeChallengeContainer) => {\n if (result.storeOrStaffProduct) {\n this.nonSCAStoreStaffCardsService.notifyIsNonScaLoginJourneyObservers();\n this.nonSCAStoreStaffCardsService.setUsername(username);\n } else {\n this.usernameResponseChange.emit(result);\n this.userNameChange.emit(username);\n this.isSubmittingChange.emit(false);\n }\n },\n (error) => {\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginUsernameValidError]\n );\n this.errorService.processError(error);\n this.isSubmittingChange.emit(false);\n }\n );\n }\n\n fieldHasRequiredError() {\n return (\n this.userNameControl.invalid &&\n (this.userNameControl.dirty || this.userNameControl.touched) &&\n this.userNameControl.invalid\n );\n }\n\n fieldHasError() {\n return (\n this.userNameControl.invalid &&\n (this.userNameControl.dirty || this.userNameControl.touched)\n );\n }\n\n trackCtaActions(event: GTMTracking) {\n this.analyticsService.trackCtaActions(event);\n }\n\n private saveRememberMeCookie(username: string) {\n if (!this.usernameGroup.controls['rememberMe'].value) {\n return;\n }\n this.cookieService.set(\n this.brand + 'userName',\n username,\n new Date('2099-01-01T00:00:00Z'),\n '/',\n undefined,\n true\n );\n }\n\n private initForm() {\n let username: string;\n try {\n username = this.cookieService.get(this.brand + 'userName');\n } catch (exception) {\n username = '';\n }\n\n this.usernameGroup.controls['userName'].setValue(username);\n }\n\n private initLinks() {\n this.forgotUsernameLink = new LinkItem(\n 'Forgotten username?',\n this.brandedRouter.getBrandedLink('/recovery/retrieve-username'),\n false,\n 'btnRetrieveUsername'\n );\n\n this.registerLink = new LinkItem(\n 'Sign up here',\n this.brandedRouter.getBrandedLink('/register'),\n false\n );\n }\n}\n","
\n

\n {{ headerName }}\n Enter your Passcode\n Enter Passcode\n One-time passcode\n Enter code\n

\n

\n Please enter the requested digits from your passcode log in\n For security reasons, we'll ask you to enter a 6 digit one-time passcode.\n Please select how you would like to receive it.\n \n Please enter the 6 digit one-time passcode sent to ******{{\n selectedOTPChannel === OtpChannel.Call\n ? homeNumberEnding\n : mobileNumberEnding\n }}\n

\n

{{ bodyContent }}

\n
\n

\n Not yet registered for Online Account Manager?\n \n {{ registerLink.text }}\n \n

\n
\n","import { Component, Input } from '@angular/core';\nimport { LoginJourney } from '../login-sca-enums';\nimport { OtpChannel } from '../../../services/strong-customer-authentication/model';\nimport {\n LoggedOutEntitlement,\n LoggedOutEntitlementsService,\n} from '../../../services/logged-out-entitlements.service';\nimport { LinkItem } from '../../../models/common';\nimport { BrandService } from '../../../services/brand.service';\nimport { ContentService } from '../../../services/content.service';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { GTMTracking } from '../../../enums/google-analytics-tracking';\n\n@Component({\n selector: 'left-side-descriptions',\n templateUrl: './left-side-descriptions.component.html',\n})\nexport class LeftSideDescriptions {\n @Input() step: LoginJourney;\n @Input() registerLink: LinkItem;\n @Input() mobileNumberEnding: string;\n @Input() homeNumberEnding: string;\n @Input() selectedOTPChannel: OtpChannel;\n LoginJourney: typeof LoginJourney = LoginJourney;\n OtpChannel: typeof OtpChannel = OtpChannel;\n registrationAllowed: boolean;\n headerName: string;\n bodyContent: string;\n private isOwnBrand: boolean;\n private brand: string;\n\n constructor(\n private analyticsService: AnalyticsService,\n private readonly loggedOutEntitlementsService: LoggedOutEntitlementsService,\n private readonly brandService: BrandService,\n private readonly contentService: ContentService\n ) {}\n\n async ngOnInit() {\n this.registrationAllowed =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.registrationPages\n );\n this.loadContent();\n }\n\n private async loadContent() {\n await this.checkBrand();\n\n if (this.isOwnBrand) {\n this.headerName = 'Online Account Manager';\n this.bodyContent =\n 'Manage your account with the Online Account Manager any time, any place.';\n } else if (this.brand === 'Amazon') {\n this.headerName = 'Amazon Mastercard Online Account Manager';\n this.bodyContent =\n 'Manage your account with the Amazon Mastercard online account manager - anytime, any place.';\n } else {\n this.headerName = `${this.brand} Online Account Manager`;\n this.bodyContent = `Manage your account with the ${this.brand} online account manager - anytime, any place.`;\n }\n }\n\n private async checkBrand() {\n const content = await this.contentService.getData();\n this.brand = content.global.brandName;\n this.isOwnBrand = this.brandService.isOwnBrand(\n this.brandService.getBrand()\n );\n }\n\n onClickRegisterLink() {\n this.analyticsService.trackCtaActions(GTMTracking.LoginSignUpHereClick);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'call-loading-screen',\n template: `\n

We're calling you

\n

\n We will now call ********{{ homeNumberEnding }}. Please get ready to make\n a note of the 6 digit OTP.\n

\n
\n `,\n})\nexport class CallLoadingScreenComponent {\n @Input() homeNumberEnding: string;\n}\n","\n\nHow you log in and manage your account is changing

To keep your account secure we’ll be making some changes to the way you log in and manage your account. These changes mean you may be asked to enter a one-time passcode when you log in or use certain features within Online Account Manager.

'\n }\"\n>\n\n\n\n\n
\n
\n\n
\n \n \n\n \n Welcome, {{ userName }} (not you?)\n \n
\n\n
\n \n
\n\n
\n \n \n
\n\n
\n
\n \n {{ forgotPasscodeLink.text }}\n \n

Enter passcode

\n \n\n
\n \n Passcode is required\n \n \n Passcode is invalid\n \n
\n
\n
\n\n
\n
\n \n {{ forgotPasscodeLink.text }}\n \n

6 digit passcode

\n \n\n
\n \n Passcode is required\n \n \n Passcode is invalid\n \n
\n \n
\n
\n\n \n
\n
\n \n

We will text the OTP to you.

\n
\n \n
\n \n \n
\n \n
\n
\n
\n \n

\n We will ring your landline and read the OTP to you. This is an\n automated call.\n

\n
\n \n
\n \n \n
\n \n
\n \n\n
\n
\n
\n \n \n
\n

\n You have reached your maximum resend limit. Please\n contact us\n

\n
\n\n
\n \n
\n \n \n
\n
\n
\n \n {{ credentialsMessage.message }}\n {{ credentialsMessage.linkText }}\n \n\n \n {{ credentialsMessage.message }}\n \n\n
\n
\n \n \n {{ error.data }}\n {{ error.linkText }}\n \n\n \n \n \n or click the chat icon to speak to one of the team.\n \n
\n \n {{ error.data }}\n \n
\n \n\n \n {{ getTextForSubmitButton() }}\n \n\n \n \n Need help?\n \n \n\n
\n
\n \n \n
\n\n \n
\n If we have the incorrect number(s) for you, please contact us\n customer services\n to update your personal details.\n
\n \n \n \n\n \n

Something has been entered incorrectly

\n

\n We can tell you've entered a credential wrong. Please go back and review\n the details you have provided.\n

\n
\n {{ alertMessage }}\n
\n \n Review Details\n \n \n \n\n
\n\n
\n \n
\n\n \n
\n

Mobile App

\n
\n \n\n\n\n
\n
\n \n
\n\n\n","import {\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n OnDestroy,\n} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { LinkItem } from '../../models/common';\nimport {\n AuthenticationService,\n IRequestOTP,\n OtpAuthRequest,\n PasscodeAuthRequest,\n PasscodeChallenge,\n PasscodeChallengeContainer,\n PasscodeOtpAuthRequest,\n SendOtpResponse,\n SignInOtpResponse,\n SignInResponse,\n SignInUnboundResponse,\n} from '../../services/authentication.service';\nimport { PasscodeComponent } from '../passcode/passcode.component';\nimport { OtpInputComponent } from '../form/strong-customer-authentication/otp-input/otp-input.component';\nimport { BrandService } from '../../services/brand.service';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { NativeBridge } from '../../services/nativeBridge';\nimport { ErrorService } from '../../services/error.service';\nimport { BrandedRouter } from '../../services/brandedRouter';\nimport { InstrumentationService } from '../../services/instrumentation.service';\nimport { UsernameComponent } from './username/username.component';\nimport { WindowRef } from '../../services/windowRef';\nimport { ContentService } from '../../services/content.service';\nimport { ThreatMetrixService } from '../../services/threat-metrix.service';\nimport {\n AuthenticationLevel,\n IOTPRequestBuilder,\n OtpChannel,\n} from '../../services/strong-customer-authentication/model';\nimport { CredentialsMessage } from './CredentialsMessage';\nimport { LoginService } from '../../services/login.service';\nimport {\n LoggedOutEntitlement,\n LoggedOutEntitlementsService,\n} from '../../services/logged-out-entitlements.service';\nimport { AppType } from '../../services/compatibility.service';\nimport { LivePersonService } from '../../services/live-person.service';\nimport {\n LivePersonErrors,\n livePersonErrorDictionary,\n} from '../../enums/liveperson-errors';\nimport { ClientVariableService } from '../../services/clientConfigVariable.service';\nimport {\n gtmEventTracking,\n GTMTracking,\n} from '../../enums/google-analytics-tracking';\n\nexport enum LoginJourney {\n Username = 'Username',\n Bound = 'Bound',\n Unbound = 'Unbound',\n OtpDeliverySelection = 'OtpDeliverySelection',\n OtpByPhone = 'OtpByPhone',\n OtpInput = 'OtpInput',\n UnboundInvalidCredentials = 'UnboundInvalidCredentials',\n UnableToSendOtp = 'UnableToSendOtp',\n}\n\n@Component({\n selector: '[data-component=login-sca]',\n templateUrl: './login-sca.component.html',\n})\nexport class LoginSCAComponent implements OnInit, OnDestroy {\n @Input() loginReady: boolean;\n LoginJourney: typeof LoginJourney = LoginJourney;\n @ViewChild('usernameComponent') usernameComponent: UsernameComponent;\n otpChannel: typeof OtpChannel = OtpChannel;\n @ViewChild('passcodeComponent') passcodeComponent: PasscodeComponent;\n @ViewChild('otpInputComponent') otpInputComponent: OtpInputComponent;\n private returnUrl: string = 'account-summary?tailored=true';\n private challengeVerificationToken: string;\n private sessionData: string;\n private tmxSessionId: string;\n private userName: string;\n public alertMessage: string = null;\n public unauthenticatedChatMessage: string = '';\n public resendErrorMessage: boolean;\n public errors: Array = [];\n public errorMessages: any = {\n username: 'Username is required.',\n passcode: 'Passcode is required.',\n otp: 'Otp is required.',\n };\n public credentialsMessage: CredentialsMessage = {\n url: '',\n message: '',\n srMessage: '',\n detail: '',\n linkText: '',\n };\n public GTMTracking = GTMTracking;\n public passcodeInputs: any[] = [];\n public otpInputHidden: boolean = false;\n public loginForm: FormGroup;\n public step: string = LoginJourney[LoginJourney.Username];\n public forgotUsernameLink: LinkItem;\n public forgotPasscodeLink: LinkItem;\n public registerLink: LinkItem;\n public formDirty: boolean = false;\n public isSubmitting: boolean = false;\n public isResendingOTP: boolean = false;\n public resendSuccessful: boolean;\n public resendMessage: string;\n public screenreaderErrorMessages: string = '';\n public mobileLinksEnabled: boolean;\n public brand: string;\n public googlePlayLink: string;\n public appStoreLink: string;\n public mobileAppName: string;\n public AppType = AppType;\n\n public contactUsLink: string;\n public mobileNumberEnding: string;\n public homeNumberEnding: string;\n public contactUsUrl: string;\n public notMyNumberDropdownOpen: boolean = false;\n public backToLoginLink: string;\n public loading: boolean = true;\n private otpOptions: string;\n public loginButtonSubmitted: boolean = false;\n public psd2LoginBannerEnabled = false;\n public loginVimeoLinkEnabled: boolean = false;\n public separatePasscodeValidation: boolean = false;\n public showHelpPopup: boolean = false;\n public isOwnBrand: boolean = false;\n public otpInputLabel: string = 'Please enter your 6 digit OTP ';\n public showLoginError: boolean = false;\n public buildRoot = this.clientVariableService.getBuildRoot();\n private timeoutId: number;\n private attemptsRemaining: number;\n\n constructor(\n private activatedRoute: ActivatedRoute,\n //TODO: Must be converted to private and tests updated\n public authenticationService: AuthenticationService,\n private brandedRouter: BrandedRouter,\n private brandService: BrandService, // todo using brand service and brand router\n private elementRef: ElementRef,\n public errorService: ErrorService,\n private nativeBridge: NativeBridge,\n private analyticsService: AnalyticsService,\n private windowRef: WindowRef,\n private contentService: ContentService,\n private threatMetrixService: ThreatMetrixService,\n private loginService: LoginService,\n private loggedOutEntitlementsService: LoggedOutEntitlementsService,\n private livePersonService: LivePersonService,\n private clientVariableService: ClientVariableService,\n instrumentation: InstrumentationService\n ) {\n this.brand = this.brandService.getBrand();\n this.isOwnBrand = this.brandService.isOwnBrand(this.brand);\n this.checkEntitlements();\n this.loadContent();\n this.contactUsLink = brandedRouter.getBrandedLink('help/contact-us');\n\n instrumentation.mark('LoginComponent constructor start');\n\n this.errorService.clear();\n this.initLinks();\n\n instrumentation.mark('LoginComponent constructor end');\n instrumentation.measure(\n 'LoginComponent constructor',\n 'LoginComponent constructor start',\n 'LoginComponent constructor end'\n );\n }\n\n ngOnInit() {\n // If a user clicks login on recover username, or ends up at login by some other mechanism\n // let the native app know so it can remove the webview\n this.nativeBridge.notifyTaskCompleted();\n this.analyticsService.trackPageView(\n `${this.brand}/${gtmEventTracking[GTMTracking.LoginVisitPage].url}`,\n gtmEventTracking[GTMTracking.LoginVisitPage].title\n );\n if (this.step === LoginJourney[LoginJourney.Username]) {\n this.gotoStepUsername();\n }\n\n this.loginReady = true;\n this.activatedRoute.queryParams.subscribe((params: Params) => {\n if (\n typeof params['ReturnUrl'] !== 'undefined' &&\n params['ReturnUrl'].length > 0\n )\n this.returnUrl = params['ReturnUrl'];\n });\n\n this.initForm();\n this.contactUsUrl = this.brandedRouter.getBrandedLink('help/contact-us');\n }\n\n ngOnDestroy(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n }\n\n trackCtaActions(event: GTMTracking) {\n this.analyticsService.trackCtaActions(event);\n }\n\n public fieldHasError(name: string) {\n const control = this.loginForm.controls[name];\n return control.invalid && (control.dirty || control.touched);\n }\n\n public fieldHasRequiredError(name: string) {\n const control = this.loginForm.controls[name];\n return (\n control.invalid &&\n (control.dirty || control.touched) &&\n control.errors.required\n );\n }\n\n public getTextForSubmitButton(): string {\n switch (this.step) {\n case LoginJourney[LoginJourney.Username]:\n return 'Next';\n case LoginJourney[LoginJourney.Bound]:\n case LoginJourney[LoginJourney.OtpInput]:\n return 'Log in';\n case LoginJourney[LoginJourney.Unbound]:\n return 'Continue';\n case LoginJourney[LoginJourney.OtpDeliverySelection]:\n return this.getSelectedOtpMethod() === OtpChannel.Text\n ? 'Send OTP'\n : 'Call Me';\n case LoginJourney[LoginJourney.UnableToSendOtp]:\n return 'Back';\n }\n }\n\n public submitLogin() {\n this.formDirty = true;\n switch (this.step) {\n case LoginJourney[LoginJourney.Username]:\n this.submitUsername();\n break;\n case LoginJourney[LoginJourney.Bound]:\n this.submitPasscodeAndBinding();\n break;\n case LoginJourney[LoginJourney.Unbound]:\n this.handleSubmitPasscodeUnbound();\n break;\n case LoginJourney[LoginJourney.OtpDeliverySelection]:\n this.resendErrorMessage = false;\n this.submitOtpDeliverySelection();\n break;\n case LoginJourney[LoginJourney.OtpInput]:\n this.handleSubmitOtp();\n break;\n case LoginJourney[LoginJourney.UnboundInvalidCredentials]:\n this.goToSubmitPasscodeAndBinding();\n break;\n case LoginJourney[LoginJourney.UnableToSendOtp]:\n this.goToStepUnableToSendOtp();\n break;\n }\n }\n\n public onIsSubmittingChange(submitting: boolean) {\n this.isSubmitting = submitting;\n }\n\n public onUsernameResponseChange(result: PasscodeChallengeContainer) {\n if (result.isAccountLocked) {\n this.brandedRouter.navigate('/error/account-locked');\n return;\n }\n\n this.challengeVerificationToken = result.challengeVerificationToken;\n this.passcodeInputs = this.getPasscodeArray(result.challenge);\n this.sessionData = result.sessionData;\n this.mobileNumberEnding = result.mobileNumberEnding;\n this.homeNumberEnding = result.homeNumberEnding;\n\n if (result.authLevel === AuthenticationLevel.PartialBound) {\n this.gotoStepBound();\n return;\n }\n\n if (!result.homeNumberEnding && !result.mobileNumberEnding) {\n this.gotoStepUnableToSendOtp();\n return;\n }\n\n this.gotoStepUnbound();\n }\n\n public onUserNameChange(username: string) {\n this.userName = username;\n }\n\n public async resendOTPClickHandler() {\n this.trackCtaActions(GTMTracking.LoginClickResentAgain);\n const request = this.buildOTPRequest({\n isResend: true,\n });\n\n this.resendSuccessful = false;\n this.isResendingOTP = true;\n await this.sendOTPRequest(request);\n this.isResendingOTP = false;\n }\n\n private async submitOtpDeliverySelection(): Promise {\n const request = this.buildOTPRequest({\n isResend: false,\n });\n\n this.isSubmitting = true;\n await this.sendOTPRequest(request);\n this.isSubmitting = false;\n }\n\n public async sendOTPRequest(dto: IRequestOTP): Promise {\n this.clearErrors();\n\n try {\n const res = await this.authenticationService.requestOTP(dto);\n this.sessionData = res.sessionData;\n this.handleOTPSubmissionResponse(dto, res);\n } catch (err) {\n this.errorService.processError(err);\n }\n }\n\n public onNotMyUsername(e: Event) {\n e.preventDefault();\n this.trackCtaActions(GTMTracking.LoginClickNotYou);\n this.initForm();\n this.gotoStepUsername();\n }\n\n public showPopup(e: Event) {\n e.preventDefault();\n this.showHelpPopup = true;\n }\n\n public hidePopup() {\n this.showHelpPopup = false;\n }\n\n private buildOTPRequest(args: IOTPRequestBuilder): IRequestOTP {\n const request: IRequestOTP = {\n userName: this.userName,\n sessionData: this.sessionData,\n channel: this.getSelectedOtpMethod(),\n isResend: args.isResend,\n };\n\n return request;\n }\n\n private handleOTPSubmissionResponse(\n request: IRequestOTP,\n response: SendOtpResponse\n ): void {\n if (response.canResend) {\n if (request.channel === OtpChannel.Call) {\n this.goToCallWaitingPage(request.isResend);\n } else {\n this.handleStepChange(LoginJourney.OtpInput);\n this.analyticsService.trackPageView(\n `${this.brand}/${\n gtmEventTracking[GTMTracking.LoginVisitPageOTPEntry].url\n }`,\n gtmEventTracking[GTMTracking.LoginVisitPageOTPEntry].title\n );\n if (request.isResend) {\n this.resendSuccessful = true;\n this.resendMessage = 'Your OTP has been resent';\n }\n }\n } else {\n this.resendErrorMessage = true;\n }\n }\n\n private clearErrors() {\n this.errorService.clear();\n this.errors = [];\n }\n\n private handleSubmitPasscodeUnbound(): void {\n this.passcodeComponent.submit();\n if (this.loginForm.controls['passcode'].invalid) return;\n\n if (this.separatePasscodeValidation) {\n this.submitPasscodeUnbound();\n } else {\n this.loadOtpPreference();\n this.handleStepChange(LoginJourney.OtpDeliverySelection);\n this.analyticsService.trackPageView(\n `${this.brand}/${gtmEventTracking[GTMTracking.LoginVisitPageOTP].url}`,\n gtmEventTracking[GTMTracking.LoginVisitPageOTP].title\n );\n this.windowRef.setFocusById('authcodeByText');\n }\n }\n\n private handleSubmitOtp(): void {\n if (this.separatePasscodeValidation) {\n this.submitOtp();\n } else {\n this.submitPasscodeAndOtp();\n }\n }\n\n private goToSubmitPasscodeAndBinding(): void {\n this.gotoStepUnbound();\n }\n\n private goToStepUnableToSendOtp(): void {\n this.gotoStepUsername();\n }\n\n private goToCallWaitingPage(isResend: boolean): void {\n this.handleStepChange(LoginJourney.OtpByPhone);\n this.timeoutId = setTimeout(\n (() => {\n this.handleStepChange(LoginJourney.OtpInput);\n this.analyticsService.trackPageView(\n `${this.brand}/${\n gtmEventTracking[GTMTracking.LoginVisitPageOTPEntry].url\n }`,\n gtmEventTracking[GTMTracking.LoginVisitPageOTPEntry].title\n );\n if (isResend) {\n this.resendSuccessful = true;\n this.resendMessage = \"We've just called you and provided a new code\";\n }\n }) as TimerHandler,\n 10000\n );\n }\n\n private async checkEntitlements() {\n this.mobileLinksEnabled =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.mobileAppBanner\n );\n this.psd2LoginBannerEnabled =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.psd2LoginBanner\n );\n this.separatePasscodeValidation =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.scaLoginSeparatePasscodeValidation\n );\n this.loginVimeoLinkEnabled =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.loginVimeoLink\n );\n }\n\n private loadContent(): void {\n this.contentService.getContent().subscribe((result) => {\n if (result === null) {\n return;\n }\n\n this.googlePlayLink = result.global.googlePlayStoreAppLink;\n this.appStoreLink = result.global.itunesStoreAppLink;\n this.mobileAppName =\n result.apps && result.apps.name ? result.apps.name : this.brand;\n });\n }\n\n private initForm() {\n this.loginForm = new FormGroup({\n usernameGroup: new FormGroup({\n userName: new FormControl([Validators.required]),\n rememberMe: new FormControl(false),\n }),\n passcode: new FormControl(),\n authCodePreference: new FormControl('', [Validators.required]),\n otp: new FormControl('', [Validators.required]),\n });\n }\n\n private initLinks() {\n this.forgotUsernameLink = new LinkItem(\n 'Forgotten username?',\n this.brandedRouter.getBrandedLink('/recovery/retrieve-username'),\n false,\n 'btnRetrieveUsername'\n );\n this.forgotPasscodeLink = new LinkItem(\n 'Forgotten passcode?',\n this.brandedRouter.getBrandedLink('/reset-passcode'),\n false,\n 'btnResetPasscode'\n );\n\n this.registerLink = new LinkItem(\n 'Sign up here',\n this.brandedRouter.getBrandedLink('/register'),\n false\n );\n }\n\n private gotoStepUsername() {\n this.analyticsService.trackPageView(\n `${this.brand}/login/step1`,\n 'Login Step One'\n );\n this.gotoStep(LoginJourney[LoginJourney.Username]);\n }\n\n private gotoStepBound() {\n this.analyticsService.trackPageView(\n `${this.brand}/login/step2`,\n 'Login Step Two'\n );\n this.gotoStep(LoginJourney[LoginJourney.Bound]);\n }\n\n private gotoStepUnbound() {\n this.analyticsService.trackPageView(\n `${this.brand}/login/step3`,\n 'Login Step Three'\n );\n const loginGAObject = gtmEventTracking[GTMTracking.LoginVisitPagePasscode];\n this.analyticsService.trackPageView(\n `${this.brand}/${loginGAObject.url}`,\n loginGAObject.title\n );\n this.gotoStep(LoginJourney[LoginJourney.Unbound]);\n }\n\n private gotoStepUnableToSendOtp() {\n this.analyticsService.trackPageView(\n `${this.brand}/login/step4`,\n 'Login Step Four'\n );\n this.gotoStep(LoginJourney[LoginJourney.UnableToSendOtp]);\n }\n\n private handleStepChange(step: LoginJourney) {\n this.analyticsService.trackPageView(\n `${this.brand}/login/step${step}`,\n `Login Step ${step}`\n );\n this.gotoStep(step);\n }\n\n private gotoStep(step: string): void {\n this.credentialsMessage = {\n url: '',\n message: '',\n srMessage: '',\n detail: '',\n linkText: '',\n };\n this.formDirty = false;\n this.step = step;\n this.scrollToTop();\n this.setPasscodeFocus(50);\n }\n\n private scrollToTop() {\n const yPos = this.elementRef.nativeElement.offsetTop;\n this.windowRef.scrollTo(0, yPos);\n }\n\n private setPasscodeFocus(delay: number) {\n this.timeoutId = setTimeout(\n (() => {\n if (this.passcodeComponent == null) return;\n\n this.passcodeComponent.setFocus();\n }) as TimerHandler,\n delay\n );\n }\n\n private submitUsername() {\n this.usernameComponent.submit();\n }\n\n private getPasscodeArray(challenge: PasscodeChallenge): Array {\n const arr = [];\n if (challenge.passcodeLength == null || challenge.passcodeLength == 0) {\n challenge.passcodeLength = 6;\n }\n\n // add blanks\n for (let i = 0; i < challenge.passcodeLength; i++) {\n arr.push(false);\n }\n\n // add inputs\n challenge.passcodeDigits.forEach((digit) => {\n arr[digit.position] = true;\n });\n\n return arr;\n }\n\n private getUnauthenticatedChatMessage(errorCode, errorMsg) {\n if (this.attemptsRemaining > 0 && this.attemptsRemaining <= 3) {\n this.livePersonService.sendLivePersonErrorTracking(errorCode, errorMsg);\n this.showLoginError = true;\n } else {\n this.showLoginError = false;\n }\n }\n\n private submitPasscodeAndBinding() {\n this.passcodeComponent.submit();\n\n if (this.loginForm.controls['passcode'].invalid) return;\n\n this.isSubmitting = true;\n\n const request: PasscodeAuthRequest = {\n username: this.userName,\n passcodeDigits: this.loginForm.controls['passcode'].value,\n challengeVerificationToken: this.challengeVerificationToken,\n tmxSessionId: this.threatMetrixService.getSessionId('Login'),\n };\n\n this.errorService.clear();\n this.errors = [];\n\n this.authenticationService.submitPasscodeBindingChallenge(request).then(\n (response: SignInResponse) => {\n const { attemptsRemaining, success } = response;\n this.attemptsRemaining = attemptsRemaining;\n\n // positive promise resolving doesn't mean that binding challenge was succesfull, we have to check 'success' flag for that\n if (success) {\n // Clears the LP tracking so the messaging button does not display\n this.livePersonService.clearLivePersonErrorTracking();\n this.livePersonService.closeChatWindow();\n this.loginService.loginRedirect(this.returnUrl);\n } else {\n const code = LivePersonErrors.PasscodeError;\n const { msg } = livePersonErrorDictionary[code];\n this.getUnauthenticatedChatMessage(code, msg);\n this.passcodeComponent.reset();\n this.isSubmitting = false;\n const attempts =\n this.attemptsRemaining === 1 ? 'attempt' : 'attempts';\n this.alertMessage = `You have entered invalid details. You have ${this.attemptsRemaining} login ${attempts} left.`;\n }\n },\n (error) => {\n this.passcodeComponent.reset();\n this.isSubmitting = false;\n this.alertMessage = null;\n this.errorService.processError(error);\n }\n );\n }\n\n private async submitPasscodeUnbound() {\n this.passcodeComponent.submit();\n\n if (this.loginForm.controls['passcode'].invalid) return;\n\n this.isSubmitting = true;\n\n const request: PasscodeAuthRequest = {\n username: this.userName,\n passcodeDigits: this.loginForm.controls['passcode'].value,\n challengeVerificationToken: this.challengeVerificationToken,\n tmxSessionId: this.threatMetrixService.getSessionId('Login'),\n };\n\n this.errorService.clear();\n this.errors = [];\n this.alertMessage = null;\n\n try {\n const response: SignInUnboundResponse =\n await this.authenticationService.submitPasscodeUnboundChallenge(\n request\n );\n const {\n attemptsRemaining,\n success,\n isAccountLocked,\n challengeVerificationToken,\n } = response;\n this.attemptsRemaining = attemptsRemaining;\n\n if (isAccountLocked) {\n await this.brandedRouter.navigate('/error/account-locked');\n return;\n }\n if (success) {\n // Clears the LP tracking so the messaging button does not display\n this.livePersonService.clearLivePersonErrorTracking();\n this.loadOtpPreference();\n this.handleStepChange(LoginJourney.OtpDeliverySelection);\n this.analyticsService.trackPageView(\n `${this.brand}/${\n gtmEventTracking[GTMTracking.LoginVisitPageOTP].url\n }`,\n gtmEventTracking[GTMTracking.LoginVisitPageOTP].title\n );\n this.challengeVerificationToken = challengeVerificationToken;\n this.isSubmitting = false;\n this.windowRef.setFocusById('authcodeByText');\n } else {\n const code = LivePersonErrors.PasscodeError;\n const { msg } = livePersonErrorDictionary[code];\n this.getUnauthenticatedChatMessage(code, msg);\n this.passcodeComponent.reset();\n this.isSubmitting = false;\n const attempts = this.attemptsRemaining === 1 ? 'attempt' : 'attempts';\n this.alertMessage = `

You have entered incorrect login details. Please review the details you have provided.

You have ${this.attemptsRemaining} login ${attempts} left.

`;\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginPasscodeError]\n );\n }\n } catch (error) {\n this.passcodeComponent.reset();\n this.isSubmitting = false;\n this.alertMessage = null;\n await this.errorService.processError(error);\n }\n }\n\n private async submitOtp() {\n this.loginButtonSubmitted = true;\n\n if (!this.otpInputComponent.isValid()) return;\n\n this.isSubmitting = true;\n\n const request: OtpAuthRequest = {\n username: this.userName,\n challengeVerificationToken: this.challengeVerificationToken,\n tmxSessionId: this.tmxSessionId,\n sessionData: this.sessionData,\n otp: this.otpInputComponent.submit(),\n channel:\n this.getSelectedOtpMethod() === OtpChannel.Text\n ? OtpChannel.Text\n : OtpChannel.Call,\n };\n\n this.errorService.clear();\n this.errors = [];\n this.alertMessage = null;\n\n try {\n const response: SignInOtpResponse =\n await this.authenticationService.submitOtpChallenge(request);\n const { attemptsRemaining, success, isAccountLocked } = response;\n this.attemptsRemaining = attemptsRemaining;\n\n if (isAccountLocked) {\n await this.brandedRouter.navigate('/error/account-locked');\n return;\n }\n if (success) {\n // Clears the LP tracking so the messaging button does not display\n this.livePersonService.clearLivePersonErrorTracking();\n this.livePersonService.closeChatWindow();\n await this.loginService.loginRedirect(this.returnUrl);\n } else {\n this.loginButtonSubmitted = false;\n this.isSubmitting = false;\n if (!success) {\n const code = LivePersonErrors.OTPError;\n const { msg } = livePersonErrorDictionary[code];\n this.getUnauthenticatedChatMessage(code, msg);\n const attempts =\n this.attemptsRemaining === 1 ? 'attempt' : 'attempts';\n this.alertMessage = `

You have entered incorrect login details. Please review the details you have provided.

You have ${this.attemptsRemaining} login ${attempts} left.

`;\n this.analyticsService.pushToDataLayer(\n gtmEventTracking[GTMTracking.LoginOTPError]\n );\n }\n }\n } catch (error) {\n this.otpInputComponent.reset();\n this.loginButtonSubmitted = false;\n this.isSubmitting = false;\n this.alertMessage = null;\n await this.errorService.processError(error);\n }\n }\n\n private submitPasscodeAndOtp() {\n this.loginButtonSubmitted = true;\n\n if (!this.otpInputComponent.isValid()) return;\n\n this.isSubmitting = true;\n\n const request: PasscodeOtpAuthRequest = {\n username: this.userName,\n passcodeDigits: this.loginForm.controls['passcode'].value,\n challengeVerificationToken: this.challengeVerificationToken,\n tmxSessionId: this.tmxSessionId,\n sessionData: this.sessionData,\n otp: this.otpInputComponent.submit(),\n channel:\n this.getSelectedOtpMethod() === OtpChannel.Text\n ? OtpChannel.Text\n : OtpChannel.Call,\n };\n\n this.errorService.clear();\n this.errors = [];\n\n this.authenticationService.submitPasscodeOtpChallenge(request).then(\n (response: SignInOtpResponse) => {\n if (response.isAccountLocked) {\n this.brandedRouter.navigate('/error/account-locked');\n return;\n }\n // positive promise resolving doesn't mean that binding challenge was succesfull, we have to check 'success' flag for that\n if (response.success) {\n // Clears the LP tracking so the messaging button does not display\n this.livePersonService.clearLivePersonErrorTracking();\n this.livePersonService.closeChatWindow();\n this.loginService.loginRedirect(this.returnUrl);\n } else {\n this.otpInputComponent.reset();\n this.loginButtonSubmitted = false;\n this.isSubmitting = false;\n if (!response.success) {\n const code = LivePersonErrors.PasscodeOTPError;\n const { msg } = livePersonErrorDictionary[code];\n this.getUnauthenticatedChatMessage(code, msg);\n const attempts =\n response.attemptsRemaining === 1 ? 'attempt' : 'attempts';\n this.alertMessage = `You have ${response.attemptsRemaining} login ${attempts} remaining.`;\n this.handleStepChange(LoginJourney.UnboundInvalidCredentials);\n }\n }\n },\n (error) => {\n this.otpInputComponent.reset();\n this.loginButtonSubmitted = false;\n this.isSubmitting = false;\n this.alertMessage = null;\n this.errorService.processError(error);\n }\n );\n }\n\n private loadOtpPreference(): void {\n if (this.mobileNumberEnding) {\n this.otpOptions = OtpChannel[OtpChannel.Text];\n } else {\n this.otpOptions = OtpChannel[OtpChannel.Call];\n }\n this.setFormValues();\n }\n\n private setFormValues(): void {\n const selected =\n this.otpOptions === OtpChannel[OtpChannel.Text]\n ? OtpChannel.Text\n : OtpChannel.Call;\n this.loginForm.controls['authCodePreference'].setValue(selected);\n }\n\n public getSelectedOtpMethod(): OtpChannel {\n return this.loginForm.controls['authCodePreference'].value;\n }\n\n public doNotDisplaySplitColumns(): boolean {\n return (\n this.step !== LoginJourney[LoginJourney.UnableToSendOtp] &&\n this.step !== LoginJourney[LoginJourney.UnboundInvalidCredentials] &&\n this.step !== LoginJourney[LoginJourney.OtpByPhone]\n );\n }\n\n public submitButtonAriaDescribedBy(): string {\n return this.fieldHasError('userName') ||\n (this.step === LoginJourney[LoginJourney.Bound] &&\n this.passcodeComponent &&\n !this.passcodeComponent.valid) ||\n this.credentialsMessage.srMessage\n ? 'sr-errors'\n : null;\n }\n\n public isFormSubmitting(): boolean {\n return this.isSubmitting;\n }\n}\n","\n
\n Loading\n
\n
\n\n\n
\n
\n \n
\n\n\n \n\n
    \n
  • \n Log in\n
  • \n
  • \n Register\n
  • \n
\n\n \n\n \n
\n","import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BrandedRouter } from '../../services/brandedRouter';\nimport { ConfigService } from '../../services/configuration.service';\nimport { ThreatMetrixService } from '../../services/threat-metrix.service';\nimport { ThreatMetrixComponent } from '../../components/threat-metrix/threat-metrix.component';\nimport { LoginComponent } from '../../components/login/login.component';\nimport { LoginSCAComponent } from '../../components/login-sca/login-sca.component';\nimport { LoginJourney } from '../../components/login-sca/login-sca-enums';\nimport { NonSCAStoreStaffCardsService } from '../../services/strong-customer-authentication/non-SCA-store-staff-cards.service';\nimport {\n LoggedOutEntitlement,\n LoggedOutEntitlementsService,\n} from '../../services/logged-out-entitlements.service';\n\n@Component({\n selector: '[login]',\n templateUrl: './login.component.html',\n})\nexport class LoginPageComponent implements OnInit, OnDestroy {\n @ViewChild('loginComponent') loginComponent: LoginComponent;\n @ViewChild('loginSCAComponent') loginSCAComponent: LoginSCAComponent;\n @ViewChild('threatMetrixComponent')\n threatMetrixComponent: ThreatMetrixComponent;\n public loadingEntitlements = true;\n public threatMetrixEnabled = false;\n public loginUrl: string = '#';\n public registerUrl: string = '#';\n public isMobileView = true;\n public scaEnabled = false;\n public registrationAllowed: boolean;\n private ngUnsubscribe = new Subject();\n public redirectToNonSCA: boolean = false;\n public systemError = '';\n private readonly generalSystemErrorMessage =\n 'We are currently experiencing some technical difficulties. We’re aware of the problem and we’re working hard to resolve it as soon as possible. Please try again later.';\n\n constructor(\n private readonly brandedRouter: BrandedRouter,\n private readonly configService: ConfigService,\n private readonly threatMetrixService: ThreatMetrixService,\n private readonly loggedOutEntitlementsService: LoggedOutEntitlementsService,\n private nonSCAStoreStaffCardsService: NonSCAStoreStaffCardsService\n ) {\n this.loginUrl = this.brandedRouter.getBrandedLink('login');\n this.registerUrl = this.brandedRouter.getBrandedLink('register');\n this.isMobileView = this.configService.Get('mobileView');\n }\n\n ngOnInit() {\n this.loadEntitlements();\n this.nonSCAStoreStaffCardsService.isNonScaLoginJourney\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n (isNonScaLoginJourney) => (this.redirectToNonSCA = isNonScaLoginJourney)\n );\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private async loadEntitlements() {\n try {\n const threatMetrixLoginEnabled =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.threatMetrixLogin\n );\n\n this.threatMetrixService.setEntitlement(\n 'Login',\n threatMetrixLoginEnabled\n );\n this.threatMetrixEnabled =\n this.threatMetrixService.enabled && threatMetrixLoginEnabled;\n\n this.scaEnabled = await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.scaLogin\n );\n this.registrationAllowed =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.registrationPages\n );\n this.loadingEntitlements = false;\n } catch {\n this.systemError = this.generalSystemErrorMessage;\n }\n }\n\n public clickLink(e: MouseEvent, url: string): void {\n e.preventDefault();\n\n if (!url || url.length === 0) return;\n\n if (url === 'login' && this.loginComponent) {\n this.loginComponent.step = 1;\n return;\n }\n\n if (url === 'login' && this.loginSCAComponent) {\n this.loginSCAComponent.step = LoginJourney.Username;\n return;\n }\n\n this.brandedRouter.navigate(url);\n }\n}\n","import { ModuleWithProviders } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\n// pages\nimport { LoginPageComponent } from '../../../pages/login/login.component';\n\n// services\nimport { UnauthGuard } from '../../../services/unauthGuard';\nimport { LoginModule } from './login.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: LoginPageComponent,\n canActivate: [UnauthGuard],\n data: { authentication: true },\n },\n];\n\nexport const routing: ModuleWithProviders =\n RouterModule.forChild(routes);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CookieService } from 'ngx-cookie-service';\nimport { routing } from './login.routing';\n\n// pages\nimport { LoginPageComponent } from '../../../pages/login/login.component';\n\n// components\nimport { LoginComponent } from '../../../components/login/login.component';\nimport { LoginSCAComponent } from '../../../components/login-sca/login-sca.component';\nimport { LeftSideDescriptions } from '../../../components/login-sca/left-side-descriptions/left-side-descriptions.component';\nimport { CallLoadingScreenComponent } from '../../../components/login-sca/call-loading-screen/call-loading-screen.component';\nimport { UsernameComponent } from '../../../components/login-sca/username/username.component';\n\n// component modules\nimport { CommonComponentsModule } from '../../components/common/common.module';\nimport { LoadingModule } from '../../../modules/components/loading/loading.module';\nimport { PasscodeModule } from '../../../modules/components/passcode/passcode.module';\nimport { TabsModule } from '../../../modules/components/tabs/tabs.module';\nimport { CommonLoggedOutComponentsModule } from '../../../modules/components/common-logged-out/common-logged-out.module';\nimport { ValidationMessagesModule } from '../../../modules/components/validation-messages/validation-messages.module';\nimport { UplBannerComponent } from '../../../components/upl-banner/upl-banner.component';\nimport { ExpanderModule } from '../../../modules/components/expander/expander.module';\nimport { SystemNotificationsModule } from '../../../components/system-notifications/system-notifications.module';\n\n// services\nimport { ShowSecretToggleModule } from '../../components/show-secret-toggle/show-secret-toggle.module';\nimport { NonSCAStoreStaffCardsService } from '../../../services/strong-customer-authentication/non-SCA-store-staff-cards.service';\n\n// directives\nimport { InvalidInputFocusDirectiveModule } from '../../../modules/directives/invalidInputFocusDirective/invalidInputFocusDirective.module';\nimport { StrongCustomerAuthenticationModule } from '../../components/strong-customer-authentication/strong-customer-authentication.module';\nimport { CompatibilityModule } from '../../components/compatibility/compatibility.module';\n\n@NgModule({\n declarations: [\n LoginPageComponent,\n LoginComponent,\n LoginSCAComponent,\n UplBannerComponent,\n LeftSideDescriptions,\n CallLoadingScreenComponent,\n UsernameComponent,\n ],\n imports: [\n routing,\n CommonModule,\n CommonComponentsModule,\n FormsModule,\n LoadingModule,\n PasscodeModule,\n ReactiveFormsModule,\n ShowSecretToggleModule,\n TabsModule,\n CommonLoggedOutComponentsModule,\n ValidationMessagesModule,\n InvalidInputFocusDirectiveModule,\n ExpanderModule,\n StrongCustomerAuthenticationModule,\n SystemNotificationsModule,\n CompatibilityModule,\n ],\n providers: [CookieService, NonSCAStoreStaffCardsService],\n})\nexport class LoginModule {}\n"],"names":["label","iconClass","dataTestID","ShowPasswordToggleComponent","invertVisibility","MessageType","systemNotificationService","brandService","utilityService","configService","typeAlertMapping","ALERT","INFORMATION","this","isMobile","Get","loadNotifications","newLocation","_location","setNotificationsForLocation","location","allNotifications","notifications","filter","n","includes","map","processMessage","bind","notification","adjustMessageForMobile","fillBrandVariables","createUniqueMessageName","message","replace","getBrand","uniqueName","dismissType","S","stripHtmlTags","getSystemNotifications","then","SystemNotificationsComponent","SystemNotificationsModule","CommonModule","elementRef","threatMetrixService","ngAfterViewInit","insertScript","enabled","newScriptElement","document","createElement","setAttribute","createScriptSrc","nativeElement","appendChild","sessionId","newSessionId","orgId","ThreatMetrixComponent","browserService","windowRef","helpIcon","onClick","EventEmitter","visible","positionX","positionY","ngUnsubscribe","ngOnInit","subscribeResizeCount","setTimeout","setPosition","ngOnDestroy","next","complete","getARIALabelText","text","formInputName","click","e","preventDefault","emit","isIOS","tooltipElement","focus","show","hide","resizeCount","pipe","subscribe","viewport","windowWidth","left","getBoundingClientRect","TooltipComponent","screenreaderErrorMessages","errors","renderScreenreaderErrors","renderValidationSummary","hasScreenreaderErrorMessages","isDefinedAndNotNull","hasErrors","length","ValidationMessagesComponent","el","focusOnFirstInvalidInput","invalidInputFocus","invalid","invalidInput","querySelector","InvalidInputFocusDirective","TabsModule","isNonScaLoginJourney","BehaviorSubject","username","notifyIsNonScaLoginJourneyObservers","setUsername","NonSCAStoreStaffCardsService","contentService","loggedOutEntitlementsService","uplBannerEnabled","brand","hasEntitlement","result","getContent","uplBanner","goToLink","url","openNewWindow","UplBannerComponent","activatedRoute","authenticationService","brandedRouter","cookieService","errorService","instrumentation","nativeBridge","analyticsService","nonSCAStoreStaffCardsService","loginService","cookieConsentService","clientVariableService","buildRoot","getBuildRoot","returnUrl","Subject","errorMessages","password","passcode","credentialsMessage","srMessage","detail","linkText","passcodeInputs","usernameInputHidden","passwordInputHidden","credentialsDirty","step","formDirty","isSubmitting","loginError","psd2LoginBannerEnabled","GTMTracking","checkEntitlements","loadContent","mark","clear","initLinks","measure","notifyTaskCompleted","event","trackPageView","title","loginReady","queryParams","params","cookiePreferences","initForm","ngAfterContentChecked","getScreenreaderErrorMessages","trackGAEvents","action","trackCtaActions","changePasswordInputVisibility","isHidden","getCredentialsFormGroup","loginForm","controls","credentialFieldHasError","field","credentials","valid","dirty","touched","credentialFieldHasRequiredError","required","submitLogin","submitStepOne","submitStepTwo","mobileLinksEnabled","hasSCAEnabled","googlePlayLink","global","googlePlayStoreAppLink","appStoreLink","itunesStoreAppLink","mobileAppName","apps","name","processErrorMessages","getScreenreaderErrors","getUsername","FormGroup","userCredentials","userName","FormControl","Validators","rememberMe","Promise","resolve","get","exception","takeUntil","u","forgotUsernameLink","getBrandedLink","forgotPasswordLink","forgotPasscodeLink","registerLink","gotoStep2","scrollToTop","setPasscodeFocus","yPos","offsetTop","scrollTo","delay","that","passcodeComponent","setFocus","pushToDataLayer","data","value","trim","tmxSessionId","getSessionId","saveRememberMeCookie","getPasscodeChallenge","challengeVerificationToken","getPasscodeArray","challenge","error","processError","reset","markAsPristine","markAsUntouched","set","Date","undefined","arr","passcodeLength","i","push","passcodeDigits","forEach","digit","position","submit","response","submitPasscodeChallenge","success","loginRedirect","status","LoginComponent","LoginJourney","deviceBindingService","usernameService","featureFlagsService","livePersonService","fingerprintedSubject","isSubmittingChange","usernameResponseChange","userNameChange","hasFeatureFlag","displayUserNameTooltip","getDeviceFingerprint","deviceInfo","userNameControl","usernameGroup","checkCookieSettings","clearLivePersonErrorTracking","passUsername","submitUsernameWithDeviceInfo","getPasscodeBindingChallenge","storeOrStaffProduct","fieldHasRequiredError","fieldHasError","setValue","UsernameComponent","OtpChannel","registrationAllowed","checkBrand","isOwnBrand","headerName","bodyContent","getData","content","brandName","onClickRegisterLink","LeftSideDescriptions","CallLoadingScreenComponent","otpChannel","alertMessage","unauthenticatedChatMessage","otp","otpInputHidden","Username","isResendingOTP","AppType","notMyNumberDropdownOpen","loading","loginButtonSubmitted","loginVimeoLinkEnabled","separatePasscodeValidation","showHelpPopup","otpInputLabel","showLoginError","contactUsLink","gotoStepUsername","contactUsUrl","timeoutId","clearTimeout","control","getTextForSubmitButton","Bound","OtpInput","Unbound","OtpDeliverySelection","getSelectedOtpMethod","UnableToSendOtp","submitUsername","submitPasscodeAndBinding","handleSubmitPasscodeUnbound","resendErrorMessage","submitOtpDeliverySelection","handleSubmitOtp","UnboundInvalidCredentials","goToSubmitPasscodeAndBinding","goToStepUnableToSendOtp","onIsSubmittingChange","submitting","onUsernameResponseChange","isAccountLocked","navigate","sessionData","mobileNumberEnding","homeNumberEnding","authLevel","gotoStepUnbound","gotoStepUnableToSendOtp","gotoStepBound","onUserNameChange","resendOTPClickHandler","request","buildOTPRequest","isResend","resendSuccessful","sendOTPRequest","dto","clearErrors","requestOTP","res","handleOTPSubmissionResponse","onNotMyUsername","showPopup","hidePopup","args","channel","canResend","goToCallWaitingPage","handleStepChange","resendMessage","submitPasscodeUnbound","loadOtpPreference","setFocusById","submitOtp","submitPasscodeAndOtp","OtpByPhone","authCodePreference","gotoStep","loginGAObject","usernameComponent","getUnauthenticatedChatMessage","errorCode","errorMsg","attemptsRemaining","sendLivePersonErrorTracking","submitPasscodeBindingChallenge","closeChatWindow","code","msg","attempts","submitPasscodeUnboundChallenge","otpInputComponent","isValid","submitOtpChallenge","submitPasscodeOtpChallenge","otpOptions","setFormValues","selected","doNotDisplaySplitColumns","submitButtonAriaDescribedBy","isFormSubmitting","LoginSCAComponent","routes","path","component","loadingEntitlements","threatMetrixEnabled","loginUrl","registerUrl","isMobileView","scaEnabled","redirectToNonSCA","systemError","generalSystemErrorMessage","loadEntitlements","threatMetrixLoginEnabled","setEntitlement","clickLink","loginComponent","loginSCAComponent","LoginPageComponent","canActivate","authentication","routing","RouterModule","LoginModule","CookieService","FormsModule","ReactiveFormsModule","C"],"sourceRoot":""}