@acontplus/ng-infrastructure 1.1.2 → 2.0.0
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.
|
@@ -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: "
|
|
314
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
313
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
314
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LoggingService, providedIn: 'root' });
|
|
315
315
|
}
|
|
316
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
316
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", 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: "
|
|
363
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
362
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TenantInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
363
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TenantInfo, providedIn: 'root' });
|
|
364
364
|
}
|
|
365
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
365
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", 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: "
|
|
398
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
397
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CorrelationInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
398
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CorrelationInfo, providedIn: 'root' });
|
|
399
399
|
}
|
|
400
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CorrelationInfo, decorators: [{
|
|
401
401
|
type: Injectable,
|
|
402
402
|
args: [{
|
|
403
403
|
providedIn: 'root',
|
|
@@ -441,6 +441,7 @@ const HTTP_CONTEXT_CONFIG = new InjectionToken('HTTP_CONTEXT_CONFIG', {
|
|
|
441
441
|
});
|
|
442
442
|
const httpContextInterceptor = (req, next) => {
|
|
443
443
|
const tokenProvider = inject(AUTH_TOKEN, { optional: true });
|
|
444
|
+
console.log(tokenProvider);
|
|
444
445
|
const router = inject(Router);
|
|
445
446
|
const tenantService = inject(TenantInfo);
|
|
446
447
|
const correlationService = inject(CorrelationInfo);
|
|
@@ -681,10 +682,10 @@ class ActiveRequestsTracker {
|
|
|
681
682
|
requests.splice(index, 1);
|
|
682
683
|
}
|
|
683
684
|
}
|
|
684
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
685
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
685
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
686
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ActiveRequestsTracker, providedIn: 'root' });
|
|
686
687
|
}
|
|
687
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
688
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ActiveRequestsTracker, decorators: [{
|
|
688
689
|
type: Injectable,
|
|
689
690
|
args: [{
|
|
690
691
|
providedIn: 'root',
|
|
@@ -739,10 +740,10 @@ class BaseHttpRepository {
|
|
|
739
740
|
delete(path = '') {
|
|
740
741
|
return this.http.delete(this.buildUrl(path));
|
|
741
742
|
}
|
|
742
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
743
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
743
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
744
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BaseHttpRepository });
|
|
744
745
|
}
|
|
745
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
746
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BaseHttpRepository, decorators: [{
|
|
746
747
|
type: Injectable
|
|
747
748
|
}] });
|
|
748
749
|
|
|
@@ -786,10 +787,10 @@ class GenericRepository extends BaseHttpRepository {
|
|
|
786
787
|
}
|
|
787
788
|
return params;
|
|
788
789
|
}
|
|
789
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
790
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
790
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
791
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: GenericRepository });
|
|
791
792
|
}
|
|
792
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
793
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: GenericRepository, decorators: [{
|
|
793
794
|
type: Injectable
|
|
794
795
|
}], ctorParameters: () => [] });
|
|
795
796
|
class SearchableGenericRepository extends GenericRepository {
|
|
@@ -798,10 +799,10 @@ class SearchableGenericRepository extends GenericRepository {
|
|
|
798
799
|
const params = this.buildParams(pagination, searchFilters);
|
|
799
800
|
return this.get('search', params);
|
|
800
801
|
}
|
|
801
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
802
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
802
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
803
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SearchableGenericRepository });
|
|
803
804
|
}
|
|
804
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
805
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SearchableGenericRepository, decorators: [{
|
|
805
806
|
type: Injectable
|
|
806
807
|
}] });
|
|
807
808
|
|
|
@@ -844,10 +845,10 @@ class RepositoryFactory {
|
|
|
844
845
|
remove: (id) => this.http.delete(buildUrl(idToString(id))),
|
|
845
846
|
};
|
|
846
847
|
}
|
|
847
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
848
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
848
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
849
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RepositoryFactory, providedIn: 'root' });
|
|
849
850
|
}
|
|
850
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
851
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RepositoryFactory, decorators: [{
|
|
851
852
|
type: Injectable,
|
|
852
853
|
args: [{ providedIn: 'root' }]
|
|
853
854
|
}] });
|
|
@@ -979,10 +980,10 @@ class CoreConfigService {
|
|
|
979
980
|
resetConfig() {
|
|
980
981
|
this.config = this.initializeConfig();
|
|
981
982
|
}
|
|
982
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
983
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
983
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
984
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoreConfigService, providedIn: 'root' });
|
|
984
985
|
}
|
|
985
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
986
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoreConfigService, decorators: [{
|
|
986
987
|
type: Injectable,
|
|
987
988
|
args: [{
|
|
988
989
|
providedIn: 'root',
|
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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 console.log(tokenProvider);\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> implements UseCase<\n TRequest,\n 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,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acontplus/ng-infrastructure",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
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
6
|
"@acontplus/core": "^1.1.1",
|
|
7
|
-
"@acontplus/ng-config": "^
|
|
8
|
-
"@acontplus/ng-notifications": "^
|
|
9
|
-
"@acontplus/ng-components": "^
|
|
10
|
-
"@angular/common": "^
|
|
11
|
-
"@angular/core": "^
|
|
7
|
+
"@acontplus/ng-config": "^2.0.0",
|
|
8
|
+
"@acontplus/ng-notifications": "^2.0.0",
|
|
9
|
+
"@acontplus/ng-components": "^2.0.0",
|
|
10
|
+
"@angular/common": "^21.0.6",
|
|
11
|
+
"@angular/core": "^21.0.6"
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"main": "fesm2022/acontplus-ng-infrastructure.mjs",
|
|
15
15
|
"module": "fesm2022/acontplus-ng-infrastructure.mjs",
|
|
16
|
-
"typings": "
|
|
16
|
+
"typings": "types/acontplus-ng-infrastructure.d.ts",
|
|
17
17
|
"files": [
|
|
18
18
|
"index.d.ts",
|
|
19
19
|
"*.d.ts",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"default": "./package.json"
|
|
76
76
|
},
|
|
77
77
|
".": {
|
|
78
|
-
"types": "./
|
|
78
|
+
"types": "./types/acontplus-ng-infrastructure.d.ts",
|
|
79
79
|
"default": "./fesm2022/acontplus-ng-infrastructure.mjs"
|
|
80
80
|
}
|
|
81
81
|
},
|
|
File without changes
|