{"version":3,"file":"21469.789e1ae636c4d375.js","mappings":"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","names":["QuestionAnswerTerminationEnum","None","Question","Application","Text","ClientPortalQuestionTreeAnswer","Id","Slug","DateClientPortalStart","DateClientPortalEnd","Order","QuestionId","IconId","BlobId","IconLabel","Terminate","TerminalText","ApplicationDescription","ApplicationOrFamilyTypeId","TerminalHeader","NextQuestionId","NextQuestion","HasIcon","Termination","BreadCrumb","IsChecked","IsHidden","IsDisabled","IsSelectionDisabled","IsEditingDisabled","IsAnswer","Url","IsActive","this","Date","Label","Children","TerminationDescription","constructor","o","question","undefined","AppFunctions","isValid","console","warn","ClientPortalQuestionTreeQuestion","IsRootQuestion","TreeId","Answers","IsQuestion","IsHiddenIfNoApplicationAvailable","answers","filter","a","length","ClientPortalQuestionTree","Code","ClientPortalLabel","RootQuestionId","Questions","RootQuestion","find","x","IsTree","map","getAnswers","forEach","getQuestion","generateUrls","urlParams","generateUrlForSlug","q","slug","ClientPortalBaseUrl","FinancialInstitutionIdentifier","join","concat","BrandCode","sort","b","getNextQuestion","answer","id","getParentForAnswer","getParentForQuestion","getBreadCrumbsForQuestion","existingCrumbs","getBreadCrumbsForAnswer","label","provideLink","ClientPortalAppSettings","static","localStorage","getItem","ClientPortalConfigurationManager","ClientPortalBaseService","user","_configurableText","load","forceRefresh","Observable","subscription","rawJson","JSON","parse","next","complete","getFromApi","subscribe","configurableText","setItem","stringify","error","reload","financialInstitutionName","get","clientPortalAPI","getText","key","pipe","toString","getTutorialWelcomeTextAsync","_this","_asyncToGenerator","toPromise","getTutorialChatTextAsync","_this2","getTutorialDocumentTextAsync","_this3","getTutorialMessageTextAsync","_this4","getClientAcceptanceTextAsync","_this5","__ngFactoryType__","factory","ɵfac","LandingViewService","applicationCounts","ApplicationCountModel","getApplicationCounts","clientId","IncompleteApplicationCount","SubmittedApplicationCount","CompletedApplicationCount","CheckboxComponent","bhControl","form","onValueChanged","EventEmitter","formControl","ngOnInit","replace","checkboxControl","FormControl","data","value","validators","addControl","valueChanges","emit","selectors","inputs","outputs","standalone","features","i0","decls","vars","consts","template","rf","ctx","disabled","FormsModule","i1","ReactiveFormsModule","encapsulation","HeaderComponent","notificationService","location","title","deleteMessage","canDelete","save","close","delete","canSave","hasChanges","dirty","valid","onSave","onClose","notificationOption","okTitle","confirmUnsaved","ok","setTimeout","back","onDelete","markAsPristine","confirm","bind","i2","ngContentSelectors","_c1","i3","UserService","getClients","Clients","registerDevice","rememberDevice","fingerprint","post","newObserver","getUser","Object","assign","ClientPortalUserModel","tap","getUserProfileDetail","result","ClientPortalUserProfileDetailModel","Devices","y","ClientPortalUserDeviceModel","saveUser","cpUser","updatedUser","FullName","removeUserDevice","deviceId","updateDeviceName","deviceName","userProperties","saveTutorial","tutorialKey","getClientPortalWhatToDo","samlToken","resetTutorials","ClientId","CustomTheme","Base64Logo","BorrowerReplacementLabel","ChangePasswordMessage","FinancialInstitutionName","SessionTimeoutWarning","EnableApplications","EnableConfigurableApplications","IndividualClientTypeURL","SmallBusinessApplicationURL","EnableOnboardingTutorials","ClientPortalLoginContactName","ClientPortalLoginContactEmail","ClientPortalLoginContactPhone","SamlLoginUrl","MaxFileSizeToUploadInKB","SBLRGrossAnnualRevenueLimit","Email","IsMfaEnabled","PasswordComplexityInfo","PasswordComplexityDto","DeviceName","LastLoginDate","IsEditing","ProfileModel","CurrentPassword","NewPassword","PasswordConfirm","IsSamlLogin","ClientContextService","onClientChanged","onClientSwitchRequested","onClientActionCountUpdated","_client","client","observable","observer","unsubscribe","providedIn","http","loginResult","expires_at","moment","add","expires_in","financialInstitution","loginResultString","headers","HttpHeaders","append","brandCode","getBrandCode","isAuthenticated","access_token","isAuthenticatedAndNotExpired","getFile","url","customHeaders","observe","responseType","buildUrl","params","firstCharacter","includes","buildQueryString","getOwnPropertyNames","p","encodeURIComponent","body","LoginResult","refresh_token","token_type","ErrorInterceptorBase","intercept","req","handle","catchError","responseError","canHandleError","throwError","handleError","ClientPortalMFAErrorInterceptor","router","super","canHandle","grantType","split","slice","navigate","ClientPortalForcePasswordChangeModule","requestBody","userName","decodeURIComponent","ClientPortalUnauthorizedErrorInterceptor","status","Message","returnUrl","fi","route","GUID","encodedUrl","setRedirection","setFinancialInstitution","queryParams","splice","push","urlFI","ClientPortalCoreModule","DeviceFingerprintService","LoginService","provide","HTTP_INTERCEPTORS","useClass","AppInsightsInterceptor","multi","ErrorInterceptor","imports","BasicSharedModule","WjInputModule","ClientPortalIconApiService","getIconUrl","iconId","ClientPortalQuestionTreeApiService","getTrees","getTree","tree","ClientPortalAnonQuestionTreeApiService","ClientPortalUrlService","PreviewClientPortalUrlService","getApplicationUrl","financialInstitutionIdentifier","applicationId","getLocationEligibilityUrl","getQuestionUrl","AnonClientPortalUrlService","ctx_r0","_c0","routes","path","component","NotFoundComponent","ComponentBase","fiApiService","clientContextService","getValueFromQueryString","getFIInformation","fiInfo","FiApiService","NotFoundComponent_Conditional_2_Template","NotFoundComponent_Conditional_10_Template","NotFoundComponent_Conditional_11_Template","NavbarComponent","RouterLink","FooterComponent","styles","loadChildren","Promise","all","__webpack_require__","e","then","LoginModule","SamlLoginModule","LogoutModule","AuthorizedModule","ExternalChangePasswordModule","MultiFactorAuthenticationModule","ForcePasswordChangeModule","PreviewModule","ShortCodeModule","AnonymousModule","redirectTo","ClientPortalModule","RouterModule","_r1","ctx_r1","hide","closeBtnTitle","ModalCPRComponent_Conditional_5_Conditional_6_Template","modalTitle","showCloseOptions","_r3","ModalCPRComponent_Conditional_9_Conditional_2_Template","ModalCPRComponent","modalHeight","showFooter","size","isLoading","modalBody","viewHeight","docHeight","isAutoHeight","isOpen","show","nativeElement","scrollTop","offsetHeight","document","documentElement","clientHeight","viewQuery","ModalCPRComponent_Conditional_5_Template","ModalCPRComponent_Conditional_9_Template","LoadingRComponent","_c2","client_r4","ActionCount","$implicit","NavbarComponent_Conditional_8_Conditional_1_For_7_Conditional_2_Template","NavbarComponent_Conditional_8_Conditional_1_For_7_Template","selectedClient","clients","NavbarComponent_Conditional_8_Conditional_6_Conditional_6_Conditional_2_Template","_c7","NavbarComponent_Conditional_8_Conditional_6_Conditional_7_Conditional_2_Template","_c8","_c9","questionTree_r5","NavbarComponent_Conditional_8_Conditional_6_Conditional_8_Conditional_0_For_1_Template","questionTrees","applicationUrl","NavbarComponent_Conditional_8_Conditional_6_Conditional_8_Conditional_0_Template","NavbarComponent_Conditional_8_Conditional_6_Conditional_8_Conditional_1_Template","isFeatureEnabled","FeatureFlags","ConfigurableClientPortalApplications","NavbarComponent_Conditional_8_Conditional_6_Conditional_6_Template","NavbarComponent_Conditional_8_Conditional_6_Conditional_7_Template","NavbarComponent_Conditional_8_Conditional_6_Conditional_8_Template","NavbarComponent_Conditional_8_Conditional_6_Conditional_12_Template","hasViewApplicationPermission","ClientPortalApplications","hasEditApplicationPermission","_c6","_c10","_c11","NavbarComponent_Conditional_8_Conditional_1_Template","NavbarComponent_Conditional_8_Conditional_5_Template","NavbarComponent_Conditional_8_Conditional_6_Template","NavbarComponent_Conditional_8_Conditional_7_Template","NavbarComponent_Conditional_8_Conditional_8_Template","_r2","logout","_c3","hasViewItemPermission","hasViewMessagePermission","_c4","_c5","actionCenterService","loginService","userService","questionTreeService","loading","showMobileMenu","onShouldSetClient","_user","configureTheme","_selectedClient","Permissions","updateApplicationCounts","snapshot","paramMap","forkJoin","c","IsIndividual","trees","actionCount","navigateToHome","setAttribute","imgURL","style","setProperty","i4","i5","i6","NavbarComponent_Conditional_1_Template","NavbarComponent_Conditional_7_Template","NavbarComponent_Conditional_8_Template","RouterLinkActive","fiName","brandId","_configuredText","configuredText","ConfigurableTextMessages","CP_PERMISSION_TUTORIAL_PAGE1","CP_PERMISSION_TUTORIAL_PAGE2","CP_PERMISSION_TUTORIAL_PAGE3","CP_PERMISSION_TUTORIAL_PAGE4","ClientPortalFooterItemService","getClientPortalFooterConfiguration","ClientPortalFooterConfigModel","TopItems","LeftItems","RightItems","BottomItems","clientPortalFooterModel","ClientPortalFooterItemLabel","showTextModal_r3","ClientPortalFooterItemComponent_Conditional_0_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_0_Conditional_2_Template","ClientPortalFooterItemComponent_Conditional_0_Conditional_3_Template","imageDataUrl","ClientPortalFooterItemComponent_Conditional_1_Conditional_1_Conditional_2_Template","_r4","ClientPortalFooterItemComponent_Conditional_1_Conditional_2_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_1_Conditional_3_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_1_Conditional_3_Conditional_2_Template","ClientPortalFooterItemComponent_Conditional_1_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_1_Conditional_2_Template","ClientPortalFooterItemComponent_Conditional_1_Conditional_3_Template","ClientPortalFooterItemComponent_Conditional_2_Conditional_1_Conditional_2_Template","_r5","ClientPortalFooterItemComponent_Conditional_2_Conditional_2_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_2_Conditional_3_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_2_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_2_Conditional_2_Template","ClientPortalFooterItemComponent_Conditional_2_Conditional_3_Template","ClientPortalFooterItemComponent","iconService","IconLibraryIconId","ClientPortalFooterItemComponent_Conditional_0_Template","ClientPortalFooterItemComponent_Conditional_1_Template","ClientPortalFooterItemComponent_Conditional_2_Template","LayoutTypeBhCode","field_r1","LayoutSizeBhCode","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_1_For_4_Template","clientPortalFooterConfigModel","field_r3","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_4_For_2_Template","field_r4","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_6_For_2_Template","field_r5","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_7_For_4_Template","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_1_Template","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_4_Template","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_6_Template","ConfigurableClientPortalFooterComponent_Conditional_0_Conditional_7_Template","ConfigurableClientPortalFooterComponent","clientPortalFooterItemService","isLoaded","getFooterConfiguration","addSubscription","err","ConfigurableClientPortalFooterComponent_Conditional_0_Template","copyright","format","FooterComponent_Conditional_8_Template","fingerprintService","sessionTimeoutWarningMinutes","defaultHeaders","loginWithAuthorizationCode","financialInstitutionId","username","code","generateBrowserFingerprint","grant_type","financialinstitution","switchMap","processLoginResult","loginWithUsernameAndPassword","password","getRefreshToken","scope","Authorization","login","model","source","of","getAuthenticationSettings","getSessionTimeoutWarningMinutes","parseInt","isNaN","callRefreshToken","getExpireAtTimeMinutes","getExpireTimeInSeconds","LoginModel","PasswordMinimumLength","PasswordRequiresNumber","PasswordRequiresSymbol","PasswordRequiresMixedCase"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/admin/client-portal/models/client-portal-question-tree-answer.class.ts","./src/app/admin/client-portal/models/client-portal-question-tree-question.class.ts","./src/app/admin/client-portal/models/client-portal-question-tree.class.ts","./src/app/client-portal/app.globals.ts","./src/app/client-portal/auth/client-portal-configuration-manager.api.service.ts","./src/app/client-portal/auth/landing-view/action-center.api.service.ts","./src/app/client-portal/auth/shared/controls/bh-checkbox.component.ts","./src/app/client-portal/auth/shared/controls/bh-checkbox.component.html","./src/app/client-portal/auth/shared/controls/bh-header.component.ts","./src/app/client-portal/auth/shared/controls/bh-header.component.html","./src/app/client-portal/auth/user.api.service.ts","./src/app/client-portal/client-context.service.ts","./src/app/client-portal/client-portal-base.service.ts","./src/app/client-portal/error-interceptor.base.ts","./src/app/client-portal/client-portal-mfa-error.interceptor.ts","./src/app/client-portal/client-portal-force-password-change-error.interceptor.ts","./src/app/client-portal/client-portal-unauthorized-error.interceptor.ts","./src/app/client-portal/client-portal-core.module.ts","./src/app/client-portal/client-portal-icon.api.service.ts","./src/app/client-portal/client-portal-question-tree-api.service.ts","./src/app/client-portal/not-found/not-found.component.html","./src/app/client-portal/client-portal.module.ts","./src/app/client-portal/not-found/not-found.component.ts","./src/app/client-portal/components/bh-cp-r-modal.component.html","./src/app/client-portal/components/bh-cp-r-modal.component.ts","./src/app/client-portal/components/navbar/navbar.component.html","./src/app/client-portal/components/navbar/navbar.component.ts","./src/app/client-portal/fi-api.service.ts","./src/app/client-portal/footer/client-portal-footer-item.api.service.ts","./src/app/client-portal/footer/Client-portal-footer.model.ts","./src/app/client-portal/footer/client-portal-footer-item.component.html","./src/app/client-portal/footer/client-portal-footer-item.component.ts","./src/app/client-portal/footer/configurable-client-portal-footer.component.html","./src/app/client-portal/footer/configurable-client-portal-footer.component.ts","./src/app/client-portal/footer/footer.component.html","./src/app/client-portal/footer/footer.component.ts","./src/app/client-portal/login.service.ts","./src/app/shared/common/admin/users/password-complexity.model.ts"],"sourcesContent":["import { IBhReactiveTreeItem } from \"../../../shared/controls/reactive/bh-tree-new.component\";\r\nimport { IClientPortalQuestionTreeTreeItem } from \"./client-portal-question-tree.class\";\r\nimport { ClientPortalQuestionTreeQuestion } from \"./client-portal-question-tree-question.class\";\r\nimport { AppFunctions } from \"../../../shared/app.functions\";\r\n\r\nexport enum QuestionAnswerTerminationEnum {\r\n None,\r\n Question,\r\n Application,\r\n Text\r\n}\r\n\r\nexport interface IClientPortalQuestionTreeAnswer extends IClientPortalQuestionTreeTreeItem {\r\n Id: string;\r\n Slug: string;\r\n Text: string;\r\n DateClientPortalStart: Date;\r\n DateClientPortalEnd: Date;\r\n IsActive: boolean;\r\n Order: number;\r\n QuestionId: string;\r\n\r\n IconId?: string;\r\n BlobId?: string;\r\n IconLabel?: string;\r\n\r\n TerminalText?: string;\r\n\r\n ApplicationDescription?: string;\r\n ApplicationOrFamilyTypeId?: string;\r\n TerminalHeader?: string;\r\n NextQuestionId?: string;\r\n\r\n HasIcon: boolean;\r\n Termination: QuestionAnswerTerminationEnum;\r\n BreadCrumb: string;\r\n}\r\n\r\nexport class ClientPortalQuestionTreeAnswer implements IClientPortalQuestionTreeAnswer {\r\n Id: string;\r\n Slug: string;\r\n Text: string;\r\n DateClientPortalStart: Date;\r\n DateClientPortalEnd: Date;\r\n Order: number;\r\n QuestionId: string;\r\n\r\n IconId?: string;\r\n BlobId?: string;\r\n IconLabel?: string;\r\n\r\n Terminate: boolean = false;\r\n TerminalText?: string;\r\n\r\n ApplicationDescription?: string;\r\n ApplicationOrFamilyTypeId?: string;\r\n TerminalHeader?: string;\r\n\r\n NextQuestionId?: string;\r\n NextQuestion?: ClientPortalQuestionTreeQuestion;\r\n\r\n HasIcon: boolean;\r\n Termination: QuestionAnswerTerminationEnum;\r\n BreadCrumb: string;\r\n\r\n // reactive tree items\r\n IsChecked?: boolean;\r\n IsHidden?: boolean;\r\n IsDisabled?: boolean;\r\n IsSelectionDisabled?: boolean;\r\n IsEditingDisabled?: boolean;\r\n IsAnswer: boolean = true;\r\n Url: string;\r\n\r\n get IsActive(): boolean {\r\n return this.DateClientPortalStart < new Date()\r\n && (\r\n !this.DateClientPortalEnd\r\n ||\r\n this.DateClientPortalEnd > new Date()\r\n );\r\n }\r\n\r\n get Label(): string {\r\n return this.Text;\r\n }\r\n\r\n get Children(): IBhReactiveTreeItem[] {\r\n if (!!this.NextQuestion) {\r\n return [\r\n this.NextQuestion\r\n ];\r\n }\r\n return [];\r\n }\r\n\r\n get TerminationDescription(): string {\r\n switch (this.Termination) {\r\n case QuestionAnswerTerminationEnum.Application:\r\n return 'Application';\r\n case QuestionAnswerTerminationEnum.Text:\r\n return 'Text';\r\n case QuestionAnswerTerminationEnum.Question:\r\n return 'Question';\r\n }\r\n return '';\r\n }\r\n\r\n constructor(o?: IClientPortalQuestionTreeAnswer, question: ClientPortalQuestionTreeQuestion = null) {\r\n if (!o) {\r\n return;\r\n }\r\n\r\n this.Id = o.Id;\r\n this.Slug = o.Slug;\r\n this.Text = o.Text;\r\n this.DateClientPortalEnd = !!o.DateClientPortalEnd ? new Date(o.DateClientPortalEnd) : undefined;\r\n this.DateClientPortalStart = !!o.DateClientPortalStart ? new Date(o.DateClientPortalStart) : undefined;\r\n this.Order = o.Order;\r\n this.QuestionId = o.QuestionId;\r\n\r\n this.IconId = o.IconId;\r\n this.BlobId = o.BlobId;\r\n this.IconLabel = o.IconLabel;\r\n\r\n this.TerminalText = o.TerminalText;\r\n this.Terminate = !AppFunctions.IsNullorUndefined(o.TerminalText); \r\n\r\n this.ApplicationDescription = o.ApplicationDescription;\r\n this.TerminalHeader = o.TerminalHeader;\r\n this.ApplicationOrFamilyTypeId = o.ApplicationOrFamilyTypeId;\r\n\r\n this.NextQuestionId = o.NextQuestionId;\r\n this.NextQuestion = question;\r\n\r\n this.HasIcon = o.HasIcon;\r\n this.Termination = o.Termination;\r\n }\r\n\r\n // an answer can be considered valid if it terminates in some valid action\r\n isValid(): boolean {\r\n if (this.Termination === QuestionAnswerTerminationEnum.None) {\r\n console.warn('Answer Is Invalid', 'Missing Termination', this);\r\n return false;\r\n }\r\n if (this.Termination === QuestionAnswerTerminationEnum.Question && !this.NextQuestion) {\r\n console.warn('Answer Is Invalid', 'Missing Next Question', this);\r\n return false;\r\n }\r\n if (this.Termination === QuestionAnswerTerminationEnum.Question && !this.NextQuestion?.isValid()) {\r\n console.warn('Answer Is Invalid', 'Next Question is Invalid', this);\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { IBhReactiveTreeItem } from \"../../../shared/controls/reactive/bh-tree-new.component\";\r\nimport { IClientPortalQuestionTreeTreeItem } from \"./client-portal-question-tree.class\";\r\nimport {\r\n ClientPortalQuestionTreeAnswer\r\n} from \"./client-portal-question-tree-answer.class\";\r\n\r\nexport interface IClientPortalQuestionTreeQuestion extends IClientPortalQuestionTreeTreeItem {\r\n Id: string;\r\n Slug: string;\r\n Text: string;\r\n DateClientPortalStart: Date;\r\n DateClientPortalEnd: Date;\r\n IsRootQuestion: boolean;\r\n TreeId: string;\r\n BreadCrumb: string;\r\n IsHiddenIfNoApplicationAvailable: boolean;\r\n}\r\n\r\nexport class ClientPortalQuestionTreeQuestion implements IClientPortalQuestionTreeQuestion {\r\n Id: string;\r\n Slug: string;\r\n Text: string;\r\n DateClientPortalStart: Date;\r\n DateClientPortalEnd: Date;\r\n IsRootQuestion: boolean = false;\r\n TreeId: string;\r\n Answers: ClientPortalQuestionTreeAnswer[] = [];\r\n\r\n // reactive tree items\r\n IsChecked?: boolean;\r\n IsHidden?: boolean;\r\n IsDisabled?: boolean;\r\n IsSelectionDisabled?: boolean;\r\n IsEditingDisabled?: boolean;\r\n IsQuestion: boolean = true;\r\n IsHiddenIfNoApplicationAvailable: boolean;\r\n Url: string;\r\n BreadCrumb: string;\r\n\r\n get IsActive(): boolean {\r\n return this.DateClientPortalStart < new Date()\r\n && (\r\n !this.DateClientPortalEnd\r\n ||\r\n this.DateClientPortalEnd > new Date()\r\n );\r\n }\r\n\r\n get Children(): IBhReactiveTreeItem[] {\r\n return this.Answers;\r\n }\r\n\r\n get Label(): string {\r\n return this.Text;\r\n }\r\n\r\n constructor(o?: IClientPortalQuestionTreeQuestion, answers: ClientPortalQuestionTreeAnswer[] = []) {\r\n if (!o) {\r\n return;\r\n }\r\n this.Id = o.Id;\r\n this.Slug = o.Slug;\r\n this.Text = o.Text;\r\n this.DateClientPortalEnd = !!o.DateClientPortalEnd ? new Date(o.DateClientPortalEnd) : undefined;\r\n this.DateClientPortalStart = !!o.DateClientPortalStart ? new Date(o.DateClientPortalStart) : undefined;\r\n this.IsRootQuestion = o.IsRootQuestion;\r\n this.TreeId = o.TreeId;\r\n this.IsHiddenIfNoApplicationAvailable = o.IsHiddenIfNoApplicationAvailable ?? false;\r\n this.Answers = answers;\r\n }\r\n\r\n // a question can be considered valid if it has answers\r\n // that are in a valid state\r\n //\r\n // we do rely on the backend a bit here as client portal\r\n // api endpoints should not return objects that are marked\r\n // as !IsActive or are outside the Start/End date window\r\n isValid(): boolean {\r\n\r\n const hasValidAnswers = this.Answers\r\n .filter(a => a.isValid())\r\n .length > 0;\r\n\r\n if (!hasValidAnswers) {\r\n console.warn('Question Is Invalid', 'No Valid Answers', this);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import {\r\n ClientPortalQuestionTreeQuestion,\r\n IClientPortalQuestionTreeQuestion\r\n} from \"./client-portal-question-tree-question.class\";\r\nimport {\r\n ClientPortalQuestionTreeAnswer,\r\n IClientPortalQuestionTreeAnswer\r\n} from \"./client-portal-question-tree-answer.class\";\r\nimport { IBhReactiveTreeItem } from \"../../../shared/controls/reactive/bh-tree-new.component\";\r\n\r\nexport interface IClientPortalUrlParameters {\r\n ClientPortalBaseUrl: string;\r\n FinancialInstitutionIdentifier: string;\r\n BrandCode: string;\r\n}\r\n\r\nexport interface IClientPortalQuestionTreeTreeItem extends IBhReactiveTreeItem {\r\n IsActive: boolean;\r\n TerminationDescription?: string;\r\n Url?: string;\r\n IsTree?: boolean;\r\n IsQuestion?: boolean;\r\n IsAnswer?: boolean;\r\n Slug: string;\r\n}\r\n\r\nexport interface IClientPortalQuestionTree extends IClientPortalQuestionTreeTreeItem {\r\n Id: string;\r\n Slug: string;\r\n Code: string;\r\n Label: string;\r\n ClientPortalLabel: string;\r\n IsActive: boolean;\r\n DateClientPortalStart: boolean;\r\n DateClientPortalEnd: boolean;\r\n Order: number;\r\n RootQuestionId: string;\r\n Questions: IClientPortalQuestionTreeQuestion[];\r\n Answers: IClientPortalQuestionTreeAnswer[];\r\n}\r\n\r\nexport interface IBreadCrumb {\r\n label: string;\r\n id: string;\r\n provideLink: boolean;\r\n}\r\n\r\nexport class ClientPortalQuestionTree implements IClientPortalQuestionTree {\r\n Id: string;\r\n Slug: string;\r\n Code: string;\r\n Label: string;\r\n ClientPortalLabel: string;\r\n IsActive: boolean;\r\n DateClientPortalStart: boolean = true;\r\n DateClientPortalEnd: boolean = true;\r\n Order: number;\r\n RootQuestionId: string;\r\n Questions: ClientPortalQuestionTreeQuestion[] = [];\r\n Answers: ClientPortalQuestionTreeAnswer[] = [];\r\n\r\n get RootQuestion(): ClientPortalQuestionTreeQuestion {\r\n return this.Questions.find(x => x.IsRootQuestion);\r\n }\r\n\r\n // reactive tree items\r\n IsChecked?: boolean;\r\n IsHidden?: boolean;\r\n IsDisabled?: boolean;\r\n IsSelectionDisabled?: boolean;\r\n IsEditingDisabled?: boolean;\r\n IsTree: boolean = true;\r\n Url?: string;\r\n\r\n get Children(): ClientPortalQuestionTreeQuestion[] {\r\n return this.Questions;\r\n }\r\n\r\n constructor(o?: IClientPortalQuestionTree) {\r\n if (!o) {\r\n return;\r\n }\r\n this.Id = o.Id;\r\n this.Slug = o.Slug;\r\n this.Code = o.Code;\r\n this.Label = o.Label;\r\n this.IsActive = o.IsActive;\r\n this.DateClientPortalEnd = o.DateClientPortalEnd;\r\n this.DateClientPortalStart = o.DateClientPortalStart;\r\n this.Order = o.Order;\r\n this.RootQuestionId = o.RootQuestionId;\r\n this.ClientPortalLabel = o.ClientPortalLabel;\r\n this.Answers = (o.Answers ?? []).map(x => new ClientPortalQuestionTreeAnswer(x));\r\n this.Questions = (o.Questions ?? []).map(x => new ClientPortalQuestionTreeQuestion(x,\r\n this.getAnswers(x)));\r\n this.Answers.filter(x => !!x.NextQuestionId)\r\n .forEach(x => x.NextQuestion = this.getQuestion(x.NextQuestionId));\r\n }\r\n\r\n // a tree can be considered valid if it has a valid root question\r\n isValid(): boolean {\r\n const rootQuestionIsValid = !!this.RootQuestion?.isValid();\r\n\r\n if (!rootQuestionIsValid) {\r\n console.warn('Tree Is Invalid', 'Missing or Invalid Root Question', this);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n generateUrls(urlParams: IClientPortalUrlParameters) {\r\n this.Url = ClientPortalQuestionTree.generateUrlForSlug(urlParams, this.Slug);\r\n this.Questions.forEach(q => q.Url = ClientPortalQuestionTree.generateUrlForSlug(urlParams, q.Slug));\r\n this.Answers.forEach(q => q.Url = ClientPortalQuestionTree.generateUrlForSlug(urlParams, q.Slug));\r\n }\r\n\r\n static generateUrlForSlug(urlParams: IClientPortalUrlParameters, slug: string) {\r\n return [\r\n urlParams.ClientPortalBaseUrl,\r\n 'clientportal',\r\n urlParams.FinancialInstitutionIdentifier,\r\n 'question-trees',\r\n slug\r\n ].join('/').concat('?Brand=',urlParams.BrandCode);\r\n }\r\n\r\n\r\n getAnswers(question: IClientPortalQuestionTreeQuestion): ClientPortalQuestionTreeAnswer[] {\r\n return this.Answers\r\n .sort((a, b) => a.Order - b.Order)\r\n .filter(a => a.QuestionId === question.Id);\r\n }\r\n\r\n getNextQuestion(answer: IClientPortalQuestionTreeAnswer): ClientPortalQuestionTreeQuestion {\r\n return this.Questions.find(q => q.Id === answer.NextQuestionId);\r\n }\r\n\r\n getQuestion(id: string): ClientPortalQuestionTreeQuestion {\r\n return this.Questions.find(q => q.Id === id);\r\n }\r\n\r\n getParentForAnswer(answer: IClientPortalQuestionTreeAnswer): IClientPortalQuestionTreeQuestion {\r\n return this.Questions.find(q => q.Id === answer.QuestionId);\r\n }\r\n\r\n getParentForQuestion(question: IClientPortalQuestionTreeQuestion): IClientPortalQuestionTreeAnswer {\r\n return this.Answers.find(a => a.NextQuestionId === question.Id);\r\n }\r\n\r\n getBreadCrumbsForQuestion(question: IClientPortalQuestionTreeQuestion, existingCrumbs: IBreadCrumb[] = []): IBreadCrumb[] {\r\n const answer = this.getParentForQuestion(question);\r\n if (answer) {\r\n const crumb: IBreadCrumb = {\r\n id: answer.Slug,\r\n label: answer.Text,\r\n provideLink: false\r\n };\r\n return this.getBreadCrumbsForAnswer(answer, [crumb, ...existingCrumbs]);\r\n }\r\n return [...existingCrumbs];\r\n }\r\n\r\n getBreadCrumbsForAnswer(answer: IClientPortalQuestionTreeAnswer, existingCrumbs: IBreadCrumb[] = []): IBreadCrumb[] {\r\n const question = this.getParentForAnswer(answer);\r\n if (question) {\r\n const crumb: IBreadCrumb = {\r\n label: question.Text,\r\n id: question.Slug,\r\n provideLink: true\r\n };\r\n return this.getBreadCrumbsForQuestion(question, [crumb, ...existingCrumbs]);\r\n }\r\n return [...existingCrumbs];\r\n }\r\n}\r\n","export class ClientPortalAppSettings {\r\n public static API_BASE_URL: string = localStorage.getItem('client-portal.apiurl');\r\n public static storageKeySession: string = 'client-portal.session';\r\n public static storageKeyFiName: string = 'client-portal.fi-name';\r\n public static storageKeyUiVersion: string = 'client-portal.uiReleaseVersionDescription';\r\n public static storageKeyEmail: string = 'client-portal.email';\r\n public static storageKeyStatusUrl: string = 'client-portal.statusurl';\r\n public static storageKeySessionWarning: string = 'client-portal.ClientPortalSessionTimeoutWarning';\r\n public static storageKeyTheme: string = 'client-portal.theme';\r\n public static storageKeyLogo: string = 'client-portal.logo';\r\n public static storageKeyContactName: string = 'client-portal.ClientPortalLoginContactName';\r\n public static storageKeyContactEmail: string = 'client-portal.ClientPortalLoginContactEmail';\r\n public static storageKeyContactPhone: string = 'client-portal.ClientPortalLoginContactPhone'; \r\n public static storageKeyFinancialInstitutionName: string = 'client-portal.FinancialInstitutionName'; \r\n public static storageKeyIsSamlLogin: string = 'client-portal.IsSamlLogin';\r\n public static storageKeySamlToken: string = 'client-portal.saml-token';\r\n public static storageKeySamlLoginUrl: string = 'client-portal.saml-login-url';\r\n public static storageKeyConfigurableText: string = 'client-portal.configurableText';\r\n public static storageKeyGrossAnnualRevenueLimit: string = 'client-portal.gross-annual-revenue-limit';\r\n public static storageExistingBusinessPrefill: string = 'client-portal.ExistingBusinessPrefill'\r\n public static storageKeyBrandCode: string = 'client-portal.brand-code';\r\n public static storageKeyBorrowerReplacementLabel: string = 'client-portal.borrower-replacement-label';\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { ClientPortalBaseService } from \"../client-portal-base.service\";\r\nimport { ClientPortalUserModel } from \"../auth/user.api.service\";\r\nimport { ClientPortalAppSettings } from \"../app.globals\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\n@Injectable()\r\n\r\nexport class ClientPortalConfigurationManager extends ClientPortalBaseService {\r\n\r\n public user: ClientPortalUserModel = null;\r\n private _configurableText: { [key: string]: string[] };\r\n\r\n load(forceRefresh: boolean = false): Observable<{ [key: string]: string[] }> {\r\n return new Observable<{ [key: string]: string[] }>(subscription => {\r\n if (!this._configurableText && !forceRefresh) {\r\n const rawJson = localStorage.getItem(ClientPortalAppSettings.storageKeyConfigurableText);\r\n if (rawJson) {\r\n this._configurableText = JSON.parse(rawJson);\r\n subscription.next(this._configurableText);\r\n subscription.complete();\r\n }\r\n }\r\n\r\n if ((this._configurableText == undefined) && forceRefresh) {\r\n this.getFromApi()\r\n .subscribe({\r\n next: configurableText => {\r\n this._configurableText = configurableText;\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyConfigurableText,\r\n JSON.stringify(configurableText));\r\n subscription.next(this._configurableText);\r\n subscription.complete();\r\n },\r\n error: error => {\r\n subscription.error(error);\r\n subscription.complete();\r\n }\r\n });\r\n } else if (this._configurableText) {\r\n subscription.next(this._configurableText);\r\n subscription.complete();\r\n } else {\r\n subscription.error();\r\n subscription.complete();\r\n }\r\n });\r\n }\r\n\r\n reload(): Observable<{ [key: string]: string[] }> {\r\n return this.load(true);\r\n }\r\n\r\n private getFromApi(): Observable<{ [key: string]: string[] }> {\r\n const financialInstitutionName = localStorage.getItem(ClientPortalAppSettings.storageKeyFiName);\r\n const apiUrl = `${this.clientPortalAPI}users/GetConfigurableText/${financialInstitutionName}`;\r\n return this.get<{ [key: string]: string[] }>(apiUrl);\r\n }\r\n\r\n getText(key: string): Observable {\r\n return this.load(true)\r\n .pipe(\r\n map(x => ((x ?? {}))[key].toString() ?? '')\r\n );\r\n\r\n }\r\n\r\n async getTutorialWelcomeTextAsync(): Promise {\r\n return await this.getText('CP_WELCOME_TUTORIAL')\r\n .toPromise();\r\n }\r\n\r\n async getTutorialChatTextAsync(): Promise {\r\n return await this.getText('CP_MESSAGE_TUTORIAL')\r\n .toPromise();\r\n }\r\n\r\n async getTutorialDocumentTextAsync(): Promise {\r\n return await this.getText('CP_DOCUMENT_TUTORIAL')\r\n .toPromise();\r\n }\r\n\r\n async getTutorialMessageTextAsync(): Promise {\r\n return await this.getText('CP_STARTING_TUTORIAL')\r\n .toPromise();\r\n }\r\n\r\n async getClientAcceptanceTextAsync(): Promise {\r\n return await this.getText('CP_CLIENT_ACCEPTANCE')\r\n .toPromise();\r\n }\r\n}\r\n\r\n","import { ClientPortalBaseService } from \"../../client-portal-base.service\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class LandingViewService extends ClientPortalBaseService {\r\n\r\n public applicationCounts: ApplicationCountModel = new ApplicationCountModel();\r\n\r\n public getApplicationCounts(clientId: string): Observable {\r\n const url = `${this.clientPortalAPI}ActionItems/GetApplicationCounts/${clientId}`;\r\n return this.get(url);\r\n }\r\n}\r\n\r\nexport class ApplicationCountModel {\r\n IncompleteApplicationCount: number = 0;\r\n SubmittedApplicationCount: number = 0;\r\n CompletedApplicationCount: number = 0;\r\n}","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { IBhControl } from \"@shared/controls/helpers/bh-control.class\";\r\nimport { FormControl, FormGroup, AbstractControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\n\r\n@Component({\r\n selector: 'bh-cp-checkbox',\r\n templateUrl: 'bh-checkbox.component.html',\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule]\r\n})\r\nexport class CheckboxComponent implements OnInit {\r\n @Input() bhControl: IBhControl;\r\n @Input() form: FormGroup;\r\n @Output() onValueChanged: EventEmitter = new EventEmitter();\r\n formControl: AbstractControl;\r\n\r\n ngOnInit() {\r\n if (!this.bhControl) {\r\n console.warn('Checkbox created without providing bhControl input!');\r\n return;\r\n }\r\n if (!this.form) {\r\n console.warn('Your control is bound to a non-existant form object, ex: [form]=\"IDontExist\" on a ' + this.constructor.toString().replace('function ', ''));\r\n return;\r\n }\r\n\r\n const checkboxControl = new FormControl(this.bhControl.data.value, this.bhControl.validators);\r\n this.form.addControl(this.bhControl.key, checkboxControl);\r\n this.formControl = this.form.get(this.bhControl.key);\r\n\r\n this.formControl.valueChanges\r\n .subscribe({\r\n next: value => this.onValueChanged.emit(value)\r\n });\r\n }\r\n}\r\n","
\r\n
\r\n \r\n \r\n
\r\n
\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { NotificationService, INotificationOptions} from '@shared/services/notification.service';\r\n\r\n@Component({\r\n selector: 'bh-header',\r\n templateUrl: 'bh-header.component.html',\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule]\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n @Input() form: FormGroup;\r\n @Input() title: string = '';\r\n @Input() deleteMessage: string = 'Are you sure you want to delete?'\r\n @Input() canDelete: boolean = false;\r\n @Output() save: EventEmitter = new EventEmitter();\r\n @Output() close: EventEmitter = new EventEmitter();\r\n @Output() delete: EventEmitter = new EventEmitter();\r\n\r\n constructor(\r\n private notificationService: NotificationService,\r\n private location: Location) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n get canSave(): boolean {\r\n return this.hasChanges && this.isValid;\r\n }\r\n\r\n get hasChanges(): boolean {\r\n let isChanged: boolean = (this.form.dirty === true);\r\n return isChanged;\r\n }\r\n get isValid(): boolean {\r\n let formIsValid: boolean = (this.form.valid === true);\r\n return formIsValid;\r\n }\r\n\r\n onSave() {\r\n this.save.emit(null);\r\n }\r\n\r\n async onClose() {\r\n if (this.hasChanges) {\r\n const notificationOption: INotificationOptions = { okTitle: 'Continue' };\r\n const response = await this.notificationService.confirmUnsaved('You have unsaved changes.', false, notificationOption);\r\n if (!response.ok) {\r\n return;\r\n }\r\n }\r\n this.close.emit();\r\n setTimeout(() => {\r\n this.location.back();\r\n }, 0);\r\n }\r\n\r\n onDelete() {\r\n this.form.markAsPristine();\r\n this.notificationService.confirm(() => this.delete.emit(close.bind(this)), this.deleteMessage);\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n

{{title}}

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { map, tap } from \"rxjs/operators\";\r\nimport { ClientPortalBaseService } from \"../client-portal-base.service\";\r\nimport { PasswordComplexityDto } from \"@shared/common/admin/users/password-complexity.model\";\r\nimport { UserProperty } from \"./onboarding/models/user-property.model\";\r\n\r\n@Injectable()\r\nexport class UserService extends ClientPortalBaseService {\r\n public user: ClientPortalUserModel = null;\r\n\r\n public getClients(): Observable {\r\n let url = this.clientPortalAPI + 'users/GetClients';\r\n return this.get(url).pipe(\r\n map(x => x.Clients)\r\n );\r\n }\r\n\r\n public registerDevice(rememberDevice: boolean, fingerprint: string) {\r\n if (!rememberDevice)\r\n return this.newObserver;\r\n\r\n let url = this.clientPortalAPI + 'Users/RegisterDeviceAsync';\r\n\r\n return this.post(url, JSON.stringify(fingerprint));\r\n }\r\n\r\n public getUser(): Observable {\r\n let url = this.clientPortalAPI + 'users/GetUser';\r\n return this.get(url)\r\n .pipe(\r\n map(x => Object.assign(new ClientPortalUserModel(), x)),\r\n tap(x => this.user = x)\r\n );\r\n }\r\n\r\n public getUserProfileDetail(): Observable {\r\n let apiUrl: string = this.clientPortalAPI + 'Users/GetUserProfileDetail';\r\n\r\n return this.get(apiUrl)\r\n .pipe(\r\n map(x => {\r\n let result = Object.assign(new ClientPortalUserProfileDetailModel(), x)\r\n\r\n result.Devices = result.Devices.map(y => Object.assign(new ClientPortalUserDeviceModel(), y));\r\n\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n public saveUser(cpUser: ProfileModel): Observable {\r\n let apiUrl: string = this.clientPortalAPI + 'users/SaveUser';\r\n\r\n return this.post(apiUrl, JSON.stringify(cpUser))\r\n .pipe(\r\n tap(x => {\r\n let updatedUser = Object.assign(new ClientPortalUserModel(), this.user);\r\n\r\n updatedUser.FullName = x.FullName;\r\n\r\n this.user = updatedUser;\r\n })\r\n );\r\n }\r\n\r\n public removeUserDevice(deviceId: string) {\r\n let apiUrl: string = this.clientPortalAPI + `users/RemoveUserDevice/${deviceId}`;\r\n\r\n return this.get(apiUrl);\r\n }\r\n\r\n public updateDeviceName(deviceId: string, deviceName: string) {\r\n let apiUrl: string = this.clientPortalAPI + `users/UpdateDeviceName/${deviceId}`;\r\n\r\n return this.post(apiUrl, JSON.stringify(deviceName));\r\n }\r\n\r\n public userProperties(): Observable {\r\n const url = `${this.clientPortalAPI}UserProperty/GetUserProperties`;\r\n return this.get(url);\r\n }\r\n\r\n public saveTutorial(tutorialKey: string): Observable {\r\n const url = `${this.clientPortalAPI}UserProperty/SaveUserTutorial/${tutorialKey}`;\r\n return this.get(url);\r\n }\r\n\r\n public getClientPortalWhatToDo(samlToken: string): Observable {\r\n const apiUrl: string = `${this.clientPortalAPI}users/GetClientPortalWhatToDo`;\r\n\r\n return this.post(apiUrl, JSON.stringify(samlToken));\r\n }\r\n\r\n public resetTutorials(): Observable {\r\n const url = `${this.clientPortalAPI}UserProperty/ResetTutorials`;\r\n return this.get(url);\r\n }\r\n}\r\n\r\nexport class GetClientsResponse {\r\n Clients: Client[] = [];\r\n}\r\n\r\nexport class Client {\r\n Id: string = '';\r\n FullName: string = '';\r\n ActionCount: number = 0;\r\n IsIndividual: boolean;\r\n Permissions: string[] = [];\r\n}\r\n\r\nexport class ClientPortalUserModel {\r\n Id: string = null;\r\n ClientId: string = null;\r\n FullName: string = null;\r\n CustomTheme: string = null;\r\n Base64Logo: string = null;\r\n BorrowerReplacementLabel: string = null;\r\n ChangePasswordMessage: string = null;\r\n FinancialInstitutionName: string = null;\r\n FinancialInstitutionIdentifier: string = null;\r\n SessionTimeoutWarning: string;\r\n EnableApplications: boolean;\r\n EnableConfigurableApplications: boolean;\r\n IndividualClientTypeURL: string;\r\n SmallBusinessApplicationURL: string;\r\n EnableOnboardingTutorials: boolean;\r\n ClientPortalLoginContactName: string;\r\n ClientPortalLoginContactEmail: string;\r\n ClientPortalLoginContactPhone: string;\r\n SamlLoginUrl: string = null;\r\n MaxFileSizeToUploadInKB: number = 76800;\r\n SBLRGrossAnnualRevenueLimit: number;\r\n BrandCode: string;\r\n}\r\n\r\nexport class ClientPortalUserProfileDetailModel {\r\n Id: string = null;\r\n FullName: string = null;\r\n Email: string = null;\r\n Devices: ClientPortalUserDeviceModel[] = [];\r\n IsMfaEnabled: boolean = false;\r\n EnableOnboardingTutorials: boolean = false;\r\n PasswordComplexityInfo: PasswordComplexityDto = new PasswordComplexityDto();\r\n}\r\n\r\nexport interface ClientPortalInitialization {\r\n ColorTheme: string;\r\n Base64Logo: string;\r\n IsMfaEnabled: boolean;\r\n FinancialInstitutionName: string;\r\n SessionTimeoutWarning: string;\r\n EnableApplications: string;\r\n EnableConfigurableApplications: string;\r\n HasClientPortalEnabled: boolean;\r\n ClientPortalLoginContactPhone: string;\r\n ExistingBusinessPrefill: boolean;\r\n}\r\n\r\nexport class ClientPortalUserDeviceModel {\r\n Id: string = null;\r\n DeviceName: string = null;\r\n LastLoginDate: Date = null;\r\n IsEditing: boolean = false;\r\n}\r\n\r\nexport class ProfileModel {\r\n FullName: string = null;\r\n Email: string = null;\r\n CurrentPassword: string = null;\r\n NewPassword: string = null;\r\n PasswordConfirm: string = null;\r\n IsSamlLogin: boolean = false;\r\n}\r\n\r\nexport class ClientPortalWhatToDo {\r\n Action: string = null;\r\n ClientId: string = null;\r\n Slug: string = null;\r\n}\r\n","import { EventEmitter, Injectable } from \"@angular/core\";\r\nimport { Client } from \"./auth/user.api.service\";\r\nimport { Observable, Subscription } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ClientContextService {\r\n\r\n public readonly onClientChanged: EventEmitter = new EventEmitter();\r\n public readonly onClientSwitchRequested: EventEmitter = new EventEmitter();\r\n public readonly onClientActionCountUpdated: EventEmitter = new EventEmitter();\r\n\r\n private _client: Client;\r\n set client(client: Client) {\r\n this._client = client;\r\n this.onClientChanged.emit(client);\r\n }\r\n\r\n get client(): Client {\r\n return this._client;\r\n }\r\n\r\n observable(): Observable {\r\n return new Observable((observer) => {\r\n if (this.client) {\r\n observer.next(this.client);\r\n observer.complete();\r\n }\r\n\r\n const subscription: Subscription = this.onClientChanged\r\n .subscribe(client => {\r\n observer.next(client);\r\n observer.complete();\r\n });\r\n\r\n return {\r\n unsubscribe() {\r\n subscription.unsubscribe();\r\n }\r\n };\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Moment } from \"moment\";\r\nimport * as moment from 'moment';\r\nimport { ClientPortalAppSettings } from \"./app.globals\";\r\nimport { AppFunctions } from \"../shared/app.functions\";\r\n\r\n@Injectable()\r\nexport abstract class ClientPortalBaseService {\r\n protected get clientPortalAPI(): string {\r\n return ClientPortalAppSettings.API_BASE_URL + 'clientportal/';\r\n }\r\n\r\n constructor(\r\n protected http: HttpClient) {\r\n }\r\n\r\n public static set loginResult(value: LoginResult) {\r\n if (value) {\r\n value.expires_at = moment.utc().add(value.expires_in, 'seconds');\r\n\r\n // this is tied to the session but needs to persist outside it\r\n if (value.financialInstitution) {\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyFiName, value.financialInstitution);\r\n }\r\n }\r\n localStorage.setItem(ClientPortalAppSettings.storageKeySession, JSON.stringify(value));\r\n }\r\n\r\n public static get loginResult(): LoginResult {\r\n let loginResultString = localStorage.getItem(ClientPortalAppSettings.storageKeySession);\r\n return JSON.parse(loginResultString) as LoginResult;\r\n }\r\n\r\n // this is a convenience, so everyone doesn't have to write this repeatedly\r\n protected newObserver = new Observable(observer => {\r\n observer.next();\r\n observer.complete();\r\n });\r\n\r\n get headers(): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n headers = headers.append('Content-Type', 'application/json');\r\n headers = headers.append('Accept', 'application/json');\r\n\r\n const brandCode = this.getBrandCode;\r\n if (!AppFunctions.IsNullOrWhiteSpace(brandCode)) {\r\n headers = headers.append('Brand-Code', brandCode);\r\n }\r\n\r\n if (this.isAuthenticated)\r\n headers = headers.append('Authorization', `Bearer ${ClientPortalBaseService.loginResult.access_token}`);\r\n\r\n return headers;\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return !!ClientPortalBaseService.loginResult?.access_token;\r\n }\r\n\r\n get isAuthenticatedAndNotExpired(): boolean {\r\n return this.isAuthenticated\r\n &&\r\n moment(ClientPortalBaseService.loginResult?.expires_at) > moment()\r\n }\r\n\r\n get getBrandCode(): string {\r\n return localStorage.getItem(ClientPortalAppSettings.storageKeyBrandCode);\r\n }\r\n\r\n protected getFile(url: string, customHeaders: HttpHeaders = null): Observable {\r\n let options = {\r\n headers: (customHeaders ? customHeaders : this.headers),\r\n observe: 'response' as 'body',\r\n responseType: 'blob' as 'json',\r\n };\r\n return this.http.get(url, options);\r\n }\r\n\r\n public buildUrl(url: string, params: {} = {}): string {\r\n const firstCharacter = url.includes('?') ? '&' : '?';\r\n const query = this.buildQueryString(params);\r\n return `${url}${firstCharacter}${query}`;\r\n }\r\n\r\n public buildQueryString(params: {} = {}) {\r\n return Object.getOwnPropertyNames(params)\r\n .filter(p => params[p] !== undefined && params[p] !== null)\r\n .map(p => {\r\n return {\r\n key: encodeURIComponent(p),\r\n value: encodeURIComponent(params[p] + '')\r\n };\r\n })\r\n .map(p => `${p.key}=${p.value}`)\r\n .join('&');\r\n }\r\n\r\n protected get(url: string, customHeaders: HttpHeaders = null, responseType: any = null): Observable {\r\n let options = { headers: (customHeaders ? customHeaders : this.headers), responseType: responseType };\r\n\r\n return this.http.get(url, options);\r\n }\r\n\r\n protected post(url: string, body: string, customHeaders: HttpHeaders = null): Observable {\r\n let options = { headers: (customHeaders ? customHeaders : this.headers) };\r\n\r\n return this.http.post(url, body, options);\r\n }\r\n}\r\n\r\nexport interface ILoginResult {\r\n access_token: string;\r\n expires_in: number;\r\n refresh_token: string;\r\n token_type: string;\r\n financialInstitution: string;\r\n expires_at: Moment;\r\n}\r\n\r\nexport class LoginResult {\r\n access_token: string = null;\r\n expires_in: number = null;\r\n refresh_token: string = null;\r\n token_type: string = null;\r\n financialInstitution: string = null;\r\n expires_at: Moment = null;\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport abstract class ErrorInterceptorBase implements HttpInterceptor {\r\n constructor() {\r\n }\r\n\r\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(req).pipe(\r\n catchError((responseError: HttpErrorResponse) => {\r\n if (this.canHandleError(req, responseError)) {\r\n return throwError(this.handleError(req, responseError));\r\n }\r\n\r\n // If we don't re-throw the error just like this 'return throwError(error);'.\r\n // Subscribers with 'error =>' won't get triggered.\r\n return throwError(responseError);\r\n }));\r\n }\r\n\r\n abstract canHandleError(req: HttpRequest, responseError: HttpErrorResponse): boolean;\r\n abstract handleError(req: HttpRequest, responseError: HttpErrorResponse): HttpErrorResponse;\r\n}\r\n","import { HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ErrorInterceptorBase } from './error-interceptor.base';\r\n\r\n@Injectable()\r\nexport class ClientPortalMFAErrorInterceptor extends ErrorInterceptorBase {\r\n\r\n constructor(private router: Router) {\r\n super();\r\n }\r\n\r\n public canHandleError(req: HttpRequest, responseError: HttpErrorResponse): boolean {\r\n let canHandle: boolean = false;\r\n\r\n if (req.body === null)\r\n return canHandle;\r\n\r\n let requestBody = req.body.split('&');\r\n let grantType = requestBody.find(x => x.includes('grant_type'));\r\n\r\n if (responseError.error && responseError.error.error && responseError.error.error === 'Your device is not registered.' &&\r\n grantType && grantType.split('=').slice(-1)[0] === 'ClientPortal')\r\n canHandle = true;\r\n\r\n return canHandle;\r\n }\r\n\r\n public handleError(req: HttpRequest, error: HttpErrorResponse): HttpErrorResponse {\r\n let requestBody = req.body.split('&');\r\n let financialInstitution = requestBody.find(x => x.includes('financialinstitution')).split('=').slice(-1)[0];\r\n\r\n this.router.navigate(['clientportal', 'multifactorauthentication', 'login', financialInstitution]);\r\n\r\n return error;\r\n }\r\n}","import { HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ErrorInterceptorBase } from './error-interceptor.base';\r\n\r\n@Injectable()\r\nexport class ClientPortalForcePasswordChangeModule extends ErrorInterceptorBase {\r\n\r\n constructor(private router: Router) {\r\n super();\r\n }\r\n\r\n public canHandleError(req: HttpRequest, responseError: HttpErrorResponse): boolean {\r\n let canHandle: boolean = false;\r\n\r\n if (req.body === null)\r\n return canHandle;\r\n\r\n let requestBody = req.body.split('&');\r\n let grantType = requestBody.find(x => x.includes('grant_type'));\r\n\r\n if (responseError.error && responseError.error.error && responseError.error.error === 'You must change your password before you can access the system.' &&\r\n grantType && grantType.split('=').slice(-1)[0] === 'ClientPortal')\r\n canHandle = true;\r\n\r\n return canHandle;\r\n }\r\n\r\n public handleError(req: HttpRequest, error: HttpErrorResponse): HttpErrorResponse {\r\n let requestBody = req.body.split('&');\r\n let financialInstitution = requestBody.find(x => x.includes('financialinstitution')).split('=').slice(-1)[0];\r\n let userName = requestBody.find(x => x.includes('username')).split('=').slice(-1)[0];\r\n\r\n this.router.navigate(['clientportal', 'forcepasswordchange', financialInstitution, decodeURIComponent(userName)]);\r\n\r\n return error;\r\n }\r\n}\r\n","import { HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ErrorInterceptorBase } from './error-interceptor.base';\r\nimport { ClientPortalAppSettings } from \"./app.globals\";\r\nimport { GUID } from '../shared/common/queries/query-definition/generate-guid.function';\r\n\r\n@Injectable()\r\nexport class ClientPortalUnauthorizedErrorInterceptor extends ErrorInterceptorBase {\r\n\r\n constructor(\r\n private router: Router\r\n ) {\r\n super();\r\n }\r\n\r\n public canHandleError(req: HttpRequest, responseError: HttpErrorResponse): boolean {\r\n let canHandle: boolean = false;\r\n\r\n if (responseError?.status === 401)\r\n canHandle = true;\r\n\r\n return canHandle;\r\n }\r\n\r\n public handleError(req: HttpRequest, error: HttpErrorResponse): HttpErrorResponse {\r\n error.error.Message = 'You have been logged out due to inactivity.';\r\n\r\n let returnUrl = null;\r\n let fi = null;\r\n if (this.router.url.includes('?fi=')) {\r\n const url = this.router.url.split('?fi=');\r\n returnUrl = url[0];\r\n fi = url[1];\r\n } \r\n let route = ['clientportal', 'forcedlogout'];\r\n\r\n if (this.router.url.includes(GUID.Empty)) {\r\n route = ['clientportal', 'login'];\r\n }\r\n \r\n const encodedUrl = this.setRedirection(route, returnUrl); \r\n this.setFinancialInstitution(route, fi); \r\n\r\n if (encodedUrl) {\r\n this.router.navigate(route, { queryParams: { returnUrl: encodedUrl } });\r\n }\r\n else {\r\n this.router.navigate(route); \r\n } \r\n\r\n if (this.router.url.includes(GUID.Empty)) {\r\n return;\r\n }\r\n else {\r\n return error;\r\n }\r\n\r\n }\r\n private setRedirection(route: string[], returnUrl: string): string {\r\n\r\n if (!returnUrl) {\r\n return null;\r\n }\r\n\r\n const encodedUrl = encodeURIComponent(returnUrl); \r\n route.splice(1);\r\n route.push('login');\r\n \r\n return encodedUrl;\r\n \r\n }\r\n private setFinancialInstitution(route: string[], urlFI: string) {\r\n let fi = localStorage.getItem(ClientPortalAppSettings.storageKeyFiName);\r\n if (!fi && !urlFI) {\r\n return; \r\n }\r\n if (urlFI) {\r\n fi = urlFI; \r\n } \r\n route.push(fi); \r\n \r\n }\r\n}\r\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\n// BH components\r\nimport { HeaderComponent } from '@client-portal/auth/shared/controls/bh-header.component';\r\nimport { AppInsightsInterceptor } from '@shared/app-insights.interceptor';\r\nimport { BasicSharedModule } from '@shared/basic-shared.module';\r\nimport { ErrorInterceptor } from '@shared/error.interceptor';\r\nimport { LoginService } from './login.service';\r\n\r\n// services\r\nimport { ClientPortalMFAErrorInterceptor } from './client-portal-mfa-error.interceptor';\r\nimport { ClientPortalForcePasswordChangeModule } from './client-portal-force-password-change-error.interceptor';\r\nimport { ClientPortalUnauthorizedErrorInterceptor } from './client-portal-unauthorized-error.interceptor';\r\nimport { WjInputModule } from \"@grapecity/wijmo.angular2.input\";\r\nimport { ModalCPRComponent } from \"./components/bh-cp-r-modal.component\";\r\nimport { CheckboxComponent } from './auth/shared/controls/bh-checkbox.component';\r\nimport { FooterComponent } from \"./footer/footer.component\";\r\nimport { DeviceFingerprintService } from \"../device-fingerprint.service\";\r\nimport { NavbarComponent } from \"./components/navbar/navbar.component\";\r\nimport { NotFoundComponent } from \"./not-found/not-found.component\";\r\nimport { TutorialComponent } from './auth/shared/components/tutorial.component';\r\nimport { TutorialTabComponent } from './auth/shared/components/tutorial-tab.component';\r\nimport {\r\n NewApplicationButtonComponent\r\n} from \"./auth/applications/new-application-button/new-application-button.component\";\r\nimport { ConfigurableClientPortalFooterComponent } from './footer/configurable-client-portal-footer.component';\r\nimport { ClientPortalFooterItemComponent } from './footer/client-portal-footer-item.component';\r\nimport { ClientPortalConfigurationManager } from './auth/client-portal-configuration-manager.api.service';\r\n\r\n@NgModule({\r\n imports: [\r\n BasicSharedModule,\r\n ReactiveFormsModule,\r\n WjInputModule,\r\n HeaderComponent,\r\n ModalCPRComponent,\r\n CheckboxComponent,\r\n FooterComponent,\r\n ConfigurableClientPortalFooterComponent,\r\n ClientPortalFooterItemComponent,\r\n NavbarComponent,\r\n NotFoundComponent,\r\n TutorialComponent,\r\n TutorialTabComponent,\r\n NewApplicationButtonComponent\r\n ],\r\n exports: [\r\n BasicSharedModule,\r\n WjInputModule,\r\n HeaderComponent,\r\n ModalCPRComponent,\r\n CheckboxComponent,\r\n FooterComponent,\r\n ConfigurableClientPortalFooterComponent,\r\n ClientPortalFooterItemComponent,\r\n NavbarComponent,\r\n NotFoundComponent,\r\n TutorialComponent,\r\n TutorialTabComponent,\r\n NewApplicationButtonComponent\r\n ],\r\n providers: [\r\n DeviceFingerprintService,\r\n LoginService,\r\n ClientPortalConfigurationManager,\r\n { provide: HTTP_INTERCEPTORS, useClass: AppInsightsInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: ClientPortalMFAErrorInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: ClientPortalForcePasswordChangeModule, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: ClientPortalUnauthorizedErrorInterceptor, multi: true }\r\n ],\r\n bootstrap: []\r\n})\r\nexport class ClientPortalCoreModule {\r\n}\r\n","import { ClientPortalBaseService } from \"./client-portal-base.service\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\r\nexport class ClientPortalIconApiService extends ClientPortalBaseService {\r\n\r\n getIconUrl(iconId: string, financialInstitutionName: string): string {\r\n return this.buildUrl(\r\n `${this.clientPortalAPI}Icons/${iconId}`,\r\n {\r\n financialInstitutionName\r\n }\r\n );\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ClientPortalBaseService } from \"./client-portal-base.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport {\r\n ClientPortalQuestionTree,\r\n IClientPortalQuestionTree\r\n} from \"../admin/client-portal/models/client-portal-question-tree.class\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\n@Injectable()\r\nexport class ClientPortalQuestionTreeApiService extends ClientPortalBaseService {\r\n\r\n getTrees(clientId: string): Observable> {\r\n return this.get>(this.buildUrl(`${this.clientPortalAPI}questiontrees`, {\r\n clientId\r\n }));\r\n }\r\n\r\n getTree(clientId: string, slug: string): Observable {\r\n return this.get(this.buildUrl(`${this.clientPortalAPI}questiontree/getbyslug/${slug}`, {\r\n clientId\r\n })).pipe(\r\n map(tree => new ClientPortalQuestionTree(tree))\r\n );\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class ClientPortalAnonQuestionTreeApiService extends ClientPortalBaseService {\r\n\r\n getTrees(financialInstitutionName: string): Observable> {\r\n return this.get>(this.buildUrl(`${this.clientPortalAPI}questiontrees/anon`, {\r\n financialInstitutionName\r\n }));\r\n }\r\n\r\n getTree(financialInstitutionName: string, slug: string): Observable {\r\n return this.get(this.buildUrl(`${this.clientPortalAPI}questiontree/anon/getbyslug/${slug}`, {\r\n financialInstitutionName\r\n })).pipe(\r\n map(tree => new ClientPortalQuestionTree(tree))\r\n );\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport abstract class ClientPortalUrlService {\r\n\r\n abstract getApplicationUrl(context: string, applicationId: string): string[];\r\n\r\n abstract getQuestionUrl(context: string, slug: string): string[];\r\n\r\n abstract getLocationEligibilityUrl(context: string, applicationId: string): string[];\r\n}\r\n\r\n@Injectable()\r\nexport class PreviewClientPortalUrlService extends ClientPortalUrlService {\r\n getApplicationUrl(financialInstitutionIdentifier: string, applicationId: string): string[] {\r\n return ['/clientportal', 'preview', financialInstitutionIdentifier, 'applications', applicationId];\r\n }\r\n\r\n getLocationEligibilityUrl(financialInstitutionIdentifier: string, slug: string): string[] {\r\n return ['/clientportal', 'preview', financialInstitutionIdentifier, 'location-eligibility', slug];\r\n }\r\n\r\n getQuestionUrl(financialInstitutionIdentifier: string, applicationId: string): string[] {\r\n return ['/clientportal', 'preview', financialInstitutionIdentifier, 'question-trees', applicationId];\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class AnonClientPortalUrlService extends ClientPortalUrlService {\r\n getApplicationUrl(financialInstitutionIdentifier: string, applicationId: string): string[] {\r\n return ['/clientportal', financialInstitutionIdentifier, 'applications', applicationId];\r\n }\r\n\r\n getLocationEligibilityUrl(financialInstitutionIdentifier: string, slug: string): string[] {\r\n return ['/clientportal', financialInstitutionIdentifier, 'location-eligibility', slug];\r\n }\r\n\r\n getQuestionUrl(financialInstitutionIdentifier: string, applicationId: string): string[] {\r\n return ['/clientportal', financialInstitutionIdentifier, 'question-trees', applicationId];\r\n }\r\n}\r\n","
\r\n
\r\n @if (financialInstitutionIdentifier) {\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n
\r\n

404

\r\n

Sorry, the page you are looking for might have been removed or the\r\n address is incorrect.

\r\n @if (clientId) {\r\n \r\n Return Home\r\n \r\n }\r\n
\r\n
\r\n
\r\n @if (financialInstitutionName) {\r\n \r\n }\r\n
\r\n
\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { ClientPortalCoreModule } from './client-portal-core.module';\r\nimport { NotFoundComponent } from \"./not-found/not-found.component\";\r\nimport { FiApiService } from \"./fi-api.service\";\r\n\r\nexport const routes: Routes = [\r\n {\r\n path: '404',\r\n component: NotFoundComponent\r\n },\r\n {\r\n path: 'login',\r\n loadChildren: () => import('../../app/client-portal/login.module').then(x => x.LoginModule)\r\n },\r\n {\r\n path: 'saml-login',\r\n loadChildren: () => import('../../app/client-portal/saml-login.module').then(x => x.SamlLoginModule)\r\n },\r\n {\r\n path: 'logout',\r\n loadChildren: () => import('../../app/client-portal/logout.module').then(x => x.LogoutModule)\r\n },\r\n {\r\n path: 'forcedlogout',\r\n loadChildren: () => import('../../app/client-portal/logout.module').then(x => x.LogoutModule)\r\n },\r\n {\r\n path: 'auth',\r\n loadChildren: () => import('./auth/authorized.module').then(x => x.AuthorizedModule)\r\n },\r\n {\r\n path: 'externalchangepassword',\r\n loadChildren: () => import('../../app/client-portal/external-change-password.module').then(x => x.ExternalChangePasswordModule)\r\n },\r\n {\r\n path: 'multifactorauthentication',\r\n loadChildren: () => import('../../app/client-portal/multi-factor-authentication.module').then(x => x.MultiFactorAuthenticationModule)\r\n },\r\n {\r\n path: 'forcepasswordchange',\r\n loadChildren: () => import('../../app/client-portal/force-password-change.module').then(x => x.ForcePasswordChangeModule)\r\n },\r\n {\r\n path: 'preview',\r\n loadChildren: () => import('./preview/preview.module').then(x => x.PreviewModule)\r\n },\r\n {\r\n path: ':shortcode',\r\n loadChildren: () => import('./anonymous/shortcode.module').then(x => x.ShortCodeModule)\r\n },\r\n {\r\n path: '',\r\n loadChildren: () => import('./anonymous/anonymous.module').then(x => x.AnonymousModule)\r\n },\r\n {\r\n path: '**',\r\n redirectTo: '404'\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule.forChild(routes),\r\n ClientPortalCoreModule\r\n ],\r\n exports: [],\r\n declarations: [],\r\n providers: [\r\n FiApiService\r\n ]\r\n})\r\nexport class ClientPortalModule {\r\n}\r\n","import { Component } from \"@angular/core\";\r\nimport { FiApiService } from \"../fi-api.service\";\r\nimport { ActivatedRoute, RouterLink } from \"@angular/router\";\r\nimport { UserService } from \"../auth/user.api.service\";\r\nimport { ClientPortalAppSettings } from \"../app.globals\";\r\nimport { ClientContextService } from \"../client-context.service\";\r\nimport { ComponentBase } from \"../../shared/components/component-base\";\r\nimport { FooterComponent } from \"../footer/footer.component\";\r\nimport { NavbarComponent } from \"../components/navbar/navbar.component\";\r\n\r\n\r\n@Component({\r\n selector: 'not-found',\r\n templateUrl: 'not-found.component.html',\r\n styleUrls: ['not-found.component.css'],\r\n providers: [FiApiService, UserService],\r\n standalone: true,\r\n imports: [\r\n NavbarComponent,\r\n RouterLink,\r\n FooterComponent\r\n],\r\n})\r\n\r\nexport class NotFoundComponent extends ComponentBase {\r\n\r\n financialInstitutionIdentifier: string;\r\n financialInstitutionName: string;\r\n clientId: string;\r\n brandCode: string;\r\n constructor(\r\n private readonly route: ActivatedRoute,\r\n private readonly fiApiService: FiApiService,\r\n private readonly clientContextService: ClientContextService\r\n ) {\r\n super()\r\n }\r\n\r\n ngOnInit() {\r\n this.financialInstitutionIdentifier = localStorage.getItem(ClientPortalAppSettings.storageKeyFiName);\r\n this.clientContextService.observable()\r\n .subscribe({\r\n next: (client) => this.clientId = client?.Id\r\n });\r\n this.brandCode = this.getValueFromQueryString(this.route, 'Brand')\r\n this.fiApiService.getFIInformation(this.financialInstitutionIdentifier, this.brandCode)\r\n .subscribe({\r\n next: fiInfo => {\r\n this.financialInstitutionName = fiInfo.FinancialInstitutionName;\r\n }\r\n });\r\n }\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n @if (modalTitle) {\r\n
\r\n
\r\n
\r\n

{{modalTitle}}

\r\n
\r\n
\r\n @if (showCloseOptions) {\r\n \r\n }\r\n
\r\n
\r\n
\r\n }\r\n
\r\n \r\n
\r\n @if (showFooter) {\r\n
\r\n \r\n @if (showCloseOptions) {\r\n \r\n }\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Input, Output, EventEmitter, OnInit, ViewChild } from '@angular/core';\r\n\r\nimport { LoadingRComponent } from '../../shared/controls/reactive/bh-r-loading.component';\r\n\r\n@Component({\r\n selector: 'bh-cp-r-modal',\r\n templateUrl: 'bh-cp-r-modal.component.html',\r\n standalone: true,\r\n imports: [LoadingRComponent]\r\n})\r\nexport class ModalCPRComponent implements OnInit {\r\n @Input() modalTitle: string = '';\r\n @Input() modalHeight: number;\r\n @Input() closeBtnTitle: string = 'Close';\r\n @Input() showFooter: boolean = true;\r\n @Input() size: 'small' | 'medium' | 'large' | 'xlarge' = \"small\";\r\n @Input() isLoading: boolean = false;\r\n @Input() showCloseOptions: boolean = true;\r\n @Output() close: EventEmitter = new EventEmitter();\r\n @ViewChild('modalBody', { static: true }) private modalBody;\r\n private viewHeight: number;\r\n private docHeight: number;\r\n isAutoHeight: boolean = false;\r\n isOpen: boolean = false;\r\n\r\n ngOnInit() {\r\n }\r\n\r\n hide() {\r\n this.isOpen = false;\r\n this.close.emit(this);\r\n }\r\n\r\n show() {\r\n this.modalBody.nativeElement.scrollTop = 0;\r\n this.isOpen = true;\r\n this.viewHeight = this.modalBody.nativeElement.offsetHeight;\r\n this.docHeight = document.documentElement.clientHeight;\r\n }\r\n}\r\n","\r\n","import { ComponentBase } from \"shared/components/component-base\";\r\nimport { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { Client, ClientPortalUserModel, UserService } from \"../../auth/user.api.service\";\r\nimport { ClientContextService } from \"../../client-context.service\";\r\nimport { ActivatedRoute, Router, RouterLink, RouterLinkActive } from \"@angular/router\";\r\nimport { forkJoin } from \"rxjs\";\r\nimport { ClientPortalAppSettings } from \"../../app.globals\";\r\nimport { FeatureFlags } from \"@models/feature-flags.enum\";\r\nimport { LoginService } from \"../../login.service\";\r\nimport { ApplicationCountModel, LandingViewService } from \"../../auth/landing-view/action-center.api.service\";\r\nimport { ClientPortalQuestionTreeApiService } from \"../../client-portal-question-tree-api.service\";\r\nimport { IClientPortalQuestionTree } from \"admin/client-portal/models/client-portal-question-tree.class\";\r\n\r\n\r\n@Component({\r\n selector: 'bh-cp-navbar',\r\n templateUrl: 'navbar.component.html',\r\n providers: [LandingViewService, ClientPortalQuestionTreeApiService],\r\n standalone: true,\r\n imports: [RouterLinkActive, RouterLink]\r\n})\r\nexport class NavbarComponent extends ComponentBase implements OnInit {\r\n\r\n clients: Client[] = [];\r\n questionTrees: IClientPortalQuestionTree[];\r\n applicationCounts: ApplicationCountModel = new ApplicationCountModel();\r\n\r\n hasViewItemPermission: boolean = false;\r\n hasViewMessagePermission: boolean = false;\r\n hasViewApplicationPermission: boolean = false;\r\n hasEditApplicationPermission: boolean = false;\r\n applicationUrl: string;\r\n loading: boolean = true;\r\n showMobileMenu: boolean = false;\r\n\r\n @Input() financialInstitutionIdentifier: string;\r\n @Output() onShouldSetClient: EventEmitter = new EventEmitter();\r\n\r\n private _user: ClientPortalUserModel;\r\n get user(): ClientPortalUserModel {\r\n return this._user;\r\n }\r\n\r\n set user(user: ClientPortalUserModel) {\r\n this._user = user;\r\n NavbarComponent.configureTheme(user);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyTheme, user.CustomTheme);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyLogo, user.Base64Logo);\r\n localStorage.setItem(FeatureFlags.ClientPortalApplications, `${user.EnableApplications}`);\r\n localStorage.setItem(FeatureFlags.ConfigurableClientPortalApplications, `${user.EnableConfigurableApplications}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeySessionWarning, user.SessionTimeoutWarning);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyContactName, `${user.ClientPortalLoginContactName}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyContactEmail, `${user.ClientPortalLoginContactEmail}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyContactPhone, `${user.ClientPortalLoginContactPhone}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyFinancialInstitutionName, `${user.FinancialInstitutionName}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeySamlLoginUrl, `${user.SamlLoginUrl}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyGrossAnnualRevenueLimit, `${user.SBLRGrossAnnualRevenueLimit}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyBorrowerReplacementLabel, `${user.BorrowerReplacementLabel}`);\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyBrandCode, `${user.BrandCode}`);\r\n }\r\n\r\n private _selectedClient: Client = null;\r\n get selectedClient(): Client {\r\n return this._selectedClient;\r\n }\r\n\r\n set selectedClient(client: Client) {\r\n this._selectedClient = client;\r\n this.clientContextService.client = client;\r\n this.hasViewItemPermission = client.Permissions.includes('VIEW_ITEMS');\r\n this.hasViewMessagePermission = client.Permissions.includes('VIEW_MESSAGES');\r\n this.hasViewApplicationPermission = client.Permissions.includes('VIEW_APPLICATIONS');\r\n this.hasEditApplicationPermission = client.Permissions.includes('EDIT_APPLICATIONS');\r\n this.updateApplicationCounts();\r\n }\r\n\r\n constructor(private readonly clientContextService: ClientContextService,\r\n private readonly router: Router,\r\n private readonly actionCenterService: LandingViewService,\r\n private readonly loginService: LoginService,\r\n private readonly route: ActivatedRoute,\r\n private readonly userService: UserService,\r\n private readonly questionTreeService: ClientPortalQuestionTreeApiService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n const params = this.route.snapshot.paramMap;\r\n this.reload(params.get('clientId'));\r\n this.clientContextService.onClientSwitchRequested\r\n .subscribe(clientId => {\r\n this.reload(clientId);\r\n });\r\n }\r\n\r\n reload(clientId: string) {\r\n if (!this.userService.isAuthenticatedAndNotExpired) {\r\n this.loading = false;\r\n return;\r\n }\r\n\r\n forkJoin({\r\n clients: this.userService.getClients(),\r\n user: this.userService.getUser()\r\n }).subscribe({\r\n next: ({ clients, user }) => {\r\n this.clients = clients;\r\n this.user = user;\r\n this.selectedClient = this.clients.find(c => c.Id === clientId) ?? clients[0];\r\n\r\n // update the url if needed to have the proper client id\r\n if (clientId !== this.selectedClient.Id) {\r\n this.onShouldSetClient.emit(this.selectedClient);\r\n }\r\n\r\n // select the proper application url\r\n if (this.selectedClient?.IsIndividual) {\r\n this.applicationUrl = user.IndividualClientTypeURL;\r\n } else {\r\n this.applicationUrl = user.SmallBusinessApplicationURL;\r\n }\r\n\r\n this.questionTreeService.getTrees(this.selectedClient.Id)\r\n .subscribe({\r\n next: trees => this.questionTrees = trees\r\n });\r\n\r\n this.clientContextService.onClientActionCountUpdated\r\n .subscribe(actionCount => {\r\n this.selectedClient.ActionCount = actionCount;\r\n });\r\n\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n\r\n async onClientChanged(client: Client) {\r\n this.selectedClient = client;\r\n await this.navigateToHome();\r\n }\r\n\r\n async logout() {\r\n const financialInstitution = this.loginService.logout() || ''; // empty string to avoid an angular routing crash\r\n await this.router.navigate(['clientportal', 'logout', financialInstitution]);\r\n }\r\n\r\n private async navigateToHome() {\r\n await this.router.navigate(['clientportal', 'auth', this.selectedClient.Id, 'home']);\r\n }\r\n\r\n private updateApplicationCounts() {\r\n this.actionCenterService.getApplicationCounts(this.selectedClient.Id)\r\n .subscribe((applicationCounts: ApplicationCountModel) => {\r\n this.applicationCounts = applicationCounts;\r\n });\r\n }\r\n\r\n private static configureTheme(user: ClientPortalUserModel) {\r\n document.documentElement.setAttribute('data-theme', user.CustomTheme);\r\n let imgURL = 'url(\"../assets/logos/bankLogo.png\")';\r\n if (user.Base64Logo) {\r\n imgURL = `url(\"data:image/png; base64,${user.Base64Logo}\")`.replace(/+/g, '+');\r\n }\r\n document.documentElement.style.setProperty('--client-portal-logo', imgURL);\r\n }\r\n}\r\n","import { ClientPortalBaseService } from \"./client-portal-base.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { ClientPortalInitialization } from \"./auth/user.api.service\";\r\nimport { ClientPortalAppSettings } from \"./app.globals\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\r\nexport class FiApiService extends ClientPortalBaseService {\r\n\r\n getFIInformation(fiName: string, brandId: string): Observable {\r\n if(!brandId)\r\n return this.get(this.buildUrl(`${this.clientPortalAPI}Users/GetClientPortalInitialization/${fiName}`));\r\n else\r\n return this.get(this.buildUrl(`${this.clientPortalAPI}Users/GetClientPortalInitialization/${fiName}/${brandId}`));\r\n }\r\n\r\n private _configuredText: { [key: string]: string };\r\n get configuredText(): { [key: string]: string } {\r\n return this._configuredText ?? (this._configuredText = JSON.parse(localStorage.getItem(ClientPortalAppSettings.storageKeyConfigurableText) ?? '{}'));\r\n }\r\n}\r\n\r\nexport enum ConfigurableTextMessages {\r\n CP_PERMISSION_TUTORIAL_PAGE1 = \"CP_PERMISSION_TUTORIAL_PAGE1\",\r\n CP_PERMISSION_TUTORIAL_PAGE2 = \"CP_PERMISSION_TUTORIAL_PAGE2\",\r\n CP_PERMISSION_TUTORIAL_PAGE3 = \"CP_PERMISSION_TUTORIAL_PAGE3\",\r\n CP_PERMISSION_TUTORIAL_PAGE4 = \"CP_PERMISSION_TUTORIAL_PAGE4\"\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { ClientPortalBaseService } from \"../client-portal-base.service\";\r\nimport { ClientPortalFooterConfigModel } from \"./Client-portal-footer.model\";\r\n\r\n\r\n@Injectable()\r\nexport class ClientPortalFooterItemService extends ClientPortalBaseService {\r\n\r\n public getClientPortalFooterConfiguration(financialInstitutionName: string, brandCode: string): Observable {\r\n let url = `${this.clientPortalAPI}Footer/GetClientPortalFooterConfiguration/${financialInstitutionName}`;\r\n\r\n if(brandCode)\r\n url = `${this.clientPortalAPI}Footer/GetClientPortalFooterConfiguration/${financialInstitutionName}/${brandCode}`;\r\n\r\n return this.get(url);\r\n }\r\n\r\n}\r\n\r\n\r\n","export class ClientPortalFooterConfigModel {\r\n TopItems: IClientPortalFooterModel[] = [];\r\n LeftItems: IClientPortalFooterModel[] = [];\r\n RightItems: IClientPortalFooterModel[] = [];\r\n BottomItems: IClientPortalFooterModel[] = [];\r\n}\r\n\r\nexport interface IClientPortalFooterModel {\r\n Id: string;\r\n ClientPortalFooterItemLabel: string;\r\n IconLibraryIconId: string ;\r\n IsActive: boolean;\r\n ListOrder: number;\r\n LayoutSizeBhCode: string;\r\n LayoutPositionBhCode: string;\r\n LayoutTypeBhCode: string;\r\n Text: string;\r\n Url: string;\r\n}\r\n","@if (clientPortalFooterModel?.LayoutTypeBhCode=='LINK') {\r\n
\r\n @if (clientPortalFooterModel?.Url) {\r\n \r\n }\r\n @if (!clientPortalFooterModel?.Url && clientPortalFooterModel?.Text) {\r\n \r\n }\r\n @if (!clientPortalFooterModel?.Url && !clientPortalFooterModel?.Text) {\r\n
\r\n {{clientPortalFooterModel.ClientPortalFooterItemLabel}}\r\n
\r\n }\r\n
\r\n}\r\n\r\n@if (clientPortalFooterModel?.LayoutTypeBhCode=='ICON') {\r\n
\r\n @if (clientPortalFooterModel?.Url) {\r\n \r\n }\r\n @if (!clientPortalFooterModel?.Url && clientPortalFooterModel?.Text) {\r\n \r\n @if (imageDataUrl) {\r\n \r\n }\r\n \r\n }\r\n @if (!clientPortalFooterModel?.Url && !clientPortalFooterModel?.Text) {\r\n
\r\n @if (!imageDataUrl) {\r\n {{clientPortalFooterModel.ClientPortalFooterItemLabel}}\r\n }\r\n @if (imageDataUrl) {\r\n \r\n }\r\n
\r\n }\r\n
\r\n}\r\n\r\n@if (clientPortalFooterModel?.LayoutTypeBhCode=='ICON&TEXT') {\r\n
\r\n @if (clientPortalFooterModel?.Url) {\r\n \r\n }\r\n @if (!clientPortalFooterModel?.Url && clientPortalFooterModel?.Text) {\r\n \r\n @if (imageDataUrl) {\r\n \r\n }\r\n {{clientPortalFooterModel.ClientPortalFooterItemLabel}}\r\n \r\n }\r\n @if (!clientPortalFooterModel?.Url && !clientPortalFooterModel?.Text) {\r\n
\r\n @if (imageDataUrl) {\r\n \r\n }\r\n {{clientPortalFooterModel.ClientPortalFooterItemLabel}}\r\n
\r\n }\r\n
\r\n}\r\n\r\n\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n","import { Component, Input, OnInit } from \"@angular/core\";\r\nimport { GUID } from \"@shared/common/queries/query-definition/generate-guid.function\";\r\nimport { AppFunctions } from \"../../shared/app.functions\";\r\nimport { ClientPortalIconApiService } from \"../client-portal-icon.api.service\";\r\nimport { IClientPortalFooterModel } from \"./Client-portal-footer.model\";\r\nimport { ModalCPRComponent } from \"../components/bh-cp-r-modal.component\";\r\n\r\n\r\n@Component({\r\n templateUrl: 'client-portal-footer-item.component.html',\r\n selector: 'bh-cp-footer-item',\r\n providers: [ClientPortalIconApiService],\r\n standalone: true,\r\n imports: [ModalCPRComponent]\r\n})\r\n\r\nexport class ClientPortalFooterItemComponent implements OnInit {\r\n @Input() clientPortalFooterModel: IClientPortalFooterModel;\r\n @Input() financialInstitutionIdentifier: string;\r\n imageDataUrl: string;\r\n\r\n constructor(\r\n private readonly iconService: ClientPortalIconApiService\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n if (AppFunctions.IsNullOrWhiteSpace(this.financialInstitutionIdentifier))\r\n return;\r\n\r\n if (AppFunctions.IsNullOrWhiteSpace(this.clientPortalFooterModel.IconLibraryIconId))\r\n return;\r\n\r\n if (this.clientPortalFooterModel.IconLibraryIconId == GUID.Empty)\r\n return;\r\n\r\n this.imageDataUrl = this.iconService.getIconUrl(this.clientPortalFooterModel.IconLibraryIconId, this.financialInstitutionIdentifier);\r\n }\r\n}\r\n","@if (isLoaded) {\r\n
\r\n @if (clientPortalFooterConfigModel?.TopItems.length > 0) {\r\n
\r\n
\r\n
\r\n @for (field of clientPortalFooterConfigModel?.TopItems; track field) {\r\n \r\n \r\n
\r\n }\r\n
\r\n
\r\n \r\n }\r\n
\r\n
\r\n @if (clientPortalFooterConfigModel?.LeftItems.length > 0) {\r\n
\r\n @for (field of clientPortalFooterConfigModel?.LeftItems; track field) {\r\n \r\n \r\n
\r\n }\r\n
\r\n }\r\n
\r\n
\r\n @if (clientPortalFooterConfigModel?.RightItems.length > 0) {\r\n
\r\n @for (field of clientPortalFooterConfigModel?.RightItems; track field) {\r\n \r\n \r\n
\r\n }\r\n
\r\n }\r\n \r\n \r\n @if (clientPortalFooterConfigModel?.BottomItems.length > 0) {\r\n
\r\n
\r\n
\r\n @for (field of clientPortalFooterConfigModel?.BottomItems; track field) {\r\n \r\n \r\n
\r\n }\r\n
\r\n
\r\n \r\n }\r\n
\r\n}\r\n\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { ComponentBase } from \"@shared/components/component-base\";\r\nimport { ClientPortalFooterItemService } from \"./client-portal-footer-item.api.service\";\r\nimport { ClientPortalFooterConfigModel } from \"./Client-portal-footer.model\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { ClientPortalFooterItemComponent } from \"./client-portal-footer-item.component\";\r\n\r\n\r\n@Component({\r\n templateUrl: 'configurable-client-portal-footer.component.html',\r\n selector: 'bh-cp-configurable-footer',\r\n providers: [ClientPortalFooterItemService],\r\n standalone: true,\r\n imports: [\r\n ClientPortalFooterItemComponent\r\n],\r\n})\r\nexport class ConfigurableClientPortalFooterComponent extends ComponentBase {\r\n clientPortalFooterConfigModel: ClientPortalFooterConfigModel = new ClientPortalFooterConfigModel();\r\n @Input() financialInstitutionIdentifier: string;\r\n isLoaded: boolean = false;\r\n brandCode: string;\r\n constructor(\r\n private readonly clientPortalFooterItemService: ClientPortalFooterItemService,\r\n private readonly route: ActivatedRoute\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.brandCode = this.getValueFromQueryString(this.route, 'Brand')\r\n if (this.financialInstitutionIdentifier) {\r\n this.getFooterConfiguration();\r\n }\r\n }\r\n\r\n getFooterConfiguration() {\r\n this.addSubscription = this.clientPortalFooterItemService\r\n .getClientPortalFooterConfiguration(this.financialInstitutionIdentifier, this.brandCode)\r\n .subscribe({\r\n next: data => {\r\n this.clientPortalFooterConfigModel = data;\r\n this.isLoaded = true;\r\n },\r\n error: err => {\r\n this.isLoaded = false;\r\n }\r\n });\r\n }\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n © {{copyright}}\r\n @if (financialInstitutionName) {\r\n \r\n {{financialInstitutionName}}.\r\n \r\n }\r\n All rights reserved.\r\n \r\n Powered by Baker Hill NextGen®\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Input } from \"@angular/core\";\r\nimport * as moment from 'moment';\r\n\r\nimport { ConfigurableClientPortalFooterComponent } from \"./configurable-client-portal-footer.component\";\r\n\r\n@Component({\r\n templateUrl: 'footer.component.html',\r\n selector: 'bh-cp-footer',\r\n standalone: true,\r\n imports: [ConfigurableClientPortalFooterComponent]\r\n})\r\nexport class FooterComponent {\r\n\r\n copyright: string = moment().format(\"YYYY\");\r\n @Input() financialInstitutionName: string;\r\n @Input() financialInstitutionIdentifier: string;\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap } from 'rxjs/operators';\r\nimport { Injectable } from '@angular/core';\r\nimport { ClientPortalBaseService, ILoginResult, LoginResult } from './client-portal-base.service';\r\nimport { ClientPortalAppSettings } from './app.globals';\r\nimport { Moment } from 'moment';\r\nimport { ILoginProvider } from \"./auth/applications/models/application.class\";\r\nimport { DeviceFingerprintService } from \"../device-fingerprint.service\";\r\n\r\n@Injectable()\r\nexport class LoginService extends ClientPortalBaseService implements ILoginProvider {\r\n\r\n public sessionTimeoutWarningMinutes: number;\r\n protected readonly defaultHeaders = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n };\r\n\r\n constructor(\r\n protected readonly http: HttpClient,\r\n protected readonly fingerprintService: DeviceFingerprintService) {\r\n super(http);\r\n }\r\n\r\n async loginWithAuthorizationCode(financialInstitutionId: string, username: string, code: string): Promise {\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyFiName, financialInstitutionId);\r\n const fingerprint = await this.fingerprintService.generateBrowserFingerprint();\r\n return this.post(`${ClientPortalAppSettings.API_BASE_URL}token`,\r\n this.buildQueryString({\r\n grant_type: 'ClientPortalCode',\r\n financialinstitution: financialInstitutionId,\r\n fingerprint: fingerprint,\r\n username: username,\r\n code: code\r\n }),\r\n new HttpHeaders(this.defaultHeaders))\r\n .pipe(\r\n switchMap(x => this.processLoginResult(x, financialInstitutionId))\r\n )\r\n .toPromise();\r\n }\r\n\r\n async loginWithUsernameAndPassword(financialInstitutionId: string, username: string, password: string, code?: string): Promise {\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyFiName, financialInstitutionId);\r\n const fingerprint = await this.fingerprintService.generateBrowserFingerprint();\r\n return this.post(`${ClientPortalAppSettings.API_BASE_URL}token`,\r\n this.buildQueryString({\r\n grant_type: 'ClientPortal',\r\n financialinstitution: financialInstitutionId,\r\n username: username,\r\n password: password,\r\n fingerprint: fingerprint,\r\n code: code\r\n }),\r\n new HttpHeaders(this.defaultHeaders))\r\n .pipe(\r\n switchMap(x => this.processLoginResult(x, financialInstitutionId))\r\n )\r\n .toPromise();\r\n }\r\n\r\n protected getRefreshToken(loginResult: LoginResult): Observable {\r\n return this.post(\r\n `${ClientPortalAppSettings.API_BASE_URL}token`,\r\n this.buildQueryString({\r\n refresh_token: loginResult.refresh_token,\r\n grant_type: 'refresh_token',\r\n scope: 'nextgenui'\r\n }),\r\n new HttpHeaders({\r\n ...this.defaultHeaders,\r\n 'Authorization': `Bearer ${loginResult.access_token}`\r\n })\r\n );\r\n }\r\n\r\n public login(model: LoginModel): Observable {\r\n localStorage.setItem(ClientPortalAppSettings.storageKeyFiName, model.financialInstitution);\r\n return this.post(`${ClientPortalAppSettings.API_BASE_URL}token`,\r\n this.buildQueryString({\r\n grant_type: 'ClientPortal',\r\n username: model.userName,\r\n password: model.password,\r\n financialinstitution: model.financialInstitution,\r\n fingerprint: model.fingerprint,\r\n code: model.code\r\n }),\r\n new HttpHeaders(this.defaultHeaders))\r\n .pipe(\r\n switchMap(x => this.processLoginResult(x, model.financialInstitution))\r\n );\r\n }\r\n\r\n protected processLoginResult(source: LoginResult, financialInstitutionId: string): Observable {\r\n return of(source)\r\n .pipe(\r\n switchMap(x => this.getRefreshToken(x)),\r\n map(x => {\r\n const result = new LoginResult();\r\n result.financialInstitution = financialInstitutionId;\r\n return Object.assign(result, x);\r\n }),\r\n tap(x => {\r\n ClientPortalBaseService.loginResult = x;\r\n })\r\n );\r\n }\r\n\r\n public logout(): string {\r\n if (!ClientPortalBaseService.loginResult)\r\n return null;\r\n\r\n const financialInstitution = ClientPortalBaseService.loginResult.financialInstitution;\r\n ClientPortalBaseService.loginResult = null;\r\n return financialInstitution;\r\n }\r\n\r\n getAuthenticationSettings(financialInstitution: string): Observable {\r\n const apiUrl: string = `${this.clientPortalAPI}login/authenticationsettings/${financialInstitution}`;\r\n return this.get(apiUrl);\r\n }\r\n\r\n public getSessionTimeoutWarningMinutes(): number {\r\n this.sessionTimeoutWarningMinutes = parseInt(localStorage.getItem(ClientPortalAppSettings.storageKeySessionWarning));\r\n if (isNaN(this.sessionTimeoutWarningMinutes)) {\r\n this.sessionTimeoutWarningMinutes = 10;\r\n }\r\n return this.sessionTimeoutWarningMinutes;\r\n }\r\n\r\n public callRefreshToken(): Observable {\r\n const body = `refresh_token=${ClientPortalBaseService.loginResult.refresh_token}&grant_type=refresh_token&scope=nextgenui`;\r\n const url = `${ClientPortalAppSettings.API_BASE_URL}token`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n 'Authorization': `Bearer ${ClientPortalBaseService.loginResult.access_token}`\r\n });\r\n return this.post(url, body, headers).pipe(\r\n map(x => {\r\n const result = new LoginResult();\r\n result.financialInstitution = ClientPortalBaseService.loginResult.financialInstitution;\r\n return Object.assign(result, x);\r\n }),\r\n tap(x => {\r\n ClientPortalBaseService.loginResult = x;\r\n })\r\n );\r\n }\r\n\r\n public getExpireAtTimeMinutes(): Moment {\r\n return ClientPortalBaseService.loginResult?.expires_at;\r\n }\r\n\r\n public getExpireTimeInSeconds(): number {\r\n return ClientPortalBaseService.loginResult?.expires_in;\r\n }\r\n}\r\n\r\nexport class LoginModel {\r\n userName: string = null;\r\n password: string = null;\r\n financialInstitution: string = null;\r\n fingerprint: string = null;\r\n code: string = '';\r\n}\r\n\r\nexport class IAuthenticationSettings {\r\n IsForgotPasswordEnabled: boolean;\r\n}\r\n","export class PasswordComplexityDto {\r\n PasswordMinimumLength: number = null;\r\n PasswordRequiresNumber: boolean = false;\r\n PasswordRequiresSymbol: boolean = false;\r\n PasswordRequiresMixedCase: boolean = false;\r\n}"],"x_google_ignoreList":[]}