@acontplus/ng-infrastructure 1.1.1 → 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
  ```
@@ -127,7 +127,7 @@ function handleToastNotifications(response, notificationService, req) {
127
127
  }
128
128
  // Handle warnings separately if needed
129
129
  if (response.status === 'warning' && response.warnings && response.warnings.length > 0) {
130
- response.warnings.forEach(warning => {
130
+ response.warnings.forEach((warning) => {
131
131
  notificationService.show({
132
132
  type: 'warning',
133
133
  message: warning.message,
@@ -136,7 +136,7 @@ function handleToastNotifications(response, notificationService, req) {
136
136
  }
137
137
  // Handle errors separately if needed
138
138
  if (response.status === 'error' && response.errors && response.errors.length > 0) {
139
- response.errors.forEach(error => {
139
+ response.errors.forEach((error) => {
140
140
  notificationService.show({
141
141
  type: 'error',
142
142
  message: error.message,
@@ -199,7 +199,7 @@ function shouldShowSuccessToast(req) {
199
199
  '/status',
200
200
  '/ping',
201
201
  ];
202
- if (excludedPatterns.some(pattern => method === pattern || url.includes(pattern))) {
202
+ if (excludedPatterns.some((pattern) => method === pattern || url.includes(pattern))) {
203
203
  return false;
204
204
  }
205
205
  // Always show for these methods
@@ -310,10 +310,10 @@ class LoggingService {
310
310
  // e.g., Sentry, LogRocket, etc.
311
311
  // This is a placeholder for production logging implementation
312
312
  }
313
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
314
- 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' });
315
315
  }
316
- 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: [{
317
317
  type: Injectable,
318
318
  args: [{
319
319
  providedIn: 'root',
@@ -359,10 +359,10 @@ class TenantInfo {
359
359
  localStorage.removeItem('tenantId');
360
360
  sessionStorage.removeItem('tenantId');
361
361
  }
362
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TenantInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
363
- 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' });
364
364
  }
365
- 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: [{
366
366
  type: Injectable,
367
367
  args: [{
368
368
  providedIn: 'root',
@@ -394,10 +394,10 @@ class CorrelationInfo {
394
394
  getId() {
395
395
  return this.getOrCreateCorrelationId();
396
396
  }
397
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CorrelationInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
398
- 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' });
399
399
  }
400
- 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: [{
401
401
  type: Injectable,
402
402
  args: [{
403
403
  providedIn: 'root',
@@ -463,7 +463,7 @@ const httpContextInterceptor = (req, next) => {
463
463
  return next(req);
464
464
  }
465
465
  // Check if URL should be excluded
466
- 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));
467
467
  if (shouldExclude) {
468
468
  return next(req);
469
469
  }
@@ -538,19 +538,19 @@ const httpContextInterceptor = (req, next) => {
538
538
  }
539
539
  // If request has auth header, handle with refresh logic
540
540
  if (headers['Authorization'] && config.refreshTokenCallback) {
541
- return next(enhancedReq).pipe(catchError$1(error => {
541
+ return next(enhancedReq).pipe(catchError$1((error) => {
542
542
  // If 401 Unauthorized, try to refresh token
543
543
  if (error.status === 401) {
544
544
  const refreshToken = tokenProvider?.getRefreshToken?.();
545
545
  if (refreshToken && refreshToken.trim().length > 0) {
546
- return config.refreshTokenCallback().pipe(switchMap(newTokens => {
546
+ return config.refreshTokenCallback().pipe(switchMap((newTokens) => {
547
547
  // Retry the original request with new token
548
548
  const retryReq = req.clone({
549
549
  url: finalUrl,
550
550
  setHeaders: { ...headers, Authorization: `Bearer ${newTokens.token}` },
551
551
  });
552
552
  return next(retryReq);
553
- }), catchError$1(refreshError => {
553
+ }), catchError$1((refreshError) => {
554
554
  // Refresh failed, logout user
555
555
  config.logoutCallback?.();
556
556
  return throwError(() => refreshError);
@@ -681,10 +681,10 @@ class ActiveRequestsTracker {
681
681
  requests.splice(index, 1);
682
682
  }
683
683
  }
684
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
685
- 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' });
686
686
  }
687
- 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: [{
688
688
  type: Injectable,
689
689
  args: [{
690
690
  providedIn: 'root',
@@ -739,10 +739,10 @@ class BaseHttpRepository {
739
739
  delete(path = '') {
740
740
  return this.http.delete(this.buildUrl(path));
741
741
  }
742
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
743
- 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 });
744
744
  }
745
- 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: [{
746
746
  type: Injectable
747
747
  }] });
748
748
 
@@ -786,10 +786,10 @@ class GenericRepository extends BaseHttpRepository {
786
786
  }
787
787
  return params;
788
788
  }
789
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
790
- 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 });
791
791
  }
792
- 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: [{
793
793
  type: Injectable
794
794
  }], ctorParameters: () => [] });
795
795
  class SearchableGenericRepository extends GenericRepository {
@@ -798,10 +798,10 @@ class SearchableGenericRepository extends GenericRepository {
798
798
  const params = this.buildParams(pagination, searchFilters);
799
799
  return this.get('search', params);
800
800
  }
801
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
802
- 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 });
803
803
  }
804
- 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: [{
805
805
  type: Injectable
806
806
  }] });
807
807
 
@@ -844,10 +844,10 @@ class RepositoryFactory {
844
844
  remove: (id) => this.http.delete(buildUrl(idToString(id))),
845
845
  };
846
846
  }
847
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
848
- 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' });
849
849
  }
850
- 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: [{
851
851
  type: Injectable,
852
852
  args: [{ providedIn: 'root' }]
853
853
  }] });
@@ -955,13 +955,13 @@ class CoreConfigService {
955
955
  * Check if a URL should be excluded from processing
956
956
  */
957
957
  shouldExcludeUrl(url) {
958
- 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));
959
959
  }
960
960
  /**
961
961
  * Check if a method should be excluded from processing
962
962
  */
963
963
  shouldExcludeMethod(method) {
964
- return this.config.excludeMethods.some(excludeMethod => excludeMethod.toLowerCase() === method.toLowerCase());
964
+ return this.config.excludeMethods.some((excludeMethod) => excludeMethod.toLowerCase() === method.toLowerCase());
965
965
  }
966
966
  /**
967
967
  * Get custom headers with dynamic values resolved
@@ -979,10 +979,10 @@ class CoreConfigService {
979
979
  resetConfig() {
980
980
  this.config = this.initializeConfig();
981
981
  }
982
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
983
- 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' });
984
984
  }
985
- 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: [{
986
986
  type: Injectable,
987
987
  args: [{
988
988
  providedIn: 'root',
@@ -1021,11 +1021,11 @@ class Command extends BaseUseCase {
1021
1021
  status: 'error',
1022
1022
  code: 'VALIDATION_FAILED',
1023
1023
  message: 'Validation failed',
1024
- errors: errors.map(msg => ({ code: 'VALIDATION', message: msg })),
1024
+ errors: errors.map((msg) => ({ code: 'VALIDATION', message: msg })),
1025
1025
  timestamp: new Date().toISOString(),
1026
1026
  }));
1027
1027
  }
1028
- return this.executeInternal(request).pipe(catchError(error => {
1028
+ return this.executeInternal(request).pipe(catchError((error) => {
1029
1029
  // Log the error for debugging
1030
1030
  const logger = inject(LoggingService);
1031
1031
  logger.error('An error occurred during command execution:', error);
@@ -1037,7 +1037,7 @@ class Command extends BaseUseCase {
1037
1037
 
1038
1038
  class Query extends BaseUseCase {
1039
1039
  execute(request) {
1040
- return this.executeInternal(request).pipe(catchError(error => {
1040
+ return this.executeInternal(request).pipe(catchError((error) => {
1041
1041
  const logger = inject(LoggingService);
1042
1042
  logger.error('An error occurred during query execution:', error);
1043
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 { CORE_CONFIG, DEFAULT_CONFIG, ENVIRONMENT } from '@acontplus/ng-config';\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb25maWctc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29yZS1jb25maWctc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFNaEYsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixNQUFNLENBQXVCO0lBQzdCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFMUM7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFL0QsT0FBTztZQUNMLEdBQUcsY0FBYztZQUNqQix3QkFBd0I7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLGNBQWMsQ0FBQyxVQUFVO1lBQ3BFLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO1lBQ3BELDRCQUE0QjtZQUM1QixHQUFHLGNBQWM7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE9BQTRCO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQTZCLEdBQU07UUFDcEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLE9BQXlCO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxVQUFtQjtRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQyxjQUFjLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsTUFBTSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUUzQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNqRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsQ0FBQzt1R0FsR1UsaUJBQWlCOzJHQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUFzR0QsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUE4QixFQUFFO0lBQ2hFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFlBQWlDLEVBQUU7SUFDbEUsT0FBTztRQUNMLEdBQUcsY0FBYztRQUNqQixHQUFHLFNBQVM7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUcsIERFRkFVTFRfQ09ORklHLCBFTlZJUk9OTUVOVCB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcbmltcG9ydCB7IENvcmVDb25maWcgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbmZpZ1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8Q29yZUNvbmZpZz47XG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5pbml0aWFsaXplQ29uZmlnKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIHdpdGggZGVmYXVsdHMgYW5kIGVudmlyb25tZW50IG92ZXJyaWRlc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29uZmlnKCk6IFJlcXVpcmVkPENvcmVDb25maWc+IHtcbiAgICBjb25zdCBpbmplY3RlZENvbmZpZyA9IGluamVjdChDT1JFX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ERUZBVUxUX0NPTkZJRyxcbiAgICAgIC8vIEVudmlyb25tZW50IG92ZXJyaWRlc1xuICAgICAgYXBpQmFzZVVybDogdGhpcy5lbnZpcm9ubWVudC5hcGlCYXNlVXJsIHx8IERFRkFVTFRfQ09ORklHLmFwaUJhc2VVcmwsXG4gICAgICBlbmFibGVSZXF1ZXN0TG9nZ2luZzogIXRoaXMuZW52aXJvbm1lbnQuaXNQcm9kdWN0aW9uLFxuICAgICAgLy8gSW5qZWN0ZWQgY29uZmlnIG92ZXJyaWRlc1xuICAgICAgLi4uaW5qZWN0ZWRDb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgZ2V0Q29uZmlnKCk6IFJlcXVpcmVkPENvcmVDb25maWc+IHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGF0IHJ1bnRpbWVcbiAgICovXG4gIHVwZGF0ZUNvbmZpZyh1cGRhdGVzOiBQYXJ0aWFsPENvcmVDb25maWc+KTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuY29uZmlnLCAuLi51cGRhdGVzIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB2YWx1ZVxuICAgKi9cbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBDb3JlQ29uZmlnPihrZXk6IEspOiBDb3JlQ29uZmlnW0tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGZlYXR1cmUgaXMgZW5hYmxlZFxuICAgKi9cbiAgaXNGZWF0dXJlRW5hYmxlZChmZWF0dXJlOiBrZXlvZiBDb3JlQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbmZpZ1tmZWF0dXJlXTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyB2YWx1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBBUEkgVVJMIGZvciBhIHNwZWNpZmljIGVudGl0eVxuICAgKi9cbiAgZ2V0QXBpVXJsKGVudGl0eU5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZy5hcGlCYXNlVXJsO1xuICAgIGlmICghZW50aXR5TmFtZSkgcmV0dXJuIGJhc2VVcmw7XG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7ZW50aXR5TmFtZX1gLnJlcGxhY2UoL1xcLysvZywgJy8nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIFVSTCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBwcm9jZXNzaW5nXG4gICAqL1xuICBzaG91bGRFeGNsdWRlVXJsKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmV4Y2x1ZGVVcmxzLnNvbWUoXG4gICAgICBleGNsdWRlUGF0dGVybiA9PiB1cmwuaW5jbHVkZXMoZXhjbHVkZVBhdHRlcm4pIHx8IG5ldyBSZWdFeHAoZXhjbHVkZVBhdHRlcm4pLnRlc3QodXJsKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbWV0aG9kIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHByb2Nlc3NpbmdcbiAgICovXG4gIHNob3VsZEV4Y2x1ZGVNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZXhjbHVkZU1ldGhvZHMuc29tZShcbiAgICAgIGV4Y2x1ZGVNZXRob2QgPT4gZXhjbHVkZU1ldGhvZC50b0xvd2VyQ2FzZSgpID09PSBtZXRob2QudG9Mb3dlckNhc2UoKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXN0b20gaGVhZGVycyB3aXRoIGR5bmFtaWMgdmFsdWVzIHJlc29sdmVkXG4gICAqL1xuICBnZXRDdXN0b21IZWFkZXJzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmN1c3RvbUhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaGVhZGVyc1trZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUoKSA6IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgY29uZmlndXJhdGlvbiB0byBkZWZhdWx0c1xuICAgKi9cbiAgcmVzZXRDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmluaXRpYWxpemVDb25maWcoKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlciBmdW5jdGlvbiBmb3IgZWFzeSBzZXR1cFxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVDb3JlQ29uZmlnKGNvbmZpZzogUGFydGlhbDxDb3JlQ29uZmlnPiA9IHt9KSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQ09SRV9DT05GSUcsXG4gICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgIH0sXG4gIF07XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgY29uZmlndXJhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvcmVDb25maWcob3ZlcnJpZGVzOiBQYXJ0aWFsPENvcmVDb25maWc+ID0ge30pOiBDb3JlQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5ERUZBVUxUX0NPTkZJRyxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH07XG59XG4iXX0=","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.1",
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",