@bnsights/bbsf-utilities 1.2.6 → 1.2.8-beta.1

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.
package/README.md CHANGED
@@ -128,6 +128,15 @@ See [XMLBUILDER2_FIX.md](./XMLBUILDER2_FIX.md) for technical details.
128
128
 
129
129
  # Change Log
130
130
 
131
+ ## 1.2.7 / 26-03-2026
132
+
133
+ ===================
134
+
135
+ - Enhancements in masterLayoutService
136
+ - Add `FileLoaderService.preloadAll()` to load `environment.js` + `configurations.json` + default language JSON in parallel
137
+ - Add lazy translation loading via `FileLoaderService.loadLanguage(lang)` (loads missing language only when switching)
138
+ - Remove `ConfigurationService` constructor auto-fetch for `configurations.json` (preloaded once via `preloadAll()`)
139
+
131
140
  ## 1.2.6 / 04-02-2026
132
141
 
133
142
  ===================
@@ -12,11 +12,11 @@ import * as i4$1 from 'ngx-cookie-service';
12
12
  import { CookieService } from 'ngx-cookie-service';
13
13
  import * as i1 from '@angular/common/http';
14
14
  import { HttpParams, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
15
- import { Subject, throwError, of, Observable, lastValueFrom, BehaviorSubject } from 'rxjs';
15
+ import { Subject, switchMap, tap, take, takeUntil, throwError, of, Observable, lastValueFrom, BehaviorSubject } from 'rxjs';
16
16
  import { JwtHelperService } from '@auth0/angular-jwt';
17
17
  import { __decorate } from 'tslib';
18
18
  import { plainToClass } from 'class-transformer';
19
- import { takeUntil, tap, map, shareReplay, take, filter, switchMap } from 'rxjs/operators';
19
+ import { takeUntil as takeUntil$1, tap as tap$1, map, shareReplay, take as take$1, filter, switchMap as switchMap$1 } from 'rxjs/operators';
20
20
  import * as i1$2 from '@angular/service-worker';
21
21
 
22
22
  class User {
@@ -67,10 +67,6 @@ class ConfigurationService {
67
67
  constructor(httpClient, injector) {
68
68
  this.httpClient = httpClient;
69
69
  this.injector = injector;
70
- this.httpClient.get("./assets/config/configurations.json")
71
- .subscribe(data => {
72
- ConfigurationService.JsonData = data;
73
- });
74
70
  }
75
71
  get authService() {
76
72
  if (!this._authService) {
@@ -386,39 +382,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
386
382
  }] });
387
383
 
388
384
  class MasterLayoutService {
389
- constructor(router, http, authService, stylesBundleService, translate, environmentService) {
385
+ constructor(router, http, authService, stylesBundleService, translate, fileLoaderService) {
390
386
  this.router = router;
391
387
  this.http = http;
392
388
  this.authService = authService;
393
389
  this.stylesBundleService = stylesBundleService;
394
390
  this.translate = translate;
395
- this.environmentService = environmentService;
391
+ this.fileLoaderService = fileLoaderService;
396
392
  this.apiUrl = '/api/Home/';
393
+ this.destroy$ = new Subject();
397
394
  }
398
395
  switchLang(lang, bundleEnglishName, bundleArabicName) {
399
- if (this.authService.isAuthenticated()) {
400
- this.changeLanguage(lang).subscribe((result) => {
401
- this.updateUserInfo().subscribe((Value) => {
402
- let UserInfoObject = Value;
403
- this.authService.handleAccessToken(UserInfoObject.token);
404
- this.stylesBundleService.loadThemes(lang, bundleEnglishName, bundleArabicName);
405
- localStorage.setItem('language', lang);
406
- this.translate.use(lang);
407
- });
408
- });
396
+ if (!lang?.trim()) {
397
+ return;
409
398
  }
410
- else
399
+ if (!this.authService.isAuthenticated()) {
411
400
  this.router.navigate(['/Admin/account/login']);
401
+ return;
402
+ }
403
+ this.changeLanguage(lang).pipe(switchMap(() => this.updateUserInfo()), tap((userInfo) => {
404
+ if (!userInfo?.token) {
405
+ return;
406
+ }
407
+ this.authService.handleAccessToken(userInfo.token).then(async () => {
408
+ this.stylesBundleService.loadThemes(lang, bundleEnglishName, bundleArabicName);
409
+ localStorage.setItem('language', lang);
410
+ try {
411
+ await this.fileLoaderService.loadLanguage(lang);
412
+ }
413
+ catch (e) {
414
+ this.logError(e?.message || `loadLanguage failed for ${lang}`).pipe(take(1)).subscribe();
415
+ }
416
+ this.translate.use(lang);
417
+ });
418
+ }), takeUntil(this.destroy$)).subscribe({
419
+ error: (error) => {
420
+ this.logError(error?.message || 'switchLang failed').pipe(take(1)).subscribe();
421
+ }
422
+ });
412
423
  }
413
424
  reloadComponent() {
414
- let currentUrl = this.router.url;
425
+ const currentUrl = this.router.url;
426
+ const previousShouldReuseRoute = this.router.routeReuseStrategy.shouldReuseRoute;
427
+ const previousOnSameUrlNavigation = this.router.onSameUrlNavigation;
415
428
  this.router.routeReuseStrategy.shouldReuseRoute = () => false;
416
429
  this.router.onSameUrlNavigation = 'reload';
417
- this.router.navigate([currentUrl]);
430
+ this.router.navigate([currentUrl]).finally(() => {
431
+ this.router.routeReuseStrategy.shouldReuseRoute = previousShouldReuseRoute;
432
+ this.router.onSameUrlNavigation = previousOnSameUrlNavigation;
433
+ });
418
434
  }
419
435
  changeLanguage(key) {
436
+ const profile = this.authService.getCurrentUserProfile();
437
+ if (!profile?.id) {
438
+ return this.logError('changeLanguage failed: missing user profile id');
439
+ }
420
440
  let params = new HttpParams();
421
- params = params.append('UserId', AuthService.user.profile.id);
441
+ params = params.append('UserId', profile.id);
422
442
  params = params.append('LanguageKey', key);
423
443
  return this.http.post(this.apiUrl + 'UpdateLanguage', null, null, params);
424
444
  }
@@ -431,20 +451,34 @@ class MasterLayoutService {
431
451
  return this.http.get(this.apiUrl + 'UpdateUserInfo', null, null);
432
452
  }
433
453
  switchRole(permissionSetID) {
434
- this.updateRole(permissionSetID).subscribe((result) => {
435
- this.updateUserInfo().subscribe((Value) => {
436
- let UserInfoObject = Value;
437
- this.authService.handleAccessToken(UserInfoObject.token);
438
- });
454
+ if (!permissionSetID?.trim()) {
455
+ return;
456
+ }
457
+ this.updateRole(permissionSetID).pipe(switchMap(() => this.updateUserInfo()), tap((userInfo) => {
458
+ if (userInfo?.token) {
459
+ this.authService.handleAccessToken(userInfo.token);
460
+ }
461
+ }), takeUntil(this.destroy$)).subscribe({
462
+ error: (error) => {
463
+ this.logError(error?.message || 'switchRole failed').pipe(take(1)).subscribe();
464
+ }
439
465
  });
440
466
  }
441
467
  updateRole(permissionSetID) {
468
+ const profile = this.authService.getCurrentUserProfile();
469
+ if (!profile?.id) {
470
+ return this.logError('updateRole failed: missing user profile id');
471
+ }
442
472
  let params = new HttpParams();
443
- params = params.append('UserId', AuthService.user.profile.id);
473
+ params = params.append('UserId', profile.id);
444
474
  params = params.append('RoleID', permissionSetID);
445
475
  return this.http.post(this.apiUrl + 'SwitchRole', null, null, params);
446
476
  }
447
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MasterLayoutService, deps: [{ token: i1$1.Router }, { token: RequestHandlerService }, { token: AuthService }, { token: StylesBundleService }, { token: i4.TranslateService }, { token: EnvironmentService }], target: i0.ɵɵFactoryTarget.Injectable }); }
477
+ ngOnDestroy() {
478
+ this.destroy$.next();
479
+ this.destroy$.complete();
480
+ }
481
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MasterLayoutService, deps: [{ token: i1$1.Router }, { token: RequestHandlerService }, { token: AuthService }, { token: StylesBundleService }, { token: i4.TranslateService }, { token: FileLoaderService }], target: i0.ɵɵFactoryTarget.Injectable }); }
448
482
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MasterLayoutService, providedIn: 'root' }); }
449
483
  }
450
484
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MasterLayoutService, decorators: [{
@@ -452,7 +486,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
452
486
  args: [{
453
487
  providedIn: 'root',
454
488
  }]
455
- }], ctorParameters: () => [{ type: i1$1.Router }, { type: RequestHandlerService }, { type: AuthService }, { type: StylesBundleService }, { type: i4.TranslateService }, { type: EnvironmentService }] });
489
+ }], ctorParameters: () => [{ type: i1$1.Router }, { type: RequestHandlerService }, { type: AuthService }, { type: StylesBundleService }, { type: i4.TranslateService }, { type: FileLoaderService }] });
456
490
 
457
491
  class RequestHandlerService {
458
492
  constructor(http, authService, environmentService, utilityService, bbsfTranslateService) {
@@ -488,7 +522,7 @@ class RequestHandlerService {
488
522
  let headers = this.getHeaders();
489
523
  if (!currentRequestOptions.disableBlockUI)
490
524
  this.utilityService.startBlockUI();
491
- return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params }).pipe(takeUntil(this.onDestroy$), tap((result) => {
525
+ return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params }).pipe(takeUntil$1(this.onDestroy$), tap$1((result) => {
492
526
  if (!currentRequestOptions.disableBlockUI)
493
527
  this.utilityService.stopBlockUI();
494
528
  }, error => {
@@ -513,7 +547,7 @@ class RequestHandlerService {
513
547
  let headers = this.getHeaders();
514
548
  if (!currentRequestOptions.disableBlockUI)
515
549
  this.utilityService.startBlockUI();
516
- return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
550
+ return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil$1(this.onDestroy$), tap$1((result) => {
517
551
  if (!currentRequestOptions.disableBlockUI)
518
552
  this.utilityService.stopBlockUI();
519
553
  }, error => {
@@ -538,7 +572,7 @@ class RequestHandlerService {
538
572
  let headers = this.getHeaders();
539
573
  if (!currentRequestOptions.disableBlockUI)
540
574
  this.utilityService.startBlockUI();
541
- return this.http.delete(this.environmentService.getApiUrl() + Url + `/${deletedId}`, { headers: headers, params: params }).pipe(takeUntil(this.onDestroy$), tap((result) => {
575
+ return this.http.delete(this.environmentService.getApiUrl() + Url + `/${deletedId}`, { headers: headers, params: params }).pipe(takeUntil$1(this.onDestroy$), tap$1((result) => {
542
576
  if (!currentRequestOptions.disableBlockUI)
543
577
  this.utilityService.stopBlockUI();
544
578
  }, error => {
@@ -563,7 +597,7 @@ class RequestHandlerService {
563
597
  let headers = this.getHeaders();
564
598
  if (!currentRequestOptions.disableBlockUI)
565
599
  this.utilityService.startBlockUI();
566
- return this.http.put(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
600
+ return this.http.put(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil$1(this.onDestroy$), tap$1((result) => {
567
601
  if (!currentRequestOptions.disableBlockUI)
568
602
  this.utilityService.stopBlockUI();
569
603
  }, error => {
@@ -594,7 +628,7 @@ class RequestHandlerService {
594
628
  headers = headers.set('ignore-cookies', 'true');
595
629
  if (!currentRequestOptions.disableBlockUI)
596
630
  this.utilityService.startBlockUI();
597
- return this.http.patch(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
631
+ return this.http.patch(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil$1(this.onDestroy$), tap$1((result) => {
598
632
  if (!currentRequestOptions.disableBlockUI)
599
633
  this.utilityService.stopBlockUI();
600
634
  }, error => {
@@ -619,7 +653,7 @@ class RequestHandlerService {
619
653
  let headers = this.getHeaders();
620
654
  if (!currentRequestOptions.disableBlockUI)
621
655
  this.utilityService.startBlockUI();
622
- return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
656
+ return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(takeUntil$1(this.onDestroy$), tap$1((result) => {
623
657
  if (!currentRequestOptions.disableBlockUI)
624
658
  this.utilityService.stopBlockUI();
625
659
  }, error => {
@@ -637,7 +671,7 @@ class RequestHandlerService {
637
671
  }
638
672
  const currentRequestOptions = requestOptions || new RequestOptionsModel();
639
673
  let headers = this.getHeadersUpdated();
640
- return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, reportProgress: true, observe: 'events' }).pipe(takeUntil(this.onDestroy$), tap((result) => {
674
+ return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, reportProgress: true, observe: 'events' }).pipe(takeUntil$1(this.onDestroy$), tap$1((result) => {
641
675
  if (!currentRequestOptions.disableBlockUI)
642
676
  this.utilityService.stopBlockUI();
643
677
  }, error => {
@@ -896,13 +930,13 @@ class LanguageService {
896
930
  if (this.isLoaded || this.isLoading)
897
931
  return; // Sync guard prevents race condition
898
932
  this.isLoading = true; // Set immediately to block concurrent calls
899
- this.loadRequest$ = this.http.get(this.apiUrl + 'GetAll', null, null).pipe(tap((languages) => {
933
+ this.loadRequest$ = this.http.get(this.apiUrl + 'GetAll', null, null).pipe(tap$1((languages) => {
900
934
  this._languages = languages;
901
935
  this.isLoaded = true;
902
936
  this.isLoading = false;
903
937
  }), shareReplay(1));
904
938
  // take(1) ensures auto-unsubscribe after completion
905
- this.loadRequest$.pipe(take(1)).subscribe({
939
+ this.loadRequest$.pipe(take$1(1)).subscribe({
906
940
  error: (err) => {
907
941
  this.isLoading = false;
908
942
  this.loadRequest$ = null;
@@ -1007,8 +1041,23 @@ class FileLoaderService {
1007
1041
  this.translate = translate;
1008
1042
  this.http = http;
1009
1043
  this.availableLanguages = ['en', 'ar']; // Add more languages as needed
1044
+ this.loadedLanguages = new Set();
1010
1045
  this.translate.addLangs(this.availableLanguages);
1011
1046
  }
1047
+ async preloadAll() {
1048
+ const defaultLang = this.getDefaultLanguage();
1049
+ try {
1050
+ await Promise.all([
1051
+ this.loadEnvironment(),
1052
+ this.loadConfigurations(),
1053
+ this.loadLanguage(defaultLang),
1054
+ ]);
1055
+ this.translate.use(defaultLang);
1056
+ }
1057
+ catch (error) {
1058
+ console.error('Error during preloadAll:', error);
1059
+ }
1060
+ }
1012
1061
  loadEnvironment() {
1013
1062
  return new Promise((resolve, reject) => {
1014
1063
  const script = document.createElement('script');
@@ -1026,6 +1075,32 @@ class FileLoaderService {
1026
1075
  document.head.insertBefore(script, document.head.firstChild);
1027
1076
  });
1028
1077
  }
1078
+ async loadConfigurations() {
1079
+ const data = await lastValueFrom(this.http.get('./assets/config/configurations.json'));
1080
+ ConfigurationService.JsonData = data;
1081
+ }
1082
+ getDefaultLanguage() {
1083
+ const lang = localStorage.getItem('language');
1084
+ if (lang && this.availableLanguages.includes(lang)) {
1085
+ return lang;
1086
+ }
1087
+ return 'en';
1088
+ }
1089
+ async loadLanguage(lang) {
1090
+ const normalizedLang = (lang || '').trim();
1091
+ if (!normalizedLang) {
1092
+ return;
1093
+ }
1094
+ if (!this.availableLanguages.includes(normalizedLang)) {
1095
+ return;
1096
+ }
1097
+ if (this.loadedLanguages.has(normalizedLang)) {
1098
+ return;
1099
+ }
1100
+ const translations = await lastValueFrom(this.http.get(`/assets/i18n/${normalizedLang}.json`));
1101
+ this.translate.setTranslation(normalizedLang, translations, true);
1102
+ this.loadedLanguages.add(normalizedLang);
1103
+ }
1029
1104
  async preloadTranslations() {
1030
1105
  try {
1031
1106
  const requests = this.availableLanguages.map(async (lang) => {
@@ -1054,7 +1129,12 @@ class ServiceWorkerHelperService {
1054
1129
  this.updates = updates;
1055
1130
  this.swRegistration = null;
1056
1131
  this.updateCheckInProgress = false;
1132
+ this.chunkHandlersRegistered = false;
1133
+ this.chunkRecoveryInFlight = false;
1134
+ this.sessionRecoveryAttemptsKey = 'bbsf_chunk_recovery_count';
1135
+ this.maxChunkRecoveryAttempts = 3;
1057
1136
  this.initializeServiceWorker();
1137
+ this.setupChunkErrorHandler();
1058
1138
  }
1059
1139
  checkForUpdates() {
1060
1140
  if (!this.updates.isEnabled) {
@@ -1065,8 +1145,6 @@ class ServiceWorkerHelperService {
1065
1145
  this.setupUpdateListeners();
1066
1146
  // Start smart checking for updates
1067
1147
  this.startSmartUpdateChecking();
1068
- // CRITICAL: Handle chunk load errors
1069
- this.setupChunkErrorHandler();
1070
1148
  }
1071
1149
  setupUpdateListeners() {
1072
1150
  this.updates.versionUpdates
@@ -1076,7 +1154,7 @@ class ServiceWorkerHelperService {
1076
1154
  this.skipWaiting();
1077
1155
  });
1078
1156
  this.updates.versionUpdates
1079
- .pipe(filter((event) => event.type === 'VERSION_READY'), switchMap(() => this.updates.activateUpdate()))
1157
+ .pipe(filter((event) => event.type === 'VERSION_READY'), switchMap$1(() => this.updates.activateUpdate()))
1080
1158
  .subscribe(() => {
1081
1159
  console.log('New version activated, reloading page...');
1082
1160
  // CRITICAL FIX: Reload the page after activation
@@ -1142,38 +1220,92 @@ class ServiceWorkerHelperService {
1142
1220
  this.swRegistration.waiting.postMessage({ type: 'SKIP_WAITING' });
1143
1221
  }
1144
1222
  }
1145
- // CRITICAL: Handle chunk load errors
1146
1223
  setupChunkErrorHandler() {
1224
+ if (this.chunkHandlersRegistered) {
1225
+ return;
1226
+ }
1227
+ this.chunkHandlersRegistered = true;
1147
1228
  window.addEventListener('error', (event) => {
1148
- const chunkFailedMessage = /Loading chunk [\d]+ failed|ChunkLoadError/i;
1149
- const isChunkError = event.message && chunkFailedMessage.test(event.message);
1150
- if (isChunkError) {
1151
- console.warn('Chunk load error detected, attempting recovery...');
1152
- event.preventDefault(); // Prevent default error handling
1153
- this.handleChunkLoadError();
1229
+ if (!this.isChunkErrorEvent(event)) {
1230
+ return;
1154
1231
  }
1232
+ console.warn('Chunk load error detected, attempting recovery...');
1233
+ event.preventDefault();
1234
+ this.handleChunkLoadError();
1155
1235
  });
1156
- // Also handle unhandled promise rejections (some chunk errors appear here)
1157
1236
  window.addEventListener('unhandledrejection', (event) => {
1158
- const reason = event.reason?.message || event.reason?.toString() || '';
1159
- const isChunkError = /Loading chunk [\d]+ failed|ChunkLoadError/i.test(reason);
1160
- if (isChunkError) {
1161
- console.warn('Chunk load error in promise, attempting recovery...');
1162
- event.preventDefault();
1163
- this.handleChunkLoadError();
1237
+ const reason = event.reason;
1238
+ const text = (reason && typeof reason === 'object' && 'message' in reason
1239
+ ? String(reason.message)
1240
+ : '') || (reason instanceof Error ? reason.message : String(reason ?? ''));
1241
+ const name = reason instanceof Error ? reason.name : '';
1242
+ if (!this.isChunkLoadFailure(reason, text) && name !== 'ChunkLoadError') {
1243
+ return;
1164
1244
  }
1245
+ console.warn('Chunk load error in promise, attempting recovery...');
1246
+ event.preventDefault();
1247
+ this.handleChunkLoadError();
1165
1248
  });
1166
1249
  }
1250
+ isChunkErrorEvent(event) {
1251
+ const ev = event;
1252
+ const message = ev.message || '';
1253
+ const scriptSrc = event.target instanceof HTMLScriptElement ? event.target.src || undefined : undefined;
1254
+ return this.isChunkLoadFailure(ev.error, message, scriptSrc);
1255
+ }
1256
+ isChunkLoadFailure(error, message, scriptSrc) {
1257
+ const segments = [message];
1258
+ if (error instanceof Error) {
1259
+ segments.push(error.message, error.name);
1260
+ }
1261
+ else if (error && typeof error === 'object' && 'message' in error) {
1262
+ segments.push(String(error.message));
1263
+ }
1264
+ else if (error != null) {
1265
+ segments.push(String(error));
1266
+ }
1267
+ const text = segments.join(' ');
1268
+ if (/Loading chunk .+ failed/i.test(text)) {
1269
+ return true;
1270
+ }
1271
+ if (/ChunkLoadError/i.test(text)) {
1272
+ return true;
1273
+ }
1274
+ if (/Failed to fetch dynamically imported module/i.test(text)) {
1275
+ return true;
1276
+ }
1277
+ if (scriptSrc && /\.js(\?|#|$)/i.test(scriptSrc)) {
1278
+ const looksLikeBundle = /chunk|main|runtime|polyfills|vendor/i.test(scriptSrc) ||
1279
+ /\/\d+\.[\w.-]*\.js(\?|#|$)/i.test(scriptSrc);
1280
+ const opaqueOrEmpty = !message || message === 'Script error.';
1281
+ if (looksLikeBundle && opaqueOrEmpty) {
1282
+ return true;
1283
+ }
1284
+ }
1285
+ return false;
1286
+ }
1167
1287
  handleChunkLoadError() {
1168
- // Check if we've already tried to recover recently (prevent infinite loops)
1169
- const lastReloadTime = localStorage.getItem('lastChunkErrorReload');
1170
- const now = Date.now();
1171
- if (lastReloadTime && (now - parseInt(lastReloadTime, 10)) < 5000) {
1172
- console.error('Multiple chunk errors in short time, skipping auto-reload');
1288
+ if (this.chunkRecoveryInFlight) {
1173
1289
  return;
1174
1290
  }
1175
- localStorage.setItem('lastChunkErrorReload', now.toString());
1176
- // Clear cache and reload
1291
+ let attempts = 0;
1292
+ try {
1293
+ attempts = parseInt(sessionStorage.getItem(this.sessionRecoveryAttemptsKey) || '0', 10);
1294
+ }
1295
+ catch {
1296
+ /* private / blocked storage */
1297
+ }
1298
+ if (attempts >= this.maxChunkRecoveryAttempts) {
1299
+ console.error('Chunk error recovery limit reached for this session; not reloading again.');
1300
+ return;
1301
+ }
1302
+ try {
1303
+ sessionStorage.setItem(this.sessionRecoveryAttemptsKey, String(attempts + 1));
1304
+ }
1305
+ catch {
1306
+ /* ignore */
1307
+ }
1308
+ this.chunkRecoveryInFlight = true;
1177
1309
  this.clearCacheAndReload();
1178
1310
  }
1179
1311
  clearCacheAndReload() {
@@ -1 +1 @@
1
- {"version":3,"file":"bnsights-bbsf-utilities.mjs","sources":["../../../projects/bbsf-utilities/src/lib/shared/models/UserModel.ts","../../../projects/bbsf-utilities/src/lib/shared/enums/authentication-modes-enums.ts","../../../projects/bbsf-utilities/src/lib/shared/services/appearance-configuration.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/configuration.service.ts","../../../projects/bbsf-utilities/src/lib/shared/models/area-model.ts","../../../projects/bbsf-utilities/src/lib/shared/models/error-model.ts","../../../projects/bbsf-utilities/src/lib/shared/models/request-options-model.ts","../../../projects/bbsf-utilities/src/lib/shared/models/speech-language.ts","../../../projects/bbsf-utilities/src/lib/shared/services/control-validation.service.ts","../../../projects/bbsf-utilities/src/lib/shared/config/environment.ts","../../../projects/bbsf-utilities/src/lib/shared/services/environment.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/master-layout.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/request-handler.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/styles-bundle.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/translate.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/translation-resolver.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/utility.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/language.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/speech-recognition.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/preload.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/service-worker-helper.service.ts","../../../projects/bbsf-utilities/src/lib/shared/authentication/auth.service.ts","../../../projects/bbsf-utilities/src/lib/bbsf-utilities.module.ts","../../../projects/bbsf-utilities/src/public-api.ts","../../../projects/bbsf-utilities/src/bnsights-bbsf-utilities.ts"],"sourcesContent":["export class User {\r\n\r\n token_type: string;\r\n access_token: string;\r\n profile: any;\r\n expires_at: any\r\n}\r\n","export enum AuthenticationModes {\r\n Forms = 'Forms',\r\n UAEPass = \"UAEPass\",\r\n WindowsAD = \"WindowsAD\",\r\n AzureAD = \"AzureAD\",\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { ConfigurationService } from \".\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppearanceConfigurationService {\r\n\r\n constructor(private configService: ConfigurationService) {\r\n }\r\n\r\n getLayoutTheme() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_Theme');\r\n }\r\n\r\n getFooterText() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_FooterText');\r\n }\r\n\r\n getPageTitle() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_PageTitle');\r\n }\r\n\r\n getFavIcon() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_FavIcon');\r\n }\r\n\r\n getCustomStyles() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_CustomStyles');\r\n }\r\n\r\n getLogo() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_Logo');\r\n }\r\n \r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable, Injector, OnInit } from \"@angular/core\";\r\nimport { AuthService } from \"../authentication\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConfigurationService {\r\n\r\n static JsonData: any[] = [];\r\n private currentUserProfile: any;\r\n private _authService: AuthService;\r\n\r\n constructor(private httpClient: HttpClient, private injector: Injector) {\r\n this.httpClient.get(\"./assets/config/configurations.json\")\r\n .subscribe(data => {\r\n ConfigurationService.JsonData = data as any[];\r\n });\r\n }\r\n\r\n private get authService(): AuthService {\r\n if (!this._authService) {\r\n this._authService = this.injector.get(AuthService);\r\n }\r\n return this._authService;\r\n }\r\n\r\n getConfigurationValue(key: string) {\r\n this.currentUserProfile = this.authService.getCurrentUser()?.profile;\r\n var selectedKey = ConfigurationService.JsonData[key];\r\n if (selectedKey && typeof selectedKey === 'object') {\r\n if (selectedKey.OrganizationConfigurations) {\r\n if (this.currentUserProfile && this.currentUserProfile.organizationGUID_ID) {\r\n let organizationValue = Array(selectedKey.OrganizationConfigurations).find(o => o.OrganizationID_GUID == this.currentUserProfile.organizationGUID_ID);\r\n return organizationValue;\r\n }\r\n } else {\r\n return selectedKey.Value;\r\n }\r\n } else {\r\n return selectedKey;\r\n }\r\n }\r\n\r\n}","export class AreaModel {\r\n permissionSetID: number\r\n areaUrl: string;\r\n}\r\n","export class ErrorModel {\r\n field: string;\r\n controlName: string;\r\n message: string;\r\n}\r\n","import { FormGroup } from \"@angular/forms\";\r\n\r\nexport class RequestOptionsModel {\r\n disableSuccessNotification: boolean = false;\r\n disableBlockUI: boolean = false;\r\n disableErrorHandler: boolean = false;\r\n customSuccessMessage: string;\r\n customErrorMessage: string;\r\n responseType: any = \"\"\r\n formGroup: FormGroup = null\r\n castResponsetoClass: boolean = true;\r\n}\r\n","export class LanguageDTO {\r\n name: string;\r\n prefix: string;\r\n dialect: string;\r\n englishName: string;\r\n arabicName: string;\r\n nativeName: string;\r\n detected: string;\r\n searching: string;\r\n elevating: string;\r\n translating: string;\r\n generatingAnswersForYou: string;\r\n isRTL: boolean;\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { BlockUI, NgBlockUI } from 'ng-block-ui';\r\nimport { ErrorModel, RequestOptionsModel } from '../models';\r\nimport { UtilityService } from '.';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ControlValidationService {\r\n\r\n private requestOptions: RequestOptionsModel = new RequestOptionsModel();\r\n\r\n constructor(private utilityService: UtilityService) {\r\n }\r\n\r\n isCreatedBefor = false;\r\n\r\n @BlockUI() blockUI: NgBlockUI;\r\n\r\n showGlobalError(errorMessage?: string | string[], formId?: string, deleteOld?: boolean) {\r\n let globalErorrElement = document.getElementsByClassName('alert alert-InvalidValidation bg-light-danger text-danger')\r\n if (globalErorrElement.length > 0) {\r\n this.removeElementsByClass('alert alert-InvalidValidation bg-light-danger text-danger');\r\n }\r\n if (this.isCreatedBefor == true) {\r\n this.removeElementsByClass('alert alert-InvalidValidation bg-light-danger text-danger');\r\n }\r\n // tslint:disable-next-line: prefer-const\r\n if (!formId)\r\n formId = \"currentForm\"\r\n var object = document.getElementById(formId);\r\n const tagName = 'div';\r\n // tslint:disable-next-line: prefer-const\r\n var elementToAppend = document.createElement(tagName); // Your tag name here\r\n let message: string | string[] = \"\";\r\n\r\n if (!errorMessage || (typeof errorMessage == \"string\")) {\r\n if (localStorage.getItem('language') == \"ar\")\r\n message = errorMessage ? errorMessage : \"لديك بعص الأخطاء . من فضلك قم بالمراجعه \";\r\n else\r\n message = errorMessage ? errorMessage : \"You have some validation errors. Please check below\"\r\n elementToAppend.innerHTML = \"<ul class='list-unstyled m-0 py-3 d-flex align-items-center fs-6'><li><i class='fa fa-times-circle text-danger me-3 fs-2'></i>\" + message + \"</li></ul>\";\r\n elementToAppend.className += 'alert alert-InvalidValidation bg-light-danger text-danger';\r\n elementToAppend.id += 'errorId';\r\n // tslint:disable-next-line: prefer-for-of\r\n const elementToAppen = elementToAppend.cloneNode(true);\r\n // let targetElement = object.getElementsByClassName(\"b-control\")[0];\r\n object.insertBefore(elementToAppen, object.firstChild);\r\n }\r\n else {\r\n let ul = document.createElement(\"ul\");\r\n elementToAppend.appendChild(ul);\r\n\r\n for (const iterator of errorMessage) {\r\n let li = document.createElement(\"li\");\r\n li.innerHTML = iterator;\r\n ul.appendChild(li);\r\n }\r\n elementToAppend.className += 'alert alert-InvalidValidation bg-light-danger text-danger';\r\n elementToAppend.id += 'errorId';\r\n // tslint:disable-next-line: prefer-for-of\r\n const elementToAppen = elementToAppend.cloneNode(true);\r\n // let targetElement = object.getElementsByClassName(\"b-control\")[0];\r\n object.insertBefore(elementToAppen, object.firstChild);\r\n }\r\n this.isCreatedBefor = true;\r\n }\r\n\r\n removeGlobalError() {\r\n const removedList = document.getElementsByClassName('alert alert-InvalidValidation bg-light-danger text-danger');\r\n // tslint:disable-next-line: prefer-for-of\r\n for (let index = 0; index < removedList.length; index++) {\r\n const element = removedList[index];\r\n element.remove();\r\n }\r\n this.isCreatedBefor = false;\r\n }\r\n\r\n showInputErro(errors: any) {\r\n // show error on top of form \r\n this.showGlobalError();\r\n // remove old error from server\r\n this.removeElementsByClass('errortemplet');\r\n // Looping in error Object\r\n for (const key in errors) {\r\n if (errors.hasOwnProperty(key)) {\r\n for (const iterator of errors[key]) {\r\n const input = document.querySelectorAll('[ng-reflect-name=' + key + ']')[0];\r\n if ((input.attributes['ng-reflect-name'].value as string) === key) {\r\n this.removeElementsByClass('erroclass-' + key);\r\n const tagName = 'p'\r\n const elementToAppend = document.createElement(tagName); // Your tag name here\r\n elementToAppend.innerHTML = iterator;\r\n elementToAppend.style.color = 'red'\r\n elementToAppend.className += 'errortemplet erroclass-' + key;\r\n const elementToappen = elementToAppend.cloneNode(true);\r\n input.parentNode.insertBefore(elementToappen, input.lastChild);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeElementsByClass(className) {\r\n const elements = document.getElementsByClassName(className);\r\n while (elements.length > 0) {\r\n elements[0].parentNode.removeChild(elements[0]);\r\n }\r\n }\r\n\r\n renderServerErrors(form: FormGroup, err: HttpErrorResponse, requestOptions: RequestOptionsModel, formId?: string) {\r\n if (err.error == null) {\r\n return;\r\n }\r\n let errorsArray: string[] = [];\r\n\r\n this.requestOptions = requestOptions;\r\n\r\n if (err.error.validation_errors) {\r\n err.error.validation_errors.forEach((element: ErrorModel) => {\r\n let fieldName = element.field;\r\n let controlName = element.controlName;\r\n let message = element.message;\r\n if (form == null) {\r\n this.requestOptions.customErrorMessage ? this.utilityService.notifyErrorMessage(this.requestOptions.customErrorMessage) : this.utilityService.notifyErrorMessage(`${message}`);\r\n }\r\n else if (controlName && !this.hasControlName(form, controlName)) {\r\n errorsArray.push(`${fieldName}: ${message}`);\r\n }\r\n else {\r\n this.setFieldError(form, controlName, fieldName, message);\r\n this.showGlobalError(null, formId);\r\n }\r\n });\r\n\r\n if (errorsArray.length > 0)\r\n this.showGlobalError(errorsArray, formId)\r\n }\r\n }\r\n\r\n private hasControlName(form: FormGroup, controlName: string): boolean {\r\n let control = form.get(controlName);\r\n return control != null;\r\n }\r\n\r\n private setFieldError(form: FormGroup, controlName: string, fieldName: string, message: string) {\r\n let control = null\r\n\r\n if (controlName)\r\n control = this.getControlFormNameByFieldName(form, controlName);\r\n else\r\n control = this.getControlFormNameByFieldName(form, fieldName.split('.')[0]);\r\n\r\n let errors = { \"errorMassage\": message };\r\n let fieldNameArray = fieldName.split('.');\r\n if (fieldNameArray.length >= 1) {\r\n switch (fieldNameArray[fieldNameArray.length - 1].toLocaleLowerCase()) {\r\n case \"english\":\r\n let englishControl = control.get(\"English\")\r\n englishControl.setErrors(errors);\r\n break;\r\n case \"arabic\":\r\n let arabicControl = control.get(\"Arabic\")\r\n arabicControl.setErrors(errors);\r\n break;\r\n default:\r\n control.setErrors(errors);\r\n }\r\n }\r\n else {\r\n this.requestOptions.customErrorMessage ? this.utilityService.notifyErrorMessage(this.requestOptions.customErrorMessage) : this.utilityService.notifyErrorMessage(`${message}`)\r\n }\r\n }\r\n\r\n private getControlFormNameByFieldName(form: FormGroup, fieldName: string) {\r\n const formControls = form.controls;\r\n let controlName = Object.keys(formControls).find(c => c.toLocaleLowerCase() === fieldName.toLocaleLowerCase());\r\n let control = form.get(controlName);\r\n return control;\r\n }\r\n\r\n}\r\n","// This file can be replaced during build by using the `fileReplacements` array.\r\n// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.\r\n// The list of file replacements can be found in `angular.json`.\r\n\r\nexport const environment = Object.assign({}, (window as any).Environment);\r\n\r\n\r\n/*\r\n * In development mode, to ignore zone related error stack frames such as\r\n * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can\r\n * import the following file, but please comment it out in production mode\r\n * because it will have performance impact when throw error\r\n */\r\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from '../config/environment';\r\nimport { AreaModel } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnvironmentService {\r\n\r\n static areaList: AreaModel[] = [];\r\n\r\n static AreaList: AreaModel[] = [];\r\n\r\n getEnvironmentObject() {\r\n return environment;\r\n }\r\n\r\n getBaseUrl() {\r\n return environment[\"BBSF_BaseURL\"];\r\n }\r\n\r\n getApiUrl() {\r\n return environment[\"BBSF_ApiUrl\"];\r\n }\r\n\r\n getProductionMode() {\r\n return environment[\"BBSF_IsProduction\"] as boolean;\r\n }\r\n\r\n getDefaultLanguage() {\r\n return environment[\"BBSF_DefaultLanguage\"] as string;\r\n }\r\n\r\n getIdentityServerUrl() {\r\n return environment[\"BBSF_IdentityServerUrl\"];\r\n }\r\n\r\n getIsIdentityServerExternal() {\r\n return environment[\"BBSF_IsExternalIdentityServer\"] as string;\r\n }\r\n\r\n getIsIdentityServerClientId() {\r\n return environment[\"BBSF_IdentityServer_Client_Id\"] as string;\r\n }\r\n\r\n getIsIdentityServerClientSecret() {\r\n return environment[\"BBSF_IdentityServer_Client_Secret\"] as string;\r\n }\r\n\r\n getBBSFAuthenticationMode() {\r\n let Mode = environment[\"BBSF_AuthenticationMode\"] as string;\r\n return Mode;\r\n }\r\n\r\n getUAEPassBaseUrl() {\r\n let Mode = environment[\"UAEPass_BaseUrl\"] as string;\r\n return Mode;\r\n }\r\n getUAEPassClientID() {\r\n let Mode = environment[\"UAEPass_ClientID\"] as string;\r\n return Mode;\r\n }\r\n getUAEPassRedirectUrl() {\r\n let Mode = environment[\"UAEPass_RedirectUrl\"] as string;\r\n return Mode;\r\n }\r\n getUAEPassAuthorizationEndPoint() {\r\n let Mode = environment[\"UAEPass_AuthorizationEndPoint\"] as string;\r\n return Mode;\r\n }\r\n\r\n getUAEPassRedirectLogoutUrl() {\r\n let Mode = environment[\"UAEPass_RedirectLogoutUrl\"] as string;\r\n return Mode;\r\n }\r\n\r\n getUAEPassLogoutEndPoint() {\r\n let Mode = environment[\"UAEPass_LogoutEndPoint\"] as string;\r\n return Mode;\r\n }\r\n\r\n\r\n getIsEnableWindowsAuthentication() {\r\n let Mode = environment[\"BBSF_Enable_WindowsAuthentication\"] as string;\r\n return Mode.toLocaleLowerCase() == 'true';\r\n }\r\n\r\n getAllowMultiTenancy() {\r\n let mode = environment[\"BBSF_AllowMultiTenancy\"] as string;\r\n return mode.toLocaleLowerCase() == 'true';\r\n }\r\n\r\n getCookieName() {\r\n let cookieName = environment[\"BBSF_CookieName\"];\r\n return cookieName;\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { EnvironmentService, RequestHandlerService, StylesBundleService } from '.';\r\nimport { AuthService } from '../authentication';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MasterLayoutService {\r\n\r\n apiUrl = '/api/Home/';\r\n\r\n constructor(private router: Router, private http: RequestHandlerService, private authService: AuthService,\r\n private stylesBundleService: StylesBundleService, private translate: TranslateService,\r\n private environmentService: EnvironmentService) { }\r\n\r\n switchLang(lang: string, bundleEnglishName: string, bundleArabicName: string) {\r\n if (this.authService.isAuthenticated()) {\r\n this.changeLanguage(lang).subscribe((result) => {\r\n this.updateUserInfo().subscribe((Value) => {\r\n let UserInfoObject = Value as any;\r\n this.authService.handleAccessToken(UserInfoObject.token);\r\n this.stylesBundleService.loadThemes(\r\n lang,\r\n bundleEnglishName,\r\n bundleArabicName\r\n );\r\n localStorage.setItem('language', lang);\r\n this.translate.use(lang);\r\n });\r\n });\r\n }\r\n else\r\n this.router.navigate(['/Admin/account/login']);\r\n }\r\n\r\n reloadComponent() {\r\n let currentUrl = this.router.url;\r\n this.router.routeReuseStrategy.shouldReuseRoute = () => false;\r\n this.router.onSameUrlNavigation = 'reload';\r\n this.router.navigate([currentUrl]);\r\n }\r\n\r\n private changeLanguage(key: string) {\r\n let params = new HttpParams();\r\n params = params.append('UserId', AuthService.user.profile.id);\r\n params = params.append('LanguageKey', key);\r\n return this.http.post(this.apiUrl + 'UpdateLanguage', null, null, params);\r\n }\r\n\r\n logError(error: string) {\r\n let params = new HttpParams();\r\n params = params.append('error', error);\r\n return this.http.post(this.apiUrl + 'LogError', null, null, params);\r\n }\r\n\r\n private updateUserInfo() {\r\n return this.http.get(this.apiUrl + 'UpdateUserInfo', null, null);\r\n\r\n }\r\n\r\n switchRole(permissionSetID: string) {\r\n this.updateRole(permissionSetID).subscribe((result) => {\r\n this.updateUserInfo().subscribe((Value) => {\r\n let UserInfoObject = Value as any;\r\n this.authService.handleAccessToken(UserInfoObject.token);\r\n });\r\n });\r\n }\r\n\r\n private updateRole(permissionSetID: string) {\r\n let params = new HttpParams();\r\n params = params.append('UserId', AuthService.user.profile.id);\r\n params = params.append('RoleID', permissionSetID);\r\n return this.http.post(this.apiUrl + 'SwitchRole', null, null, params);\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from \"@angular/common/http\";\r\nimport { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { plainToClass } from 'class-transformer';\r\nimport { Observable, Subject, throwError } from 'rxjs';\r\nimport { map, takeUntil, tap } from 'rxjs/operators';\r\nimport { BBSFTranslateService, EnvironmentService, UtilityService } from \".\";\r\nimport { AuthService } from '../authentication/auth.service';\r\nimport { RequestOptionsModel } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RequestHandlerService implements OnDestroy {\r\n\r\n private currentLanguage = \"\";\r\n public onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n private router = inject(Router);\r\n constructor(\r\n private http: HttpClient,\r\n private authService: AuthService,\r\n private environmentService: EnvironmentService,\r\n private utilityService: UtilityService,\r\n private bbsfTranslateService: BBSFTranslateService\r\n ) {\r\n //using localStorage to avoid call getCurrentLanguage() because it is not all to use async in constructor\r\n this.bbsfTranslateService.onLangChange.subscribe((event) => {\r\n if (this.currentLanguage != event.lang) {\r\n this.currentLanguage = event.lang;\r\n }\r\n });\r\n }\r\n\r\n // Function to check if the internet connection is available\r\n private isOnline(): boolean {\r\n return navigator.onLine || !this.environmentService.getProductionMode();\r\n }\r\n\r\n // ...\r\n get<T>(Url: string, params?: HttpParams, responseType?: new () => T, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: errorCode });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.get<T>(this.environmentService.getApiUrl() + Url, { headers: headers, params: params }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n ) as Observable<T>;\r\n }\r\n\r\n post<T>(Url: string, model?: any, responseType?: new () => T, params?: HttpParams, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.post<T>(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n delete<T>(Url: string, deletedId: string, requestOptions?: RequestOptionsModel, responseType?: new () => T, params?: HttpParams): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.delete<T>(this.environmentService.getApiUrl() + Url + `/${deletedId}`, { headers: headers, params: params }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n put<T>(Url: string, model?: any, params?: HttpParams, responseType?: new () => T, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.put<T>(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n patch<T>(Url: string, model?: any, responseType?: new () => T, params?: HttpParams, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': this.authService.authorizationHeaderValue(),\r\n\r\n });\r\n this.currentLanguage = localStorage.getItem('language');\r\n headers = headers.set('Accept-Language', this.currentLanguage.toString());\r\n headers = headers.set('ignore-cookies', 'true');\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n\r\n return this.http.patch<T>(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n download<T>(Url: string, params?: HttpParams, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.get<T>(this.environmentService.getApiUrl() + Url, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n\r\n Upload<T>(Url: string, model?: any, requestOptions?: RequestOptionsModel): Observable<any> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeadersUpdated();\r\n return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, reportProgress: true, observe: 'events' }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n })\r\n );\r\n }\r\n public destroyHandler(): void {\r\n this.onDestroy$.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n console.log(\"clearInterval\");\r\n this.destroyHandler();\r\n }\r\n\r\n private handleError(err: HttpErrorResponse) {\r\n var isEnglish = this.utilityService.getCurrentLanguage() == \"en\";\r\n if (err.error instanceof ErrorEvent) {\r\n this.utilityService.notifyErrorMessage();\r\n }\r\n else {\r\n if (err.status == 400)\r\n throwError(err);//error 400 is thrown to be catch by the Form component to handle Fluent validation errors\r\n else if (err.status == 401)\r\n this.router.navigate([\"/Admin/account/login\"]);\r\n else if (err.status == 403)\r\n this.utilityService.notifyErrorMessage(isEnglish ? \"Sorry, You're not authorized to access this action\" : \"عذرا ليس لديك الصلاحيه لهذا الطلب\");\r\n else if (err.status == 510)\r\n this.utilityService.notifyErrorMessage(isEnglish ? \"Can not delete this item as it is related to others\" : \"لا يمكن حذف هذا العنصر لأنه مرتبط بعناصر أخرى\");\r\n else if (err.status == 515)\r\n this.utilityService.notifyErrorMessage((err.error ? err.error.Message : err.message));\r\n else if (err.status == 504)\r\n this.utilityService.notifyErrorMessage((err.error ? err.error.Message : err.message));\r\n else {\r\n console.log(`error message is: ${err.error ? err.error.Message : err.message}`);\r\n this.utilityService.notifyErrorMessage(this.utilityService.getResourceValue(\"ErrorMassage\"));\r\n }\r\n }\r\n this.utilityService.stopBlockUI();\r\n }\r\n\r\n getHeaders() {\r\n return new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': this.authService.authorizationHeaderValue(),\r\n 'Client-Local-Time-Zone': Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n 'Accept-Language': localStorage.getItem('language'),\r\n 'ignore-cookies': 'true'\r\n });\r\n }\r\n getHeadersUpdated() {\r\n return new HttpHeaders({\r\n 'Authorization': this.authService.authorizationHeaderValue(),\r\n 'Client-Local-Time-Zone': Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n 'Accept-Language': localStorage.getItem('language'),\r\n 'ignore-cookies': 'true',\r\n 'Video-Upload': 'true',\r\n 'Image-Upload': 'true',\r\n });\r\n\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { BBSFTranslateService } from '.';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StylesBundleService {\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document, private translateService: BBSFTranslateService) { }\r\n\r\n loadThemes(lang: string, bundleEnglishName: string, bundleArabicName: string) {\r\n if (lang == \"ar\") {\r\n this.loadStyleBundle(bundleArabicName.toString());\r\n document.querySelector('html').setAttribute(\"b-lang\", \"ar\"); //use b-lang instead of lang to fix firefox number inputs in Arabic locale\r\n document.querySelector('html').setAttribute(\"dir\", \"rtl\");\r\n } else {\r\n this.loadStyleBundle(bundleEnglishName.toString());\r\n document.querySelector('html').setAttribute(\"b-lang\", \"en\");\r\n document.querySelector('html').setAttribute(\"dir\", \"ltr\");\r\n }\r\n\r\n }\r\n\r\n loadThemesColor(theme: string, bundleDarkName: string, bundleLightName: string) {\r\n if (theme == \"Light\")\r\n this.loadStyleBundle(bundleLightName.toString());\r\n else\r\n this.loadStyleBundle(bundleDarkName.toString());\r\n }\r\n\r\n private loadStyleBundle(styleName: string): void {\r\n const head = this.document.getElementsByTagName('head')[0];\r\n let themeLink = this.document.getElementById('client-theme') as HTMLLinkElement;\r\n let shouldRemoveOld = false;\r\n\r\n if (themeLink) {\r\n // ✅ Check if current CSS already loaded (by exact filename)\r\n const currentFileName = this.getFileName(themeLink.href);\r\n const requestedFileName = this.getFileName(styleName);\r\n\r\n if (currentFileName === requestedFileName) {\r\n return; // Same CSS already loaded\r\n } else {\r\n shouldRemoveOld = true; // Mark for removal after new CSS is added\r\n }\r\n }\r\n\r\n // ✅ Add new CSS first (prevents FOUC)\r\n const style = this.document.createElement('link');\r\n style.id = 'client-theme';\r\n style.rel = 'stylesheet';\r\n style.href = `${styleName}`;\r\n head.appendChild(style);\r\n\r\n // ✅ Remove old CSS after new one is added (smooth transition)\r\n if (shouldRemoveOld && themeLink) {\r\n themeLink.remove();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Extract filename from full path\r\n * @param path Full path or just filename\r\n * @returns The filename only\r\n */\r\n private getFileName(path: string): string {\r\n // Extract just the filename from full path\r\n const parts = path.split('/');\r\n return parts[parts.length - 1];\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BBSFTranslateService extends TranslateService {\r\n}","import { inject } from \"@angular/core\";\r\nimport { ResolveFn } from \"@angular/router\";\r\nimport { BBSFTranslateService } from \".\";\r\n\r\nexport const TranslationResolverService: ResolveFn<any> = () => {\r\n let translateService = inject(BBSFTranslateService);\r\n return translateService.getTranslation(translateService.currentLang);\r\n};","import { Injectable, Injector } from '@angular/core';\r\nimport { BlockUI, NgBlockUI } from 'ng-block-ui';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { BBSFTranslateService, EnvironmentService } from '.';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilityService {\r\n\r\n isCreatedBefore = false;\r\n\r\n @BlockUI() blockUI: NgBlockUI;\r\n\r\n constructor(private translator: BBSFTranslateService, private environmentService: EnvironmentService, private injector: Injector) {\r\n\r\n }\r\n\r\n getResourceValue(Key: string): string { \r\n let ResourceValue = this.translator.instant(Key)\r\n return ResourceValue;\r\n }\r\n\r\n getCurrentLanguage() {\r\n let currentLanguage = this.environmentService.getDefaultLanguage();\r\n let lang = localStorage.getItem('language');\r\n if (lang)\r\n currentLanguage = lang;\r\n else\r\n localStorage.setItem('language', currentLanguage);\r\n return currentLanguage;\r\n }\r\n\r\n isCurrentLanguageEnglish() {\r\n return this.getCurrentLanguage() == \"en\"\r\n }\r\n\r\n isCurrentLanguageArabic() {\r\n return this.getCurrentLanguage() == \"ar\"\r\n }\r\n\r\n notifySuccessMessage(Message?: string, title?: string, time?: number, showHeader: boolean = true) {\r\n let MessageTemplate = this.getResourceValue(\"SuccessMessage\");\r\n let titleTemplate: string;\r\n if (Message) {\r\n MessageTemplate = Message;\r\n }\r\n if (title) {\r\n titleTemplate = title;\r\n }\r\n let toaster = this.injector.get(ToastrService);\r\n showHeader ? toaster.success(MessageTemplate, titleTemplate) : toaster.success(MessageTemplate);\r\n }\r\n\r\n notifyErrorMessage(Message?: string, title?: string, time?: number, showHeader: boolean = true) {\r\n let MessageTemplate = this.getResourceValue(\"ErrorMessage\");\r\n let titleTemplate = this.getResourceValue(\"Error\");\r\n if (Message) {\r\n MessageTemplate = Message;\r\n }\r\n if (title) {\r\n titleTemplate = title;\r\n }\r\n const toaster = this.injector.get(ToastrService);\r\n showHeader ? toaster.error(MessageTemplate, titleTemplate) : toaster.error(MessageTemplate);\r\n }\r\n\r\n notifyWarningMessage(Message?: string, title?: string, time?: number, showHeader: boolean = true) {\r\n let MessageTemplate = this.getResourceValue(\"WarningMessage\");\r\n let titleTemplate = this.getResourceValue(\"Warning\");\r\n if (Message) {\r\n MessageTemplate = Message;\r\n }\r\n if (title) {\r\n titleTemplate = title;\r\n }\r\n const toaster = this.injector.get(ToastrService);\r\n showHeader ? toaster.warning(MessageTemplate, titleTemplate) : toaster.warning(MessageTemplate);\r\n }\r\n\r\n startBlockUI() {\r\n this.blockUI.start();\r\n }\r\n\r\n stopBlockUI() {\r\n this.blockUI.stop();\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { RequestHandlerService } from \"./request-handler.service\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { tap, shareReplay, take } from \"rxjs/operators\";\r\nimport { LanguageDTO } from \"../models\";\r\n\r\n/**\r\n * Language service with internal caching\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LanguageService {\r\n apiUrl = '/api/Language/';\r\n private _languages: LanguageDTO[] = [];\r\n \r\n private isLoading = false;\r\n private isLoaded = false;\r\n private loadRequest$: Observable<LanguageDTO[]> | null = null;\r\n\r\n constructor(private http: RequestHandlerService) {\r\n }\r\n\r\n /** Pure getter - no side effects */\r\n get languages(): LanguageDTO[] {\r\n return this._languages;\r\n }\r\n\r\n \r\n /** Internal method - loads languages from API (race-condition safe) */\r\n private loadLanguages(): void {\r\n if (this.isLoaded || this.isLoading) return; // Sync guard prevents race condition\r\n \r\n this.isLoading = true; // Set immediately to block concurrent calls\r\n\r\n this.loadRequest$ = this.http.get<LanguageDTO[]>(this.apiUrl + 'GetAll', null, null).pipe(\r\n tap((languages: LanguageDTO[]) => {\r\n this._languages = languages;\r\n this.isLoaded = true;\r\n this.isLoading = false;\r\n }),\r\n shareReplay(1)\r\n );\r\n\r\n // take(1) ensures auto-unsubscribe after completion\r\n this.loadRequest$.pipe(take(1)).subscribe({\r\n error: (err) => {\r\n this.isLoading = false;\r\n this.loadRequest$ = null;\r\n }\r\n });\r\n }\r\n\r\n /** Get languages as Observable - triggers load if not loaded */\r\n getLanguages(): Observable<LanguageDTO[]> {\r\n if (this.isLoaded) {\r\n return of(this._languages);\r\n }\r\n\r\n if (!this.isLoading) {\r\n this.loadLanguages();\r\n }\r\n\r\n return this.loadRequest$ ?? of(this._languages);\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { UtilityService } from './utility.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpeechRecognitionService {\r\n recognition: any;\r\n isListening = false;\r\n isSupported = false;\r\n language: string = 'en-US';\r\n\r\n constructor(private zone: NgZone,private utilityService:UtilityService) {\r\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\r\n\r\n if (SpeechRecognition) {\r\n this.recognition = new SpeechRecognition();\r\n this.recognition.continuous = true;\r\n this.recognition.interimResults = false;\r\n this.recognition.maxAlternatives = 1;\r\n this.isSupported = true;\r\n }\r\n }\r\n\r\n startListening(language: string = this.language): Observable<string> {\r\n if (!this.isSupported) {\r\n return throwError(() => new Error('Web Speech API is not supported in this browser.'));\r\n }\r\n\r\n return new Observable(observer => {\r\n this.isListening = true;\r\n this.recognition.lang = language;\r\n this.recognition.start();\r\n\r\n this.recognition.onresult = (event: any) => {\r\n this.zone.run(() => {\r\n const transcript = event.results[event.results.length - 1][0].transcript;\r\n observer.next(transcript);\r\n });\r\n };\r\n\r\n this.recognition.onspeechend = () => {\r\n this.stopListening();\r\n };\r\n\r\n this.recognition.onerror = (event: any) => {\r\n this.zone.run(() => {\r\n if (event.error === 'not-allowed') {\r\n this.utilityService.notifyErrorMessage(this.utilityService.getResourceValue(\"MicAccessDenied\"));\r\n observer.error('Microphone access denied by the user.');\r\n } else {\r\n observer.error(event.error);\r\n }\r\n });\r\n };\r\n\r\n this.recognition.onend = () => {\r\n this.zone.run(() => {\r\n if (this.isListening) {\r\n this.recognition.start(); // Automatically restart\r\n } else {\r\n observer.complete();\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n stopListening() {\r\n if (this.isSupported) {\r\n this.isListening = false;\r\n this.recognition.stop();\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { lastValueFrom } from 'rxjs';\r\nimport { BBSFTranslateService } from './translate.service';\r\nimport { environment } from '../config/environment';\r\n\r\ndeclare const window: any;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileLoaderService {\r\n private availableLanguages = ['en', 'ar']; // Add more languages as needed\r\n // environment:any;\r\n constructor(private translate: BBSFTranslateService, private http: HttpClient) {\r\n this.translate.addLangs(this.availableLanguages);\r\n }\r\n\r\n loadEnvironment(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = '/assets/config/environment.js';\r\n script.onload = () => {\r\n if (window.Environment) {\r\n Object.assign(environment, window.Environment);\r\n resolve();\r\n } else {\r\n reject('Environment variables not found.');\r\n }\r\n };\r\n script.onerror = () => reject('Failed to load environment.js');\r\n document.head.insertBefore(script, document.head.firstChild);\r\n });\r\n }\r\n\r\n async preloadTranslations(): Promise<void> {\r\n try {\r\n const requests = this.availableLanguages.map(async (lang) => {\r\n const translations = await lastValueFrom(this.http.get(`/assets/i18n/${lang}.json`));\r\n this.translate.setTranslation(lang, translations, true);\r\n });\r\n\r\n await Promise.all(requests);\r\n this.translate.use('en'); // Set default language manually\r\n } catch (error) {\r\n console.error('Error preloading translations:', error);\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { SwUpdate, VersionEvent } from '@angular/service-worker';\r\nimport { filter, switchMap } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ServiceWorkerHelperService {\r\n private swRegistration: ServiceWorkerRegistration | null = null;\r\n private updateCheckInProgress = false;\r\n\r\n constructor(public updates: SwUpdate) {\r\n this.initializeServiceWorker();\r\n }\r\n\r\n public checkForUpdates(): void {\r\n if (!this.updates.isEnabled) {\r\n console.warn('Service Worker updates are not enabled');\r\n return;\r\n }\r\n\r\n // Set up event listeners\r\n this.setupUpdateListeners();\r\n\r\n // Start smart checking for updates\r\n this.startSmartUpdateChecking();\r\n\r\n // CRITICAL: Handle chunk load errors\r\n this.setupChunkErrorHandler();\r\n }\r\n\r\n private setupUpdateListeners(): void {\r\n this.updates.versionUpdates\r\n .pipe(\r\n filter((event: VersionEvent) => event.type === 'VERSION_DETECTED')\r\n )\r\n .subscribe(() => {\r\n console.log('New version detected, preparing to update...');\r\n this.skipWaiting();\r\n });\r\n\r\n this.updates.versionUpdates\r\n .pipe(\r\n filter((event: VersionEvent) => event.type === 'VERSION_READY'),\r\n switchMap(() => this.updates.activateUpdate())\r\n )\r\n .subscribe(() => {\r\n console.log('New version activated, reloading page...');\r\n // CRITICAL FIX: Reload the page after activation\r\n window.location.reload();\r\n });\r\n\r\n // Handle installation failures\r\n this.updates.versionUpdates\r\n .pipe(\r\n filter((event: VersionEvent) => event.type === 'VERSION_INSTALLATION_FAILED')\r\n )\r\n .subscribe(() => {\r\n console.error('Service Worker installation failed');\r\n this.clearCacheAndReload();\r\n });\r\n\r\n // Handle unrecoverable state\r\n this.updates.unrecoverable.subscribe(event => {\r\n console.error('Unrecoverable state:', event.reason);\r\n this.clearCacheAndReload();\r\n });\r\n }\r\n\r\n private startSmartUpdateChecking(): void {\r\n // Initial check\r\n this.performUpdateCheck();\r\n\r\n // Check every 2 minutes\r\n setInterval(() => {\r\n this.performUpdateCheck();\r\n }, 120000);\r\n\r\n // Check when user returns to tab\r\n document.addEventListener('visibilitychange', () => {\r\n if (!document.hidden) {\r\n this.performUpdateCheck();\r\n }\r\n });\r\n\r\n // Check when user focuses window\r\n window.addEventListener('focus', () => {\r\n this.performUpdateCheck();\r\n });\r\n }\r\n\r\n private performUpdateCheck(): void {\r\n if (this.updates.isEnabled && !this.updateCheckInProgress) {\r\n this.updateCheckInProgress = true;\r\n\r\n this.updates.checkForUpdate()\r\n .then(hasUpdate => {\r\n if (hasUpdate) {\r\n console.log('Update available, processing...');\r\n }\r\n })\r\n .catch(err => {\r\n console.error('Error checking for updates:', err);\r\n })\r\n .finally(() => {\r\n this.updateCheckInProgress = false;\r\n });\r\n }\r\n }\r\n\r\n private initializeServiceWorker(): void {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n this.swRegistration = registration;\r\n });\r\n }\r\n }\r\n\r\n private skipWaiting(): void {\r\n if (this.swRegistration?.waiting) {\r\n this.swRegistration.waiting.postMessage({ type: 'SKIP_WAITING' });\r\n }\r\n }\r\n\r\n // CRITICAL: Handle chunk load errors\r\n private setupChunkErrorHandler(): void {\r\n window.addEventListener('error', (event: ErrorEvent) => {\r\n const chunkFailedMessage = /Loading chunk [\\d]+ failed|ChunkLoadError/i;\r\n const isChunkError = event.message && chunkFailedMessage.test(event.message);\r\n\r\n if (isChunkError) {\r\n console.warn('Chunk load error detected, attempting recovery...');\r\n event.preventDefault(); // Prevent default error handling\r\n this.handleChunkLoadError();\r\n }\r\n });\r\n\r\n // Also handle unhandled promise rejections (some chunk errors appear here)\r\n window.addEventListener('unhandledrejection', (event: PromiseRejectionEvent) => {\r\n const reason = event.reason?.message || event.reason?.toString() || '';\r\n const isChunkError = /Loading chunk [\\d]+ failed|ChunkLoadError/i.test(reason);\r\n\r\n if (isChunkError) {\r\n console.warn('Chunk load error in promise, attempting recovery...');\r\n event.preventDefault();\r\n this.handleChunkLoadError();\r\n }\r\n });\r\n }\r\n\r\n private handleChunkLoadError(): void {\r\n // Check if we've already tried to recover recently (prevent infinite loops)\r\n const lastReloadTime = localStorage.getItem('lastChunkErrorReload');\r\n const now = Date.now();\r\n\r\n if (lastReloadTime && (now - parseInt(lastReloadTime, 10)) < 5000) {\r\n console.error('Multiple chunk errors in short time, skipping auto-reload');\r\n return;\r\n }\r\n\r\n localStorage.setItem('lastChunkErrorReload', now.toString());\r\n\r\n // Clear cache and reload\r\n this.clearCacheAndReload();\r\n }\r\n\r\n private clearCacheAndReload(): void {\r\n console.log('Clearing caches and reloading...');\r\n\r\n if ('caches' in window) {\r\n caches.keys().then(cacheNames => {\r\n return Promise.all(\r\n cacheNames.map(cacheName => {\r\n console.log('Deleting cache:', cacheName);\r\n return caches.delete(cacheName);\r\n })\r\n );\r\n }).then(() => {\r\n // Unregister all service workers\r\n if ('serviceWorker' in navigator) {\r\n return navigator.serviceWorker.getRegistrations().then(registrations => {\r\n return Promise.all(\r\n registrations.map(registration => {\r\n console.log('Unregistering service worker');\r\n return registration.unregister();\r\n })\r\n );\r\n });\r\n }\r\n }).then(() => {\r\n // Small delay to ensure cleanup completes\r\n setTimeout(() => {\r\n window.location.reload();\r\n }, 100);\r\n }).catch(err => {\r\n console.error('Error during cache cleanup:', err);\r\n // Reload anyway\r\n window.location.reload();\r\n });\r\n } else {\r\n (window as any).location.reload();\r\n }\r\n }\r\n}","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable, Injector } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { BBSFTranslateService, EnvironmentService } from '../services';\r\nimport { User } from '../models/UserModel';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { UtilityService } from '../services/utility.service';\r\nimport { AuthenticationModes } from '../enums/authentication-modes-enums';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n public redirectUrl: string = '';\r\n static user: User | null = null;\r\n _user: User | null;\r\n private get user(): User | null {\r\n // Always use static as source of truth\r\n // Only hydrate if static is null\r\n if (!AuthService.user) {\r\n this.getUserManager(); // This will set AuthService.user\r\n }\r\n\r\n return AuthService.user; // Always return fresh static value\r\n }\r\n static UserClaims: any = null;\r\n private jwtHelper: JwtHelperService = new JwtHelperService();\r\n private isAuthenticatedSubject = new BehaviorSubject<boolean>(this.hasToken());\r\n isAuthenticate$ = this.isAuthenticatedSubject.asObservable();\r\n //refresh\r\n static timers = [];\r\n static seconds = 0;\r\n private static isLoginInProgress = false;\r\n\r\n // User cache to prevent inconsistent multi-call results\r\n private _userCache: { user: User | null; timestamp: number; } | null = null;\r\n private USER_CACHE_TTL = 100; // ms\r\n\r\n constructor(private injector: Injector, private http: HttpClient, private environmentService: EnvironmentService, private translateService: BBSFTranslateService, private router: Router, private cookieService: CookieService, private utilityService: UtilityService) {\r\n\r\n // Listen for logout events from other tabs\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'auth_logout_broadcast' && event.newValue) {\r\n this.clearLocalAuthState({ keepRedirectUrl: false });\r\n this.router.navigate(['/Admin/account/login']);\r\n }\r\n });\r\n }\r\n\r\n private _TOKEN_KEY: string;\r\n get TOKEN_KEY() {\r\n if (!this._TOKEN_KEY) {\r\n this._TOKEN_KEY = this.environmentService.getCookieName();\r\n }\r\n return this._TOKEN_KEY;\r\n }\r\n\r\n private hasToken(): boolean {\r\n const token = this.cookieService.get(this.TOKEN_KEY);\r\n return token && !this.jwtHelper.isTokenExpired(token);\r\n }\r\n\r\n getUserManager() {\r\n const now = Date.now();\r\n\r\n // Return cached user if fresh (within 100ms TTL)\r\n if (this._userCache && now - this._userCache.timestamp < this.USER_CACHE_TTL) {\r\n return this._userCache.user;\r\n }\r\n\r\n const token = this.cookieService.get(this.TOKEN_KEY);\r\n\r\n if (token) {\r\n try {\r\n // Check both via helper and directly for additional safety\r\n const isExpired = this.jwtHelper.isTokenExpired(token);\r\n const expiryDate = this.jwtHelper.getTokenExpirationDate(token);\r\n const hasTimeLeft = expiryDate && expiryDate.getTime() > Date.now();\r\n\r\n if (!isExpired && hasTimeLeft) {\r\n this.handleAccessTokenWithoutLanguage(token);\r\n } else {\r\n this.clearLocalAuthState({ keepRedirectUrl: true });\r\n }\r\n } catch (error) {\r\n // Invalid token format\r\n this.clearLocalAuthState({ keepRedirectUrl: true });\r\n }\r\n }\r\n else {\r\n this.clearLocalAuthState({ keepRedirectUrl: true });\r\n }\r\n\r\n // Update cache with current user state\r\n this._userCache = { user: AuthService.user, timestamp: now };\r\n return AuthService.user;\r\n }\r\n\r\n getUser() {\r\n // No-op: getter now always reads from static\r\n // Kept for backward compatibility\r\n }\r\n storUser(User: any) {\r\n // Getter now always reads from static, so we don't need to sync\r\n // This method appears unused but kept for backward compatibility\r\n }\r\n\r\n getCurrentUser() {\r\n return AuthService.user;\r\n }\r\n\r\n /**\r\n * The only supported way to read the current user's profile.\r\n * Ensures the in-memory user is hydrated from cookie (or cleared) before returning profile.\r\n */\r\n public getCurrentUserProfile(): any | null {\r\n // Force hydration/cleanup based on cookie state\r\n this.getUserManager();\r\n\r\n return AuthService.user?.profile ?? null;\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n const user = this.user; // Call getter to ensure hydrated\r\n if (!user) {\r\n return false;\r\n }\r\n\r\n // Add 10-second grace period to prevent race conditions\r\n const expiryDate = new Date(user.expires_at);\r\n const nowWithBuffer = new Date(Date.now() + 10000);\r\n const now = new Date();\r\n const secondsUntilExpiry = (expiryDate.getTime() - now.getTime()) / 1000;\r\n const result = expiryDate.getTime() > nowWithBuffer.getTime();\r\n\r\n return result;\r\n }\r\n\r\n isUserInRole(allowedPermission) {\r\n const profile = this.getCurrentUserProfile();\r\n if (!profile) {\r\n return false;\r\n }\r\n\r\n let selectedPermissionSetID = Number.parseInt(profile['selectedpermissionsetid']);\r\n return allowedPermission.includes(selectedPermissionSetID);\r\n }\r\n\r\n isUserPermissionSetsInRoles(allowedPermission: number[]): boolean {\r\n const profile = this.getCurrentUserProfile();\r\n if (!profile) {\r\n return false;\r\n }\r\n\r\n const permissionSetSIDString = profile['permissionSetSID'];\r\n if (!permissionSetSIDString) {\r\n return false;\r\n }\r\n\r\n // Split comma-separated string and convert to numbers\r\n const userPermissionSets = permissionSetSIDString\r\n .split(',')\r\n .map(id => Number.parseInt(id.trim()))\r\n .filter(id => !isNaN(id)); // Filter out invalid numbers\r\n\r\n // Check if any user permission set is in the allowed permissions\r\n return userPermissionSets.some(permissionSetID => allowedPermission.includes(permissionSetID));\r\n }\r\n\r\n authorizationHeaderValue(): string {\r\n return AuthService.user\r\n ? `${AuthService.user.token_type} ${AuthService.user.access_token}`\r\n : '';\r\n }\r\n\r\n name(): string {\r\n const profile = this.getCurrentUserProfile();\r\n return profile?.given_name ?? '';\r\n }\r\n\r\n setUrl(url) {\r\n localStorage.setItem('redirectUrl', url);\r\n }\r\n\r\n getUrl() {\r\n return localStorage.getItem('redirectUrl') ?? \"/\";\r\n }\r\n\r\n /**\r\n * Local-only cleanup primitive (no HTTP, no redirects).\r\n * Safe to call before/after auth transitions to prevent stale-user windows.\r\n */\r\n clearLocalAuthState(options?: { keepRedirectUrl?: boolean; }) {\r\n // Clear timers\r\n AuthService.timers.forEach((t) => {\r\n clearInterval(t);\r\n });\r\n AuthService.timers = [];\r\n\r\n // Reset seconds counter to prevent stale timers\r\n AuthService.seconds = 0;\r\n\r\n // Clear memory\r\n AuthService.user = null;\r\n this._user = null;\r\n AuthService.UserClaims = null;\r\n\r\n // Delete cookie\r\n this.cookieService.delete(this.TOKEN_KEY, '/');\r\n\r\n // Clear redirectUrl unless explicitly told not to\r\n if (options?.keepRedirectUrl !== true) {\r\n localStorage.removeItem('redirectUrl');\r\n }\r\n\r\n // Invalidate user cache since auth state is cleared\r\n this._userCache = null;\r\n\r\n this.isAuthenticatedSubject.next(false);\r\n }\r\n\r\n signOut() {\r\n const wasAuthenticated = this.isAuthenticated();\r\n\r\n // If authenticated, kick off server logout BEFORE wiping local auth context (cookie/header/session)\r\n if (wasAuthenticated) {\r\n this.logout().subscribe({ next: () => { }, error: () => { } });\r\n }\r\n\r\n // Always clear local state immediately (no stale-user window)\r\n this.clearLocalAuthState({ keepRedirectUrl: false });\r\n\r\n // Notify other tabs about logout\r\n localStorage.setItem('auth_logout_broadcast', Date.now().toString());\r\n localStorage.removeItem('auth_logout_broadcast');\r\n\r\n // Redirect (Forms vs UAEPass)\r\n if (this.environmentService.getBBSFAuthenticationMode() == AuthenticationModes.UAEPass)\r\n this.logoutFromUAEPass();\r\n else\r\n this.router.navigate(['/Admin/account/login']);\r\n }\r\n\r\n logout() {\r\n const httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n }),\r\n };\r\n let ApiUrl = '/Account/';\r\n return this.http.get(this.environmentService.getApiUrl() + ApiUrl + 'Logout', httpOptions);\r\n }\r\n\r\n clearUserSessionClaims() {\r\n const httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n }),\r\n };\r\n let ApiUrl = '/api/Home/';\r\n return this.http.get(this.environmentService.getBaseUrl() + ApiUrl + 'ClearCurrentUserSession', httpOptions);\r\n }\r\n\r\n async handleAccessToken(response: any): Promise<void> {\r\n AuthService.isLoginInProgress = true;\r\n\r\n try {\r\n const token = response;\r\n\r\n // AGGRESSIVE timer cleanup before starting new session\r\n AuthService.timers.map(t => clearInterval(t));\r\n AuthService.timers = [];\r\n AuthService.seconds = 0; // Reset counter\r\n\r\n // Brief pause to ensure intervals are cleared\r\n await new Promise(resolve => setTimeout(resolve, 50));\r\n\r\n // Update user atomically\r\n AuthService.user = new User();\r\n AuthService.user.token_type = \"Bearer\";\r\n AuthService.user.access_token = token;\r\n AuthService.user.profile = this.jwtHelper.decodeToken(token);\r\n AuthService.user.expires_at = this.jwtHelper.getTokenExpirationDate(token);\r\n\r\n // Add 5-minute buffer to cookie expiry to prevent browser deletion before refresh\r\n // JWT expiry in isAuthenticated() remains authoritative\r\n const cookieExpiry = new Date(AuthService.user.expires_at.getTime() + (5 * 60 * 1000));\r\n\r\n // Update cookie atomically (no deletion window)\r\n this.cookieService.set(this.TOKEN_KEY, token, cookieExpiry, \"/\", null, true, 'Lax');\r\n\r\n localStorage.setItem(\"language\", AuthService.user.profile.locale);\r\n this.isAuthenticatedSubject.next(true);\r\n\r\n // Invalidate user cache since we have a new token\r\n this._userCache = null;\r\n\r\n this.setTokenSeconds();\r\n AuthService.timers.push(this.checkRefreshToken());\r\n await this.updateLanguage();\r\n } finally {\r\n AuthService.isLoginInProgress = false;\r\n }\r\n }\r\n\r\n handleAccessTokenWithoutLanguage(response: any) {\r\n const token = response;\r\n\r\n // Clear timers only (don't delete cookie to avoid race condition window)\r\n AuthService.timers.map(t => clearInterval(t));\r\n AuthService.timers = [];\r\n\r\n // Update user atomically\r\n AuthService.user = new User();\r\n AuthService.user.token_type = \"Bearer\";\r\n AuthService.user.access_token = token;\r\n AuthService.user.profile = this.jwtHelper.decodeToken(token);\r\n AuthService.user.expires_at = this.jwtHelper.getTokenExpirationDate(token);\r\n\r\n // Add 5-minute buffer to cookie expiry to prevent browser deletion before refresh\r\n // JWT expiry in isAuthenticated() remains authoritative\r\n const cookieExpiry = new Date(AuthService.user.expires_at.getTime() + (5 * 60 * 1000));\r\n\r\n // Update cookie atomically (no deletion window)\r\n this.cookieService.set(this.TOKEN_KEY, token, cookieExpiry, \"/\", null, true, 'Lax');\r\n\r\n localStorage.setItem(\"language\", AuthService.user.profile.locale);\r\n this.isAuthenticatedSubject.next(true);\r\n\r\n // Invalidate user cache since we have a new token\r\n this._userCache = null;\r\n\r\n this.setTokenSeconds();\r\n AuthService.timers.push(this.checkRefreshToken());\r\n }\r\n\r\n async updateLanguage() {\r\n const profile = this.getCurrentUserProfile();\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n if (!localStorage.getItem('language') || localStorage.getItem('language') == profile.locale)\r\n localStorage.setItem('language', profile.locale);\r\n\r\n if (this.translateService.currentLang != localStorage.getItem('language')) {\r\n this.translateService.resetLang(this.translateService.currentLang);\r\n await this.translateService.reloadLang(localStorage.getItem('language')).subscribe();\r\n }\r\n }\r\n\r\n checkRefreshToken() {\r\n let date = new Date() as any;\r\n const timerId = setInterval(() => {\r\n // Early exit if user logged out or no user exists\r\n if (!AuthService.user) {\r\n return;\r\n }\r\n\r\n const secondsRemaining = Math.floor(AuthService.seconds);\r\n\r\n // Early exit if seconds is invalid (negative or zero means already expired/cleared)\r\n if (secondsRemaining <= 0) {\r\n return;\r\n }\r\n\r\n // Refresh when 30 seconds remain (instead of 120)\r\n // This prevents continuous refresh loops with short-lived tokens\r\n // Timer is cleared after triggering to ensure only ONE refresh per token cycle\r\n if (secondsRemaining <= 30 && secondsRemaining > 0 && this.isAuthenticated()) {\r\n // Double-check user still exists before refreshing\r\n if (!AuthService.user) {\r\n return;\r\n }\r\n\r\n AuthService.timers.map(t => clearInterval(t));\r\n AuthService.timers = [];\r\n\r\n const token = this.cookieService.get(this.TOKEN_KEY);\r\n\r\n if (token) {\r\n this.refresh();\r\n } else {\r\n // Defensive: Token disappeared between isAuthenticated() check and now\r\n console.error('[REFRESH-TIMER] Token disappeared! Attempting recovery...', {\r\n timestamp: new Date().toISOString(),\r\n secondsRemaining,\r\n wasAuthenticated: true\r\n });\r\n\r\n // Try one more time after short delay\r\n setTimeout(() => {\r\n const retryToken = this.cookieService.get(this.TOKEN_KEY);\r\n\r\n if (retryToken) {\r\n this.refresh();\r\n } else {\r\n console.error('[REFRESH-TIMER] Token still missing after retry');\r\n // Don't clear auth state here - let natural expiry handle it\r\n // This prevents premature logout if user is still active\r\n }\r\n }, 100);\r\n }\r\n }\r\n AuthService.seconds--;\r\n }, 1000);\r\n\r\n return timerId;\r\n }\r\n\r\n setTokenSeconds() {\r\n let date = new Date() as any;\r\n AuthService.seconds = (AuthService.user.expires_at - date) / 1000;\r\n }\r\n\r\n refresh() {\r\n // Don't refresh if login is in progress\r\n if (AuthService.isLoginInProgress) {\r\n return;\r\n }\r\n\r\n // Don't refresh if user logged out\r\n if (!AuthService.user) {\r\n return;\r\n }\r\n\r\n const refreshLockKey = 'auth_refreshing_lock';\r\n const lockValue = localStorage.getItem(refreshLockKey);\r\n\r\n // Check if another tab is refreshing (within last 5 seconds)\r\n if (lockValue && Date.now() - parseInt(lockValue) < 5000) {\r\n return; // Another tab is handling the refresh\r\n }\r\n\r\n // Acquire lock\r\n localStorage.setItem(refreshLockKey, Date.now().toString());\r\n\r\n // IMPORTANT: Don't delete cookie before refresh to prevent:\r\n // 1. Race condition window where no token exists\r\n // 2. Repeated cookie deletion/recreation cycles with short-lived tokens\r\n // The cookie will be atomically replaced by handleAccessTokenWithoutLanguage()\r\n\r\n const httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': this.authorizationHeaderValue(),\r\n }),\r\n };\r\n let ApiUrl = '/api/Home/';\r\n this.http.get(this.environmentService.getApiUrl() + ApiUrl + 'RefreshAccessToken', httpOptions).subscribe({\r\n next: (res: any) => {\r\n // Check if user logged out during HTTP call\r\n if (!AuthService.user) {\r\n localStorage.removeItem(refreshLockKey);\r\n return; // Abort - don't set new token\r\n }\r\n\r\n // Atomically replaces the old cookie with new token\r\n this.handleAccessTokenWithoutLanguage(res.val);\r\n localStorage.removeItem(refreshLockKey);\r\n\r\n // Auto-navigate if user was redirected to login during token expiry\r\n // this.handlePostRefreshNavigation();\r\n },\r\n error: (err) => {\r\n localStorage.removeItem(refreshLockKey);\r\n // On error, old cookie remains valid until natural expiry\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handles navigation after successful token refresh.\r\n * If user is on login page and has a stored redirect URL, navigates to that URL.\r\n * This resolves the issue where users remain on login page after token refresh.\r\n * NOTE: This is not used anymore because we are using the async guard to wait for the refresh to complete before navigating to the protected route.\r\n */\r\n private handlePostRefreshNavigation(): void {\r\n // Get the stored redirect URL\r\n const redirectUrl = this.getUrl(); // Returns localStorage 'redirectUrl' or \"/\"\r\n\r\n // Get current URL\r\n const currentUrl = this.router.url;\r\n\r\n // Check if we're currently on the login page\r\n const isOnLoginPage = currentUrl.toLowerCase().includes('login');\r\n\r\n const isAuth = this.isAuthenticated();\r\n\r\n // More lenient conditions:\r\n // 1. User is authenticated\r\n // 2. User is on login page\r\n // 3. There's ANY redirect URL (even \"/\")\r\n if (isAuth && isOnLoginPage) {\r\n // Determine target URL\r\n const targetUrl = redirectUrl && !redirectUrl.toLowerCase().includes('login')\r\n ? redirectUrl\r\n : '/Admin/Home'; // Default fallback instead of rejecting \"/\"\r\n\r\n // Clear the stored redirect URL first\r\n localStorage.removeItem('redirectUrl');\r\n\r\n // Use setTimeout to ensure router has finished current navigation\r\n // This prevents competing navigation attempts\r\n setTimeout(() => {\r\n this.router.navigate([targetUrl]);\r\n }, 100);\r\n }\r\n }\r\n\r\n //#region uaepass methods\r\n loginWithUAEPass() {\r\n const authEndpoint = `${this.environmentService.getUAEPassBaseUrl()}${this.environmentService.getUAEPassAuthorizationEndPoint()}`;\r\n const queryParams = {\r\n response_type: 'code',\r\n client_id: `${this.environmentService.getUAEPassClientID()}`,\r\n redirect_uri: `${this.environmentService.getBaseUrl()}${this.environmentService.getUAEPassRedirectUrl()}`,\r\n scope: 'urn:uae:digitalid:profile:general urn:uae:digitalid:profile:general:profileType urn:uae:digitalid:profile:general:unifiedId',\r\n state: this.translateService.currentLang,\r\n acr_values: 'urn:safelayer:tws:policies:authentication:level:low',\r\n ui_locales: this.translateService.currentLang,\r\n };\r\n const queryParamsString = Object.entries(queryParams)\r\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\r\n .join('&');\r\n const loginUrl = `${authEndpoint}?${queryParamsString}`;\r\n window.location.href = loginUrl;\r\n return;\r\n }\r\n\r\n logoutFromUAEPass() {\r\n const logoutEndpoint = `${this.environmentService.getUAEPassBaseUrl()}${this.environmentService.getUAEPassLogoutEndPoint()}`;\r\n const queryParams = {\r\n redirect_uri: `${this.environmentService.getBaseUrl()}`,\r\n };\r\n const queryParamsString = Object.entries(queryParams)\r\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\r\n .join('&');\r\n\r\n const logoutUrl = `${logoutEndpoint}?${queryParamsString}`;\r\n window.location.href = logoutUrl;\r\n return;\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BlockUIModule } from 'ng-block-ui';\r\nimport { provideToastr } from 'ngx-toastr';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport {\r\n UtilityService, EnvironmentService, RequestHandlerService, StylesBundleService, BBSFTranslateService,\r\n ControlValidationService, MasterLayoutService, ConfigurationService, AuthService, LanguageService,\r\n SpeechRecognitionService\r\n} from './shared';\r\n\r\n/**\r\n * BBSFUtilitiesModule\r\n * \r\n * This module provides full backward compatibility by including ALL services and modules\r\n * from the original version. Simply import this module to get all functionality.\r\n * \r\n * For new applications, consider using modular imports via secondary entry points:\r\n * - @bnsights/bbsf-utilities/auth - Authentication services\r\n * - @bnsights/bbsf-utilities/http - HTTP request handling\r\n * - @bnsights/bbsf-utilities/translate - Translation services\r\n * - @bnsights/bbsf-utilities/ui - UI services (BlockUI, Toastr, etc.)\r\n * \r\n * @example\r\n * // Backward compatible usage (imports everything):\r\n * import { BBSFUtilitiesModule } from '@bnsights/bbsf-utilities';\r\n * \r\n * @NgModule({\r\n * imports: [BBSFUtilitiesModule]\r\n * })\r\n * export class AppModule { }\r\n */\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n BlockUIModule.forRoot(),\r\n ],\r\n exports: [\r\n // Re-export modules for backward compatibility\r\n CommonModule,\r\n RouterModule,\r\n BlockUIModule,\r\n ],\r\n providers: [\r\n // All services for backward compatibility\r\n UtilityService,\r\n EnvironmentService,\r\n AuthService,\r\n RequestHandlerService,\r\n StylesBundleService,\r\n TranslateService,\r\n BBSFTranslateService,\r\n ControlValidationService,\r\n MasterLayoutService,\r\n ConfigurationService,\r\n CookieService,\r\n LanguageService,\r\n SpeechRecognitionService,\r\n provideToastr()\r\n ]\r\n})\r\nexport class BBSFUtilitiesModule {\r\n\r\n}\r\n","/*\r\n * Public API Surface of @bnsights/bbsf-utilities\r\n * \r\n * This is the CORE entry point with minimal dependencies.\r\n * \r\n * For feature-specific services, use secondary entry points:\r\n * - @bnsights/bbsf-utilities/auth - Authentication services\r\n * - @bnsights/bbsf-utilities/word - Word document generation\r\n * - @bnsights/bbsf-utilities/translate - Translation services\r\n * - @bnsights/bbsf-utilities/ui - UI services (BlockUI, Toastr, etc.)\r\n * - @bnsights/bbsf-utilities/http - HTTP request handling\r\n */\r\n\r\n//Module (Note: for backward compatibility - contains ALL providers)\r\nexport * from './lib/bbsf-utilities.module';\r\n\r\n//#region Core Services (minimal dependencies)\r\n\r\nexport * from './lib/shared/services/environment.service';\r\nexport * from './lib/shared/services/styles-bundle.service';\r\nexport * from './lib/shared/services/appearance-configuration.service';\r\nexport * from './lib/shared/services/configuration.service';\r\nexport * from './lib/shared/services/service-worker-helper.service';\r\n\r\n//#endregion\r\n\r\n//#region config\r\nexport * from './lib/shared/config/environment';\r\n//#endregion\r\n\r\n//#region models \r\nexport * from './lib/shared/models/area-model';\r\nexport * from './lib/shared/models/error-model';\r\nexport * from './lib/shared/models/UserModel';\r\n//#endregion\r\n\r\n//#region export enums\r\nexport * from './lib/shared/enums/authentication-modes-enums';\r\n//#endregion\r\n\r\n/* \r\n * DEPRECATED EXPORTS (for backward compatibility)\r\n * Please migrate to secondary entry points for these:\r\n */\r\n\r\n// Use @bnsights/bbsf-utilities/ui instead\r\nexport * from './lib/shared/services/utility.service';\r\nexport * from './lib/shared/services/control-validation.service';\r\nexport * from './lib/shared/services/speech-recognition.service';\r\n\r\n// Use @bnsights/bbsf-utilities/translate instead\r\nexport * from './lib/shared/services/translate.service';\r\nexport * from './lib/shared/services/translation-resolver.service';\r\nexport { TranslationResolverService } from './lib/shared/services/translation-resolver.service';\r\nexport * from './lib/shared/services/language.service';\r\n\r\n// Use @bnsights/bbsf-utilities/http instead\r\nexport * from './lib/shared/services/request-handler.service';\r\nexport * from './lib/shared/services/master-layout.service';\r\nexport * from './lib/shared/services/preload.service';\r\nexport * from './lib/shared/models/request-options-model';\r\n\r\n// Word document generation moved to @bnsights/bbsf-utilities-doc\r\n// Install: npm install @bnsights/bbsf-utilities-doc\r\n\r\n// Use @bnsights/bbsf-utilities/auth instead\r\nexport * from './lib/shared/authentication/auth.service';\r\n\r\n// Re-export speech-language model\r\nexport * from './lib/shared/models/speech-language';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ConfigurationService","i1.UtilityService","i1","i2.RequestHandlerService","i3.AuthService","i2.StylesBundleService","i2.EnvironmentService","i2.AuthService","i3.EnvironmentService","i3.UtilityService","i3.BBSFTranslateService","i1.BBSFTranslateService","i1.EnvironmentService","i1.RequestHandlerService","i2","i2.BBSFTranslateService","i3","i4","i5.UtilityService"],"mappings":"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"}
1
+ {"version":3,"file":"bnsights-bbsf-utilities.mjs","sources":["../../../projects/bbsf-utilities/src/lib/shared/models/UserModel.ts","../../../projects/bbsf-utilities/src/lib/shared/enums/authentication-modes-enums.ts","../../../projects/bbsf-utilities/src/lib/shared/services/appearance-configuration.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/configuration.service.ts","../../../projects/bbsf-utilities/src/lib/shared/models/area-model.ts","../../../projects/bbsf-utilities/src/lib/shared/models/error-model.ts","../../../projects/bbsf-utilities/src/lib/shared/models/request-options-model.ts","../../../projects/bbsf-utilities/src/lib/shared/models/speech-language.ts","../../../projects/bbsf-utilities/src/lib/shared/services/control-validation.service.ts","../../../projects/bbsf-utilities/src/lib/shared/config/environment.ts","../../../projects/bbsf-utilities/src/lib/shared/services/environment.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/master-layout.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/request-handler.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/styles-bundle.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/translate.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/translation-resolver.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/utility.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/language.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/speech-recognition.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/preload.service.ts","../../../projects/bbsf-utilities/src/lib/shared/services/service-worker-helper.service.ts","../../../projects/bbsf-utilities/src/lib/shared/authentication/auth.service.ts","../../../projects/bbsf-utilities/src/lib/bbsf-utilities.module.ts","../../../projects/bbsf-utilities/src/public-api.ts","../../../projects/bbsf-utilities/src/bnsights-bbsf-utilities.ts"],"sourcesContent":["export class User {\r\n\r\n token_type: string;\r\n access_token: string;\r\n profile: any;\r\n expires_at: any\r\n}\r\n","export enum AuthenticationModes {\r\n Forms = 'Forms',\r\n UAEPass = \"UAEPass\",\r\n WindowsAD = \"WindowsAD\",\r\n AzureAD = \"AzureAD\",\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { ConfigurationService } from \".\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppearanceConfigurationService {\r\n\r\n constructor(private configService: ConfigurationService) {\r\n }\r\n\r\n getLayoutTheme() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_Theme');\r\n }\r\n\r\n getFooterText() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_FooterText');\r\n }\r\n\r\n getPageTitle() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_PageTitle');\r\n }\r\n\r\n getFavIcon() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_FavIcon');\r\n }\r\n\r\n getCustomStyles() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_CustomStyles');\r\n }\r\n\r\n getLogo() {\r\n return this.configService.getConfigurationValue('AnonymousLayout_Logo');\r\n }\r\n \r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable, Injector, OnInit } from \"@angular/core\";\r\nimport { AuthService } from \"../authentication\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConfigurationService {\r\n\r\n static JsonData: any[] = [];\r\n private currentUserProfile: any;\r\n private _authService: AuthService;\r\n\r\n constructor(private httpClient: HttpClient, private injector: Injector) {\r\n }\r\n\r\n private get authService(): AuthService {\r\n if (!this._authService) {\r\n this._authService = this.injector.get(AuthService);\r\n }\r\n return this._authService;\r\n }\r\n\r\n getConfigurationValue(key: string) {\r\n this.currentUserProfile = this.authService.getCurrentUser()?.profile;\r\n var selectedKey = ConfigurationService.JsonData[key];\r\n if (selectedKey && typeof selectedKey === 'object') {\r\n if (selectedKey.OrganizationConfigurations) {\r\n if (this.currentUserProfile && this.currentUserProfile.organizationGUID_ID) {\r\n let organizationValue = Array(selectedKey.OrganizationConfigurations).find(o => o.OrganizationID_GUID == this.currentUserProfile.organizationGUID_ID);\r\n return organizationValue;\r\n }\r\n } else {\r\n return selectedKey.Value;\r\n }\r\n } else {\r\n return selectedKey;\r\n }\r\n }\r\n\r\n}","export class AreaModel {\r\n permissionSetID: number\r\n areaUrl: string;\r\n}\r\n","export class ErrorModel {\r\n field: string;\r\n controlName: string;\r\n message: string;\r\n}\r\n","import { FormGroup } from \"@angular/forms\";\r\n\r\nexport class RequestOptionsModel {\r\n disableSuccessNotification: boolean = false;\r\n disableBlockUI: boolean = false;\r\n disableErrorHandler: boolean = false;\r\n customSuccessMessage: string;\r\n customErrorMessage: string;\r\n responseType: any = \"\"\r\n formGroup: FormGroup = null\r\n castResponsetoClass: boolean = true;\r\n}\r\n","export class LanguageDTO {\r\n name: string;\r\n prefix: string;\r\n dialect: string;\r\n englishName: string;\r\n arabicName: string;\r\n nativeName: string;\r\n detected: string;\r\n searching: string;\r\n elevating: string;\r\n translating: string;\r\n generatingAnswersForYou: string;\r\n isRTL: boolean;\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { BlockUI, NgBlockUI } from 'ng-block-ui';\r\nimport { ErrorModel, RequestOptionsModel } from '../models';\r\nimport { UtilityService } from '.';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ControlValidationService {\r\n\r\n private requestOptions: RequestOptionsModel = new RequestOptionsModel();\r\n\r\n constructor(private utilityService: UtilityService) {\r\n }\r\n\r\n isCreatedBefor = false;\r\n\r\n @BlockUI() blockUI: NgBlockUI;\r\n\r\n showGlobalError(errorMessage?: string | string[], formId?: string, deleteOld?: boolean) {\r\n let globalErorrElement = document.getElementsByClassName('alert alert-InvalidValidation bg-light-danger text-danger')\r\n if (globalErorrElement.length > 0) {\r\n this.removeElementsByClass('alert alert-InvalidValidation bg-light-danger text-danger');\r\n }\r\n if (this.isCreatedBefor == true) {\r\n this.removeElementsByClass('alert alert-InvalidValidation bg-light-danger text-danger');\r\n }\r\n // tslint:disable-next-line: prefer-const\r\n if (!formId)\r\n formId = \"currentForm\"\r\n var object = document.getElementById(formId);\r\n const tagName = 'div';\r\n // tslint:disable-next-line: prefer-const\r\n var elementToAppend = document.createElement(tagName); // Your tag name here\r\n let message: string | string[] = \"\";\r\n\r\n if (!errorMessage || (typeof errorMessage == \"string\")) {\r\n if (localStorage.getItem('language') == \"ar\")\r\n message = errorMessage ? errorMessage : \"لديك بعص الأخطاء . من فضلك قم بالمراجعه \";\r\n else\r\n message = errorMessage ? errorMessage : \"You have some validation errors. Please check below\"\r\n elementToAppend.innerHTML = \"<ul class='list-unstyled m-0 py-3 d-flex align-items-center fs-6'><li><i class='fa fa-times-circle text-danger me-3 fs-2'></i>\" + message + \"</li></ul>\";\r\n elementToAppend.className += 'alert alert-InvalidValidation bg-light-danger text-danger';\r\n elementToAppend.id += 'errorId';\r\n // tslint:disable-next-line: prefer-for-of\r\n const elementToAppen = elementToAppend.cloneNode(true);\r\n // let targetElement = object.getElementsByClassName(\"b-control\")[0];\r\n object.insertBefore(elementToAppen, object.firstChild);\r\n }\r\n else {\r\n let ul = document.createElement(\"ul\");\r\n elementToAppend.appendChild(ul);\r\n\r\n for (const iterator of errorMessage) {\r\n let li = document.createElement(\"li\");\r\n li.innerHTML = iterator;\r\n ul.appendChild(li);\r\n }\r\n elementToAppend.className += 'alert alert-InvalidValidation bg-light-danger text-danger';\r\n elementToAppend.id += 'errorId';\r\n // tslint:disable-next-line: prefer-for-of\r\n const elementToAppen = elementToAppend.cloneNode(true);\r\n // let targetElement = object.getElementsByClassName(\"b-control\")[0];\r\n object.insertBefore(elementToAppen, object.firstChild);\r\n }\r\n this.isCreatedBefor = true;\r\n }\r\n\r\n removeGlobalError() {\r\n const removedList = document.getElementsByClassName('alert alert-InvalidValidation bg-light-danger text-danger');\r\n // tslint:disable-next-line: prefer-for-of\r\n for (let index = 0; index < removedList.length; index++) {\r\n const element = removedList[index];\r\n element.remove();\r\n }\r\n this.isCreatedBefor = false;\r\n }\r\n\r\n showInputErro(errors: any) {\r\n // show error on top of form \r\n this.showGlobalError();\r\n // remove old error from server\r\n this.removeElementsByClass('errortemplet');\r\n // Looping in error Object\r\n for (const key in errors) {\r\n if (errors.hasOwnProperty(key)) {\r\n for (const iterator of errors[key]) {\r\n const input = document.querySelectorAll('[ng-reflect-name=' + key + ']')[0];\r\n if ((input.attributes['ng-reflect-name'].value as string) === key) {\r\n this.removeElementsByClass('erroclass-' + key);\r\n const tagName = 'p'\r\n const elementToAppend = document.createElement(tagName); // Your tag name here\r\n elementToAppend.innerHTML = iterator;\r\n elementToAppend.style.color = 'red'\r\n elementToAppend.className += 'errortemplet erroclass-' + key;\r\n const elementToappen = elementToAppend.cloneNode(true);\r\n input.parentNode.insertBefore(elementToappen, input.lastChild);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeElementsByClass(className) {\r\n const elements = document.getElementsByClassName(className);\r\n while (elements.length > 0) {\r\n elements[0].parentNode.removeChild(elements[0]);\r\n }\r\n }\r\n\r\n renderServerErrors(form: FormGroup, err: HttpErrorResponse, requestOptions: RequestOptionsModel, formId?: string) {\r\n if (err.error == null) {\r\n return;\r\n }\r\n let errorsArray: string[] = [];\r\n\r\n this.requestOptions = requestOptions;\r\n\r\n if (err.error.validation_errors) {\r\n err.error.validation_errors.forEach((element: ErrorModel) => {\r\n let fieldName = element.field;\r\n let controlName = element.controlName;\r\n let message = element.message;\r\n if (form == null) {\r\n this.requestOptions.customErrorMessage ? this.utilityService.notifyErrorMessage(this.requestOptions.customErrorMessage) : this.utilityService.notifyErrorMessage(`${message}`);\r\n }\r\n else if (controlName && !this.hasControlName(form, controlName)) {\r\n errorsArray.push(`${fieldName}: ${message}`);\r\n }\r\n else {\r\n this.setFieldError(form, controlName, fieldName, message);\r\n this.showGlobalError(null, formId);\r\n }\r\n });\r\n\r\n if (errorsArray.length > 0)\r\n this.showGlobalError(errorsArray, formId)\r\n }\r\n }\r\n\r\n private hasControlName(form: FormGroup, controlName: string): boolean {\r\n let control = form.get(controlName);\r\n return control != null;\r\n }\r\n\r\n private setFieldError(form: FormGroup, controlName: string, fieldName: string, message: string) {\r\n let control = null\r\n\r\n if (controlName)\r\n control = this.getControlFormNameByFieldName(form, controlName);\r\n else\r\n control = this.getControlFormNameByFieldName(form, fieldName.split('.')[0]);\r\n\r\n let errors = { \"errorMassage\": message };\r\n let fieldNameArray = fieldName.split('.');\r\n if (fieldNameArray.length >= 1) {\r\n switch (fieldNameArray[fieldNameArray.length - 1].toLocaleLowerCase()) {\r\n case \"english\":\r\n let englishControl = control.get(\"English\")\r\n englishControl.setErrors(errors);\r\n break;\r\n case \"arabic\":\r\n let arabicControl = control.get(\"Arabic\")\r\n arabicControl.setErrors(errors);\r\n break;\r\n default:\r\n control.setErrors(errors);\r\n }\r\n }\r\n else {\r\n this.requestOptions.customErrorMessage ? this.utilityService.notifyErrorMessage(this.requestOptions.customErrorMessage) : this.utilityService.notifyErrorMessage(`${message}`)\r\n }\r\n }\r\n\r\n private getControlFormNameByFieldName(form: FormGroup, fieldName: string) {\r\n const formControls = form.controls;\r\n let controlName = Object.keys(formControls).find(c => c.toLocaleLowerCase() === fieldName.toLocaleLowerCase());\r\n let control = form.get(controlName);\r\n return control;\r\n }\r\n\r\n}\r\n","// This file can be replaced during build by using the `fileReplacements` array.\r\n// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.\r\n// The list of file replacements can be found in `angular.json`.\r\n\r\nexport const environment = Object.assign({}, (window as any).Environment);\r\n\r\n\r\n/*\r\n * In development mode, to ignore zone related error stack frames such as\r\n * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can\r\n * import the following file, but please comment it out in production mode\r\n * because it will have performance impact when throw error\r\n */\r\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from '../config/environment';\r\nimport { AreaModel } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnvironmentService {\r\n\r\n static areaList: AreaModel[] = [];\r\n\r\n static AreaList: AreaModel[] = [];\r\n\r\n getEnvironmentObject() {\r\n return environment;\r\n }\r\n\r\n getBaseUrl() {\r\n return environment[\"BBSF_BaseURL\"];\r\n }\r\n\r\n getApiUrl() {\r\n return environment[\"BBSF_ApiUrl\"];\r\n }\r\n\r\n getProductionMode() {\r\n return environment[\"BBSF_IsProduction\"] as boolean;\r\n }\r\n\r\n getDefaultLanguage() {\r\n return environment[\"BBSF_DefaultLanguage\"] as string;\r\n }\r\n\r\n getIdentityServerUrl() {\r\n return environment[\"BBSF_IdentityServerUrl\"];\r\n }\r\n\r\n getIsIdentityServerExternal() {\r\n return environment[\"BBSF_IsExternalIdentityServer\"] as string;\r\n }\r\n\r\n getIsIdentityServerClientId() {\r\n return environment[\"BBSF_IdentityServer_Client_Id\"] as string;\r\n }\r\n\r\n getIsIdentityServerClientSecret() {\r\n return environment[\"BBSF_IdentityServer_Client_Secret\"] as string;\r\n }\r\n\r\n getBBSFAuthenticationMode() {\r\n let Mode = environment[\"BBSF_AuthenticationMode\"] as string;\r\n return Mode;\r\n }\r\n\r\n getUAEPassBaseUrl() {\r\n let Mode = environment[\"UAEPass_BaseUrl\"] as string;\r\n return Mode;\r\n }\r\n getUAEPassClientID() {\r\n let Mode = environment[\"UAEPass_ClientID\"] as string;\r\n return Mode;\r\n }\r\n getUAEPassRedirectUrl() {\r\n let Mode = environment[\"UAEPass_RedirectUrl\"] as string;\r\n return Mode;\r\n }\r\n getUAEPassAuthorizationEndPoint() {\r\n let Mode = environment[\"UAEPass_AuthorizationEndPoint\"] as string;\r\n return Mode;\r\n }\r\n\r\n getUAEPassRedirectLogoutUrl() {\r\n let Mode = environment[\"UAEPass_RedirectLogoutUrl\"] as string;\r\n return Mode;\r\n }\r\n\r\n getUAEPassLogoutEndPoint() {\r\n let Mode = environment[\"UAEPass_LogoutEndPoint\"] as string;\r\n return Mode;\r\n }\r\n\r\n\r\n getIsEnableWindowsAuthentication() {\r\n let Mode = environment[\"BBSF_Enable_WindowsAuthentication\"] as string;\r\n return Mode.toLocaleLowerCase() == 'true';\r\n }\r\n\r\n getAllowMultiTenancy() {\r\n let mode = environment[\"BBSF_AllowMultiTenancy\"] as string;\r\n return mode.toLocaleLowerCase() == 'true';\r\n }\r\n\r\n getCookieName() {\r\n let cookieName = environment[\"BBSF_CookieName\"];\r\n return cookieName;\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Observable, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\r\nimport { FileLoaderService, RequestHandlerService, StylesBundleService } from '.';\r\nimport { AuthService } from '../authentication';\r\n\r\ninterface UpdateUserInfoResponse {\r\n token: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MasterLayoutService implements OnDestroy {\r\n apiUrl = '/api/Home/';\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n constructor(private router: Router, private http: RequestHandlerService, private authService: AuthService,\r\n private stylesBundleService: StylesBundleService, private translate: TranslateService,\r\n private fileLoaderService: FileLoaderService,\r\n ) { }\r\n\r\n switchLang(lang: string, bundleEnglishName: string, bundleArabicName: string) {\r\n if (!lang?.trim()) {\r\n return;\r\n }\r\n\r\n if (!this.authService.isAuthenticated()) {\r\n this.router.navigate(['/Admin/account/login']);\r\n return;\r\n }\r\n\r\n this.changeLanguage(lang).pipe(\r\n switchMap(() => this.updateUserInfo()),\r\n tap((userInfo) => {\r\n if (!userInfo?.token) {\r\n return;\r\n }\r\n\r\n this.authService.handleAccessToken(userInfo.token).then(async () => {\r\n this.stylesBundleService.loadThemes(lang, bundleEnglishName, bundleArabicName);\r\n localStorage.setItem('language', lang);\r\n try {\r\n await this.fileLoaderService.loadLanguage(lang);\r\n } catch (e: any) {\r\n this.logError(e?.message || `loadLanguage failed for ${lang}`).pipe(take(1)).subscribe();\r\n }\r\n this.translate.use(lang);\r\n });\r\n }),\r\n takeUntil(this.destroy$)\r\n ).subscribe({\r\n error: (error) => {\r\n this.logError(error?.message || 'switchLang failed').pipe(take(1)).subscribe();\r\n }\r\n });\r\n }\r\n\r\n reloadComponent() {\r\n const currentUrl = this.router.url;\r\n const previousShouldReuseRoute = this.router.routeReuseStrategy.shouldReuseRoute;\r\n const previousOnSameUrlNavigation = this.router.onSameUrlNavigation;\r\n\r\n this.router.routeReuseStrategy.shouldReuseRoute = () => false;\r\n this.router.onSameUrlNavigation = 'reload';\r\n this.router.navigate([currentUrl]).finally(() => {\r\n this.router.routeReuseStrategy.shouldReuseRoute = previousShouldReuseRoute;\r\n this.router.onSameUrlNavigation = previousOnSameUrlNavigation;\r\n });\r\n }\r\n\r\n private changeLanguage(key: string): Observable<unknown> {\r\n const profile = this.authService.getCurrentUserProfile();\r\n if (!profile?.id) {\r\n return this.logError('changeLanguage failed: missing user profile id');\r\n }\r\n\r\n let params = new HttpParams();\r\n params = params.append('UserId', profile.id);\r\n params = params.append('LanguageKey', key);\r\n return this.http.post(this.apiUrl + 'UpdateLanguage', null, null, params);\r\n }\r\n\r\n logError(error: string) {\r\n let params = new HttpParams();\r\n params = params.append('error', error);\r\n return this.http.post(this.apiUrl + 'LogError', null, null, params);\r\n }\r\n\r\n private updateUserInfo(): Observable<UpdateUserInfoResponse> {\r\n return this.http.get<UpdateUserInfoResponse>(this.apiUrl + 'UpdateUserInfo', null, null);\r\n }\r\n\r\n switchRole(permissionSetID: string) {\r\n if (!permissionSetID?.trim()) {\r\n return;\r\n }\r\n\r\n this.updateRole(permissionSetID).pipe(\r\n switchMap(() => this.updateUserInfo()),\r\n tap((userInfo) => {\r\n if (userInfo?.token) {\r\n this.authService.handleAccessToken(userInfo.token);\r\n }\r\n }),\r\n takeUntil(this.destroy$)\r\n ).subscribe({\r\n error: (error) => {\r\n this.logError(error?.message || 'switchRole failed').pipe(take(1)).subscribe();\r\n }\r\n });\r\n }\r\n\r\n private updateRole(permissionSetID: string): Observable<unknown> {\r\n const profile = this.authService.getCurrentUserProfile();\r\n if (!profile?.id) {\r\n return this.logError('updateRole failed: missing user profile id');\r\n }\r\n\r\n let params = new HttpParams();\r\n params = params.append('UserId', profile.id);\r\n params = params.append('RoleID', permissionSetID);\r\n return this.http.post(this.apiUrl + 'SwitchRole', null, null, params);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from \"@angular/common/http\";\r\nimport { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { plainToClass } from 'class-transformer';\r\nimport { Observable, Subject, throwError } from 'rxjs';\r\nimport { map, takeUntil, tap } from 'rxjs/operators';\r\nimport { BBSFTranslateService, EnvironmentService, UtilityService } from \".\";\r\nimport { AuthService } from '../authentication/auth.service';\r\nimport { RequestOptionsModel } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RequestHandlerService implements OnDestroy {\r\n\r\n private currentLanguage = \"\";\r\n public onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n private router = inject(Router);\r\n constructor(\r\n private http: HttpClient,\r\n private authService: AuthService,\r\n private environmentService: EnvironmentService,\r\n private utilityService: UtilityService,\r\n private bbsfTranslateService: BBSFTranslateService\r\n ) {\r\n //using localStorage to avoid call getCurrentLanguage() because it is not all to use async in constructor\r\n this.bbsfTranslateService.onLangChange.subscribe((event) => {\r\n if (this.currentLanguage != event.lang) {\r\n this.currentLanguage = event.lang;\r\n }\r\n });\r\n }\r\n\r\n // Function to check if the internet connection is available\r\n private isOnline(): boolean {\r\n return navigator.onLine || !this.environmentService.getProductionMode();\r\n }\r\n\r\n // ...\r\n get<T>(Url: string, params?: HttpParams, responseType?: new () => T, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: errorCode });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.get<T>(this.environmentService.getApiUrl() + Url, { headers: headers, params: params }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n ) as Observable<T>;\r\n }\r\n\r\n post<T>(Url: string, model?: any, responseType?: new () => T, params?: HttpParams, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.post<T>(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n delete<T>(Url: string, deletedId: string, requestOptions?: RequestOptionsModel, responseType?: new () => T, params?: HttpParams): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.delete<T>(this.environmentService.getApiUrl() + Url + `/${deletedId}`, { headers: headers, params: params }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n put<T>(Url: string, model?: any, params?: HttpParams, responseType?: new () => T, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.put<T>(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n patch<T>(Url: string, model?: any, responseType?: new () => T, params?: HttpParams, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': this.authService.authorizationHeaderValue(),\r\n\r\n });\r\n this.currentLanguage = localStorage.getItem('language');\r\n headers = headers.set('Accept-Language', this.currentLanguage.toString());\r\n headers = headers.set('ignore-cookies', 'true');\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n\r\n return this.http.patch<T>(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n }), map((data: T) => {\r\n if (currentRequestOptions.castResponsetoClass)\r\n return plainToClass(responseType, data, { excludeExtraneousValues: true });\r\n else\r\n return data;\r\n })\r\n );\r\n }\r\n\r\n download<T>(Url: string, params?: HttpParams, requestOptions?: RequestOptionsModel): Observable<T> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeaders();\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.startBlockUI();\r\n return this.http.get<T>(this.environmentService.getApiUrl() + Url, { headers: headers, params: params, responseType: currentRequestOptions.responseType }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n\r\n Upload<T>(Url: string, model?: any, requestOptions?: RequestOptionsModel): Observable<any> {\r\n if (!this.isOnline()) {\r\n const errorCode = 504; // Custom error code for internet disconnection\r\n const errorMessage = 'Internet connection is disconnected.';\r\n var error = new HttpErrorResponse({ error: { Message: errorMessage }, status: 504 });\r\n this.handleError(error);\r\n return;\r\n }\r\n\r\n const currentRequestOptions = requestOptions || new RequestOptionsModel();\r\n\r\n let headers = this.getHeadersUpdated();\r\n return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, reportProgress: true, observe: 'events' }).pipe(\r\n takeUntil(this.onDestroy$),\r\n tap((result) => {\r\n if (!currentRequestOptions.disableBlockUI)\r\n this.utilityService.stopBlockUI();\r\n }, error => {\r\n if (!currentRequestOptions.disableErrorHandler)\r\n this.handleError(error);\r\n })\r\n );\r\n }\r\n public destroyHandler(): void {\r\n this.onDestroy$.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n console.log(\"clearInterval\");\r\n this.destroyHandler();\r\n }\r\n\r\n private handleError(err: HttpErrorResponse) {\r\n var isEnglish = this.utilityService.getCurrentLanguage() == \"en\";\r\n if (err.error instanceof ErrorEvent) {\r\n this.utilityService.notifyErrorMessage();\r\n }\r\n else {\r\n if (err.status == 400)\r\n throwError(err);//error 400 is thrown to be catch by the Form component to handle Fluent validation errors\r\n else if (err.status == 401)\r\n this.router.navigate([\"/Admin/account/login\"]);\r\n else if (err.status == 403)\r\n this.utilityService.notifyErrorMessage(isEnglish ? \"Sorry, You're not authorized to access this action\" : \"عذرا ليس لديك الصلاحيه لهذا الطلب\");\r\n else if (err.status == 510)\r\n this.utilityService.notifyErrorMessage(isEnglish ? \"Can not delete this item as it is related to others\" : \"لا يمكن حذف هذا العنصر لأنه مرتبط بعناصر أخرى\");\r\n else if (err.status == 515)\r\n this.utilityService.notifyErrorMessage((err.error ? err.error.Message : err.message));\r\n else if (err.status == 504)\r\n this.utilityService.notifyErrorMessage((err.error ? err.error.Message : err.message));\r\n else {\r\n console.log(`error message is: ${err.error ? err.error.Message : err.message}`);\r\n this.utilityService.notifyErrorMessage(this.utilityService.getResourceValue(\"ErrorMassage\"));\r\n }\r\n }\r\n this.utilityService.stopBlockUI();\r\n }\r\n\r\n getHeaders() {\r\n return new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': this.authService.authorizationHeaderValue(),\r\n 'Client-Local-Time-Zone': Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n 'Accept-Language': localStorage.getItem('language'),\r\n 'ignore-cookies': 'true'\r\n });\r\n }\r\n getHeadersUpdated() {\r\n return new HttpHeaders({\r\n 'Authorization': this.authService.authorizationHeaderValue(),\r\n 'Client-Local-Time-Zone': Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n 'Accept-Language': localStorage.getItem('language'),\r\n 'ignore-cookies': 'true',\r\n 'Video-Upload': 'true',\r\n 'Image-Upload': 'true',\r\n });\r\n\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { BBSFTranslateService } from '.';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StylesBundleService {\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document, private translateService: BBSFTranslateService) { }\r\n\r\n loadThemes(lang: string, bundleEnglishName: string, bundleArabicName: string) {\r\n if (lang == \"ar\") {\r\n this.loadStyleBundle(bundleArabicName.toString());\r\n document.querySelector('html').setAttribute(\"b-lang\", \"ar\"); //use b-lang instead of lang to fix firefox number inputs in Arabic locale\r\n document.querySelector('html').setAttribute(\"dir\", \"rtl\");\r\n } else {\r\n this.loadStyleBundle(bundleEnglishName.toString());\r\n document.querySelector('html').setAttribute(\"b-lang\", \"en\");\r\n document.querySelector('html').setAttribute(\"dir\", \"ltr\");\r\n }\r\n\r\n }\r\n\r\n loadThemesColor(theme: string, bundleDarkName: string, bundleLightName: string) {\r\n if (theme == \"Light\")\r\n this.loadStyleBundle(bundleLightName.toString());\r\n else\r\n this.loadStyleBundle(bundleDarkName.toString());\r\n }\r\n\r\n private loadStyleBundle(styleName: string): void {\r\n const head = this.document.getElementsByTagName('head')[0];\r\n let themeLink = this.document.getElementById('client-theme') as HTMLLinkElement;\r\n let shouldRemoveOld = false;\r\n\r\n if (themeLink) {\r\n // ✅ Check if current CSS already loaded (by exact filename)\r\n const currentFileName = this.getFileName(themeLink.href);\r\n const requestedFileName = this.getFileName(styleName);\r\n\r\n if (currentFileName === requestedFileName) {\r\n return; // Same CSS already loaded\r\n } else {\r\n shouldRemoveOld = true; // Mark for removal after new CSS is added\r\n }\r\n }\r\n\r\n // ✅ Add new CSS first (prevents FOUC)\r\n const style = this.document.createElement('link');\r\n style.id = 'client-theme';\r\n style.rel = 'stylesheet';\r\n style.href = `${styleName}`;\r\n head.appendChild(style);\r\n\r\n // ✅ Remove old CSS after new one is added (smooth transition)\r\n if (shouldRemoveOld && themeLink) {\r\n themeLink.remove();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Extract filename from full path\r\n * @param path Full path or just filename\r\n * @returns The filename only\r\n */\r\n private getFileName(path: string): string {\r\n // Extract just the filename from full path\r\n const parts = path.split('/');\r\n return parts[parts.length - 1];\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BBSFTranslateService extends TranslateService {\r\n}","import { inject } from \"@angular/core\";\r\nimport { ResolveFn } from \"@angular/router\";\r\nimport { BBSFTranslateService } from \".\";\r\n\r\nexport const TranslationResolverService: ResolveFn<any> = () => {\r\n let translateService = inject(BBSFTranslateService);\r\n return translateService.getTranslation(translateService.currentLang);\r\n};","import { Injectable, Injector } from '@angular/core';\r\nimport { BlockUI, NgBlockUI } from 'ng-block-ui';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { BBSFTranslateService, EnvironmentService } from '.';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilityService {\r\n\r\n isCreatedBefore = false;\r\n\r\n @BlockUI() blockUI: NgBlockUI;\r\n\r\n constructor(private translator: BBSFTranslateService, private environmentService: EnvironmentService, private injector: Injector) {\r\n\r\n }\r\n\r\n getResourceValue(Key: string): string { \r\n let ResourceValue = this.translator.instant(Key)\r\n return ResourceValue;\r\n }\r\n\r\n getCurrentLanguage() {\r\n let currentLanguage = this.environmentService.getDefaultLanguage();\r\n let lang = localStorage.getItem('language');\r\n if (lang)\r\n currentLanguage = lang;\r\n else\r\n localStorage.setItem('language', currentLanguage);\r\n return currentLanguage;\r\n }\r\n\r\n isCurrentLanguageEnglish() {\r\n return this.getCurrentLanguage() == \"en\"\r\n }\r\n\r\n isCurrentLanguageArabic() {\r\n return this.getCurrentLanguage() == \"ar\"\r\n }\r\n\r\n notifySuccessMessage(Message?: string, title?: string, time?: number, showHeader: boolean = true) {\r\n let MessageTemplate = this.getResourceValue(\"SuccessMessage\");\r\n let titleTemplate: string;\r\n if (Message) {\r\n MessageTemplate = Message;\r\n }\r\n if (title) {\r\n titleTemplate = title;\r\n }\r\n let toaster = this.injector.get(ToastrService);\r\n showHeader ? toaster.success(MessageTemplate, titleTemplate) : toaster.success(MessageTemplate);\r\n }\r\n\r\n notifyErrorMessage(Message?: string, title?: string, time?: number, showHeader: boolean = true) {\r\n let MessageTemplate = this.getResourceValue(\"ErrorMessage\");\r\n let titleTemplate = this.getResourceValue(\"Error\");\r\n if (Message) {\r\n MessageTemplate = Message;\r\n }\r\n if (title) {\r\n titleTemplate = title;\r\n }\r\n const toaster = this.injector.get(ToastrService);\r\n showHeader ? toaster.error(MessageTemplate, titleTemplate) : toaster.error(MessageTemplate);\r\n }\r\n\r\n notifyWarningMessage(Message?: string, title?: string, time?: number, showHeader: boolean = true) {\r\n let MessageTemplate = this.getResourceValue(\"WarningMessage\");\r\n let titleTemplate = this.getResourceValue(\"Warning\");\r\n if (Message) {\r\n MessageTemplate = Message;\r\n }\r\n if (title) {\r\n titleTemplate = title;\r\n }\r\n const toaster = this.injector.get(ToastrService);\r\n showHeader ? toaster.warning(MessageTemplate, titleTemplate) : toaster.warning(MessageTemplate);\r\n }\r\n\r\n startBlockUI() {\r\n this.blockUI.start();\r\n }\r\n\r\n stopBlockUI() {\r\n this.blockUI.stop();\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { RequestHandlerService } from \"./request-handler.service\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { tap, shareReplay, take } from \"rxjs/operators\";\r\nimport { LanguageDTO } from \"../models\";\r\n\r\n/**\r\n * Language service with internal caching\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LanguageService {\r\n apiUrl = '/api/Language/';\r\n private _languages: LanguageDTO[] = [];\r\n \r\n private isLoading = false;\r\n private isLoaded = false;\r\n private loadRequest$: Observable<LanguageDTO[]> | null = null;\r\n\r\n constructor(private http: RequestHandlerService) {\r\n }\r\n\r\n /** Pure getter - no side effects */\r\n get languages(): LanguageDTO[] {\r\n return this._languages;\r\n }\r\n\r\n \r\n /** Internal method - loads languages from API (race-condition safe) */\r\n private loadLanguages(): void {\r\n if (this.isLoaded || this.isLoading) return; // Sync guard prevents race condition\r\n \r\n this.isLoading = true; // Set immediately to block concurrent calls\r\n\r\n this.loadRequest$ = this.http.get<LanguageDTO[]>(this.apiUrl + 'GetAll', null, null).pipe(\r\n tap((languages: LanguageDTO[]) => {\r\n this._languages = languages;\r\n this.isLoaded = true;\r\n this.isLoading = false;\r\n }),\r\n shareReplay(1)\r\n );\r\n\r\n // take(1) ensures auto-unsubscribe after completion\r\n this.loadRequest$.pipe(take(1)).subscribe({\r\n error: (err) => {\r\n this.isLoading = false;\r\n this.loadRequest$ = null;\r\n }\r\n });\r\n }\r\n\r\n /** Get languages as Observable - triggers load if not loaded */\r\n getLanguages(): Observable<LanguageDTO[]> {\r\n if (this.isLoaded) {\r\n return of(this._languages);\r\n }\r\n\r\n if (!this.isLoading) {\r\n this.loadLanguages();\r\n }\r\n\r\n return this.loadRequest$ ?? of(this._languages);\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { UtilityService } from './utility.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpeechRecognitionService {\r\n recognition: any;\r\n isListening = false;\r\n isSupported = false;\r\n language: string = 'en-US';\r\n\r\n constructor(private zone: NgZone,private utilityService:UtilityService) {\r\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\r\n\r\n if (SpeechRecognition) {\r\n this.recognition = new SpeechRecognition();\r\n this.recognition.continuous = true;\r\n this.recognition.interimResults = false;\r\n this.recognition.maxAlternatives = 1;\r\n this.isSupported = true;\r\n }\r\n }\r\n\r\n startListening(language: string = this.language): Observable<string> {\r\n if (!this.isSupported) {\r\n return throwError(() => new Error('Web Speech API is not supported in this browser.'));\r\n }\r\n\r\n return new Observable(observer => {\r\n this.isListening = true;\r\n this.recognition.lang = language;\r\n this.recognition.start();\r\n\r\n this.recognition.onresult = (event: any) => {\r\n this.zone.run(() => {\r\n const transcript = event.results[event.results.length - 1][0].transcript;\r\n observer.next(transcript);\r\n });\r\n };\r\n\r\n this.recognition.onspeechend = () => {\r\n this.stopListening();\r\n };\r\n\r\n this.recognition.onerror = (event: any) => {\r\n this.zone.run(() => {\r\n if (event.error === 'not-allowed') {\r\n this.utilityService.notifyErrorMessage(this.utilityService.getResourceValue(\"MicAccessDenied\"));\r\n observer.error('Microphone access denied by the user.');\r\n } else {\r\n observer.error(event.error);\r\n }\r\n });\r\n };\r\n\r\n this.recognition.onend = () => {\r\n this.zone.run(() => {\r\n if (this.isListening) {\r\n this.recognition.start(); // Automatically restart\r\n } else {\r\n observer.complete();\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n stopListening() {\r\n if (this.isSupported) {\r\n this.isListening = false;\r\n this.recognition.stop();\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { lastValueFrom } from 'rxjs';\r\nimport { BBSFTranslateService } from './translate.service';\r\nimport { environment } from '../config/environment';\r\nimport { ConfigurationService } from './configuration.service';\r\n\r\ndeclare const window: any;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileLoaderService {\r\n private availableLanguages = ['en', 'ar']; // Add more languages as needed\r\n private loadedLanguages = new Set<string>();\r\n // environment:any;\r\n constructor(private translate: BBSFTranslateService, private http: HttpClient) {\r\n this.translate.addLangs(this.availableLanguages);\r\n }\r\n\r\n async preloadAll(): Promise<void> {\r\n const defaultLang = this.getDefaultLanguage();\r\n\r\n try {\r\n await Promise.all([\r\n this.loadEnvironment(),\r\n this.loadConfigurations(),\r\n this.loadLanguage(defaultLang),\r\n ]);\r\n\r\n this.translate.use(defaultLang);\r\n } catch (error) {\r\n console.error('Error during preloadAll:', error);\r\n }\r\n }\r\n\r\n loadEnvironment(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = '/assets/config/environment.js';\r\n script.onload = () => {\r\n if (window.Environment) {\r\n Object.assign(environment, window.Environment);\r\n resolve();\r\n } else {\r\n reject('Environment variables not found.');\r\n }\r\n };\r\n script.onerror = () => reject('Failed to load environment.js');\r\n document.head.insertBefore(script, document.head.firstChild);\r\n });\r\n }\r\n\r\n private async loadConfigurations(): Promise<void> {\r\n const data = await lastValueFrom(this.http.get('./assets/config/configurations.json'));\r\n ConfigurationService.JsonData = data as any;\r\n }\r\n\r\n private getDefaultLanguage(): string {\r\n const lang = localStorage.getItem('language');\r\n if (lang && this.availableLanguages.includes(lang)) {\r\n return lang;\r\n }\r\n return 'en';\r\n }\r\n\r\n async loadLanguage(lang: string): Promise<void> {\r\n const normalizedLang = (lang || '').trim();\r\n if (!normalizedLang) {\r\n return;\r\n }\r\n\r\n if (!this.availableLanguages.includes(normalizedLang)) {\r\n return;\r\n }\r\n\r\n if (this.loadedLanguages.has(normalizedLang)) {\r\n return;\r\n }\r\n\r\n const translations = await lastValueFrom(this.http.get(`/assets/i18n/${normalizedLang}.json`));\r\n this.translate.setTranslation(normalizedLang, translations, true);\r\n this.loadedLanguages.add(normalizedLang);\r\n }\r\n\r\n async preloadTranslations(): Promise<void> {\r\n try {\r\n const requests = this.availableLanguages.map(async (lang) => {\r\n const translations = await lastValueFrom(this.http.get(`/assets/i18n/${lang}.json`));\r\n this.translate.setTranslation(lang, translations, true);\r\n });\r\n\r\n await Promise.all(requests);\r\n this.translate.use('en'); // Set default language manually\r\n } catch (error) {\r\n console.error('Error preloading translations:', error);\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { SwUpdate, VersionEvent } from '@angular/service-worker';\r\nimport { filter, switchMap } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ServiceWorkerHelperService {\r\n private swRegistration: ServiceWorkerRegistration | null = null;\r\n private updateCheckInProgress = false;\r\n private chunkHandlersRegistered = false;\r\n private chunkRecoveryInFlight = false;\r\n\r\n private readonly sessionRecoveryAttemptsKey = 'bbsf_chunk_recovery_count';\r\n private readonly maxChunkRecoveryAttempts = 3;\r\n\r\n constructor(public updates: SwUpdate) {\r\n this.initializeServiceWorker();\r\n this.setupChunkErrorHandler();\r\n }\r\n\r\n public checkForUpdates(): void {\r\n if (!this.updates.isEnabled) {\r\n console.warn('Service Worker updates are not enabled');\r\n return;\r\n }\r\n\r\n // Set up event listeners\r\n this.setupUpdateListeners();\r\n\r\n // Start smart checking for updates\r\n this.startSmartUpdateChecking();\r\n }\r\n\r\n private setupUpdateListeners(): void {\r\n this.updates.versionUpdates\r\n .pipe(\r\n filter((event: VersionEvent) => event.type === 'VERSION_DETECTED')\r\n )\r\n .subscribe(() => {\r\n console.log('New version detected, preparing to update...');\r\n this.skipWaiting();\r\n });\r\n\r\n this.updates.versionUpdates\r\n .pipe(\r\n filter((event: VersionEvent) => event.type === 'VERSION_READY'),\r\n switchMap(() => this.updates.activateUpdate())\r\n )\r\n .subscribe(() => {\r\n console.log('New version activated, reloading page...');\r\n // CRITICAL FIX: Reload the page after activation\r\n window.location.reload();\r\n });\r\n\r\n // Handle installation failures\r\n this.updates.versionUpdates\r\n .pipe(\r\n filter((event: VersionEvent) => event.type === 'VERSION_INSTALLATION_FAILED')\r\n )\r\n .subscribe(() => {\r\n console.error('Service Worker installation failed');\r\n this.clearCacheAndReload();\r\n });\r\n\r\n // Handle unrecoverable state\r\n this.updates.unrecoverable.subscribe(event => {\r\n console.error('Unrecoverable state:', event.reason);\r\n this.clearCacheAndReload();\r\n });\r\n }\r\n\r\n private startSmartUpdateChecking(): void {\r\n // Initial check\r\n this.performUpdateCheck();\r\n\r\n // Check every 2 minutes\r\n setInterval(() => {\r\n this.performUpdateCheck();\r\n }, 120000);\r\n\r\n // Check when user returns to tab\r\n document.addEventListener('visibilitychange', () => {\r\n if (!document.hidden) {\r\n this.performUpdateCheck();\r\n }\r\n });\r\n\r\n // Check when user focuses window\r\n window.addEventListener('focus', () => {\r\n this.performUpdateCheck();\r\n });\r\n }\r\n\r\n private performUpdateCheck(): void {\r\n if (this.updates.isEnabled && !this.updateCheckInProgress) {\r\n this.updateCheckInProgress = true;\r\n\r\n this.updates.checkForUpdate()\r\n .then(hasUpdate => {\r\n if (hasUpdate) {\r\n console.log('Update available, processing...');\r\n }\r\n })\r\n .catch(err => {\r\n console.error('Error checking for updates:', err);\r\n })\r\n .finally(() => {\r\n this.updateCheckInProgress = false;\r\n });\r\n }\r\n }\r\n\r\n private initializeServiceWorker(): void {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n this.swRegistration = registration;\r\n });\r\n }\r\n }\r\n\r\n private skipWaiting(): void {\r\n if (this.swRegistration?.waiting) {\r\n this.swRegistration.waiting.postMessage({ type: 'SKIP_WAITING' });\r\n }\r\n }\r\n\r\n private setupChunkErrorHandler(): void {\r\n if (this.chunkHandlersRegistered) {\r\n return;\r\n }\r\n this.chunkHandlersRegistered = true;\r\n\r\n window.addEventListener('error', (event: Event) => {\r\n if (!this.isChunkErrorEvent(event)) {\r\n return;\r\n }\r\n console.warn('Chunk load error detected, attempting recovery...');\r\n event.preventDefault();\r\n this.handleChunkLoadError();\r\n });\r\n\r\n window.addEventListener('unhandledrejection', (event: PromiseRejectionEvent) => {\r\n const reason = event.reason;\r\n const text =\r\n (reason && typeof reason === 'object' && 'message' in reason\r\n ? String((reason as { message: unknown; }).message)\r\n : '') || (reason instanceof Error ? reason.message : String(reason ?? ''));\r\n const name = reason instanceof Error ? reason.name : '';\r\n\r\n if (!this.isChunkLoadFailure(reason, text) && name !== 'ChunkLoadError') {\r\n return;\r\n }\r\n console.warn('Chunk load error in promise, attempting recovery...');\r\n event.preventDefault();\r\n this.handleChunkLoadError();\r\n });\r\n }\r\n\r\n private isChunkErrorEvent(event: Event): boolean {\r\n const ev = event as ErrorEvent;\r\n const message = ev.message || '';\r\n const scriptSrc =\r\n event.target instanceof HTMLScriptElement ? event.target.src || undefined : undefined;\r\n return this.isChunkLoadFailure(ev.error, message, scriptSrc);\r\n }\r\n\r\n private isChunkLoadFailure(error: unknown, message: string, scriptSrc?: string): boolean {\r\n const segments: string[] = [message];\r\n if (error instanceof Error) {\r\n segments.push(error.message, error.name);\r\n } else if (error && typeof error === 'object' && 'message' in error) {\r\n segments.push(String((error as { message: unknown; }).message));\r\n } else if (error != null) {\r\n segments.push(String(error));\r\n }\r\n const text = segments.join(' ');\r\n\r\n if (/Loading chunk .+ failed/i.test(text)) {\r\n return true;\r\n }\r\n if (/ChunkLoadError/i.test(text)) {\r\n return true;\r\n }\r\n if (/Failed to fetch dynamically imported module/i.test(text)) {\r\n return true;\r\n }\r\n\r\n if (scriptSrc && /\\.js(\\?|#|$)/i.test(scriptSrc)) {\r\n const looksLikeBundle =\r\n /chunk|main|runtime|polyfills|vendor/i.test(scriptSrc) ||\r\n /\\/\\d+\\.[\\w.-]*\\.js(\\?|#|$)/i.test(scriptSrc);\r\n const opaqueOrEmpty = !message || message === 'Script error.';\r\n if (looksLikeBundle && opaqueOrEmpty) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private handleChunkLoadError(): void {\r\n if (this.chunkRecoveryInFlight) {\r\n return;\r\n }\r\n\r\n let attempts = 0;\r\n try {\r\n attempts = parseInt(sessionStorage.getItem(this.sessionRecoveryAttemptsKey) || '0', 10);\r\n } catch {\r\n /* private / blocked storage */\r\n }\r\n\r\n if (attempts >= this.maxChunkRecoveryAttempts) {\r\n console.error('Chunk error recovery limit reached for this session; not reloading again.');\r\n return;\r\n }\r\n\r\n try {\r\n sessionStorage.setItem(this.sessionRecoveryAttemptsKey, String(attempts + 1));\r\n } catch {\r\n /* ignore */\r\n }\r\n\r\n this.chunkRecoveryInFlight = true;\r\n this.clearCacheAndReload();\r\n }\r\n\r\n private clearCacheAndReload(): void {\r\n console.log('Clearing caches and reloading...');\r\n\r\n if ('caches' in window) {\r\n caches.keys().then(cacheNames => {\r\n return Promise.all(\r\n cacheNames.map(cacheName => {\r\n console.log('Deleting cache:', cacheName);\r\n return caches.delete(cacheName);\r\n })\r\n );\r\n }).then(() => {\r\n // Unregister all service workers\r\n if ('serviceWorker' in navigator) {\r\n return navigator.serviceWorker.getRegistrations().then(registrations => {\r\n return Promise.all(\r\n registrations.map(registration => {\r\n console.log('Unregistering service worker');\r\n return registration.unregister();\r\n })\r\n );\r\n });\r\n }\r\n }).then(() => {\r\n // Small delay to ensure cleanup completes\r\n setTimeout(() => {\r\n window.location.reload();\r\n }, 100);\r\n }).catch(err => {\r\n console.error('Error during cache cleanup:', err);\r\n // Reload anyway\r\n window.location.reload();\r\n });\r\n } else {\r\n (window as any).location.reload();\r\n }\r\n }\r\n}","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable, Injector } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { BBSFTranslateService, EnvironmentService } from '../services';\r\nimport { User } from '../models/UserModel';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { UtilityService } from '../services/utility.service';\r\nimport { AuthenticationModes } from '../enums/authentication-modes-enums';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n public redirectUrl: string = '';\r\n static user: User | null = null;\r\n _user: User | null;\r\n private get user(): User | null {\r\n // Always use static as source of truth\r\n // Only hydrate if static is null\r\n if (!AuthService.user) {\r\n this.getUserManager(); // This will set AuthService.user\r\n }\r\n\r\n return AuthService.user; // Always return fresh static value\r\n }\r\n static UserClaims: any = null;\r\n private jwtHelper: JwtHelperService = new JwtHelperService();\r\n private isAuthenticatedSubject = new BehaviorSubject<boolean>(this.hasToken());\r\n isAuthenticate$ = this.isAuthenticatedSubject.asObservable();\r\n //refresh\r\n static timers = [];\r\n static seconds = 0;\r\n private static isLoginInProgress = false;\r\n\r\n // User cache to prevent inconsistent multi-call results\r\n private _userCache: { user: User | null; timestamp: number; } | null = null;\r\n private USER_CACHE_TTL = 100; // ms\r\n\r\n constructor(private injector: Injector, private http: HttpClient, private environmentService: EnvironmentService, private translateService: BBSFTranslateService, private router: Router, private cookieService: CookieService, private utilityService: UtilityService) {\r\n\r\n // Listen for logout events from other tabs\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'auth_logout_broadcast' && event.newValue) {\r\n this.clearLocalAuthState({ keepRedirectUrl: false });\r\n this.router.navigate(['/Admin/account/login']);\r\n }\r\n });\r\n }\r\n\r\n private _TOKEN_KEY: string;\r\n get TOKEN_KEY() {\r\n if (!this._TOKEN_KEY) {\r\n this._TOKEN_KEY = this.environmentService.getCookieName();\r\n }\r\n return this._TOKEN_KEY;\r\n }\r\n\r\n private hasToken(): boolean {\r\n const token = this.cookieService.get(this.TOKEN_KEY);\r\n return token && !this.jwtHelper.isTokenExpired(token);\r\n }\r\n\r\n getUserManager() {\r\n const now = Date.now();\r\n\r\n // Return cached user if fresh (within 100ms TTL)\r\n if (this._userCache && now - this._userCache.timestamp < this.USER_CACHE_TTL) {\r\n return this._userCache.user;\r\n }\r\n\r\n const token = this.cookieService.get(this.TOKEN_KEY);\r\n\r\n if (token) {\r\n try {\r\n // Check both via helper and directly for additional safety\r\n const isExpired = this.jwtHelper.isTokenExpired(token);\r\n const expiryDate = this.jwtHelper.getTokenExpirationDate(token);\r\n const hasTimeLeft = expiryDate && expiryDate.getTime() > Date.now();\r\n\r\n if (!isExpired && hasTimeLeft) {\r\n this.handleAccessTokenWithoutLanguage(token);\r\n } else {\r\n this.clearLocalAuthState({ keepRedirectUrl: true });\r\n }\r\n } catch (error) {\r\n // Invalid token format\r\n this.clearLocalAuthState({ keepRedirectUrl: true });\r\n }\r\n }\r\n else {\r\n this.clearLocalAuthState({ keepRedirectUrl: true });\r\n }\r\n\r\n // Update cache with current user state\r\n this._userCache = { user: AuthService.user, timestamp: now };\r\n return AuthService.user;\r\n }\r\n\r\n getUser() {\r\n // No-op: getter now always reads from static\r\n // Kept for backward compatibility\r\n }\r\n storUser(User: any) {\r\n // Getter now always reads from static, so we don't need to sync\r\n // This method appears unused but kept for backward compatibility\r\n }\r\n\r\n getCurrentUser() {\r\n return AuthService.user;\r\n }\r\n\r\n /**\r\n * The only supported way to read the current user's profile.\r\n * Ensures the in-memory user is hydrated from cookie (or cleared) before returning profile.\r\n */\r\n public getCurrentUserProfile(): any | null {\r\n // Force hydration/cleanup based on cookie state\r\n this.getUserManager();\r\n\r\n return AuthService.user?.profile ?? null;\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n const user = this.user; // Call getter to ensure hydrated\r\n if (!user) {\r\n return false;\r\n }\r\n\r\n // Add 10-second grace period to prevent race conditions\r\n const expiryDate = new Date(user.expires_at);\r\n const nowWithBuffer = new Date(Date.now() + 10000);\r\n const now = new Date();\r\n const secondsUntilExpiry = (expiryDate.getTime() - now.getTime()) / 1000;\r\n const result = expiryDate.getTime() > nowWithBuffer.getTime();\r\n\r\n return result;\r\n }\r\n\r\n isUserInRole(allowedPermission) {\r\n const profile = this.getCurrentUserProfile();\r\n if (!profile) {\r\n return false;\r\n }\r\n\r\n let selectedPermissionSetID = Number.parseInt(profile['selectedpermissionsetid']);\r\n return allowedPermission.includes(selectedPermissionSetID);\r\n }\r\n\r\n isUserPermissionSetsInRoles(allowedPermission: number[]): boolean {\r\n const profile = this.getCurrentUserProfile();\r\n if (!profile) {\r\n return false;\r\n }\r\n\r\n const permissionSetSIDString = profile['permissionSetSID'];\r\n if (!permissionSetSIDString) {\r\n return false;\r\n }\r\n\r\n // Split comma-separated string and convert to numbers\r\n const userPermissionSets = permissionSetSIDString\r\n .split(',')\r\n .map(id => Number.parseInt(id.trim()))\r\n .filter(id => !isNaN(id)); // Filter out invalid numbers\r\n\r\n // Check if any user permission set is in the allowed permissions\r\n return userPermissionSets.some(permissionSetID => allowedPermission.includes(permissionSetID));\r\n }\r\n\r\n authorizationHeaderValue(): string {\r\n return AuthService.user\r\n ? `${AuthService.user.token_type} ${AuthService.user.access_token}`\r\n : '';\r\n }\r\n\r\n name(): string {\r\n const profile = this.getCurrentUserProfile();\r\n return profile?.given_name ?? '';\r\n }\r\n\r\n setUrl(url) {\r\n localStorage.setItem('redirectUrl', url);\r\n }\r\n\r\n getUrl() {\r\n return localStorage.getItem('redirectUrl') ?? \"/\";\r\n }\r\n\r\n /**\r\n * Local-only cleanup primitive (no HTTP, no redirects).\r\n * Safe to call before/after auth transitions to prevent stale-user windows.\r\n */\r\n clearLocalAuthState(options?: { keepRedirectUrl?: boolean; }) {\r\n // Clear timers\r\n AuthService.timers.forEach((t) => {\r\n clearInterval(t);\r\n });\r\n AuthService.timers = [];\r\n\r\n // Reset seconds counter to prevent stale timers\r\n AuthService.seconds = 0;\r\n\r\n // Clear memory\r\n AuthService.user = null;\r\n this._user = null;\r\n AuthService.UserClaims = null;\r\n\r\n // Delete cookie\r\n this.cookieService.delete(this.TOKEN_KEY, '/');\r\n\r\n // Clear redirectUrl unless explicitly told not to\r\n if (options?.keepRedirectUrl !== true) {\r\n localStorage.removeItem('redirectUrl');\r\n }\r\n\r\n // Invalidate user cache since auth state is cleared\r\n this._userCache = null;\r\n\r\n this.isAuthenticatedSubject.next(false);\r\n }\r\n\r\n signOut() {\r\n const wasAuthenticated = this.isAuthenticated();\r\n\r\n // If authenticated, kick off server logout BEFORE wiping local auth context (cookie/header/session)\r\n if (wasAuthenticated) {\r\n this.logout().subscribe({ next: () => { }, error: () => { } });\r\n }\r\n\r\n // Always clear local state immediately (no stale-user window)\r\n this.clearLocalAuthState({ keepRedirectUrl: false });\r\n\r\n // Notify other tabs about logout\r\n localStorage.setItem('auth_logout_broadcast', Date.now().toString());\r\n localStorage.removeItem('auth_logout_broadcast');\r\n\r\n // Redirect (Forms vs UAEPass)\r\n if (this.environmentService.getBBSFAuthenticationMode() == AuthenticationModes.UAEPass)\r\n this.logoutFromUAEPass();\r\n else\r\n this.router.navigate(['/Admin/account/login']);\r\n }\r\n\r\n logout() {\r\n const httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n }),\r\n };\r\n let ApiUrl = '/Account/';\r\n return this.http.get(this.environmentService.getApiUrl() + ApiUrl + 'Logout', httpOptions);\r\n }\r\n\r\n clearUserSessionClaims() {\r\n const httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n }),\r\n };\r\n let ApiUrl = '/api/Home/';\r\n return this.http.get(this.environmentService.getBaseUrl() + ApiUrl + 'ClearCurrentUserSession', httpOptions);\r\n }\r\n\r\n async handleAccessToken(response: any): Promise<void> {\r\n AuthService.isLoginInProgress = true;\r\n\r\n try {\r\n const token = response;\r\n\r\n // AGGRESSIVE timer cleanup before starting new session\r\n AuthService.timers.map(t => clearInterval(t));\r\n AuthService.timers = [];\r\n AuthService.seconds = 0; // Reset counter\r\n\r\n // Brief pause to ensure intervals are cleared\r\n await new Promise(resolve => setTimeout(resolve, 50));\r\n\r\n // Update user atomically\r\n AuthService.user = new User();\r\n AuthService.user.token_type = \"Bearer\";\r\n AuthService.user.access_token = token;\r\n AuthService.user.profile = this.jwtHelper.decodeToken(token);\r\n AuthService.user.expires_at = this.jwtHelper.getTokenExpirationDate(token);\r\n\r\n // Add 5-minute buffer to cookie expiry to prevent browser deletion before refresh\r\n // JWT expiry in isAuthenticated() remains authoritative\r\n const cookieExpiry = new Date(AuthService.user.expires_at.getTime() + (5 * 60 * 1000));\r\n\r\n // Update cookie atomically (no deletion window)\r\n this.cookieService.set(this.TOKEN_KEY, token, cookieExpiry, \"/\", null, true, 'Lax');\r\n\r\n localStorage.setItem(\"language\", AuthService.user.profile.locale);\r\n this.isAuthenticatedSubject.next(true);\r\n\r\n // Invalidate user cache since we have a new token\r\n this._userCache = null;\r\n\r\n this.setTokenSeconds();\r\n AuthService.timers.push(this.checkRefreshToken());\r\n await this.updateLanguage();\r\n } finally {\r\n AuthService.isLoginInProgress = false;\r\n }\r\n }\r\n\r\n handleAccessTokenWithoutLanguage(response: any) {\r\n const token = response;\r\n\r\n // Clear timers only (don't delete cookie to avoid race condition window)\r\n AuthService.timers.map(t => clearInterval(t));\r\n AuthService.timers = [];\r\n\r\n // Update user atomically\r\n AuthService.user = new User();\r\n AuthService.user.token_type = \"Bearer\";\r\n AuthService.user.access_token = token;\r\n AuthService.user.profile = this.jwtHelper.decodeToken(token);\r\n AuthService.user.expires_at = this.jwtHelper.getTokenExpirationDate(token);\r\n\r\n // Add 5-minute buffer to cookie expiry to prevent browser deletion before refresh\r\n // JWT expiry in isAuthenticated() remains authoritative\r\n const cookieExpiry = new Date(AuthService.user.expires_at.getTime() + (5 * 60 * 1000));\r\n\r\n // Update cookie atomically (no deletion window)\r\n this.cookieService.set(this.TOKEN_KEY, token, cookieExpiry, \"/\", null, true, 'Lax');\r\n\r\n localStorage.setItem(\"language\", AuthService.user.profile.locale);\r\n this.isAuthenticatedSubject.next(true);\r\n\r\n // Invalidate user cache since we have a new token\r\n this._userCache = null;\r\n\r\n this.setTokenSeconds();\r\n AuthService.timers.push(this.checkRefreshToken());\r\n }\r\n\r\n async updateLanguage() {\r\n const profile = this.getCurrentUserProfile();\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n if (!localStorage.getItem('language') || localStorage.getItem('language') == profile.locale)\r\n localStorage.setItem('language', profile.locale);\r\n\r\n if (this.translateService.currentLang != localStorage.getItem('language')) {\r\n this.translateService.resetLang(this.translateService.currentLang);\r\n await this.translateService.reloadLang(localStorage.getItem('language')).subscribe();\r\n }\r\n }\r\n\r\n checkRefreshToken() {\r\n let date = new Date() as any;\r\n const timerId = setInterval(() => {\r\n // Early exit if user logged out or no user exists\r\n if (!AuthService.user) {\r\n return;\r\n }\r\n\r\n const secondsRemaining = Math.floor(AuthService.seconds);\r\n\r\n // Early exit if seconds is invalid (negative or zero means already expired/cleared)\r\n if (secondsRemaining <= 0) {\r\n return;\r\n }\r\n\r\n // Refresh when 30 seconds remain (instead of 120)\r\n // This prevents continuous refresh loops with short-lived tokens\r\n // Timer is cleared after triggering to ensure only ONE refresh per token cycle\r\n if (secondsRemaining <= 30 && secondsRemaining > 0 && this.isAuthenticated()) {\r\n // Double-check user still exists before refreshing\r\n if (!AuthService.user) {\r\n return;\r\n }\r\n\r\n AuthService.timers.map(t => clearInterval(t));\r\n AuthService.timers = [];\r\n\r\n const token = this.cookieService.get(this.TOKEN_KEY);\r\n\r\n if (token) {\r\n this.refresh();\r\n } else {\r\n // Defensive: Token disappeared between isAuthenticated() check and now\r\n console.error('[REFRESH-TIMER] Token disappeared! Attempting recovery...', {\r\n timestamp: new Date().toISOString(),\r\n secondsRemaining,\r\n wasAuthenticated: true\r\n });\r\n\r\n // Try one more time after short delay\r\n setTimeout(() => {\r\n const retryToken = this.cookieService.get(this.TOKEN_KEY);\r\n\r\n if (retryToken) {\r\n this.refresh();\r\n } else {\r\n console.error('[REFRESH-TIMER] Token still missing after retry');\r\n // Don't clear auth state here - let natural expiry handle it\r\n // This prevents premature logout if user is still active\r\n }\r\n }, 100);\r\n }\r\n }\r\n AuthService.seconds--;\r\n }, 1000);\r\n\r\n return timerId;\r\n }\r\n\r\n setTokenSeconds() {\r\n let date = new Date() as any;\r\n AuthService.seconds = (AuthService.user.expires_at - date) / 1000;\r\n }\r\n\r\n refresh() {\r\n // Don't refresh if login is in progress\r\n if (AuthService.isLoginInProgress) {\r\n return;\r\n }\r\n\r\n // Don't refresh if user logged out\r\n if (!AuthService.user) {\r\n return;\r\n }\r\n\r\n const refreshLockKey = 'auth_refreshing_lock';\r\n const lockValue = localStorage.getItem(refreshLockKey);\r\n\r\n // Check if another tab is refreshing (within last 5 seconds)\r\n if (lockValue && Date.now() - parseInt(lockValue) < 5000) {\r\n return; // Another tab is handling the refresh\r\n }\r\n\r\n // Acquire lock\r\n localStorage.setItem(refreshLockKey, Date.now().toString());\r\n\r\n // IMPORTANT: Don't delete cookie before refresh to prevent:\r\n // 1. Race condition window where no token exists\r\n // 2. Repeated cookie deletion/recreation cycles with short-lived tokens\r\n // The cookie will be atomically replaced by handleAccessTokenWithoutLanguage()\r\n\r\n const httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': this.authorizationHeaderValue(),\r\n }),\r\n };\r\n let ApiUrl = '/api/Home/';\r\n this.http.get(this.environmentService.getApiUrl() + ApiUrl + 'RefreshAccessToken', httpOptions).subscribe({\r\n next: (res: any) => {\r\n // Check if user logged out during HTTP call\r\n if (!AuthService.user) {\r\n localStorage.removeItem(refreshLockKey);\r\n return; // Abort - don't set new token\r\n }\r\n\r\n // Atomically replaces the old cookie with new token\r\n this.handleAccessTokenWithoutLanguage(res.val);\r\n localStorage.removeItem(refreshLockKey);\r\n\r\n // Auto-navigate if user was redirected to login during token expiry\r\n // this.handlePostRefreshNavigation();\r\n },\r\n error: (err) => {\r\n localStorage.removeItem(refreshLockKey);\r\n // On error, old cookie remains valid until natural expiry\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handles navigation after successful token refresh.\r\n * If user is on login page and has a stored redirect URL, navigates to that URL.\r\n * This resolves the issue where users remain on login page after token refresh.\r\n * NOTE: This is not used anymore because we are using the async guard to wait for the refresh to complete before navigating to the protected route.\r\n */\r\n private handlePostRefreshNavigation(): void {\r\n // Get the stored redirect URL\r\n const redirectUrl = this.getUrl(); // Returns localStorage 'redirectUrl' or \"/\"\r\n\r\n // Get current URL\r\n const currentUrl = this.router.url;\r\n\r\n // Check if we're currently on the login page\r\n const isOnLoginPage = currentUrl.toLowerCase().includes('login');\r\n\r\n const isAuth = this.isAuthenticated();\r\n\r\n // More lenient conditions:\r\n // 1. User is authenticated\r\n // 2. User is on login page\r\n // 3. There's ANY redirect URL (even \"/\")\r\n if (isAuth && isOnLoginPage) {\r\n // Determine target URL\r\n const targetUrl = redirectUrl && !redirectUrl.toLowerCase().includes('login')\r\n ? redirectUrl\r\n : '/Admin/Home'; // Default fallback instead of rejecting \"/\"\r\n\r\n // Clear the stored redirect URL first\r\n localStorage.removeItem('redirectUrl');\r\n\r\n // Use setTimeout to ensure router has finished current navigation\r\n // This prevents competing navigation attempts\r\n setTimeout(() => {\r\n this.router.navigate([targetUrl]);\r\n }, 100);\r\n }\r\n }\r\n\r\n //#region uaepass methods\r\n loginWithUAEPass() {\r\n const authEndpoint = `${this.environmentService.getUAEPassBaseUrl()}${this.environmentService.getUAEPassAuthorizationEndPoint()}`;\r\n const queryParams = {\r\n response_type: 'code',\r\n client_id: `${this.environmentService.getUAEPassClientID()}`,\r\n redirect_uri: `${this.environmentService.getBaseUrl()}${this.environmentService.getUAEPassRedirectUrl()}`,\r\n scope: 'urn:uae:digitalid:profile:general urn:uae:digitalid:profile:general:profileType urn:uae:digitalid:profile:general:unifiedId',\r\n state: this.translateService.currentLang,\r\n acr_values: 'urn:safelayer:tws:policies:authentication:level:low',\r\n ui_locales: this.translateService.currentLang,\r\n };\r\n const queryParamsString = Object.entries(queryParams)\r\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\r\n .join('&');\r\n const loginUrl = `${authEndpoint}?${queryParamsString}`;\r\n window.location.href = loginUrl;\r\n return;\r\n }\r\n\r\n logoutFromUAEPass() {\r\n const logoutEndpoint = `${this.environmentService.getUAEPassBaseUrl()}${this.environmentService.getUAEPassLogoutEndPoint()}`;\r\n const queryParams = {\r\n redirect_uri: `${this.environmentService.getBaseUrl()}`,\r\n };\r\n const queryParamsString = Object.entries(queryParams)\r\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\r\n .join('&');\r\n\r\n const logoutUrl = `${logoutEndpoint}?${queryParamsString}`;\r\n window.location.href = logoutUrl;\r\n return;\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BlockUIModule } from 'ng-block-ui';\r\nimport { provideToastr } from 'ngx-toastr';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport {\r\n UtilityService, EnvironmentService, RequestHandlerService, StylesBundleService, BBSFTranslateService,\r\n ControlValidationService, MasterLayoutService, ConfigurationService, AuthService, LanguageService,\r\n SpeechRecognitionService\r\n} from './shared';\r\n\r\n/**\r\n * BBSFUtilitiesModule\r\n * \r\n * This module provides full backward compatibility by including ALL services and modules\r\n * from the original version. Simply import this module to get all functionality.\r\n * \r\n * For new applications, consider using modular imports via secondary entry points:\r\n * - @bnsights/bbsf-utilities/auth - Authentication services\r\n * - @bnsights/bbsf-utilities/http - HTTP request handling\r\n * - @bnsights/bbsf-utilities/translate - Translation services\r\n * - @bnsights/bbsf-utilities/ui - UI services (BlockUI, Toastr, etc.)\r\n * \r\n * @example\r\n * // Backward compatible usage (imports everything):\r\n * import { BBSFUtilitiesModule } from '@bnsights/bbsf-utilities';\r\n * \r\n * @NgModule({\r\n * imports: [BBSFUtilitiesModule]\r\n * })\r\n * export class AppModule { }\r\n */\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n BlockUIModule.forRoot(),\r\n ],\r\n exports: [\r\n // Re-export modules for backward compatibility\r\n CommonModule,\r\n RouterModule,\r\n BlockUIModule,\r\n ],\r\n providers: [\r\n // All services for backward compatibility\r\n UtilityService,\r\n EnvironmentService,\r\n AuthService,\r\n RequestHandlerService,\r\n StylesBundleService,\r\n TranslateService,\r\n BBSFTranslateService,\r\n ControlValidationService,\r\n MasterLayoutService,\r\n ConfigurationService,\r\n CookieService,\r\n LanguageService,\r\n SpeechRecognitionService,\r\n provideToastr()\r\n ]\r\n})\r\nexport class BBSFUtilitiesModule {\r\n\r\n}\r\n","/*\r\n * Public API Surface of @bnsights/bbsf-utilities\r\n * \r\n * This is the CORE entry point with minimal dependencies.\r\n * \r\n * For feature-specific services, use secondary entry points:\r\n * - @bnsights/bbsf-utilities/auth - Authentication services\r\n * - @bnsights/bbsf-utilities/word - Word document generation\r\n * - @bnsights/bbsf-utilities/translate - Translation services\r\n * - @bnsights/bbsf-utilities/ui - UI services (BlockUI, Toastr, etc.)\r\n * - @bnsights/bbsf-utilities/http - HTTP request handling\r\n */\r\n\r\n//Module (Note: for backward compatibility - contains ALL providers)\r\nexport * from './lib/bbsf-utilities.module';\r\n\r\n//#region Core Services (minimal dependencies)\r\n\r\nexport * from './lib/shared/services/environment.service';\r\nexport * from './lib/shared/services/styles-bundle.service';\r\nexport * from './lib/shared/services/appearance-configuration.service';\r\nexport * from './lib/shared/services/configuration.service';\r\nexport * from './lib/shared/services/service-worker-helper.service';\r\n\r\n//#endregion\r\n\r\n//#region config\r\nexport * from './lib/shared/config/environment';\r\n//#endregion\r\n\r\n//#region models \r\nexport * from './lib/shared/models/area-model';\r\nexport * from './lib/shared/models/error-model';\r\nexport * from './lib/shared/models/UserModel';\r\n//#endregion\r\n\r\n//#region export enums\r\nexport * from './lib/shared/enums/authentication-modes-enums';\r\n//#endregion\r\n\r\n/* \r\n * DEPRECATED EXPORTS (for backward compatibility)\r\n * Please migrate to secondary entry points for these:\r\n */\r\n\r\n// Use @bnsights/bbsf-utilities/ui instead\r\nexport * from './lib/shared/services/utility.service';\r\nexport * from './lib/shared/services/control-validation.service';\r\nexport * from './lib/shared/services/speech-recognition.service';\r\n\r\n// Use @bnsights/bbsf-utilities/translate instead\r\nexport * from './lib/shared/services/translate.service';\r\nexport * from './lib/shared/services/translation-resolver.service';\r\nexport { TranslationResolverService } from './lib/shared/services/translation-resolver.service';\r\nexport * from './lib/shared/services/language.service';\r\n\r\n// Use @bnsights/bbsf-utilities/http instead\r\nexport * from './lib/shared/services/request-handler.service';\r\nexport * from './lib/shared/services/master-layout.service';\r\nexport * from './lib/shared/services/preload.service';\r\nexport * from './lib/shared/models/request-options-model';\r\n\r\n// Word document generation moved to @bnsights/bbsf-utilities-doc\r\n// Install: npm install @bnsights/bbsf-utilities-doc\r\n\r\n// Use @bnsights/bbsf-utilities/auth instead\r\nexport * from './lib/shared/authentication/auth.service';\r\n\r\n// Re-export speech-language model\r\nexport * from './lib/shared/models/speech-language';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ConfigurationService","i1.UtilityService","i1","i2.RequestHandlerService","i3.AuthService","i2.StylesBundleService","i2.FileLoaderService","takeUntil","tap","i2.AuthService","i3.EnvironmentService","i3.UtilityService","i3.BBSFTranslateService","i1.BBSFTranslateService","i1.EnvironmentService","take","i1.RequestHandlerService","i2","switchMap","i2.EnvironmentService","i2.BBSFTranslateService","i3","i4","i5.UtilityService"],"mappings":"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"}
@@ -1,24 +1,28 @@
1
+ import { OnDestroy } from '@angular/core';
1
2
  import { Router } from '@angular/router';
2
3
  import { TranslateService } from '@ngx-translate/core';
3
- import { EnvironmentService, RequestHandlerService, StylesBundleService } from '.';
4
+ import { Observable } from 'rxjs';
5
+ import { FileLoaderService, RequestHandlerService, StylesBundleService } from '.';
4
6
  import { AuthService } from '../authentication';
5
7
  import * as i0 from "@angular/core";
6
- export declare class MasterLayoutService {
8
+ export declare class MasterLayoutService implements OnDestroy {
7
9
  private router;
8
10
  private http;
9
11
  private authService;
10
12
  private stylesBundleService;
11
13
  private translate;
12
- private environmentService;
14
+ private fileLoaderService;
13
15
  apiUrl: string;
14
- constructor(router: Router, http: RequestHandlerService, authService: AuthService, stylesBundleService: StylesBundleService, translate: TranslateService, environmentService: EnvironmentService);
16
+ private readonly destroy$;
17
+ constructor(router: Router, http: RequestHandlerService, authService: AuthService, stylesBundleService: StylesBundleService, translate: TranslateService, fileLoaderService: FileLoaderService);
15
18
  switchLang(lang: string, bundleEnglishName: string, bundleArabicName: string): void;
16
19
  reloadComponent(): void;
17
20
  private changeLanguage;
18
- logError(error: string): import("rxjs").Observable<unknown>;
21
+ logError(error: string): Observable<unknown>;
19
22
  private updateUserInfo;
20
23
  switchRole(permissionSetID: string): void;
21
24
  private updateRole;
25
+ ngOnDestroy(): void;
22
26
  static ɵfac: i0.ɵɵFactoryDeclaration<MasterLayoutService, never>;
23
27
  static ɵprov: i0.ɵɵInjectableDeclaration<MasterLayoutService>;
24
28
  }
@@ -5,8 +5,13 @@ export declare class FileLoaderService {
5
5
  private translate;
6
6
  private http;
7
7
  private availableLanguages;
8
+ private loadedLanguages;
8
9
  constructor(translate: BBSFTranslateService, http: HttpClient);
10
+ preloadAll(): Promise<void>;
9
11
  loadEnvironment(): Promise<void>;
12
+ private loadConfigurations;
13
+ private getDefaultLanguage;
14
+ loadLanguage(lang: string): Promise<void>;
10
15
  preloadTranslations(): Promise<void>;
11
16
  static ɵfac: i0.ɵɵFactoryDeclaration<FileLoaderService, never>;
12
17
  static ɵprov: i0.ɵɵInjectableDeclaration<FileLoaderService>;
@@ -4,6 +4,10 @@ export declare class ServiceWorkerHelperService {
4
4
  updates: SwUpdate;
5
5
  private swRegistration;
6
6
  private updateCheckInProgress;
7
+ private chunkHandlersRegistered;
8
+ private chunkRecoveryInFlight;
9
+ private readonly sessionRecoveryAttemptsKey;
10
+ private readonly maxChunkRecoveryAttempts;
7
11
  constructor(updates: SwUpdate);
8
12
  checkForUpdates(): void;
9
13
  private setupUpdateListeners;
@@ -12,6 +16,8 @@ export declare class ServiceWorkerHelperService {
12
16
  private initializeServiceWorker;
13
17
  private skipWaiting;
14
18
  private setupChunkErrorHandler;
19
+ private isChunkErrorEvent;
20
+ private isChunkLoadFailure;
15
21
  private handleChunkLoadError;
16
22
  private clearCacheAndReload;
17
23
  static ɵfac: i0.ɵɵFactoryDeclaration<ServiceWorkerHelperService, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bnsights/bbsf-utilities",
3
- "version": "1.2.6",
3
+ "version": "1.2.8-beta.1",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^19.2.14",
6
6
  "@angular/cdk": "^19.2.19",