@acontplus/ng-infrastructure 1.1.0 → 1.1.2

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
@@ -7,7 +7,11 @@ enterprise applications.
7
7
  ## Installation
8
8
 
9
9
  ```bash
10
+ # Using npm
10
11
  npm install @acontplus/ng-infrastructure
12
+
13
+ # Using pnpm
14
+ pnpm add @acontplus/ng-infrastructure
11
15
  ```
12
16
 
13
17
  ## Features
@@ -40,11 +44,7 @@ import {
40
44
  export const appConfig: ApplicationConfig = {
41
45
  providers: [
42
46
  provideHttpClient(
43
- withInterceptors([
44
- apiInterceptor,
45
- spinnerInterceptor,
46
- httpContextInterceptor,
47
- ]),
47
+ withInterceptors([apiInterceptor, spinnerInterceptor, httpContextInterceptor]),
48
48
  ),
49
49
  ],
50
50
  };
@@ -141,11 +141,7 @@ export class CustomerRepository extends GenericRepository<Customer, number> {
141
141
 
142
142
  // Custom business methods
143
143
  async findByEmail(email: string): Promise<Customer[]> {
144
- return (
145
- this.http
146
- .get<Customer[]>(`${this.baseUrl}/search?email=${email}`)
147
- .toPromise() || []
148
- );
144
+ return this.http.get<Customer[]>(`${this.baseUrl}/search?email=${email}`).toPromise() || [];
149
145
  }
150
146
  }
151
147
  ```
@@ -4,11 +4,10 @@ import { inject, Injectable, signal, computed, InjectionToken } from '@angular/c
4
4
  import { retry, map, catchError, finalize } from 'rxjs/operators';
5
5
  import { throwError, catchError as catchError$1, switchMap, lastValueFrom } from 'rxjs';
6
6
  import { NotificationService } from '@acontplus/ng-notifications';
7
- import { AUTH_TOKEN, ENVIRONMENT, DEFAULT_CONFIG as DEFAULT_CONFIG$1 } from '@acontplus/ng-config';
7
+ import { AUTH_TOKEN, ENVIRONMENT, CORE_CONFIG, DEFAULT_CONFIG as DEFAULT_CONFIG$1 } from '@acontplus/ng-config';
8
8
  import { Router } from '@angular/router';
9
9
  import { v4 } from 'uuid';
10
10
  import { OverlayService } from '@acontplus/ng-components';
11
- import { CORE_CONFIG } from '@acontplus/ng-config/src/lib/tokens/core-config-token';
12
11
 
13
12
  // A token to use with HttpContext for skipping notifications on specific requests.
14
13
  const SKIP_NOTIFICATION = new HttpContextToken(() => false);
@@ -128,7 +127,7 @@ function handleToastNotifications(response, notificationService, req) {
128
127
  }
129
128
  // Handle warnings separately if needed
130
129
  if (response.status === 'warning' && response.warnings && response.warnings.length > 0) {
131
- response.warnings.forEach(warning => {
130
+ response.warnings.forEach((warning) => {
132
131
  notificationService.show({
133
132
  type: 'warning',
134
133
  message: warning.message,
@@ -137,7 +136,7 @@ function handleToastNotifications(response, notificationService, req) {
137
136
  }
138
137
  // Handle errors separately if needed
139
138
  if (response.status === 'error' && response.errors && response.errors.length > 0) {
140
- response.errors.forEach(error => {
139
+ response.errors.forEach((error) => {
141
140
  notificationService.show({
142
141
  type: 'error',
143
142
  message: error.message,
@@ -200,7 +199,7 @@ function shouldShowSuccessToast(req) {
200
199
  '/status',
201
200
  '/ping',
202
201
  ];
203
- if (excludedPatterns.some(pattern => method === pattern || url.includes(pattern))) {
202
+ if (excludedPatterns.some((pattern) => method === pattern || url.includes(pattern))) {
204
203
  return false;
205
204
  }
206
205
  // Always show for these methods
@@ -311,10 +310,10 @@ class LoggingService {
311
310
  // e.g., Sentry, LogRocket, etc.
312
311
  // This is a placeholder for production logging implementation
313
312
  }
314
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
315
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: LoggingService, providedIn: 'root' });
313
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
314
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: LoggingService, providedIn: 'root' });
316
315
  }
317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: LoggingService, decorators: [{
316
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: LoggingService, decorators: [{
318
317
  type: Injectable,
319
318
  args: [{
320
319
  providedIn: 'root',
@@ -360,10 +359,10 @@ class TenantInfo {
360
359
  localStorage.removeItem('tenantId');
361
360
  sessionStorage.removeItem('tenantId');
362
361
  }
363
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TenantInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
364
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TenantInfo, providedIn: 'root' });
362
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: TenantInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
363
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: TenantInfo, providedIn: 'root' });
365
364
  }
366
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TenantInfo, decorators: [{
365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: TenantInfo, decorators: [{
367
366
  type: Injectable,
368
367
  args: [{
369
368
  providedIn: 'root',
@@ -395,10 +394,10 @@ class CorrelationInfo {
395
394
  getId() {
396
395
  return this.getOrCreateCorrelationId();
397
396
  }
398
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CorrelationInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
399
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CorrelationInfo, providedIn: 'root' });
397
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CorrelationInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
398
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CorrelationInfo, providedIn: 'root' });
400
399
  }
401
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CorrelationInfo, decorators: [{
400
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CorrelationInfo, decorators: [{
402
401
  type: Injectable,
403
402
  args: [{
404
403
  providedIn: 'root',
@@ -464,7 +463,7 @@ const httpContextInterceptor = (req, next) => {
464
463
  return next(req);
465
464
  }
466
465
  // Check if URL should be excluded
467
- const shouldExclude = config.excludeUrls.some(url => req.url.includes(url) || new RegExp(url).test(req.url));
466
+ const shouldExclude = config.excludeUrls.some((url) => req.url.includes(url) || new RegExp(url).test(req.url));
468
467
  if (shouldExclude) {
469
468
  return next(req);
470
469
  }
@@ -539,19 +538,19 @@ const httpContextInterceptor = (req, next) => {
539
538
  }
540
539
  // If request has auth header, handle with refresh logic
541
540
  if (headers['Authorization'] && config.refreshTokenCallback) {
542
- return next(enhancedReq).pipe(catchError$1(error => {
541
+ return next(enhancedReq).pipe(catchError$1((error) => {
543
542
  // If 401 Unauthorized, try to refresh token
544
543
  if (error.status === 401) {
545
544
  const refreshToken = tokenProvider?.getRefreshToken?.();
546
545
  if (refreshToken && refreshToken.trim().length > 0) {
547
- return config.refreshTokenCallback().pipe(switchMap(newTokens => {
546
+ return config.refreshTokenCallback().pipe(switchMap((newTokens) => {
548
547
  // Retry the original request with new token
549
548
  const retryReq = req.clone({
550
549
  url: finalUrl,
551
550
  setHeaders: { ...headers, Authorization: `Bearer ${newTokens.token}` },
552
551
  });
553
552
  return next(retryReq);
554
- }), catchError$1(refreshError => {
553
+ }), catchError$1((refreshError) => {
555
554
  // Refresh failed, logout user
556
555
  config.logoutCallback?.();
557
556
  return throwError(() => refreshError);
@@ -682,10 +681,10 @@ class ActiveRequestsTracker {
682
681
  requests.splice(index, 1);
683
682
  }
684
683
  }
685
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
686
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ActiveRequestsTracker, providedIn: 'root' });
684
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
685
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ActiveRequestsTracker, providedIn: 'root' });
687
686
  }
688
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ActiveRequestsTracker, decorators: [{
687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ActiveRequestsTracker, decorators: [{
689
688
  type: Injectable,
690
689
  args: [{
691
690
  providedIn: 'root',
@@ -740,10 +739,10 @@ class BaseHttpRepository {
740
739
  delete(path = '') {
741
740
  return this.http.delete(this.buildUrl(path));
742
741
  }
743
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
744
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: BaseHttpRepository });
742
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
743
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: BaseHttpRepository });
745
744
  }
746
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: BaseHttpRepository, decorators: [{
745
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: BaseHttpRepository, decorators: [{
747
746
  type: Injectable
748
747
  }] });
749
748
 
@@ -787,10 +786,10 @@ class GenericRepository extends BaseHttpRepository {
787
786
  }
788
787
  return params;
789
788
  }
790
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
791
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: GenericRepository });
789
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
790
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GenericRepository });
792
791
  }
793
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: GenericRepository, decorators: [{
792
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GenericRepository, decorators: [{
794
793
  type: Injectable
795
794
  }], ctorParameters: () => [] });
796
795
  class SearchableGenericRepository extends GenericRepository {
@@ -799,10 +798,10 @@ class SearchableGenericRepository extends GenericRepository {
799
798
  const params = this.buildParams(pagination, searchFilters);
800
799
  return this.get('search', params);
801
800
  }
802
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
803
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchableGenericRepository });
801
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
802
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SearchableGenericRepository });
804
803
  }
805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchableGenericRepository, decorators: [{
804
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SearchableGenericRepository, decorators: [{
806
805
  type: Injectable
807
806
  }] });
808
807
 
@@ -845,10 +844,10 @@ class RepositoryFactory {
845
844
  remove: (id) => this.http.delete(buildUrl(idToString(id))),
846
845
  };
847
846
  }
848
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
849
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RepositoryFactory, providedIn: 'root' });
847
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
848
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: RepositoryFactory, providedIn: 'root' });
850
849
  }
851
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RepositoryFactory, decorators: [{
850
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: RepositoryFactory, decorators: [{
852
851
  type: Injectable,
853
852
  args: [{ providedIn: 'root' }]
854
853
  }] });
@@ -956,13 +955,13 @@ class CoreConfigService {
956
955
  * Check if a URL should be excluded from processing
957
956
  */
958
957
  shouldExcludeUrl(url) {
959
- return this.config.excludeUrls.some(excludePattern => url.includes(excludePattern) || new RegExp(excludePattern).test(url));
958
+ return this.config.excludeUrls.some((excludePattern) => url.includes(excludePattern) || new RegExp(excludePattern).test(url));
960
959
  }
961
960
  /**
962
961
  * Check if a method should be excluded from processing
963
962
  */
964
963
  shouldExcludeMethod(method) {
965
- return this.config.excludeMethods.some(excludeMethod => excludeMethod.toLowerCase() === method.toLowerCase());
964
+ return this.config.excludeMethods.some((excludeMethod) => excludeMethod.toLowerCase() === method.toLowerCase());
966
965
  }
967
966
  /**
968
967
  * Get custom headers with dynamic values resolved
@@ -980,10 +979,10 @@ class CoreConfigService {
980
979
  resetConfig() {
981
980
  this.config = this.initializeConfig();
982
981
  }
983
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
984
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CoreConfigService, providedIn: 'root' });
982
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
983
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CoreConfigService, providedIn: 'root' });
985
984
  }
986
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CoreConfigService, decorators: [{
985
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CoreConfigService, decorators: [{
987
986
  type: Injectable,
988
987
  args: [{
989
988
  providedIn: 'root',
@@ -1022,11 +1021,11 @@ class Command extends BaseUseCase {
1022
1021
  status: 'error',
1023
1022
  code: 'VALIDATION_FAILED',
1024
1023
  message: 'Validation failed',
1025
- errors: errors.map(msg => ({ code: 'VALIDATION', message: msg })),
1024
+ errors: errors.map((msg) => ({ code: 'VALIDATION', message: msg })),
1026
1025
  timestamp: new Date().toISOString(),
1027
1026
  }));
1028
1027
  }
1029
- return this.executeInternal(request).pipe(catchError(error => {
1028
+ return this.executeInternal(request).pipe(catchError((error) => {
1030
1029
  // Log the error for debugging
1031
1030
  const logger = inject(LoggingService);
1032
1031
  logger.error('An error occurred during command execution:', error);
@@ -1038,7 +1037,7 @@ class Command extends BaseUseCase {
1038
1037
 
1039
1038
  class Query extends BaseUseCase {
1040
1039
  execute(request) {
1041
- return this.executeInternal(request).pipe(catchError(error => {
1040
+ return this.executeInternal(request).pipe(catchError((error) => {
1042
1041
  const logger = inject(LoggingService);
1043
1042
  logger.error('An error occurred during query execution:', error);
1044
1043
  return throwError(() => error);
@@ -1 +1 @@
1
- {"version":3,"file":"acontplus-ng-infrastructure.mjs","sources":["../tmp-esm2022/lib/interceptors/api-interceptor.js","../tmp-esm2022/lib/services/logging-service.js","../tmp-esm2022/lib/services/tenant-info.js","../tmp-esm2022/lib/services/correlation-info.js","../tmp-esm2022/lib/interceptors/http-context-interceptor.js","../tmp-esm2022/lib/interceptors/spinner-interceptor.js","../tmp-esm2022/lib/repositories/base-http-repository.js","../tmp-esm2022/lib/repositories/generic-repository.js","../tmp-esm2022/lib/repositories/repository-factory.js","../tmp-esm2022/lib/adapters/angular-http-adapter.js","../tmp-esm2022/lib/services/core-config-service.js","../tmp-esm2022/lib/use-cases/base-use-case.js","../tmp-esm2022/lib/use-cases/commands.js","../tmp-esm2022/lib/use-cases/queries.js","../tmp-esm2022/acontplus-ng-infrastructure.js"],"sourcesContent":["import { HttpResponse, HttpContextToken, } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, map, retry } from 'rxjs/operators';\nimport { throwError } from 'rxjs';\nimport { NotificationService } from '@acontplus/ng-notifications';\nimport { AUTH_TOKEN } from '@acontplus/ng-config';\n// A token to use with HttpContext for skipping notifications on specific requests.\nexport const SKIP_NOTIFICATION = new HttpContextToken(() => false);\n// A token to use with HttpContext for forcing notifications on specific requests (overrides exclusion patterns).\nexport const SHOW_NOTIFICATIONS = new HttpContextToken(() => undefined);\nexport const apiInterceptor = (req, next) => {\n const toastr = inject(NotificationService);\n const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n // Add authorization header if token is available\n let modifiedReq = req;\n const token = tokenProvider?.getToken();\n if (token) {\n modifiedReq = req.clone({\n setHeaders: { Authorization: `Bearer ${token}` },\n });\n }\n return next(modifiedReq).pipe(\n // Retries the request up to 2 times on failure with a 1-second delay.\n retry({ count: 2, delay: 1000 }), \n // Use the `map` operator to handle successful responses.\n map((event) => {\n if (event instanceof HttpResponse) {\n return handleSuccessResponse(event, toastr, req);\n }\n return event;\n }), \n // Use the `catchError` operator to handle any errors that occur.\n catchError((error) => handleErrorResponse(error, toastr)));\n};\n// --- Helper Functions ---\n/**\n * Handles successful HTTP responses, standardizes them, shows notifications, and transforms for consumers.\n */\nfunction handleSuccessResponse(event, notificationService, req) {\n const body = event.body;\n // Standardize the response to always have ApiResponse structure\n const standardizedResponse = standardizeApiResponse(body);\n // Handle toast notifications based on standardized response\n handleToastNotifications(standardizedResponse, notificationService, req);\n // Return the appropriate data based on response type\n return transformResponseForConsumers(standardizedResponse, event);\n}\n/**\n * Handles HTTP errors (from the interceptor chain, not backend ApiResponse).\n */\nfunction handleErrorResponse(error, notificationService) {\n const status = error.status;\n // Only show notifications for critical HTTP-level errors.\n // We avoid showing toasts for 4xx errors, which are handled by the component.\n if (status !== null && shouldShowCriticalErrorNotification(status)) {\n const message = getCriticalErrorMessage(error);\n const title = getErrorTitle(status);\n notificationService.error({\n message: message,\n title: title,\n config: { duration: 5000 },\n });\n }\n // Always re-throw the error so components/services can handle it.\n return throwError(() => error);\n}\n/**\n * Standardizes any response to follow the ApiResponse structure\n */\nfunction standardizeApiResponse(body) {\n // If it's already a proper ApiResponse, return as is\n if (isValidApiResponse(body)) {\n return body;\n }\n // If it's a raw data response (no wrapper), wrap it\n if (body && typeof body === 'object' && !('status' in body)) {\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n data: body,\n timestamp: new Date().toISOString(),\n };\n }\n // If it's a primitive value, wrap it\n if (body !== null && body !== undefined && typeof body !== 'object') {\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n data: body,\n timestamp: new Date().toISOString(),\n };\n }\n // If it's null/undefined, create a success response without data\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n timestamp: new Date().toISOString(),\n };\n}\n/**\n * Handles toast notifications based on standardized response\n */\nfunction handleToastNotifications(response, notificationService, req) {\n const shouldShowToast = shouldShowSuccessToast(req);\n const forceShow = req.context.get(SHOW_NOTIFICATIONS);\n const skipNotification = req.context.get(SKIP_NOTIFICATION);\n // Determine if we should show notifications, considering overrides\n const showNotifications = forceShow !== undefined ? forceShow : shouldShowToast;\n if (skipNotification)\n return;\n // Dynamic handling: Use show() for runtime type selection\n if (response.message &&\n showNotifications &&\n ['success', 'warning', 'error'].includes(response.status)) {\n notificationService.show({\n type: response.status,\n message: response.message,\n });\n }\n // Handle warnings separately if needed\n if (response.status === 'warning' && response.warnings && response.warnings.length > 0) {\n response.warnings.forEach(warning => {\n notificationService.show({\n type: 'warning',\n message: warning.message,\n });\n });\n }\n // Handle errors separately if needed\n if (response.status === 'error' && response.errors && response.errors.length > 0) {\n response.errors.forEach(error => {\n notificationService.show({\n type: 'error',\n message: error.message,\n });\n });\n }\n}\n/**\n * Transforms the standardized response for consumers\n */\nfunction transformResponseForConsumers(response, originalEvent) {\n switch (response.status) {\n case 'success':\n // For success responses, return the data if it exists, otherwise the full response\n if (response.data !== undefined && response.data !== null) {\n return originalEvent.clone({ body: response.data });\n }\n // For message-only success responses, return the full response\n return originalEvent.clone({ body: response });\n case 'warning':\n // For warnings, return data if it exists, otherwise the full response\n if (response.data !== undefined && response.data !== null) {\n return originalEvent.clone({ body: response.data });\n }\n return originalEvent.clone({ body: response });\n case 'error':\n // Errors should be thrown, not returned\n throw response;\n default:\n return originalEvent.clone({ body: response });\n }\n}\n/**\n * Checks if a response is a valid ApiResponse\n */\nfunction isValidApiResponse(response) {\n if (response === null || typeof response !== 'object')\n return false;\n const r = response;\n return ('status' in r &&\n 'code' in r &&\n typeof r['status'] === 'string' &&\n ['success', 'error', 'warning'].includes(r['status']));\n}\n/**\n * Determines whether to show success toast notifications based on the request type.\n */\nfunction shouldShowSuccessToast(req) {\n const url = req.url?.toLowerCase() || '';\n const method = req.method?.toLowerCase() || '';\n // Never show for these cases\n const excludedPatterns = [\n 'get',\n '/list',\n '/search',\n '/query',\n '/page',\n '/paginated',\n '/health',\n '/status',\n '/ping',\n ];\n if (excludedPatterns.some(pattern => method === pattern || url.includes(pattern))) {\n return false;\n }\n // Always show for these methods\n if (['post', 'put', 'patch', 'delete'].includes(method)) {\n return true;\n }\n // Default behavior\n return method !== 'get';\n}\n/**\n * Determines if we should show a notification for this HTTP error.\n */\nfunction shouldShowCriticalErrorNotification(status) {\n // Show notifications for:\n // - Network errors (status 0)\n // - Server errors (5xx)\n return status === 0 || (status >= 500 && status < 600);\n}\n/**\n * Gets the appropriate title for error notifications.\n */\nfunction getErrorTitle(status) {\n if (status === 0)\n return 'Connection Error';\n if (status >= 500)\n return 'Server Error';\n return 'Error';\n}\n/**\n * Gets the appropriate message for critical errors.\n */\nfunction getCriticalErrorMessage(error) {\n if (error.status === 0) {\n return 'Unable to connect to the server. Please check your network connection.';\n }\n if (error.status >= 500) {\n return (error.error?.message || error.message || 'A server error occurred. Please try again later.');\n }\n return error.error?.message || error.message || 'An unexpected error occurred';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYXBpLWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxZQUFZLEVBR1osZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU1RSxpSEFBaUg7QUFDakgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBc0IsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFN0YsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFN0QsaURBQWlEO0lBQ2pELElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUN0QixNQUFNLEtBQUss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QUFPLGtCQUFrQixDQUFDO0lBQzVDLElBQUksTUFBTSxJQUFJLEdBQUc7UUFBRSxPQUFPLGNBQWMsQ0FBQztJQUN6QyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLEtBQXdCO0lBQ3ZELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLHdFQUF3RSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUNMLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksa0RBQWtELENBQzVGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLDhCQUE4QixDQUFDO0FBQ2pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwSW50ZXJjZXB0b3JGbixcbiAgSHR0cEV2ZW50LFxuICBIdHRwUmVzcG9uc2UsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cENvbnRleHRUb2tlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BhY29udHBsdXMvbmctbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBVVRIX1RPS0VOIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb25maWcnO1xuXG4vLyBBIHRva2VuIHRvIHVzZSB3aXRoIEh0dHBDb250ZXh0IGZvciBza2lwcGluZyBub3RpZmljYXRpb25zIG9uIHNwZWNpZmljIHJlcXVlc3RzLlxuZXhwb3J0IGNvbnN0IFNLSVBfTk9USUZJQ0FUSU9OID0gbmV3IEh0dHBDb250ZXh0VG9rZW48Ym9vbGVhbj4oKCkgPT4gZmFsc2UpO1xuXG4vLyBBIHRva2VuIHRvIHVzZSB3aXRoIEh0dHBDb250ZXh0IGZvciBmb3JjaW5nIG5vdGlmaWNhdGlvbnMgb24gc3BlY2lmaWMgcmVxdWVzdHMgKG92ZXJyaWRlcyBleGNsdXNpb24gcGF0dGVybnMpLlxuZXhwb3J0IGNvbnN0IFNIT1dfTk9USUZJQ0FUSU9OUyA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4gfCB1bmRlZmluZWQ+KCgpID0+IHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBhcGlJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHRvYXN0ciA9IGluamVjdChOb3RpZmljYXRpb25TZXJ2aWNlKTtcbiAgY29uc3QgdG9rZW5Qcm92aWRlciA9IGluamVjdChBVVRIX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiB0b2tlbiBpcyBhdmFpbGFibGVcbiAgbGV0IG1vZGlmaWVkUmVxID0gcmVxO1xuICBjb25zdCB0b2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFRva2VuKCk7XG4gIGlmICh0b2tlbikge1xuICAgIG1vZGlmaWVkUmVxID0gcmVxLmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KG1vZGlmaWVkUmVxKS5waXBlKFxuICAgIC8vIFJldHJpZXMgdGhlIHJlcXVlc3QgdXAgdG8gMiB0aW1lcyBvbiBmYWlsdXJlIHdpdGggYSAxLXNlY29uZCBkZWxheS5cbiAgICByZXRyeSh7IGNvdW50OiAyLCBkZWxheTogMTAwMCB9KSxcbiAgICAvLyBVc2UgdGhlIGBtYXBgIG9wZXJhdG9yIHRvIGhhbmRsZSBzdWNjZXNzZnVsIHJlc3BvbnNlcy5cbiAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8dW5rbm93bj4pID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlKGV2ZW50LCB0b2FzdHIsIHJlcSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSksXG4gICAgLy8gVXNlIHRoZSBgY2F0Y2hFcnJvcmAgb3BlcmF0b3IgdG8gaGFuZGxlIGFueSBlcnJvcnMgdGhhdCBvY2N1ci5cbiAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IGhhbmRsZUVycm9yUmVzcG9uc2UoZXJyb3IsIHRvYXN0cikpLFxuICApO1xufTtcblxuLy8gLS0tIEhlbHBlciBGdW5jdGlvbnMgLS0tXG5cbi8qKlxuICogSGFuZGxlcyBzdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2VzLCBzdGFuZGFyZGl6ZXMgdGhlbSwgc2hvd3Mgbm90aWZpY2F0aW9ucywgYW5kIHRyYW5zZm9ybXMgZm9yIGNvbnN1bWVycy5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlKFxuICBldmVudDogSHR0cFJlc3BvbnNlPHVua25vd24+LFxuICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuKTogSHR0cFJlc3BvbnNlPHVua25vd24+IHtcbiAgY29uc3QgYm9keSA9IGV2ZW50LmJvZHk7XG5cbiAgLy8gU3RhbmRhcmRpemUgdGhlIHJlc3BvbnNlIHRvIGFsd2F5cyBoYXZlIEFwaVJlc3BvbnNlIHN0cnVjdHVyZVxuICBjb25zdCBzdGFuZGFyZGl6ZWRSZXNwb25zZSA9IHN0YW5kYXJkaXplQXBpUmVzcG9uc2UoYm9keSk7XG5cbiAgLy8gSGFuZGxlIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gc3RhbmRhcmRpemVkIHJlc3BvbnNlXG4gIGhhbmRsZVRvYXN0Tm90aWZpY2F0aW9ucyhzdGFuZGFyZGl6ZWRSZXNwb25zZSwgbm90aWZpY2F0aW9uU2VydmljZSwgcmVxKTtcblxuICAvLyBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGRhdGEgYmFzZWQgb24gcmVzcG9uc2UgdHlwZVxuICByZXR1cm4gdHJhbnNmb3JtUmVzcG9uc2VGb3JDb25zdW1lcnMoc3RhbmRhcmRpemVkUmVzcG9uc2UsIGV2ZW50KTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIEhUVFAgZXJyb3JzIChmcm9tIHRoZSBpbnRlcmNlcHRvciBjaGFpbiwgbm90IGJhY2tlbmQgQXBpUmVzcG9uc2UpLlxuICovXG5mdW5jdGlvbiBoYW5kbGVFcnJvclJlc3BvbnNlKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSwgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSkge1xuICBjb25zdCBzdGF0dXMgPSBlcnJvci5zdGF0dXM7XG5cbiAgLy8gT25seSBzaG93IG5vdGlmaWNhdGlvbnMgZm9yIGNyaXRpY2FsIEhUVFAtbGV2ZWwgZXJyb3JzLlxuICAvLyBXZSBhdm9pZCBzaG93aW5nIHRvYXN0cyBmb3IgNHh4IGVycm9ycywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgdGhlIGNvbXBvbmVudC5cbiAgaWYgKHN0YXR1cyAhPT0gbnVsbCAmJiBzaG91bGRTaG93Q3JpdGljYWxFcnJvck5vdGlmaWNhdGlvbihzdGF0dXMpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGdldENyaXRpY2FsRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICBjb25zdCB0aXRsZSA9IGdldEVycm9yVGl0bGUoc3RhdHVzKTtcblxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3Ioe1xuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIGNvbmZpZzogeyBkdXJhdGlvbjogNTAwMCB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQWx3YXlzIHJlLXRocm93IHRoZSBlcnJvciBzbyBjb21wb25lbnRzL3NlcnZpY2VzIGNhbiBoYW5kbGUgaXQuXG4gIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZGl6ZXMgYW55IHJlc3BvbnNlIHRvIGZvbGxvdyB0aGUgQXBpUmVzcG9uc2Ugc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIHN0YW5kYXJkaXplQXBpUmVzcG9uc2UoYm9keTogdW5rbm93bik6IEFwaVJlc3BvbnNlPHVua25vd24+IHtcbiAgLy8gSWYgaXQncyBhbHJlYWR5IGEgcHJvcGVyIEFwaVJlc3BvbnNlLCByZXR1cm4gYXMgaXNcbiAgaWYgKGlzVmFsaWRBcGlSZXNwb25zZShib2R5KSkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLy8gSWYgaXQncyBhIHJhdyBkYXRhIHJlc3BvbnNlIChubyB3cmFwcGVyKSwgd3JhcCBpdFxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgJiYgISgnc3RhdHVzJyBpbiBib2R5KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgIGNvZGU6ICcyMDAnLFxuICAgICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgIGRhdGE6IGJvZHksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gSWYgaXQncyBhIHByaW1pdGl2ZSB2YWx1ZSwgd3JhcCBpdFxuICBpZiAoYm9keSAhPT0gbnVsbCAmJiBib2R5ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgY29kZTogJzIwMCcsXG4gICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgZGF0YTogYm9keSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICAvLyBJZiBpdCdzIG51bGwvdW5kZWZpbmVkLCBjcmVhdGUgYSBzdWNjZXNzIHJlc3BvbnNlIHdpdGhvdXQgZGF0YVxuICByZXR1cm4ge1xuICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgIGNvZGU6ICcyMDAnLFxuICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH07XG59XG5cbi8qKlxuICogSGFuZGxlcyB0b2FzdCBub3RpZmljYXRpb25zIGJhc2VkIG9uIHN0YW5kYXJkaXplZCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBoYW5kbGVUb2FzdE5vdGlmaWNhdGlvbnMoXG4gIHJlc3BvbnNlOiBBcGlSZXNwb25zZTx1bmtub3duPixcbiAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcbik6IHZvaWQge1xuICBjb25zdCBzaG91bGRTaG93VG9hc3QgPSBzaG91bGRTaG93U3VjY2Vzc1RvYXN0KHJlcSk7XG4gIGNvbnN0IGZvcmNlU2hvdyA9IHJlcS5jb250ZXh0LmdldChTSE9XX05PVElGSUNBVElPTlMpO1xuICBjb25zdCBza2lwTm90aWZpY2F0aW9uID0gcmVxLmNvbnRleHQuZ2V0KFNLSVBfTk9USUZJQ0FUSU9OKTtcblxuICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHNob3cgbm90aWZpY2F0aW9ucywgY29uc2lkZXJpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IHNob3dOb3RpZmljYXRpb25zID0gZm9yY2VTaG93ICE9PSB1bmRlZmluZWQgPyBmb3JjZVNob3cgOiBzaG91bGRTaG93VG9hc3Q7XG5cbiAgaWYgKHNraXBOb3RpZmljYXRpb24pIHJldHVybjtcblxuICAvLyBEeW5hbWljIGhhbmRsaW5nOiBVc2Ugc2hvdygpIGZvciBydW50aW1lIHR5cGUgc2VsZWN0aW9uXG4gIGlmIChcbiAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgc2hvd05vdGlmaWNhdGlvbnMgJiZcbiAgICBbJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdlcnJvciddLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cylcbiAgKSB7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5zaG93KHtcbiAgICAgIHR5cGU6IHJlc3BvbnNlLnN0YXR1cyBhcyAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB3YXJuaW5ncyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnd2FybmluZycgJiYgcmVzcG9uc2Uud2FybmluZ3MgJiYgcmVzcG9uc2Uud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlLnNob3coe1xuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIG1lc3NhZ2U6IHdhcm5pbmcubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSGFuZGxlIGVycm9ycyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmVycm9ycyAmJiByZXNwb25zZS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLmVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHN0YW5kYXJkaXplZCByZXNwb25zZSBmb3IgY29uc3VtZXJzXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlRm9yQ29uc3VtZXJzKFxuICByZXNwb25zZTogQXBpUmVzcG9uc2U8dW5rbm93bj4sXG4gIG9yaWdpbmFsRXZlbnQ6IEh0dHBSZXNwb25zZTx1bmtub3duPixcbik6IEh0dHBSZXNwb25zZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAvLyBGb3Igc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtZXNzYWdlLW9ubHkgc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgcmV0dXJuIG9yaWdpbmFsRXZlbnQuY2xvbmUoeyBib2R5OiByZXNwb25zZSB9KTtcblxuICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgLy8gRm9yIHdhcm5pbmdzLCByZXR1cm4gZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICAvLyBFcnJvcnMgc2hvdWxkIGJlIHRocm93biwgbm90IHJldHVybmVkXG4gICAgICB0aHJvdyByZXNwb25zZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb3JpZ2luYWxFdmVudC5jbG9uZSh7IGJvZHk6IHJlc3BvbnNlIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcmVzcG9uc2UgaXMgYSB2YWxpZCBBcGlSZXNwb25zZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXBpUmVzcG9uc2UocmVzcG9uc2U6IHVua25vd24pOiByZXNwb25zZSBpcyBBcGlSZXNwb25zZTx1bmtub3duPiB7XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzcG9uc2UgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHIgPSByZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICAnc3RhdHVzJyBpbiByICYmXG4gICAgJ2NvZGUnIGluIHIgJiZcbiAgICB0eXBlb2Ygclsnc3RhdHVzJ10gPT09ICdzdHJpbmcnICYmXG4gICAgWydzdWNjZXNzJywgJ2Vycm9yJywgJ3dhcm5pbmcnXS5pbmNsdWRlcyhyWydzdGF0dXMnXSlcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBzdWNjZXNzIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gdGhlIHJlcXVlc3QgdHlwZS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2hvd1N1Y2Nlc3NUb2FzdChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogYm9vbGVhbiB7XG4gIGNvbnN0IHVybCA9IHJlcS51cmw/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgLy8gTmV2ZXIgc2hvdyBmb3IgdGhlc2UgY2FzZXNcbiAgY29uc3QgZXhjbHVkZWRQYXR0ZXJucyA9IFtcbiAgICAnZ2V0JyxcbiAgICAnL2xpc3QnLFxuICAgICcvc2VhcmNoJyxcbiAgICAnL3F1ZXJ5JyxcbiAgICAnL3BhZ2UnLFxuICAgICcvcGFnaW5hdGVkJyxcbiAgICAnL2hlYWx0aCcsXG4gICAgJy9zdGF0dXMnLFxuICAgICcvcGluZycsXG4gIF07XG5cbiAgaWYgKGV4Y2x1ZGVkUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IG1ldGhvZCA9PT0gcGF0dGVybiB8fCB1cmwuaW5jbHVkZXMocGF0dGVybikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQWx3YXlzIHNob3cgZm9yIHRoZXNlIG1ldGhvZHNcbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnZGVsZXRlJ10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICByZXR1cm4gbWV0aG9kICE9PSAnZ2V0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHdlIHNob3VsZCBzaG93IGEgbm90aWZpY2F0aW9uIGZvciB0aGlzIEhUVFAgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNob3dDcml0aWNhbEVycm9yTm90aWZpY2F0aW9uKHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gIC8vIFNob3cgbm90aWZpY2F0aW9ucyBmb3I6XG4gIC8vIC0gTmV0d29yayBlcnJvcnMgKHN0YXR1cyAwKVxuICAvLyAtIFNlcnZlciBlcnJvcnMgKDV4eClcbiAgcmV0dXJuIHN0YXR1cyA9PT0gMCB8fCAoc3RhdHVzID49IDUwMCAmJiBzdGF0dXMgPCA2MDApO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIHRpdGxlIGZvciBlcnJvciBub3RpZmljYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvclRpdGxlKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHN0YXR1cyA9PT0gMCkgcmV0dXJuICdDb25uZWN0aW9uIEVycm9yJztcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHJldHVybiAnU2VydmVyIEVycm9yJztcbiAgcmV0dXJuICdFcnJvcic7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSBmb3IgY3JpdGljYWwgZXJyb3JzLlxuICovXG5mdW5jdGlvbiBnZXRDcml0aWNhbEVycm9yTWVzc2FnZShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBzdHJpbmcge1xuICBpZiAoZXJyb3Iuc3RhdHVzID09PSAwKSB7XG4gICAgcmV0dXJuICdVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uJztcbiAgfVxuXG4gIGlmIChlcnJvci5zdGF0dXMgPj0gNTAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0Egc2VydmVyIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnO1xufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\nexport class LoggingService {\n environment = inject(ENVIRONMENT);\n log(level, message, context) {\n if (this.environment.isProduction) {\n // Production logging (e.g., to external service)\n this.logToExternalService(level, message, context);\n }\n else {\n // Development logging - only log in development mode\n if (!this.environment.isProduction) {\n console[level](`[${level.toUpperCase()}] ${message}`, context);\n }\n }\n }\n info(message, context) {\n this.log('info', message, context);\n }\n warn(message, context) {\n this.log('warn', message, context);\n }\n error(message, context) {\n this.log('error', message, context);\n }\n // HTTP Request Logging\n logHttpRequest(log) {\n this.info(`HTTP Request - ${log.method} ${log.url}`, {\n requestId: log.requestId,\n correlationId: log.correlationId,\n tenantId: log.tenantId,\n headers: log.headers,\n isCustomUrl: log.isCustomUrl,\n timestamp: log.timestamp,\n });\n }\n // HTTP Error Logging\n logHttpError(error) {\n this.error(`HTTP Error - ${error.method} ${error.url}`, {\n status: error.status,\n statusText: error.statusText,\n requestId: error.requestId,\n correlationId: error.correlationId,\n tenantId: error.tenantId,\n errorDetails: error.errorDetails,\n environment: error.environment,\n timestamp: error.timestamp,\n });\n }\n // Network Error Logging\n logNetworkError(correlationId) {\n this.error('Network connection failed', {\n type: 'network-error',\n correlationId,\n userAgent: navigator.userAgent,\n online: navigator.onLine,\n });\n }\n // Rate Limit Error Logging\n logRateLimitError(correlationId, url) {\n this.warn('Rate limit exceeded', {\n type: 'rate-limit-error',\n correlationId,\n url,\n });\n }\n logToExternalService(_level, _message, _context) {\n // Implement external logging service integration\n // e.g., Sentry, LogRocket, etc.\n // This is a placeholder for production logging implementation\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LoggingService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LoggingService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9zZXJ2aWNlcy9sb2dnaW5nLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU1uRCxNQUFNLE9BQU8sY0FBYztJQUNqQixXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFDLEdBQUcsQ0FBQyxLQUFnQyxFQUFFLE9BQWUsRUFBRSxPQUFpQjtRQUN0RSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUM7YUFBTSxDQUFDO1lBQ04scURBQXFEO1lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFpQjtRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFlLEVBQUUsT0FBaUI7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBZSxFQUFFLE9BQWlCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLGNBQWMsQ0FBQyxHQUFtQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuRCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDeEIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO1lBQ2hDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQzVCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLFlBQVksQ0FBQyxLQUFtQjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsZUFBZSxDQUFDLGFBQXFCO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUU7WUFDdEMsSUFBSSxFQUFFLGVBQWU7WUFDckIsYUFBYTtZQUNiLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztZQUM5QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixpQkFBaUIsQ0FBQyxhQUFxQixFQUFFLEdBQVc7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMvQixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLGFBQWE7WUFDYixHQUFHO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLFFBQWtCO1FBQy9FLGlEQUFpRDtRQUNqRCxnQ0FBZ0M7UUFDaEMsOERBQThEO0lBQ2hFLENBQUM7dUdBNUVVLGNBQWM7MkdBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0TG9nLCBIdHRwRXJyb3JMb2cgfSBmcm9tICcuLi9pbnRlcmNlcHRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9nZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIGVudmlyb25tZW50ID0gaW5qZWN0KEVOVklST05NRU5UKTtcblxuICBsb2cobGV2ZWw6ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIFByb2R1Y3Rpb24gbG9nZ2luZyAoZS5nLiwgdG8gZXh0ZXJuYWwgc2VydmljZSlcbiAgICAgIHRoaXMubG9nVG9FeHRlcm5hbFNlcnZpY2UobGV2ZWwsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXZlbG9wbWVudCBsb2dnaW5nIC0gb25seSBsb2cgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuICAgICAgaWYgKCF0aGlzLmVudmlyb25tZW50LmlzUHJvZHVjdGlvbikge1xuICAgICAgICBjb25zb2xlW2xldmVsXShgWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnaW5mbycsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICB9XG5cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ3dhcm4nLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIEhUVFAgUmVxdWVzdCBMb2dnaW5nXG4gIGxvZ0h0dHBSZXF1ZXN0KGxvZzogSHR0cFJlcXVlc3RMb2cpOiB2b2lkIHtcbiAgICB0aGlzLmluZm8oYEhUVFAgUmVxdWVzdCAtICR7bG9nLm1ldGhvZH0gJHtsb2cudXJsfWAsIHtcbiAgICAgIHJlcXVlc3RJZDogbG9nLnJlcXVlc3RJZCxcbiAgICAgIGNvcnJlbGF0aW9uSWQ6IGxvZy5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGxvZy50ZW5hbnRJZCxcbiAgICAgIGhlYWRlcnM6IGxvZy5oZWFkZXJzLFxuICAgICAgaXNDdXN0b21Vcmw6IGxvZy5pc0N1c3RvbVVybCxcbiAgICAgIHRpbWVzdGFtcDogbG9nLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhUVFAgRXJyb3IgTG9nZ2luZ1xuICBsb2dIdHRwRXJyb3IoZXJyb3I6IEh0dHBFcnJvckxvZyk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IoYEhUVFAgRXJyb3IgLSAke2Vycm9yLm1ldGhvZH0gJHtlcnJvci51cmx9YCwge1xuICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgcmVxdWVzdElkOiBlcnJvci5yZXF1ZXN0SWQsXG4gICAgICBjb3JyZWxhdGlvbklkOiBlcnJvci5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGVycm9yLnRlbmFudElkLFxuICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvckRldGFpbHMsXG4gICAgICBlbnZpcm9ubWVudDogZXJyb3IuZW52aXJvbm1lbnQsXG4gICAgICB0aW1lc3RhbXA6IGVycm9yLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5ldHdvcmsgRXJyb3IgTG9nZ2luZ1xuICBsb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvcignTmV0d29yayBjb25uZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIHR5cGU6ICduZXR3b3JrLWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSYXRlIExpbWl0IEVycm9yIExvZ2dpbmdcbiAgbG9nUmF0ZUxpbWl0RXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nLCB1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud2FybignUmF0ZSBsaW1pdCBleGNlZWRlZCcsIHtcbiAgICAgIHR5cGU6ICdyYXRlLWxpbWl0LWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1cmwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1RvRXh0ZXJuYWxTZXJ2aWNlKF9sZXZlbDogc3RyaW5nLCBfbWVzc2FnZTogc3RyaW5nLCBfY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICAvLyBJbXBsZW1lbnQgZXh0ZXJuYWwgbG9nZ2luZyBzZXJ2aWNlIGludGVncmF0aW9uXG4gICAgLy8gZS5nLiwgU2VudHJ5LCBMb2dSb2NrZXQsIGV0Yy5cbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIHByb2R1Y3Rpb24gbG9nZ2luZyBpbXBsZW1lbnRhdGlvblxuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { LoggingService } from './logging-service';\nimport * as i0 from \"@angular/core\";\nexport class TenantInfo {\n tenantId = null;\n logger = inject(LoggingService);\n getTenantId() {\n if (!this.tenantId) {\n // Get from localStorage, sessionStorage, or JWT token\n this.tenantId =\n localStorage.getItem('tenantId') ||\n sessionStorage.getItem('tenantId') ||\n this.extractTenantFromToken() ||\n 'default-tenant';\n }\n return this.tenantId;\n }\n getCurrentTenant() {\n return this.tenantId;\n }\n setTenantId(tenantId) {\n this.tenantId = tenantId;\n localStorage.setItem('tenantId', tenantId);\n }\n setTenant(tenantId) {\n this.setTenantId(tenantId);\n }\n handleForbidden() {\n this.logger.error('Access forbidden for tenant:', this.tenantId);\n // Redirect to tenant selection or show error message\n // this.router.navigate(['/tenant-access-denied']);\n }\n extractTenantFromToken() {\n // Implementation depends on your JWT token structure\n // This is a placeholder\n return null;\n }\n clearTenant() {\n this.tenantId = null;\n localStorage.removeItem('tenantId');\n sessionStorage.removeItem('tenantId');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: TenantInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: TenantInfo, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: TenantInfo, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLFVBQVU7SUFDYixRQUFRLEdBQWtCLElBQUksQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhDLFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsUUFBUTtnQkFDWCxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDaEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDN0IsZ0JBQWdCLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLHFEQUFxRDtRQUNyRCxtREFBbUQ7SUFDckQsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixxREFBcUQ7UUFDckQsd0JBQXdCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQzt1R0E3Q1UsVUFBVTsyR0FBVixVQUFVLGNBRlQsTUFBTTs7MkZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnaW5nLXNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGVuYW50SW5mbyB7XG4gIHByaXZhdGUgdGVuYW50SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvZ2dlciA9IGluamVjdChMb2dnaW5nU2VydmljZSk7XG5cbiAgZ2V0VGVuYW50SWQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMudGVuYW50SWQpIHtcbiAgICAgIC8vIEdldCBmcm9tIGxvY2FsU3RvcmFnZSwgc2Vzc2lvblN0b3JhZ2UsIG9yIEpXVCB0b2tlblxuICAgICAgdGhpcy50ZW5hbnRJZCA9XG4gICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZW5hbnRJZCcpIHx8XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RlbmFudElkJykgfHxcbiAgICAgICAgdGhpcy5leHRyYWN0VGVuYW50RnJvbVRva2VuKCkgfHxcbiAgICAgICAgJ2RlZmF1bHQtdGVuYW50JztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGVuYW50SWQ7XG4gIH1cblxuICBnZXRDdXJyZW50VGVuYW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRlbmFudElkO1xuICB9XG5cbiAgc2V0VGVuYW50SWQodGVuYW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudGVuYW50SWQgPSB0ZW5hbnRJZDtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVuYW50SWQnLCB0ZW5hbnRJZCk7XG4gIH1cblxuICBzZXRUZW5hbnQodGVuYW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0VGVuYW50SWQodGVuYW50SWQpO1xuICB9XG5cbiAgaGFuZGxlRm9yYmlkZGVuKCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmVycm9yKCdBY2Nlc3MgZm9yYmlkZGVuIGZvciB0ZW5hbnQ6JywgdGhpcy50ZW5hbnRJZCk7XG4gICAgLy8gUmVkaXJlY3QgdG8gdGVuYW50IHNlbGVjdGlvbiBvciBzaG93IGVycm9yIG1lc3NhZ2VcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy90ZW5hbnQtYWNjZXNzLWRlbmllZCddKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFRlbmFudEZyb21Ub2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIHlvdXIgSldUIHRva2VuIHN0cnVjdHVyZVxuICAgIC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlclxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY2xlYXJUZW5hbnQoKTogdm9pZCB7XG4gICAgdGhpcy50ZW5hbnRJZCA9IG51bGw7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3RlbmFudElkJyk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGVuYW50SWQnKTtcbiAgfVxufVxuIl19","import { Injectable, signal, computed } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as i0 from \"@angular/core\";\nexport class CorrelationInfo {\n correlationId = signal(null, ...(ngDevMode ? [{ debugName: \"correlationId\" }] : []));\n CORRELATION_KEY = 'correlation-id';\n // Signal-based getter for reactive updates\n currentCorrelationId = computed(() => this.correlationId(), ...(ngDevMode ? [{ debugName: \"currentCorrelationId\" }] : []));\n getOrCreateCorrelationId() {\n if (!this.correlationId()) {\n // Try to get from sessionStorage first (for page refreshes)\n const id = sessionStorage.getItem(this.CORRELATION_KEY) || uuidv4();\n this.correlationId.set(id);\n sessionStorage.setItem(this.CORRELATION_KEY, id);\n }\n return this.correlationId();\n }\n setCorrelationId(correlationId) {\n this.correlationId.set(correlationId);\n sessionStorage.setItem(this.CORRELATION_KEY, correlationId);\n }\n resetCorrelationId() {\n this.correlationId.set(null);\n sessionStorage.removeItem(this.CORRELATION_KEY);\n }\n getId() {\n return this.getOrCreateCorrelationId();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CorrelationInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CorrelationInfo, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CorrelationInfo, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24taW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29ycmVsYXRpb24taW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3BDLE1BQU0sT0FBTyxlQUFlO0lBQ2xCLGFBQWEsR0FBRyxNQUFNLENBQWdCLElBQUkseURBQUMsQ0FBQztJQUNuQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7SUFFcEQsMkNBQTJDO0lBQ2xDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdFQUFDLENBQUM7SUFFckUsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUMxQiw0REFBNEQ7WUFDNUQsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUcsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBcUI7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7dUdBN0JVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JyZWxhdGlvbkluZm8ge1xuICBwcml2YXRlIGNvcnJlbGF0aW9uSWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ09SUkVMQVRJT05fS0VZID0gJ2NvcnJlbGF0aW9uLWlkJztcblxuICAvLyBTaWduYWwtYmFzZWQgZ2V0dGVyIGZvciByZWFjdGl2ZSB1cGRhdGVzXG4gIHJlYWRvbmx5IGN1cnJlbnRDb3JyZWxhdGlvbklkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb3JyZWxhdGlvbklkKCkpO1xuXG4gIGdldE9yQ3JlYXRlQ29ycmVsYXRpb25JZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb3JyZWxhdGlvbklkKCkpIHtcbiAgICAgIC8vIFRyeSB0byBnZXQgZnJvbSBzZXNzaW9uU3RvcmFnZSBmaXJzdCAoZm9yIHBhZ2UgcmVmcmVzaGVzKVxuICAgICAgY29uc3QgaWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ09SUkVMQVRJT05fS0VZKSB8fCB1dWlkdjQoKTtcbiAgICAgIHRoaXMuY29ycmVsYXRpb25JZC5zZXQoaWQpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNPUlJFTEFUSU9OX0tFWSwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb3JyZWxhdGlvbklkKCkhO1xuICB9XG5cbiAgc2V0Q29ycmVsYXRpb25JZChjb3JyZWxhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvcnJlbGF0aW9uSWQuc2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5DT1JSRUxBVElPTl9LRVksIGNvcnJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcmVzZXRDb3JyZWxhdGlvbklkKCk6IHZvaWQge1xuICAgIHRoaXMuY29ycmVsYXRpb25JZC5zZXQobnVsbCk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNPUlJFTEFUSU9OX0tFWSk7XG4gIH1cblxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlQ29ycmVsYXRpb25JZCgpO1xuICB9XG59XG4iXX0=","import { inject, InjectionToken } from '@angular/core'; // Import InjectionToken\nimport { Router } from '@angular/router';\nimport { HttpContextToken, HttpContext, } from '@angular/common/http';\nimport { catchError, throwError, switchMap } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n// Environment and configuration\nimport { AUTH_TOKEN, ENVIRONMENT } from '@acontplus/ng-config';\n// Services\nimport { TenantInfo } from '../services/tenant-info';\nimport { CorrelationInfo } from '../services/correlation-info';\nimport { LoggingService } from '../services/logging-service';\n// HTTP Context tokens\nconst CUSTOM_URL = new HttpContextToken(() => false);\nconst SKIP_CONTEXT_HEADERS = new HttpContextToken(() => false);\nconst CUSTOM_HEADERS = new HttpContextToken(() => ({}));\n// Helper functions for HTTP context\nexport function customUrl() {\n return new HttpContext().set(CUSTOM_URL, true);\n}\nexport function skipContextHeaders() {\n return new HttpContext().set(SKIP_CONTEXT_HEADERS, true);\n}\nexport function withCustomHeaders(headers) {\n return new HttpContext().set(CUSTOM_HEADERS, headers);\n}\n// Default configuration\nconst DEFAULT_CONFIG = {\n enableCorrelationTracking: true,\n enableRequestLogging: false, // This will be overridden by environment.isProduction\n enableErrorLogging: true,\n customHeaders: {},\n clientVersion: '1.0.0',\n tenantIdHeader: 'Tenant-Id',\n correlationIdHeader: 'Correlation-Id',\n requestIdHeader: 'Request-Id',\n timestampHeader: 'Timestamp',\n excludeUrls: [],\n includeAuthToken: true,\n baseUrlInjection: true,\n refreshTokenCallback: undefined,\n logoutCallback: undefined,\n};\n// Injection token for configuration - FIXED\nexport const HTTP_CONTEXT_CONFIG = new InjectionToken('HTTP_CONTEXT_CONFIG', {\n factory: () => DEFAULT_CONFIG, // Provide a default factory in case it's not provided\n});\nexport const httpContextInterceptor = (req, next) => {\n const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n const router = inject(Router);\n const tenantService = inject(TenantInfo);\n const correlationService = inject(CorrelationInfo);\n const loggingService = inject(LoggingService);\n const environment = inject(ENVIRONMENT);\n // Get configuration (with fallback to default) - FIXED\n const config = {\n ...DEFAULT_CONFIG,\n // The default enableRequestLogging needs to be set based on environment here,\n // as it's dynamic, and DEFAULT_CONFIG is static.\n enableRequestLogging: !environment.isProduction,\n ...inject(HTTP_CONTEXT_CONFIG, { optional: true }),\n };\n // Check HTTP context tokens\n const isCustomUrl = req.context.get(CUSTOM_URL);\n const skipHeaders = req.context.get(SKIP_CONTEXT_HEADERS);\n const contextHeaders = req.context.get(CUSTOM_HEADERS);\n // Skip processing if headers are disabled for this request\n if (skipHeaders) {\n return next(req);\n }\n // Check if URL should be excluded\n const shouldExclude = config.excludeUrls.some(url => req.url.includes(url) || new RegExp(url).test(req.url));\n if (shouldExclude) {\n return next(req);\n }\n // Skip auth for login, register, and refresh endpoints\n const skipAuth = req.url.includes('/login') || req.url.includes('/register') || req.url.includes('/refresh');\n // Handle URL transformation\n const baseUrl = environment.apiBaseUrl;\n const finalUrl = isCustomUrl || !config.baseUrlInjection ? req.url : `${baseUrl}${req.url}`;\n // Generate or get correlation context\n const correlationId = config.enableCorrelationTracking\n ? correlationService.getOrCreateCorrelationId()\n : uuidv4();\n const tenantId = tenantService.getTenantId();\n const requestId = uuidv4();\n // Build dynamic headers\n const headers = {};\n // Core context headers\n headers[config.requestIdHeader] = requestId;\n if (config.enableCorrelationTracking) {\n headers[config.correlationIdHeader] = correlationId;\n }\n if (tenantId) {\n headers[config.tenantIdHeader] = tenantId;\n }\n headers[config.timestampHeader] = new Date().toISOString();\n // Client information\n if (config.clientVersion) {\n headers['Client-Version'] = config.clientVersion;\n }\n // Environment client ID\n if (environment.clientId) {\n headers['Client-Id'] = environment.clientId;\n }\n // Add authorization header if configured and available\n if (config.includeAuthToken && !skipAuth) {\n const authToken = tokenProvider?.getToken();\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n }\n // Process custom headers from configuration (can be static values or dynamic functions)\n Object.entries(config.customHeaders).forEach(([key, value]) => {\n headers[key] = typeof value === 'function' ? value() : value;\n });\n // Add headers from HTTP context\n Object.entries(contextHeaders).forEach(([key, value]) => {\n headers[key] = value;\n });\n // Add content-type for data requests if not already set\n if (['POST', 'PUT', 'PATCH'].includes(req.method.toUpperCase()) &&\n !req.headers.has('Content-Type')) {\n headers['Content-Type'] = 'application/json';\n }\n // Clone request with enhanced headers and URL\n const enhancedReq = req.clone({\n url: finalUrl,\n setHeaders: headers,\n });\n // Log outgoing request if enabled\n if (config.enableRequestLogging) {\n loggingService.logHttpRequest({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n timestamp: new Date().toISOString(),\n headers: Object.keys(headers),\n isCustomUrl,\n });\n }\n // If request has auth header, handle with refresh logic\n if (headers['Authorization'] && config.refreshTokenCallback) {\n return next(enhancedReq).pipe(catchError(error => {\n // If 401 Unauthorized, try to refresh token\n if (error.status === 401) {\n const refreshToken = tokenProvider?.getRefreshToken?.();\n if (refreshToken && refreshToken.trim().length > 0) {\n return config.refreshTokenCallback().pipe(switchMap(newTokens => {\n // Retry the original request with new token\n const retryReq = req.clone({\n url: finalUrl,\n setHeaders: { ...headers, Authorization: `Bearer ${newTokens.token}` },\n });\n return next(retryReq);\n }), catchError(refreshError => {\n // Refresh failed, logout user\n config.logoutCallback?.();\n return throwError(() => refreshError);\n }));\n }\n }\n // Enhanced error logging with context\n if (config.enableErrorLogging) {\n loggingService.logHttpError({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n status: error.status,\n statusText: error.statusText,\n message: error.message,\n timestamp: new Date().toISOString(),\n errorDetails: error.error,\n environment: environment.clientId,\n isCustomUrl,\n headers: [], // Headers are not included in HttpErrorResponse by default, adjust if needed\n });\n }\n // Handle other error scenarios\n switch (error.status) {\n case 403:\n tenantService.handleForbidden();\n break;\n case 0:\n loggingService.logNetworkError(correlationId);\n break;\n case 429:\n loggingService.logRateLimitError(correlationId, finalUrl);\n break;\n }\n return throwError(() => error);\n }));\n }\n else {\n // No auth header, use standard error handling\n return next(enhancedReq).pipe(catchError((error) => {\n // Enhanced error logging with context\n if (config.enableErrorLogging) {\n loggingService.logHttpError({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n status: error.status,\n statusText: error.statusText,\n message: error.message,\n timestamp: new Date().toISOString(),\n errorDetails: error.error,\n environment: environment.clientId,\n isCustomUrl,\n headers: [], // Headers are not included in HttpErrorResponse by default, adjust if needed\n });\n }\n // Handle specific error scenarios\n switch (error.status) {\n case 401: {\n loggingService.error('Unauthorized access - token expired or invalid');\n // Note: Token clearing should be handled by the auth service, not infrastructure\n router.navigate([`/${environment.loginRoute}`]);\n break;\n }\n case 403:\n tenantService.handleForbidden();\n break;\n case 0:\n loggingService.logNetworkError(correlationId);\n break;\n case 429:\n loggingService.logRateLimitError(correlationId, finalUrl);\n break;\n }\n return throwError(() => error);\n }));\n }\n};\n// Helper function to create configuration\nexport function createHttpContextConfig(overrides = {}) {\n return {\n ...DEFAULT_CONFIG,\n ...overrides,\n };\n}\n// Provider function for easy setup\nexport function provideHttpContext(config = {}) {\n return [\n {\n provide: HTTP_CONTEXT_CONFIG,\n useValue: createHttpContextConfig(config),\n },\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jb250ZXh0LWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvaHR0cC1jb250ZXh0LWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDLENBQUMsd0JBQXdCO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FHWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxXQUFXO0FBQ1gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0Qsc0JBQXNCO0FBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQVUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGdCQUFnQixDQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sY0FBYyxHQUFHLElBQUksZ0JBQWdCLENBQXlCLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMs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QyxPQUFPO1FBQ0wsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsU0FBUztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFxQyxFQUFFO0lBQ3hFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsUUFBUSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztTQUMxQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyAvLyBJbXBvcnQgSW5qZWN0aW9uVG9rZW5cbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwQ29udGV4dCxcbiAgSHR0cEludGVyY2VwdG9yRm4sXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0aHJvd0Vycm9yLCBzd2l0Y2hNYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG4vLyBFbnZpcm9ubWVudCBhbmQgY29uZmlndXJhdGlvblxuaW1wb3J0IHsgQVVUSF9UT0tFTiwgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbi8vIFNlcnZpY2VzXG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi4vc2VydmljZXMvdGVuYW50LWluZm8nO1xuaW1wb3J0IHsgQ29ycmVsYXRpb25JbmZvIH0gZnJvbSAnLi4vc2VydmljZXMvY29ycmVsYXRpb24taW5mbyc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmctc2VydmljZSc7XG5cbi8vIEhUVFAgQ29udGV4dCB0b2tlbnNcbmNvbnN0IENVU1RPTV9VUkwgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiBmYWxzZSk7XG5jb25zdCBTS0lQX0NPTlRFWFRfSEVBREVSUyA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcbmNvbnN0IENVU1RPTV9IRUFERVJTID0gbmV3IEh0dHBDb250ZXh0VG9rZW48UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4gKHt9KSk7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIEhUVFAgY29udGV4dFxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbVVybCgpIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChDVVNUT01fVVJMLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNraXBDb250ZXh0SGVhZGVycygpIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChTS0lQX0NPTlRFWFRfSEVBREVSUywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ3VzdG9tSGVhZGVycyhoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIHJldHVybiBuZXcgSHR0cENvbnRleHQoKS5zZXQoQ1VTVE9NX0hFQURFUlMsIGhlYWRlcnMpO1xufVxuXG4vLyBDb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgbGlicmFyeSBjb25zdW1lcnNcbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENvbnRleHRDb25maWcge1xuICBlbmFibGVDb3JyZWxhdGlvblRyYWNraW5nPzogYm9vbGVhbjtcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc/OiBib29sZWFuO1xuICBlbmFibGVFcnJvckxvZ2dpbmc/OiBib29sZWFuO1xuICBjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgKCgpID0+IHN0cmluZyk+O1xuICBjbGllbnRWZXJzaW9uPzogc3RyaW5nO1xuICB0ZW5hbnRJZEhlYWRlcj86IHN0cmluZztcbiAgY29ycmVsYXRpb25JZEhlYWRlcj86IHN0cmluZztcbiAgcmVxdWVzdElkSGVhZGVyPzogc3RyaW5nO1xuICB0aW1lc3RhbXBIZWFkZXI/OiBzdHJpbmc7XG4gIGV4Y2x1ZGVVcmxzPzogc3RyaW5nW107XG4gIGluY2x1ZGVBdXRoVG9rZW4/OiBib29sZWFuO1xuICBiYXNlVXJsSW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgcmVmcmVzaFRva2VuQ2FsbGJhY2s/OiAoKSA9PiBPYnNlcnZhYmxlPHsgdG9rZW46IHN0cmluZzsgcmVmcmVzaFRva2VuPzogc3RyaW5nIH0+O1xuICBsb2dvdXRDYWxsYmFjaz86ICgpID0+IHZvaWQ7XG59XG5cbi8vIERlZmF1bHQgY29uZmlndXJhdGlvblxuY29uc3QgREVGQVVMVF9DT05GSUc6IFJlcXVpcmVkPEh0dHBDb250ZXh0Q29uZmlnPiA9IHtcbiAgZW5hYmxlQ29ycmVsYXRpb25UcmFja2luZzogdHJ1ZSxcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6IGZhbHNlLCAvLyBUaGlzIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBlbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb25cbiAgZW5hYmxlRXJyb3JMb2dnaW5nOiB0cnVlLFxuICBjdXN0b21IZWFkZXJzOiB7fSxcbiAgY2xpZW50VmVyc2lvbjogJzEuMC4wJyxcbiAgdGVuYW50SWRIZWFkZXI6ICdUZW5hbnQtSWQnLFxuICBjb3JyZWxhdGlvbklkSGVhZGVyOiAnQ29ycmVsYXRpb24tSWQnLFxuICByZXF1ZXN0SWRIZWFkZXI6ICdSZXF1ZXN0LUlkJyxcbiAgdGltZXN0YW1wSGVhZGVyOiAnVGltZXN0YW1wJyxcbiAgZXhjbHVkZVVybHM6IFtdLFxuICBpbmNsdWRlQXV0aFRva2VuOiB0cnVlLFxuICBiYXNlVXJsSW5qZWN0aW9uOiB0cnVlLFxuICByZWZyZXNoVG9rZW5DYWxsYmFjazogdW5kZWZpbmVkIGFzIGFueSxcbiAgbG9nb3V0Q2FsbGJhY2s6IHVuZGVmaW5lZCBhcyBhbnksXG59O1xuXG4vLyBJbmplY3Rpb24gdG9rZW4gZm9yIGNvbmZpZ3VyYXRpb24gLSBGSVhFRFxuZXhwb3J0IGNvbnN0IEhUVFBfQ09OVEVYVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48SHR0cENvbnRleHRDb25maWc+KCdIVFRQX0NPTlRFWFRfQ09ORklHJywge1xuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0NPTkZJRywgLy8gUHJvdmlkZSBhIGRlZmF1bHQgZmFjdG9yeSBpbiBjYXNlIGl0J3Mgbm90IHByb3ZpZGVkXG59KTtcblxuZXhwb3J0IGNvbnN0IGh0dHBDb250ZXh0SW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICBjb25zdCB0b2tlblByb3ZpZGVyID0gaW5qZWN0KEFVVEhfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdCB0ZW5hbnRTZXJ2aWNlID0gaW5qZWN0KFRlbmFudEluZm8pO1xuICBjb25zdCBjb3JyZWxhdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ycmVsYXRpb25JbmZvKTtcbiAgY29uc3QgbG9nZ2luZ1NlcnZpY2UgPSBpbmplY3QoTG9nZ2luZ1NlcnZpY2UpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgLy8gR2V0IGNvbmZpZ3VyYXRpb24gKHdpdGggZmFsbGJhY2sgdG8gZGVmYXVsdCkgLSBGSVhFRFxuICBjb25zdCBjb25maWc6IFJlcXVpcmVkPEh0dHBDb250ZXh0Q29uZmlnPiA9IHtcbiAgICAuLi5ERUZBVUxUX0NPTkZJRyxcbiAgICAvLyBUaGUgZGVmYXVsdCBlbmFibGVSZXF1ZXN0TG9nZ2luZyBuZWVkcyB0byBiZSBzZXQgYmFzZWQgb24gZW52aXJvbm1lbnQgaGVyZSxcbiAgICAvLyBhcyBpdCdzIGR5bmFtaWMsIGFuZCBERUZBVUxUX0NPTkZJRyBpcyBzdGF0aWMuXG4gICAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6ICFlbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24sXG4gICAgLi4uaW5qZWN0KEhUVFBfQ09OVEVYVF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSksXG4gIH07XG5cbiAgLy8gQ2hlY2sgSFRUUCBjb250ZXh0IHRva2Vuc1xuICBjb25zdCBpc0N1c3RvbVVybCA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fVVJMKTtcbiAgY29uc3Qgc2tpcEhlYWRlcnMgPSByZXEuY29udGV4dC5nZXQoU0tJUF9DT05URVhUX0hFQURFUlMpO1xuICBjb25zdCBjb250ZXh0SGVhZGVycyA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fSEVBREVSUyk7XG5cbiAgLy8gU2tpcCBwcm9jZXNzaW5nIGlmIGhlYWRlcnMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgaWYgKHNraXBIZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIFVSTCBzaG91bGQgYmUgZXhjbHVkZWRcbiAgY29uc3Qgc2hvdWxkRXhjbHVkZSA9IGNvbmZpZy5leGNsdWRlVXJscy5zb21lKFxuICAgIHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkgfHwgbmV3IFJlZ0V4cCh1cmwpLnRlc3QocmVxLnVybCksXG4gICk7XG5cbiAgaWYgKHNob3VsZEV4Y2x1ZGUpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG5cbiAgLy8gU2tpcCBhdXRoIGZvciBsb2dpbiwgcmVnaXN0ZXIsIGFuZCByZWZyZXNoIGVuZHBvaW50c1xuICBjb25zdCBza2lwQXV0aCA9XG4gICAgcmVxLnVybC5pbmNsdWRlcygnL2xvZ2luJykgfHwgcmVxLnVybC5pbmNsdWRlcygnL3JlZ2lzdGVyJykgfHwgcmVxLnVybC5pbmNsdWRlcygnL3JlZnJlc2gnKTtcblxuICAvLyBIYW5kbGUgVVJMIHRyYW5zZm9ybWF0aW9uXG4gIGNvbnN0IGJhc2VVcmwgPSBlbnZpcm9ubWVudC5hcGlCYXNlVXJsO1xuICBjb25zdCBmaW5hbFVybCA9IGlzQ3VzdG9tVXJsIHx8ICFjb25maWcuYmFzZVVybEluamVjdGlvbiA/IHJlcS51cmwgOiBgJHtiYXNlVXJsfSR7cmVxLnVybH1gO1xuXG4gIC8vIEdlbmVyYXRlIG9yIGdldCBjb3JyZWxhdGlvbiBjb250ZXh0XG4gIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBjb25maWcuZW5hYmxlQ29ycmVsYXRpb25UcmFja2luZ1xuICAgID8gY29ycmVsYXRpb25TZXJ2aWNlLmdldE9yQ3JlYXRlQ29ycmVsYXRpb25JZCgpXG4gICAgOiB1dWlkdjQoKTtcbiAgY29uc3QgdGVuYW50SWQgPSB0ZW5hbnRTZXJ2aWNlLmdldFRlbmFudElkKCk7XG4gIGNvbnN0IHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuXG4gIC8vIEJ1aWxkIGR5bmFtaWMgaGVhZGVyc1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgLy8gQ29yZSBjb250ZXh0IGhlYWRlcnNcbiAgaGVhZGVyc1tjb25maWcucmVxdWVzdElkSGVhZGVyXSA9IHJlcXVlc3RJZDtcblxuICBpZiAoY29uZmlnLmVuYWJsZUNvcnJlbGF0aW9uVHJhY2tpbmcpIHtcbiAgICBoZWFkZXJzW2NvbmZpZy5jb3JyZWxhdGlvbklkSGVhZGVyXSA9IGNvcnJlbGF0aW9uSWQ7XG4gIH1cblxuICBpZiAodGVuYW50SWQpIHtcbiAgICBoZWFkZXJzW2NvbmZpZy50ZW5hbnRJZEhlYWRlcl0gPSB0ZW5hbnRJZDtcbiAgfVxuXG4gIGhlYWRlcnNbY29uZmlnLnRpbWVzdGFtcEhlYWRlcl0gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgLy8gQ2xpZW50IGluZm9ybWF0aW9uXG4gIGlmIChjb25maWcuY2xpZW50VmVyc2lvbikge1xuICAgIGhlYWRlcnNbJ0NsaWVudC1WZXJzaW9uJ10gPSBjb25maWcuY2xpZW50VmVyc2lvbjtcbiAgfVxuXG4gIC8vIEVudmlyb25tZW50IGNsaWVudCBJRFxuICBpZiAoZW52aXJvbm1lbnQuY2xpZW50SWQpIHtcbiAgICBoZWFkZXJzWydDbGllbnQtSWQnXSA9IGVudmlyb25tZW50LmNsaWVudElkO1xuICB9XG5cbiAgLy8gQWRkIGF1dGhvcml6YXRpb24gaGVhZGVyIGlmIGNvbmZpZ3VyZWQgYW5kIGF2YWlsYWJsZVxuICBpZiAoY29uZmlnLmluY2x1ZGVBdXRoVG9rZW4gJiYgIXNraXBBdXRoKSB7XG4gICAgY29uc3QgYXV0aFRva2VuID0gdG9rZW5Qcm92aWRlcj8uZ2V0VG9rZW4oKTtcbiAgICBpZiAoYXV0aFRva2VuKSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7YXV0aFRva2VufWA7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvY2VzcyBjdXN0b20gaGVhZGVycyBmcm9tIGNvbmZpZ3VyYXRpb24gKGNhbiBiZSBzdGF0aWMgdmFsdWVzIG9yIGR5bmFtaWMgZnVuY3Rpb25zKVxuICBPYmplY3QuZW50cmllcyhjb25maWcuY3VzdG9tSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaGVhZGVyc1trZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUoKSA6IHZhbHVlO1xuICB9KTtcblxuICAvLyBBZGQgaGVhZGVycyBmcm9tIEhUVFAgY29udGV4dFxuICBPYmplY3QuZW50cmllcyhjb250ZXh0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIEFkZCBjb250ZW50LXR5cGUgZm9yIGRhdGEgcmVxdWVzdHMgaWYgbm90IGFscmVhZHkgc2V0XG4gIGlmIChcbiAgICBbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJ10uaW5jbHVkZXMocmVxLm1ldGhvZC50b1VwcGVyQ2FzZSgpKSAmJlxuICAgICFyZXEuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpXG4gICkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG5cbiAgLy8gQ2xvbmUgcmVxdWVzdCB3aXRoIGVuaGFuY2VkIGhlYWRlcnMgYW5kIFVSTFxuICBjb25zdCBlbmhhbmNlZFJlcSA9IHJlcS5jbG9uZSh7XG4gICAgdXJsOiBmaW5hbFVybCxcbiAgICBzZXRIZWFkZXJzOiBoZWFkZXJzLFxuICB9KTtcblxuICAvLyBMb2cgb3V0Z29pbmcgcmVxdWVzdCBpZiBlbmFibGVkXG4gIGlmIChjb25maWcuZW5hYmxlUmVxdWVzdExvZ2dpbmcpIHtcbiAgICBsb2dnaW5nU2VydmljZS5sb2dIdHRwUmVxdWVzdCh7XG4gICAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICB1cmw6IGZpbmFsVXJsLFxuICAgICAgb3JpZ2luYWxVcmw6IHJlcS51cmwsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQsXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGhlYWRlcnM6IE9iamVjdC5rZXlzKGhlYWRlcnMpLFxuICAgICAgaXNDdXN0b21VcmwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBJZiByZXF1ZXN0IGhhcyBhdXRoIGhlYWRlciwgaGFuZGxlIHdpdGggcmVmcmVzaCBsb2dpY1xuICBpZiAoaGVhZGVyc1snQXV0aG9yaXphdGlvbiddICYmIGNvbmZpZy5yZWZyZXNoVG9rZW5DYWxsYmFjaykge1xuICAgIHJldHVybiBuZXh0KGVuaGFuY2VkUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIC8vIElmIDQwMSBVbmF1dGhvcml6ZWQsIHRyeSB0byByZWZyZXNoIHRva2VuXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFJlZnJlc2hUb2tlbj8uKCk7XG4gICAgICAgICAgaWYgKHJlZnJlc2hUb2tlbiAmJiByZWZyZXNoVG9rZW4udHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcucmVmcmVzaFRva2VuQ2FsbGJhY2soKSEucGlwZShcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKG5ld1Rva2VucyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUmV0cnkgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgd2l0aCBuZXcgdG9rZW5cbiAgICAgICAgICAgICAgICBjb25zdCByZXRyeVJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICAgICAgICB1cmw6IGZpbmFsVXJsLFxuICAgICAgICAgICAgICAgICAgc2V0SGVhZGVyczogeyAuLi5oZWFkZXJzLCBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bmV3VG9rZW5zLnRva2VufWAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXRyeVJlcSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKHJlZnJlc2hFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUmVmcmVzaCBmYWlsZWQsIGxvZ291dCB1c2VyXG4gICAgICAgICAgICAgICAgY29uZmlnLmxvZ291dENhbGxiYWNrPy4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiByZWZyZXNoRXJyb3IpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgZXJyb3IgbG9nZ2luZyB3aXRoIGNvbnRleHRcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVFcnJvckxvZ2dpbmcpIHtcbiAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dIdHRwRXJyb3Ioe1xuICAgICAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgICAgICAgIG9yaWdpbmFsVXJsOiByZXEudXJsLFxuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudC5jbGllbnRJZCxcbiAgICAgICAgICAgIGlzQ3VzdG9tVXJsLFxuICAgICAgICAgICAgaGVhZGVyczogW10sIC8vIEhlYWRlcnMgYXJlIG5vdCBpbmNsdWRlZCBpbiBIdHRwRXJyb3JSZXNwb25zZSBieSBkZWZhdWx0LCBhZGp1c3QgaWYgbmVlZGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgb3RoZXIgZXJyb3Igc2NlbmFyaW9zXG4gICAgICAgIHN3aXRjaCAoZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICB0ZW5hbnRTZXJ2aWNlLmhhbmRsZUZvcmJpZGRlbigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nTmV0d29ya0Vycm9yKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dSYXRlTGltaXRFcnJvcihjb3JyZWxhdGlvbklkLCBmaW5hbFVybCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gYXV0aCBoZWFkZXIsIHVzZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZ1xuICAgIHJldHVybiBuZXh0KGVuaGFuY2VkUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIEVuaGFuY2VkIGVycm9yIGxvZ2dpbmcgd2l0aCBjb250ZXh0XG4gICAgICAgIGlmIChjb25maWcuZW5hYmxlRXJyb3JMb2dnaW5nKSB7XG4gICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nSHR0cEVycm9yKHtcbiAgICAgICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogZmluYWxVcmwsXG4gICAgICAgICAgICBvcmlnaW5hbFVybDogcmVxLnVybCxcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogZXJyb3Iuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGVycm9yRGV0YWlsczogZXJyb3IuZXJyb3IsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQuY2xpZW50SWQsXG4gICAgICAgICAgICBpc0N1c3RvbVVybCxcbiAgICAgICAgICAgIGhlYWRlcnM6IFtdLCAvLyBIZWFkZXJzIGFyZSBub3QgaW5jbHVkZWQgaW4gSHR0cEVycm9yUmVzcG9uc2UgYnkgZGVmYXVsdCwgYWRqdXN0IGlmIG5lZWRlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvc1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOiB7XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5lcnJvcignVW5hdXRob3JpemVkIGFjY2VzcyAtIHRva2VuIGV4cGlyZWQgb3IgaW52YWxpZCcpO1xuICAgICAgICAgICAgLy8gTm90ZTogVG9rZW4gY2xlYXJpbmcgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGF1dGggc2VydmljZSwgbm90IGluZnJhc3RydWN0dXJlXG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW2AvJHtlbnZpcm9ubWVudC5sb2dpblJvdXRlfWBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIHRlbmFudFNlcnZpY2UuaGFuZGxlRm9yYmlkZGVuKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgIGxvZ2dpbmdTZXJ2aWNlLmxvZ1JhdGVMaW1pdEVycm9yKGNvcnJlbGF0aW9uSWQsIGZpbmFsVXJsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLy8gU3VwcG9ydGluZyByZXBvc2l0b3JpZXMgZm9yIHR5cGUgc2FmZXR5XG5leHBvcnQgaW50ZXJmYWNlIEh0dHBSZXF1ZXN0TG9nIHtcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBvcmlnaW5hbFVybDogc3RyaW5nO1xuICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgaGVhZGVyczogc3RyaW5nW107XG4gIGlzQ3VzdG9tVXJsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBFcnJvckxvZyBleHRlbmRzIEh0dHBSZXF1ZXN0TG9nIHtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIHN0YXR1c1RleHQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBlcnJvckRldGFpbHM6IHVua25vd247XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgY29uZmlndXJhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKFxuICBvdmVycmlkZXM6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30sXG4pOiBIdHRwQ29udGV4dENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xufVxuXG4vLyBQcm92aWRlciBmdW5jdGlvbiBmb3IgZWFzeSBzZXR1cFxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVIdHRwQ29udGV4dChjb25maWc6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBIVFRQX0NPTlRFWFRfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKGNvbmZpZyksXG4gICAgfSxcbiAgXTtcbn1cbiJdfQ==","import { HttpContext, HttpContextToken, } from '@angular/common/http';\nimport { finalize } from 'rxjs/operators';\nimport { inject, Injectable } from '@angular/core';\nimport { OverlayService } from '@acontplus/ng-components';\nimport * as i0 from \"@angular/core\";\n/**\n * Token to determine if a request should show spinner\n * Default is true (show spinner for all requests)\n */\nconst SHOW_SPINNER = new HttpContextToken(() => true);\nconst requests = [];\n/**\n * Helper function to disable spinner for specific requests\n * @returns HttpContext with spinner disabled\n */\nexport function withoutSpinner() {\n return new HttpContext().set(SHOW_SPINNER, false);\n}\n/**\n * Service to track active HTTP requests\n */\nexport class ActiveRequestsTracker {\n get count() {\n return requests.length;\n }\n add(request) {\n requests.push(request);\n }\n remove(request) {\n const index = requests.indexOf(request);\n if (index >= 0) {\n requests.splice(index, 1);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: ActiveRequestsTracker, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: ActiveRequestsTracker, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n/**\n * Interceptor that shows/hides a loading spinner based on active HTTP requests\n */\nexport const spinnerInterceptor = (req, next) => {\n // Track active requests requiring spinner\n const activeRequests = inject(ActiveRequestsTracker);\n const overlayService = inject(OverlayService);\n // Skip spinner if disabled for this request\n if (!req.context.get(SHOW_SPINNER)) {\n return next(req);\n }\n // Add request to tracking\n activeRequests.add(req);\n // Show spinner if this is the first active request\n if (activeRequests.count === 1) {\n overlayService.showSpinner();\n }\n return next(req).pipe(finalize(() => {\n // Remove request and hide spinner if no more active requests\n activeRequests.remove(req);\n if (activeRequests.count === 0) {\n overlayService.hideSpinner();\n }\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvaW50ZXJjZXB0b3JzL3NwaW5uZXItaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FHakIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUMxRDs7O0dBR0c7QUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLGdCQUFnQixDQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRS9ELE1BQU0sUUFBUSxHQUEyQixFQUFFLENBQUM7QUFFNUM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOztHQUVHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxJQUFJLEtBQUs7UUFDUCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUE2QjtRQUMvQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBNkI7UUFDbEMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO3VHQWRVLHFCQUFxQjsyR0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBa0JEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ2pFLDBDQUEwQztJQUMxQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFOUMsNENBQTRDO0lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV4QixtREFBbUQ7SUFDbkQsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osNkRBQTZEO1FBQzdELGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBDb250ZXh0LFxuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwSW50ZXJjZXB0b3JGbixcbiAgSHR0cFJlcXVlc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb21wb25lbnRzJztcbi8qKlxuICogVG9rZW4gdG8gZGV0ZXJtaW5lIGlmIGEgcmVxdWVzdCBzaG91bGQgc2hvdyBzcGlubmVyXG4gKiBEZWZhdWx0IGlzIHRydWUgKHNob3cgc3Bpbm5lciBmb3IgYWxsIHJlcXVlc3RzKVxuICovXG5jb25zdCBTSE9XX1NQSU5ORVIgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiB0cnVlKTtcblxuY29uc3QgcmVxdWVzdHM6IEh0dHBSZXF1ZXN0PHVua25vd24+W10gPSBbXTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzYWJsZSBzcGlubmVyIGZvciBzcGVjaWZpYyByZXF1ZXN0c1xuICogQHJldHVybnMgSHR0cENvbnRleHQgd2l0aCBzcGlubmVyIGRpc2FibGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0U3Bpbm5lcigpIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChTSE9XX1NQSU5ORVIsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHRvIHRyYWNrIGFjdGl2ZSBIVFRQIHJlcXVlc3RzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBY3RpdmVSZXF1ZXN0c1RyYWNrZXIge1xuICBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVxdWVzdHMubGVuZ3RoO1xuICB9XG5cbiAgYWRkKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogdm9pZCB7XG4gICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcbiAgfVxuXG4gIHJlbW92ZShyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdHMuaW5kZXhPZihyZXF1ZXN0KTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmVxdWVzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmNlcHRvciB0aGF0IHNob3dzL2hpZGVzIGEgbG9hZGluZyBzcGlubmVyIGJhc2VkIG9uIGFjdGl2ZSBIVFRQIHJlcXVlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzcGlubmVySW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICAvLyBUcmFjayBhY3RpdmUgcmVxdWVzdHMgcmVxdWlyaW5nIHNwaW5uZXJcbiAgY29uc3QgYWN0aXZlUmVxdWVzdHMgPSBpbmplY3QoQWN0aXZlUmVxdWVzdHNUcmFja2VyKTtcbiAgY29uc3Qgb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoT3ZlcmxheVNlcnZpY2UpO1xuXG4gIC8vIFNraXAgc3Bpbm5lciBpZiBkaXNhYmxlZCBmb3IgdGhpcyByZXF1ZXN0XG4gIGlmICghcmVxLmNvbnRleHQuZ2V0KFNIT1dfU1BJTk5FUikpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG5cbiAgLy8gQWRkIHJlcXVlc3QgdG8gdHJhY2tpbmdcbiAgYWN0aXZlUmVxdWVzdHMuYWRkKHJlcSk7XG5cbiAgLy8gU2hvdyBzcGlubmVyIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGl2ZSByZXF1ZXN0XG4gIGlmIChhY3RpdmVSZXF1ZXN0cy5jb3VudCA9PT0gMSkge1xuICAgIG92ZXJsYXlTZXJ2aWNlLnNob3dTcGlubmVyKCk7XG4gIH1cblxuICByZXR1cm4gbmV4dChyZXEpLnBpcGUoXG4gICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgLy8gUmVtb3ZlIHJlcXVlc3QgYW5kIGhpZGUgc3Bpbm5lciBpZiBubyBtb3JlIGFjdGl2ZSByZXF1ZXN0c1xuICAgICAgYWN0aXZlUmVxdWVzdHMucmVtb3ZlKHJlcSk7XG4gICAgICBpZiAoYWN0aXZlUmVxdWVzdHMuY291bnQgPT09IDApIHtcbiAgICAgICAgb3ZlcmxheVNlcnZpY2UuaGlkZVNwaW5uZXIoKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgKTtcbn07XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport * as i0 from \"@angular/core\";\nexport class BaseHttpRepository {\n http = inject(HttpClient);\n buildUrl(path = '') {\n const baseUrl = this.config.baseUrl || '/api';\n const version = this.config.version ? `/v${this.config.version}` : '';\n const endpoint = path ? `${this.config.endpoint}/${path}` : this.config.endpoint;\n return `${baseUrl}${version}/${endpoint}`.replace(/\\/+/g, '/');\n }\n get(path = '', params) {\n return this.http.get(this.buildUrl(path), { params });\n }\n post(path = '', body) {\n return this.http.post(this.buildUrl(path), body);\n }\n put(path = '', body) {\n return this.http.put(this.buildUrl(path), body);\n }\n patch(path = '', body) {\n return this.http.patch(this.buildUrl(path), body);\n }\n delete(path = '') {\n return this.http.delete(this.buildUrl(path));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: BaseHttpRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: BaseHttpRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3JlcG9zaXRvcmllcy9iYXNlLWh0dHAtcmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBS2xELE1BQU0sT0FBZ0Isa0JBQWtCO0lBQzVCLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFHMUIsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUVqRixPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFUyxHQUFHLENBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFrRDtRQUM1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFUyxJQUFJLENBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFhO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRVMsR0FBRyxDQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBYTtRQUN2QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVTLEtBQUssQ0FBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxNQUFNLENBQUksSUFBSSxHQUFHLEVBQUU7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQzt1R0E5Qm1CLGtCQUFrQjsyR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeUNvbmZpZyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlSHR0cFJlcG9zaXRvcnkge1xuICBwcm90ZWN0ZWQgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbmZpZzogUmVwb3NpdG9yeUNvbmZpZzsgLy8gQWJzdHJhY3QgcHJvcGVydHlcblxuICBwcm90ZWN0ZWQgYnVpbGRVcmwocGF0aCA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcuYmFzZVVybCB8fCAnL2FwaSc7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuY29uZmlnLnZlcnNpb24gPyBgL3Yke3RoaXMuY29uZmlnLnZlcnNpb259YCA6ICcnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gcGF0aCA/IGAke3RoaXMuY29uZmlnLmVuZHBvaW50fS8ke3BhdGh9YCA6IHRoaXMuY29uZmlnLmVuZHBvaW50O1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9JHt2ZXJzaW9ufS8ke2VuZHBvaW50fWAucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldDxUPihwYXRoID0gJycsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5idWlsZFVybChwYXRoKSwgeyBwYXJhbXMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdDxUPihwYXRoID0gJycsIGJvZHk6IHVua25vd24pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy5idWlsZFVybChwYXRoKSwgYm9keSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHV0PFQ+KHBhdGggPSAnJywgYm9keTogdW5rbm93bik6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhdGNoPFQ+KHBhdGggPSAnJywgYm9keT86IHVua25vd24pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZTxUPihwYXRoID0gJycpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxUPih0aGlzLmJ1aWxkVXJsKHBhdGgpKTtcbiAgfVxufVxuIl19","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { BaseHttpRepository } from './base-http-repository';\nimport * as i0 from \"@angular/core\";\n// Create an injection token for RepositoryConfig\nexport const REPOSITORY_CONFIG = new InjectionToken('REPOSITORY_CONFIG');\nexport class GenericRepository extends BaseHttpRepository {\n config;\n constructor() {\n const config = inject(REPOSITORY_CONFIG);\n super();\n this.config = config;\n }\n getById(id) {\n return this.get(id.toString());\n }\n getAll(pagination) {\n const params = this.buildParams(pagination);\n return this.get('', params);\n }\n create(entity) {\n return this.post('', entity);\n }\n update(id, entity) {\n return this.put(id.toString(), entity);\n }\n remove(id) {\n return super.delete(id.toString());\n }\n buildParams(pagination, filters) {\n const params = {};\n if (pagination) {\n params.pageIndex = pagination.pageIndex?.toString() || '1';\n params.pageSize = pagination.pageSize?.toString() || '20';\n if (pagination.sortBy)\n params.sortBy = pagination.sortBy;\n if (pagination.sortDirection)\n params.sortDirection = pagination.sortDirection;\n }\n if (filters) {\n Object.assign(params, filters);\n }\n return params;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: GenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: GenericRepository, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\nexport class SearchableGenericRepository extends GenericRepository {\n search(query, pagination) {\n const searchFilters = { q: query };\n const params = this.buildParams(pagination, searchFilters);\n return this.get('search', params);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: SearchableGenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: SearchableGenericRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvZ2VuZXJpYy1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFJNUQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFtQixtQkFBbUIsQ0FBQyxDQUFDO0FBRzNGLE1BQU0sT0FBTyxpQkFDWCxTQUFRLGtCQUFrQjtJQUdQLE1BQU0sQ0FBbUI7SUFFNUM7UUFDRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQW1CLGlCQUFpQixDQUFDLENBQUM7UUFDM0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQU87UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUE2QjtRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFVLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQU8sRUFBRSxNQUF3QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsRUFBTztRQUNaLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRVMsV0FBVyxDQUFDLFVBQTZCLEVBQUUsT0FBNkI7UUFDaEYsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBRXZCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTTtnQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDekQsSUFBSSxVQUFVLENBQUMsYUFBYTtnQkFBRSxNQUFNLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDaEYsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzt1R0FoRFUsaUJBQWlCOzJHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7O0FBcURYLE1BQU0sT0FBTywyQkFDWCxTQUFRLGlCQUErQjtJQUd2QyxNQUFNLENBQUMsS0FBYSxFQUFFLFVBQTRCO1FBQ2hELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7dUdBUlUsMkJBQTJCOzJHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlSHR0cFJlcG9zaXRvcnkgfSBmcm9tICcuL2Jhc2UtaHR0cC1yZXBvc2l0b3J5JztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0LCBQYWdpbmF0aW9uUGFyYW1zLCBSZXBvc2l0b3J5Q29uZmlnIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcbmltcG9ydCB7IEJhc2VSZXBvc2l0b3J5LCBTZWFyY2hhYmxlUmVwb3NpdG9yeSB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcblxuLy8gQ3JlYXRlIGFuIGluamVjdGlvbiB0b2tlbiBmb3IgUmVwb3NpdG9yeUNvbmZpZ1xuZXhwb3J0IGNvbnN0IFJFUE9TSVRPUllfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFJlcG9zaXRvcnlDb25maWc+KCdSRVBPU0lUT1JZX0NPTkZJRycpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9zaXRvcnk8VEVudGl0eSA9IGFueSwgVElkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID0gbnVtYmVyPlxuICBleHRlbmRzIEJhc2VIdHRwUmVwb3NpdG9yeVxuICBpbXBsZW1lbnRzIEJhc2VSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD5cbntcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNvbmZpZzogUmVwb3NpdG9yeUNvbmZpZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb25maWcgPSBpbmplY3Q8UmVwb3NpdG9yeUNvbmZpZz4oUkVQT1NJVE9SWV9DT05GSUcpO1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBnZXRCeUlkKGlkOiBUSWQpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQ8VEVudGl0eT4oaWQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBnZXRBbGwocGFnaW5hdGlvbj86IFBhZ2luYXRpb25QYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2VkUmVzdWx0PFRFbnRpdHk+PiB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhwYWdpbmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5nZXQ8UGFnZWRSZXN1bHQ8VEVudGl0eT4+KCcnLCBwYXJhbXMpO1xuICB9XG5cbiAgY3JlYXRlKGVudGl0eTogUGFydGlhbDxURW50aXR5Pik6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLnBvc3Q8VEVudGl0eT4oJycsIGVudGl0eSk7XG4gIH1cblxuICB1cGRhdGUoaWQ6IFRJZCwgZW50aXR5OiBQYXJ0aWFsPFRFbnRpdHk+KTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucHV0PFRFbnRpdHk+KGlkLnRvU3RyaW5nKCksIGVudGl0eSk7XG4gIH1cblxuICByZW1vdmUoaWQ6IFRJZCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBzdXBlci5kZWxldGU8dm9pZD4oaWQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRQYXJhbXMocGFnaW5hdGlvbj86IFBhZ2luYXRpb25QYXJhbXMsIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYW55IHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHt9O1xuXG4gICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgIHBhcmFtcy5wYWdlSW5kZXggPSBwYWdpbmF0aW9uLnBhZ2VJbmRleD8udG9TdHJpbmcoKSB8fCAnMSc7XG4gICAgICBwYXJhbXMucGFnZVNpemUgPSBwYWdpbmF0aW9uLnBhZ2VTaXplPy50b1N0cmluZygpIHx8ICcyMCc7XG4gICAgICBpZiAocGFnaW5hdGlvbi5zb3J0QnkpIHBhcmFtcy5zb3J0QnkgPSBwYWdpbmF0aW9uLnNvcnRCeTtcbiAgICAgIGlmIChwYWdpbmF0aW9uLnNvcnREaXJlY3Rpb24pIHBhcmFtcy5zb3J0RGlyZWN0aW9uID0gcGFnaW5hdGlvbi5zb3J0RGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZUdlbmVyaWNSZXBvc2l0b3J5PFRFbnRpdHkgPSBhbnksIFRJZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciA9IG51bWJlcj5cbiAgZXh0ZW5kcyBHZW5lcmljUmVwb3NpdG9yeTxURW50aXR5LCBUSWQ+XG4gIGltcGxlbWVudHMgU2VhcmNoYWJsZVJlcG9zaXRvcnk8VEVudGl0eSwgVElkPlxue1xuICBzZWFyY2gocXVlcnk6IHN0cmluZywgcGFnaW5hdGlvbjogUGFnaW5hdGlvblBhcmFtcyk6IE9ic2VydmFibGU8UGFnZWRSZXN1bHQ8VEVudGl0eT4+IHtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzID0geyBxOiBxdWVyeSB9O1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuYnVpbGRQYXJhbXMocGFnaW5hdGlvbiwgc2VhcmNoRmlsdGVycyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0PFBhZ2VkUmVzdWx0PFRFbnRpdHk+Pignc2VhcmNoJywgcGFyYW1zKTtcbiAgfVxufVxuIl19","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport * as i0 from \"@angular/core\";\nexport class RepositoryFactory {\n http = inject(HttpClient);\n create(config) {\n const buildUrl = (path = '') => {\n const baseUrl = config.baseUrl || '/api';\n const version = config.version ? `/v${config.version}` : '';\n const endpoint = path ? `${config.endpoint}/${path}` : config.endpoint;\n return `${baseUrl}${version}/${endpoint}`.replace(/\\/+/g, '/');\n };\n const buildParams = (pagination) => {\n const params = {};\n if (pagination) {\n params.page = pagination.pageIndex?.toString() || '1';\n params.pageSize = pagination.pageSize?.toString() || '20';\n if (pagination.sortBy)\n params.sortBy = pagination.sortBy;\n if (pagination.sortDirection)\n params.sortDirection = pagination.sortDirection;\n }\n return params;\n };\n // Safe ID conversion function\n const idToString = (id) => {\n if (typeof id === 'string' || typeof id === 'number' || typeof id === 'bigint') {\n return id.toString();\n }\n // Fallback for other types - you might want to handle this differently\n return String(id);\n };\n return {\n getById: (id) => this.http.get(buildUrl(idToString(id))),\n getAll: (pagination) => this.http.get(buildUrl(), {\n params: buildParams(pagination),\n }),\n create: (entity) => this.http.post(buildUrl(), entity),\n update: (id, entity) => this.http.put(buildUrl(idToString(id)), entity),\n remove: (id) => this.http.delete(buildUrl(idToString(id))),\n };\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RepositoryFactory, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RepositoryFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvcmVwb3NpdG9yeS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLbEQsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sQ0FDSixNQUF3QjtRQUV4QixNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUM3QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3ZFLE9BQU8sR0FBRyxPQUFPLEdBQUcsT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUE2QixFQUFFLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQztnQkFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTTtvQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3pELElBQUksVUFBVSxDQUFDLGFBQWE7b0JBQUUsTUFBTSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ2hGLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFPLEVBQVUsRUFBRTtZQUNyQyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQy9FLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCx1RUFBdUU7WUFDdkUsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXRFLE1BQU0sRUFBRSxDQUFDLFVBQVcsRUFBRSxFQUFFLENBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QixRQUFRLEVBQUUsRUFBRTtnQkFDOUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUM7YUFDaEMsQ0FBQztZQUVKLE1BQU0sRUFBRSxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFVLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztZQUVqRixNQUFNLEVBQUUsQ0FBQyxFQUFPLEVBQUUsTUFBd0IsRUFBRSxFQUFFLENBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7WUFFMUQsTUFBTSxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEUsQ0FBQztJQUNKLENBQUM7dUdBaERVLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBREosTUFBTTs7MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdCwgUGFnaW5hdGlvblBhcmFtcywgUmVwb3NpdG9yeUNvbmZpZyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBCYXNlUmVwb3NpdG9yeSB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5RmFjdG9yeSB7XG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICBjcmVhdGU8VEVudGl0eSwgVElkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID0gbnVtYmVyPihcbiAgICBjb25maWc6IFJlcG9zaXRvcnlDb25maWcsXG4gICk6IEJhc2VSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD4ge1xuICAgIGNvbnN0IGJ1aWxkVXJsID0gKHBhdGggPSAnJykgPT4ge1xuICAgICAgY29uc3QgYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsIHx8ICcvYXBpJztcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBjb25maWcudmVyc2lvbiA/IGAvdiR7Y29uZmlnLnZlcnNpb259YCA6ICcnO1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBwYXRoID8gYCR7Y29uZmlnLmVuZHBvaW50fS8ke3BhdGh9YCA6IGNvbmZpZy5lbmRwb2ludDtcbiAgICAgIHJldHVybiBgJHtiYXNlVXJsfSR7dmVyc2lvbn0vJHtlbmRwb2ludH1gLnJlcGxhY2UoL1xcLysvZywgJy8nKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRQYXJhbXMgPSAocGFnaW5hdGlvbj86IFBhZ2luYXRpb25QYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtczogYW55ID0ge307XG4gICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICBwYXJhbXMucGFnZSA9IHBhZ2luYXRpb24ucGFnZUluZGV4Py50b1N0cmluZygpIHx8ICcxJztcbiAgICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnaW5hdGlvbi5wYWdlU2l6ZT8udG9TdHJpbmcoKSB8fCAnMjAnO1xuICAgICAgICBpZiAocGFnaW5hdGlvbi5zb3J0QnkpIHBhcmFtcy5zb3J0QnkgPSBwYWdpbmF0aW9uLnNvcnRCeTtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24uc29ydERpcmVjdGlvbikgcGFyYW1zLnNvcnREaXJlY3Rpb24gPSBwYWdpbmF0aW9uLnNvcnREaXJlY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH07XG5cbiAgICAvLyBTYWZlIElEIGNvbnZlcnNpb24gZnVuY3Rpb25cbiAgICBjb25zdCBpZFRvU3RyaW5nID0gKGlkOiBUSWQpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGlkID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgaWQgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHJldHVybiBpZC50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgLy8gRmFsbGJhY2sgZm9yIG90aGVyIHR5cGVzIC0geW91IG1pZ2h0IHdhbnQgdG8gaGFuZGxlIHRoaXMgZGlmZmVyZW50bHlcbiAgICAgIHJldHVybiBTdHJpbmcoaWQpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0QnlJZDogKGlkOiBUSWQpID0+IHRoaXMuaHR0cC5nZXQ8VEVudGl0eT4oYnVpbGRVcmwoaWRUb1N0cmluZyhpZCkpKSxcblxuICAgICAgZ2V0QWxsOiAocGFnaW5hdGlvbj8pID0+XG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8UGFnZWRSZXN1bHQ8VEVudGl0eT4+KGJ1aWxkVXJsKCksIHtcbiAgICAgICAgICBwYXJhbXM6IGJ1aWxkUGFyYW1zKHBhZ2luYXRpb24pLFxuICAgICAgICB9KSxcblxuICAgICAgY3JlYXRlOiAoZW50aXR5OiBQYXJ0aWFsPFRFbnRpdHk+KSA9PiB0aGlzLmh0dHAucG9zdDxURW50aXR5PihidWlsZFVybCgpLCBlbnRpdHkpLFxuXG4gICAgICB1cGRhdGU6IChpZDogVElkLCBlbnRpdHk6IFBhcnRpYWw8VEVudGl0eT4pID0+XG4gICAgICAgIHRoaXMuaHR0cC5wdXQ8VEVudGl0eT4oYnVpbGRVcmwoaWRUb1N0cmluZyhpZCkpLCBlbnRpdHkpLFxuXG4gICAgICByZW1vdmU6IChpZDogVElkKSA9PiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGJ1aWxkVXJsKGlkVG9TdHJpbmcoaWQpKSksXG4gICAgfTtcbiAgfVxufVxuIl19","import { lastValueFrom } from 'rxjs';\nfunction mergeUrl(baseURL, endpoint) {\n if (!baseURL)\n return endpoint;\n return `${baseURL.replace(/\\/+$/, '')}/${endpoint.replace(/^\\/+/, '')}`;\n}\nexport class AngularHttpAdapter {\n http;\n baseURL;\n constructor(http, baseURL) {\n this.http = http;\n this.baseURL = baseURL;\n }\n buildOptions(options) {\n return {\n headers: options?.headers ?? {},\n params: options?.params ?? {},\n };\n }\n async request(params) {\n const fullUrl = mergeUrl(this.baseURL, params.url);\n const httpOptions = this.buildOptions(params.options);\n const observable = this.http.request(params.method, fullUrl, {\n body: params.data,\n ...httpOptions,\n });\n return await lastValueFrom(observable);\n }\n /** GET */\n get(url, options) {\n return this.request({ method: 'get', url, options });\n }\n /** POST */\n post(url, data, options) {\n return this.request({ method: 'post', url, data, options });\n }\n /** PUT */\n put(url, data, options) {\n return this.request({ method: 'put', url, data, options });\n }\n /** DELETE */\n delete(url, options) {\n return this.request({ method: 'delete', url, options });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1odHRwLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL2FkYXB0ZXJzL2FuZ3VsYXItaHR0cC1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHckMsU0FBUyxRQUFRLENBQUMsT0FBMkIsRUFBRSxRQUFnQjtJQUM3RCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzlCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBRVY7SUFDQTtJQUZuQixZQUNtQixJQUFnQixFQUNoQixPQUFnQjtRQURoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDaEMsQ0FBQztJQUVJLFlBQVksQ0FBQyxPQUFxQjtRQUN4QyxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtZQUMvQixNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FBSSxNQUt4QjtRQUNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUM5RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsR0FBRyxXQUFXO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVTtJQUNWLEdBQUcsQ0FBSSxHQUFXLEVBQUUsT0FBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksQ0FBSSxHQUFXLEVBQUUsSUFBYyxFQUFFLE9BQXFCO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxVQUFVO0lBQ1YsR0FBRyxDQUFJLEdBQVcsRUFBRSxJQUFjLEVBQUUsT0FBcUI7UUFDdkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGFBQWE7SUFDYixNQUFNLENBQUksR0FBVyxFQUFFLE9BQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh0dHBPcHRpb25zLCBIdHRwUG9ydCB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5cbmZ1bmN0aW9uIG1lcmdlVXJsKGJhc2VVUkw6IHN0cmluZyB8IHVuZGVmaW5lZCwgZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghYmFzZVVSTCkgcmV0dXJuIGVuZHBvaW50O1xuICByZXR1cm4gYCR7YmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtlbmRwb2ludC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gO1xufVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhckh0dHBBZGFwdGVyIGltcGxlbWVudHMgSHR0cFBvcnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVVJMPzogc3RyaW5nLFxuICApIHt9XG5cbiAgcHJpdmF0ZSBidWlsZE9wdGlvbnMob3B0aW9ucz86IEh0dHBPcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnM6IG9wdGlvbnM/LmhlYWRlcnMgPz8ge30sXG4gICAgICBwYXJhbXM6IG9wdGlvbnM/LnBhcmFtcyA/PyB7fSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KHBhcmFtczoge1xuICAgIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAncHV0JyB8ICdkZWxldGUnO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGRhdGE/OiB1bmtub3duO1xuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9ucztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGZ1bGxVcmwgPSBtZXJnZVVybCh0aGlzLmJhc2VVUkwsIHBhcmFtcy51cmwpO1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0gdGhpcy5idWlsZE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpO1xuXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuaHR0cC5yZXF1ZXN0PFQ+KHBhcmFtcy5tZXRob2QsIGZ1bGxVcmwsIHtcbiAgICAgIGJvZHk6IHBhcmFtcy5kYXRhLFxuICAgICAgLi4uaHR0cE9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgbGFzdFZhbHVlRnJvbShvYnNlcnZhYmxlKTtcbiAgfVxuXG4gIC8qKiBHRVQgKi9cbiAgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgdXJsLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIFBPU1QgKi9cbiAgcG9zdDxUPih1cmw6IHN0cmluZywgZGF0YT86IHVua25vd24sIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdwb3N0JywgdXJsLCBkYXRhLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIFBVVCAqL1xuICBwdXQ8VD4odXJsOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAncHV0JywgdXJsLCBkYXRhLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIERFTEVURSAqL1xuICBkZWxldGU8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCB1cmwsIG9wdGlvbnMgfSk7XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { DEFAULT_CONFIG, ENVIRONMENT } from '@acontplus/ng-config';\nimport { CORE_CONFIG } from '@acontplus/ng-config/src/lib/tokens/core-config-token';\nimport * as i0 from \"@angular/core\";\nexport class CoreConfigService {\n config;\n environment = inject(ENVIRONMENT);\n constructor() {\n this.config = this.initializeConfig();\n }\n /**\n * Initialize configuration with defaults and environment overrides\n */\n initializeConfig() {\n const injectedConfig = inject(CORE_CONFIG, { optional: true });\n return {\n ...DEFAULT_CONFIG,\n // Environment overrides\n apiBaseUrl: this.environment.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl,\n enableRequestLogging: !this.environment.isProduction,\n // Injected config overrides\n ...injectedConfig,\n };\n }\n /**\n * Get the current configuration\n */\n getConfig() {\n return { ...this.config };\n }\n /**\n * Update configuration at runtime\n */\n updateConfig(updates) {\n this.config = { ...this.config, ...updates };\n }\n /**\n * Get a specific configuration value\n */\n get(key) {\n return this.config[key];\n }\n /**\n * Check if a feature is enabled\n */\n isFeatureEnabled(feature) {\n const value = this.config[feature];\n return typeof value === 'boolean' ? value : false;\n }\n /**\n * Get API URL for a specific entity\n */\n getApiUrl(entityName) {\n const baseUrl = this.config.apiBaseUrl;\n if (!entityName)\n return baseUrl;\n return `${baseUrl}/${entityName}`.replace(/\\/+/g, '/');\n }\n /**\n * Check if a URL should be excluded from processing\n */\n shouldExcludeUrl(url) {\n return this.config.excludeUrls.some(excludePattern => url.includes(excludePattern) || new RegExp(excludePattern).test(url));\n }\n /**\n * Check if a method should be excluded from processing\n */\n shouldExcludeMethod(method) {\n return this.config.excludeMethods.some(excludeMethod => excludeMethod.toLowerCase() === method.toLowerCase());\n }\n /**\n * Get custom headers with dynamic values resolved\n */\n getCustomHeaders() {\n const headers = {};\n Object.entries(this.config.customHeaders).forEach(([key, value]) => {\n headers[key] = typeof value === 'function' ? value() : value;\n });\n return headers;\n }\n /**\n * Reset configuration to defaults\n */\n resetConfig() {\n this.config = this.initializeConfig();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CoreConfigService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CoreConfigService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n// Provider function for easy setup\nexport function provideCoreConfig(config = {}) {\n return [\n {\n provide: CORE_CONFIG,\n useValue: config,\n },\n ];\n}\n// Helper function to create configuration\nexport function createCoreConfig(overrides = {}) {\n return {\n ...DEFAULT_CONFIG,\n ...overrides,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb25maWctc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29yZS1jb25maWctc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7QUFLcEYsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixNQUFNLENBQXVCO0lBQzdCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFMUM7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFL0QsT0FBTztZQUNMLEdBQUcsY0FBYztZQUNqQix3QkFBd0I7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLGNBQWMsQ0FBQyxVQUFVO1lBQ3BFLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO1lBQ3BELDRCQUE0QjtZQUM1QixHQUFHLGNBQWM7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE9BQTRCO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQTZCLEdBQU07UUFDcEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLE9BQXlCO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxVQUFtQjtRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQyxjQUFjLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsTUFBTSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUUzQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNqRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsQ0FBQzt1R0FsR1UsaUJBQWlCOzJHQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUFzR0QsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUE4QixFQUFFO0lBQ2hFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFlBQWlDLEVBQUU7SUFDbEUsT0FBTztRQUNMLEdBQUcsY0FBYztRQUNqQixHQUFHLFNBQVM7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUcsIEVOVklST05NRU5UIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb25maWcnO1xuaW1wb3J0IHsgQ29yZUNvbmZpZyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJRyB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnL3NyYy9saWIvdG9rZW5zL2NvcmUtY29uZmlnLXRva2VuJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvcmVDb25maWdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWc6IFJlcXVpcmVkPENvcmVDb25maWc+O1xuICBwcml2YXRlIGVudmlyb25tZW50ID0gaW5qZWN0KEVOVklST05NRU5UKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuaW5pdGlhbGl6ZUNvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHRzIGFuZCBlbnZpcm9ubWVudCBvdmVycmlkZXNcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbmZpZygpOiBSZXF1aXJlZDxDb3JlQ29uZmlnPiB7XG4gICAgY29uc3QgaW5qZWN0ZWRDb25maWcgPSBpbmplY3QoQ09SRV9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgICAvLyBFbnZpcm9ubWVudCBvdmVycmlkZXNcbiAgICAgIGFwaUJhc2VVcmw6IHRoaXMuZW52aXJvbm1lbnQuYXBpQmFzZVVybCB8fCBERUZBVUxUX0NPTkZJRy5hcGlCYXNlVXJsLFxuICAgICAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6ICF0aGlzLmVudmlyb25tZW50LmlzUHJvZHVjdGlvbixcbiAgICAgIC8vIEluamVjdGVkIGNvbmZpZyBvdmVycmlkZXNcbiAgICAgIC4uLmluamVjdGVkQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdldENvbmZpZygpOiBSZXF1aXJlZDxDb3JlQ29uZmlnPiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5jb25maWcgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY29uZmlndXJhdGlvbiBhdCBydW50aW1lXG4gICAqL1xuICB1cGRhdGVDb25maWcodXBkYXRlczogUGFydGlhbDxDb3JlQ29uZmlnPik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4udXBkYXRlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFsdWVcbiAgICovXG4gIGdldDxLIGV4dGVuZHMga2V5b2YgQ29yZUNvbmZpZz4oa2V5OiBLKTogQ29yZUNvbmZpZ1tLXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2tleV07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBmZWF0dXJlIGlzIGVuYWJsZWRcbiAgICovXG4gIGlzRmVhdHVyZUVuYWJsZWQoZmVhdHVyZToga2V5b2YgQ29yZUNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb25maWdbZmVhdHVyZV07XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVBJIFVSTCBmb3IgYSBzcGVjaWZpYyBlbnRpdHlcbiAgICovXG4gIGdldEFwaVVybChlbnRpdHlOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcuYXBpQmFzZVVybDtcbiAgICBpZiAoIWVudGl0eU5hbWUpIHJldHVybiBiYXNlVXJsO1xuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke2VudGl0eU5hbWV9YC5yZXBsYWNlKC9cXC8rL2csICcvJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBVUkwgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gcHJvY2Vzc2luZ1xuICAgKi9cbiAgc2hvdWxkRXhjbHVkZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5leGNsdWRlVXJscy5zb21lKFxuICAgICAgZXhjbHVkZVBhdHRlcm4gPT4gdXJsLmluY2x1ZGVzKGV4Y2x1ZGVQYXR0ZXJuKSB8fCBuZXcgUmVnRXhwKGV4Y2x1ZGVQYXR0ZXJuKS50ZXN0KHVybCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1ldGhvZCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBwcm9jZXNzaW5nXG4gICAqL1xuICBzaG91bGRFeGNsdWRlTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmV4Y2x1ZGVNZXRob2RzLnNvbWUoXG4gICAgICBleGNsdWRlTWV0aG9kID0+IGV4Y2x1ZGVNZXRob2QudG9Mb3dlckNhc2UoKSA9PT0gbWV0aG9kLnRvTG93ZXJDYXNlKCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VzdG9tIGhlYWRlcnMgd2l0aCBkeW5hbWljIHZhbHVlcyByZXNvbHZlZFxuICAgKi9cbiAgZ2V0Q3VzdG9tSGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5jdXN0b21IZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGhlYWRlcnNba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKCkgOiB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGNvbmZpZ3VyYXRpb24gdG8gZGVmYXVsdHNcbiAgICovXG4gIHJlc2V0Q29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5pbml0aWFsaXplQ29uZmlnKCk7XG4gIH1cbn1cblxuLy8gUHJvdmlkZXIgZnVuY3Rpb24gZm9yIGVhc3kgc2V0dXBcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ29yZUNvbmZpZyhjb25maWc6IFBhcnRpYWw8Q29yZUNvbmZpZz4gPSB7fSkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENPUkVfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb25cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb3JlQ29uZmlnKG92ZXJyaWRlczogUGFydGlhbDxDb3JlQ29uZmlnPiA9IHt9KTogQ29yZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xufVxuIl19","export class BaseUseCase {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS11c2UtY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvdXNlLWNhc2VzL2Jhc2UtdXNlLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFnQixXQUFXO0NBSWhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUNhc2U8VFJlcXVlc3QgPSB2b2lkLCBUUmVzcG9uc2UgPSB2b2lkPiB7XG4gIGV4ZWN1dGUocmVxdWVzdDogVFJlcXVlc3QpOiBPYnNlcnZhYmxlPFRSZXNwb25zZT47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlVXNlQ2FzZTxUUmVxdWVzdCA9IHZvaWQsIFRSZXNwb25zZSA9IHZvaWQ+XG4gIGltcGxlbWVudHMgVXNlQ2FzZTxUUmVxdWVzdCwgVFJlc3BvbnNlPlxue1xuICBhYnN0cmFjdCBleGVjdXRlKHJlcXVlc3Q6IFRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUUmVzcG9uc2U+O1xufVxuIl19","import { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\n// Only create commands if you have complex validation logic\nexport class Command extends BaseUseCase {\n // Simple validation - override only when needed\n validate(_request) {\n return []; // Return array of error messages\n }\n execute(request) {\n const errors = this.validate(request);\n if (errors.length > 0) {\n return throwError(() => ({\n status: 'error',\n code: 'VALIDATION_FAILED',\n message: 'Validation failed',\n errors: errors.map(msg => ({ code: 'VALIDATION', message: msg })),\n timestamp: new Date().toISOString(),\n }));\n }\n return this.executeInternal(request).pipe(catchError(error => {\n // Log the error for debugging\n const logger = inject(LoggingService);\n logger.error('An error occurred during command execution:', error);\n // Re-throw the error so the caller can handle it\n return throwError(() => error);\n }));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3VzZS1jYXNlcy9jb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsNERBQTREO0FBQzVELE1BQU0sT0FBZ0IsT0FBb0MsU0FBUSxXQUFnQztJQUNoRyxnREFBZ0Q7SUFDdEMsUUFBUSxDQUFDLFFBQWtCO1FBQ25DLE9BQU8sRUFBRSxDQUFDLENBQUMsaUNBQWlDO0lBQzlDLENBQUM7SUFFUSxPQUFPLENBQUMsT0FBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDakUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQiw4QkFBOEI7WUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbkUsaURBQWlEO1lBQ2pELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlVXNlQ2FzZSB9IGZyb20gJy4vYmFzZS11c2UtY2FzZSc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmctc2VydmljZSc7XG5cbi8vIE9ubHkgY3JlYXRlIGNvbW1hbmRzIGlmIHlvdSBoYXZlIGNvbXBsZXggdmFsaWRhdGlvbiBsb2dpY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1hbmQ8VFJlcXVlc3QsIFRSZXNwb25zZSA9IHZvaWQ+IGV4dGVuZHMgQmFzZVVzZUNhc2U8VFJlcXVlc3QsIFRSZXNwb25zZT4ge1xuICAvLyBTaW1wbGUgdmFsaWRhdGlvbiAtIG92ZXJyaWRlIG9ubHkgd2hlbiBuZWVkZWRcbiAgcHJvdGVjdGVkIHZhbGlkYXRlKF9yZXF1ZXN0OiBUUmVxdWVzdCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107IC8vIFJldHVybiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhlY3V0ZShyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy52YWxpZGF0ZShyZXF1ZXN0KTtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgY29kZTogJ1ZBTElEQVRJT05fRkFJTEVEJyxcbiAgICAgICAgbWVzc2FnZTogJ1ZhbGlkYXRpb24gZmFpbGVkJyxcbiAgICAgICAgZXJyb3JzOiBlcnJvcnMubWFwKG1zZyA9PiAoeyBjb2RlOiAnVkFMSURBVElPTicsIG1lc3NhZ2U6IG1zZyB9KSksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVJbnRlcm5hbChyZXF1ZXN0KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIC8vIExvZyB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZ1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBpbmplY3QoTG9nZ2luZ1NlcnZpY2UpO1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjb21tYW5kIGV4ZWN1dGlvbjonLCBlcnJvcik7XG5cbiAgICAgICAgLy8gUmUtdGhyb3cgdGhlIGVycm9yIHNvIHRoZSBjYWxsZXIgY2FuIGhhbmRsZSBpdFxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVJbnRlcm5hbChyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPjtcbn1cbiJdfQ==","import { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\nexport class Query extends BaseUseCase {\n execute(request) {\n return this.executeInternal(request).pipe(catchError(error => {\n const logger = inject(LoggingService);\n logger.error('An error occurred during query execution:', error);\n return throwError(() => error);\n }));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvdXNlLWNhc2VzL3F1ZXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE1BQU0sT0FBZ0IsS0FBMkIsU0FBUSxXQUFnQztJQUM5RSxPQUFPLENBQUMsT0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdkMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlVXNlQ2FzZSB9IGZyb20gJy4vYmFzZS11c2UtY2FzZSc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmctc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdWVyeTxUUmVxdWVzdCwgVFJlc3BvbnNlPiBleHRlbmRzIEJhc2VVc2VDYXNlPFRSZXF1ZXN0LCBUUmVzcG9uc2U+IHtcbiAgb3ZlcnJpZGUgZXhlY3V0ZShyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUludGVybmFsKHJlcXVlc3QpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gaW5qZWN0KExvZ2dpbmdTZXJ2aWNlKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlSW50ZXJuYWwocmVxdWVzdDogVFJlcXVlc3QpOiBPYnNlcnZhYmxlPFRSZXNwb25zZT47XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvbnRwbHVzLW5nLWluZnJhc3RydWN0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2Fjb250cGx1cy1uZy1pbmZyYXN0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["uuidv4","catchError","DEFAULT_CONFIG"],"mappings":"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"}
1
+ {"version":3,"file":"acontplus-ng-infrastructure.mjs","sources":["../../../../packages/ng-infrastructure/src/lib/interceptors/api-interceptor.ts","../../../../packages/ng-infrastructure/src/lib/services/logging-service.ts","../../../../packages/ng-infrastructure/src/lib/services/tenant-info.ts","../../../../packages/ng-infrastructure/src/lib/services/correlation-info.ts","../../../../packages/ng-infrastructure/src/lib/interceptors/http-context-interceptor.ts","../../../../packages/ng-infrastructure/src/lib/interceptors/spinner-interceptor.ts","../../../../packages/ng-infrastructure/src/lib/repositories/base-http-repository.ts","../../../../packages/ng-infrastructure/src/lib/repositories/generic-repository.ts","../../../../packages/ng-infrastructure/src/lib/repositories/repository-factory.ts","../../../../packages/ng-infrastructure/src/lib/adapters/angular-http-adapter.ts","../../../../packages/ng-infrastructure/src/lib/services/core-config-service.ts","../../../../packages/ng-infrastructure/src/lib/use-cases/base-use-case.ts","../../../../packages/ng-infrastructure/src/lib/use-cases/commands.ts","../../../../packages/ng-infrastructure/src/lib/use-cases/queries.ts","../../../../packages/ng-infrastructure/src/acontplus-ng-infrastructure.ts"],"sourcesContent":["import {\n HttpInterceptorFn,\n HttpEvent,\n HttpResponse,\n HttpErrorResponse,\n HttpRequest,\n HttpContextToken,\n} from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, map, retry } from 'rxjs/operators';\nimport { throwError } from 'rxjs';\nimport { ApiResponse } from '@acontplus/core';\nimport { NotificationService } from '@acontplus/ng-notifications';\nimport { AUTH_TOKEN } from '@acontplus/ng-config';\n\n// A token to use with HttpContext for skipping notifications on specific requests.\nexport const SKIP_NOTIFICATION = new HttpContextToken<boolean>(() => false);\n\n// A token to use with HttpContext for forcing notifications on specific requests (overrides exclusion patterns).\nexport const SHOW_NOTIFICATIONS = new HttpContextToken<boolean | undefined>(() => undefined);\n\nexport const apiInterceptor: HttpInterceptorFn = (req, next) => {\n const toastr = inject(NotificationService);\n const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n\n // Add authorization header if token is available\n let modifiedReq = req;\n const token = tokenProvider?.getToken();\n if (token) {\n modifiedReq = req.clone({\n setHeaders: { Authorization: `Bearer ${token}` },\n });\n }\n\n return next(modifiedReq).pipe(\n // Retries the request up to 2 times on failure with a 1-second delay.\n retry({ count: 2, delay: 1000 }),\n // Use the `map` operator to handle successful responses.\n map((event: HttpEvent<unknown>) => {\n if (event instanceof HttpResponse) {\n return handleSuccessResponse(event, toastr, req);\n }\n return event;\n }),\n // Use the `catchError` operator to handle any errors that occur.\n catchError((error: HttpErrorResponse) => handleErrorResponse(error, toastr)),\n );\n};\n\n// --- Helper Functions ---\n\n/**\n * Handles successful HTTP responses, standardizes them, shows notifications, and transforms for consumers.\n */\nfunction handleSuccessResponse(\n event: HttpResponse<unknown>,\n notificationService: NotificationService,\n req: HttpRequest<unknown>,\n): HttpResponse<unknown> {\n const body = event.body;\n\n // Standardize the response to always have ApiResponse structure\n const standardizedResponse = standardizeApiResponse(body);\n\n // Handle toast notifications based on standardized response\n handleToastNotifications(standardizedResponse, notificationService, req);\n\n // Return the appropriate data based on response type\n return transformResponseForConsumers(standardizedResponse, event);\n}\n\n/**\n * Handles HTTP errors (from the interceptor chain, not backend ApiResponse).\n */\nfunction handleErrorResponse(error: HttpErrorResponse, notificationService: NotificationService) {\n const status = error.status;\n\n // Only show notifications for critical HTTP-level errors.\n // We avoid showing toasts for 4xx errors, which are handled by the component.\n if (status !== null && shouldShowCriticalErrorNotification(status)) {\n const message = getCriticalErrorMessage(error);\n const title = getErrorTitle(status);\n\n notificationService.error({\n message: message,\n title: title,\n config: { duration: 5000 },\n });\n }\n\n // Always re-throw the error so components/services can handle it.\n return throwError(() => error);\n}\n\n/**\n * Standardizes any response to follow the ApiResponse structure\n */\nfunction standardizeApiResponse(body: unknown): ApiResponse<unknown> {\n // If it's already a proper ApiResponse, return as is\n if (isValidApiResponse(body)) {\n return body;\n }\n\n // If it's a raw data response (no wrapper), wrap it\n if (body && typeof body === 'object' && !('status' in body)) {\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n data: body,\n timestamp: new Date().toISOString(),\n };\n }\n\n // If it's a primitive value, wrap it\n if (body !== null && body !== undefined && typeof body !== 'object') {\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n data: body,\n timestamp: new Date().toISOString(),\n };\n }\n\n // If it's null/undefined, create a success response without data\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n timestamp: new Date().toISOString(),\n };\n}\n\n/**\n * Handles toast notifications based on standardized response\n */\nfunction handleToastNotifications(\n response: ApiResponse<unknown>,\n notificationService: NotificationService,\n req: HttpRequest<unknown>,\n): void {\n const shouldShowToast = shouldShowSuccessToast(req);\n const forceShow = req.context.get(SHOW_NOTIFICATIONS);\n const skipNotification = req.context.get(SKIP_NOTIFICATION);\n\n // Determine if we should show notifications, considering overrides\n const showNotifications = forceShow !== undefined ? forceShow : shouldShowToast;\n\n if (skipNotification) return;\n\n // Dynamic handling: Use show() for runtime type selection\n if (\n response.message &&\n showNotifications &&\n ['success', 'warning', 'error'].includes(response.status)\n ) {\n notificationService.show({\n type: response.status as 'success' | 'warning' | 'error',\n message: response.message,\n });\n }\n\n // Handle warnings separately if needed\n if (response.status === 'warning' && response.warnings && response.warnings.length > 0) {\n response.warnings.forEach((warning) => {\n notificationService.show({\n type: 'warning',\n message: warning.message,\n });\n });\n }\n\n // Handle errors separately if needed\n if (response.status === 'error' && response.errors && response.errors.length > 0) {\n response.errors.forEach((error) => {\n notificationService.show({\n type: 'error',\n message: error.message,\n });\n });\n }\n}\n\n/**\n * Transforms the standardized response for consumers\n */\nfunction transformResponseForConsumers(\n response: ApiResponse<unknown>,\n originalEvent: HttpResponse<unknown>,\n): HttpResponse<unknown> {\n switch (response.status) {\n case 'success':\n // For success responses, return the data if it exists, otherwise the full response\n if (response.data !== undefined && response.data !== null) {\n return originalEvent.clone({ body: response.data });\n }\n // For message-only success responses, return the full response\n return originalEvent.clone({ body: response });\n\n case 'warning':\n // For warnings, return data if it exists, otherwise the full response\n if (response.data !== undefined && response.data !== null) {\n return originalEvent.clone({ body: response.data });\n }\n return originalEvent.clone({ body: response });\n\n case 'error':\n // Errors should be thrown, not returned\n throw response;\n\n default:\n return originalEvent.clone({ body: response });\n }\n}\n\n/**\n * Checks if a response is a valid ApiResponse\n */\nfunction isValidApiResponse(response: unknown): response is ApiResponse<unknown> {\n if (response === null || typeof response !== 'object') return false;\n const r = response as Record<string, unknown>;\n return (\n 'status' in r &&\n 'code' in r &&\n typeof r['status'] === 'string' &&\n ['success', 'error', 'warning'].includes(r['status'])\n );\n}\n\n/**\n * Determines whether to show success toast notifications based on the request type.\n */\nfunction shouldShowSuccessToast(req: HttpRequest<unknown>): boolean {\n const url = req.url?.toLowerCase() || '';\n const method = req.method?.toLowerCase() || '';\n\n // Never show for these cases\n const excludedPatterns = [\n 'get',\n '/list',\n '/search',\n '/query',\n '/page',\n '/paginated',\n '/health',\n '/status',\n '/ping',\n ];\n\n if (excludedPatterns.some((pattern) => method === pattern || url.includes(pattern))) {\n return false;\n }\n\n // Always show for these methods\n if (['post', 'put', 'patch', 'delete'].includes(method)) {\n return true;\n }\n\n // Default behavior\n return method !== 'get';\n}\n\n/**\n * Determines if we should show a notification for this HTTP error.\n */\nfunction shouldShowCriticalErrorNotification(status: number): boolean {\n // Show notifications for:\n // - Network errors (status 0)\n // - Server errors (5xx)\n return status === 0 || (status >= 500 && status < 600);\n}\n\n/**\n * Gets the appropriate title for error notifications.\n */\nfunction getErrorTitle(status: number): string {\n if (status === 0) return 'Connection Error';\n if (status >= 500) return 'Server Error';\n return 'Error';\n}\n\n/**\n * Gets the appropriate message for critical errors.\n */\nfunction getCriticalErrorMessage(error: HttpErrorResponse): string {\n if (error.status === 0) {\n return 'Unable to connect to the server. Please check your network connection.';\n }\n\n if (error.status >= 500) {\n return (\n error.error?.message || error.message || 'A server error occurred. Please try again later.'\n );\n }\n\n return error.error?.message || error.message || 'An unexpected error occurred';\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport { HttpRequestLog, HttpErrorLog } from '../interceptors';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingService {\n private environment = inject(ENVIRONMENT);\n\n log(level: 'info' | 'warn' | 'error', message: string, context?: unknown): void {\n if (this.environment.isProduction) {\n // Production logging (e.g., to external service)\n this.logToExternalService(level, message, context);\n } else {\n // Development logging - only log in development mode\n if (!this.environment.isProduction) {\n console[level](`[${level.toUpperCase()}] ${message}`, context);\n }\n }\n }\n\n info(message: string, context?: unknown): void {\n this.log('info', message, context);\n }\n\n warn(message: string, context?: unknown): void {\n this.log('warn', message, context);\n }\n\n error(message: string, context?: unknown): void {\n this.log('error', message, context);\n }\n\n // HTTP Request Logging\n logHttpRequest(log: HttpRequestLog): void {\n this.info(`HTTP Request - ${log.method} ${log.url}`, {\n requestId: log.requestId,\n correlationId: log.correlationId,\n tenantId: log.tenantId,\n headers: log.headers,\n isCustomUrl: log.isCustomUrl,\n timestamp: log.timestamp,\n });\n }\n\n // HTTP Error Logging\n logHttpError(error: HttpErrorLog): void {\n this.error(`HTTP Error - ${error.method} ${error.url}`, {\n status: error.status,\n statusText: error.statusText,\n requestId: error.requestId,\n correlationId: error.correlationId,\n tenantId: error.tenantId,\n errorDetails: error.errorDetails,\n environment: error.environment,\n timestamp: error.timestamp,\n });\n }\n\n // Network Error Logging\n logNetworkError(correlationId: string): void {\n this.error('Network connection failed', {\n type: 'network-error',\n correlationId,\n userAgent: navigator.userAgent,\n online: navigator.onLine,\n });\n }\n\n // Rate Limit Error Logging\n logRateLimitError(correlationId: string, url: string): void {\n this.warn('Rate limit exceeded', {\n type: 'rate-limit-error',\n correlationId,\n url,\n });\n }\n\n private logToExternalService(_level: string, _message: string, _context?: unknown): void {\n // Implement external logging service integration\n // e.g., Sentry, LogRocket, etc.\n // This is a placeholder for production logging implementation\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LoggingService } from './logging-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TenantInfo {\n private tenantId: string | null = null;\n private logger = inject(LoggingService);\n\n getTenantId(): string {\n if (!this.tenantId) {\n // Get from localStorage, sessionStorage, or JWT token\n this.tenantId =\n localStorage.getItem('tenantId') ||\n sessionStorage.getItem('tenantId') ||\n this.extractTenantFromToken() ||\n 'default-tenant';\n }\n return this.tenantId;\n }\n\n getCurrentTenant(): string | null {\n return this.tenantId;\n }\n\n setTenantId(tenantId: string): void {\n this.tenantId = tenantId;\n localStorage.setItem('tenantId', tenantId);\n }\n\n setTenant(tenantId: string): void {\n this.setTenantId(tenantId);\n }\n\n handleForbidden(): void {\n this.logger.error('Access forbidden for tenant:', this.tenantId);\n // Redirect to tenant selection or show error message\n // this.router.navigate(['/tenant-access-denied']);\n }\n\n private extractTenantFromToken(): string | null {\n // Implementation depends on your JWT token structure\n // This is a placeholder\n return null;\n }\n\n clearTenant(): void {\n this.tenantId = null;\n localStorage.removeItem('tenantId');\n sessionStorage.removeItem('tenantId');\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CorrelationInfo {\n private correlationId = signal<string | null>(null);\n private readonly CORRELATION_KEY = 'correlation-id';\n\n // Signal-based getter for reactive updates\n readonly currentCorrelationId = computed(() => this.correlationId());\n\n getOrCreateCorrelationId(): string {\n if (!this.correlationId()) {\n // Try to get from sessionStorage first (for page refreshes)\n const id = sessionStorage.getItem(this.CORRELATION_KEY) || uuidv4();\n this.correlationId.set(id);\n sessionStorage.setItem(this.CORRELATION_KEY, id);\n }\n return this.correlationId()!;\n }\n\n setCorrelationId(correlationId: string): void {\n this.correlationId.set(correlationId);\n sessionStorage.setItem(this.CORRELATION_KEY, correlationId);\n }\n\n resetCorrelationId(): void {\n this.correlationId.set(null);\n sessionStorage.removeItem(this.CORRELATION_KEY);\n }\n\n getId(): string {\n return this.getOrCreateCorrelationId();\n }\n}\n","import { inject, InjectionToken } from '@angular/core'; // Import InjectionToken\nimport { Router } from '@angular/router';\nimport {\n HttpContextToken,\n HttpContext,\n HttpInterceptorFn,\n HttpErrorResponse,\n} from '@angular/common/http';\nimport { catchError, throwError, switchMap, Observable } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\n// Environment and configuration\nimport { AUTH_TOKEN, ENVIRONMENT } from '@acontplus/ng-config';\n\n// Services\nimport { TenantInfo } from '../services/tenant-info';\nimport { CorrelationInfo } from '../services/correlation-info';\nimport { LoggingService } from '../services/logging-service';\n\n// HTTP Context tokens\nconst CUSTOM_URL = new HttpContextToken<boolean>(() => false);\nconst SKIP_CONTEXT_HEADERS = new HttpContextToken<boolean>(() => false);\nconst CUSTOM_HEADERS = new HttpContextToken<Record<string, string>>(() => ({}));\n\n// Helper functions for HTTP context\nexport function customUrl() {\n return new HttpContext().set(CUSTOM_URL, true);\n}\n\nexport function skipContextHeaders() {\n return new HttpContext().set(SKIP_CONTEXT_HEADERS, true);\n}\n\nexport function withCustomHeaders(headers: Record<string, string>) {\n return new HttpContext().set(CUSTOM_HEADERS, headers);\n}\n\n// Configuration interface for library consumers\nexport interface HttpContextConfig {\n enableCorrelationTracking?: boolean;\n enableRequestLogging?: boolean;\n enableErrorLogging?: boolean;\n customHeaders?: Record<string, string | (() => string)>;\n clientVersion?: string;\n tenantIdHeader?: string;\n correlationIdHeader?: string;\n requestIdHeader?: string;\n timestampHeader?: string;\n excludeUrls?: string[];\n includeAuthToken?: boolean;\n baseUrlInjection?: boolean;\n refreshTokenCallback?: () => Observable<{ token: string; refreshToken?: string }>;\n logoutCallback?: () => void;\n}\n\n// Default configuration\nconst DEFAULT_CONFIG: Required<HttpContextConfig> = {\n enableCorrelationTracking: true,\n enableRequestLogging: false, // This will be overridden by environment.isProduction\n enableErrorLogging: true,\n customHeaders: {},\n clientVersion: '1.0.0',\n tenantIdHeader: 'Tenant-Id',\n correlationIdHeader: 'Correlation-Id',\n requestIdHeader: 'Request-Id',\n timestampHeader: 'Timestamp',\n excludeUrls: [],\n includeAuthToken: true,\n baseUrlInjection: true,\n refreshTokenCallback: undefined as any,\n logoutCallback: undefined as any,\n};\n\n// Injection token for configuration - FIXED\nexport const HTTP_CONTEXT_CONFIG = new InjectionToken<HttpContextConfig>('HTTP_CONTEXT_CONFIG', {\n factory: () => DEFAULT_CONFIG, // Provide a default factory in case it's not provided\n});\n\nexport const httpContextInterceptor: HttpInterceptorFn = (req, next) => {\n const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n const router = inject(Router);\n const tenantService = inject(TenantInfo);\n const correlationService = inject(CorrelationInfo);\n const loggingService = inject(LoggingService);\n const environment = inject(ENVIRONMENT);\n\n // Get configuration (with fallback to default) - FIXED\n const config: Required<HttpContextConfig> = {\n ...DEFAULT_CONFIG,\n // The default enableRequestLogging needs to be set based on environment here,\n // as it's dynamic, and DEFAULT_CONFIG is static.\n enableRequestLogging: !environment.isProduction,\n ...inject(HTTP_CONTEXT_CONFIG, { optional: true }),\n };\n\n // Check HTTP context tokens\n const isCustomUrl = req.context.get(CUSTOM_URL);\n const skipHeaders = req.context.get(SKIP_CONTEXT_HEADERS);\n const contextHeaders = req.context.get(CUSTOM_HEADERS);\n\n // Skip processing if headers are disabled for this request\n if (skipHeaders) {\n return next(req);\n }\n\n // Check if URL should be excluded\n const shouldExclude = config.excludeUrls.some(\n (url) => req.url.includes(url) || new RegExp(url).test(req.url),\n );\n\n if (shouldExclude) {\n return next(req);\n }\n\n // Skip auth for login, register, and refresh endpoints\n const skipAuth =\n req.url.includes('/login') || req.url.includes('/register') || req.url.includes('/refresh');\n\n // Handle URL transformation\n const baseUrl = environment.apiBaseUrl;\n const finalUrl = isCustomUrl || !config.baseUrlInjection ? req.url : `${baseUrl}${req.url}`;\n\n // Generate or get correlation context\n const correlationId = config.enableCorrelationTracking\n ? correlationService.getOrCreateCorrelationId()\n : uuidv4();\n const tenantId = tenantService.getTenantId();\n const requestId = uuidv4();\n\n // Build dynamic headers\n const headers: Record<string, string> = {};\n\n // Core context headers\n headers[config.requestIdHeader] = requestId;\n\n if (config.enableCorrelationTracking) {\n headers[config.correlationIdHeader] = correlationId;\n }\n\n if (tenantId) {\n headers[config.tenantIdHeader] = tenantId;\n }\n\n headers[config.timestampHeader] = new Date().toISOString();\n\n // Client information\n if (config.clientVersion) {\n headers['Client-Version'] = config.clientVersion;\n }\n\n // Environment client ID\n if (environment.clientId) {\n headers['Client-Id'] = environment.clientId;\n }\n\n // Add authorization header if configured and available\n if (config.includeAuthToken && !skipAuth) {\n const authToken = tokenProvider?.getToken();\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n }\n\n // Process custom headers from configuration (can be static values or dynamic functions)\n Object.entries(config.customHeaders).forEach(([key, value]) => {\n headers[key] = typeof value === 'function' ? value() : value;\n });\n\n // Add headers from HTTP context\n Object.entries(contextHeaders).forEach(([key, value]) => {\n headers[key] = value;\n });\n\n // Add content-type for data requests if not already set\n if (\n ['POST', 'PUT', 'PATCH'].includes(req.method.toUpperCase()) &&\n !req.headers.has('Content-Type')\n ) {\n headers['Content-Type'] = 'application/json';\n }\n\n // Clone request with enhanced headers and URL\n const enhancedReq = req.clone({\n url: finalUrl,\n setHeaders: headers,\n });\n\n // Log outgoing request if enabled\n if (config.enableRequestLogging) {\n loggingService.logHttpRequest({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n timestamp: new Date().toISOString(),\n headers: Object.keys(headers),\n isCustomUrl,\n });\n }\n\n // If request has auth header, handle with refresh logic\n if (headers['Authorization'] && config.refreshTokenCallback) {\n return next(enhancedReq).pipe(\n catchError((error) => {\n // If 401 Unauthorized, try to refresh token\n if (error.status === 401) {\n const refreshToken = tokenProvider?.getRefreshToken?.();\n if (refreshToken && refreshToken.trim().length > 0) {\n return config.refreshTokenCallback()!.pipe(\n switchMap((newTokens) => {\n // Retry the original request with new token\n const retryReq = req.clone({\n url: finalUrl,\n setHeaders: { ...headers, Authorization: `Bearer ${newTokens.token}` },\n });\n return next(retryReq);\n }),\n catchError((refreshError) => {\n // Refresh failed, logout user\n config.logoutCallback?.();\n return throwError(() => refreshError);\n }),\n );\n }\n }\n\n // Enhanced error logging with context\n if (config.enableErrorLogging) {\n loggingService.logHttpError({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n status: error.status,\n statusText: error.statusText,\n message: error.message,\n timestamp: new Date().toISOString(),\n errorDetails: error.error,\n environment: environment.clientId,\n isCustomUrl,\n headers: [], // Headers are not included in HttpErrorResponse by default, adjust if needed\n });\n }\n\n // Handle other error scenarios\n switch (error.status) {\n case 403:\n tenantService.handleForbidden();\n break;\n case 0:\n loggingService.logNetworkError(correlationId);\n break;\n case 429:\n loggingService.logRateLimitError(correlationId, finalUrl);\n break;\n }\n\n return throwError(() => error);\n }),\n );\n } else {\n // No auth header, use standard error handling\n return next(enhancedReq).pipe(\n catchError((error: HttpErrorResponse) => {\n // Enhanced error logging with context\n if (config.enableErrorLogging) {\n loggingService.logHttpError({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n status: error.status,\n statusText: error.statusText,\n message: error.message,\n timestamp: new Date().toISOString(),\n errorDetails: error.error,\n environment: environment.clientId,\n isCustomUrl,\n headers: [], // Headers are not included in HttpErrorResponse by default, adjust if needed\n });\n }\n\n // Handle specific error scenarios\n switch (error.status) {\n case 401: {\n loggingService.error('Unauthorized access - token expired or invalid');\n // Note: Token clearing should be handled by the auth service, not infrastructure\n router.navigate([`/${environment.loginRoute}`]);\n break;\n }\n case 403:\n tenantService.handleForbidden();\n break;\n case 0:\n loggingService.logNetworkError(correlationId);\n break;\n case 429:\n loggingService.logRateLimitError(correlationId, finalUrl);\n break;\n }\n\n return throwError(() => error);\n }),\n );\n }\n};\n\n// Supporting repositories for type safety\nexport interface HttpRequestLog {\n method: string;\n url: string;\n originalUrl: string;\n requestId: string;\n correlationId: string;\n tenantId: string;\n timestamp: string;\n headers: string[];\n isCustomUrl: boolean;\n}\n\nexport interface HttpErrorLog extends HttpRequestLog {\n status: number;\n statusText: string;\n message: string;\n errorDetails: unknown;\n environment: string;\n}\n\n// Helper function to create configuration\nexport function createHttpContextConfig(\n overrides: Partial<HttpContextConfig> = {},\n): HttpContextConfig {\n return {\n ...DEFAULT_CONFIG,\n ...overrides,\n };\n}\n\n// Provider function for easy setup\nexport function provideHttpContext(config: Partial<HttpContextConfig> = {}) {\n return [\n {\n provide: HTTP_CONTEXT_CONFIG,\n useValue: createHttpContextConfig(config),\n },\n ];\n}\n","import {\n HttpContext,\n HttpContextToken,\n HttpInterceptorFn,\n HttpRequest,\n} from '@angular/common/http';\n\nimport { finalize } from 'rxjs/operators';\nimport { inject, Injectable } from '@angular/core';\nimport { OverlayService } from '@acontplus/ng-components';\n/**\n * Token to determine if a request should show spinner\n * Default is true (show spinner for all requests)\n */\nconst SHOW_SPINNER = new HttpContextToken<boolean>(() => true);\n\nconst requests: HttpRequest<unknown>[] = [];\n\n/**\n * Helper function to disable spinner for specific requests\n * @returns HttpContext with spinner disabled\n */\nexport function withoutSpinner() {\n return new HttpContext().set(SHOW_SPINNER, false);\n}\n\n/**\n * Service to track active HTTP requests\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ActiveRequestsTracker {\n get count(): number {\n return requests.length;\n }\n\n add(request: HttpRequest<unknown>): void {\n requests.push(request);\n }\n\n remove(request: HttpRequest<unknown>): void {\n const index = requests.indexOf(request);\n if (index >= 0) {\n requests.splice(index, 1);\n }\n }\n}\n\n/**\n * Interceptor that shows/hides a loading spinner based on active HTTP requests\n */\nexport const spinnerInterceptor: HttpInterceptorFn = (req, next) => {\n // Track active requests requiring spinner\n const activeRequests = inject(ActiveRequestsTracker);\n const overlayService = inject(OverlayService);\n\n // Skip spinner if disabled for this request\n if (!req.context.get(SHOW_SPINNER)) {\n return next(req);\n }\n\n // Add request to tracking\n activeRequests.add(req);\n\n // Show spinner if this is the first active request\n if (activeRequests.count === 1) {\n overlayService.showSpinner();\n }\n\n return next(req).pipe(\n finalize(() => {\n // Remove request and hide spinner if no more active requests\n activeRequests.remove(req);\n if (activeRequests.count === 0) {\n overlayService.hideSpinner();\n }\n }),\n );\n};\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { RepositoryConfig } from '@acontplus/core';\n\n@Injectable()\nexport abstract class BaseHttpRepository {\n protected http = inject(HttpClient);\n protected abstract config: RepositoryConfig; // Abstract property\n\n protected buildUrl(path = ''): string {\n const baseUrl = this.config.baseUrl || '/api';\n const version = this.config.version ? `/v${this.config.version}` : '';\n const endpoint = path ? `${this.config.endpoint}/${path}` : this.config.endpoint;\n\n return `${baseUrl}${version}/${endpoint}`.replace(/\\/+/g, '/');\n }\n\n protected get<T>(path = '', params?: Record<string, string | number | boolean>): Observable<T> {\n return this.http.get<T>(this.buildUrl(path), { params });\n }\n\n protected post<T>(path = '', body: unknown): Observable<T> {\n return this.http.post<T>(this.buildUrl(path), body);\n }\n\n protected put<T>(path = '', body: unknown): Observable<T> {\n return this.http.put<T>(this.buildUrl(path), body);\n }\n\n protected patch<T>(path = '', body?: unknown): Observable<T> {\n return this.http.patch<T>(this.buildUrl(path), body);\n }\n\n protected delete<T>(path = ''): Observable<T> {\n return this.http.delete<T>(this.buildUrl(path));\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BaseHttpRepository } from './base-http-repository';\nimport { PagedResult, PaginationParams, RepositoryConfig } from '@acontplus/core';\nimport { BaseRepository, SearchableRepository } from '@acontplus/ng-config';\n\n// Create an injection token for RepositoryConfig\nexport const REPOSITORY_CONFIG = new InjectionToken<RepositoryConfig>('REPOSITORY_CONFIG');\n\n@Injectable()\nexport class GenericRepository<TEntity = any, TId extends string | number = number>\n extends BaseHttpRepository\n implements BaseRepository<TEntity, TId>\n{\n protected override config: RepositoryConfig;\n\n constructor() {\n const config = inject<RepositoryConfig>(REPOSITORY_CONFIG);\n super();\n this.config = config;\n }\n\n getById(id: TId): Observable<TEntity> {\n return this.get<TEntity>(id.toString());\n }\n\n getAll(pagination?: PaginationParams): Observable<PagedResult<TEntity>> {\n const params = this.buildParams(pagination);\n return this.get<PagedResult<TEntity>>('', params);\n }\n\n create(entity: Partial<TEntity>): Observable<TEntity> {\n return this.post<TEntity>('', entity);\n }\n\n update(id: TId, entity: Partial<TEntity>): Observable<TEntity> {\n return this.put<TEntity>(id.toString(), entity);\n }\n\n remove(id: TId): Observable<void> {\n return super.delete<void>(id.toString());\n }\n\n protected buildParams(pagination?: PaginationParams, filters?: Record<string, any>): any {\n const params: any = {};\n\n if (pagination) {\n params.pageIndex = pagination.pageIndex?.toString() || '1';\n params.pageSize = pagination.pageSize?.toString() || '20';\n if (pagination.sortBy) params.sortBy = pagination.sortBy;\n if (pagination.sortDirection) params.sortDirection = pagination.sortDirection;\n }\n\n if (filters) {\n Object.assign(params, filters);\n }\n\n return params;\n }\n}\n\n@Injectable()\nexport class SearchableGenericRepository<TEntity = any, TId extends string | number = number>\n extends GenericRepository<TEntity, TId>\n implements SearchableRepository<TEntity, TId>\n{\n search(query: string, pagination: PaginationParams): Observable<PagedResult<TEntity>> {\n const searchFilters = { q: query };\n const params = this.buildParams(pagination, searchFilters);\n return this.get<PagedResult<TEntity>>('search', params);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { PagedResult, PaginationParams, RepositoryConfig } from '@acontplus/core';\nimport { BaseRepository } from '@acontplus/ng-config';\n\n@Injectable({ providedIn: 'root' })\nexport class RepositoryFactory {\n private http = inject(HttpClient);\n\n create<TEntity, TId extends string | number = number>(\n config: RepositoryConfig,\n ): BaseRepository<TEntity, TId> {\n const buildUrl = (path = '') => {\n const baseUrl = config.baseUrl || '/api';\n const version = config.version ? `/v${config.version}` : '';\n const endpoint = path ? `${config.endpoint}/${path}` : config.endpoint;\n return `${baseUrl}${version}/${endpoint}`.replace(/\\/+/g, '/');\n };\n\n const buildParams = (pagination?: PaginationParams) => {\n const params: any = {};\n if (pagination) {\n params.page = pagination.pageIndex?.toString() || '1';\n params.pageSize = pagination.pageSize?.toString() || '20';\n if (pagination.sortBy) params.sortBy = pagination.sortBy;\n if (pagination.sortDirection) params.sortDirection = pagination.sortDirection;\n }\n return params;\n };\n\n // Safe ID conversion function\n const idToString = (id: TId): string => {\n if (typeof id === 'string' || typeof id === 'number' || typeof id === 'bigint') {\n return id.toString();\n }\n // Fallback for other types - you might want to handle this differently\n return String(id);\n };\n\n return {\n getById: (id: TId) => this.http.get<TEntity>(buildUrl(idToString(id))),\n\n getAll: (pagination?) =>\n this.http.get<PagedResult<TEntity>>(buildUrl(), {\n params: buildParams(pagination),\n }),\n\n create: (entity: Partial<TEntity>) => this.http.post<TEntity>(buildUrl(), entity),\n\n update: (id: TId, entity: Partial<TEntity>) =>\n this.http.put<TEntity>(buildUrl(idToString(id)), entity),\n\n remove: (id: TId) => this.http.delete<void>(buildUrl(idToString(id))),\n };\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\nimport { HttpOptions, HttpPort } from '@acontplus/core';\n\nfunction mergeUrl(baseURL: string | undefined, endpoint: string): string {\n if (!baseURL) return endpoint;\n return `${baseURL.replace(/\\/+$/, '')}/${endpoint.replace(/^\\/+/, '')}`;\n}\n\nexport class AngularHttpAdapter implements HttpPort {\n constructor(\n private readonly http: HttpClient,\n private readonly baseURL?: string,\n ) {}\n\n private buildOptions(options?: HttpOptions) {\n return {\n headers: options?.headers ?? {},\n params: options?.params ?? {},\n };\n }\n\n private async request<T>(params: {\n method: 'get' | 'post' | 'put' | 'delete';\n url: string;\n data?: unknown;\n options?: HttpOptions;\n }): Promise<T> {\n const fullUrl = mergeUrl(this.baseURL, params.url);\n const httpOptions = this.buildOptions(params.options);\n\n const observable = this.http.request<T>(params.method, fullUrl, {\n body: params.data,\n ...httpOptions,\n });\n\n return await lastValueFrom(observable);\n }\n\n /** GET */\n get<T>(url: string, options?: HttpOptions): Promise<T> {\n return this.request({ method: 'get', url, options });\n }\n\n /** POST */\n post<T>(url: string, data?: unknown, options?: HttpOptions): Promise<T> {\n return this.request({ method: 'post', url, data, options });\n }\n\n /** PUT */\n put<T>(url: string, data?: unknown, options?: HttpOptions): Promise<T> {\n return this.request({ method: 'put', url, data, options });\n }\n\n /** DELETE */\n delete<T>(url: string, options?: HttpOptions): Promise<T> {\n return this.request({ method: 'delete', url, options });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { CORE_CONFIG, DEFAULT_CONFIG, ENVIRONMENT } from '@acontplus/ng-config';\nimport { CoreConfig } from '@acontplus/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CoreConfigService {\n private config: Required<CoreConfig>;\n private environment = inject(ENVIRONMENT);\n\n constructor() {\n this.config = this.initializeConfig();\n }\n\n /**\n * Initialize configuration with defaults and environment overrides\n */\n private initializeConfig(): Required<CoreConfig> {\n const injectedConfig = inject(CORE_CONFIG, { optional: true });\n\n return {\n ...DEFAULT_CONFIG,\n // Environment overrides\n apiBaseUrl: this.environment.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl,\n enableRequestLogging: !this.environment.isProduction,\n // Injected config overrides\n ...injectedConfig,\n };\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): Required<CoreConfig> {\n return { ...this.config };\n }\n\n /**\n * Update configuration at runtime\n */\n updateConfig(updates: Partial<CoreConfig>): void {\n this.config = { ...this.config, ...updates };\n }\n\n /**\n * Get a specific configuration value\n */\n get<K extends keyof CoreConfig>(key: K): CoreConfig[K] {\n return this.config[key];\n }\n\n /**\n * Check if a feature is enabled\n */\n isFeatureEnabled(feature: keyof CoreConfig): boolean {\n const value = this.config[feature];\n return typeof value === 'boolean' ? value : false;\n }\n\n /**\n * Get API URL for a specific entity\n */\n getApiUrl(entityName?: string): string {\n const baseUrl = this.config.apiBaseUrl;\n if (!entityName) return baseUrl;\n return `${baseUrl}/${entityName}`.replace(/\\/+/g, '/');\n }\n\n /**\n * Check if a URL should be excluded from processing\n */\n shouldExcludeUrl(url: string): boolean {\n return this.config.excludeUrls.some(\n (excludePattern) => url.includes(excludePattern) || new RegExp(excludePattern).test(url),\n );\n }\n\n /**\n * Check if a method should be excluded from processing\n */\n shouldExcludeMethod(method: string): boolean {\n return this.config.excludeMethods.some(\n (excludeMethod) => excludeMethod.toLowerCase() === method.toLowerCase(),\n );\n }\n\n /**\n * Get custom headers with dynamic values resolved\n */\n getCustomHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n\n Object.entries(this.config.customHeaders).forEach(([key, value]) => {\n headers[key] = typeof value === 'function' ? value() : value;\n });\n\n return headers;\n }\n\n /**\n * Reset configuration to defaults\n */\n resetConfig(): void {\n this.config = this.initializeConfig();\n }\n}\n\n// Provider function for easy setup\nexport function provideCoreConfig(config: Partial<CoreConfig> = {}) {\n return [\n {\n provide: CORE_CONFIG,\n useValue: config,\n },\n ];\n}\n\n// Helper function to create configuration\nexport function createCoreConfig(overrides: Partial<CoreConfig> = {}): CoreConfig {\n return {\n ...DEFAULT_CONFIG,\n ...overrides,\n };\n}\n","import { Observable } from 'rxjs';\n\nexport interface UseCase<TRequest = void, TResponse = void> {\n execute(request: TRequest): Observable<TResponse>;\n}\n\nexport abstract class BaseUseCase<TRequest = void, TResponse = void>\n implements UseCase<TRequest, TResponse>\n{\n abstract execute(request: TRequest): Observable<TResponse>;\n}\n","import { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\n\n// Only create commands if you have complex validation logic\nexport abstract class Command<TRequest, TResponse = void> extends BaseUseCase<TRequest, TResponse> {\n // Simple validation - override only when needed\n protected validate(_request: TRequest): string[] {\n return []; // Return array of error messages\n }\n\n override execute(request: TRequest): Observable<TResponse> {\n const errors = this.validate(request);\n if (errors.length > 0) {\n return throwError(() => ({\n status: 'error',\n code: 'VALIDATION_FAILED',\n message: 'Validation failed',\n errors: errors.map((msg) => ({ code: 'VALIDATION', message: msg })),\n timestamp: new Date().toISOString(),\n }));\n }\n\n return this.executeInternal(request).pipe(\n catchError((error) => {\n // Log the error for debugging\n const logger = inject(LoggingService);\n logger.error('An error occurred during command execution:', error);\n\n // Re-throw the error so the caller can handle it\n return throwError(() => error);\n }),\n );\n }\n\n protected abstract executeInternal(request: TRequest): Observable<TResponse>;\n}\n","import { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\n\nexport abstract class Query<TRequest, TResponse> extends BaseUseCase<TRequest, TResponse> {\n override execute(request: TRequest): Observable<TResponse> {\n return this.executeInternal(request).pipe(\n catchError((error) => {\n const logger = inject(LoggingService);\n logger.error('An error occurred during query execution:', error);\n return throwError(() => error);\n }),\n );\n }\n\n protected abstract executeInternal(request: TRequest): Observable<TResponse>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuidv4","catchError","DEFAULT_CONFIG"],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@acontplus/ng-infrastructure",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Angular infrastructure library implementing clean architecture patterns with HTTP interceptors, repository implementations, adapters, dependency injection providers, and core infrastructure services for enterprise applications.",
5
5
  "peerDependencies": {
6
- "@acontplus/core": "^1.1.0",
7
- "@acontplus/ng-config": "^1.1.0",
8
- "@acontplus/ng-notifications": "^1.1.0",
9
- "@acontplus/ng-components": "^1.3.0",
10
- "@angular/common": "^20.3.2",
11
- "@angular/core": "^20.3.2"
6
+ "@acontplus/core": "^1.1.1",
7
+ "@acontplus/ng-config": "^1.1.1",
8
+ "@acontplus/ng-notifications": "^1.1.1",
9
+ "@acontplus/ng-components": "^1.3.1",
10
+ "@angular/common": "^20.3.9",
11
+ "@angular/core": "^20.3.9"
12
12
  },
13
13
  "sideEffects": false,
14
14
  "main": "fesm2022/acontplus-ng-infrastructure.mjs",