@annalib/anna-cognito-lib 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/annalib-anna-cognito-lib.d.ts +5 -0
  2. package/esm2020/annalib-anna-cognito-lib.mjs +5 -0
  3. package/esm2020/lib/anna-cognito-lib.module.mjs +74 -0
  4. package/esm2020/lib/components/forgot-password/forgot-password.component.mjs +69 -0
  5. package/esm2020/lib/components/login/login.component.mjs +45 -0
  6. package/esm2020/lib/components/password-matching/password-matching.component.mjs +90 -0
  7. package/esm2020/lib/components/set-new-password/set-new-password.component.mjs +55 -0
  8. package/esm2020/lib/components/verify-and-set-new-password/verify-and-set-new-password.component.mjs +66 -0
  9. package/esm2020/lib/config/acl-service.token.mjs +4 -0
  10. package/esm2020/lib/config/auth-service.token.mjs +4 -0
  11. package/esm2020/lib/config/library.config.mjs +6 -0
  12. package/esm2020/lib/constants/loginConstant.mjs +46 -0
  13. package/esm2020/lib/directives/spinner-button/index.mjs +2 -0
  14. package/esm2020/lib/directives/spinner-button/spinner-button.directive.mjs +42 -0
  15. package/esm2020/lib/models/auth.model.mjs +18 -0
  16. package/esm2020/lib/services/acl.service.mjs +30 -0
  17. package/esm2020/lib/services/auth.service.mjs +219 -0
  18. package/esm2020/public-api.mjs +21 -0
  19. package/fesm2015/annalib-anna-cognito-lib.mjs +705 -0
  20. package/fesm2015/annalib-anna-cognito-lib.mjs.map +1 -0
  21. package/fesm2020/annalib-anna-cognito-lib.mjs +699 -0
  22. package/fesm2020/annalib-anna-cognito-lib.mjs.map +1 -0
  23. package/lib/anna-cognito-lib.module.d.ts +18 -0
  24. package/lib/components/forgot-password/forgot-password.component.d.ts +31 -0
  25. package/lib/components/login/login.component.d.ts +21 -0
  26. package/lib/components/password-matching/password-matching.component.d.ts +22 -0
  27. package/lib/components/set-new-password/set-new-password.component.d.ts +26 -0
  28. package/lib/components/verify-and-set-new-password/verify-and-set-new-password.component.d.ts +30 -0
  29. package/lib/config/acl-service.token.d.ts +19 -0
  30. package/lib/config/auth-service.token.d.ts +11 -0
  31. package/lib/config/library.config.d.ts +7 -0
  32. package/lib/constants/loginConstant.d.ts +40 -0
  33. package/{src/lib/directives/spinner-button/index.ts → lib/directives/spinner-button/index.d.ts} +0 -0
  34. package/lib/directives/spinner-button/spinner-button.directive.d.ts +15 -0
  35. package/lib/models/auth.model.d.ts +16 -0
  36. package/lib/services/acl.service.d.ts +12 -0
  37. package/lib/services/auth.service.d.ts +53 -0
  38. package/package.json +37 -14
  39. package/{src/public-api.ts → public-api.d.ts} +0 -14
  40. package/.browserslistrc +0 -16
  41. package/karma.conf.js +0 -44
  42. package/ng-package.json +0 -7
  43. package/src/assets/.gitkeep +0 -0
  44. package/src/assets/images/Anna-Logo.png +0 -0
  45. package/src/lib/anna-cognito-lib.module.ts +0 -51
  46. package/src/lib/components/forgot-password/forgot-password.component.html +0 -44
  47. package/src/lib/components/forgot-password/forgot-password.component.scss +0 -22
  48. package/src/lib/components/forgot-password/forgot-password.component.spec.ts +0 -25
  49. package/src/lib/components/forgot-password/forgot-password.component.ts +0 -75
  50. package/src/lib/components/login/login.component.html +0 -45
  51. package/src/lib/components/login/login.component.scss +0 -10
  52. package/src/lib/components/login/login.component.spec.ts +0 -25
  53. package/src/lib/components/login/login.component.ts +0 -47
  54. package/src/lib/components/password-matching/password-matching.component.html +0 -84
  55. package/src/lib/components/password-matching/password-matching.component.scss +0 -83
  56. package/src/lib/components/password-matching/password-matching.component.spec.ts +0 -25
  57. package/src/lib/components/password-matching/password-matching.component.ts +0 -92
  58. package/src/lib/components/set-new-password/set-new-password.component.html +0 -31
  59. package/src/lib/components/set-new-password/set-new-password.component.scss +0 -1
  60. package/src/lib/components/set-new-password/set-new-password.component.spec.ts +0 -25
  61. package/src/lib/components/set-new-password/set-new-password.component.ts +0 -54
  62. package/src/lib/components/verify-and-set-new-password/verify-and-set-new-password.component.html +0 -54
  63. package/src/lib/components/verify-and-set-new-password/verify-and-set-new-password.component.scss +0 -40
  64. package/src/lib/components/verify-and-set-new-password/verify-and-set-new-password.component.spec.ts +0 -25
  65. package/src/lib/components/verify-and-set-new-password/verify-and-set-new-password.component.ts +0 -70
  66. package/src/lib/config/acl-service.token.ts +0 -22
  67. package/src/lib/config/auth-service.token.ts +0 -15
  68. package/src/lib/config/library.config.ts +0 -8
  69. package/src/lib/constants/loginConstant.ts +0 -50
  70. package/src/lib/directives/spinner-button/spinner-button.directive.spec.ts +0 -40
  71. package/src/lib/directives/spinner-button/spinner-button.directive.ts +0 -36
  72. package/src/lib/models/auth.model.ts +0 -24
  73. package/src/lib/scss/_colors.scss +0 -107
  74. package/src/lib/scss/_fonts.scss +0 -86
  75. package/src/lib/scss/_loginTemplate.scss +0 -164
  76. package/src/lib/services/acl.service.ts +0 -24
  77. package/src/lib/services/auth.service.ts +0 -243
  78. package/src/test.ts +0 -27
  79. package/tsconfig.lib.json +0 -18
  80. package/tsconfig.lib.prod.json +0 -10
  81. package/tsconfig.spec.json +0 -17
@@ -0,0 +1,705 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, Directive, Input, Component, EventEmitter, Output, NgModule } from '@angular/core';
3
+ import { __awaiter } from 'tslib';
4
+ import { CognitoUserPool, CognitoUser, AuthenticationDetails } from 'amazon-cognito-identity-js';
5
+ import * as i3 from '@angular/router';
6
+ import { RouterModule } from '@angular/router';
7
+ import * as i2 from '@angular/forms';
8
+ import { Validators, FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
9
+ import * as i4 from '@angular/common';
10
+ import { CommonModule } from '@angular/common';
11
+ import { debounceTime } from 'rxjs/operators';
12
+ import * as i3$1 from 'ngx-toastr';
13
+
14
+ class LoginConstant {
15
+ }
16
+ // Login page
17
+ LoginConstant.enterEmail = "Enter your username";
18
+ LoginConstant.password = "Password";
19
+ LoginConstant.confirmPassword = "Confirm Password";
20
+ LoginConstant.login = "Login";
21
+ LoginConstant.otp = "OTP";
22
+ LoginConstant.forgotPassword = "Forgot " + LoginConstant.password.toLowerCase() + "?";
23
+ // set new password
24
+ LoginConstant.setNewPasswordHeading = "Set new " + LoginConstant.password.toLowerCase();
25
+ LoginConstant.setNewPasswordButton = "Set and " + LoginConstant.login.toLowerCase() + " again";
26
+ LoginConstant.passwordMustContain = "The password must contain:";
27
+ LoginConstant.minimumCharacter = "Minimum 8 characters";
28
+ LoginConstant.oneUppercase = "1 Uppercase";
29
+ LoginConstant.oneLowercase = "1 Lowercase";
30
+ LoginConstant.oneNumber = "1 Numerical";
31
+ LoginConstant.specialCharacter = "1 Special character";
32
+ LoginConstant.passwordNotMatching = "The passwords do not match. Please try again.";
33
+ LoginConstant.userNamePasswordIncorrect = "Incorrect username or password";
34
+ LoginConstant.userNotFound = "No registered user found";
35
+ LoginConstant.loginAgain = LoginConstant.login + " again";
36
+ // verify OTP & set new password
37
+ LoginConstant.verifyAndSetNewPasswordheading = "Enter " + LoginConstant.otp + " & set new password";
38
+ LoginConstant.verifyAndSetNewPasswordMessage = "An " + LoginConstant.otp + " has been succesfully emailed to ";
39
+ LoginConstant.pleaseEnterItBelow = ". Please enter it below.";
40
+ LoginConstant.regenerateOtp = "Regenerate " + LoginConstant.otp;
41
+ LoginConstant.enterOtp = "Enter " + LoginConstant.otp;
42
+ LoginConstant.submit = "Submit";
43
+ LoginConstant.attempt = "Attempt";
44
+ LoginConstant.attemptLimitExceeded = "You have exceeded the maximum number of allowed attempts. Please try again after 15 minutes.";
45
+ LoginConstant.attemptMessage = " of 5. The OTP entered is incorrect. Please try again with the right one.";
46
+ LoginConstant.sessionExpired = "The session has expired. Please try again.";
47
+ // forgot password
48
+ LoginConstant.forgotPasswordHeading = "Forgot your password?";
49
+ LoginConstant.forgotPasswordMessage = "Please enter your username.";
50
+ LoginConstant.forgotPasswordButton = "Get " + LoginConstant.otp;
51
+ LoginConstant.apiFailErrorMessage = "Unable to connect to server right now. Please try after some time.";
52
+ //url
53
+ LoginConstant.setNewPasswordUrl = "/set-new-password";
54
+ LoginConstant.forgortPasswordPageUrl = "/forgot-password";
55
+ LoginConstant.verifyAndSetNewPasswordUrl = "/verify-and-set-new-password";
56
+ LoginConstant.loginPageUrl = "/login";
57
+ LoginConstant.homePageUrl = "/home";
58
+ LoginConstant.stationSettingUrl = "/station-settings";
59
+
60
+ class AuthenticationData {
61
+ constructor(Username, Password) {
62
+ this.Username = Username;
63
+ this.Password = Password;
64
+ }
65
+ }
66
+ class UserPoolInformation {
67
+ constructor(UserPoolId, ClientId) {
68
+ this.UserPoolId = UserPoolId;
69
+ this.ClientId = ClientId;
70
+ }
71
+ }
72
+ class UsernameInfo {
73
+ constructor(object) {
74
+ this.isUsernameAvailable = object.isUsernameAvailable;
75
+ }
76
+ }
77
+
78
+ /** Token to inject the auth service */
79
+ const AUTH_SERVICE_TOKEN = new InjectionToken('Auth service token');
80
+
81
+ /** Token to inject the acl service */
82
+ const ACL_SERVICE_TOKEN = new InjectionToken('ACL service token');
83
+
84
+ class AnnaLibAclService {
85
+ constructor(consumingProjectAclService) {
86
+ this.consumingProjectAclService = consumingProjectAclService;
87
+ }
88
+ isUserAuthorisedToAccessPage(url) {
89
+ let privilegeName = this.consumingProjectAclService.urlToCognitoPrivilegeMap[url];
90
+ return this.userGroupsInCognitoJWT.includes(privilegeName);
91
+ }
92
+ isUserAuthorisedToAccessElement(privilege) {
93
+ return this.userGroupsInCognitoJWT.includes(privilege);
94
+ }
95
+ isUserAuthoriseToAcessManageUser() {
96
+ return this.consumingProjectAclService.isUserAuthoriseToAcessManageUser();
97
+ }
98
+ }
99
+ AnnaLibAclService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaLibAclService, deps: [{ token: ACL_SERVICE_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
100
+ AnnaLibAclService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaLibAclService, providedIn: "root" });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaLibAclService, decorators: [{
102
+ type: Injectable,
103
+ args: [{
104
+ providedIn: "root",
105
+ }]
106
+ }], ctorParameters: function () {
107
+ return [{ type: undefined, decorators: [{
108
+ type: Inject,
109
+ args: [ACL_SERVICE_TOKEN]
110
+ }] }];
111
+ } });
112
+
113
+ class LibraryConfig {
114
+ constructor() {
115
+ this.loginPageLogoImgUrl = '';
116
+ }
117
+ }
118
+
119
+ class AnnaLibAuthService {
120
+ constructor(router, aclService, libraryConfig, consumingProjectAuthService) {
121
+ this.router = router;
122
+ this.aclService = aclService;
123
+ this.libraryConfig = libraryConfig;
124
+ this.consumingProjectAuthService = consumingProjectAuthService;
125
+ this.noOfAttempts = 0;
126
+ this.sessionLocked = false;
127
+ if (!consumingProjectAuthService) {
128
+ throw new Error('You must provide a authService');
129
+ }
130
+ }
131
+ ngOnInit() { }
132
+ /***
133
+ 1. takes user pool data (userPool ID and client ID)
134
+ 2. if current user is null then it means user already logged out then simply return Promise<false>
135
+ 3. if current user present check if token is valid for it.
136
+ */
137
+ isUserLoggedIn() {
138
+ let currentUser = this.getCurrentUserDetails();
139
+ if (currentUser) {
140
+ return new Promise((resolve, reject) => {
141
+ currentUser && currentUser.getSession((error, token) => {
142
+ if (token) {
143
+ this.getAllCognitoTokenAndGroups(token);
144
+ resolve(true);
145
+ }
146
+ else {
147
+ this.sessionTimeout();
148
+ resolve(false);
149
+ }
150
+ });
151
+ });
152
+ }
153
+ else {
154
+ return new Promise((resolve) => {
155
+ clearInterval(this.accessTokenTimerId);
156
+ resolve(false);
157
+ });
158
+ }
159
+ }
160
+ sessionTimeout() {
161
+ localStorage.clear();
162
+ clearInterval(this.accessTokenTimerId);
163
+ this.router.navigate([LoginConstant.loginPageUrl]);
164
+ }
165
+ refreshAccessToken() {
166
+ let currentUser = this.getCurrentUserDetails();
167
+ let accessTokenExpiration = localStorage.getItem("accessTokenExpiration");
168
+ let expTime = accessTokenExpiration ? parseInt(accessTokenExpiration) : 0;
169
+ this.accessTokenTimerId = setInterval(() => {
170
+ let counter = 1000;
171
+ let delayFunction = setTimeout(() => {
172
+ currentUser && currentUser.getSession((error, token) => {
173
+ if (token) {
174
+ this.getAllCognitoTokenAndGroups(token);
175
+ let newExpTime = this.computeTokenExpiration(this.IdToken);
176
+ if (newExpTime <= 0) {
177
+ newExpTime = 1000;
178
+ counter = 0;
179
+ if (delayFunction) {
180
+ clearInterval(delayFunction);
181
+ }
182
+ }
183
+ expTime = newExpTime;
184
+ localStorage.setItem("accessTokenExpiration", newExpTime.toString());
185
+ clearInterval(this.accessTokenTimerId);
186
+ this.refreshAccessToken();
187
+ }
188
+ else if (error.code === "NotAuthorizedException") {
189
+ this.sessionTimeout();
190
+ }
191
+ });
192
+ }, counter);
193
+ }, expTime);
194
+ }
195
+ computeTokenExpiration(token) {
196
+ let currentTime = Math.floor(Date.now() / 1000);
197
+ let tokenTime = token.payload.exp;
198
+ let expTime = (tokenTime - currentTime) * 1000;
199
+ return expTime;
200
+ }
201
+ getCurrentUserDetails() {
202
+ let poolData = new UserPoolInformation(this.libraryConfig.cognito.userPoolId, this.libraryConfig.cognito.clientId);
203
+ let userPool = new CognitoUserPool(poolData);
204
+ return userPool.getCurrentUser();
205
+ }
206
+ getCognitoUserDetails(email) {
207
+ this.poolData = new UserPoolInformation(this.libraryConfig.cognito.userPoolId, this.libraryConfig.cognito.clientId);
208
+ this.userPool = new CognitoUserPool(this.poolData);
209
+ let userData = {
210
+ Username: email,
211
+ Pool: this.userPool,
212
+ };
213
+ let cognitoUser = new CognitoUser(userData);
214
+ return cognitoUser;
215
+ }
216
+ authenticate(email, password) {
217
+ this.loginErrorMessage = null;
218
+ let authData = new AuthenticationData(email, password);
219
+ this.authenticationDetails = new AuthenticationDetails(authData);
220
+ this.cognitoUser = this.getCognitoUserDetails(email);
221
+ this.CognitoAuthentication(this.authenticationDetails);
222
+ }
223
+ CognitoAuthentication(authenticationDetails) {
224
+ this.cognitoUser.authenticateUser(authenticationDetails, {
225
+ onSuccess: (result) => __awaiter(this, void 0, void 0, function* () {
226
+ this.getAllCognitoTokenAndGroups(result);
227
+ yield this.consumingProjectAuthService.onSuccessfulAuthenticatingUser(result);
228
+ }),
229
+ onFailure: (err) => {
230
+ this.consumingProjectAuthService.isLoggingIn = false;
231
+ if (err.message === "Password attempts exceeded") {
232
+ this.loginErrorMessage = LoginConstant.attemptLimitExceeded;
233
+ }
234
+ else {
235
+ this.loginErrorMessage = LoginConstant.userNamePasswordIncorrect;
236
+ }
237
+ },
238
+ newPasswordRequired: (data) => {
239
+ this.consumingProjectAuthService.isLoggingIn = false;
240
+ this.userAttribute = data;
241
+ this.router.navigate([LoginConstant.setNewPasswordUrl]);
242
+ },
243
+ });
244
+ }
245
+ setNewPassword(newPassword) {
246
+ delete this.userAttribute.email;
247
+ delete this.userAttribute.email_verified;
248
+ delete this.userAttribute.phone_number_verified;
249
+ this.cognitoUser.completeNewPasswordChallenge(newPassword, this.userAttribute, {
250
+ onSuccess: (result) => {
251
+ this.router.navigate([LoginConstant.loginPageUrl]);
252
+ },
253
+ onFailure: (error) => {
254
+ this.setNewPasswordErrorMessage = LoginConstant.sessionExpired;
255
+ this.setNewPasswordButtonMessage = LoginConstant.loginAgain;
256
+ },
257
+ });
258
+ }
259
+ onForgotPasswordGenerateOTP(email) {
260
+ this.userName = email;
261
+ this.cognitoUser = this.getCognitoUserDetails(email);
262
+ this.cognitoUser.forgotPassword({
263
+ onSuccess: (result) => {
264
+ this.verifyAndSetNewPasswordMessage =
265
+ LoginConstant.verifyAndSetNewPasswordMessage +
266
+ result.CodeDeliveryDetails.Destination +
267
+ LoginConstant.pleaseEnterItBelow;
268
+ this.router.navigate([LoginConstant.verifyAndSetNewPasswordUrl]);
269
+ },
270
+ onFailure: (err) => { },
271
+ });
272
+ }
273
+ verifyCode(verificationCode, newPassword) {
274
+ this.cognitoUser.confirmPassword(verificationCode, newPassword, {
275
+ onFailure: (error) => {
276
+ this.noOfAttempts = this.noOfAttempts + 1;
277
+ this.verifyAndSetNewPasswordErrorMessage = this.forgotPasswordError(error, this.noOfAttempts);
278
+ },
279
+ onSuccess: () => {
280
+ this.router.navigate([LoginConstant.loginPageUrl]);
281
+ },
282
+ });
283
+ }
284
+ forgotPasswordError(err, noOfAttempts) {
285
+ let errorMessage;
286
+ switch (err.code) {
287
+ case "LimitExceededException":
288
+ this.sessionLocked = true;
289
+ errorMessage = LoginConstant.attemptLimitExceeded;
290
+ break;
291
+ case "ExpiredCodeException":
292
+ errorMessage = LoginConstant.sessionExpired;
293
+ this.verifyAndSetNewPasswordButton = LoginConstant.regenerateOtp;
294
+ break;
295
+ default:
296
+ errorMessage = LoginConstant.attempt + " " + noOfAttempts + LoginConstant.attemptMessage;
297
+ }
298
+ return errorMessage;
299
+ }
300
+ getAllCognitoTokenAndGroups(token) {
301
+ this.accessToken = token.getAccessToken().getJwtToken();
302
+ this.IdToken = token.getIdToken();
303
+ if ("cognito:groups" in token.getAccessToken().payload) {
304
+ this.aclService.userGroupsInCognitoJWT = token.getAccessToken().payload["cognito:groups"];
305
+ }
306
+ else {
307
+ this.aclService.userGroupsInCognitoJWT = [];
308
+ }
309
+ }
310
+ }
311
+ AnnaLibAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaLibAuthService, deps: [{ token: i3.Router }, { token: AnnaLibAclService }, { token: LibraryConfig }, { token: AUTH_SERVICE_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
312
+ AnnaLibAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaLibAuthService, providedIn: "root" });
313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaLibAuthService, decorators: [{
314
+ type: Injectable,
315
+ args: [{
316
+ providedIn: "root",
317
+ }]
318
+ }], ctorParameters: function () {
319
+ return [{ type: i3.Router }, { type: AnnaLibAclService }, { type: LibraryConfig }, { type: undefined, decorators: [{
320
+ type: Inject,
321
+ args: [AUTH_SERVICE_TOKEN]
322
+ }] }];
323
+ } });
324
+
325
+ class SpinnerButtonDirective {
326
+ constructor(el, renderer) {
327
+ this.el = el;
328
+ this.renderer = renderer;
329
+ this.button = this.el.nativeElement;
330
+ this.child = document.createElement("div");
331
+ }
332
+ ngOnInit() { }
333
+ ngOnChanges(changes) {
334
+ if (changes['spinnerButtonText'] && changes['spinnerButtonText'].currentValue) {
335
+ this.button.innerHTML = this.spinnerButtonText;
336
+ }
337
+ if (changes['loading'] && changes['loading'].currentValue) {
338
+ this.button.innerHTML = "";
339
+ this.button.setAttribute("disabled", "true");
340
+ this.child.classList.add("spinner-for-button-directive");
341
+ this.renderer.appendChild(this.button, this.child);
342
+ }
343
+ else {
344
+ this.child.classList.remove("spinner-for-button-directive");
345
+ this.button.removeAttribute("disabled");
346
+ this.button.innerHTML = this.spinnerButtonText;
347
+ }
348
+ }
349
+ }
350
+ SpinnerButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SpinnerButtonDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
351
+ SpinnerButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.7", type: SpinnerButtonDirective, selector: "[anna-cognito-lib-SpinnerButton]", inputs: { loading: ["anna-cognito-lib-SpinnerButton", "loading"], spinnerButtonText: "spinnerButtonText" }, usesOnChanges: true, ngImport: i0 });
352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SpinnerButtonDirective, decorators: [{
353
+ type: Directive,
354
+ args: [{
355
+ selector: "[anna-cognito-lib-SpinnerButton]",
356
+ }]
357
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { loading: [{
358
+ type: Input,
359
+ args: ["anna-cognito-lib-SpinnerButton"]
360
+ }], spinnerButtonText: [{
361
+ type: Input,
362
+ args: ["spinnerButtonText"]
363
+ }] } });
364
+
365
+ // Angular import statements
366
+ class LoginComponent {
367
+ constructor(authService, fb, libraryConfig) {
368
+ this.authService = authService;
369
+ this.fb = fb;
370
+ this.libraryConfig = libraryConfig;
371
+ this.annaLogoUrl = "assets/images/Anna-Logo-for-footer-min.png";
372
+ }
373
+ ngOnInit() {
374
+ this.constants = LoginConstant;
375
+ this.onIntialiseForm();
376
+ }
377
+ onIntialiseForm() {
378
+ this.loginForm = this.fb.group({
379
+ username: [null],
380
+ password: [null],
381
+ });
382
+ }
383
+ OnLogin() {
384
+ this.authService.consumingProjectAuthService.isLoggingIn = true;
385
+ const username = this.loginForm.controls['username'].value;
386
+ const password = this.loginForm.controls['password'].value;
387
+ this.authService.authenticate(username, password);
388
+ }
389
+ }
390
+ LoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoginComponent, deps: [{ token: AnnaLibAuthService }, { token: i2.FormBuilder }, { token: LibraryConfig }], target: i0.ɵɵFactoryTarget.Component });
391
+ LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: LoginComponent, selector: "anna-cognito-lib-login", ngImport: i0, template: "<div class=\"main\">\r\n <!-- Load login page when all constant variable are intiated otherwise it will show a glitch. that's why ngIf check of constants.forgotPassword -->\r\n <section *ngIf=\"constants.forgotPassword\">\r\n <header>\r\n <img [src]=\"libraryConfig.loginPageLogoImgUrl\" loading=\"eager\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"OnLogin()\">\r\n <div id=\"alert-div\" *ngIf=\"authService.loginErrorMessage\">\r\n <span class=\"material-icons\">report</span>\r\n <p>{{ authService.loginErrorMessage }}</p>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n tabindex=\"1\"\r\n formControlName=\"username\"\r\n [ngClass]=\"{ 'input-invalid': authService.loginErrorMessage }\"\r\n [placeholder]=\"constants.enterEmail\"\r\n autocomplete=\"username\"\r\n autofocus\r\n />\r\n\r\n <input\r\n type=\"password\"\r\n tabindex=\"2\"\r\n formControlName=\"password\"\r\n [ngClass]=\"{ 'input-invalid': authService.loginErrorMessage }\"\r\n [placeholder]=\"constants.password\"\r\n autocomplete=\"current-password\"\r\n autofocus\r\n />\r\n\r\n <a tabindex=\"4\" [routerLink]=\"constants.forgortPasswordPageUrl\">{{ constants.forgotPassword }}</a>\r\n <button\r\n tabindex=\"3\"\r\n class=\"login-btn\"\r\n [anna-cognito-lib-SpinnerButton]=\"authService.consumingProjectAuthService.isLoggingIn\"\r\n [spinnerButtonText]=\"constants.login\"\r\n ></button>\r\n </form>\r\n </article>\r\n <footer>Powered by <span>SureWaves</span></footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}a{float:right;color:#268bff;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline}a:hover{cursor:pointer}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: SpinnerButtonDirective, selector: "[anna-cognito-lib-SpinnerButton]", inputs: ["anna-cognito-lib-SpinnerButton", "spinnerButtonText"] }] });
392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoginComponent, decorators: [{
393
+ type: Component,
394
+ args: [{ selector: "anna-cognito-lib-login", template: "<div class=\"main\">\r\n <!-- Load login page when all constant variable are intiated otherwise it will show a glitch. that's why ngIf check of constants.forgotPassword -->\r\n <section *ngIf=\"constants.forgotPassword\">\r\n <header>\r\n <img [src]=\"libraryConfig.loginPageLogoImgUrl\" loading=\"eager\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"OnLogin()\">\r\n <div id=\"alert-div\" *ngIf=\"authService.loginErrorMessage\">\r\n <span class=\"material-icons\">report</span>\r\n <p>{{ authService.loginErrorMessage }}</p>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n tabindex=\"1\"\r\n formControlName=\"username\"\r\n [ngClass]=\"{ 'input-invalid': authService.loginErrorMessage }\"\r\n [placeholder]=\"constants.enterEmail\"\r\n autocomplete=\"username\"\r\n autofocus\r\n />\r\n\r\n <input\r\n type=\"password\"\r\n tabindex=\"2\"\r\n formControlName=\"password\"\r\n [ngClass]=\"{ 'input-invalid': authService.loginErrorMessage }\"\r\n [placeholder]=\"constants.password\"\r\n autocomplete=\"current-password\"\r\n autofocus\r\n />\r\n\r\n <a tabindex=\"4\" [routerLink]=\"constants.forgortPasswordPageUrl\">{{ constants.forgotPassword }}</a>\r\n <button\r\n tabindex=\"3\"\r\n class=\"login-btn\"\r\n [anna-cognito-lib-SpinnerButton]=\"authService.consumingProjectAuthService.isLoggingIn\"\r\n [spinnerButtonText]=\"constants.login\"\r\n ></button>\r\n </form>\r\n </article>\r\n <footer>Powered by <span>SureWaves</span></footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}a{float:right;color:#268bff;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline}a:hover{cursor:pointer}\n"] }]
395
+ }], ctorParameters: function () { return [{ type: AnnaLibAuthService }, { type: i2.FormBuilder }, { type: LibraryConfig }]; } });
396
+
397
+ // Angular import statements
398
+ class PasswordMatchingComponent {
399
+ constructor(fb) {
400
+ this.fb = fb;
401
+ this.passwordChange = new EventEmitter();
402
+ this.confirmPasswordChange = new EventEmitter();
403
+ }
404
+ ngOnInit() {
405
+ this.constants = LoginConstant;
406
+ this.createGroup();
407
+ this.formValueChanged();
408
+ }
409
+ formValueChanged() {
410
+ const password = this.passwordForm.get("password");
411
+ const confirmPassword = this.passwordForm.get("confirmPassword");
412
+ password && password.valueChanges.subscribe(() => {
413
+ password && password.setValidators([
414
+ Validators.required,
415
+ this.regexValidator(new RegExp(".{8,}"), { minLength: true }),
416
+ this.regexValidator(new RegExp("[a-z]"), { lowercase: true }),
417
+ this.regexValidator(new RegExp("[A-Z]"), { uppercase: true }),
418
+ this.regexValidator(new RegExp("[0-9]"), { number: true }),
419
+ this.regexValidator(new RegExp("[^a-zA-Z0-9]"), { specialCharacter: true }),
420
+ ]);
421
+ password.updateValueAndValidity({ emitEvent: false });
422
+ this.onPasswordChange();
423
+ });
424
+ if (confirmPassword) {
425
+ confirmPassword.valueChanges.pipe(debounceTime(300)).subscribe(() => {
426
+ confirmPassword.setValidators([Validators.required]);
427
+ confirmPassword.updateValueAndValidity({ emitEvent: false });
428
+ this.onConfirmPasswordChange();
429
+ });
430
+ }
431
+ }
432
+ onPasswordChange() {
433
+ let result = {
434
+ value: this.passwordForm.value.password,
435
+ status: this.passwordForm.controls['password'].status,
436
+ };
437
+ this.passwordChange.emit(result);
438
+ }
439
+ onConfirmPasswordChange() {
440
+ let result = {
441
+ value: this.passwordForm.value.confirmPassword,
442
+ status: this.passwordForm.controls['confirmPassword'].status,
443
+ };
444
+ this.confirmPasswordChange.emit(result);
445
+ }
446
+ createGroup() {
447
+ this.passwordForm = this.fb.group({
448
+ password: [null],
449
+ confirmPassword: [null],
450
+ });
451
+ return this.passwordForm;
452
+ }
453
+ // TODO: check the return again
454
+ regexValidator(regex, error) {
455
+ return (control) => {
456
+ const valid = regex.test(control.value);
457
+ return (valid ? null : error);
458
+ };
459
+ }
460
+ }
461
+ PasswordMatchingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PasswordMatchingComponent, deps: [{ token: FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
462
+ PasswordMatchingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: PasswordMatchingComponent, selector: "anna-cognito-lib-password-matching", inputs: { passwordNotMatching: "passwordNotMatching" }, outputs: { passwordChange: "passwordChange", confirmPasswordChange: "confirmPasswordChange" }, ngImport: i0, template: "<form [formGroup]=\"passwordForm\">\r\n <div id=\"alert-div\" *ngIf=\"passwordNotMatching\">\r\n <div id=\"icon-div\">\r\n <span class=\"material-icons\">report</span>\r\n </div>\r\n <p>{{ constants.passwordNotMatching }}</p>\r\n </div>\r\n <div class=\"password-policies\">\r\n <ng-container *ngIf=\"!passwordForm.get('password')?.dirty\">\r\n <p>\r\n <b>{{ constants.passwordMustContain }} </b>\r\n </p>\r\n <p>{{ constants.minimumCharacter }}</p>\r\n <p>{{ constants.oneUppercase }}</p>\r\n <p>{{ constants.oneLowercase }}</p>\r\n <p>{{ constants.oneNumber }}</p>\r\n <p>{{ constants.specialCharacter }}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"passwordForm.get('password')?.dirty\">\r\n <p>\r\n <b>{{ constants.passwordMustContain }}</b>\r\n </p>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('minLength') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('minLength')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('minLength')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.minimumCharacter }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('uppercase') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('uppercase')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('uppercase')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.oneUppercase }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('lowercase') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('lowercase')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('lowercase')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.oneLowercase }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('number') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('number')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('number')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.oneNumber }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('specialCharacter') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('specialCharacter')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('specialCharacter')\">\r\n check_circle\r\n </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.specialCharacter }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <input\r\n type=\"password\"\r\n tabindex=\"2\"\r\n formControlName=\"password\"\r\n [placeholder]=\"constants.password\"\r\n [ngClass]=\"{ 'input-invalid': passwordNotMatching }\"\r\n />\r\n\r\n <input\r\n type=\"password\"\r\n tabindex=\"3\"\r\n formControlName=\"confirmPassword\"\r\n [placeholder]=\"constants.confirmPassword\"\r\n [ngClass]=\"{ 'input-invalid': passwordNotMatching }\"\r\n />\r\n</form>\r\n", styles: ["input[type=password],input[type=text]{width:100%;height:30px;padding:10px 16px;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}input[type=password].ng-dirty.ng-invalid,.input-invalid{border:1px solid #fe3824!important}input[type=password]:focus:focus{outline:none;box-shadow:none}input[type=password]:focus::placeholder{color:#a4a4a4}.password-policies{margin-bottom:1rem}.password-policies p{color:#4a4a4a;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.31;letter-spacing:normal;margin-bottom:0}.span-text{vertical-align:top;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.31;letter-spacing:normal}#icon-div-msg{display:inline;margin-right:.3125rem}#icon-div-msg .material-icons{margin-top:1px;font-size:16px}#alert-div{padding:4px 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div #icon-div{width:18px;margin-top:-5px;display:inline-block}#alert-div #icon-div .material-icons{color:#f44336;font-size:1.125rem;margin-left:.5rem}#alert-div p{display:inline;vertical-align:top;margin-left:.5rem;color:#4a4a4a;font-family:Roboto;font-size:.7188rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.error-color{color:#fe3824}.success-color{color:#43a047}\n"], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
463
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: PasswordMatchingComponent, decorators: [{
464
+ type: Component,
465
+ args: [{ selector: 'anna-cognito-lib-password-matching', template: "<form [formGroup]=\"passwordForm\">\r\n <div id=\"alert-div\" *ngIf=\"passwordNotMatching\">\r\n <div id=\"icon-div\">\r\n <span class=\"material-icons\">report</span>\r\n </div>\r\n <p>{{ constants.passwordNotMatching }}</p>\r\n </div>\r\n <div class=\"password-policies\">\r\n <ng-container *ngIf=\"!passwordForm.get('password')?.dirty\">\r\n <p>\r\n <b>{{ constants.passwordMustContain }} </b>\r\n </p>\r\n <p>{{ constants.minimumCharacter }}</p>\r\n <p>{{ constants.oneUppercase }}</p>\r\n <p>{{ constants.oneLowercase }}</p>\r\n <p>{{ constants.oneNumber }}</p>\r\n <p>{{ constants.specialCharacter }}</p>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"passwordForm.get('password')?.dirty\">\r\n <p>\r\n <b>{{ constants.passwordMustContain }}</b>\r\n </p>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('minLength') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('minLength')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('minLength')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.minimumCharacter }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('uppercase') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('uppercase')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('uppercase')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.oneUppercase }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('lowercase') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('lowercase')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('lowercase')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.oneLowercase }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('number') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('number')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('number')\"> check_circle </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.oneNumber }}</span>\r\n </div>\r\n\r\n <div [ngClass]=\"passwordForm.get('password')?.hasError('specialCharacter') ? 'error-color' : 'success-color'\">\r\n <div id=\"icon-div-msg\">\r\n <span class=\"material-icons\" *ngIf=\"passwordForm.get('password')?.hasError('specialCharacter')\"> cancel </span>\r\n <span class=\"material-icons\" *ngIf=\"!passwordForm.get('password')?.hasError('specialCharacter')\">\r\n check_circle\r\n </span>\r\n </div>\r\n <span class=\"span-text\">{{ constants.specialCharacter }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <input\r\n type=\"password\"\r\n tabindex=\"2\"\r\n formControlName=\"password\"\r\n [placeholder]=\"constants.password\"\r\n [ngClass]=\"{ 'input-invalid': passwordNotMatching }\"\r\n />\r\n\r\n <input\r\n type=\"password\"\r\n tabindex=\"3\"\r\n formControlName=\"confirmPassword\"\r\n [placeholder]=\"constants.confirmPassword\"\r\n [ngClass]=\"{ 'input-invalid': passwordNotMatching }\"\r\n />\r\n</form>\r\n", styles: ["input[type=password],input[type=text]{width:100%;height:30px;padding:10px 16px;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}input[type=password].ng-dirty.ng-invalid,.input-invalid{border:1px solid #fe3824!important}input[type=password]:focus:focus{outline:none;box-shadow:none}input[type=password]:focus::placeholder{color:#a4a4a4}.password-policies{margin-bottom:1rem}.password-policies p{color:#4a4a4a;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.31;letter-spacing:normal;margin-bottom:0}.span-text{vertical-align:top;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.31;letter-spacing:normal}#icon-div-msg{display:inline;margin-right:.3125rem}#icon-div-msg .material-icons{margin-top:1px;font-size:16px}#alert-div{padding:4px 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div #icon-div{width:18px;margin-top:-5px;display:inline-block}#alert-div #icon-div .material-icons{color:#f44336;font-size:1.125rem;margin-left:.5rem}#alert-div p{display:inline;vertical-align:top;margin-left:.5rem;color:#4a4a4a;font-family:Roboto;font-size:.7188rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.error-color{color:#fe3824}.success-color{color:#43a047}\n"] }]
466
+ }], ctorParameters: function () {
467
+ return [{ type: i2.FormBuilder, decorators: [{
468
+ type: Inject,
469
+ args: [FormBuilder]
470
+ }] }];
471
+ }, propDecorators: { passwordChange: [{
472
+ type: Output
473
+ }], confirmPasswordChange: [{
474
+ type: Output
475
+ }], passwordNotMatching: [{
476
+ type: Input
477
+ }] } });
478
+
479
+ // Angular import statements
480
+ class SetNewPasswordComponent {
481
+ constructor(authService, router) {
482
+ this.authService = authService;
483
+ this.router = router;
484
+ this.passwordNotMatching = false;
485
+ this.password = { value: null, status: null };
486
+ this.confirmPassword = { value: null, status: null };
487
+ }
488
+ ngOnInit() {
489
+ this.constants = LoginConstant;
490
+ this.authService.setNewPasswordButtonMessage = LoginConstant.setNewPasswordButton;
491
+ }
492
+ isFormValid() {
493
+ return this.password.status === "VALID" && this.confirmPassword.status === "VALID";
494
+ }
495
+ onPasswordChange($event) {
496
+ this.password = $event;
497
+ }
498
+ onConfirmPasswordChange($event) {
499
+ this.confirmPassword = $event;
500
+ }
501
+ onSettingNewPassword() {
502
+ if (this.password.value != this.confirmPassword.value) {
503
+ this.passwordNotMatching = true;
504
+ }
505
+ else {
506
+ this.passwordNotMatching = false;
507
+ if (this.authService.setNewPasswordButtonMessage === LoginConstant.loginAgain) {
508
+ this.router.navigate([LoginConstant.loginPageUrl]);
509
+ }
510
+ else {
511
+ this.authService.setNewPassword(this.password.value);
512
+ }
513
+ }
514
+ }
515
+ }
516
+ SetNewPasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SetNewPasswordComponent, deps: [{ token: AnnaLibAuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
517
+ SetNewPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SetNewPasswordComponent, selector: "anna-cognito-lib-set-new-password", ngImport: i0, template: "<div class=\"main\">\r\n <section>\r\n <header>\r\n <img src=\"assets/images/Anna-Logo-for-footer-min.png\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <form>\r\n <div id=\"heading\">\r\n {{ constants.setNewPasswordHeading }}\r\n </div>\r\n\r\n <div id=\"alert-div\" *ngIf=\"authService.setNewPasswordErrorMessage\">\r\n <span class=\"material-icons\">report</span>\r\n <p>{{ authService.setNewPasswordErrorMessage }}</p>\r\n </div>\r\n <anna-cognito-lib-password-matching\r\n (passwordChange)=\"onPasswordChange($event)\"\r\n (confirmPasswordChange)=\"onConfirmPasswordChange($event)\"\r\n [passwordNotMatching]=\"passwordNotMatching\"\r\n >\r\n </anna-cognito-lib-password-matching>\r\n <button tabindex=\"3\" class=\"login-btn\" [disabled]=\"!isFormValid()\" (click)=\"onSettingNewPassword()\">\r\n {{ authService.setNewPasswordButtonMessage }}\r\n </button>\r\n </form>\r\n </article>\r\n <footer>\r\n Powered by <span> <strong> SureWaves</strong></span>\r\n </footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}\n"], components: [{ type: PasswordMatchingComponent, selector: "anna-cognito-lib-password-matching", inputs: ["passwordNotMatching"], outputs: ["passwordChange", "confirmPasswordChange"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
518
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SetNewPasswordComponent, decorators: [{
519
+ type: Component,
520
+ args: [{ selector: 'anna-cognito-lib-set-new-password', template: "<div class=\"main\">\r\n <section>\r\n <header>\r\n <img src=\"assets/images/Anna-Logo-for-footer-min.png\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <form>\r\n <div id=\"heading\">\r\n {{ constants.setNewPasswordHeading }}\r\n </div>\r\n\r\n <div id=\"alert-div\" *ngIf=\"authService.setNewPasswordErrorMessage\">\r\n <span class=\"material-icons\">report</span>\r\n <p>{{ authService.setNewPasswordErrorMessage }}</p>\r\n </div>\r\n <anna-cognito-lib-password-matching\r\n (passwordChange)=\"onPasswordChange($event)\"\r\n (confirmPasswordChange)=\"onConfirmPasswordChange($event)\"\r\n [passwordNotMatching]=\"passwordNotMatching\"\r\n >\r\n </anna-cognito-lib-password-matching>\r\n <button tabindex=\"3\" class=\"login-btn\" [disabled]=\"!isFormValid()\" (click)=\"onSettingNewPassword()\">\r\n {{ authService.setNewPasswordButtonMessage }}\r\n </button>\r\n </form>\r\n </article>\r\n <footer>\r\n Powered by <span> <strong> SureWaves</strong></span>\r\n </footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}\n"] }]
521
+ }], ctorParameters: function () { return [{ type: AnnaLibAuthService }, { type: i3.Router }]; } });
522
+
523
+ // Angular import statements
524
+ class ForgotPasswordComponent {
525
+ constructor(authService, fb, toastr) {
526
+ this.authService = authService;
527
+ this.fb = fb;
528
+ this.toastr = toastr;
529
+ this.passwordNotMatching = false;
530
+ this.password = { value: null, status: null };
531
+ this.confirmPassword = { value: null, status: null };
532
+ }
533
+ ngOnInit() {
534
+ this.constants = LoginConstant;
535
+ this.onIntialiseForm();
536
+ if (this.authService.userName) {
537
+ this.onUpdateForm();
538
+ }
539
+ }
540
+ onIntialiseForm() {
541
+ this.verifyRegisteredEmail = this.fb.group({
542
+ email: [null, [Validators.required]],
543
+ });
544
+ }
545
+ onUpdateForm() {
546
+ this.verifyRegisteredEmail.patchValue({
547
+ email: this.authService.userName,
548
+ });
549
+ }
550
+ isFormValid() {
551
+ return this.verifyRegisteredEmail.valid;
552
+ }
553
+ onVerifyRegisteredEmail() {
554
+ let username = this.verifyRegisteredEmail.controls['email'].value;
555
+ this.authService.consumingProjectAuthService.isUsernameAvailable(username)
556
+ .subscribe({
557
+ next: (response) => {
558
+ let res = new UsernameInfo(response);
559
+ if (!res.isUsernameAvailable) {
560
+ this.authService.onForgotPasswordGenerateOTP(username);
561
+ }
562
+ else {
563
+ this.errorMessage = this.constants.userNotFound;
564
+ }
565
+ },
566
+ error: any => {
567
+ this.toastr.error(LoginConstant.apiFailErrorMessage);
568
+ }
569
+ });
570
+ }
571
+ }
572
+ ForgotPasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ForgotPasswordComponent, deps: [{ token: AnnaLibAuthService }, { token: i2.FormBuilder }, { token: i3$1.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
573
+ ForgotPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ForgotPasswordComponent, selector: "anna-cognito-lib-forgot-password", ngImport: i0, template: "<div class=\"main\">\r\n <section>\r\n <header>\r\n <img src=\"assets/images/Anna-Logo-for-footer-min.png\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <form [formGroup]=\"verifyRegisteredEmail\">\r\n <div id=\"heading\">\r\n {{ constants.forgotPasswordHeading }}\r\n </div>\r\n <p>\r\n {{ constants.forgotPasswordMessage }}\r\n </p>\r\n <div id=\"alert-div\" *ngIf=\"errorMessage\">\r\n <span class=\"material-icons\">report</span>\r\n <p id=\"alert-msg\">{{ errorMessage }}</p>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n tabindex=\"1\"\r\n formControlName=\"email\"\r\n [placeholder]=\"constants.enterEmail\"\r\n [ngClass]=\"{\r\n 'input-invalid': verifyRegisteredEmail.get('email')?.dirty && verifyRegisteredEmail.get('email')?.errors\r\n }\"\r\n />\r\n\r\n <button\r\n tabindex=\"2\"\r\n type=\"submit\"\r\n class=\"login-btn\"\r\n [disabled]=\"!isFormValid()\"\r\n (click)=\"onVerifyRegisteredEmail()\"\r\n >\r\n {{ constants.forgotPasswordButton }}\r\n </button>\r\n </form>\r\n </article>\r\n <footer>\r\n Powered by <span> <strong> SureWaves</strong></span>\r\n </footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}p{color:#4a4a4a;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}input[type=text]{margin-bottom:16px}input[type=text]:focus{box-shadow:none}.back-btn{font-size:27px;position:relative;color:#268bff;float:left;top:-30px;left:-15px;font-weight:400!important}\n"], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
574
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ForgotPasswordComponent, decorators: [{
575
+ type: Component,
576
+ args: [{ selector: 'anna-cognito-lib-forgot-password', template: "<div class=\"main\">\r\n <section>\r\n <header>\r\n <img src=\"assets/images/Anna-Logo-for-footer-min.png\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <form [formGroup]=\"verifyRegisteredEmail\">\r\n <div id=\"heading\">\r\n {{ constants.forgotPasswordHeading }}\r\n </div>\r\n <p>\r\n {{ constants.forgotPasswordMessage }}\r\n </p>\r\n <div id=\"alert-div\" *ngIf=\"errorMessage\">\r\n <span class=\"material-icons\">report</span>\r\n <p id=\"alert-msg\">{{ errorMessage }}</p>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n tabindex=\"1\"\r\n formControlName=\"email\"\r\n [placeholder]=\"constants.enterEmail\"\r\n [ngClass]=\"{\r\n 'input-invalid': verifyRegisteredEmail.get('email')?.dirty && verifyRegisteredEmail.get('email')?.errors\r\n }\"\r\n />\r\n\r\n <button\r\n tabindex=\"2\"\r\n type=\"submit\"\r\n class=\"login-btn\"\r\n [disabled]=\"!isFormValid()\"\r\n (click)=\"onVerifyRegisteredEmail()\"\r\n >\r\n {{ constants.forgotPasswordButton }}\r\n </button>\r\n </form>\r\n </article>\r\n <footer>\r\n Powered by <span> <strong> SureWaves</strong></span>\r\n </footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}p{color:#4a4a4a;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}input[type=text]{margin-bottom:16px}input[type=text]:focus{box-shadow:none}.back-btn{font-size:27px;position:relative;color:#268bff;float:left;top:-30px;left:-15px;font-weight:400!important}\n"] }]
577
+ }], ctorParameters: function () { return [{ type: AnnaLibAuthService }, { type: i2.FormBuilder }, { type: i3$1.ToastrService }]; } });
578
+
579
+ class VerifyAndSetNewPasswordComponent {
580
+ constructor(authService, fb, router) {
581
+ this.authService = authService;
582
+ this.fb = fb;
583
+ this.router = router;
584
+ this.passwordNotMatching = false;
585
+ this.password = { value: null, status: null };
586
+ this.confirmPassword = { value: null, status: null };
587
+ }
588
+ ngOnInit() {
589
+ this.constants = LoginConstant;
590
+ this.authService.verifyAndSetNewPasswordButton = LoginConstant.setNewPasswordButton;
591
+ this.onIntialiseForm();
592
+ }
593
+ onIntialiseForm() {
594
+ this.verifyOtpForm = this.fb.group({
595
+ otp: [null, [Validators.required]],
596
+ });
597
+ }
598
+ isFormValid() {
599
+ if (this.password.status === "VALID" &&
600
+ this.confirmPassword.status === "VALID" &&
601
+ this.verifyOtpForm.controls['otp'].valid) {
602
+ return true;
603
+ }
604
+ return false;
605
+ }
606
+ onPasswordChange($event) {
607
+ this.password = $event;
608
+ }
609
+ onConfirmPasswordChange($event) {
610
+ this.confirmPassword = $event;
611
+ }
612
+ onVerifyOtpSettingNewPassword() {
613
+ if (this.password.value != this.confirmPassword.value) {
614
+ this.passwordNotMatching = true;
615
+ }
616
+ else {
617
+ this.passwordNotMatching = false;
618
+ if (this.authService.verifyAndSetNewPasswordButton === LoginConstant.regenerateOtp) {
619
+ this.router.navigate([LoginConstant.forgortPasswordPageUrl]);
620
+ }
621
+ else {
622
+ this.password.value && this.authService.verifyCode(this.verifyOtpForm.controls['otp'].value, this.password.value);
623
+ }
624
+ }
625
+ }
626
+ }
627
+ VerifyAndSetNewPasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: VerifyAndSetNewPasswordComponent, deps: [{ token: AnnaLibAuthService }, { token: i2.FormBuilder }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
628
+ VerifyAndSetNewPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: VerifyAndSetNewPasswordComponent, selector: "anna-cognito-lib-verify-and-set-new-password", ngImport: i0, template: "<div class=\"main\" [ngClass]=\"{ 'main-height': authService.verifyAndSetNewPasswordErrorMessage }\">\r\n <section>\r\n <header>\r\n <img src=\"assets/images/Anna-Logo-for-footer-min.png\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <span class=\"back-btn\" [routerLink]=\"constants.forgortPasswordPageUrl\">\r\n <i class=\"mdi mdi-arrow-left\"></i>\r\n </span>\r\n\r\n <form [formGroup]=\"verifyOtpForm\">\r\n <div class=\"pull-left\" id=\"heading\">\r\n {{ constants.verifyAndSetNewPasswordheading }}\r\n </div>\r\n <p>{{ authService.verifyAndSetNewPasswordMessage }}</p>\r\n\r\n <div id=\"alert-div\" *ngIf=\"authService.verifyAndSetNewPasswordErrorMessage\">\r\n <div id=\"icon-div\">\r\n <span class=\"material-icons\">report</span>\r\n </div>\r\n <p id=\"display-block-msg\">{{ authService.verifyAndSetNewPasswordErrorMessage }}</p>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n tabindex=\"1\"\r\n formControlName=\"otp\"\r\n [placeholder]=\"constants.enterOtp\"\r\n autocomplete=\"new-field-name\"\r\n [ngClass]=\"{ 'input-invalid': authService.verifyAndSetNewPasswordErrorMessage }\"\r\n />\r\n\r\n <anna-cognito-lib-password-matching\r\n (passwordChange)=\"onPasswordChange($event)\"\r\n (confirmPasswordChange)=\"onConfirmPasswordChange($event)\"\r\n [passwordNotMatching]=\"passwordNotMatching\"\r\n >\r\n </anna-cognito-lib-password-matching>\r\n <button\r\n tabindex=\"4\"\r\n type=\"submit\"\r\n class=\"login-btn\"\r\n [disabled]=\"authService.sessionLocked || !isFormValid()\"\r\n (click)=\"onVerifyOtpSettingNewPassword()\"\r\n >\r\n {{ authService.verifyAndSetNewPasswordButton }}\r\n </button>\r\n </form>\r\n </article>\r\n <footer>\r\n Powered by <span> <strong>SureWaves</strong> </span>\r\n </footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}.main-height{height:105vh}section{top:52%}p{color:#4a4a4a;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}input[type=text]{margin-bottom:24px}input[type=text]:focus{box-shadow:none}.back-btn{width:27px;height:27px;top:-27px;left:-15px;cursor:pointer;position:relative;color:#268bff;float:left;border-radius:50%;border:1px solid #268bff;background-color:#f4f4f4}.back-btn i{position:absolute;top:.1875rem;left:.25rem}\n"], components: [{ type: PasswordMatchingComponent, selector: "anna-cognito-lib-password-matching", inputs: ["passwordNotMatching"], outputs: ["passwordChange", "confirmPasswordChange"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: VerifyAndSetNewPasswordComponent, decorators: [{
630
+ type: Component,
631
+ args: [{ selector: 'anna-cognito-lib-verify-and-set-new-password', template: "<div class=\"main\" [ngClass]=\"{ 'main-height': authService.verifyAndSetNewPasswordErrorMessage }\">\r\n <section>\r\n <header>\r\n <img src=\"assets/images/Anna-Logo-for-footer-min.png\" alt=\"Anna Logo\" />\r\n </header>\r\n <article>\r\n <span class=\"back-btn\" [routerLink]=\"constants.forgortPasswordPageUrl\">\r\n <i class=\"mdi mdi-arrow-left\"></i>\r\n </span>\r\n\r\n <form [formGroup]=\"verifyOtpForm\">\r\n <div class=\"pull-left\" id=\"heading\">\r\n {{ constants.verifyAndSetNewPasswordheading }}\r\n </div>\r\n <p>{{ authService.verifyAndSetNewPasswordMessage }}</p>\r\n\r\n <div id=\"alert-div\" *ngIf=\"authService.verifyAndSetNewPasswordErrorMessage\">\r\n <div id=\"icon-div\">\r\n <span class=\"material-icons\">report</span>\r\n </div>\r\n <p id=\"display-block-msg\">{{ authService.verifyAndSetNewPasswordErrorMessage }}</p>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n tabindex=\"1\"\r\n formControlName=\"otp\"\r\n [placeholder]=\"constants.enterOtp\"\r\n autocomplete=\"new-field-name\"\r\n [ngClass]=\"{ 'input-invalid': authService.verifyAndSetNewPasswordErrorMessage }\"\r\n />\r\n\r\n <anna-cognito-lib-password-matching\r\n (passwordChange)=\"onPasswordChange($event)\"\r\n (confirmPasswordChange)=\"onConfirmPasswordChange($event)\"\r\n [passwordNotMatching]=\"passwordNotMatching\"\r\n >\r\n </anna-cognito-lib-password-matching>\r\n <button\r\n tabindex=\"4\"\r\n type=\"submit\"\r\n class=\"login-btn\"\r\n [disabled]=\"authService.sessionLocked || !isFormValid()\"\r\n (click)=\"onVerifyOtpSettingNewPassword()\"\r\n >\r\n {{ authService.verifyAndSetNewPasswordButton }}\r\n </button>\r\n </form>\r\n </article>\r\n <footer>\r\n Powered by <span> <strong>SureWaves</strong> </span>\r\n </footer>\r\n </section>\r\n</div>\r\n", styles: ["@keyframes show{0%{opacity:0}50%{opacity:.5}to{opacity:1}}html{overflow-y:scroll}.main{background-color:#fff;background-size:cover;font-family:Roboto;height:100vh}section{top:45%;left:50%;position:absolute;transform:translate(-50%,-50%);width:20.875rem;animation:show .5s 1;-moz-animation:show .5s 1}.container{width:100%;height:100%;overflow:auto}header{height:auto;width:100%;text-align:center}article{margin-top:.9375rem;margin-bottom:.9375rem;border:1px solid #979797;background-color:#f4f4f4;padding:2rem 1.375rem;border-radius:.375rem;box-shadow:0 .125rem .4375rem #0000001a}article #heading{color:#212121;text-align:center;margin-bottom:1.5rem;font-family:Roboto;font-size:1.125rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}#alert-div{padding:.25rem 0 0;margin-bottom:.75rem;border-radius:.25rem;border:solid 1px #f9b3ae;background-color:#fde4e3}#alert-div .material-icons{color:#f44336;font-size:1rem;margin-left:.5rem}#alert-div p{margin:-1.5625rem 0 0 1.8rem;padding:.3125rem 0;color:#4a4a4a;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}footer{align-items:baseline;color:#6e6e6e;opacity:.9;display:flex;font-family:Ubuntu;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;justify-content:center}footer span{font-size:1.3125rem;font-weight:700;margin-left:.25rem}input[type=password],input[type=text],input[type=number]{width:100%;height:30px;padding:.75rem 1rem;border:1px solid #979797;margin-bottom:.625rem;border-radius:.375rem}.login-btn{width:100%;height:2.5rem;border:0;color:#fff;background-color:#268bff;border-radius:.375rem;font-size:1rem;margin-top:.9375rem}.login-btn:hover{background-color:#4099ff;cursor:pointer}.login-btn:disabled{background-color:#ccc;color:#fff;cursor:not-allowed}.input-invalid{border:1px solid #fe3824!important}input[type=password].ng-dirty.ng-invalid,input[type=text].ng-dirty.ng-invalid{border:1px solid #fe3824}input[type=submit]:focus,input[type=password]:focus,input[type=text]:focus,input[type=checkbox]:focus,button:focus{outline:none}input::placeholder{color:#a4a4a4}.main-height{height:105vh}section{top:52%}p{color:#4a4a4a;font-family:Roboto;font-size:1rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}input[type=text]{margin-bottom:24px}input[type=text]:focus{box-shadow:none}.back-btn{width:27px;height:27px;top:-27px;left:-15px;cursor:pointer;position:relative;color:#268bff;float:left;border-radius:50%;border:1px solid #268bff;background-color:#f4f4f4}.back-btn i{position:absolute;top:.1875rem;left:.25rem}\n"] }]
632
+ }], ctorParameters: function () { return [{ type: AnnaLibAuthService }, { type: i2.FormBuilder }, { type: i3.Router }]; } });
633
+
634
+ class AnnaCognitoLibModule {
635
+ static forRoot(configuration) {
636
+ return {
637
+ ngModule: AnnaCognitoLibModule,
638
+ providers: [
639
+ {
640
+ provide: LibraryConfig,
641
+ useValue: configuration
642
+ }
643
+ ]
644
+ };
645
+ }
646
+ }
647
+ AnnaCognitoLibModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaCognitoLibModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
648
+ AnnaCognitoLibModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaCognitoLibModule, declarations: [LoginComponent,
649
+ SetNewPasswordComponent,
650
+ PasswordMatchingComponent,
651
+ ForgotPasswordComponent,
652
+ VerifyAndSetNewPasswordComponent,
653
+ SpinnerButtonDirective], imports: [FormsModule,
654
+ ReactiveFormsModule,
655
+ RouterModule,
656
+ CommonModule], exports: [LoginComponent,
657
+ SetNewPasswordComponent,
658
+ PasswordMatchingComponent,
659
+ ForgotPasswordComponent,
660
+ VerifyAndSetNewPasswordComponent,
661
+ SpinnerButtonDirective] });
662
+ AnnaCognitoLibModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaCognitoLibModule, imports: [[
663
+ FormsModule,
664
+ ReactiveFormsModule,
665
+ RouterModule,
666
+ CommonModule
667
+ ]] });
668
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaCognitoLibModule, decorators: [{
669
+ type: NgModule,
670
+ args: [{
671
+ declarations: [
672
+ LoginComponent,
673
+ SetNewPasswordComponent,
674
+ PasswordMatchingComponent,
675
+ ForgotPasswordComponent,
676
+ VerifyAndSetNewPasswordComponent,
677
+ SpinnerButtonDirective,
678
+ ],
679
+ imports: [
680
+ FormsModule,
681
+ ReactiveFormsModule,
682
+ RouterModule,
683
+ CommonModule
684
+ ],
685
+ exports: [
686
+ LoginComponent,
687
+ SetNewPasswordComponent,
688
+ PasswordMatchingComponent,
689
+ ForgotPasswordComponent,
690
+ VerifyAndSetNewPasswordComponent,
691
+ SpinnerButtonDirective
692
+ ]
693
+ }]
694
+ }] });
695
+
696
+ /*
697
+ * Public API Surface of anna-cognito-lib
698
+ */
699
+
700
+ /**
701
+ * Generated bundle index. Do not edit.
702
+ */
703
+
704
+ export { ACL_SERVICE_TOKEN, AUTH_SERVICE_TOKEN, AnnaCognitoLibModule, AnnaLibAclService, AnnaLibAuthService, ForgotPasswordComponent, LibraryConfig, LoginComponent, LoginConstant, PasswordMatchingComponent, SetNewPasswordComponent, SpinnerButtonDirective, VerifyAndSetNewPasswordComponent };
705
+ //# sourceMappingURL=annalib-anna-cognito-lib.mjs.map