{"version":3,"file":"b37b2d.js","mappings":"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","sources":["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/tabs/tabs.component.ts","webpack://@newday/servicing-main/./src/app/components/tabs/tabs.component.html","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/login/login.component.ts","webpack://@newday/servicing-main/./src/app/components/login/login.component.html","webpack://@newday/servicing-main/./src/app/components/login-sca/login-sca.component.ts","webpack://@newday/servicing-main/./src/app/components/login-sca/username/username.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/login-sca.component.html","webpack://@newday/servicing-main/./src/app/pages/login/login.component.ts","webpack://@newday/servicing-main/./src/app/pages/login/login.component.html","webpack://@newday/servicing-main/./src/app/modules/pages/login/login.routing.ts","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/left-side-descriptions/left-side-descriptions.component.html","webpack://@newday/servicing-main/./src/app/components/login-sca/call-loading-screen/call-loading-screen.component.ts","webpack://@newday/servicing-main/./src/app/components/upl-banner/upl-banner.component.ts","webpack://@newday/servicing-main/./src/app/components/upl-banner/upl-banner.component.html","webpack://@newday/servicing-main/./src/app/modules/pages/login/login.module.ts"],"sourcesContent":["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","export default \"
\\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 {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { UtilityService } from '../../services/utility.service';\n\n@Component({\n selector: '[data-component=tabs]',\n templateUrl: './tabs.component.html',\n})\nexport class TabsComponent {\n public openTabId: string;\n @ViewChildren('tab') tabs: QueryList;\n @Input() tablistTitle: string = '';\n @Input() titles: Array;\n @Input() tabClass: string = '';\n @Output() onClick = new EventEmitter();\n @Input() initialTabId: string;\n\n constructor(private utilityService: UtilityService) {}\n\n ngOnInit() {\n this.init();\n }\n\n public init(): void {\n if (typeof this.titles === 'undefined' || this.titles.length === 0) return;\n\n this.openTabId = this.initialTabId || this.titles[0];\n }\n\n public clickTab(e: any, tabId: any): void {\n if (e != null) e.preventDefault();\n\n this.openTab(tabId);\n }\n\n public keydownTab(e: KeyboardEvent, num: number): void {\n if (!this.leftArrowKeyPressed(e) && !this.rightArrowKeyPressed(e)) return;\n\n let focusNum = this.rightArrowKeyPressed(e) ? num + 1 : num - 1;\n if (focusNum < 0) focusNum = this.tabs.length - 1;\n else if (focusNum >= this.tabs.length) focusNum = 0;\n\n this.tabs.forEach((item, i) => {\n if (i == focusNum) {\n item.nativeElement.focus();\n this.openTab(item.nativeElement.getAttribute('tabId'));\n }\n });\n }\n\n public stripHTML(html: string): string {\n return this.utilityService.stripHtmlTags(html, 'span');\n }\n\n private leftArrowKeyPressed(e: KeyboardEvent): boolean {\n return e.keyCode == 37;\n }\n\n private rightArrowKeyPressed(e: KeyboardEvent): boolean {\n return e.keyCode == 39;\n }\n\n private openTab(tabId: string): void {\n this.openTabId = tabId;\n this.onClick.emit(tabId);\n }\n}\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\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","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 { AssetConfigVariableService } from '../../services/asset-config-variable.service';\nimport {\n gtmEventTracking,\n GTMTracking,\n} from '../../enums/google-analytics-tracking';\nimport { INonScaLoginContent } from '../../../app/models/content';\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 imageRootPath: string = '';\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 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 cookiePreferences: Observable;\n public GTMTracking = GTMTracking;\n public content: INonScaLoginContent;\n public isContentLoading = true;\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 assetConfigVariableService: AssetConfigVariableService\n ) {\n this.brand = this.brandService.getBrand();\n this.checkEntitlements();\n\n instrumentation.mark('LoginComponent constructor start');\n\n this.errorService.clear();\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 async ngOnInit() {\n await this.loadContent();\n\n this.generateLinks();\n\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 this.imageRootPath =\n await this.assetConfigVariableService.getImageRootPath();\n }\n\n ngAfterContentChecked() {\n if (this.loginForm) {\n this.screenreaderErrorMessages = this.getScreenreaderErrorMessages();\n }\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 }\n\n private async loadContent(): Promise {\n try {\n const { global, apps, nonScaLogin } = await this.contentService.getData();\n\n this.googlePlayLink = global.googlePlayStoreAppLink;\n this.appStoreLink = global.itunesStoreAppLink;\n this.mobileAppName = apps && apps.name ? apps.name : this.brand;\n\n this.content = nonScaLogin;\n } finally {\n this.isContentLoading = false;\n }\n }\n\n public get mobileAppBannerDescription() {\n return this.content.mobileAppBanner.description.replace(\n /{{ mobileAppName }}/g,\n this.mobileAppName\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 generateLinks() {\n this.forgotUsernameLink = new LinkItem(\n this.content.form.usernameInput.forgottenLinkLabel,\n this.brandedRouter.getBrandedLink('/recovery/retrieve-username'),\n false,\n 'btnRetrieveUsername'\n );\n this.forgotPasswordLink = new LinkItem(\n this.content.form.passwordInput.forgottenLinkLabel,\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 this.content.journey.submitUsername.signUpSuggestion.linkLabel,\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.content) {\n if (this.credentialFieldHasError('userName')) {\n errors.push(this.content.form.usernameInput.requiredMessage);\n }\n\n if (this.credentialFieldHasError('password')) {\n errors.push(this.content.form.passwordInput.requiredMessage);\n }\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","export default \"\\n\\n\\n\\n\\n \\n
\\n
\\n
\\n \\n

\\n {{ content.journey.submitUsername.header }}\\n

\\n

\\n {{ content.journey.submitUsername.description }}\\n

\\n
\\n

\\n {{ content.journey.submitUsername.signUpSuggestion.message }}\\n {{ registerLink.text }}\\n

\\n
\\n \\n

\\n {{ content.journey.submitPasscode.header }}\\n

\\n

\\n {{ content.journey.submitPasscode.description }}\\n

\\n
\\n
\\n
\\n \\n
\\n\\n \\n
\\n \\n {{ forgotUsernameLink.text }}\\n \\n \\n
\\n \\n
\\n\\n
\\n \\n {{ content.form.usernameInput.requiredMessage }}\\n \\n
\\n
\\n\\n
\\n \\n {{ forgotPasswordLink.text }}\\n \\n \\n
\\n \\n\\n \\n \\n
\\n\\n
\\n \\n {{ content.form.passwordInput.requiredMessage }}\\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 {{ content.form.rememberMeInput.disclaimer }}\\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 {{ content.submissionErrorMessage }}\\n
\\n\\n \\n {{ content.form.submitButtonLabel }}\\n \\n \\n \\n \\n\\n \\n
\\n

{{ content.mobileAppBanner.title }}

\\n
\\n
\\n

\\n {{ mobileAppBannerDescription }}\\n

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

Sorry, something went wrong

\\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 { AssetConfigVariableService } from '../../services/asset-config-variable.service';\nimport {\n gtmEventTracking,\n GTMTracking,\n} from '../../enums/google-analytics-tracking';\nimport {\n ILoginJourneyDescriptionContent,\n ILoginHelpContent,\n IScaLoginContent,\n IScaUsernameContent,\n} from 'src/app/models/content';\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 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 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 imageRootPath: string = '';\n private timeoutId: number;\n private attemptsRemaining: number;\n public content: IScaLoginContent;\n public isContentLoading = true;\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 assetConfigVariableService: AssetConfigVariableService,\n instrumentation: InstrumentationService\n ) {\n this.brand = this.brandService.getBrand();\n this.isOwnBrand = this.brandService.isOwnBrand(this.brand);\n this.checkEntitlements();\n this.contactUsLink = brandedRouter.getBrandedLink('help/contact-us');\n\n instrumentation.mark('LoginComponent constructor start');\n\n this.errorService.clear();\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 async ngOnInit() {\n await this.loadContent();\n\n this.generateLinks();\n\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 this.imageRootPath =\n await this.assetConfigVariableService.getImageRootPath();\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 this.content.form.submitButtonLabel;\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.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 async loadContent(): Promise {\n try {\n const { global, apps, scaLogin } = await this.contentService.getData();\n\n this.googlePlayLink = global.googlePlayStoreAppLink;\n this.appStoreLink = global.itunesStoreAppLink;\n this.mobileAppName = apps && apps.name ? apps.name : this.brand;\n\n this.content = scaLogin;\n } finally {\n this.isContentLoading = false;\n }\n }\n\n public get contentJourneyDescription(): ILoginJourneyDescriptionContent {\n const { journey } = this.content;\n\n return {\n journey,\n };\n }\n\n public get contentScaUsername(): IScaUsernameContent {\n const {\n form: { usernameInput, rememberMeInput },\n } = this.content;\n\n return {\n usernameInput,\n rememberMeInput,\n };\n }\n\n public get contentLoginHelp(): ILoginHelpContent {\n const {\n helpVideoLinkPrefix: linkLabelPrefix,\n helpVideoLinkLabel: linkLabel,\n helpVideoLinkSuffix: linkLabelSuffix,\n } = this.content;\n\n return { linkLabelPrefix, linkLabel, linkLabelSuffix };\n }\n\n public get mobileAppBannerDescription() {\n return this.content.mobileAppBanner.description.replace(\n /{{ mobileAppName }}/g,\n this.mobileAppName\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 generateLinks() {\n this.forgotUsernameLink = new LinkItem(\n this.content.form.usernameInput.forgottenLinkLabel,\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 this.content.journey.submitUsername.signUpSuggestion.linkLabel,\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","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { FormGroup, 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';\nimport { IScaUsernameContent } from '../../../models/content';\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 @Input() content: IScaUsernameContent;\n\n public GTMTracking = GTMTracking;\n usernameInputHidden: boolean = false;\n brand: string;\n forgotUsernameLink: LinkItem;\n forgotPasscodeLink: 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.generateLinks();\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 generateLinks() {\n this.forgotUsernameLink = new LinkItem(\n this.content.usernameInput.forgottenLinkLabel,\n this.brandedRouter.getBrandedLink('/recovery/retrieve-username'),\n false,\n 'btnRetrieveUsername'\n );\n }\n}\n","export default \"
\\n
\\n \\n {{ forgotUsernameLink.text }}\\n \\n \\n
\\n \\n
\\n
\\n \\n {{ content.usernameInput.requiredMessage }}\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n

\\n {{ content.rememberMeInput.disclaimer }}\\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","export default \"\\n\\n\\n\\n\\n\\n\\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

\\n We will text the OTP to you.\\n

\\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\\n an 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 {{ content.needHelpButtonLabel }}\\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\\n review 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

{{ content.mobileAppBanner.title }}

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

Sorry, something went wrong

\\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","export default \"\\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 { 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 { 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 { AnalyticsService } from '../../../services/analytics.service';\nimport { GTMTracking } from '../../../enums/google-analytics-tracking';\nimport { ILoginJourneyDescriptionContent } from '../../../models/content';\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 @Input() journeyDescription: ILoginJourneyDescriptionContent;\n\n LoginJourney: typeof LoginJourney = LoginJourney;\n OtpChannel: typeof OtpChannel = OtpChannel;\n registrationAllowed: boolean;\n content: ILoginJourneyDescriptionContent['journey'];\n\n constructor(\n private analyticsService: AnalyticsService,\n private readonly loggedOutEntitlementsService: LoggedOutEntitlementsService\n ) {}\n\n async ngOnInit() {\n this.content = this.journeyDescription.journey;\n\n this.registrationAllowed =\n await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.registrationPages\n );\n }\n\n onClickRegisterLink() {\n this.analyticsService.trackCtaActions(GTMTracking.LoginSignUpHereClick);\n }\n}\n","export default \"
\\n \\n

{{ content.submitUsername.header }}

\\n

{{ content.submitUsername.description }}

\\n
\\n

\\n {{ content.submitUsername.signUpSuggestion.message }}\\n \\n {{ registerLink.text }}\\n \\n

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

{{ content.submitPasscode.header }}

\\n

{{ content.submitPasscode.description }}

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

{{ content.requestOtp.header }}

\\n

{{ content.requestOtp.description }}

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

{{ content.submitOtp.header }}

\\n

\\n {{ content.submitOtp.description }}\\n {{\\n selectedOTPChannel === OtpChannel.Call\\n ? homeNumberEnding\\n : mobileNumberEnding\\n }}\\n

\\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","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","export default \"
\\n
\\n
\\n
\\n
{{ uplBanner.header }}
\\n
{{ uplBanner.text }}
\\n
\\n
\\n \\n FIND OUT MORE\\n \\n
\\n
\\n
\\n
\\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":["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","Input","SystemNotificationsComponent","Component","selector","template","SystemNotificationsModule","NgModule","declarations","imports","CommonModule","exports","providers","tablistTitle","tabClass","onClick","EventEmitter","ngOnInit","init","titles","length","openTabId","initialTabId","clickTab","e","tabId","preventDefault","openTab","keydownTab","num","leftArrowKeyPressed","rightArrowKeyPressed","focusNum","tabs","forEach","item","i","nativeElement","focus","getAttribute","stripHTML","html","keyCode","emit","ViewChildren","Output","TabsComponent","TabsModule","isNonScaLoginJourney","BehaviorSubject","username","notifyIsNonScaLoginJourneyObservers","next","setUsername","NonSCAStoreStaffCardsService","Injectable","activatedRoute","authenticationService","brandedRouter","cookieService","elementRef","errorService","instrumentation","nativeBridge","analyticsService","windowRef","contentService","nonSCAStoreStaffCardsService","threatMetrixService","loginService","loggedOutEntitlementsService","cookieConsentService","assetConfigVariableService","imageRootPath","returnUrl","ngUnsubscribe","Subject","errors","errorMessages","passcode","credentialsMessage","url","srMessage","detail","linkText","passcodeInputs","usernameInputHidden","passwordInputHidden","credentialsDirty","step","formDirty","isSubmitting","screenreaderErrorMessages","loginError","GTMTracking","isContentLoading","brand","checkEntitlements","mark","clear","measure","loadContent","generateLinks","notifyTaskCompleted","event","trackPageView","title","loginReady","queryParams","subscribe","params","cookiePreferences","initForm","getImageRootPath","ngAfterContentChecked","loginForm","getScreenreaderErrorMessages","ngOnDestroy","complete","trackGAEvents","action","trackCtaActions","changePasswordInputVisibility","isHidden","getCredentialsFormGroup","controls","credentialFieldHasError","field","credentials","valid","dirty","touched","credentialFieldHasRequiredError","required","submitLogin","submitStepOne","submitStepTwo","hasEntitlement","mobileLinksEnabled","hasSCAEnabled","getData","global","apps","nonScaLogin","googlePlayLink","googlePlayStoreAppLink","appStoreLink","itunesStoreAppLink","mobileAppName","name","content","mobileAppBanner","description","processErrorMessages","getScreenreaderErrors","getUsername","FormGroup","userCredentials","userName","FormControl","Validators","password","rememberMe","Promise","resolve","get","exception","pipe","takeUntil","u","forgotUsernameLink","form","usernameInput","forgottenLinkLabel","getBrandedLink","forgotPasswordLink","passwordInput","forgotPasscodeLink","registerLink","journey","submitUsername","signUpSuggestion","linkLabel","gotoStep2","scrollToTop","setPasscodeFocus","yPos","offsetTop","scrollTo","delay","that","setTimeout","passcodeComponent","setFocus","pushToDataLayer","data","value","trim","tmxSessionId","getSessionId","saveRememberMeCookie","getPasscodeChallenge","result","challengeVerificationToken","getPasscodeArray","challenge","error","processError","reset","markAsPristine","markAsUntouched","set","Date","undefined","arr","passcodeLength","push","passcodeDigits","digit","position","submit","invalid","response","submitPasscodeChallenge","success","loginRedirect","status","requiredMessage","ActivatedRoute","CookieService","ElementRef","ViewChild","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","alertMessage","unauthenticatedChatMessage","otpInputHidden","Username","isResendingOTP","AppType","notMyNumberDropdownOpen","loading","loginButtonSubmitted","loginVimeoLinkEnabled","separatePasscodeValidation","showHelpPopup","isOwnBrand","otpInputLabel","showLoginError","contactUsLink","gotoStepUsername","contactUsUrl","timeoutId","clearTimeout","control","getTextForSubmitButton","submitButtonLabel","Bound","OtpInput","Unbound","OtpDeliverySelection","getSelectedOtpMethod","UnableToSendOtp","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","scaLogin","rememberMeInput","linkLabelPrefix","linkLabelSuffix","authCodePreference","otp","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","loadingEntitlements","threatMetrixEnabled","loginUrl","registerUrl","isMobileView","scaEnabled","redirectToNonSCA","systemError","generalSystemErrorMessage","loadEntitlements","threatMetrixLoginEnabled","setEntitlement","enabled","registrationAllowed","clickLink","loginComponent","loginSCAComponent","LoginPageComponent","routes","path","component","canActivate","authentication","routing","RouterModule","OtpChannel","journeyDescription","onClickRegisterLink","LeftSideDescriptions","CallLoadingScreenComponent","uplBannerEnabled","getContent","uplBanner","goToLink","openNewWindow","UplBannerComponent","LoginModule","FormsModule","ReactiveFormsModule","C"],"sourceRoot":""}