@acontplus/ng-infrastructure 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -4,11 +4,10 @@ import { inject, Injectable, signal, computed, InjectionToken } from '@angular/c
|
|
|
4
4
|
import { retry, map, catchError, finalize } from 'rxjs/operators';
|
|
5
5
|
import { throwError, catchError as catchError$1, switchMap, lastValueFrom } from 'rxjs';
|
|
6
6
|
import { NotificationService } from '@acontplus/ng-notifications';
|
|
7
|
-
import { AUTH_TOKEN, ENVIRONMENT, DEFAULT_CONFIG as DEFAULT_CONFIG$1 } from '@acontplus/ng-config';
|
|
7
|
+
import { AUTH_TOKEN, ENVIRONMENT, CORE_CONFIG, DEFAULT_CONFIG as DEFAULT_CONFIG$1 } from '@acontplus/ng-config';
|
|
8
8
|
import { Router } from '@angular/router';
|
|
9
9
|
import { v4 } from 'uuid';
|
|
10
10
|
import { OverlayService } from '@acontplus/ng-components';
|
|
11
|
-
import { CORE_CONFIG } from '@acontplus/ng-config/src/lib/tokens/core-config-token';
|
|
12
11
|
|
|
13
12
|
// A token to use with HttpContext for skipping notifications on specific requests.
|
|
14
13
|
const SKIP_NOTIFICATION = new HttpContextToken(() => false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acontplus-ng-infrastructure.mjs","sources":["../tmp-esm2022/lib/interceptors/api-interceptor.js","../tmp-esm2022/lib/services/logging-service.js","../tmp-esm2022/lib/services/tenant-info.js","../tmp-esm2022/lib/services/correlation-info.js","../tmp-esm2022/lib/interceptors/http-context-interceptor.js","../tmp-esm2022/lib/interceptors/spinner-interceptor.js","../tmp-esm2022/lib/repositories/base-http-repository.js","../tmp-esm2022/lib/repositories/generic-repository.js","../tmp-esm2022/lib/repositories/repository-factory.js","../tmp-esm2022/lib/adapters/angular-http-adapter.js","../tmp-esm2022/lib/services/core-config-service.js","../tmp-esm2022/lib/use-cases/base-use-case.js","../tmp-esm2022/lib/use-cases/commands.js","../tmp-esm2022/lib/use-cases/queries.js","../tmp-esm2022/acontplus-ng-infrastructure.js"],"sourcesContent":["import { HttpResponse, HttpContextToken, } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, map, retry } from 'rxjs/operators';\nimport { throwError } from 'rxjs';\nimport { NotificationService } from '@acontplus/ng-notifications';\nimport { AUTH_TOKEN } from '@acontplus/ng-config';\n// A token to use with HttpContext for skipping notifications on specific requests.\nexport const SKIP_NOTIFICATION = new HttpContextToken(() => false);\n// A token to use with HttpContext for forcing notifications on specific requests (overrides exclusion patterns).\nexport const SHOW_NOTIFICATIONS = new HttpContextToken(() => undefined);\nexport const apiInterceptor = (req, next) => {\n const toastr = inject(NotificationService);\n const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n // Add authorization header if token is available\n let modifiedReq = req;\n const token = tokenProvider?.getToken();\n if (token) {\n modifiedReq = req.clone({\n setHeaders: { Authorization: `Bearer ${token}` },\n });\n }\n return next(modifiedReq).pipe(\n // Retries the request up to 2 times on failure with a 1-second delay.\n retry({ count: 2, delay: 1000 }), \n // Use the `map` operator to handle successful responses.\n map((event) => {\n if (event instanceof HttpResponse) {\n return handleSuccessResponse(event, toastr, req);\n }\n return event;\n }), \n // Use the `catchError` operator to handle any errors that occur.\n catchError((error) => handleErrorResponse(error, toastr)));\n};\n// --- Helper Functions ---\n/**\n * Handles successful HTTP responses, standardizes them, shows notifications, and transforms for consumers.\n */\nfunction handleSuccessResponse(event, notificationService, req) {\n const body = event.body;\n // Standardize the response to always have ApiResponse structure\n const standardizedResponse = standardizeApiResponse(body);\n // Handle toast notifications based on standardized response\n handleToastNotifications(standardizedResponse, notificationService, req);\n // Return the appropriate data based on response type\n return transformResponseForConsumers(standardizedResponse, event);\n}\n/**\n * Handles HTTP errors (from the interceptor chain, not backend ApiResponse).\n */\nfunction handleErrorResponse(error, notificationService) {\n const status = error.status;\n // Only show notifications for critical HTTP-level errors.\n // We avoid showing toasts for 4xx errors, which are handled by the component.\n if (status !== null && shouldShowCriticalErrorNotification(status)) {\n const message = getCriticalErrorMessage(error);\n const title = getErrorTitle(status);\n notificationService.error({\n message: message,\n title: title,\n config: { duration: 5000 },\n });\n }\n // Always re-throw the error so components/services can handle it.\n return throwError(() => error);\n}\n/**\n * Standardizes any response to follow the ApiResponse structure\n */\nfunction standardizeApiResponse(body) {\n // If it's already a proper ApiResponse, return as is\n if (isValidApiResponse(body)) {\n return body;\n }\n // If it's a raw data response (no wrapper), wrap it\n if (body && typeof body === 'object' && !('status' in body)) {\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n data: body,\n timestamp: new Date().toISOString(),\n };\n }\n // If it's a primitive value, wrap it\n if (body !== null && body !== undefined && typeof body !== 'object') {\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n data: body,\n timestamp: new Date().toISOString(),\n };\n }\n // If it's null/undefined, create a success response without data\n return {\n status: 'success',\n code: '200',\n message: 'Operation completed successfully',\n timestamp: new Date().toISOString(),\n };\n}\n/**\n * Handles toast notifications based on standardized response\n */\nfunction handleToastNotifications(response, notificationService, req) {\n const shouldShowToast = shouldShowSuccessToast(req);\n const forceShow = req.context.get(SHOW_NOTIFICATIONS);\n const skipNotification = req.context.get(SKIP_NOTIFICATION);\n // Determine if we should show notifications, considering overrides\n const showNotifications = forceShow !== undefined ? forceShow : shouldShowToast;\n if (skipNotification)\n return;\n // Dynamic handling: Use show() for runtime type selection\n if (response.message &&\n showNotifications &&\n ['success', 'warning', 'error'].includes(response.status)) {\n notificationService.show({\n type: response.status,\n message: response.message,\n });\n }\n // Handle warnings separately if needed\n if (response.status === 'warning' && response.warnings && response.warnings.length > 0) {\n response.warnings.forEach(warning => {\n notificationService.show({\n type: 'warning',\n message: warning.message,\n });\n });\n }\n // Handle errors separately if needed\n if (response.status === 'error' && response.errors && response.errors.length > 0) {\n response.errors.forEach(error => {\n notificationService.show({\n type: 'error',\n message: error.message,\n });\n });\n }\n}\n/**\n * Transforms the standardized response for consumers\n */\nfunction transformResponseForConsumers(response, originalEvent) {\n switch (response.status) {\n case 'success':\n // For success responses, return the data if it exists, otherwise the full response\n if (response.data !== undefined && response.data !== null) {\n return originalEvent.clone({ body: response.data });\n }\n // For message-only success responses, return the full response\n return originalEvent.clone({ body: response });\n case 'warning':\n // For warnings, return data if it exists, otherwise the full response\n if (response.data !== undefined && response.data !== null) {\n return originalEvent.clone({ body: response.data });\n }\n return originalEvent.clone({ body: response });\n case 'error':\n // Errors should be thrown, not returned\n throw response;\n default:\n return originalEvent.clone({ body: response });\n }\n}\n/**\n * Checks if a response is a valid ApiResponse\n */\nfunction isValidApiResponse(response) {\n if (response === null || typeof response !== 'object')\n return false;\n const r = response;\n return ('status' in r &&\n 'code' in r &&\n typeof r['status'] === 'string' &&\n ['success', 'error', 'warning'].includes(r['status']));\n}\n/**\n * Determines whether to show success toast notifications based on the request type.\n */\nfunction shouldShowSuccessToast(req) {\n const url = req.url?.toLowerCase() || '';\n const method = req.method?.toLowerCase() || '';\n // Never show for these cases\n const excludedPatterns = [\n 'get',\n '/list',\n '/search',\n '/query',\n '/page',\n '/paginated',\n '/health',\n '/status',\n '/ping',\n ];\n if (excludedPatterns.some(pattern => method === pattern || url.includes(pattern))) {\n return false;\n }\n // Always show for these methods\n if (['post', 'put', 'patch', 'delete'].includes(method)) {\n return true;\n }\n // Default behavior\n return method !== 'get';\n}\n/**\n * Determines if we should show a notification for this HTTP error.\n */\nfunction shouldShowCriticalErrorNotification(status) {\n // Show notifications for:\n // - Network errors (status 0)\n // - Server errors (5xx)\n return status === 0 || (status >= 500 && status < 600);\n}\n/**\n * Gets the appropriate title for error notifications.\n */\nfunction getErrorTitle(status) {\n if (status === 0)\n return 'Connection Error';\n if (status >= 500)\n return 'Server Error';\n return 'Error';\n}\n/**\n * Gets the appropriate message for critical errors.\n */\nfunction getCriticalErrorMessage(error) {\n if (error.status === 0) {\n return 'Unable to connect to the server. Please check your network connection.';\n }\n if (error.status >= 500) {\n return (error.error?.message || error.message || 'A server error occurred. Please try again later.');\n }\n return error.error?.message || error.message || 'An unexpected error occurred';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYXBpLWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxZQUFZLEVBR1osZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU1RSxpSEFBaUg7QUFDakgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBc0IsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFN0YsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFN0QsaURBQWlEO0lBQ2pELElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUN0QixNQUFNLEtBQUss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QUFPLGtCQUFrQixDQUFDO0lBQzVDLElBQUksTUFBTSxJQUFJLEdBQUc7UUFBRSxPQUFPLGNBQWMsQ0FBQztJQUN6QyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLEtBQXdCO0lBQ3ZELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLHdFQUF3RSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUNMLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksa0RBQWtELENBQzVGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLDhCQUE4QixDQUFDO0FBQ2pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwSW50ZXJjZXB0b3JGbixcbiAgSHR0cEV2ZW50LFxuICBIdHRwUmVzcG9uc2UsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cENvbnRleHRUb2tlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BhY29udHBsdXMvbmctbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBVVRIX1RPS0VOIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb25maWcnO1xuXG4vLyBBIHRva2VuIHRvIHVzZSB3aXRoIEh0dHBDb250ZXh0IGZvciBza2lwcGluZyBub3RpZmljYXRpb25zIG9uIHNwZWNpZmljIHJlcXVlc3RzLlxuZXhwb3J0IGNvbnN0IFNLSVBfTk9USUZJQ0FUSU9OID0gbmV3IEh0dHBDb250ZXh0VG9rZW48Ym9vbGVhbj4oKCkgPT4gZmFsc2UpO1xuXG4vLyBBIHRva2VuIHRvIHVzZSB3aXRoIEh0dHBDb250ZXh0IGZvciBmb3JjaW5nIG5vdGlmaWNhdGlvbnMgb24gc3BlY2lmaWMgcmVxdWVzdHMgKG92ZXJyaWRlcyBleGNsdXNpb24gcGF0dGVybnMpLlxuZXhwb3J0IGNvbnN0IFNIT1dfTk9USUZJQ0FUSU9OUyA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4gfCB1bmRlZmluZWQ+KCgpID0+IHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBhcGlJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHRvYXN0ciA9IGluamVjdChOb3RpZmljYXRpb25TZXJ2aWNlKTtcbiAgY29uc3QgdG9rZW5Qcm92aWRlciA9IGluamVjdChBVVRIX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiB0b2tlbiBpcyBhdmFpbGFibGVcbiAgbGV0IG1vZGlmaWVkUmVxID0gcmVxO1xuICBjb25zdCB0b2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFRva2VuKCk7XG4gIGlmICh0b2tlbikge1xuICAgIG1vZGlmaWVkUmVxID0gcmVxLmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KG1vZGlmaWVkUmVxKS5waXBlKFxuICAgIC8vIFJldHJpZXMgdGhlIHJlcXVlc3QgdXAgdG8gMiB0aW1lcyBvbiBmYWlsdXJlIHdpdGggYSAxLXNlY29uZCBkZWxheS5cbiAgICByZXRyeSh7IGNvdW50OiAyLCBkZWxheTogMTAwMCB9KSxcbiAgICAvLyBVc2UgdGhlIGBtYXBgIG9wZXJhdG9yIHRvIGhhbmRsZSBzdWNjZXNzZnVsIHJlc3BvbnNlcy5cbiAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8dW5rbm93bj4pID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlKGV2ZW50LCB0b2FzdHIsIHJlcSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSksXG4gICAgLy8gVXNlIHRoZSBgY2F0Y2hFcnJvcmAgb3BlcmF0b3IgdG8gaGFuZGxlIGFueSBlcnJvcnMgdGhhdCBvY2N1ci5cbiAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IGhhbmRsZUVycm9yUmVzcG9uc2UoZXJyb3IsIHRvYXN0cikpLFxuICApO1xufTtcblxuLy8gLS0tIEhlbHBlciBGdW5jdGlvbnMgLS0tXG5cbi8qKlxuICogSGFuZGxlcyBzdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2VzLCBzdGFuZGFyZGl6ZXMgdGhlbSwgc2hvd3Mgbm90aWZpY2F0aW9ucywgYW5kIHRyYW5zZm9ybXMgZm9yIGNvbnN1bWVycy5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlKFxuICBldmVudDogSHR0cFJlc3BvbnNlPHVua25vd24+LFxuICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuKTogSHR0cFJlc3BvbnNlPHVua25vd24+IHtcbiAgY29uc3QgYm9keSA9IGV2ZW50LmJvZHk7XG5cbiAgLy8gU3RhbmRhcmRpemUgdGhlIHJlc3BvbnNlIHRvIGFsd2F5cyBoYXZlIEFwaVJlc3BvbnNlIHN0cnVjdHVyZVxuICBjb25zdCBzdGFuZGFyZGl6ZWRSZXNwb25zZSA9IHN0YW5kYXJkaXplQXBpUmVzcG9uc2UoYm9keSk7XG5cbiAgLy8gSGFuZGxlIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gc3RhbmRhcmRpemVkIHJlc3BvbnNlXG4gIGhhbmRsZVRvYXN0Tm90aWZpY2F0aW9ucyhzdGFuZGFyZGl6ZWRSZXNwb25zZSwgbm90aWZpY2F0aW9uU2VydmljZSwgcmVxKTtcblxuICAvLyBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGRhdGEgYmFzZWQgb24gcmVzcG9uc2UgdHlwZVxuICByZXR1cm4gdHJhbnNmb3JtUmVzcG9uc2VGb3JDb25zdW1lcnMoc3RhbmRhcmRpemVkUmVzcG9uc2UsIGV2ZW50KTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIEhUVFAgZXJyb3JzIChmcm9tIHRoZSBpbnRlcmNlcHRvciBjaGFpbiwgbm90IGJhY2tlbmQgQXBpUmVzcG9uc2UpLlxuICovXG5mdW5jdGlvbiBoYW5kbGVFcnJvclJlc3BvbnNlKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSwgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSkge1xuICBjb25zdCBzdGF0dXMgPSBlcnJvci5zdGF0dXM7XG5cbiAgLy8gT25seSBzaG93IG5vdGlmaWNhdGlvbnMgZm9yIGNyaXRpY2FsIEhUVFAtbGV2ZWwgZXJyb3JzLlxuICAvLyBXZSBhdm9pZCBzaG93aW5nIHRvYXN0cyBmb3IgNHh4IGVycm9ycywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgdGhlIGNvbXBvbmVudC5cbiAgaWYgKHN0YXR1cyAhPT0gbnVsbCAmJiBzaG91bGRTaG93Q3JpdGljYWxFcnJvck5vdGlmaWNhdGlvbihzdGF0dXMpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGdldENyaXRpY2FsRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICBjb25zdCB0aXRsZSA9IGdldEVycm9yVGl0bGUoc3RhdHVzKTtcblxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3Ioe1xuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIGNvbmZpZzogeyBkdXJhdGlvbjogNTAwMCB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQWx3YXlzIHJlLXRocm93IHRoZSBlcnJvciBzbyBjb21wb25lbnRzL3NlcnZpY2VzIGNhbiBoYW5kbGUgaXQuXG4gIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZGl6ZXMgYW55IHJlc3BvbnNlIHRvIGZvbGxvdyB0aGUgQXBpUmVzcG9uc2Ugc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIHN0YW5kYXJkaXplQXBpUmVzcG9uc2UoYm9keTogdW5rbm93bik6IEFwaVJlc3BvbnNlPHVua25vd24+IHtcbiAgLy8gSWYgaXQncyBhbHJlYWR5IGEgcHJvcGVyIEFwaVJlc3BvbnNlLCByZXR1cm4gYXMgaXNcbiAgaWYgKGlzVmFsaWRBcGlSZXNwb25zZShib2R5KSkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLy8gSWYgaXQncyBhIHJhdyBkYXRhIHJlc3BvbnNlIChubyB3cmFwcGVyKSwgd3JhcCBpdFxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgJiYgISgnc3RhdHVzJyBpbiBib2R5KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgIGNvZGU6ICcyMDAnLFxuICAgICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgIGRhdGE6IGJvZHksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gSWYgaXQncyBhIHByaW1pdGl2ZSB2YWx1ZSwgd3JhcCBpdFxuICBpZiAoYm9keSAhPT0gbnVsbCAmJiBib2R5ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgY29kZTogJzIwMCcsXG4gICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgZGF0YTogYm9keSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICAvLyBJZiBpdCdzIG51bGwvdW5kZWZpbmVkLCBjcmVhdGUgYSBzdWNjZXNzIHJlc3BvbnNlIHdpdGhvdXQgZGF0YVxuICByZXR1cm4ge1xuICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgIGNvZGU6ICcyMDAnLFxuICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIH07XG59XG5cbi8qKlxuICogSGFuZGxlcyB0b2FzdCBub3RpZmljYXRpb25zIGJhc2VkIG9uIHN0YW5kYXJkaXplZCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBoYW5kbGVUb2FzdE5vdGlmaWNhdGlvbnMoXG4gIHJlc3BvbnNlOiBBcGlSZXNwb25zZTx1bmtub3duPixcbiAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcbik6IHZvaWQge1xuICBjb25zdCBzaG91bGRTaG93VG9hc3QgPSBzaG91bGRTaG93U3VjY2Vzc1RvYXN0KHJlcSk7XG4gIGNvbnN0IGZvcmNlU2hvdyA9IHJlcS5jb250ZXh0LmdldChTSE9XX05PVElGSUNBVElPTlMpO1xuICBjb25zdCBza2lwTm90aWZpY2F0aW9uID0gcmVxLmNvbnRleHQuZ2V0KFNLSVBfTk9USUZJQ0FUSU9OKTtcblxuICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHNob3cgbm90aWZpY2F0aW9ucywgY29uc2lkZXJpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IHNob3dOb3RpZmljYXRpb25zID0gZm9yY2VTaG93ICE9PSB1bmRlZmluZWQgPyBmb3JjZVNob3cgOiBzaG91bGRTaG93VG9hc3Q7XG5cbiAgaWYgKHNraXBOb3RpZmljYXRpb24pIHJldHVybjtcblxuICAvLyBEeW5hbWljIGhhbmRsaW5nOiBVc2Ugc2hvdygpIGZvciBydW50aW1lIHR5cGUgc2VsZWN0aW9uXG4gIGlmIChcbiAgICByZXNwb25zZS5tZXNzYWdlICYmXG4gICAgc2hvd05vdGlmaWNhdGlvbnMgJiZcbiAgICBbJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdlcnJvciddLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cylcbiAgKSB7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5zaG93KHtcbiAgICAgIHR5cGU6IHJlc3BvbnNlLnN0YXR1cyBhcyAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB3YXJuaW5ncyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnd2FybmluZycgJiYgcmVzcG9uc2Uud2FybmluZ3MgJiYgcmVzcG9uc2Uud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlLnNob3coe1xuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIG1lc3NhZ2U6IHdhcm5pbmcubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSGFuZGxlIGVycm9ycyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmVycm9ycyAmJiByZXNwb25zZS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLmVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHN0YW5kYXJkaXplZCByZXNwb25zZSBmb3IgY29uc3VtZXJzXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlRm9yQ29uc3VtZXJzKFxuICByZXNwb25zZTogQXBpUmVzcG9uc2U8dW5rbm93bj4sXG4gIG9yaWdpbmFsRXZlbnQ6IEh0dHBSZXNwb25zZTx1bmtub3duPixcbik6IEh0dHBSZXNwb25zZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAvLyBGb3Igc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtZXNzYWdlLW9ubHkgc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgcmV0dXJuIG9yaWdpbmFsRXZlbnQuY2xvbmUoeyBib2R5OiByZXNwb25zZSB9KTtcblxuICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgLy8gRm9yIHdhcm5pbmdzLCByZXR1cm4gZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICAvLyBFcnJvcnMgc2hvdWxkIGJlIHRocm93biwgbm90IHJldHVybmVkXG4gICAgICB0aHJvdyByZXNwb25zZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb3JpZ2luYWxFdmVudC5jbG9uZSh7IGJvZHk6IHJlc3BvbnNlIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcmVzcG9uc2UgaXMgYSB2YWxpZCBBcGlSZXNwb25zZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXBpUmVzcG9uc2UocmVzcG9uc2U6IHVua25vd24pOiByZXNwb25zZSBpcyBBcGlSZXNwb25zZTx1bmtub3duPiB7XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzcG9uc2UgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHIgPSByZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICAnc3RhdHVzJyBpbiByICYmXG4gICAgJ2NvZGUnIGluIHIgJiZcbiAgICB0eXBlb2Ygclsnc3RhdHVzJ10gPT09ICdzdHJpbmcnICYmXG4gICAgWydzdWNjZXNzJywgJ2Vycm9yJywgJ3dhcm5pbmcnXS5pbmNsdWRlcyhyWydzdGF0dXMnXSlcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBzdWNjZXNzIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gdGhlIHJlcXVlc3QgdHlwZS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2hvd1N1Y2Nlc3NUb2FzdChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogYm9vbGVhbiB7XG4gIGNvbnN0IHVybCA9IHJlcS51cmw/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgLy8gTmV2ZXIgc2hvdyBmb3IgdGhlc2UgY2FzZXNcbiAgY29uc3QgZXhjbHVkZWRQYXR0ZXJucyA9IFtcbiAgICAnZ2V0JyxcbiAgICAnL2xpc3QnLFxuICAgICcvc2VhcmNoJyxcbiAgICAnL3F1ZXJ5JyxcbiAgICAnL3BhZ2UnLFxuICAgICcvcGFnaW5hdGVkJyxcbiAgICAnL2hlYWx0aCcsXG4gICAgJy9zdGF0dXMnLFxuICAgICcvcGluZycsXG4gIF07XG5cbiAgaWYgKGV4Y2x1ZGVkUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IG1ldGhvZCA9PT0gcGF0dGVybiB8fCB1cmwuaW5jbHVkZXMocGF0dGVybikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQWx3YXlzIHNob3cgZm9yIHRoZXNlIG1ldGhvZHNcbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnZGVsZXRlJ10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICByZXR1cm4gbWV0aG9kICE9PSAnZ2V0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHdlIHNob3VsZCBzaG93IGEgbm90aWZpY2F0aW9uIGZvciB0aGlzIEhUVFAgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNob3dDcml0aWNhbEVycm9yTm90aWZpY2F0aW9uKHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gIC8vIFNob3cgbm90aWZpY2F0aW9ucyBmb3I6XG4gIC8vIC0gTmV0d29yayBlcnJvcnMgKHN0YXR1cyAwKVxuICAvLyAtIFNlcnZlciBlcnJvcnMgKDV4eClcbiAgcmV0dXJuIHN0YXR1cyA9PT0gMCB8fCAoc3RhdHVzID49IDUwMCAmJiBzdGF0dXMgPCA2MDApO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIHRpdGxlIGZvciBlcnJvciBub3RpZmljYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvclRpdGxlKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHN0YXR1cyA9PT0gMCkgcmV0dXJuICdDb25uZWN0aW9uIEVycm9yJztcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHJldHVybiAnU2VydmVyIEVycm9yJztcbiAgcmV0dXJuICdFcnJvcic7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSBmb3IgY3JpdGljYWwgZXJyb3JzLlxuICovXG5mdW5jdGlvbiBnZXRDcml0aWNhbEVycm9yTWVzc2FnZShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBzdHJpbmcge1xuICBpZiAoZXJyb3Iuc3RhdHVzID09PSAwKSB7XG4gICAgcmV0dXJuICdVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uJztcbiAgfVxuXG4gIGlmIChlcnJvci5zdGF0dXMgPj0gNTAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0Egc2VydmVyIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnO1xufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\nexport class LoggingService {\n environment = inject(ENVIRONMENT);\n log(level, message, context) {\n if (this.environment.isProduction) {\n // Production logging (e.g., to external service)\n this.logToExternalService(level, message, context);\n }\n else {\n // Development logging - only log in development mode\n if (!this.environment.isProduction) {\n console[level](`[${level.toUpperCase()}] ${message}`, context);\n }\n }\n }\n info(message, context) {\n this.log('info', message, context);\n }\n warn(message, context) {\n this.log('warn', message, context);\n }\n error(message, context) {\n this.log('error', message, context);\n }\n // HTTP Request Logging\n logHttpRequest(log) {\n this.info(`HTTP Request - ${log.method} ${log.url}`, {\n requestId: log.requestId,\n correlationId: log.correlationId,\n tenantId: log.tenantId,\n headers: log.headers,\n isCustomUrl: log.isCustomUrl,\n timestamp: log.timestamp,\n });\n }\n // HTTP Error Logging\n logHttpError(error) {\n this.error(`HTTP Error - ${error.method} ${error.url}`, {\n status: error.status,\n statusText: error.statusText,\n requestId: error.requestId,\n correlationId: error.correlationId,\n tenantId: error.tenantId,\n errorDetails: error.errorDetails,\n environment: error.environment,\n timestamp: error.timestamp,\n });\n }\n // Network Error Logging\n logNetworkError(correlationId) {\n this.error('Network connection failed', {\n type: 'network-error',\n correlationId,\n userAgent: navigator.userAgent,\n online: navigator.onLine,\n });\n }\n // Rate Limit Error Logging\n logRateLimitError(correlationId, url) {\n this.warn('Rate limit exceeded', {\n type: 'rate-limit-error',\n correlationId,\n url,\n });\n }\n logToExternalService(_level, _message, _context) {\n // Implement external logging service integration\n // e.g., Sentry, LogRocket, etc.\n // This is a placeholder for production logging implementation\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LoggingService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LoggingService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9zZXJ2aWNlcy9sb2dnaW5nLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU1uRCxNQUFNLE9BQU8sY0FBYztJQUNqQixXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFDLEdBQUcsQ0FBQyxLQUFnQyxFQUFFLE9BQWUsRUFBRSxPQUFpQjtRQUN0RSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUM7YUFBTSxDQUFDO1lBQ04scURBQXFEO1lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFpQjtRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFlLEVBQUUsT0FBaUI7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBZSxFQUFFLE9BQWlCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLGNBQWMsQ0FBQyxHQUFtQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuRCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDeEIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO1lBQ2hDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQzVCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLFlBQVksQ0FBQyxLQUFtQjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsZUFBZSxDQUFDLGFBQXFCO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUU7WUFDdEMsSUFBSSxFQUFFLGVBQWU7WUFDckIsYUFBYTtZQUNiLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztZQUM5QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixpQkFBaUIsQ0FBQyxhQUFxQixFQUFFLEdBQVc7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMvQixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLGFBQWE7WUFDYixHQUFHO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLFFBQWtCO1FBQy9FLGlEQUFpRDtRQUNqRCxnQ0FBZ0M7UUFDaEMsOERBQThEO0lBQ2hFLENBQUM7dUdBNUVVLGNBQWM7MkdBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0TG9nLCBIdHRwRXJyb3JMb2cgfSBmcm9tICcuLi9pbnRlcmNlcHRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9nZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIGVudmlyb25tZW50ID0gaW5qZWN0KEVOVklST05NRU5UKTtcblxuICBsb2cobGV2ZWw6ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIFByb2R1Y3Rpb24gbG9nZ2luZyAoZS5nLiwgdG8gZXh0ZXJuYWwgc2VydmljZSlcbiAgICAgIHRoaXMubG9nVG9FeHRlcm5hbFNlcnZpY2UobGV2ZWwsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXZlbG9wbWVudCBsb2dnaW5nIC0gb25seSBsb2cgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuICAgICAgaWYgKCF0aGlzLmVudmlyb25tZW50LmlzUHJvZHVjdGlvbikge1xuICAgICAgICBjb25zb2xlW2xldmVsXShgWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnaW5mbycsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICB9XG5cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ3dhcm4nLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIEhUVFAgUmVxdWVzdCBMb2dnaW5nXG4gIGxvZ0h0dHBSZXF1ZXN0KGxvZzogSHR0cFJlcXVlc3RMb2cpOiB2b2lkIHtcbiAgICB0aGlzLmluZm8oYEhUVFAgUmVxdWVzdCAtICR7bG9nLm1ldGhvZH0gJHtsb2cudXJsfWAsIHtcbiAgICAgIHJlcXVlc3RJZDogbG9nLnJlcXVlc3RJZCxcbiAgICAgIGNvcnJlbGF0aW9uSWQ6IGxvZy5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGxvZy50ZW5hbnRJZCxcbiAgICAgIGhlYWRlcnM6IGxvZy5oZWFkZXJzLFxuICAgICAgaXNDdXN0b21Vcmw6IGxvZy5pc0N1c3RvbVVybCxcbiAgICAgIHRpbWVzdGFtcDogbG9nLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhUVFAgRXJyb3IgTG9nZ2luZ1xuICBsb2dIdHRwRXJyb3IoZXJyb3I6IEh0dHBFcnJvckxvZyk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IoYEhUVFAgRXJyb3IgLSAke2Vycm9yLm1ldGhvZH0gJHtlcnJvci51cmx9YCwge1xuICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgcmVxdWVzdElkOiBlcnJvci5yZXF1ZXN0SWQsXG4gICAgICBjb3JyZWxhdGlvbklkOiBlcnJvci5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGVycm9yLnRlbmFudElkLFxuICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvckRldGFpbHMsXG4gICAgICBlbnZpcm9ubWVudDogZXJyb3IuZW52aXJvbm1lbnQsXG4gICAgICB0aW1lc3RhbXA6IGVycm9yLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5ldHdvcmsgRXJyb3IgTG9nZ2luZ1xuICBsb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvcignTmV0d29yayBjb25uZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIHR5cGU6ICduZXR3b3JrLWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSYXRlIExpbWl0IEVycm9yIExvZ2dpbmdcbiAgbG9nUmF0ZUxpbWl0RXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nLCB1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud2FybignUmF0ZSBsaW1pdCBleGNlZWRlZCcsIHtcbiAgICAgIHR5cGU6ICdyYXRlLWxpbWl0LWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1cmwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1RvRXh0ZXJuYWxTZXJ2aWNlKF9sZXZlbDogc3RyaW5nLCBfbWVzc2FnZTogc3RyaW5nLCBfY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICAvLyBJbXBsZW1lbnQgZXh0ZXJuYWwgbG9nZ2luZyBzZXJ2aWNlIGludGVncmF0aW9uXG4gICAgLy8gZS5nLiwgU2VudHJ5LCBMb2dSb2NrZXQsIGV0Yy5cbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIHByb2R1Y3Rpb24gbG9nZ2luZyBpbXBsZW1lbnRhdGlvblxuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { LoggingService } from './logging-service';\nimport * as i0 from \"@angular/core\";\nexport class TenantInfo {\n tenantId = null;\n logger = inject(LoggingService);\n getTenantId() {\n if (!this.tenantId) {\n // Get from localStorage, sessionStorage, or JWT token\n this.tenantId =\n localStorage.getItem('tenantId') ||\n sessionStorage.getItem('tenantId') ||\n this.extractTenantFromToken() ||\n 'default-tenant';\n }\n return this.tenantId;\n }\n getCurrentTenant() {\n return this.tenantId;\n }\n setTenantId(tenantId) {\n this.tenantId = tenantId;\n localStorage.setItem('tenantId', tenantId);\n }\n setTenant(tenantId) {\n this.setTenantId(tenantId);\n }\n handleForbidden() {\n this.logger.error('Access forbidden for tenant:', this.tenantId);\n // Redirect to tenant selection or show error message\n // this.router.navigate(['/tenant-access-denied']);\n }\n extractTenantFromToken() {\n // Implementation depends on your JWT token structure\n // This is a placeholder\n return null;\n }\n clearTenant() {\n this.tenantId = null;\n localStorage.removeItem('tenantId');\n sessionStorage.removeItem('tenantId');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: TenantInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: TenantInfo, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: TenantInfo, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLFVBQVU7SUFDYixRQUFRLEdBQWtCLElBQUksQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhDLFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsUUFBUTtnQkFDWCxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDaEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDN0IsZ0JBQWdCLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLHFEQUFxRDtRQUNyRCxtREFBbUQ7SUFDckQsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixxREFBcUQ7UUFDckQsd0JBQXdCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQzt1R0E3Q1UsVUFBVTsyR0FBVixVQUFVLGNBRlQsTUFBTTs7MkZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnaW5nLXNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGVuYW50SW5mbyB7XG4gIHByaXZhdGUgdGVuYW50SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvZ2dlciA9IGluamVjdChMb2dnaW5nU2VydmljZSk7XG5cbiAgZ2V0VGVuYW50SWQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMudGVuYW50SWQpIHtcbiAgICAgIC8vIEdldCBmcm9tIGxvY2FsU3RvcmFnZSwgc2Vzc2lvblN0b3JhZ2UsIG9yIEpXVCB0b2tlblxuICAgICAgdGhpcy50ZW5hbnRJZCA9XG4gICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZW5hbnRJZCcpIHx8XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RlbmFudElkJykgfHxcbiAgICAgICAgdGhpcy5leHRyYWN0VGVuYW50RnJvbVRva2VuKCkgfHxcbiAgICAgICAgJ2RlZmF1bHQtdGVuYW50JztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGVuYW50SWQ7XG4gIH1cblxuICBnZXRDdXJyZW50VGVuYW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRlbmFudElkO1xuICB9XG5cbiAgc2V0VGVuYW50SWQodGVuYW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudGVuYW50SWQgPSB0ZW5hbnRJZDtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVuYW50SWQnLCB0ZW5hbnRJZCk7XG4gIH1cblxuICBzZXRUZW5hbnQodGVuYW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0VGVuYW50SWQodGVuYW50SWQpO1xuICB9XG5cbiAgaGFuZGxlRm9yYmlkZGVuKCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmVycm9yKCdBY2Nlc3MgZm9yYmlkZGVuIGZvciB0ZW5hbnQ6JywgdGhpcy50ZW5hbnRJZCk7XG4gICAgLy8gUmVkaXJlY3QgdG8gdGVuYW50IHNlbGVjdGlvbiBvciBzaG93IGVycm9yIG1lc3NhZ2VcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy90ZW5hbnQtYWNjZXNzLWRlbmllZCddKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFRlbmFudEZyb21Ub2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIHlvdXIgSldUIHRva2VuIHN0cnVjdHVyZVxuICAgIC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlclxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY2xlYXJUZW5hbnQoKTogdm9pZCB7XG4gICAgdGhpcy50ZW5hbnRJZCA9IG51bGw7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3RlbmFudElkJyk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGVuYW50SWQnKTtcbiAgfVxufVxuIl19","import { Injectable, signal, computed } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as i0 from \"@angular/core\";\nexport class CorrelationInfo {\n correlationId = signal(null, ...(ngDevMode ? [{ debugName: \"correlationId\" }] : []));\n CORRELATION_KEY = 'correlation-id';\n // Signal-based getter for reactive updates\n currentCorrelationId = computed(() => this.correlationId(), ...(ngDevMode ? [{ debugName: \"currentCorrelationId\" }] : []));\n getOrCreateCorrelationId() {\n if (!this.correlationId()) {\n // Try to get from sessionStorage first (for page refreshes)\n const id = sessionStorage.getItem(this.CORRELATION_KEY) || uuidv4();\n this.correlationId.set(id);\n sessionStorage.setItem(this.CORRELATION_KEY, id);\n }\n return this.correlationId();\n }\n setCorrelationId(correlationId) {\n this.correlationId.set(correlationId);\n sessionStorage.setItem(this.CORRELATION_KEY, correlationId);\n }\n resetCorrelationId() {\n this.correlationId.set(null);\n sessionStorage.removeItem(this.CORRELATION_KEY);\n }\n getId() {\n return this.getOrCreateCorrelationId();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CorrelationInfo, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CorrelationInfo, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CorrelationInfo, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24taW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29ycmVsYXRpb24taW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3BDLE1BQU0sT0FBTyxlQUFlO0lBQ2xCLGFBQWEsR0FBRyxNQUFNLENBQWdCLElBQUkseURBQUMsQ0FBQztJQUNuQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7SUFFcEQsMkNBQTJDO0lBQ2xDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdFQUFDLENBQUM7SUFFckUsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUMxQiw0REFBNEQ7WUFDNUQsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUcsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBcUI7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7dUdBN0JVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JyZWxhdGlvbkluZm8ge1xuICBwcml2YXRlIGNvcnJlbGF0aW9uSWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ09SUkVMQVRJT05fS0VZID0gJ2NvcnJlbGF0aW9uLWlkJztcblxuICAvLyBTaWduYWwtYmFzZWQgZ2V0dGVyIGZvciByZWFjdGl2ZSB1cGRhdGVzXG4gIHJlYWRvbmx5IGN1cnJlbnRDb3JyZWxhdGlvbklkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb3JyZWxhdGlvbklkKCkpO1xuXG4gIGdldE9yQ3JlYXRlQ29ycmVsYXRpb25JZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb3JyZWxhdGlvbklkKCkpIHtcbiAgICAgIC8vIFRyeSB0byBnZXQgZnJvbSBzZXNzaW9uU3RvcmFnZSBmaXJzdCAoZm9yIHBhZ2UgcmVmcmVzaGVzKVxuICAgICAgY29uc3QgaWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ09SUkVMQVRJT05fS0VZKSB8fCB1dWlkdjQoKTtcbiAgICAgIHRoaXMuY29ycmVsYXRpb25JZC5zZXQoaWQpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNPUlJFTEFUSU9OX0tFWSwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb3JyZWxhdGlvbklkKCkhO1xuICB9XG5cbiAgc2V0Q29ycmVsYXRpb25JZChjb3JyZWxhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvcnJlbGF0aW9uSWQuc2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5DT1JSRUxBVElPTl9LRVksIGNvcnJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcmVzZXRDb3JyZWxhdGlvbklkKCk6IHZvaWQge1xuICAgIHRoaXMuY29ycmVsYXRpb25JZC5zZXQobnVsbCk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNPUlJFTEFUSU9OX0tFWSk7XG4gIH1cblxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlQ29ycmVsYXRpb25JZCgpO1xuICB9XG59XG4iXX0=","import { inject, InjectionToken } from '@angular/core'; // Import InjectionToken\nimport { Router } from '@angular/router';\nimport { HttpContextToken, HttpContext, } from '@angular/common/http';\nimport { catchError, throwError, switchMap } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n// Environment and configuration\nimport { AUTH_TOKEN, ENVIRONMENT } from '@acontplus/ng-config';\n// Services\nimport { TenantInfo } from '../services/tenant-info';\nimport { CorrelationInfo } from '../services/correlation-info';\nimport { LoggingService } from '../services/logging-service';\n// HTTP Context tokens\nconst CUSTOM_URL = new HttpContextToken(() => false);\nconst SKIP_CONTEXT_HEADERS = new HttpContextToken(() => false);\nconst CUSTOM_HEADERS = new HttpContextToken(() => ({}));\n// Helper functions for HTTP context\nexport function customUrl() {\n return new HttpContext().set(CUSTOM_URL, true);\n}\nexport function skipContextHeaders() {\n return new HttpContext().set(SKIP_CONTEXT_HEADERS, true);\n}\nexport function withCustomHeaders(headers) {\n return new HttpContext().set(CUSTOM_HEADERS, headers);\n}\n// Default configuration\nconst DEFAULT_CONFIG = {\n enableCorrelationTracking: true,\n enableRequestLogging: false, // This will be overridden by environment.isProduction\n enableErrorLogging: true,\n customHeaders: {},\n clientVersion: '1.0.0',\n tenantIdHeader: 'Tenant-Id',\n correlationIdHeader: 'Correlation-Id',\n requestIdHeader: 'Request-Id',\n timestampHeader: 'Timestamp',\n excludeUrls: [],\n includeAuthToken: true,\n baseUrlInjection: true,\n refreshTokenCallback: undefined,\n logoutCallback: undefined,\n};\n// Injection token for configuration - FIXED\nexport const HTTP_CONTEXT_CONFIG = new InjectionToken('HTTP_CONTEXT_CONFIG', {\n factory: () => DEFAULT_CONFIG, // Provide a default factory in case it's not provided\n});\nexport const httpContextInterceptor = (req, next) => {\n const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n const router = inject(Router);\n const tenantService = inject(TenantInfo);\n const correlationService = inject(CorrelationInfo);\n const loggingService = inject(LoggingService);\n const environment = inject(ENVIRONMENT);\n // Get configuration (with fallback to default) - FIXED\n const config = {\n ...DEFAULT_CONFIG,\n // The default enableRequestLogging needs to be set based on environment here,\n // as it's dynamic, and DEFAULT_CONFIG is static.\n enableRequestLogging: !environment.isProduction,\n ...inject(HTTP_CONTEXT_CONFIG, { optional: true }),\n };\n // Check HTTP context tokens\n const isCustomUrl = req.context.get(CUSTOM_URL);\n const skipHeaders = req.context.get(SKIP_CONTEXT_HEADERS);\n const contextHeaders = req.context.get(CUSTOM_HEADERS);\n // Skip processing if headers are disabled for this request\n if (skipHeaders) {\n return next(req);\n }\n // Check if URL should be excluded\n const shouldExclude = config.excludeUrls.some(url => req.url.includes(url) || new RegExp(url).test(req.url));\n if (shouldExclude) {\n return next(req);\n }\n // Skip auth for login, register, and refresh endpoints\n const skipAuth = req.url.includes('/login') || req.url.includes('/register') || req.url.includes('/refresh');\n // Handle URL transformation\n const baseUrl = environment.apiBaseUrl;\n const finalUrl = isCustomUrl || !config.baseUrlInjection ? req.url : `${baseUrl}${req.url}`;\n // Generate or get correlation context\n const correlationId = config.enableCorrelationTracking\n ? correlationService.getOrCreateCorrelationId()\n : uuidv4();\n const tenantId = tenantService.getTenantId();\n const requestId = uuidv4();\n // Build dynamic headers\n const headers = {};\n // Core context headers\n headers[config.requestIdHeader] = requestId;\n if (config.enableCorrelationTracking) {\n headers[config.correlationIdHeader] = correlationId;\n }\n if (tenantId) {\n headers[config.tenantIdHeader] = tenantId;\n }\n headers[config.timestampHeader] = new Date().toISOString();\n // Client information\n if (config.clientVersion) {\n headers['Client-Version'] = config.clientVersion;\n }\n // Environment client ID\n if (environment.clientId) {\n headers['Client-Id'] = environment.clientId;\n }\n // Add authorization header if configured and available\n if (config.includeAuthToken && !skipAuth) {\n const authToken = tokenProvider?.getToken();\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n }\n // Process custom headers from configuration (can be static values or dynamic functions)\n Object.entries(config.customHeaders).forEach(([key, value]) => {\n headers[key] = typeof value === 'function' ? value() : value;\n });\n // Add headers from HTTP context\n Object.entries(contextHeaders).forEach(([key, value]) => {\n headers[key] = value;\n });\n // Add content-type for data requests if not already set\n if (['POST', 'PUT', 'PATCH'].includes(req.method.toUpperCase()) &&\n !req.headers.has('Content-Type')) {\n headers['Content-Type'] = 'application/json';\n }\n // Clone request with enhanced headers and URL\n const enhancedReq = req.clone({\n url: finalUrl,\n setHeaders: headers,\n });\n // Log outgoing request if enabled\n if (config.enableRequestLogging) {\n loggingService.logHttpRequest({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n timestamp: new Date().toISOString(),\n headers: Object.keys(headers),\n isCustomUrl,\n });\n }\n // If request has auth header, handle with refresh logic\n if (headers['Authorization'] && config.refreshTokenCallback) {\n return next(enhancedReq).pipe(catchError(error => {\n // If 401 Unauthorized, try to refresh token\n if (error.status === 401) {\n const refreshToken = tokenProvider?.getRefreshToken?.();\n if (refreshToken && refreshToken.trim().length > 0) {\n return config.refreshTokenCallback().pipe(switchMap(newTokens => {\n // Retry the original request with new token\n const retryReq = req.clone({\n url: finalUrl,\n setHeaders: { ...headers, Authorization: `Bearer ${newTokens.token}` },\n });\n return next(retryReq);\n }), catchError(refreshError => {\n // Refresh failed, logout user\n config.logoutCallback?.();\n return throwError(() => refreshError);\n }));\n }\n }\n // Enhanced error logging with context\n if (config.enableErrorLogging) {\n loggingService.logHttpError({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n status: error.status,\n statusText: error.statusText,\n message: error.message,\n timestamp: new Date().toISOString(),\n errorDetails: error.error,\n environment: environment.clientId,\n isCustomUrl,\n headers: [], // Headers are not included in HttpErrorResponse by default, adjust if needed\n });\n }\n // Handle other error scenarios\n switch (error.status) {\n case 403:\n tenantService.handleForbidden();\n break;\n case 0:\n loggingService.logNetworkError(correlationId);\n break;\n case 429:\n loggingService.logRateLimitError(correlationId, finalUrl);\n break;\n }\n return throwError(() => error);\n }));\n }\n else {\n // No auth header, use standard error handling\n return next(enhancedReq).pipe(catchError((error) => {\n // Enhanced error logging with context\n if (config.enableErrorLogging) {\n loggingService.logHttpError({\n method: req.method,\n url: finalUrl,\n originalUrl: req.url,\n requestId,\n correlationId,\n tenantId,\n status: error.status,\n statusText: error.statusText,\n message: error.message,\n timestamp: new Date().toISOString(),\n errorDetails: error.error,\n environment: environment.clientId,\n isCustomUrl,\n headers: [], // Headers are not included in HttpErrorResponse by default, adjust if needed\n });\n }\n // Handle specific error scenarios\n switch (error.status) {\n case 401: {\n loggingService.error('Unauthorized access - token expired or invalid');\n // Note: Token clearing should be handled by the auth service, not infrastructure\n router.navigate([`/${environment.loginRoute}`]);\n break;\n }\n case 403:\n tenantService.handleForbidden();\n break;\n case 0:\n loggingService.logNetworkError(correlationId);\n break;\n case 429:\n loggingService.logRateLimitError(correlationId, finalUrl);\n break;\n }\n return throwError(() => error);\n }));\n }\n};\n// Helper function to create configuration\nexport function createHttpContextConfig(overrides = {}) {\n return {\n ...DEFAULT_CONFIG,\n ...overrides,\n };\n}\n// Provider function for easy setup\nexport function provideHttpContext(config = {}) {\n return [\n {\n provide: HTTP_CONTEXT_CONFIG,\n useValue: createHttpContextConfig(config),\n },\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jb250ZXh0LWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvaHR0cC1jb250ZXh0LWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDLENBQUMsd0JBQXdCO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FHWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxXQUFXO0FBQ1gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0Qsc0JBQXNCO0FBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQVUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGdCQUFnQixDQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sY0FBYyxHQUFHLElBQUksZ0JBQWdCLENBQXlCLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMs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QyxPQUFPO1FBQ0wsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsU0FBUztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFxQyxFQUFFO0lBQ3hFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsUUFBUSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztTQUMxQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyAvLyBJbXBvcnQgSW5qZWN0aW9uVG9rZW5cbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwQ29udGV4dCxcbiAgSHR0cEludGVyY2VwdG9yRm4sXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0aHJvd0Vycm9yLCBzd2l0Y2hNYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG4vLyBFbnZpcm9ubWVudCBhbmQgY29uZmlndXJhdGlvblxuaW1wb3J0IHsgQVVUSF9UT0tFTiwgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbi8vIFNlcnZpY2VzXG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi4vc2VydmljZXMvdGVuYW50LWluZm8nO1xuaW1wb3J0IHsgQ29ycmVsYXRpb25JbmZvIH0gZnJvbSAnLi4vc2VydmljZXMvY29ycmVsYXRpb24taW5mbyc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmctc2VydmljZSc7XG5cbi8vIEhUVFAgQ29udGV4dCB0b2tlbnNcbmNvbnN0IENVU1RPTV9VUkwgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiBmYWxzZSk7XG5jb25zdCBTS0lQX0NPTlRFWFRfSEVBREVSUyA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcbmNvbnN0IENVU1RPTV9IRUFERVJTID0gbmV3IEh0dHBDb250ZXh0VG9rZW48UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4gKHt9KSk7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIEhUVFAgY29udGV4dFxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbVVybCgpIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChDVVNUT01fVVJMLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNraXBDb250ZXh0SGVhZGVycygpIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChTS0lQX0NPTlRFWFRfSEVBREVSUywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ3VzdG9tSGVhZGVycyhoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIHJldHVybiBuZXcgSHR0cENvbnRleHQoKS5zZXQoQ1VTVE9NX0hFQURFUlMsIGhlYWRlcnMpO1xufVxuXG4vLyBDb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgbGlicmFyeSBjb25zdW1lcnNcbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENvbnRleHRDb25maWcge1xuICBlbmFibGVDb3JyZWxhdGlvblRyYWNraW5nPzogYm9vbGVhbjtcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc/OiBib29sZWFuO1xuICBlbmFibGVFcnJvckxvZ2dpbmc/OiBib29sZWFuO1xuICBjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgKCgpID0+IHN0cmluZyk+O1xuICBjbGllbnRWZXJzaW9uPzogc3RyaW5nO1xuICB0ZW5hbnRJZEhlYWRlcj86IHN0cmluZztcbiAgY29ycmVsYXRpb25JZEhlYWRlcj86IHN0cmluZztcbiAgcmVxdWVzdElkSGVhZGVyPzogc3RyaW5nO1xuICB0aW1lc3RhbXBIZWFkZXI/OiBzdHJpbmc7XG4gIGV4Y2x1ZGVVcmxzPzogc3RyaW5nW107XG4gIGluY2x1ZGVBdXRoVG9rZW4/OiBib29sZWFuO1xuICBiYXNlVXJsSW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgcmVmcmVzaFRva2VuQ2FsbGJhY2s/OiAoKSA9PiBPYnNlcnZhYmxlPHsgdG9rZW46IHN0cmluZzsgcmVmcmVzaFRva2VuPzogc3RyaW5nIH0+O1xuICBsb2dvdXRDYWxsYmFjaz86ICgpID0+IHZvaWQ7XG59XG5cbi8vIERlZmF1bHQgY29uZmlndXJhdGlvblxuY29uc3QgREVGQVVMVF9DT05GSUc6IFJlcXVpcmVkPEh0dHBDb250ZXh0Q29uZmlnPiA9IHtcbiAgZW5hYmxlQ29ycmVsYXRpb25UcmFja2luZzogdHJ1ZSxcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6IGZhbHNlLCAvLyBUaGlzIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBlbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb25cbiAgZW5hYmxlRXJyb3JMb2dnaW5nOiB0cnVlLFxuICBjdXN0b21IZWFkZXJzOiB7fSxcbiAgY2xpZW50VmVyc2lvbjogJzEuMC4wJyxcbiAgdGVuYW50SWRIZWFkZXI6ICdUZW5hbnQtSWQnLFxuICBjb3JyZWxhdGlvbklkSGVhZGVyOiAnQ29ycmVsYXRpb24tSWQnLFxuICByZXF1ZXN0SWRIZWFkZXI6ICdSZXF1ZXN0LUlkJyxcbiAgdGltZXN0YW1wSGVhZGVyOiAnVGltZXN0YW1wJyxcbiAgZXhjbHVkZVVybHM6IFtdLFxuICBpbmNsdWRlQXV0aFRva2VuOiB0cnVlLFxuICBiYXNlVXJsSW5qZWN0aW9uOiB0cnVlLFxuICByZWZyZXNoVG9rZW5DYWxsYmFjazogdW5kZWZpbmVkIGFzIGFueSxcbiAgbG9nb3V0Q2FsbGJhY2s6IHVuZGVmaW5lZCBhcyBhbnksXG59O1xuXG4vLyBJbmplY3Rpb24gdG9rZW4gZm9yIGNvbmZpZ3VyYXRpb24gLSBGSVhFRFxuZXhwb3J0IGNvbnN0IEhUVFBfQ09OVEVYVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48SHR0cENvbnRleHRDb25maWc+KCdIVFRQX0NPTlRFWFRfQ09ORklHJywge1xuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0NPTkZJRywgLy8gUHJvdmlkZSBhIGRlZmF1bHQgZmFjdG9yeSBpbiBjYXNlIGl0J3Mgbm90IHByb3ZpZGVkXG59KTtcblxuZXhwb3J0IGNvbnN0IGh0dHBDb250ZXh0SW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICBjb25zdCB0b2tlblByb3ZpZGVyID0gaW5qZWN0KEFVVEhfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdCB0ZW5hbnRTZXJ2aWNlID0gaW5qZWN0KFRlbmFudEluZm8pO1xuICBjb25zdCBjb3JyZWxhdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ycmVsYXRpb25JbmZvKTtcbiAgY29uc3QgbG9nZ2luZ1NlcnZpY2UgPSBpbmplY3QoTG9nZ2luZ1NlcnZpY2UpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgLy8gR2V0IGNvbmZpZ3VyYXRpb24gKHdpdGggZmFsbGJhY2sgdG8gZGVmYXVsdCkgLSBGSVhFRFxuICBjb25zdCBjb25maWc6IFJlcXVpcmVkPEh0dHBDb250ZXh0Q29uZmlnPiA9IHtcbiAgICAuLi5ERUZBVUxUX0NPTkZJRyxcbiAgICAvLyBUaGUgZGVmYXVsdCBlbmFibGVSZXF1ZXN0TG9nZ2luZyBuZWVkcyB0byBiZSBzZXQgYmFzZWQgb24gZW52aXJvbm1lbnQgaGVyZSxcbiAgICAvLyBhcyBpdCdzIGR5bmFtaWMsIGFuZCBERUZBVUxUX0NPTkZJRyBpcyBzdGF0aWMuXG4gICAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6ICFlbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24sXG4gICAgLi4uaW5qZWN0KEhUVFBfQ09OVEVYVF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSksXG4gIH07XG5cbiAgLy8gQ2hlY2sgSFRUUCBjb250ZXh0IHRva2Vuc1xuICBjb25zdCBpc0N1c3RvbVVybCA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fVVJMKTtcbiAgY29uc3Qgc2tpcEhlYWRlcnMgPSByZXEuY29udGV4dC5nZXQoU0tJUF9DT05URVhUX0hFQURFUlMpO1xuICBjb25zdCBjb250ZXh0SGVhZGVycyA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fSEVBREVSUyk7XG5cbiAgLy8gU2tpcCBwcm9jZXNzaW5nIGlmIGhlYWRlcnMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgaWYgKHNraXBIZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIFVSTCBzaG91bGQgYmUgZXhjbHVkZWRcbiAgY29uc3Qgc2hvdWxkRXhjbHVkZSA9IGNvbmZpZy5leGNsdWRlVXJscy5zb21lKFxuICAgIHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkgfHwgbmV3IFJlZ0V4cCh1cmwpLnRlc3QocmVxLnVybCksXG4gICk7XG5cbiAgaWYgKHNob3VsZEV4Y2x1ZGUpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG5cbiAgLy8gU2tpcCBhdXRoIGZvciBsb2dpbiwgcmVnaXN0ZXIsIGFuZCByZWZyZXNoIGVuZHBvaW50c1xuICBjb25zdCBza2lwQXV0aCA9XG4gICAgcmVxLnVybC5pbmNsdWRlcygnL2xvZ2luJykgfHwgcmVxLnVybC5pbmNsdWRlcygnL3JlZ2lzdGVyJykgfHwgcmVxLnVybC5pbmNsdWRlcygnL3JlZnJlc2gnKTtcblxuICAvLyBIYW5kbGUgVVJMIHRyYW5zZm9ybWF0aW9uXG4gIGNvbnN0IGJhc2VVcmwgPSBlbnZpcm9ubWVudC5hcGlCYXNlVXJsO1xuICBjb25zdCBmaW5hbFVybCA9IGlzQ3VzdG9tVXJsIHx8ICFjb25maWcuYmFzZVVybEluamVjdGlvbiA/IHJlcS51cmwgOiBgJHtiYXNlVXJsfSR7cmVxLnVybH1gO1xuXG4gIC8vIEdlbmVyYXRlIG9yIGdldCBjb3JyZWxhdGlvbiBjb250ZXh0XG4gIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBjb25maWcuZW5hYmxlQ29ycmVsYXRpb25UcmFja2luZ1xuICAgID8gY29ycmVsYXRpb25TZXJ2aWNlLmdldE9yQ3JlYXRlQ29ycmVsYXRpb25JZCgpXG4gICAgOiB1dWlkdjQoKTtcbiAgY29uc3QgdGVuYW50SWQgPSB0ZW5hbnRTZXJ2aWNlLmdldFRlbmFudElkKCk7XG4gIGNvbnN0IHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuXG4gIC8vIEJ1aWxkIGR5bmFtaWMgaGVhZGVyc1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgLy8gQ29yZSBjb250ZXh0IGhlYWRlcnNcbiAgaGVhZGVyc1tjb25maWcucmVxdWVzdElkSGVhZGVyXSA9IHJlcXVlc3RJZDtcblxuICBpZiAoY29uZmlnLmVuYWJsZUNvcnJlbGF0aW9uVHJhY2tpbmcpIHtcbiAgICBoZWFkZXJzW2NvbmZpZy5jb3JyZWxhdGlvbklkSGVhZGVyXSA9IGNvcnJlbGF0aW9uSWQ7XG4gIH1cblxuICBpZiAodGVuYW50SWQpIHtcbiAgICBoZWFkZXJzW2NvbmZpZy50ZW5hbnRJZEhlYWRlcl0gPSB0ZW5hbnRJZDtcbiAgfVxuXG4gIGhlYWRlcnNbY29uZmlnLnRpbWVzdGFtcEhlYWRlcl0gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgLy8gQ2xpZW50IGluZm9ybWF0aW9uXG4gIGlmIChjb25maWcuY2xpZW50VmVyc2lvbikge1xuICAgIGhlYWRlcnNbJ0NsaWVudC1WZXJzaW9uJ10gPSBjb25maWcuY2xpZW50VmVyc2lvbjtcbiAgfVxuXG4gIC8vIEVudmlyb25tZW50IGNsaWVudCBJRFxuICBpZiAoZW52aXJvbm1lbnQuY2xpZW50SWQpIHtcbiAgICBoZWFkZXJzWydDbGllbnQtSWQnXSA9IGVudmlyb25tZW50LmNsaWVudElkO1xuICB9XG5cbiAgLy8gQWRkIGF1dGhvcml6YXRpb24gaGVhZGVyIGlmIGNvbmZpZ3VyZWQgYW5kIGF2YWlsYWJsZVxuICBpZiAoY29uZmlnLmluY2x1ZGVBdXRoVG9rZW4gJiYgIXNraXBBdXRoKSB7XG4gICAgY29uc3QgYXV0aFRva2VuID0gdG9rZW5Qcm92aWRlcj8uZ2V0VG9rZW4oKTtcbiAgICBpZiAoYXV0aFRva2VuKSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7YXV0aFRva2VufWA7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvY2VzcyBjdXN0b20gaGVhZGVycyBmcm9tIGNvbmZpZ3VyYXRpb24gKGNhbiBiZSBzdGF0aWMgdmFsdWVzIG9yIGR5bmFtaWMgZnVuY3Rpb25zKVxuICBPYmplY3QuZW50cmllcyhjb25maWcuY3VzdG9tSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaGVhZGVyc1trZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUoKSA6IHZhbHVlO1xuICB9KTtcblxuICAvLyBBZGQgaGVhZGVycyBmcm9tIEhUVFAgY29udGV4dFxuICBPYmplY3QuZW50cmllcyhjb250ZXh0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIEFkZCBjb250ZW50LXR5cGUgZm9yIGRhdGEgcmVxdWVzdHMgaWYgbm90IGFscmVhZHkgc2V0XG4gIGlmIChcbiAgICBbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJ10uaW5jbHVkZXMocmVxLm1ldGhvZC50b1VwcGVyQ2FzZSgpKSAmJlxuICAgICFyZXEuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpXG4gICkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG5cbiAgLy8gQ2xvbmUgcmVxdWVzdCB3aXRoIGVuaGFuY2VkIGhlYWRlcnMgYW5kIFVSTFxuICBjb25zdCBlbmhhbmNlZFJlcSA9IHJlcS5jbG9uZSh7XG4gICAgdXJsOiBmaW5hbFVybCxcbiAgICBzZXRIZWFkZXJzOiBoZWFkZXJzLFxuICB9KTtcblxuICAvLyBMb2cgb3V0Z29pbmcgcmVxdWVzdCBpZiBlbmFibGVkXG4gIGlmIChjb25maWcuZW5hYmxlUmVxdWVzdExvZ2dpbmcpIHtcbiAgICBsb2dnaW5nU2VydmljZS5sb2dIdHRwUmVxdWVzdCh7XG4gICAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICB1cmw6IGZpbmFsVXJsLFxuICAgICAgb3JpZ2luYWxVcmw6IHJlcS51cmwsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQsXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGhlYWRlcnM6IE9iamVjdC5rZXlzKGhlYWRlcnMpLFxuICAgICAgaXNDdXN0b21VcmwsXG4gICAgfSk7XG4gIH1cblxuICAvLyBJZiByZXF1ZXN0IGhhcyBhdXRoIGhlYWRlciwgaGFuZGxlIHdpdGggcmVmcmVzaCBsb2dpY1xuICBpZiAoaGVhZGVyc1snQXV0aG9yaXphdGlvbiddICYmIGNvbmZpZy5yZWZyZXNoVG9rZW5DYWxsYmFjaykge1xuICAgIHJldHVybiBuZXh0KGVuaGFuY2VkUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIC8vIElmIDQwMSBVbmF1dGhvcml6ZWQsIHRyeSB0byByZWZyZXNoIHRva2VuXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFJlZnJlc2hUb2tlbj8uKCk7XG4gICAgICAgICAgaWYgKHJlZnJlc2hUb2tlbiAmJiByZWZyZXNoVG9rZW4udHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcucmVmcmVzaFRva2VuQ2FsbGJhY2soKSEucGlwZShcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKG5ld1Rva2VucyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUmV0cnkgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgd2l0aCBuZXcgdG9rZW5cbiAgICAgICAgICAgICAgICBjb25zdCByZXRyeVJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgICAgICAgICB1cmw6IGZpbmFsVXJsLFxuICAgICAgICAgICAgICAgICAgc2V0SGVhZGVyczogeyAuLi5oZWFkZXJzLCBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bmV3VG9rZW5zLnRva2VufWAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXRyeVJlcSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKHJlZnJlc2hFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUmVmcmVzaCBmYWlsZWQsIGxvZ291dCB1c2VyXG4gICAgICAgICAgICAgICAgY29uZmlnLmxvZ291dENhbGxiYWNrPy4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiByZWZyZXNoRXJyb3IpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgZXJyb3IgbG9nZ2luZyB3aXRoIGNvbnRleHRcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVFcnJvckxvZ2dpbmcpIHtcbiAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dIdHRwRXJyb3Ioe1xuICAgICAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgICAgICAgIG9yaWdpbmFsVXJsOiByZXEudXJsLFxuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudC5jbGllbnRJZCxcbiAgICAgICAgICAgIGlzQ3VzdG9tVXJsLFxuICAgICAgICAgICAgaGVhZGVyczogW10sIC8vIEhlYWRlcnMgYXJlIG5vdCBpbmNsdWRlZCBpbiBIdHRwRXJyb3JSZXNwb25zZSBieSBkZWZhdWx0LCBhZGp1c3QgaWYgbmVlZGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgb3RoZXIgZXJyb3Igc2NlbmFyaW9zXG4gICAgICAgIHN3aXRjaCAoZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICB0ZW5hbnRTZXJ2aWNlLmhhbmRsZUZvcmJpZGRlbigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nTmV0d29ya0Vycm9yKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dSYXRlTGltaXRFcnJvcihjb3JyZWxhdGlvbklkLCBmaW5hbFVybCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gYXV0aCBoZWFkZXIsIHVzZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZ1xuICAgIHJldHVybiBuZXh0KGVuaGFuY2VkUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIEVuaGFuY2VkIGVycm9yIGxvZ2dpbmcgd2l0aCBjb250ZXh0XG4gICAgICAgIGlmIChjb25maWcuZW5hYmxlRXJyb3JMb2dnaW5nKSB7XG4gICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nSHR0cEVycm9yKHtcbiAgICAgICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogZmluYWxVcmwsXG4gICAgICAgICAgICBvcmlnaW5hbFVybDogcmVxLnVybCxcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogZXJyb3Iuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGVycm9yRGV0YWlsczogZXJyb3IuZXJyb3IsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQuY2xpZW50SWQsXG4gICAgICAgICAgICBpc0N1c3RvbVVybCxcbiAgICAgICAgICAgIGhlYWRlcnM6IFtdLCAvLyBIZWFkZXJzIGFyZSBub3QgaW5jbHVkZWQgaW4gSHR0cEVycm9yUmVzcG9uc2UgYnkgZGVmYXVsdCwgYWRqdXN0IGlmIG5lZWRlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvc1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOiB7XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5lcnJvcignVW5hdXRob3JpemVkIGFjY2VzcyAtIHRva2VuIGV4cGlyZWQgb3IgaW52YWxpZCcpO1xuICAgICAgICAgICAgLy8gTm90ZTogVG9rZW4gY2xlYXJpbmcgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGF1dGggc2VydmljZSwgbm90IGluZnJhc3RydWN0dXJlXG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW2AvJHtlbnZpcm9ubWVudC5sb2dpblJvdXRlfWBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIHRlbmFudFNlcnZpY2UuaGFuZGxlRm9yYmlkZGVuKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgIGxvZ2dpbmdTZXJ2aWNlLmxvZ1JhdGVMaW1pdEVycm9yKGNvcnJlbGF0aW9uSWQsIGZpbmFsVXJsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLy8gU3VwcG9ydGluZyByZXBvc2l0b3JpZXMgZm9yIHR5cGUgc2FmZXR5XG5leHBvcnQgaW50ZXJmYWNlIEh0dHBSZXF1ZXN0TG9nIHtcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBvcmlnaW5hbFVybDogc3RyaW5nO1xuICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgaGVhZGVyczogc3RyaW5nW107XG4gIGlzQ3VzdG9tVXJsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBFcnJvckxvZyBleHRlbmRzIEh0dHBSZXF1ZXN0TG9nIHtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIHN0YXR1c1RleHQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBlcnJvckRldGFpbHM6IHVua25vd247XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgY29uZmlndXJhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKFxuICBvdmVycmlkZXM6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30sXG4pOiBIdHRwQ29udGV4dENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xufVxuXG4vLyBQcm92aWRlciBmdW5jdGlvbiBmb3IgZWFzeSBzZXR1cFxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVIdHRwQ29udGV4dChjb25maWc6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBIVFRQX0NPTlRFWFRfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKGNvbmZpZyksXG4gICAgfSxcbiAgXTtcbn1cbiJdfQ==","import { HttpContext, HttpContextToken, } from '@angular/common/http';\nimport { finalize } from 'rxjs/operators';\nimport { inject, Injectable } from '@angular/core';\nimport { OverlayService } from '@acontplus/ng-components';\nimport * as i0 from \"@angular/core\";\n/**\n * Token to determine if a request should show spinner\n * Default is true (show spinner for all requests)\n */\nconst SHOW_SPINNER = new HttpContextToken(() => true);\nconst requests = [];\n/**\n * Helper function to disable spinner for specific requests\n * @returns HttpContext with spinner disabled\n */\nexport function withoutSpinner() {\n return new HttpContext().set(SHOW_SPINNER, false);\n}\n/**\n * Service to track active HTTP requests\n */\nexport class ActiveRequestsTracker {\n get count() {\n return requests.length;\n }\n add(request) {\n requests.push(request);\n }\n remove(request) {\n const index = requests.indexOf(request);\n if (index >= 0) {\n requests.splice(index, 1);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: ActiveRequestsTracker, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: ActiveRequestsTracker, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n/**\n * Interceptor that shows/hides a loading spinner based on active HTTP requests\n */\nexport const spinnerInterceptor = (req, next) => {\n // Track active requests requiring spinner\n const activeRequests = inject(ActiveRequestsTracker);\n const overlayService = inject(OverlayService);\n // Skip spinner if disabled for this request\n if (!req.context.get(SHOW_SPINNER)) {\n return next(req);\n }\n // Add request to tracking\n activeRequests.add(req);\n // Show spinner if this is the first active request\n if (activeRequests.count === 1) {\n overlayService.showSpinner();\n }\n return next(req).pipe(finalize(() => {\n // Remove request and hide spinner if no more active requests\n activeRequests.remove(req);\n if (activeRequests.count === 0) {\n overlayService.hideSpinner();\n }\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvaW50ZXJjZXB0b3JzL3NwaW5uZXItaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FHakIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUMxRDs7O0dBR0c7QUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLGdCQUFnQixDQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRS9ELE1BQU0sUUFBUSxHQUEyQixFQUFFLENBQUM7QUFFNUM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOztHQUVHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxJQUFJLEtBQUs7UUFDUCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUE2QjtRQUMvQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBNkI7UUFDbEMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO3VHQWRVLHFCQUFxQjsyR0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBa0JEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ2pFLDBDQUEwQztJQUMxQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFOUMsNENBQTRDO0lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV4QixtREFBbUQ7SUFDbkQsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osNkRBQTZEO1FBQzdELGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBDb250ZXh0LFxuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwSW50ZXJjZXB0b3JGbixcbiAgSHR0cFJlcXVlc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb21wb25lbnRzJztcbi8qKlxuICogVG9rZW4gdG8gZGV0ZXJtaW5lIGlmIGEgcmVxdWVzdCBzaG91bGQgc2hvdyBzcGlubmVyXG4gKiBEZWZhdWx0IGlzIHRydWUgKHNob3cgc3Bpbm5lciBmb3IgYWxsIHJlcXVlc3RzKVxuICovXG5jb25zdCBTSE9XX1NQSU5ORVIgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiB0cnVlKTtcblxuY29uc3QgcmVxdWVzdHM6IEh0dHBSZXF1ZXN0PHVua25vd24+W10gPSBbXTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzYWJsZSBzcGlubmVyIGZvciBzcGVjaWZpYyByZXF1ZXN0c1xuICogQHJldHVybnMgSHR0cENvbnRleHQgd2l0aCBzcGlubmVyIGRpc2FibGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0U3Bpbm5lcigpIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChTSE9XX1NQSU5ORVIsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHRvIHRyYWNrIGFjdGl2ZSBIVFRQIHJlcXVlc3RzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBY3RpdmVSZXF1ZXN0c1RyYWNrZXIge1xuICBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVxdWVzdHMubGVuZ3RoO1xuICB9XG5cbiAgYWRkKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogdm9pZCB7XG4gICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcbiAgfVxuXG4gIHJlbW92ZShyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdHMuaW5kZXhPZihyZXF1ZXN0KTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmVxdWVzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmNlcHRvciB0aGF0IHNob3dzL2hpZGVzIGEgbG9hZGluZyBzcGlubmVyIGJhc2VkIG9uIGFjdGl2ZSBIVFRQIHJlcXVlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzcGlubmVySW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICAvLyBUcmFjayBhY3RpdmUgcmVxdWVzdHMgcmVxdWlyaW5nIHNwaW5uZXJcbiAgY29uc3QgYWN0aXZlUmVxdWVzdHMgPSBpbmplY3QoQWN0aXZlUmVxdWVzdHNUcmFja2VyKTtcbiAgY29uc3Qgb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoT3ZlcmxheVNlcnZpY2UpO1xuXG4gIC8vIFNraXAgc3Bpbm5lciBpZiBkaXNhYmxlZCBmb3IgdGhpcyByZXF1ZXN0XG4gIGlmICghcmVxLmNvbnRleHQuZ2V0KFNIT1dfU1BJTk5FUikpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG5cbiAgLy8gQWRkIHJlcXVlc3QgdG8gdHJhY2tpbmdcbiAgYWN0aXZlUmVxdWVzdHMuYWRkKHJlcSk7XG5cbiAgLy8gU2hvdyBzcGlubmVyIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGl2ZSByZXF1ZXN0XG4gIGlmIChhY3RpdmVSZXF1ZXN0cy5jb3VudCA9PT0gMSkge1xuICAgIG92ZXJsYXlTZXJ2aWNlLnNob3dTcGlubmVyKCk7XG4gIH1cblxuICByZXR1cm4gbmV4dChyZXEpLnBpcGUoXG4gICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgLy8gUmVtb3ZlIHJlcXVlc3QgYW5kIGhpZGUgc3Bpbm5lciBpZiBubyBtb3JlIGFjdGl2ZSByZXF1ZXN0c1xuICAgICAgYWN0aXZlUmVxdWVzdHMucmVtb3ZlKHJlcSk7XG4gICAgICBpZiAoYWN0aXZlUmVxdWVzdHMuY291bnQgPT09IDApIHtcbiAgICAgICAgb3ZlcmxheVNlcnZpY2UuaGlkZVNwaW5uZXIoKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgKTtcbn07XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport * as i0 from \"@angular/core\";\nexport class BaseHttpRepository {\n http = inject(HttpClient);\n buildUrl(path = '') {\n const baseUrl = this.config.baseUrl || '/api';\n const version = this.config.version ? `/v${this.config.version}` : '';\n const endpoint = path ? `${this.config.endpoint}/${path}` : this.config.endpoint;\n return `${baseUrl}${version}/${endpoint}`.replace(/\\/+/g, '/');\n }\n get(path = '', params) {\n return this.http.get(this.buildUrl(path), { params });\n }\n post(path = '', body) {\n return this.http.post(this.buildUrl(path), body);\n }\n put(path = '', body) {\n return this.http.put(this.buildUrl(path), body);\n }\n patch(path = '', body) {\n return this.http.patch(this.buildUrl(path), body);\n }\n delete(path = '') {\n return this.http.delete(this.buildUrl(path));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: BaseHttpRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: BaseHttpRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3JlcG9zaXRvcmllcy9iYXNlLWh0dHAtcmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBS2xELE1BQU0sT0FBZ0Isa0JBQWtCO0lBQzVCLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFHMUIsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUVqRixPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFUyxHQUFHLENBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFrRDtRQUM1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFUyxJQUFJLENBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFhO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRVMsR0FBRyxDQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBYTtRQUN2QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVTLEtBQUssQ0FBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxNQUFNLENBQUksSUFBSSxHQUFHLEVBQUU7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQzt1R0E5Qm1CLGtCQUFrQjsyR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeUNvbmZpZyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlSHR0cFJlcG9zaXRvcnkge1xuICBwcm90ZWN0ZWQgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbmZpZzogUmVwb3NpdG9yeUNvbmZpZzsgLy8gQWJzdHJhY3QgcHJvcGVydHlcblxuICBwcm90ZWN0ZWQgYnVpbGRVcmwocGF0aCA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcuYmFzZVVybCB8fCAnL2FwaSc7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuY29uZmlnLnZlcnNpb24gPyBgL3Yke3RoaXMuY29uZmlnLnZlcnNpb259YCA6ICcnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gcGF0aCA/IGAke3RoaXMuY29uZmlnLmVuZHBvaW50fS8ke3BhdGh9YCA6IHRoaXMuY29uZmlnLmVuZHBvaW50O1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9JHt2ZXJzaW9ufS8ke2VuZHBvaW50fWAucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldDxUPihwYXRoID0gJycsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5idWlsZFVybChwYXRoKSwgeyBwYXJhbXMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdDxUPihwYXRoID0gJycsIGJvZHk6IHVua25vd24pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy5idWlsZFVybChwYXRoKSwgYm9keSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHV0PFQ+KHBhdGggPSAnJywgYm9keTogdW5rbm93bik6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhdGNoPFQ+KHBhdGggPSAnJywgYm9keT86IHVua25vd24pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZTxUPihwYXRoID0gJycpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxUPih0aGlzLmJ1aWxkVXJsKHBhdGgpKTtcbiAgfVxufVxuIl19","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { BaseHttpRepository } from './base-http-repository';\nimport * as i0 from \"@angular/core\";\n// Create an injection token for RepositoryConfig\nexport const REPOSITORY_CONFIG = new InjectionToken('REPOSITORY_CONFIG');\nexport class GenericRepository extends BaseHttpRepository {\n config;\n constructor() {\n const config = inject(REPOSITORY_CONFIG);\n super();\n this.config = config;\n }\n getById(id) {\n return this.get(id.toString());\n }\n getAll(pagination) {\n const params = this.buildParams(pagination);\n return this.get('', params);\n }\n create(entity) {\n return this.post('', entity);\n }\n update(id, entity) {\n return this.put(id.toString(), entity);\n }\n remove(id) {\n return super.delete(id.toString());\n }\n buildParams(pagination, filters) {\n const params = {};\n if (pagination) {\n params.pageIndex = pagination.pageIndex?.toString() || '1';\n params.pageSize = pagination.pageSize?.toString() || '20';\n if (pagination.sortBy)\n params.sortBy = pagination.sortBy;\n if (pagination.sortDirection)\n params.sortDirection = pagination.sortDirection;\n }\n if (filters) {\n Object.assign(params, filters);\n }\n return params;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: GenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: GenericRepository, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\nexport class SearchableGenericRepository extends GenericRepository {\n search(query, pagination) {\n const searchFilters = { q: query };\n const params = this.buildParams(pagination, searchFilters);\n return this.get('search', params);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: SearchableGenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: SearchableGenericRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvZ2VuZXJpYy1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFJNUQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFtQixtQkFBbUIsQ0FBQyxDQUFDO0FBRzNGLE1BQU0sT0FBTyxpQkFDWCxTQUFRLGtCQUFrQjtJQUdQLE1BQU0sQ0FBbUI7SUFFNUM7UUFDRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQW1CLGlCQUFpQixDQUFDLENBQUM7UUFDM0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQU87UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUE2QjtRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFVLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQU8sRUFBRSxNQUF3QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsRUFBTztRQUNaLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRVMsV0FBVyxDQUFDLFVBQTZCLEVBQUUsT0FBNkI7UUFDaEYsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBRXZCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTTtnQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDekQsSUFBSSxVQUFVLENBQUMsYUFBYTtnQkFBRSxNQUFNLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDaEYsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzt1R0FoRFUsaUJBQWlCOzJHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7O0FBcURYLE1BQU0sT0FBTywyQkFDWCxTQUFRLGlCQUErQjtJQUd2QyxNQUFNLENBQUMsS0FBYSxFQUFFLFVBQTRCO1FBQ2hELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7dUdBUlUsMkJBQTJCOzJHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlSHR0cFJlcG9zaXRvcnkgfSBmcm9tICcuL2Jhc2UtaHR0cC1yZXBvc2l0b3J5JztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0LCBQYWdpbmF0aW9uUGFyYW1zLCBSZXBvc2l0b3J5Q29uZmlnIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcbmltcG9ydCB7IEJhc2VSZXBvc2l0b3J5LCBTZWFyY2hhYmxlUmVwb3NpdG9yeSB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcblxuLy8gQ3JlYXRlIGFuIGluamVjdGlvbiB0b2tlbiBmb3IgUmVwb3NpdG9yeUNvbmZpZ1xuZXhwb3J0IGNvbnN0IFJFUE9TSVRPUllfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFJlcG9zaXRvcnlDb25maWc+KCdSRVBPU0lUT1JZX0NPTkZJRycpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9zaXRvcnk8VEVudGl0eSA9IGFueSwgVElkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID0gbnVtYmVyPlxuICBleHRlbmRzIEJhc2VIdHRwUmVwb3NpdG9yeVxuICBpbXBsZW1lbnRzIEJhc2VSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD5cbntcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNvbmZpZzogUmVwb3NpdG9yeUNvbmZpZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb25maWcgPSBpbmplY3Q8UmVwb3NpdG9yeUNvbmZpZz4oUkVQT1NJVE9SWV9DT05GSUcpO1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBnZXRCeUlkKGlkOiBUSWQpOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQ8VEVudGl0eT4oaWQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBnZXRBbGwocGFnaW5hdGlvbj86IFBhZ2luYXRpb25QYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2VkUmVzdWx0PFRFbnRpdHk+PiB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5idWlsZFBhcmFtcyhwYWdpbmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5nZXQ8UGFnZWRSZXN1bHQ8VEVudGl0eT4+KCcnLCBwYXJhbXMpO1xuICB9XG5cbiAgY3JlYXRlKGVudGl0eTogUGFydGlhbDxURW50aXR5Pik6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLnBvc3Q8VEVudGl0eT4oJycsIGVudGl0eSk7XG4gIH1cblxuICB1cGRhdGUoaWQ6IFRJZCwgZW50aXR5OiBQYXJ0aWFsPFRFbnRpdHk+KTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucHV0PFRFbnRpdHk+KGlkLnRvU3RyaW5nKCksIGVudGl0eSk7XG4gIH1cblxuICByZW1vdmUoaWQ6IFRJZCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBzdXBlci5kZWxldGU8dm9pZD4oaWQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRQYXJhbXMocGFnaW5hdGlvbj86IFBhZ2luYXRpb25QYXJhbXMsIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYW55IHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHt9O1xuXG4gICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgIHBhcmFtcy5wYWdlSW5kZXggPSBwYWdpbmF0aW9uLnBhZ2VJbmRleD8udG9TdHJpbmcoKSB8fCAnMSc7XG4gICAgICBwYXJhbXMucGFnZVNpemUgPSBwYWdpbmF0aW9uLnBhZ2VTaXplPy50b1N0cmluZygpIHx8ICcyMCc7XG4gICAgICBpZiAocGFnaW5hdGlvbi5zb3J0QnkpIHBhcmFtcy5zb3J0QnkgPSBwYWdpbmF0aW9uLnNvcnRCeTtcbiAgICAgIGlmIChwYWdpbmF0aW9uLnNvcnREaXJlY3Rpb24pIHBhcmFtcy5zb3J0RGlyZWN0aW9uID0gcGFnaW5hdGlvbi5zb3J0RGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZUdlbmVyaWNSZXBvc2l0b3J5PFRFbnRpdHkgPSBhbnksIFRJZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciA9IG51bWJlcj5cbiAgZXh0ZW5kcyBHZW5lcmljUmVwb3NpdG9yeTxURW50aXR5LCBUSWQ+XG4gIGltcGxlbWVudHMgU2VhcmNoYWJsZVJlcG9zaXRvcnk8VEVudGl0eSwgVElkPlxue1xuICBzZWFyY2gocXVlcnk6IHN0cmluZywgcGFnaW5hdGlvbjogUGFnaW5hdGlvblBhcmFtcyk6IE9ic2VydmFibGU8UGFnZWRSZXN1bHQ8VEVudGl0eT4+IHtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzID0geyBxOiBxdWVyeSB9O1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuYnVpbGRQYXJhbXMocGFnaW5hdGlvbiwgc2VhcmNoRmlsdGVycyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0PFBhZ2VkUmVzdWx0PFRFbnRpdHk+Pignc2VhcmNoJywgcGFyYW1zKTtcbiAgfVxufVxuIl19","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport * as i0 from \"@angular/core\";\nexport class RepositoryFactory {\n http = inject(HttpClient);\n create(config) {\n const buildUrl = (path = '') => {\n const baseUrl = config.baseUrl || '/api';\n const version = config.version ? `/v${config.version}` : '';\n const endpoint = path ? `${config.endpoint}/${path}` : config.endpoint;\n return `${baseUrl}${version}/${endpoint}`.replace(/\\/+/g, '/');\n };\n const buildParams = (pagination) => {\n const params = {};\n if (pagination) {\n params.page = pagination.pageIndex?.toString() || '1';\n params.pageSize = pagination.pageSize?.toString() || '20';\n if (pagination.sortBy)\n params.sortBy = pagination.sortBy;\n if (pagination.sortDirection)\n params.sortDirection = pagination.sortDirection;\n }\n return params;\n };\n // Safe ID conversion function\n const idToString = (id) => {\n if (typeof id === 'string' || typeof id === 'number' || typeof id === 'bigint') {\n return id.toString();\n }\n // Fallback for other types - you might want to handle this differently\n return String(id);\n };\n return {\n getById: (id) => this.http.get(buildUrl(idToString(id))),\n getAll: (pagination) => this.http.get(buildUrl(), {\n params: buildParams(pagination),\n }),\n create: (entity) => this.http.post(buildUrl(), entity),\n update: (id, entity) => this.http.put(buildUrl(idToString(id)), entity),\n remove: (id) => this.http.delete(buildUrl(idToString(id))),\n };\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RepositoryFactory, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: RepositoryFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvcmVwb3NpdG9yeS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLbEQsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sQ0FDSixNQUF3QjtRQUV4QixNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUM3QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3ZFLE9BQU8sR0FBRyxPQUFPLEdBQUcsT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUE2QixFQUFFLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQztnQkFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTTtvQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3pELElBQUksVUFBVSxDQUFDLGFBQWE7b0JBQUUsTUFBTSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ2hGLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFPLEVBQVUsRUFBRTtZQUNyQyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQy9FLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCx1RUFBdUU7WUFDdkUsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXRFLE1BQU0sRUFBRSxDQUFDLFVBQVcsRUFBRSxFQUFFLENBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QixRQUFRLEVBQUUsRUFBRTtnQkFDOUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUM7YUFDaEMsQ0FBQztZQUVKLE1BQU0sRUFBRSxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFVLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztZQUVqRixNQUFNLEVBQUUsQ0FBQyxFQUFPLEVBQUUsTUFBd0IsRUFBRSxFQUFFLENBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7WUFFMUQsTUFBTSxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEUsQ0FBQztJQUNKLENBQUM7dUdBaERVLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBREosTUFBTTs7MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdCwgUGFnaW5hdGlvblBhcmFtcywgUmVwb3NpdG9yeUNvbmZpZyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBCYXNlUmVwb3NpdG9yeSB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5RmFjdG9yeSB7XG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICBjcmVhdGU8VEVudGl0eSwgVElkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID0gbnVtYmVyPihcbiAgICBjb25maWc6IFJlcG9zaXRvcnlDb25maWcsXG4gICk6IEJhc2VSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD4ge1xuICAgIGNvbnN0IGJ1aWxkVXJsID0gKHBhdGggPSAnJykgPT4ge1xuICAgICAgY29uc3QgYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsIHx8ICcvYXBpJztcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBjb25maWcudmVyc2lvbiA/IGAvdiR7Y29uZmlnLnZlcnNpb259YCA6ICcnO1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBwYXRoID8gYCR7Y29uZmlnLmVuZHBvaW50fS8ke3BhdGh9YCA6IGNvbmZpZy5lbmRwb2ludDtcbiAgICAgIHJldHVybiBgJHtiYXNlVXJsfSR7dmVyc2lvbn0vJHtlbmRwb2ludH1gLnJlcGxhY2UoL1xcLysvZywgJy8nKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRQYXJhbXMgPSAocGFnaW5hdGlvbj86IFBhZ2luYXRpb25QYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtczogYW55ID0ge307XG4gICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICBwYXJhbXMucGFnZSA9IHBhZ2luYXRpb24ucGFnZUluZGV4Py50b1N0cmluZygpIHx8ICcxJztcbiAgICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnaW5hdGlvbi5wYWdlU2l6ZT8udG9TdHJpbmcoKSB8fCAnMjAnO1xuICAgICAgICBpZiAocGFnaW5hdGlvbi5zb3J0QnkpIHBhcmFtcy5zb3J0QnkgPSBwYWdpbmF0aW9uLnNvcnRCeTtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24uc29ydERpcmVjdGlvbikgcGFyYW1zLnNvcnREaXJlY3Rpb24gPSBwYWdpbmF0aW9uLnNvcnREaXJlY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH07XG5cbiAgICAvLyBTYWZlIElEIGNvbnZlcnNpb24gZnVuY3Rpb25cbiAgICBjb25zdCBpZFRvU3RyaW5nID0gKGlkOiBUSWQpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGlkID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgaWQgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHJldHVybiBpZC50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgLy8gRmFsbGJhY2sgZm9yIG90aGVyIHR5cGVzIC0geW91IG1pZ2h0IHdhbnQgdG8gaGFuZGxlIHRoaXMgZGlmZmVyZW50bHlcbiAgICAgIHJldHVybiBTdHJpbmcoaWQpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0QnlJZDogKGlkOiBUSWQpID0+IHRoaXMuaHR0cC5nZXQ8VEVudGl0eT4oYnVpbGRVcmwoaWRUb1N0cmluZyhpZCkpKSxcblxuICAgICAgZ2V0QWxsOiAocGFnaW5hdGlvbj8pID0+XG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8UGFnZWRSZXN1bHQ8VEVudGl0eT4+KGJ1aWxkVXJsKCksIHtcbiAgICAgICAgICBwYXJhbXM6IGJ1aWxkUGFyYW1zKHBhZ2luYXRpb24pLFxuICAgICAgICB9KSxcblxuICAgICAgY3JlYXRlOiAoZW50aXR5OiBQYXJ0aWFsPFRFbnRpdHk+KSA9PiB0aGlzLmh0dHAucG9zdDxURW50aXR5PihidWlsZFVybCgpLCBlbnRpdHkpLFxuXG4gICAgICB1cGRhdGU6IChpZDogVElkLCBlbnRpdHk6IFBhcnRpYWw8VEVudGl0eT4pID0+XG4gICAgICAgIHRoaXMuaHR0cC5wdXQ8VEVudGl0eT4oYnVpbGRVcmwoaWRUb1N0cmluZyhpZCkpLCBlbnRpdHkpLFxuXG4gICAgICByZW1vdmU6IChpZDogVElkKSA9PiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGJ1aWxkVXJsKGlkVG9TdHJpbmcoaWQpKSksXG4gICAgfTtcbiAgfVxufVxuIl19","import { lastValueFrom } from 'rxjs';\nfunction mergeUrl(baseURL, endpoint) {\n if (!baseURL)\n return endpoint;\n return `${baseURL.replace(/\\/+$/, '')}/${endpoint.replace(/^\\/+/, '')}`;\n}\nexport class AngularHttpAdapter {\n http;\n baseURL;\n constructor(http, baseURL) {\n this.http = http;\n this.baseURL = baseURL;\n }\n buildOptions(options) {\n return {\n headers: options?.headers ?? {},\n params: options?.params ?? {},\n };\n }\n async request(params) {\n const fullUrl = mergeUrl(this.baseURL, params.url);\n const httpOptions = this.buildOptions(params.options);\n const observable = this.http.request(params.method, fullUrl, {\n body: params.data,\n ...httpOptions,\n });\n return await lastValueFrom(observable);\n }\n /** GET */\n get(url, options) {\n return this.request({ method: 'get', url, options });\n }\n /** POST */\n post(url, data, options) {\n return this.request({ method: 'post', url, data, options });\n }\n /** PUT */\n put(url, data, options) {\n return this.request({ method: 'put', url, data, options });\n }\n /** DELETE */\n delete(url, options) {\n return this.request({ method: 'delete', url, options });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1odHRwLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL2FkYXB0ZXJzL2FuZ3VsYXItaHR0cC1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHckMsU0FBUyxRQUFRLENBQUMsT0FBMkIsRUFBRSxRQUFnQjtJQUM3RCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzlCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBRVY7SUFDQTtJQUZuQixZQUNtQixJQUFnQixFQUNoQixPQUFnQjtRQURoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDaEMsQ0FBQztJQUVJLFlBQVksQ0FBQyxPQUFxQjtRQUN4QyxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtZQUMvQixNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FBSSxNQUt4QjtRQUNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUM5RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsR0FBRyxXQUFXO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVTtJQUNWLEdBQUcsQ0FBSSxHQUFXLEVBQUUsT0FBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksQ0FBSSxHQUFXLEVBQUUsSUFBYyxFQUFFLE9BQXFCO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxVQUFVO0lBQ1YsR0FBRyxDQUFJLEdBQVcsRUFBRSxJQUFjLEVBQUUsT0FBcUI7UUFDdkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGFBQWE7SUFDYixNQUFNLENBQUksR0FBVyxFQUFFLE9BQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh0dHBPcHRpb25zLCBIdHRwUG9ydCB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5cbmZ1bmN0aW9uIG1lcmdlVXJsKGJhc2VVUkw6IHN0cmluZyB8IHVuZGVmaW5lZCwgZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghYmFzZVVSTCkgcmV0dXJuIGVuZHBvaW50O1xuICByZXR1cm4gYCR7YmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtlbmRwb2ludC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gO1xufVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhckh0dHBBZGFwdGVyIGltcGxlbWVudHMgSHR0cFBvcnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVVJMPzogc3RyaW5nLFxuICApIHt9XG5cbiAgcHJpdmF0ZSBidWlsZE9wdGlvbnMob3B0aW9ucz86IEh0dHBPcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnM6IG9wdGlvbnM/LmhlYWRlcnMgPz8ge30sXG4gICAgICBwYXJhbXM6IG9wdGlvbnM/LnBhcmFtcyA/PyB7fSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KHBhcmFtczoge1xuICAgIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAncHV0JyB8ICdkZWxldGUnO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGRhdGE/OiB1bmtub3duO1xuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9ucztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGZ1bGxVcmwgPSBtZXJnZVVybCh0aGlzLmJhc2VVUkwsIHBhcmFtcy51cmwpO1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0gdGhpcy5idWlsZE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpO1xuXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuaHR0cC5yZXF1ZXN0PFQ+KHBhcmFtcy5tZXRob2QsIGZ1bGxVcmwsIHtcbiAgICAgIGJvZHk6IHBhcmFtcy5kYXRhLFxuICAgICAgLi4uaHR0cE9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgbGFzdFZhbHVlRnJvbShvYnNlcnZhYmxlKTtcbiAgfVxuXG4gIC8qKiBHRVQgKi9cbiAgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgdXJsLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIFBPU1QgKi9cbiAgcG9zdDxUPih1cmw6IHN0cmluZywgZGF0YT86IHVua25vd24sIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdwb3N0JywgdXJsLCBkYXRhLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIFBVVCAqL1xuICBwdXQ8VD4odXJsOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAncHV0JywgdXJsLCBkYXRhLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIERFTEVURSAqL1xuICBkZWxldGU8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCB1cmwsIG9wdGlvbnMgfSk7XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { DEFAULT_CONFIG, ENVIRONMENT } from '@acontplus/ng-config';\nimport { CORE_CONFIG } from '@acontplus/ng-config/src/lib/tokens/core-config-token';\nimport * as i0 from \"@angular/core\";\nexport class CoreConfigService {\n config;\n environment = inject(ENVIRONMENT);\n constructor() {\n this.config = this.initializeConfig();\n }\n /**\n * Initialize configuration with defaults and environment overrides\n */\n initializeConfig() {\n const injectedConfig = inject(CORE_CONFIG, { optional: true });\n return {\n ...DEFAULT_CONFIG,\n // Environment overrides\n apiBaseUrl: this.environment.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl,\n enableRequestLogging: !this.environment.isProduction,\n // Injected config overrides\n ...injectedConfig,\n };\n }\n /**\n * Get the current configuration\n */\n getConfig() {\n return { ...this.config };\n }\n /**\n * Update configuration at runtime\n */\n updateConfig(updates) {\n this.config = { ...this.config, ...updates };\n }\n /**\n * Get a specific configuration value\n */\n get(key) {\n return this.config[key];\n }\n /**\n * Check if a feature is enabled\n */\n isFeatureEnabled(feature) {\n const value = this.config[feature];\n return typeof value === 'boolean' ? value : false;\n }\n /**\n * Get API URL for a specific entity\n */\n getApiUrl(entityName) {\n const baseUrl = this.config.apiBaseUrl;\n if (!entityName)\n return baseUrl;\n return `${baseUrl}/${entityName}`.replace(/\\/+/g, '/');\n }\n /**\n * Check if a URL should be excluded from processing\n */\n shouldExcludeUrl(url) {\n return this.config.excludeUrls.some(excludePattern => url.includes(excludePattern) || new RegExp(excludePattern).test(url));\n }\n /**\n * Check if a method should be excluded from processing\n */\n shouldExcludeMethod(method) {\n return this.config.excludeMethods.some(excludeMethod => excludeMethod.toLowerCase() === method.toLowerCase());\n }\n /**\n * Get custom headers with dynamic values resolved\n */\n getCustomHeaders() {\n const headers = {};\n Object.entries(this.config.customHeaders).forEach(([key, value]) => {\n headers[key] = typeof value === 'function' ? value() : value;\n });\n return headers;\n }\n /**\n * Reset configuration to defaults\n */\n resetConfig() {\n this.config = this.initializeConfig();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CoreConfigService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: CoreConfigService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n// Provider function for easy setup\nexport function provideCoreConfig(config = {}) {\n return [\n {\n provide: CORE_CONFIG,\n useValue: config,\n },\n ];\n}\n// Helper function to create configuration\nexport function createCoreConfig(overrides = {}) {\n return {\n ...DEFAULT_CONFIG,\n ...overrides,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb25maWctc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29yZS1jb25maWctc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7QUFLcEYsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixNQUFNLENBQXVCO0lBQzdCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFMUM7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFL0QsT0FBTztZQUNMLEdBQUcsY0FBYztZQUNqQix3QkFBd0I7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLGNBQWMsQ0FBQyxVQUFVO1lBQ3BFLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO1lBQ3BELDRCQUE0QjtZQUM1QixHQUFHLGNBQWM7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE9BQTRCO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQTZCLEdBQU07UUFDcEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLE9BQXlCO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxVQUFtQjtRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQyxjQUFjLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsTUFBTSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUUzQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNqRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsQ0FBQzt1R0FsR1UsaUJBQWlCOzJHQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUFzR0QsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUE4QixFQUFFO0lBQ2hFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFlBQWlDLEVBQUU7SUFDbEUsT0FBTztRQUNMLEdBQUcsY0FBYztRQUNqQixHQUFHLFNBQVM7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUcsIEVOVklST05NRU5UIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb25maWcnO1xuaW1wb3J0IHsgQ29yZUNvbmZpZyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJRyB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnL3NyYy9saWIvdG9rZW5zL2NvcmUtY29uZmlnLXRva2VuJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvcmVDb25maWdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWc6IFJlcXVpcmVkPENvcmVDb25maWc+O1xuICBwcml2YXRlIGVudmlyb25tZW50ID0gaW5qZWN0KEVOVklST05NRU5UKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuaW5pdGlhbGl6ZUNvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHRzIGFuZCBlbnZpcm9ubWVudCBvdmVycmlkZXNcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbmZpZygpOiBSZXF1aXJlZDxDb3JlQ29uZmlnPiB7XG4gICAgY29uc3QgaW5qZWN0ZWRDb25maWcgPSBpbmplY3QoQ09SRV9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgICAvLyBFbnZpcm9ubWVudCBvdmVycmlkZXNcbiAgICAgIGFwaUJhc2VVcmw6IHRoaXMuZW52aXJvbm1lbnQuYXBpQmFzZVVybCB8fCBERUZBVUxUX0NPTkZJRy5hcGlCYXNlVXJsLFxuICAgICAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6ICF0aGlzLmVudmlyb25tZW50LmlzUHJvZHVjdGlvbixcbiAgICAgIC8vIEluamVjdGVkIGNvbmZpZyBvdmVycmlkZXNcbiAgICAgIC4uLmluamVjdGVkQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdldENvbmZpZygpOiBSZXF1aXJlZDxDb3JlQ29uZmlnPiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5jb25maWcgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY29uZmlndXJhdGlvbiBhdCBydW50aW1lXG4gICAqL1xuICB1cGRhdGVDb25maWcodXBkYXRlczogUGFydGlhbDxDb3JlQ29uZmlnPik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4udXBkYXRlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFsdWVcbiAgICovXG4gIGdldDxLIGV4dGVuZHMga2V5b2YgQ29yZUNvbmZpZz4oa2V5OiBLKTogQ29yZUNvbmZpZ1tLXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2tleV07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBmZWF0dXJlIGlzIGVuYWJsZWRcbiAgICovXG4gIGlzRmVhdHVyZUVuYWJsZWQoZmVhdHVyZToga2V5b2YgQ29yZUNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb25maWdbZmVhdHVyZV07XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVBJIFVSTCBmb3IgYSBzcGVjaWZpYyBlbnRpdHlcbiAgICovXG4gIGdldEFwaVVybChlbnRpdHlOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcuYXBpQmFzZVVybDtcbiAgICBpZiAoIWVudGl0eU5hbWUpIHJldHVybiBiYXNlVXJsO1xuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke2VudGl0eU5hbWV9YC5yZXBsYWNlKC9cXC8rL2csICcvJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBVUkwgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gcHJvY2Vzc2luZ1xuICAgKi9cbiAgc2hvdWxkRXhjbHVkZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5leGNsdWRlVXJscy5zb21lKFxuICAgICAgZXhjbHVkZVBhdHRlcm4gPT4gdXJsLmluY2x1ZGVzKGV4Y2x1ZGVQYXR0ZXJuKSB8fCBuZXcgUmVnRXhwKGV4Y2x1ZGVQYXR0ZXJuKS50ZXN0KHVybCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1ldGhvZCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBwcm9jZXNzaW5nXG4gICAqL1xuICBzaG91bGRFeGNsdWRlTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmV4Y2x1ZGVNZXRob2RzLnNvbWUoXG4gICAgICBleGNsdWRlTWV0aG9kID0+IGV4Y2x1ZGVNZXRob2QudG9Mb3dlckNhc2UoKSA9PT0gbWV0aG9kLnRvTG93ZXJDYXNlKCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VzdG9tIGhlYWRlcnMgd2l0aCBkeW5hbWljIHZhbHVlcyByZXNvbHZlZFxuICAgKi9cbiAgZ2V0Q3VzdG9tSGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5jdXN0b21IZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGhlYWRlcnNba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKCkgOiB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGNvbmZpZ3VyYXRpb24gdG8gZGVmYXVsdHNcbiAgICovXG4gIHJlc2V0Q29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5pbml0aWFsaXplQ29uZmlnKCk7XG4gIH1cbn1cblxuLy8gUHJvdmlkZXIgZnVuY3Rpb24gZm9yIGVhc3kgc2V0dXBcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ29yZUNvbmZpZyhjb25maWc6IFBhcnRpYWw8Q29yZUNvbmZpZz4gPSB7fSkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENPUkVfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb25cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb3JlQ29uZmlnKG92ZXJyaWRlczogUGFydGlhbDxDb3JlQ29uZmlnPiA9IHt9KTogQ29yZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xufVxuIl19","export class BaseUseCase {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS11c2UtY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvdXNlLWNhc2VzL2Jhc2UtdXNlLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFnQixXQUFXO0NBSWhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUNhc2U8VFJlcXVlc3QgPSB2b2lkLCBUUmVzcG9uc2UgPSB2b2lkPiB7XG4gIGV4ZWN1dGUocmVxdWVzdDogVFJlcXVlc3QpOiBPYnNlcnZhYmxlPFRSZXNwb25zZT47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlVXNlQ2FzZTxUUmVxdWVzdCA9IHZvaWQsIFRSZXNwb25zZSA9IHZvaWQ+XG4gIGltcGxlbWVudHMgVXNlQ2FzZTxUUmVxdWVzdCwgVFJlc3BvbnNlPlxue1xuICBhYnN0cmFjdCBleGVjdXRlKHJlcXVlc3Q6IFRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUUmVzcG9uc2U+O1xufVxuIl19","import { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\n// Only create commands if you have complex validation logic\nexport class Command extends BaseUseCase {\n // Simple validation - override only when needed\n validate(_request) {\n return []; // Return array of error messages\n }\n execute(request) {\n const errors = this.validate(request);\n if (errors.length > 0) {\n return throwError(() => ({\n status: 'error',\n code: 'VALIDATION_FAILED',\n message: 'Validation failed',\n errors: errors.map(msg => ({ code: 'VALIDATION', message: msg })),\n timestamp: new Date().toISOString(),\n }));\n }\n return this.executeInternal(request).pipe(catchError(error => {\n // Log the error for debugging\n const logger = inject(LoggingService);\n logger.error('An error occurred during command execution:', error);\n // Re-throw the error so the caller can handle it\n return throwError(() => error);\n }));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3VzZS1jYXNlcy9jb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsNERBQTREO0FBQzVELE1BQU0sT0FBZ0IsT0FBb0MsU0FBUSxXQUFnQztJQUNoRyxnREFBZ0Q7SUFDdEMsUUFBUSxDQUFDLFFBQWtCO1FBQ25DLE9BQU8sRUFBRSxDQUFDLENBQUMsaUNBQWlDO0lBQzlDLENBQUM7SUFFUSxPQUFPLENBQUMsT0FBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDakUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQiw4QkFBOEI7WUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbkUsaURBQWlEO1lBQ2pELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlVXNlQ2FzZSB9IGZyb20gJy4vYmFzZS11c2UtY2FzZSc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmctc2VydmljZSc7XG5cbi8vIE9ubHkgY3JlYXRlIGNvbW1hbmRzIGlmIHlvdSBoYXZlIGNvbXBsZXggdmFsaWRhdGlvbiBsb2dpY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1hbmQ8VFJlcXVlc3QsIFRSZXNwb25zZSA9IHZvaWQ+IGV4dGVuZHMgQmFzZVVzZUNhc2U8VFJlcXVlc3QsIFRSZXNwb25zZT4ge1xuICAvLyBTaW1wbGUgdmFsaWRhdGlvbiAtIG92ZXJyaWRlIG9ubHkgd2hlbiBuZWVkZWRcbiAgcHJvdGVjdGVkIHZhbGlkYXRlKF9yZXF1ZXN0OiBUUmVxdWVzdCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107IC8vIFJldHVybiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhlY3V0ZShyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy52YWxpZGF0ZShyZXF1ZXN0KTtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgY29kZTogJ1ZBTElEQVRJT05fRkFJTEVEJyxcbiAgICAgICAgbWVzc2FnZTogJ1ZhbGlkYXRpb24gZmFpbGVkJyxcbiAgICAgICAgZXJyb3JzOiBlcnJvcnMubWFwKG1zZyA9PiAoeyBjb2RlOiAnVkFMSURBVElPTicsIG1lc3NhZ2U6IG1zZyB9KSksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVJbnRlcm5hbChyZXF1ZXN0KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIC8vIExvZyB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZ1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBpbmplY3QoTG9nZ2luZ1NlcnZpY2UpO1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjb21tYW5kIGV4ZWN1dGlvbjonLCBlcnJvcik7XG5cbiAgICAgICAgLy8gUmUtdGhyb3cgdGhlIGVycm9yIHNvIHRoZSBjYWxsZXIgY2FuIGhhbmRsZSBpdFxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVJbnRlcm5hbChyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPjtcbn1cbiJdfQ==","import { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\nexport class Query extends BaseUseCase {\n execute(request) {\n return this.executeInternal(request).pipe(catchError(error => {\n const logger = inject(LoggingService);\n logger.error('An error occurred during query execution:', error);\n return throwError(() => error);\n }));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvdXNlLWNhc2VzL3F1ZXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE1BQU0sT0FBZ0IsS0FBMkIsU0FBUSxXQUFnQztJQUM5RSxPQUFPLENBQUMsT0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdkMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlVXNlQ2FzZSB9IGZyb20gJy4vYmFzZS11c2UtY2FzZSc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmctc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdWVyeTxUUmVxdWVzdCwgVFJlc3BvbnNlPiBleHRlbmRzIEJhc2VVc2VDYXNlPFRSZXF1ZXN0LCBUUmVzcG9uc2U+IHtcbiAgb3ZlcnJpZGUgZXhlY3V0ZShyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUludGVybmFsKHJlcXVlc3QpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gaW5qZWN0KExvZ2dpbmdTZXJ2aWNlKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlSW50ZXJuYWwocmVxdWVzdDogVFJlcXVlc3QpOiBPYnNlcnZhYmxlPFRSZXNwb25zZT47XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvbnRwbHVzLW5nLWluZnJhc3RydWN0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2Fjb250cGx1cy1uZy1pbmZyYXN0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["uuidv4","catchError","DEFAULT_CONFIG"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acontplus-ng-infrastructure.mjs","sources":["../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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acontplus/ng-infrastructure",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
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.0",
|