@acontplus/ng-infrastructure 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1069,9 +1069,47 @@ function createCoreConfig(overrides = {}) {
|
|
|
1069
1069
|
};
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
|
+
class BaseUseCase {
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
// Only create commands if you have complex validation logic
|
|
1076
|
+
class Command extends BaseUseCase {
|
|
1077
|
+
// Simple validation - override only when needed
|
|
1078
|
+
validate(request) {
|
|
1079
|
+
return []; // Return array of error messages
|
|
1080
|
+
}
|
|
1081
|
+
execute(request) {
|
|
1082
|
+
const errors = this.validate(request);
|
|
1083
|
+
if (errors.length > 0) {
|
|
1084
|
+
return throwError(() => ({
|
|
1085
|
+
status: 'error',
|
|
1086
|
+
code: 'VALIDATION_FAILED',
|
|
1087
|
+
message: 'Validation failed',
|
|
1088
|
+
errors: errors.map(msg => ({ code: 'VALIDATION', message: msg })),
|
|
1089
|
+
timestamp: new Date().toISOString(),
|
|
1090
|
+
}));
|
|
1091
|
+
}
|
|
1092
|
+
return this.executeInternal(request).pipe(catchError(error => {
|
|
1093
|
+
// Log the error for debugging
|
|
1094
|
+
console.error('An error occurred during command execution:', error);
|
|
1095
|
+
// Re-throw the error so the caller can handle it
|
|
1096
|
+
return throwError(() => error);
|
|
1097
|
+
}));
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
class Query extends BaseUseCase {
|
|
1102
|
+
execute(request) {
|
|
1103
|
+
return this.executeInternal(request).pipe(catchError(error => {
|
|
1104
|
+
console.error('An error occurred during query execution:', error);
|
|
1105
|
+
return throwError(() => error);
|
|
1106
|
+
}));
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1072
1110
|
/**
|
|
1073
1111
|
* Generated bundle index. Do not edit.
|
|
1074
1112
|
*/
|
|
1075
1113
|
|
|
1076
|
-
export { ActiveRequestsTracker, AngularHttpAdapter, BaseHttpRepository, CORE_CONFIG, CoreConfigService, CorrelationService, GenericRepository, HTTP_CONTEXT_CONFIG, LoggingService, REPOSITORY_CONFIG, RepositoryFactory, SHOW_NOTIFICATIONS, SKIP_NOTIFICATION, SearchableGenericRepository, TOKEN_PROVIDER, UserRepository, apiInterceptor, createCoreConfig, createHttpContextConfig, customUrl, httpContextInterceptor, provideCoreConfig, provideHttpContext, skipContextHeaders, spinnerInterceptor, withCustomHeaders, withoutSpinner };
|
|
1114
|
+
export { ActiveRequestsTracker, AngularHttpAdapter, BaseHttpRepository, BaseUseCase, CORE_CONFIG, Command, CoreConfigService, CorrelationService, GenericRepository, HTTP_CONTEXT_CONFIG, LoggingService, Query, REPOSITORY_CONFIG, RepositoryFactory, SHOW_NOTIFICATIONS, SKIP_NOTIFICATION, SearchableGenericRepository, TOKEN_PROVIDER, UserRepository, apiInterceptor, createCoreConfig, createHttpContextConfig, customUrl, httpContextInterceptor, provideCoreConfig, provideHttpContext, skipContextHeaders, spinnerInterceptor, withCustomHeaders, withoutSpinner };
|
|
1077
1115
|
//# sourceMappingURL=acontplus-ng-infrastructure.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acontplus-ng-infrastructure.mjs","sources":["../tmp-esm2022/lib/interfaces/token-provider.interface.js","../tmp-esm2022/lib/interceptors/api.interceptor.js","../tmp-esm2022/lib/services/tenant.service.js","../tmp-esm2022/lib/services/correlation.service.js","../tmp-esm2022/lib/services/logging.service.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/repositories/user.repository.js","../tmp-esm2022/lib/adapters/angular-http.adapter.js","../tmp-esm2022/lib/services/core-config.service.js","../tmp-esm2022/acontplus-ng-infrastructure.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const TOKEN_PROVIDER = new InjectionToken('TOKEN_PROVIDER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmZhY2VzL3Rva2VuLXByb3ZpZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUS9DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRva2VuUHJvdmlkZXIge1xuICBnZXRUb2tlbigpOiBzdHJpbmcgfCBudWxsO1xuICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbjtcbiAgZ2V0UmVmcmVzaFRva2VuPygpOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgVE9LRU5fUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVRva2VuUHJvdmlkZXI+KCdUT0tFTl9QUk9WSURFUicpO1xuIl19","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 { TOKEN_PROVIDER } from '../interfaces/token-provider.interface';\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(TOKEN_PROVIDER, { 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 && showNotifications && ['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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYXBpLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxZQUFZLEVBR1osZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU1RSxpSEFBaUg7QUFDakgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBc0IsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFN0YsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsaURBQWlEO0lBQ2pELElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUN0QixNQUFNLEtBQUss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TyxrQkFBa0IsQ0FBQztJQUM1QyxJQUFJLE1BQU0sSUFBSSxHQUFHO1FBQUUsT0FBTyxjQUFjLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxLQUF3QjtJQUN2RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyx3RUFBd0UsQ0FBQztJQUNsRixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FDTCxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLGtEQUFrRCxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQztBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cEludGVyY2VwdG9yRm4sXG4gIEh0dHBFdmVudCxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBDb250ZXh0VG9rZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvbnRwbHVzL25nLW5vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgVE9LRU5fUFJPVklERVIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Rva2VuLXByb3ZpZGVyLmludGVyZmFjZSc7XG5cbi8vIEEgdG9rZW4gdG8gdXNlIHdpdGggSHR0cENvbnRleHQgZm9yIHNraXBwaW5nIG5vdGlmaWNhdGlvbnMgb24gc3BlY2lmaWMgcmVxdWVzdHMuXG5leHBvcnQgY29uc3QgU0tJUF9OT1RJRklDQVRJT04gPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiBmYWxzZSk7XG5cbi8vIEEgdG9rZW4gdG8gdXNlIHdpdGggSHR0cENvbnRleHQgZm9yIGZvcmNpbmcgbm90aWZpY2F0aW9ucyBvbiBzcGVjaWZpYyByZXF1ZXN0cyAob3ZlcnJpZGVzIGV4Y2x1c2lvbiBwYXR0ZXJucykuXG5leHBvcnQgY29uc3QgU0hPV19OT1RJRklDQVRJT05TID0gbmV3IEh0dHBDb250ZXh0VG9rZW48Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKCkgPT4gdW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IGFwaUludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXEsIG5leHQpID0+IHtcbiAgY29uc3QgdG9hc3RyID0gaW5qZWN0KE5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBjb25zdCB0b2tlblByb3ZpZGVyID0gaW5qZWN0KFRPS0VOX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiB0b2tlbiBpcyBhdmFpbGFibGVcbiAgbGV0IG1vZGlmaWVkUmVxID0gcmVxO1xuICBjb25zdCB0b2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFRva2VuKCk7XG4gIGlmICh0b2tlbikge1xuICAgIG1vZGlmaWVkUmVxID0gcmVxLmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQobW9kaWZpZWRSZXEpLnBpcGUoXG4gICAgLy8gUmV0cmllcyB0aGUgcmVxdWVzdCB1cCB0byAyIHRpbWVzIG9uIGZhaWx1cmUgd2l0aCBhIDEtc2Vjb25kIGRlbGF5LlxuICAgIHJldHJ5KHsgY291bnQ6IDIsIGRlbGF5OiAxMDAwIH0pLFxuICAgIC8vIFVzZSB0aGUgYG1hcGAgb3BlcmF0b3IgdG8gaGFuZGxlIHN1Y2Nlc3NmdWwgcmVzcG9uc2VzLlxuICAgIG1hcCgoZXZlbnQ6IEh0dHBFdmVudDx1bmtub3duPikgPT4ge1xuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVTdWNjZXNzUmVzcG9uc2UoZXZlbnQsIHRvYXN0ciwgcmVxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KSxcbiAgICAvLyBVc2UgdGhlIGBjYXRjaEVycm9yYCBvcGVyYXRvciB0byBoYW5kbGUgYW55IGVycm9ycyB0aGF0IG9jY3VyLlxuICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gaGFuZGxlRXJyb3JSZXNwb25zZShlcnJvciwgdG9hc3RyKSksXG4gICk7XG59O1xuXG4vLyAtLS0gSGVscGVyIEZ1bmN0aW9ucyAtLS1cblxuLyoqXG4gKiBIYW5kbGVzIHN1Y2Nlc3NmdWwgSFRUUCByZXNwb25zZXMsIHN0YW5kYXJkaXplcyB0aGVtLCBzaG93cyBub3RpZmljYXRpb25zLCBhbmQgdHJhbnNmb3JtcyBmb3IgY29uc3VtZXJzLlxuICovXG5mdW5jdGlvbiBoYW5kbGVTdWNjZXNzUmVzcG9uc2UoXG4gIGV2ZW50OiBIdHRwUmVzcG9uc2U8dW5rbm93bj4sXG4gIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gIHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4pOiBIdHRwUmVzcG9uc2U8dW5rbm93bj4ge1xuICBjb25zdCBib2R5ID0gZXZlbnQuYm9keTtcblxuICAvLyBTdGFuZGFyZGl6ZSB0aGUgcmVzcG9uc2UgdG8gYWx3YXlzIGhhdmUgQXBpUmVzcG9uc2Ugc3RydWN0dXJlXG4gIGNvbnN0IHN0YW5kYXJkaXplZFJlc3BvbnNlID0gc3RhbmRhcmRpemVBcGlSZXNwb25zZShib2R5KTtcblxuICAvLyBIYW5kbGUgdG9hc3Qgbm90aWZpY2F0aW9ucyBiYXNlZCBvbiBzdGFuZGFyZGl6ZWQgcmVzcG9uc2VcbiAgaGFuZGxlVG9hc3ROb3RpZmljYXRpb25zKHN0YW5kYXJkaXplZFJlc3BvbnNlLCBub3RpZmljYXRpb25TZXJ2aWNlLCByZXEpO1xuXG4gIC8vIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgZGF0YSBiYXNlZCBvbiByZXNwb25zZSB0eXBlXG4gIHJldHVybiB0cmFuc2Zvcm1SZXNwb25zZUZvckNvbnN1bWVycyhzdGFuZGFyZGl6ZWRSZXNwb25zZSwgZXZlbnQpO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgSFRUUCBlcnJvcnMgKGZyb20gdGhlIGludGVyY2VwdG9yIGNoYWluLCBub3QgYmFja2VuZCBBcGlSZXNwb25zZSkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUVycm9yUmVzcG9uc2UoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlKSB7XG4gIGNvbnN0IHN0YXR1cyA9IGVycm9yLnN0YXR1cztcblxuICAvLyBPbmx5IHNob3cgbm90aWZpY2F0aW9ucyBmb3IgY3JpdGljYWwgSFRUUC1sZXZlbCBlcnJvcnMuXG4gIC8vIFdlIGF2b2lkIHNob3dpbmcgdG9hc3RzIGZvciA0eHggZXJyb3JzLCB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGUgY29tcG9uZW50LlxuICBpZiAoc3RhdHVzICE9PSBudWxsICYmIHNob3VsZFNob3dDcml0aWNhbEVycm9yTm90aWZpY2F0aW9uKHN0YXR1cykpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZ2V0Q3JpdGljYWxFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0RXJyb3JUaXRsZShzdGF0dXMpO1xuXG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgY29uZmlnOiB7IGR1cmF0aW9uOiA1MDAwIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBBbHdheXMgcmUtdGhyb3cgdGhlIGVycm9yIHNvIGNvbXBvbmVudHMvc2VydmljZXMgY2FuIGhhbmRsZSBpdC5cbiAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkaXplcyBhbnkgcmVzcG9uc2UgdG8gZm9sbG93IHRoZSBBcGlSZXNwb25zZSBzdHJ1Y3R1cmVcbiAqL1xuZnVuY3Rpb24gc3RhbmRhcmRpemVBcGlSZXNwb25zZShib2R5OiB1bmtub3duKTogQXBpUmVzcG9uc2U8dW5rbm93bj4ge1xuICAvLyBJZiBpdCdzIGFscmVhZHkgYSBwcm9wZXIgQXBpUmVzcG9uc2UsIHJldHVybiBhcyBpc1xuICBpZiAoaXNWYWxpZEFwaVJlc3BvbnNlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvLyBJZiBpdCdzIGEgcmF3IGRhdGEgcmVzcG9uc2UgKG5vIHdyYXBwZXIpLCB3cmFwIGl0XG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyAmJiAhKCdzdGF0dXMnIGluIGJvZHkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgY29kZTogJzIwMCcsXG4gICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgZGF0YTogYm9keSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICAvLyBJZiBpdCdzIGEgcHJpbWl0aXZlIHZhbHVlLCB3cmFwIGl0XG4gIGlmIChib2R5ICE9PSBudWxsICYmIGJvZHkgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICBjb2RlOiAnMjAwJyxcbiAgICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICBkYXRhOiBib2R5LFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIElmIGl0J3MgbnVsbC91bmRlZmluZWQsIGNyZWF0ZSBhIHN1Y2Nlc3MgcmVzcG9uc2Ugd2l0aG91dCBkYXRhXG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgY29kZTogJzIwMCcsXG4gICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gc3RhbmRhcmRpemVkIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVRvYXN0Tm90aWZpY2F0aW9ucyhcbiAgcmVzcG9uc2U6IEFwaVJlc3BvbnNlPHVua25vd24+LFxuICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHNob3VsZFNob3dUb2FzdCA9IHNob3VsZFNob3dTdWNjZXNzVG9hc3QocmVxKTtcbiAgY29uc3QgZm9yY2VTaG93ID0gcmVxLmNvbnRleHQuZ2V0KFNIT1dfTk9USUZJQ0FUSU9OUyk7XG4gIGNvbnN0IHNraXBOb3RpZmljYXRpb24gPSByZXEuY29udGV4dC5nZXQoU0tJUF9OT1RJRklDQVRJT04pO1xuXG4gIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgc2hvdyBub3RpZmljYXRpb25zLCBjb25zaWRlcmluZyBvdmVycmlkZXNcbiAgY29uc3Qgc2hvd05vdGlmaWNhdGlvbnMgPSBmb3JjZVNob3cgIT09IHVuZGVmaW5lZCA/IGZvcmNlU2hvdyA6IHNob3VsZFNob3dUb2FzdDtcblxuICBpZiAoc2tpcE5vdGlmaWNhdGlvbikgcmV0dXJuO1xuXG4gIC8vIER5bmFtaWMgaGFuZGxpbmc6IFVzZSBzaG93KCkgZm9yIHJ1bnRpbWUgdHlwZSBzZWxlY3Rpb25cbiAgaWYgKHJlc3BvbnNlLm1lc3NhZ2UgJiYgc2hvd05vdGlmaWNhdGlvbnMgJiYgWydzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZXJyb3InXS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5zaG93KHtcbiAgICAgIHR5cGU6IHJlc3BvbnNlLnN0YXR1cyBhcyAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB3YXJuaW5ncyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnd2FybmluZycgJiYgcmVzcG9uc2Uud2FybmluZ3MgJiYgcmVzcG9uc2Uud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlLnNob3coe1xuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIG1lc3NhZ2U6IHdhcm5pbmcubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSGFuZGxlIGVycm9ycyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmVycm9ycyAmJiByZXNwb25zZS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLmVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHN0YW5kYXJkaXplZCByZXNwb25zZSBmb3IgY29uc3VtZXJzXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlRm9yQ29uc3VtZXJzKFxuICByZXNwb25zZTogQXBpUmVzcG9uc2U8dW5rbm93bj4sXG4gIG9yaWdpbmFsRXZlbnQ6IEh0dHBSZXNwb25zZTx1bmtub3duPixcbik6IEh0dHBSZXNwb25zZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAvLyBGb3Igc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtZXNzYWdlLW9ubHkgc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgcmV0dXJuIG9yaWdpbmFsRXZlbnQuY2xvbmUoeyBib2R5OiByZXNwb25zZSB9KTtcblxuICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgLy8gRm9yIHdhcm5pbmdzLCByZXR1cm4gZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICAvLyBFcnJvcnMgc2hvdWxkIGJlIHRocm93biwgbm90IHJldHVybmVkXG4gICAgICB0aHJvdyByZXNwb25zZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb3JpZ2luYWxFdmVudC5jbG9uZSh7IGJvZHk6IHJlc3BvbnNlIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcmVzcG9uc2UgaXMgYSB2YWxpZCBBcGlSZXNwb25zZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXBpUmVzcG9uc2UocmVzcG9uc2U6IHVua25vd24pOiByZXNwb25zZSBpcyBBcGlSZXNwb25zZTx1bmtub3duPiB7XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzcG9uc2UgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHIgPSByZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICAnc3RhdHVzJyBpbiByICYmXG4gICAgJ2NvZGUnIGluIHIgJiZcbiAgICB0eXBlb2Ygclsnc3RhdHVzJ10gPT09ICdzdHJpbmcnICYmXG4gICAgWydzdWNjZXNzJywgJ2Vycm9yJywgJ3dhcm5pbmcnXS5pbmNsdWRlcyhyWydzdGF0dXMnXSlcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBzdWNjZXNzIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gdGhlIHJlcXVlc3QgdHlwZS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2hvd1N1Y2Nlc3NUb2FzdChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogYm9vbGVhbiB7XG4gIGNvbnN0IHVybCA9IHJlcS51cmw/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgLy8gTmV2ZXIgc2hvdyBmb3IgdGhlc2UgY2FzZXNcbiAgY29uc3QgZXhjbHVkZWRQYXR0ZXJucyA9IFtcbiAgICAnZ2V0JyxcbiAgICAnL2xpc3QnLFxuICAgICcvc2VhcmNoJyxcbiAgICAnL3F1ZXJ5JyxcbiAgICAnL3BhZ2UnLFxuICAgICcvcGFnaW5hdGVkJyxcbiAgICAnL2hlYWx0aCcsXG4gICAgJy9zdGF0dXMnLFxuICAgICcvcGluZycsXG4gIF07XG5cbiAgaWYgKGV4Y2x1ZGVkUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IG1ldGhvZCA9PT0gcGF0dGVybiB8fCB1cmwuaW5jbHVkZXMocGF0dGVybikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQWx3YXlzIHNob3cgZm9yIHRoZXNlIG1ldGhvZHNcbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnZGVsZXRlJ10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICByZXR1cm4gbWV0aG9kICE9PSAnZ2V0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHdlIHNob3VsZCBzaG93IGEgbm90aWZpY2F0aW9uIGZvciB0aGlzIEhUVFAgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNob3dDcml0aWNhbEVycm9yTm90aWZpY2F0aW9uKHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gIC8vIFNob3cgbm90aWZpY2F0aW9ucyBmb3I6XG4gIC8vIC0gTmV0d29yayBlcnJvcnMgKHN0YXR1cyAwKVxuICAvLyAtIFNlcnZlciBlcnJvcnMgKDV4eClcbiAgcmV0dXJuIHN0YXR1cyA9PT0gMCB8fCAoc3RhdHVzID49IDUwMCAmJiBzdGF0dXMgPCA2MDApO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIHRpdGxlIGZvciBlcnJvciBub3RpZmljYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvclRpdGxlKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHN0YXR1cyA9PT0gMCkgcmV0dXJuICdDb25uZWN0aW9uIEVycm9yJztcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHJldHVybiAnU2VydmVyIEVycm9yJztcbiAgcmV0dXJuICdFcnJvcic7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSBmb3IgY3JpdGljYWwgZXJyb3JzLlxuICovXG5mdW5jdGlvbiBnZXRDcml0aWNhbEVycm9yTWVzc2FnZShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBzdHJpbmcge1xuICBpZiAoZXJyb3Iuc3RhdHVzID09PSAwKSB7XG4gICAgcmV0dXJuICdVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uJztcbiAgfVxuXG4gIGlmIChlcnJvci5zdGF0dXMgPj0gNTAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0Egc2VydmVyIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnO1xufVxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class TenantService {\n tenantId = null;\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 console.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.2\", ngImport: i0, type: TenantService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TenantService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TenantService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLFFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBRXZDLFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsUUFBUTtnQkFDWCxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDaEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDN0IsZ0JBQWdCLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QscURBQXFEO1FBQ3JELG1EQUFtRDtJQUNyRCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLHFEQUFxRDtRQUNyRCx3QkFBd0I7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDO3VHQTVDVSxhQUFhOzJHQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudFNlcnZpY2Uge1xuICBwcml2YXRlIHRlbmFudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBnZXRUZW5hbnRJZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy50ZW5hbnRJZCkge1xuICAgICAgLy8gR2V0IGZyb20gbG9jYWxTdG9yYWdlLCBzZXNzaW9uU3RvcmFnZSwgb3IgSldUIHRva2VuXG4gICAgICB0aGlzLnRlbmFudElkID1cbiAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbmFudElkJykgfHxcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndGVuYW50SWQnKSB8fFxuICAgICAgICB0aGlzLmV4dHJhY3RUZW5hbnRGcm9tVG9rZW4oKSB8fFxuICAgICAgICAnZGVmYXVsdC10ZW5hbnQnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50ZW5hbnRJZDtcbiAgfVxuXG4gIGdldEN1cnJlbnRUZW5hbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGVuYW50SWQ7XG4gIH1cblxuICBzZXRUZW5hbnRJZCh0ZW5hbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50ZW5hbnRJZCA9IHRlbmFudElkO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZW5hbnRJZCcsIHRlbmFudElkKTtcbiAgfVxuXG4gIHNldFRlbmFudCh0ZW5hbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRUZW5hbnRJZCh0ZW5hbnRJZCk7XG4gIH1cblxuICBoYW5kbGVGb3JiaWRkZW4oKTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcignQWNjZXNzIGZvcmJpZGRlbiBmb3IgdGVuYW50OicsIHRoaXMudGVuYW50SWQpO1xuICAgIC8vIFJlZGlyZWN0IHRvIHRlbmFudCBzZWxlY3Rpb24gb3Igc2hvdyBlcnJvciBtZXNzYWdlXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvdGVuYW50LWFjY2Vzcy1kZW5pZWQnXSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RUZW5hbnRGcm9tVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiB5b3VyIEpXVCB0b2tlbiBzdHJ1Y3R1cmVcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXJcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFyVGVuYW50KCk6IHZvaWQge1xuICAgIHRoaXMudGVuYW50SWQgPSBudWxsO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZW5hbnRJZCcpO1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RlbmFudElkJyk7XG4gIH1cbn1cbiJdfQ==","import { Injectable, signal, computed } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as i0 from \"@angular/core\";\nexport class CorrelationService {\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 // @ts-ignore\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.2\", ngImport: i0, type: CorrelationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CorrelationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CorrelationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29ycmVsYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3BDLE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsYUFBYSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSx5REFBQyxDQUFDO0lBQ25DLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQztJQUVwRCwyQ0FBMkM7SUFDbEMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZ0VBQUMsQ0FBQztJQUVyRSx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQzFCLDREQUE0RDtZQUM1RCxhQUFhO1lBQ2IsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUcsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBcUI7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7dUdBOUJVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvcnJlbGF0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgY29ycmVsYXRpb25JZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBDT1JSRUxBVElPTl9LRVkgPSAnY29ycmVsYXRpb24taWQnO1xuXG4gIC8vIFNpZ25hbC1iYXNlZCBnZXR0ZXIgZm9yIHJlYWN0aXZlIHVwZGF0ZXNcbiAgcmVhZG9ubHkgY3VycmVudENvcnJlbGF0aW9uSWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvcnJlbGF0aW9uSWQoKSk7XG5cbiAgZ2V0T3JDcmVhdGVDb3JyZWxhdGlvbklkKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNvcnJlbGF0aW9uSWQoKSkge1xuICAgICAgLy8gVHJ5IHRvIGdldCBmcm9tIHNlc3Npb25TdG9yYWdlIGZpcnN0IChmb3IgcGFnZSByZWZyZXNoZXMpXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5DT1JSRUxBVElPTl9LRVkpIHx8IHV1aWR2NCgpO1xuICAgICAgdGhpcy5jb3JyZWxhdGlvbklkLnNldChpZCk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ09SUkVMQVRJT05fS0VZLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvcnJlbGF0aW9uSWQoKSE7XG4gIH1cblxuICBzZXRDb3JyZWxhdGlvbklkKGNvcnJlbGF0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29ycmVsYXRpb25JZC5zZXQoY29ycmVsYXRpb25JZCk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNPUlJFTEFUSU9OX0tFWSwgY29ycmVsYXRpb25JZCk7XG4gIH1cblxuICByZXNldENvcnJlbGF0aW9uSWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb3JyZWxhdGlvbklkLnNldChudWxsKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ09SUkVMQVRJT05fS0VZKTtcbiAgfVxuXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVDb3JyZWxhdGlvbklkKCk7XG4gIH1cbn1cbiJdfQ==","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\n console[level](`[${level.toUpperCase()}] ${message}`, context);\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.2\", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoggingService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoggingService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9zZXJ2aWNlcy9sb2dnaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU1uRCxNQUFNLE9BQU8sY0FBYztJQUNqQixXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFDLEdBQUcsQ0FBQyxLQUFnQyxFQUFFLE9BQWUsRUFBRSxPQUFhO1FBQ2xFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxpREFBaUQ7WUFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixzQkFBc0I7WUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLGNBQWMsQ0FBQyxHQUFtQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuRCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDeEIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO1lBQ2hDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQzVCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLFlBQVksQ0FBQyxLQUFtQjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsZUFBZSxDQUFDLGFBQXFCO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUU7WUFDdEMsSUFBSSxFQUFFLGVBQWU7WUFDckIsYUFBYTtZQUNiLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztZQUM5QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixpQkFBaUIsQ0FBQyxhQUFxQixFQUFFLEdBQVc7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMvQixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLGFBQWE7WUFDYixHQUFHO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsT0FBYTtRQUN4RSxpREFBaUQ7UUFDakQsZ0NBQWdDO1FBQ2hDLDhEQUE4RDtJQUNoRSxDQUFDO3VHQTFFVSxjQUFjOzJHQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5pbXBvcnQgeyBIdHRwUmVxdWVzdExvZywgSHR0cEVycm9yTG9nIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgbG9nKGxldmVsOiAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIFByb2R1Y3Rpb24gbG9nZ2luZyAoZS5nLiwgdG8gZXh0ZXJuYWwgc2VydmljZSlcbiAgICAgIHRoaXMubG9nVG9FeHRlcm5hbFNlcnZpY2UobGV2ZWwsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXZlbG9wbWVudCBsb2dnaW5nXG4gICAgICBjb25zb2xlW2xldmVsXShgWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gLCBjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCd3YXJuJywgbWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIEhUVFAgUmVxdWVzdCBMb2dnaW5nXG4gIGxvZ0h0dHBSZXF1ZXN0KGxvZzogSHR0cFJlcXVlc3RMb2cpOiB2b2lkIHtcbiAgICB0aGlzLmluZm8oYEhUVFAgUmVxdWVzdCAtICR7bG9nLm1ldGhvZH0gJHtsb2cudXJsfWAsIHtcbiAgICAgIHJlcXVlc3RJZDogbG9nLnJlcXVlc3RJZCxcbiAgICAgIGNvcnJlbGF0aW9uSWQ6IGxvZy5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGxvZy50ZW5hbnRJZCxcbiAgICAgIGhlYWRlcnM6IGxvZy5oZWFkZXJzLFxuICAgICAgaXNDdXN0b21Vcmw6IGxvZy5pc0N1c3RvbVVybCxcbiAgICAgIHRpbWVzdGFtcDogbG9nLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhUVFAgRXJyb3IgTG9nZ2luZ1xuICBsb2dIdHRwRXJyb3IoZXJyb3I6IEh0dHBFcnJvckxvZyk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IoYEhUVFAgRXJyb3IgLSAke2Vycm9yLm1ldGhvZH0gJHtlcnJvci51cmx9YCwge1xuICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgcmVxdWVzdElkOiBlcnJvci5yZXF1ZXN0SWQsXG4gICAgICBjb3JyZWxhdGlvbklkOiBlcnJvci5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGVycm9yLnRlbmFudElkLFxuICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvckRldGFpbHMsXG4gICAgICBlbnZpcm9ubWVudDogZXJyb3IuZW52aXJvbm1lbnQsXG4gICAgICB0aW1lc3RhbXA6IGVycm9yLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5ldHdvcmsgRXJyb3IgTG9nZ2luZ1xuICBsb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvcignTmV0d29yayBjb25uZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIHR5cGU6ICduZXR3b3JrLWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSYXRlIExpbWl0IEVycm9yIExvZ2dpbmdcbiAgbG9nUmF0ZUxpbWl0RXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nLCB1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud2FybignUmF0ZSBsaW1pdCBleGNlZWRlZCcsIHtcbiAgICAgIHR5cGU6ICdyYXRlLWxpbWl0LWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1cmwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1RvRXh0ZXJuYWxTZXJ2aWNlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IHZvaWQge1xuICAgIC8vIEltcGxlbWVudCBleHRlcm5hbCBsb2dnaW5nIHNlcnZpY2UgaW50ZWdyYXRpb25cbiAgICAvLyBlLmcuLCBTZW50cnksIExvZ1JvY2tldCwgZXRjLlxuICAgIC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvZHVjdGlvbiBsb2dnaW5nIGltcGxlbWVudGF0aW9uXG4gIH1cbn1cbiJdfQ==","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 { ENVIRONMENT } from '@acontplus/ng-config';\n// Services\nimport { TenantService } from '../services/tenant.service';\nimport { CorrelationService } from '../services/correlation.service';\nimport { LoggingService } from '../services/logging.service';\nimport { TOKEN_PROVIDER } from '../interfaces/token-provider.interface';\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(TOKEN_PROVIDER, { optional: true });\n const router = inject(Router);\n const tenantService = inject(TenantService);\n const correlationService = inject(CorrelationService);\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 console.error('Unauthorized access - token expired or invalid');\n // Note: Token clearing should be handled by the auth service, not infrastructure\n router.navigate(['/login']);\n break;\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jb250ZXh0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvaHR0cC1jb250ZXh0LmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDLENBQUMsd0JBQXdCO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FHWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELFdBQVc7QUFDWCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxzQkFBc0I7QUFDdEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RCxNQUFNLG9CQUFvQixHQUFHLElBQUksZ0JBQWdCLENBQVUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBeUIs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Q0wsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsU0FBUztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFxQyxFQUFFO0lBQ3hFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsUUFBUSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztTQUMxQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyAvLyBJbXBvcnQgSW5qZWN0aW9uVG9rZW5cbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwQ29udGV4dCxcbiAgSHR0cEludGVyY2VwdG9yRm4sXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0aHJvd0Vycm9yLCBzd2l0Y2hNYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG4vLyBFbnZpcm9ubWVudCBhbmQgY29uZmlndXJhdGlvblxuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbi8vIFNlcnZpY2VzXG5pbXBvcnQgeyBUZW5hbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGVuYW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ycmVsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29ycmVsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBUT0tFTl9QUk9WSURFUiB9IGZyb20gJy4uL2ludGVyZmFjZXMvdG9rZW4tcHJvdmlkZXIuaW50ZXJmYWNlJztcblxuLy8gSFRUUCBDb250ZXh0IHRva2Vuc1xuY29uc3QgQ1VTVE9NX1VSTCA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcbmNvbnN0IFNLSVBfQ09OVEVYVF9IRUFERVJTID0gbmV3IEh0dHBDb250ZXh0VG9rZW48Ym9vbGVhbj4oKCkgPT4gZmFsc2UpO1xuY29uc3QgQ1VTVE9NX0hFQURFUlMgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiAoe30pKTtcblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgSFRUUCBjb250ZXh0XG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tVXJsKCkge1xuICByZXR1cm4gbmV3IEh0dHBDb250ZXh0KCkuc2V0KENVU1RPTV9VUkwsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2tpcENvbnRleHRIZWFkZXJzKCkge1xuICByZXR1cm4gbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNLSVBfQ09OVEVYVF9IRUFERVJTLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDdXN0b21IZWFkZXJzKGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChDVVNUT01fSEVBREVSUywgaGVhZGVycyk7XG59XG5cbi8vIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBsaWJyYXJ5IGNvbnN1bWVyc1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ29udGV4dENvbmZpZyB7XG4gIGVuYWJsZUNvcnJlbGF0aW9uVHJhY2tpbmc/OiBib29sZWFuO1xuICBlbmFibGVSZXF1ZXN0TG9nZ2luZz86IGJvb2xlYW47XG4gIGVuYWJsZUVycm9yTG9nZ2luZz86IGJvb2xlYW47XG4gIGN1c3RvbUhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKT47XG4gIGNsaWVudFZlcnNpb24/OiBzdHJpbmc7XG4gIHRlbmFudElkSGVhZGVyPzogc3RyaW5nO1xuICBjb3JyZWxhdGlvbklkSGVhZGVyPzogc3RyaW5nO1xuICByZXF1ZXN0SWRIZWFkZXI/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcEhlYWRlcj86IHN0cmluZztcbiAgZXhjbHVkZVVybHM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZUF1dGhUb2tlbj86IGJvb2xlYW47XG4gIGJhc2VVcmxJbmplY3Rpb24/OiBib29sZWFuO1xuICByZWZyZXNoVG9rZW5DYWxsYmFjaz86ICgpID0+IE9ic2VydmFibGU8eyB0b2tlbjogc3RyaW5nOyByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfT47XG4gIGxvZ291dENhbGxiYWNrPzogKCkgPT4gdm9pZDtcbn1cblxuLy8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5jb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWQ8SHR0cENvbnRleHRDb25maWc+ID0ge1xuICBlbmFibGVDb3JyZWxhdGlvblRyYWNraW5nOiB0cnVlLFxuICBlbmFibGVSZXF1ZXN0TG9nZ2luZzogZmFsc2UsIC8vIFRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGVudmlyb25tZW50LmlzUHJvZHVjdGlvblxuICBlbmFibGVFcnJvckxvZ2dpbmc6IHRydWUsXG4gIGN1c3RvbUhlYWRlcnM6IHt9LFxuICBjbGllbnRWZXJzaW9uOiAnMS4wLjAnLFxuICB0ZW5hbnRJZEhlYWRlcjogJ1RlbmFudC1JZCcsXG4gIGNvcnJlbGF0aW9uSWRIZWFkZXI6ICdDb3JyZWxhdGlvbi1JZCcsXG4gIHJlcXVlc3RJZEhlYWRlcjogJ1JlcXVlc3QtSWQnLFxuICB0aW1lc3RhbXBIZWFkZXI6ICdUaW1lc3RhbXAnLFxuICBleGNsdWRlVXJsczogW10sXG4gIGluY2x1ZGVBdXRoVG9rZW46IHRydWUsXG4gIGJhc2VVcmxJbmplY3Rpb246IHRydWUsXG4gIHJlZnJlc2hUb2tlbkNhbGxiYWNrOiB1bmRlZmluZWQgYXMgYW55LFxuICBsb2dvdXRDYWxsYmFjazogdW5kZWZpbmVkIGFzIGFueSxcbn07XG5cbi8vIEluamVjdGlvbiB0b2tlbiBmb3IgY29uZmlndXJhdGlvbiAtIEZJWEVEXG5leHBvcnQgY29uc3QgSFRUUF9DT05URVhUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxIdHRwQ29udGV4dENvbmZpZz4oJ0hUVFBfQ09OVEVYVF9DT05GSUcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IERFRkFVTFRfQ09ORklHLCAvLyBQcm92aWRlIGEgZGVmYXVsdCBmYWN0b3J5IGluIGNhc2UgaXQncyBub3QgcHJvdmlkZWRcbn0pO1xuXG5leHBvcnQgY29uc3QgaHR0cENvbnRleHRJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHRva2VuUHJvdmlkZXIgPSBpbmplY3QoVE9LRU5fUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdCB0ZW5hbnRTZXJ2aWNlID0gaW5qZWN0KFRlbmFudFNlcnZpY2UpO1xuICBjb25zdCBjb3JyZWxhdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ycmVsYXRpb25TZXJ2aWNlKTtcbiAgY29uc3QgbG9nZ2luZ1NlcnZpY2UgPSBpbmplY3QoTG9nZ2luZ1NlcnZpY2UpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgLy8gR2V0IGNvbmZpZ3VyYXRpb24gKHdpdGggZmFsbGJhY2sgdG8gZGVmYXVsdCkgLSBGSVhFRFxuICBjb25zdCBjb25maWc6IFJlcXVpcmVkPEh0dHBDb250ZXh0Q29uZmlnPiA9IHtcbiAgICAuLi5ERUZBVUxUX0NPTkZJRyxcbiAgICAvLyBUaGUgZGVmYXVsdCBlbmFibGVSZXF1ZXN0TG9nZ2luZyBuZWVkcyB0byBiZSBzZXQgYmFzZWQgb24gZW52aXJvbm1lbnQgaGVyZSxcbiAgICAvLyBhcyBpdCdzIGR5bmFtaWMsIGFuZCBERUZBVUxUX0NPTkZJRyBpcyBzdGF0aWMuXG4gICAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6ICFlbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24sXG4gICAgLi4uaW5qZWN0KEhUVFBfQ09OVEVYVF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSksXG4gIH07XG5cbiAgLy8gQ2hlY2sgSFRUUCBjb250ZXh0IHRva2Vuc1xuICBjb25zdCBpc0N1c3RvbVVybCA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fVVJMKTtcbiAgY29uc3Qgc2tpcEhlYWRlcnMgPSByZXEuY29udGV4dC5nZXQoU0tJUF9DT05URVhUX0hFQURFUlMpO1xuICBjb25zdCBjb250ZXh0SGVhZGVycyA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fSEVBREVSUyk7XG5cbiAgLy8gU2tpcCBwcm9jZXNzaW5nIGlmIGhlYWRlcnMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgaWYgKHNraXBIZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIFVSTCBzaG91bGQgYmUgZXhjbHVkZWRcbiAgY29uc3Qgc2hvdWxkRXhjbHVkZSA9IGNvbmZpZy5leGNsdWRlVXJscy5zb21lKFxuICAgIHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkgfHwgbmV3IFJlZ0V4cCh1cmwpLnRlc3QocmVxLnVybCksXG4gICk7XG5cbiAgaWYgKHNob3VsZEV4Y2x1ZGUpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG5cbiAgLy8gU2tpcCBhdXRoIGZvciBsb2dpbiwgcmVnaXN0ZXIsIGFuZCByZWZyZXNoIGVuZHBvaW50c1xuICBjb25zdCBza2lwQXV0aCA9IHJlcS51cmwuaW5jbHVkZXMoJy9sb2dpbicpIHx8IHJlcS51cmwuaW5jbHVkZXMoJy9yZWdpc3RlcicpIHx8IHJlcS51cmwuaW5jbHVkZXMoJy9yZWZyZXNoJyk7XG5cbiAgLy8gSGFuZGxlIFVSTCB0cmFuc2Zvcm1hdGlvblxuICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnQuYXBpQmFzZVVybDtcbiAgY29uc3QgZmluYWxVcmwgPSBpc0N1c3RvbVVybCB8fCAhY29uZmlnLmJhc2VVcmxJbmplY3Rpb24gPyByZXEudXJsIDogYCR7YmFzZVVybH0ke3JlcS51cmx9YDtcblxuICAvLyBHZW5lcmF0ZSBvciBnZXQgY29ycmVsYXRpb24gY29udGV4dFxuICBjb25zdCBjb3JyZWxhdGlvbklkID0gY29uZmlnLmVuYWJsZUNvcnJlbGF0aW9uVHJhY2tpbmdcbiAgICA/IGNvcnJlbGF0aW9uU2VydmljZS5nZXRPckNyZWF0ZUNvcnJlbGF0aW9uSWQoKVxuICAgIDogdXVpZHY0KCk7XG4gIGNvbnN0IHRlbmFudElkID0gdGVuYW50U2VydmljZS5nZXRUZW5hbnRJZCgpO1xuICBjb25zdCByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcblxuICAvLyBCdWlsZCBkeW5hbWljIGhlYWRlcnNcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIC8vIENvcmUgY29udGV4dCBoZWFkZXJzXG4gIGhlYWRlcnNbY29uZmlnLnJlcXVlc3RJZEhlYWRlcl0gPSByZXF1ZXN0SWQ7XG5cbiAgaWYgKGNvbmZpZy5lbmFibGVDb3JyZWxhdGlvblRyYWNraW5nKSB7XG4gICAgaGVhZGVyc1tjb25maWcuY29ycmVsYXRpb25JZEhlYWRlcl0gPSBjb3JyZWxhdGlvbklkO1xuICB9XG5cbiAgaWYgKHRlbmFudElkKSB7XG4gICAgaGVhZGVyc1tjb25maWcudGVuYW50SWRIZWFkZXJdID0gdGVuYW50SWQ7XG4gIH1cblxuICBoZWFkZXJzW2NvbmZpZy50aW1lc3RhbXBIZWFkZXJdID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIC8vIENsaWVudCBpbmZvcm1hdGlvblxuICBpZiAoY29uZmlnLmNsaWVudFZlcnNpb24pIHtcbiAgICBoZWFkZXJzWydDbGllbnQtVmVyc2lvbiddID0gY29uZmlnLmNsaWVudFZlcnNpb247XG4gIH1cblxuICAvLyBFbnZpcm9ubWVudCBjbGllbnQgSURcbiAgaWYgKGVudmlyb25tZW50LmNsaWVudElkKSB7XG4gICAgaGVhZGVyc1snQ2xpZW50LUlkJ10gPSBlbnZpcm9ubWVudC5jbGllbnRJZDtcbiAgfVxuXG4gIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiBjb25maWd1cmVkIGFuZCBhdmFpbGFibGVcbiAgaWYgKGNvbmZpZy5pbmNsdWRlQXV0aFRva2VuICYmICFza2lwQXV0aCkge1xuICAgIGNvbnN0IGF1dGhUb2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFRva2VuKCk7XG4gICAgaWYgKGF1dGhUb2tlbikge1xuICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2F1dGhUb2tlbn1gO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByb2Nlc3MgY3VzdG9tIGhlYWRlcnMgZnJvbSBjb25maWd1cmF0aW9uIChjYW4gYmUgc3RhdGljIHZhbHVlcyBvciBkeW5hbWljIGZ1bmN0aW9ucylcbiAgT2JqZWN0LmVudHJpZXMoY29uZmlnLmN1c3RvbUhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGhlYWRlcnNba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKCkgOiB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQWRkIGhlYWRlcnMgZnJvbSBIVFRQIGNvbnRleHRcbiAgT2JqZWN0LmVudHJpZXMoY29udGV4dEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBBZGQgY29udGVudC10eXBlIGZvciBkYXRhIHJlcXVlc3RzIGlmIG5vdCBhbHJlYWR5IHNldFxuICBpZiAoXG4gICAgWydQT1NUJywgJ1BVVCcsICdQQVRDSCddLmluY2x1ZGVzKHJlcS5tZXRob2QudG9VcHBlckNhc2UoKSkgJiZcbiAgICAhcmVxLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKVxuICApIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIC8vIENsb25lIHJlcXVlc3Qgd2l0aCBlbmhhbmNlZCBoZWFkZXJzIGFuZCBVUkxcbiAgY29uc3QgZW5oYW5jZWRSZXEgPSByZXEuY2xvbmUoe1xuICAgIHVybDogZmluYWxVcmwsXG4gICAgc2V0SGVhZGVyczogaGVhZGVycyxcbiAgfSk7XG5cbiAgLy8gTG9nIG91dGdvaW5nIHJlcXVlc3QgaWYgZW5hYmxlZFxuICBpZiAoY29uZmlnLmVuYWJsZVJlcXVlc3RMb2dnaW5nKSB7XG4gICAgbG9nZ2luZ1NlcnZpY2UubG9nSHR0cFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgIG9yaWdpbmFsVXJsOiByZXEudXJsLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHRlbmFudElkLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBoZWFkZXJzOiBPYmplY3Qua2V5cyhoZWFkZXJzKSxcbiAgICAgIGlzQ3VzdG9tVXJsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSWYgcmVxdWVzdCBoYXMgYXV0aCBoZWFkZXIsIGhhbmRsZSB3aXRoIHJlZnJlc2ggbG9naWNcbiAgaWYgKGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSAmJiBjb25maWcucmVmcmVzaFRva2VuQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV4dChlbmhhbmNlZFJlcSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAvLyBJZiA0MDEgVW5hdXRob3JpemVkLCB0cnkgdG8gcmVmcmVzaCB0b2tlblxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0b2tlblByb3ZpZGVyPy5nZXRSZWZyZXNoVG9rZW4/LigpO1xuICAgICAgICAgIGlmIChyZWZyZXNoVG9rZW4gJiYgcmVmcmVzaFRva2VuLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnJlZnJlc2hUb2tlbkNhbGxiYWNrKCkhLnBpcGUoXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChuZXdUb2tlbnMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJldHJ5IHRoZSBvcmlnaW5hbCByZXF1ZXN0IHdpdGggbmV3IHRva2VuXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlSZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICAgICAgICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgICAgICAgICAgICAgIHNldEhlYWRlcnM6IHsgLi4uaGVhZGVycywgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7bmV3VG9rZW5zLnRva2VufWAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXRyeVJlcSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKHJlZnJlc2hFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUmVmcmVzaCBmYWlsZWQsIGxvZ291dCB1c2VyXG4gICAgICAgICAgICAgICAgY29uZmlnLmxvZ291dENhbGxiYWNrPy4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiByZWZyZXNoRXJyb3IpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgZXJyb3IgbG9nZ2luZyB3aXRoIGNvbnRleHRcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVFcnJvckxvZ2dpbmcpIHtcbiAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dIdHRwRXJyb3Ioe1xuICAgICAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgICAgICAgIG9yaWdpbmFsVXJsOiByZXEudXJsLFxuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudC5jbGllbnRJZCxcbiAgICAgICAgICAgIGlzQ3VzdG9tVXJsLFxuICAgICAgICAgICAgaGVhZGVyczogW10sIC8vIEhlYWRlcnMgYXJlIG5vdCBpbmNsdWRlZCBpbiBIdHRwRXJyb3JSZXNwb25zZSBieSBkZWZhdWx0LCBhZGp1c3QgaWYgbmVlZGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgb3RoZXIgZXJyb3Igc2NlbmFyaW9zXG4gICAgICAgIHN3aXRjaCAoZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICB0ZW5hbnRTZXJ2aWNlLmhhbmRsZUZvcmJpZGRlbigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nTmV0d29ya0Vycm9yKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dSYXRlTGltaXRFcnJvcihjb3JyZWxhdGlvbklkLCBmaW5hbFVybCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gYXV0aCBoZWFkZXIsIHVzZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZ1xuICAgIHJldHVybiBuZXh0KGVuaGFuY2VkUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIEVuaGFuY2VkIGVycm9yIGxvZ2dpbmcgd2l0aCBjb250ZXh0XG4gICAgICAgIGlmIChjb25maWcuZW5hYmxlRXJyb3JMb2dnaW5nKSB7XG4gICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nSHR0cEVycm9yKHtcbiAgICAgICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogZmluYWxVcmwsXG4gICAgICAgICAgICBvcmlnaW5hbFVybDogcmVxLnVybCxcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogZXJyb3Iuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGVycm9yRGV0YWlsczogZXJyb3IuZXJyb3IsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQuY2xpZW50SWQsXG4gICAgICAgICAgICBpc0N1c3RvbVVybCxcbiAgICAgICAgICAgIGhlYWRlcnM6IFtdLCAvLyBIZWFkZXJzIGFyZSBub3QgaW5jbHVkZWQgaW4gSHR0cEVycm9yUmVzcG9uc2UgYnkgZGVmYXVsdCwgYWRqdXN0IGlmIG5lZWRlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvc1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5hdXRob3JpemVkIGFjY2VzcyAtIHRva2VuIGV4cGlyZWQgb3IgaW52YWxpZCcpO1xuICAgICAgICAgICAgLy8gTm90ZTogVG9rZW4gY2xlYXJpbmcgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGF1dGggc2VydmljZSwgbm90IGluZnJhc3RydWN0dXJlXG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIHRlbmFudFNlcnZpY2UuaGFuZGxlRm9yYmlkZGVuKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgIGxvZ2dpbmdTZXJ2aWNlLmxvZ1JhdGVMaW1pdEVycm9yKGNvcnJlbGF0aW9uSWQsIGZpbmFsVXJsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLy8gU3VwcG9ydGluZyBpbnRlcmZhY2VzIGZvciB0eXBlIHNhZmV0eVxuZXhwb3J0IGludGVyZmFjZSBIdHRwUmVxdWVzdExvZyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgb3JpZ2luYWxVcmw6IHN0cmluZztcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIGhlYWRlcnM6IHN0cmluZ1tdO1xuICBpc0N1c3RvbVVybDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwRXJyb3JMb2cgZXh0ZW5kcyBIdHRwUmVxdWVzdExvZyB7XG4gIHN0YXR1czogbnVtYmVyO1xuICBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZXJyb3JEZXRhaWxzOiBhbnk7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgY29uZmlndXJhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKFxuICBvdmVycmlkZXM6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30sXG4pOiBIdHRwQ29udGV4dENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xufVxuXG4vLyBQcm92aWRlciBmdW5jdGlvbiBmb3IgZWFzeSBzZXR1cFxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVIdHRwQ29udGV4dChjb25maWc6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBIVFRQX0NPTlRFWFRfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKGNvbmZpZyksXG4gICAgfSxcbiAgXTtcbn1cbiJdfQ==","import { HttpContext, HttpContextToken, } from '@angular/common/http';\nimport { finalize } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { 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.2\", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: ActiveRequestsTracker, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", 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 console.log(requests);\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvaW50ZXJjZXB0b3JzL3NwaW5uZXIuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FHakIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFDMUQ7OztHQUdHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUUvRCxNQUFNLFFBQVEsR0FBdUIsRUFBRSxDQUFDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxjQUFjO0lBQzVCLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBeUI7UUFDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXlCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQzt1R0FkVSxxQkFBcUI7MkdBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQWtCRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNqRSwwQ0FBMEM7SUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFOUMsNENBQTRDO0lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV4QixtREFBbUQ7SUFDbkQsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osNkRBQTZEO1FBQzdELGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBDb250ZXh0LFxuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwSW50ZXJjZXB0b3JGbixcbiAgSHR0cFJlcXVlc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb21wb25lbnRzJztcbi8qKlxuICogVG9rZW4gdG8gZGV0ZXJtaW5lIGlmIGEgcmVxdWVzdCBzaG91bGQgc2hvdyBzcGlubmVyXG4gKiBEZWZhdWx0IGlzIHRydWUgKHNob3cgc3Bpbm5lciBmb3IgYWxsIHJlcXVlc3RzKVxuICovXG5jb25zdCBTSE9XX1NQSU5ORVIgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiB0cnVlKTtcblxuY29uc3QgcmVxdWVzdHM6IEh0dHBSZXF1ZXN0PGFueT5bXSA9IFtdO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBkaXNhYmxlIHNwaW5uZXIgZm9yIHNwZWNpZmljIHJlcXVlc3RzXG4gKiBAcmV0dXJucyBIdHRwQ29udGV4dCB3aXRoIHNwaW5uZXIgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhvdXRTcGlubmVyKCkge1xuICByZXR1cm4gbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNIT1dfU1BJTk5FUiwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gdHJhY2sgYWN0aXZlIEhUVFAgcmVxdWVzdHNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2ZVJlcXVlc3RzVHJhY2tlciB7XG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiByZXF1ZXN0cy5sZW5ndGg7XG4gIH1cblxuICBhZGQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IHZvaWQge1xuICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gIH1cblxuICByZW1vdmUocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdHMuaW5kZXhPZihyZXF1ZXN0KTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmVxdWVzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmNlcHRvciB0aGF0IHNob3dzL2hpZGVzIGEgbG9hZGluZyBzcGlubmVyIGJhc2VkIG9uIGFjdGl2ZSBIVFRQIHJlcXVlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzcGlubmVySW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICAvLyBUcmFjayBhY3RpdmUgcmVxdWVzdHMgcmVxdWlyaW5nIHNwaW5uZXJcbiAgY29uc29sZS5sb2cocmVxdWVzdHMpO1xuICBjb25zdCBhY3RpdmVSZXF1ZXN0cyA9IGluamVjdChBY3RpdmVSZXF1ZXN0c1RyYWNrZXIpO1xuICBjb25zdCBvdmVybGF5U2VydmljZSA9IGluamVjdChPdmVybGF5U2VydmljZSk7XG5cbiAgLy8gU2tpcCBzcGlubmVyIGlmIGRpc2FibGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgaWYgKCFyZXEuY29udGV4dC5nZXQoU0hPV19TUElOTkVSKSkge1xuICAgIHJldHVybiBuZXh0KHJlcSk7XG4gIH1cblxuICAvLyBBZGQgcmVxdWVzdCB0byB0cmFja2luZ1xuICBhY3RpdmVSZXF1ZXN0cy5hZGQocmVxKTtcblxuICAvLyBTaG93IHNwaW5uZXIgaWYgdGhpcyBpcyB0aGUgZmlyc3QgYWN0aXZlIHJlcXVlc3RcbiAgaWYgKGFjdGl2ZVJlcXVlc3RzLmNvdW50ID09PSAxKSB7XG4gICAgb3ZlcmxheVNlcnZpY2Uuc2hvd1NwaW5uZXIoKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KHJlcSkucGlwZShcbiAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAvLyBSZW1vdmUgcmVxdWVzdCBhbmQgaGlkZSBzcGlubmVyIGlmIG5vIG1vcmUgYWN0aXZlIHJlcXVlc3RzXG4gICAgICBhY3RpdmVSZXF1ZXN0cy5yZW1vdmUocmVxKTtcbiAgICAgIGlmIChhY3RpdmVSZXF1ZXN0cy5jb3VudCA9PT0gMCkge1xuICAgICAgICBvdmVybGF5U2VydmljZS5oaWRlU3Bpbm5lcigpO1xuICAgICAgfVxuICAgIH0pLFxuICApO1xufTtcbiJdfQ==","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.2\", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: BaseHttpRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: BaseHttpRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3JlcG9zaXRvcmllcy9iYXNlLWh0dHAucmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBS2xELE1BQU0sT0FBZ0Isa0JBQWtCO0lBQzVCLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFHMUIsUUFBUSxDQUFDLE9BQWUsRUFBRTtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFFakYsT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLElBQUksUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRVMsR0FBRyxDQUFJLE9BQWUsRUFBRSxFQUFFLE1BQVk7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMsSUFBSSxDQUFJLE9BQWUsRUFBRSxFQUFFLElBQVM7UUFDNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFUyxHQUFHLENBQUksT0FBZSxFQUFFLEVBQUUsSUFBUztRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVTLEtBQUssQ0FBSSxPQUFlLEVBQUUsRUFBRSxJQUFTO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVMsTUFBTSxDQUFJLE9BQWUsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQTlCbUIsa0JBQWtCOzJHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5Q29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VIdHRwUmVwb3NpdG9yeSB7XG4gIHByb3RlY3RlZCBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29uZmlnOiBSZXBvc2l0b3J5Q29uZmlnOyAvLyBBYnN0cmFjdCBwcm9wZXJ0eVxuXG4gIHByb3RlY3RlZCBidWlsZFVybChwYXRoOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgfHwgJy9hcGknO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmNvbmZpZy52ZXJzaW9uID8gYC92JHt0aGlzLmNvbmZpZy52ZXJzaW9ufWAgOiAnJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHBhdGggPyBgJHt0aGlzLmNvbmZpZy5lbmRwb2ludH0vJHtwYXRofWAgOiB0aGlzLmNvbmZpZy5lbmRwb2ludDtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfSR7dmVyc2lvbn0vJHtlbmRwb2ludH1gLnJlcGxhY2UoL1xcLysvZywgJy8nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQ8VD4ocGF0aDogc3RyaW5nID0gJycsIHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIHsgcGFyYW1zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3Q8VD4ocGF0aDogc3RyaW5nID0gJycsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmJ1aWxkVXJsKHBhdGgpLCBib2R5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdXQ8VD4ocGF0aDogc3RyaW5nID0gJycsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhdGNoPFQ+KHBhdGg6IHN0cmluZyA9ICcnLCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZTxUPihwYXRoOiBzdHJpbmcgPSAnJyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFQ+KHRoaXMuYnVpbGRVcmwocGF0aCkpO1xuICB9XG59XG4iXX0=","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.2\", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: GenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", 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.2\", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: SearchableGenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: SearchableGenericRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvZ2VuZXJpYy5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFJNUQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFtQixtQkFBbUIsQ0FBQyxDQUFDO0FBRzNGLE1BQU0sT0FBTyxpQkFDWCxTQUFRLGtCQUFrQjtJQUdQLE1BQU0sQ0FBbUI7SUFFNUM7UUFDRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQW1CLGlCQUFpQixDQUFDLENBQUM7UUFFM0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQU87UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUE2QjtRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFVLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQU8sRUFBRSxNQUF3QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsRUFBTztRQUNaLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRVMsV0FBVyxDQUFDLFVBQTZCLEVBQUUsT0FBNkI7UUFDaEYsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBRXZCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTTtnQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDekQsSUFBSSxVQUFVLENBQUMsYUFBYTtnQkFBRSxNQUFNLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDaEYsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzt1R0FqRFUsaUJBQWlCOzJHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7O0FBc0RYLE1BQU0sT0FBTywyQkFDWCxTQUFRLGlCQUErQjtJQUd2QyxNQUFNLENBQUMsS0FBYSxFQUFFLFVBQTRCO1FBQ2hELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7dUdBUlUsMkJBQTJCOzJHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlSHR0cFJlcG9zaXRvcnkgfSBmcm9tICcuL2Jhc2UtaHR0cC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IFJlcG9zaXRvcnksIFJlcG9zaXRvcnlDb25maWcsIFNlYXJjaGFibGVSZXBvc2l0b3J5IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0LCBQYWdpbmF0aW9uUGFyYW1zIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcblxuLy8gQ3JlYXRlIGFuIGluamVjdGlvbiB0b2tlbiBmb3IgUmVwb3NpdG9yeUNvbmZpZ1xuZXhwb3J0IGNvbnN0IFJFUE9TSVRPUllfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFJlcG9zaXRvcnlDb25maWc+KCdSRVBPU0lUT1JZX0NPTkZJRycpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9zaXRvcnk8VEVudGl0eSA9IGFueSwgVElkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID0gbnVtYmVyPlxuICBleHRlbmRzIEJhc2VIdHRwUmVwb3NpdG9yeVxuICBpbXBsZW1lbnRzIFJlcG9zaXRvcnk8VEVudGl0eSwgVElkPlxue1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY29uZmlnOiBSZXBvc2l0b3J5Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdDxSZXBvc2l0b3J5Q29uZmlnPihSRVBPU0lUT1JZX0NPTkZJRyk7XG5cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgZ2V0QnlJZChpZDogVElkKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0PFRFbnRpdHk+KGlkLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgZ2V0QWxsKHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uUGFyYW1zKTogT2JzZXJ2YWJsZTxQYWdlZFJlc3VsdDxURW50aXR5Pj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuYnVpbGRQYXJhbXMocGFnaW5hdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0PFBhZ2VkUmVzdWx0PFRFbnRpdHk+PignJywgcGFyYW1zKTtcbiAgfVxuXG4gIGNyZWF0ZShlbnRpdHk6IFBhcnRpYWw8VEVudGl0eT4pOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5wb3N0PFRFbnRpdHk+KCcnLCBlbnRpdHkpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBUSWQsIGVudGl0eTogUGFydGlhbDxURW50aXR5Pik6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLnB1dDxURW50aXR5PihpZC50b1N0cmluZygpLCBlbnRpdHkpO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBUSWQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlPHZvaWQ+KGlkLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUGFyYW1zKHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uUGFyYW1zLCBmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55Pik6IGFueSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcblxuICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICBwYXJhbXMucGFnZUluZGV4ID0gcGFnaW5hdGlvbi5wYWdlSW5kZXg/LnRvU3RyaW5nKCkgfHwgJzEnO1xuICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnaW5hdGlvbi5wYWdlU2l6ZT8udG9TdHJpbmcoKSB8fCAnMjAnO1xuICAgICAgaWYgKHBhZ2luYXRpb24uc29ydEJ5KSBwYXJhbXMuc29ydEJ5ID0gcGFnaW5hdGlvbi5zb3J0Qnk7XG4gICAgICBpZiAocGFnaW5hdGlvbi5zb3J0RGlyZWN0aW9uKSBwYXJhbXMuc29ydERpcmVjdGlvbiA9IHBhZ2luYXRpb24uc29ydERpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVHZW5lcmljUmVwb3NpdG9yeTxURW50aXR5ID0gYW55LCBUSWQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPSBudW1iZXI+XG4gIGV4dGVuZHMgR2VuZXJpY1JlcG9zaXRvcnk8VEVudGl0eSwgVElkPlxuICBpbXBsZW1lbnRzIFNlYXJjaGFibGVSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD5cbntcbiAgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcsIHBhZ2luYXRpb246IFBhZ2luYXRpb25QYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2VkUmVzdWx0PFRFbnRpdHk+PiB7XG4gICAgY29uc3Qgc2VhcmNoRmlsdGVycyA9IHsgcTogcXVlcnkgfTtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmJ1aWxkUGFyYW1zKHBhZ2luYXRpb24sIHNlYXJjaEZpbHRlcnMpO1xuICAgIHJldHVybiB0aGlzLmdldDxQYWdlZFJlc3VsdDxURW50aXR5Pj4oJ3NlYXJjaCcsIHBhcmFtcyk7XG4gIH1cbn1cbiJdfQ==","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.2\", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RepositoryFactory, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RepositoryFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvcmVwb3NpdG9yeS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLbEQsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sQ0FDSixNQUF3QjtRQUV4QixNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUN2RSxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBNkIsRUFBRSxFQUFFO1lBQ3BELE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztZQUN2QixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7Z0JBQzFELElBQUksVUFBVSxDQUFDLE1BQU07b0JBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUN6RCxJQUFJLFVBQVUsQ0FBQyxhQUFhO29CQUFFLE1BQU0sQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUNoRixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYsOEJBQThCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBTyxFQUFVLEVBQUU7WUFDckMsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsdUVBQXVFO1lBQ3ZFLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQztRQUVGLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV0RSxNQUFNLEVBQUUsQ0FBQyxVQUFXLEVBQUUsRUFBRSxDQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBdUIsUUFBUSxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDO2FBQ2hDLENBQUM7WUFFSixNQUFNLEVBQUUsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUM7WUFFakYsTUFBTSxFQUFFLENBQUMsRUFBTyxFQUFFLE1BQXdCLEVBQUUsRUFBRSxDQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO1lBRTFELE1BQU0sRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RFLENBQUM7SUFDSixDQUFDO3VHQWhEVSxpQkFBaUI7MkdBQWpCLGlCQUFpQixjQURKLE1BQU07OzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUGFnZWRSZXN1bHQsIFBhZ2luYXRpb25QYXJhbXMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSwgUmVwb3NpdG9yeUNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3NpdG9yeUZhY3Rvcnkge1xuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgY3JlYXRlPFRFbnRpdHksIFRJZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciA9IG51bWJlcj4oXG4gICAgY29uZmlnOiBSZXBvc2l0b3J5Q29uZmlnLFxuICApOiBSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD4ge1xuICAgIGNvbnN0IGJ1aWxkVXJsID0gKHBhdGg6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgfHwgJy9hcGknO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uID8gYC92JHtjb25maWcudmVyc2lvbn1gIDogJyc7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IHBhdGggPyBgJHtjb25maWcuZW5kcG9pbnR9LyR7cGF0aH1gIDogY29uZmlnLmVuZHBvaW50O1xuICAgICAgcmV0dXJuIGAke2Jhc2VVcmx9JHt2ZXJzaW9ufS8ke2VuZHBvaW50fWAucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZFBhcmFtcyA9IChwYWdpbmF0aW9uPzogUGFnaW5hdGlvblBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcbiAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgIHBhcmFtcy5wYWdlID0gcGFnaW5hdGlvbi5wYWdlSW5kZXg/LnRvU3RyaW5nKCkgfHwgJzEnO1xuICAgICAgICBwYXJhbXMucGFnZVNpemUgPSBwYWdpbmF0aW9uLnBhZ2VTaXplPy50b1N0cmluZygpIHx8ICcyMCc7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uLnNvcnRCeSkgcGFyYW1zLnNvcnRCeSA9IHBhZ2luYXRpb24uc29ydEJ5O1xuICAgICAgICBpZiAocGFnaW5hdGlvbi5zb3J0RGlyZWN0aW9uKSBwYXJhbXMuc29ydERpcmVjdGlvbiA9IHBhZ2luYXRpb24uc29ydERpcmVjdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfTtcblxuICAgIC8vIFNhZmUgSUQgY29udmVyc2lvbiBmdW5jdGlvblxuICAgIGNvbnN0IGlkVG9TdHJpbmcgPSAoaWQ6IFRJZCk6IHN0cmluZyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBpZCA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgcmV0dXJuIGlkLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjayBmb3Igb3RoZXIgdHlwZXMgLSB5b3UgbWlnaHQgd2FudCB0byBoYW5kbGUgdGhpcyBkaWZmZXJlbnRseVxuICAgICAgcmV0dXJuIFN0cmluZyhpZCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBnZXRCeUlkOiAoaWQ6IFRJZCkgPT4gdGhpcy5odHRwLmdldDxURW50aXR5PihidWlsZFVybChpZFRvU3RyaW5nKGlkKSkpLFxuXG4gICAgICBnZXRBbGw6IChwYWdpbmF0aW9uPykgPT5cbiAgICAgICAgdGhpcy5odHRwLmdldDxQYWdlZFJlc3VsdDxURW50aXR5Pj4oYnVpbGRVcmwoKSwge1xuICAgICAgICAgIHBhcmFtczogYnVpbGRQYXJhbXMocGFnaW5hdGlvbiksXG4gICAgICAgIH0pLFxuXG4gICAgICBjcmVhdGU6IChlbnRpdHk6IFBhcnRpYWw8VEVudGl0eT4pID0+IHRoaXMuaHR0cC5wb3N0PFRFbnRpdHk+KGJ1aWxkVXJsKCksIGVudGl0eSksXG5cbiAgICAgIHVwZGF0ZTogKGlkOiBUSWQsIGVudGl0eTogUGFydGlhbDxURW50aXR5PikgPT5cbiAgICAgICAgdGhpcy5odHRwLnB1dDxURW50aXR5PihidWlsZFVybChpZFRvU3RyaW5nKGlkKSksIGVudGl0eSksXG5cbiAgICAgIHJlbW92ZTogKGlkOiBUSWQpID0+IHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oYnVpbGRVcmwoaWRUb1N0cmluZyhpZCkpKSxcbiAgICB9O1xuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport { TOKEN_PROVIDER } from '../interfaces/token-provider.interface';\nimport * as i0 from \"@angular/core\";\nexport class UserRepository {\n tokenProvider = inject(TOKEN_PROVIDER);\n getCurrentUser() {\n const token = this.tokenProvider.getToken();\n if (!token) {\n return null;\n }\n try {\n const decodedToken = jwtDecode(token);\n const email = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] ??\n decodedToken['email'] ??\n decodedToken['sub'] ??\n decodedToken['user_id'];\n const name = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'] ??\n decodedToken['name'] ??\n decodedToken['given_name'] ??\n decodedToken['display_name'];\n if (!email) {\n return null;\n }\n const userData = {\n email: email.toString(),\n displayName: name?.toString() ?? 'Unknown User',\n };\n return userData;\n }\n catch {\n return null;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UserRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UserRepository, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UserRepository, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvdXNlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQUt4RSxNQUFNLE9BQU8sY0FBYztJQUNSLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFeEQsY0FBYztRQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUEwQixLQUFLLENBQUMsQ0FBQztZQUUvRCxNQUFNLEtBQUssR0FDVCxZQUFZLENBQUMsb0VBQW9FLENBQUM7Z0JBQ2xGLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ25CLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUxQixNQUFNLElBQUksR0FDUixZQUFZLENBQUMsaUVBQWlFLENBQUM7Z0JBQy9FLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BCLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQzFCLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQWE7Z0JBQ3pCLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUN2QixXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLGNBQWM7YUFDaEQsQ0FBQztZQUVGLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO3VHQXJDVSxjQUFjOzJHQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyBVc2VyRGF0YSB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBUT0tFTl9QUk9WSURFUiB9IGZyb20gJy4uL2ludGVyZmFjZXMvdG9rZW4tcHJvdmlkZXIuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJSZXBvc2l0b3J5IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlblByb3ZpZGVyID0gaW5qZWN0KFRPS0VOX1BST1ZJREVSKTtcblxuICBnZXRDdXJyZW50VXNlcigpOiBVc2VyRGF0YSB8IG51bGwge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlblByb3ZpZGVyLmdldFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dERlY29kZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odG9rZW4pO1xuXG4gICAgICBjb25zdCBlbWFpbCA9XG4gICAgICAgIGRlY29kZWRUb2tlblsnaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvZW1haWxhZGRyZXNzJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWydlbWFpbCddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnc3ViJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWyd1c2VyX2lkJ107XG5cbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICBkZWNvZGVkVG9rZW5bJ2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2dpdmVubmFtZSddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnbmFtZSddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnZ2l2ZW5fbmFtZSddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnZGlzcGxheV9uYW1lJ107XG5cbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJEYXRhOiBVc2VyRGF0YSA9IHtcbiAgICAgICAgZW1haWw6IGVtYWlsLnRvU3RyaW5nKCksXG4gICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lPy50b1N0cmluZygpID8/ICdVbmtub3duIFVzZXInLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHVzZXJEYXRhO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1odHRwLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL2FkYXB0ZXJzL2FuZ3VsYXItaHR0cC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckMsU0FBUyxRQUFRLENBQUMsT0FBMkIsRUFBRSxRQUFnQjtJQUM3RCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzlCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBRVY7SUFDQTtJQUZuQixZQUNtQixJQUFnQixFQUNoQixPQUFnQjtRQURoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDaEMsQ0FBQztJQUVJLFlBQVksQ0FBQyxPQUFxQjtRQUN4QyxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtZQUMvQixNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FBSSxNQUt4QjtRQUNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUM5RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsR0FBRyxXQUFXO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVTtJQUNWLEdBQUcsQ0FBSSxHQUFXLEVBQUUsT0FBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksQ0FBSSxHQUFXLEVBQUUsSUFBVSxFQUFFLE9BQXFCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxVQUFVO0lBQ1YsR0FBRyxDQUFJLEdBQVcsRUFBRSxJQUFVLEVBQUUsT0FBcUI7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGFBQWE7SUFDYixNQUFNLENBQUksR0FBVyxFQUFFLE9BQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh0dHBPcHRpb25zLCBIdHRwUG9ydCB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5mdW5jdGlvbiBtZXJnZVVybChiYXNlVVJMOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWJhc2VVUkwpIHJldHVybiBlbmRwb2ludDtcbiAgcmV0dXJuIGAke2Jhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7ZW5kcG9pbnQucmVwbGFjZSgvXlxcLysvLCAnJyl9YDtcbn1cblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJIdHRwQWRhcHRlciBpbXBsZW1lbnRzIEh0dHBQb3J0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVSTD86IHN0cmluZyxcbiAgKSB7fVxuXG4gIHByaXZhdGUgYnVpbGRPcHRpb25zKG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzID8/IHt9LFxuICAgICAgcGFyYW1zOiBvcHRpb25zPy5wYXJhbXMgPz8ge30sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdDxUPihwYXJhbXM6IHtcbiAgICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnIHwgJ3B1dCcgfCAnZGVsZXRlJztcbiAgICB1cmw6IHN0cmluZztcbiAgICBkYXRhPzogYW55O1xuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9ucztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGZ1bGxVcmwgPSBtZXJnZVVybCh0aGlzLmJhc2VVUkwsIHBhcmFtcy51cmwpO1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0gdGhpcy5idWlsZE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpO1xuXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuaHR0cC5yZXF1ZXN0PFQ+KHBhcmFtcy5tZXRob2QsIGZ1bGxVcmwsIHtcbiAgICAgIGJvZHk6IHBhcmFtcy5kYXRhLFxuICAgICAgLi4uaHR0cE9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgbGFzdFZhbHVlRnJvbShvYnNlcnZhYmxlKTtcbiAgfVxuXG4gIC8qKiBHRVQgKi9cbiAgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgdXJsLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIFBPU1QgKi9cbiAgcG9zdDxUPih1cmw6IHN0cmluZywgZGF0YT86IGFueSwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogJ3Bvc3QnLCB1cmwsIGRhdGEsIG9wdGlvbnMgfSk7XG4gIH1cblxuICAvKiogUFVUICovXG4gIHB1dDxUPih1cmw6IHN0cmluZywgZGF0YT86IGFueSwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogJ3B1dCcsIHVybCwgZGF0YSwgb3B0aW9ucyB9KTtcbiAgfVxuXG4gIC8qKiBERUxFVEUgKi9cbiAgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgdXJsLCBvcHRpb25zIH0pO1xuICB9XG59XG4iXX0=","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\n// Default configuration\nconst DEFAULT_CONFIG = {\n apiBaseUrl: '',\n apiTimeout: 30000,\n retryAttempts: 2,\n retryDelay: 1000,\n enableCorrelationTracking: true,\n enableRequestLogging: false,\n enableErrorLogging: true,\n enableToastNotifications: true,\n includeAuthToken: true,\n authTokenHeader: 'Authorization',\n enableMultiTenancy: true,\n tenantIdHeader: 'Tenant-Id',\n logLevel: 'info',\n enableConsoleLogging: true,\n customHeaders: {},\n excludeUrls: [],\n excludeMethods: [],\n};\n// Injection token for configuration\nexport const CORE_CONFIG = new InjectionToken('CORE_CONFIG', {\n factory: () => DEFAULT_CONFIG,\n});\nexport class CoreConfigService {\n config;\n environment = inject(ENVIRONMENT);\n constructor() {\n // Initialize with default config and environment overrides\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.2\", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CoreConfigService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29yZS1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQW9DbkQsd0JBQXdCO0FBQ3hCLE1BQU0sY0FBYyxHQUF5QjtJQUMzQyxVQUFVLEVBQUUsRUFBRTtJQUNkLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLHlCQUF5QixFQUFFLElBQUk7SUFDL0Isb0JBQW9CLEVBQUUsS0FBSztJQUMzQixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLHdCQUF3QixFQUFFLElBQUk7SUFDOUIsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGNBQWMsRUFBRSxXQUFXO0lBQzNCLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsYUFBYSxFQUFFLEVBQUU7SUFDakIsV0FBVyxFQUFFLEVBQUU7SUFDZixjQUFjLEVBQUUsRUFBRTtDQUNuQixDQUFDO0FBRUYsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBYSxhQUFhLEVBQUU7SUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWM7Q0FDOUIsQ0FBQyxDQUFDO0FBS0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixNQUFNLENBQXVCO0lBQzdCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENB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LElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7dUdBbkdVLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBdUdELG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsU0FBOEIsRUFBRTtJQUNoRSxPQUFPO1FBQ0w7WUFDRSxPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsTUFBTTtTQUNqQjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxZQUFpQyxFQUFFO0lBQ2xFLE9BQU87UUFDTCxHQUFHLGNBQWM7UUFDakIsR0FBRyxTQUFTO0tBQ2IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcblxuLy8gQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIHRoZSBjb3JlIGxpYnJhcnlcbmV4cG9ydCBpbnRlcmZhY2UgQ29yZUNvbmZpZyB7XG4gIC8vIEFQSSBDb25maWd1cmF0aW9uXG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG4gIGFwaVRpbWVvdXQ/OiBudW1iZXI7XG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHJldHJ5RGVsYXk/OiBudW1iZXI7XG5cbiAgLy8gRmVhdHVyZSBGbGFnc1xuICBlbmFibGVDb3JyZWxhdGlvblRyYWNraW5nPzogYm9vbGVhbjtcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc/OiBib29sZWFuO1xuICBlbmFibGVFcnJvckxvZ2dpbmc/OiBib29sZWFuO1xuICBlbmFibGVUb2FzdE5vdGlmaWNhdGlvbnM/OiBib29sZWFuO1xuXG4gIC8vIFNlY3VyaXR5XG4gIGluY2x1ZGVBdXRoVG9rZW4/OiBib29sZWFuO1xuICBhdXRoVG9rZW5IZWFkZXI/OiBzdHJpbmc7XG5cbiAgLy8gTXVsdGktdGVuYW5jeVxuICBlbmFibGVNdWx0aVRlbmFuY3k/OiBib29sZWFuO1xuICB0ZW5hbnRJZEhlYWRlcj86IHN0cmluZztcblxuICAvLyBMb2dnaW5nXG4gIGxvZ0xldmVsPzogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG4gIGVuYWJsZUNvbnNvbGVMb2dnaW5nPzogYm9vbGVhbjtcblxuICAvLyBDdXN0b20gSGVhZGVyc1xuICBjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgKCgpID0+IHN0cmluZyk+O1xuXG4gIC8vIEV4Y2x1c2lvbnNcbiAgZXhjbHVkZVVybHM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZU1ldGhvZHM/OiBzdHJpbmdbXTtcbn1cblxuLy8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5jb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWQ8Q29yZUNvbmZpZz4gPSB7XG4gIGFwaUJhc2VVcmw6ICcnLFxuICBhcGlUaW1lb3V0OiAzMDAwMCxcbiAgcmV0cnlBdHRlbXB0czogMixcbiAgcmV0cnlEZWxheTogMTAwMCxcbiAgZW5hYmxlQ29ycmVsYXRpb25UcmFja2luZzogdHJ1ZSxcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6IGZhbHNlLFxuICBlbmFibGVFcnJvckxvZ2dpbmc6IHRydWUsXG4gIGVuYWJsZVRvYXN0Tm90aWZpY2F0aW9uczogdHJ1ZSxcbiAgaW5jbHVkZUF1dGhUb2tlbjogdHJ1ZSxcbiAgYXV0aFRva2VuSGVhZGVyOiAnQXV0aG9yaXphdGlvbicsXG4gIGVuYWJsZU11bHRpVGVuYW5jeTogdHJ1ZSxcbiAgdGVuYW50SWRIZWFkZXI6ICdUZW5hbnQtSWQnLFxuICBsb2dMZXZlbDogJ2luZm8nLFxuICBlbmFibGVDb25zb2xlTG9nZ2luZzogdHJ1ZSxcbiAgY3VzdG9tSGVhZGVyczoge30sXG4gIGV4Y2x1ZGVVcmxzOiBbXSxcbiAgZXhjbHVkZU1ldGhvZHM6IFtdLFxufTtcblxuLy8gSW5qZWN0aW9uIHRva2VuIGZvciBjb25maWd1cmF0aW9uXG5leHBvcnQgY29uc3QgQ09SRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29yZUNvbmZpZz4oJ0NPUkVfQ09ORklHJywge1xuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0NPTkZJRyxcbn0pO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbmZpZ1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8Q29yZUNvbmZpZz47XG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEluaXRpYWxpemUgd2l0aCBkZWZhdWx0IGNvbmZpZyBhbmQgZW52aXJvbm1lbnQgb3ZlcnJpZGVzXG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmluaXRpYWxpemVDb25maWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0cyBhbmQgZW52aXJvbm1lbnQgb3ZlcnJpZGVzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVDb25maWcoKTogUmVxdWlyZWQ8Q29yZUNvbmZpZz4ge1xuICAgIGNvbnN0IGluamVjdGVkQ29uZmlnID0gaW5qZWN0KENPUkVfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgICAgLy8gRW52aXJvbm1lbnQgb3ZlcnJpZGVzXG4gICAgICBhcGlCYXNlVXJsOiB0aGlzLmVudmlyb25tZW50LmFwaUJhc2VVcmwgfHwgREVGQVVMVF9DT05GSUcuYXBpQmFzZVVybCxcbiAgICAgIGVuYWJsZVJlcXVlc3RMb2dnaW5nOiAhdGhpcy5lbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24sXG4gICAgICAvLyBJbmplY3RlZCBjb25maWcgb3ZlcnJpZGVzXG4gICAgICAuLi5pbmplY3RlZENvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXRDb25maWcoKTogUmVxdWlyZWQ8Q29yZUNvbmZpZz4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gYXQgcnVudGltZVxuICAgKi9cbiAgdXBkYXRlQ29uZmlnKHVwZGF0ZXM6IFBhcnRpYWw8Q29yZUNvbmZpZz4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIC4uLnVwZGF0ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHZhbHVlXG4gICAqL1xuICBnZXQ8SyBleHRlbmRzIGtleW9mIENvcmVDb25maWc+KGtleTogSyk6IENvcmVDb25maWdbS10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZmVhdHVyZSBpcyBlbmFibGVkXG4gICAqL1xuICBpc0ZlYXR1cmVFbmFibGVkKGZlYXR1cmU6IGtleW9mIENvcmVDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29uZmlnW2ZlYXR1cmVdO1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEFQSSBVUkwgZm9yIGEgc3BlY2lmaWMgZW50aXR5XG4gICAqL1xuICBnZXRBcGlVcmwoZW50aXR5TmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnLmFwaUJhc2VVcmw7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSByZXR1cm4gYmFzZVVybDtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtlbnRpdHlOYW1lfWAucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgVVJMIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHByb2Nlc3NpbmdcbiAgICovXG4gIHNob3VsZEV4Y2x1ZGVVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZXhjbHVkZVVybHMuc29tZShcbiAgICAgIGV4Y2x1ZGVQYXR0ZXJuID0+IHVybC5pbmNsdWRlcyhleGNsdWRlUGF0dGVybikgfHwgbmV3IFJlZ0V4cChleGNsdWRlUGF0dGVybikudGVzdCh1cmwpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBtZXRob2Qgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gcHJvY2Vzc2luZ1xuICAgKi9cbiAgc2hvdWxkRXhjbHVkZU1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5leGNsdWRlTWV0aG9kcy5zb21lKFxuICAgICAgZXhjbHVkZU1ldGhvZCA9PiBleGNsdWRlTWV0aG9kLnRvTG93ZXJDYXNlKCkgPT09IG1ldGhvZC50b0xvd2VyQ2FzZSgpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1c3RvbSBoZWFkZXJzIHdpdGggZHluYW1pYyB2YWx1ZXMgcmVzb2x2ZWRcbiAgICovXG4gIGdldEN1c3RvbUhlYWRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcuY3VzdG9tSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBoZWFkZXJzW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZSgpIDogdmFsdWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBjb25maWd1cmF0aW9uIHRvIGRlZmF1bHRzXG4gICAqL1xuICByZXNldENvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuaW5pdGlhbGl6ZUNvbmZpZygpO1xuICB9XG59XG5cbi8vIFByb3ZpZGVyIGZ1bmN0aW9uIGZvciBlYXN5IHNldHVwXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvcmVDb25maWcoY29uZmlnOiBQYXJ0aWFsPENvcmVDb25maWc+ID0ge30pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBDT1JFX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiBjb25maWcsXG4gICAgfSxcbiAgXTtcbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29yZUNvbmZpZyhvdmVycmlkZXM6IFBhcnRpYWw8Q29yZUNvbmZpZz4gPSB7fSk6IENvcmVDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvbnRwbHVzLW5nLWluZnJhc3RydWN0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2Fjb250cGx1cy1uZy1pbmZyYXN0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["uuidv4","DEFAULT_CONFIG","catchError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acontplus-ng-infrastructure.mjs","sources":["../tmp-esm2022/lib/interfaces/token-provider.interface.js","../tmp-esm2022/lib/interceptors/api.interceptor.js","../tmp-esm2022/lib/services/tenant.service.js","../tmp-esm2022/lib/services/correlation.service.js","../tmp-esm2022/lib/services/logging.service.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/repositories/user.repository.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 { InjectionToken } from '@angular/core';\nexport const TOKEN_PROVIDER = new InjectionToken('TOKEN_PROVIDER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmZhY2VzL3Rva2VuLXByb3ZpZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUS9DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRva2VuUHJvdmlkZXIge1xuICBnZXRUb2tlbigpOiBzdHJpbmcgfCBudWxsO1xuICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbjtcbiAgZ2V0UmVmcmVzaFRva2VuPygpOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgVE9LRU5fUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVRva2VuUHJvdmlkZXI+KCdUT0tFTl9QUk9WSURFUicpO1xuIl19","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 { TOKEN_PROVIDER } from '../interfaces/token-provider.interface';\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(TOKEN_PROVIDER, { 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 && showNotifications && ['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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYXBpLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxZQUFZLEVBR1osZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU1RSxpSEFBaUg7QUFDakgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBc0IsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFN0YsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsaURBQWlEO0lBQ2pELElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUN0QixNQUFNLEtBQUss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TyxrQkFBa0IsQ0FBQztJQUM1QyxJQUFJLE1BQU0sSUFBSSxHQUFHO1FBQUUsT0FBTyxjQUFjLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxLQUF3QjtJQUN2RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyx3RUFBd0UsQ0FBQztJQUNsRixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FDTCxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLGtEQUFrRCxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQztBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cEludGVyY2VwdG9yRm4sXG4gIEh0dHBFdmVudCxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBDb250ZXh0VG9rZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvbnRwbHVzL25nLW5vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgVE9LRU5fUFJPVklERVIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Rva2VuLXByb3ZpZGVyLmludGVyZmFjZSc7XG5cbi8vIEEgdG9rZW4gdG8gdXNlIHdpdGggSHR0cENvbnRleHQgZm9yIHNraXBwaW5nIG5vdGlmaWNhdGlvbnMgb24gc3BlY2lmaWMgcmVxdWVzdHMuXG5leHBvcnQgY29uc3QgU0tJUF9OT1RJRklDQVRJT04gPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiBmYWxzZSk7XG5cbi8vIEEgdG9rZW4gdG8gdXNlIHdpdGggSHR0cENvbnRleHQgZm9yIGZvcmNpbmcgbm90aWZpY2F0aW9ucyBvbiBzcGVjaWZpYyByZXF1ZXN0cyAob3ZlcnJpZGVzIGV4Y2x1c2lvbiBwYXR0ZXJucykuXG5leHBvcnQgY29uc3QgU0hPV19OT1RJRklDQVRJT05TID0gbmV3IEh0dHBDb250ZXh0VG9rZW48Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKCkgPT4gdW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IGFwaUludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXEsIG5leHQpID0+IHtcbiAgY29uc3QgdG9hc3RyID0gaW5qZWN0KE5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBjb25zdCB0b2tlblByb3ZpZGVyID0gaW5qZWN0KFRPS0VOX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiB0b2tlbiBpcyBhdmFpbGFibGVcbiAgbGV0IG1vZGlmaWVkUmVxID0gcmVxO1xuICBjb25zdCB0b2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFRva2VuKCk7XG4gIGlmICh0b2tlbikge1xuICAgIG1vZGlmaWVkUmVxID0gcmVxLmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQobW9kaWZpZWRSZXEpLnBpcGUoXG4gICAgLy8gUmV0cmllcyB0aGUgcmVxdWVzdCB1cCB0byAyIHRpbWVzIG9uIGZhaWx1cmUgd2l0aCBhIDEtc2Vjb25kIGRlbGF5LlxuICAgIHJldHJ5KHsgY291bnQ6IDIsIGRlbGF5OiAxMDAwIH0pLFxuICAgIC8vIFVzZSB0aGUgYG1hcGAgb3BlcmF0b3IgdG8gaGFuZGxlIHN1Y2Nlc3NmdWwgcmVzcG9uc2VzLlxuICAgIG1hcCgoZXZlbnQ6IEh0dHBFdmVudDx1bmtub3duPikgPT4ge1xuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVTdWNjZXNzUmVzcG9uc2UoZXZlbnQsIHRvYXN0ciwgcmVxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KSxcbiAgICAvLyBVc2UgdGhlIGBjYXRjaEVycm9yYCBvcGVyYXRvciB0byBoYW5kbGUgYW55IGVycm9ycyB0aGF0IG9jY3VyLlxuICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gaGFuZGxlRXJyb3JSZXNwb25zZShlcnJvciwgdG9hc3RyKSksXG4gICk7XG59O1xuXG4vLyAtLS0gSGVscGVyIEZ1bmN0aW9ucyAtLS1cblxuLyoqXG4gKiBIYW5kbGVzIHN1Y2Nlc3NmdWwgSFRUUCByZXNwb25zZXMsIHN0YW5kYXJkaXplcyB0aGVtLCBzaG93cyBub3RpZmljYXRpb25zLCBhbmQgdHJhbnNmb3JtcyBmb3IgY29uc3VtZXJzLlxuICovXG5mdW5jdGlvbiBoYW5kbGVTdWNjZXNzUmVzcG9uc2UoXG4gIGV2ZW50OiBIdHRwUmVzcG9uc2U8dW5rbm93bj4sXG4gIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gIHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4pOiBIdHRwUmVzcG9uc2U8dW5rbm93bj4ge1xuICBjb25zdCBib2R5ID0gZXZlbnQuYm9keTtcblxuICAvLyBTdGFuZGFyZGl6ZSB0aGUgcmVzcG9uc2UgdG8gYWx3YXlzIGhhdmUgQXBpUmVzcG9uc2Ugc3RydWN0dXJlXG4gIGNvbnN0IHN0YW5kYXJkaXplZFJlc3BvbnNlID0gc3RhbmRhcmRpemVBcGlSZXNwb25zZShib2R5KTtcblxuICAvLyBIYW5kbGUgdG9hc3Qgbm90aWZpY2F0aW9ucyBiYXNlZCBvbiBzdGFuZGFyZGl6ZWQgcmVzcG9uc2VcbiAgaGFuZGxlVG9hc3ROb3RpZmljYXRpb25zKHN0YW5kYXJkaXplZFJlc3BvbnNlLCBub3RpZmljYXRpb25TZXJ2aWNlLCByZXEpO1xuXG4gIC8vIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgZGF0YSBiYXNlZCBvbiByZXNwb25zZSB0eXBlXG4gIHJldHVybiB0cmFuc2Zvcm1SZXNwb25zZUZvckNvbnN1bWVycyhzdGFuZGFyZGl6ZWRSZXNwb25zZSwgZXZlbnQpO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgSFRUUCBlcnJvcnMgKGZyb20gdGhlIGludGVyY2VwdG9yIGNoYWluLCBub3QgYmFja2VuZCBBcGlSZXNwb25zZSkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUVycm9yUmVzcG9uc2UoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlKSB7XG4gIGNvbnN0IHN0YXR1cyA9IGVycm9yLnN0YXR1cztcblxuICAvLyBPbmx5IHNob3cgbm90aWZpY2F0aW9ucyBmb3IgY3JpdGljYWwgSFRUUC1sZXZlbCBlcnJvcnMuXG4gIC8vIFdlIGF2b2lkIHNob3dpbmcgdG9hc3RzIGZvciA0eHggZXJyb3JzLCB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGUgY29tcG9uZW50LlxuICBpZiAoc3RhdHVzICE9PSBudWxsICYmIHNob3VsZFNob3dDcml0aWNhbEVycm9yTm90aWZpY2F0aW9uKHN0YXR1cykpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZ2V0Q3JpdGljYWxFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0RXJyb3JUaXRsZShzdGF0dXMpO1xuXG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgY29uZmlnOiB7IGR1cmF0aW9uOiA1MDAwIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBBbHdheXMgcmUtdGhyb3cgdGhlIGVycm9yIHNvIGNvbXBvbmVudHMvc2VydmljZXMgY2FuIGhhbmRsZSBpdC5cbiAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkaXplcyBhbnkgcmVzcG9uc2UgdG8gZm9sbG93IHRoZSBBcGlSZXNwb25zZSBzdHJ1Y3R1cmVcbiAqL1xuZnVuY3Rpb24gc3RhbmRhcmRpemVBcGlSZXNwb25zZShib2R5OiB1bmtub3duKTogQXBpUmVzcG9uc2U8dW5rbm93bj4ge1xuICAvLyBJZiBpdCdzIGFscmVhZHkgYSBwcm9wZXIgQXBpUmVzcG9uc2UsIHJldHVybiBhcyBpc1xuICBpZiAoaXNWYWxpZEFwaVJlc3BvbnNlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICAvLyBJZiBpdCdzIGEgcmF3IGRhdGEgcmVzcG9uc2UgKG5vIHdyYXBwZXIpLCB3cmFwIGl0XG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyAmJiAhKCdzdGF0dXMnIGluIGJvZHkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgY29kZTogJzIwMCcsXG4gICAgICBtZXNzYWdlOiAnT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgZGF0YTogYm9keSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICAvLyBJZiBpdCdzIGEgcHJpbWl0aXZlIHZhbHVlLCB3cmFwIGl0XG4gIGlmIChib2R5ICE9PSBudWxsICYmIGJvZHkgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICBjb2RlOiAnMjAwJyxcbiAgICAgIG1lc3NhZ2U6ICdPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICBkYXRhOiBib2R5LFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIElmIGl0J3MgbnVsbC91bmRlZmluZWQsIGNyZWF0ZSBhIHN1Y2Nlc3MgcmVzcG9uc2Ugd2l0aG91dCBkYXRhXG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgY29kZTogJzIwMCcsXG4gICAgbWVzc2FnZTogJ09wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gc3RhbmRhcmRpemVkIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVRvYXN0Tm90aWZpY2F0aW9ucyhcbiAgcmVzcG9uc2U6IEFwaVJlc3BvbnNlPHVua25vd24+LFxuICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHNob3VsZFNob3dUb2FzdCA9IHNob3VsZFNob3dTdWNjZXNzVG9hc3QocmVxKTtcbiAgY29uc3QgZm9yY2VTaG93ID0gcmVxLmNvbnRleHQuZ2V0KFNIT1dfTk9USUZJQ0FUSU9OUyk7XG4gIGNvbnN0IHNraXBOb3RpZmljYXRpb24gPSByZXEuY29udGV4dC5nZXQoU0tJUF9OT1RJRklDQVRJT04pO1xuXG4gIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgc2hvdyBub3RpZmljYXRpb25zLCBjb25zaWRlcmluZyBvdmVycmlkZXNcbiAgY29uc3Qgc2hvd05vdGlmaWNhdGlvbnMgPSBmb3JjZVNob3cgIT09IHVuZGVmaW5lZCA/IGZvcmNlU2hvdyA6IHNob3VsZFNob3dUb2FzdDtcblxuICBpZiAoc2tpcE5vdGlmaWNhdGlvbikgcmV0dXJuO1xuXG4gIC8vIER5bmFtaWMgaGFuZGxpbmc6IFVzZSBzaG93KCkgZm9yIHJ1bnRpbWUgdHlwZSBzZWxlY3Rpb25cbiAgaWYgKHJlc3BvbnNlLm1lc3NhZ2UgJiYgc2hvd05vdGlmaWNhdGlvbnMgJiYgWydzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZXJyb3InXS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5zaG93KHtcbiAgICAgIHR5cGU6IHJlc3BvbnNlLnN0YXR1cyBhcyAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB3YXJuaW5ncyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnd2FybmluZycgJiYgcmVzcG9uc2Uud2FybmluZ3MgJiYgcmVzcG9uc2Uud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlLnNob3coe1xuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIG1lc3NhZ2U6IHdhcm5pbmcubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSGFuZGxlIGVycm9ycyBzZXBhcmF0ZWx5IGlmIG5lZWRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmVycm9ycyAmJiByZXNwb25zZS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLmVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHN0YW5kYXJkaXplZCByZXNwb25zZSBmb3IgY29uc3VtZXJzXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlRm9yQ29uc3VtZXJzKFxuICByZXNwb25zZTogQXBpUmVzcG9uc2U8dW5rbm93bj4sXG4gIG9yaWdpbmFsRXZlbnQ6IEh0dHBSZXNwb25zZTx1bmtub3duPixcbik6IEh0dHBSZXNwb25zZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAvLyBGb3Igc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtZXNzYWdlLW9ubHkgc3VjY2VzcyByZXNwb25zZXMsIHJldHVybiB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgcmV0dXJuIG9yaWdpbmFsRXZlbnQuY2xvbmUoeyBib2R5OiByZXNwb25zZSB9KTtcblxuICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgLy8gRm9yIHdhcm5pbmdzLCByZXR1cm4gZGF0YSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB0aGUgZnVsbCByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UuZGF0YSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmNsb25lKHsgYm9keTogcmVzcG9uc2UgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICAvLyBFcnJvcnMgc2hvdWxkIGJlIHRocm93biwgbm90IHJldHVybmVkXG4gICAgICB0aHJvdyByZXNwb25zZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb3JpZ2luYWxFdmVudC5jbG9uZSh7IGJvZHk6IHJlc3BvbnNlIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcmVzcG9uc2UgaXMgYSB2YWxpZCBBcGlSZXNwb25zZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXBpUmVzcG9uc2UocmVzcG9uc2U6IHVua25vd24pOiByZXNwb25zZSBpcyBBcGlSZXNwb25zZTx1bmtub3duPiB7XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzcG9uc2UgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHIgPSByZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICAnc3RhdHVzJyBpbiByICYmXG4gICAgJ2NvZGUnIGluIHIgJiZcbiAgICB0eXBlb2Ygclsnc3RhdHVzJ10gPT09ICdzdHJpbmcnICYmXG4gICAgWydzdWNjZXNzJywgJ2Vycm9yJywgJ3dhcm5pbmcnXS5pbmNsdWRlcyhyWydzdGF0dXMnXSlcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBzdWNjZXNzIHRvYXN0IG5vdGlmaWNhdGlvbnMgYmFzZWQgb24gdGhlIHJlcXVlc3QgdHlwZS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2hvd1N1Y2Nlc3NUb2FzdChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogYm9vbGVhbiB7XG4gIGNvbnN0IHVybCA9IHJlcS51cmw/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgLy8gTmV2ZXIgc2hvdyBmb3IgdGhlc2UgY2FzZXNcbiAgY29uc3QgZXhjbHVkZWRQYXR0ZXJucyA9IFtcbiAgICAnZ2V0JyxcbiAgICAnL2xpc3QnLFxuICAgICcvc2VhcmNoJyxcbiAgICAnL3F1ZXJ5JyxcbiAgICAnL3BhZ2UnLFxuICAgICcvcGFnaW5hdGVkJyxcbiAgICAnL2hlYWx0aCcsXG4gICAgJy9zdGF0dXMnLFxuICAgICcvcGluZycsXG4gIF07XG5cbiAgaWYgKGV4Y2x1ZGVkUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IG1ldGhvZCA9PT0gcGF0dGVybiB8fCB1cmwuaW5jbHVkZXMocGF0dGVybikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQWx3YXlzIHNob3cgZm9yIHRoZXNlIG1ldGhvZHNcbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnZGVsZXRlJ10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICByZXR1cm4gbWV0aG9kICE9PSAnZ2V0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHdlIHNob3VsZCBzaG93IGEgbm90aWZpY2F0aW9uIGZvciB0aGlzIEhUVFAgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNob3dDcml0aWNhbEVycm9yTm90aWZpY2F0aW9uKHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gIC8vIFNob3cgbm90aWZpY2F0aW9ucyBmb3I6XG4gIC8vIC0gTmV0d29yayBlcnJvcnMgKHN0YXR1cyAwKVxuICAvLyAtIFNlcnZlciBlcnJvcnMgKDV4eClcbiAgcmV0dXJuIHN0YXR1cyA9PT0gMCB8fCAoc3RhdHVzID49IDUwMCAmJiBzdGF0dXMgPCA2MDApO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIHRpdGxlIGZvciBlcnJvciBub3RpZmljYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvclRpdGxlKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHN0YXR1cyA9PT0gMCkgcmV0dXJuICdDb25uZWN0aW9uIEVycm9yJztcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHJldHVybiAnU2VydmVyIEVycm9yJztcbiAgcmV0dXJuICdFcnJvcic7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSBmb3IgY3JpdGljYWwgZXJyb3JzLlxuICovXG5mdW5jdGlvbiBnZXRDcml0aWNhbEVycm9yTWVzc2FnZShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBzdHJpbmcge1xuICBpZiAoZXJyb3Iuc3RhdHVzID09PSAwKSB7XG4gICAgcmV0dXJuICdVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uJztcbiAgfVxuXG4gIGlmIChlcnJvci5zdGF0dXMgPj0gNTAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0Egc2VydmVyIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UgfHwgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnO1xufVxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class TenantService {\n tenantId = null;\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 console.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.2\", ngImport: i0, type: TenantService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TenantService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TenantService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLFFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBRXZDLFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsUUFBUTtnQkFDWCxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDaEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDN0IsZ0JBQWdCLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QscURBQXFEO1FBQ3JELG1EQUFtRDtJQUNyRCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLHFEQUFxRDtRQUNyRCx3QkFBd0I7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDO3VHQTVDVSxhQUFhOzJHQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudFNlcnZpY2Uge1xuICBwcml2YXRlIHRlbmFudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBnZXRUZW5hbnRJZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy50ZW5hbnRJZCkge1xuICAgICAgLy8gR2V0IGZyb20gbG9jYWxTdG9yYWdlLCBzZXNzaW9uU3RvcmFnZSwgb3IgSldUIHRva2VuXG4gICAgICB0aGlzLnRlbmFudElkID1cbiAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbmFudElkJykgfHxcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndGVuYW50SWQnKSB8fFxuICAgICAgICB0aGlzLmV4dHJhY3RUZW5hbnRGcm9tVG9rZW4oKSB8fFxuICAgICAgICAnZGVmYXVsdC10ZW5hbnQnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50ZW5hbnRJZDtcbiAgfVxuXG4gIGdldEN1cnJlbnRUZW5hbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGVuYW50SWQ7XG4gIH1cblxuICBzZXRUZW5hbnRJZCh0ZW5hbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50ZW5hbnRJZCA9IHRlbmFudElkO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZW5hbnRJZCcsIHRlbmFudElkKTtcbiAgfVxuXG4gIHNldFRlbmFudCh0ZW5hbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRUZW5hbnRJZCh0ZW5hbnRJZCk7XG4gIH1cblxuICBoYW5kbGVGb3JiaWRkZW4oKTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcignQWNjZXNzIGZvcmJpZGRlbiBmb3IgdGVuYW50OicsIHRoaXMudGVuYW50SWQpO1xuICAgIC8vIFJlZGlyZWN0IHRvIHRlbmFudCBzZWxlY3Rpb24gb3Igc2hvdyBlcnJvciBtZXNzYWdlXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvdGVuYW50LWFjY2Vzcy1kZW5pZWQnXSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RUZW5hbnRGcm9tVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiB5b3VyIEpXVCB0b2tlbiBzdHJ1Y3R1cmVcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXJcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFyVGVuYW50KCk6IHZvaWQge1xuICAgIHRoaXMudGVuYW50SWQgPSBudWxsO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZW5hbnRJZCcpO1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RlbmFudElkJyk7XG4gIH1cbn1cbiJdfQ==","import { Injectable, signal, computed } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as i0 from \"@angular/core\";\nexport class CorrelationService {\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 // @ts-ignore\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.2\", ngImport: i0, type: CorrelationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CorrelationService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CorrelationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29ycmVsYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3BDLE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsYUFBYSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSx5REFBQyxDQUFDO0lBQ25DLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQztJQUVwRCwyQ0FBMkM7SUFDbEMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZ0VBQUMsQ0FBQztJQUVyRSx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQzFCLDREQUE0RDtZQUM1RCxhQUFhO1lBQ2IsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUcsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBcUI7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7dUdBOUJVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvcnJlbGF0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgY29ycmVsYXRpb25JZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBDT1JSRUxBVElPTl9LRVkgPSAnY29ycmVsYXRpb24taWQnO1xuXG4gIC8vIFNpZ25hbC1iYXNlZCBnZXR0ZXIgZm9yIHJlYWN0aXZlIHVwZGF0ZXNcbiAgcmVhZG9ubHkgY3VycmVudENvcnJlbGF0aW9uSWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvcnJlbGF0aW9uSWQoKSk7XG5cbiAgZ2V0T3JDcmVhdGVDb3JyZWxhdGlvbklkKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNvcnJlbGF0aW9uSWQoKSkge1xuICAgICAgLy8gVHJ5IHRvIGdldCBmcm9tIHNlc3Npb25TdG9yYWdlIGZpcnN0IChmb3IgcGFnZSByZWZyZXNoZXMpXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5DT1JSRUxBVElPTl9LRVkpIHx8IHV1aWR2NCgpO1xuICAgICAgdGhpcy5jb3JyZWxhdGlvbklkLnNldChpZCk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ09SUkVMQVRJT05fS0VZLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvcnJlbGF0aW9uSWQoKSE7XG4gIH1cblxuICBzZXRDb3JyZWxhdGlvbklkKGNvcnJlbGF0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29ycmVsYXRpb25JZC5zZXQoY29ycmVsYXRpb25JZCk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNPUlJFTEFUSU9OX0tFWSwgY29ycmVsYXRpb25JZCk7XG4gIH1cblxuICByZXNldENvcnJlbGF0aW9uSWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb3JyZWxhdGlvbklkLnNldChudWxsKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ09SUkVMQVRJT05fS0VZKTtcbiAgfVxuXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVDb3JyZWxhdGlvbklkKCk7XG4gIH1cbn1cbiJdfQ==","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\n console[level](`[${level.toUpperCase()}] ${message}`, context);\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.2\", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoggingService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoggingService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9zZXJ2aWNlcy9sb2dnaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU1uRCxNQUFNLE9BQU8sY0FBYztJQUNqQixXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFDLEdBQUcsQ0FBQyxLQUFnQyxFQUFFLE9BQWUsRUFBRSxPQUFhO1FBQ2xFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxpREFBaUQ7WUFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixzQkFBc0I7WUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLGNBQWMsQ0FBQyxHQUFtQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuRCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDeEIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO1lBQ2hDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQzVCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLFlBQVksQ0FBQyxLQUFtQjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsZUFBZSxDQUFDLGFBQXFCO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUU7WUFDdEMsSUFBSSxFQUFFLGVBQWU7WUFDckIsYUFBYTtZQUNiLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztZQUM5QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixpQkFBaUIsQ0FBQyxhQUFxQixFQUFFLEdBQVc7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMvQixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLGFBQWE7WUFDYixHQUFHO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsT0FBYTtRQUN4RSxpREFBaUQ7UUFDakQsZ0NBQWdDO1FBQ2hDLDhEQUE4RDtJQUNoRSxDQUFDO3VHQTFFVSxjQUFjOzJHQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5pbXBvcnQgeyBIdHRwUmVxdWVzdExvZywgSHR0cEVycm9yTG9nIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgbG9nKGxldmVsOiAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIFByb2R1Y3Rpb24gbG9nZ2luZyAoZS5nLiwgdG8gZXh0ZXJuYWwgc2VydmljZSlcbiAgICAgIHRoaXMubG9nVG9FeHRlcm5hbFNlcnZpY2UobGV2ZWwsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXZlbG9wbWVudCBsb2dnaW5nXG4gICAgICBjb25zb2xlW2xldmVsXShgWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gLCBjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCd3YXJuJywgbWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIEhUVFAgUmVxdWVzdCBMb2dnaW5nXG4gIGxvZ0h0dHBSZXF1ZXN0KGxvZzogSHR0cFJlcXVlc3RMb2cpOiB2b2lkIHtcbiAgICB0aGlzLmluZm8oYEhUVFAgUmVxdWVzdCAtICR7bG9nLm1ldGhvZH0gJHtsb2cudXJsfWAsIHtcbiAgICAgIHJlcXVlc3RJZDogbG9nLnJlcXVlc3RJZCxcbiAgICAgIGNvcnJlbGF0aW9uSWQ6IGxvZy5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGxvZy50ZW5hbnRJZCxcbiAgICAgIGhlYWRlcnM6IGxvZy5oZWFkZXJzLFxuICAgICAgaXNDdXN0b21Vcmw6IGxvZy5pc0N1c3RvbVVybCxcbiAgICAgIHRpbWVzdGFtcDogbG9nLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEhUVFAgRXJyb3IgTG9nZ2luZ1xuICBsb2dIdHRwRXJyb3IoZXJyb3I6IEh0dHBFcnJvckxvZyk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IoYEhUVFAgRXJyb3IgLSAke2Vycm9yLm1ldGhvZH0gJHtlcnJvci51cmx9YCwge1xuICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgcmVxdWVzdElkOiBlcnJvci5yZXF1ZXN0SWQsXG4gICAgICBjb3JyZWxhdGlvbklkOiBlcnJvci5jb3JyZWxhdGlvbklkLFxuICAgICAgdGVuYW50SWQ6IGVycm9yLnRlbmFudElkLFxuICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvckRldGFpbHMsXG4gICAgICBlbnZpcm9ubWVudDogZXJyb3IuZW52aXJvbm1lbnQsXG4gICAgICB0aW1lc3RhbXA6IGVycm9yLnRpbWVzdGFtcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5ldHdvcmsgRXJyb3IgTG9nZ2luZ1xuICBsb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvcignTmV0d29yayBjb25uZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIHR5cGU6ICduZXR3b3JrLWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSYXRlIExpbWl0IEVycm9yIExvZ2dpbmdcbiAgbG9nUmF0ZUxpbWl0RXJyb3IoY29ycmVsYXRpb25JZDogc3RyaW5nLCB1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud2FybignUmF0ZSBsaW1pdCBleGNlZWRlZCcsIHtcbiAgICAgIHR5cGU6ICdyYXRlLWxpbWl0LWVycm9yJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB1cmwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1RvRXh0ZXJuYWxTZXJ2aWNlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IHZvaWQge1xuICAgIC8vIEltcGxlbWVudCBleHRlcm5hbCBsb2dnaW5nIHNlcnZpY2UgaW50ZWdyYXRpb25cbiAgICAvLyBlLmcuLCBTZW50cnksIExvZ1JvY2tldCwgZXRjLlxuICAgIC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvZHVjdGlvbiBsb2dnaW5nIGltcGxlbWVudGF0aW9uXG4gIH1cbn1cbiJdfQ==","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 { ENVIRONMENT } from '@acontplus/ng-config';\n// Services\nimport { TenantService } from '../services/tenant.service';\nimport { CorrelationService } from '../services/correlation.service';\nimport { LoggingService } from '../services/logging.service';\nimport { TOKEN_PROVIDER } from '../interfaces/token-provider.interface';\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(TOKEN_PROVIDER, { optional: true });\n const router = inject(Router);\n const tenantService = inject(TenantService);\n const correlationService = inject(CorrelationService);\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 console.error('Unauthorized access - token expired or invalid');\n // Note: Token clearing should be handled by the auth service, not infrastructure\n router.navigate(['/login']);\n break;\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jb250ZXh0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvaHR0cC1jb250ZXh0LmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDLENBQUMsd0JBQXdCO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FHWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELFdBQVc7QUFDWCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxzQkFBc0I7QUFDdEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RCxNQUFNLG9CQUFvQixHQUFHLElBQUksZ0JBQWdCLENBQVUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBeUIs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Q0wsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsU0FBUztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFxQyxFQUFFO0lBQ3hFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsUUFBUSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztTQUMxQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyAvLyBJbXBvcnQgSW5qZWN0aW9uVG9rZW5cbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwQ29udGV4dCxcbiAgSHR0cEludGVyY2VwdG9yRm4sXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0aHJvd0Vycm9yLCBzd2l0Y2hNYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG4vLyBFbnZpcm9ubWVudCBhbmQgY29uZmlndXJhdGlvblxuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbi8vIFNlcnZpY2VzXG5pbXBvcnQgeyBUZW5hbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGVuYW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ycmVsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29ycmVsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBUT0tFTl9QUk9WSURFUiB9IGZyb20gJy4uL2ludGVyZmFjZXMvdG9rZW4tcHJvdmlkZXIuaW50ZXJmYWNlJztcblxuLy8gSFRUUCBDb250ZXh0IHRva2Vuc1xuY29uc3QgQ1VTVE9NX1VSTCA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcbmNvbnN0IFNLSVBfQ09OVEVYVF9IRUFERVJTID0gbmV3IEh0dHBDb250ZXh0VG9rZW48Ym9vbGVhbj4oKCkgPT4gZmFsc2UpO1xuY29uc3QgQ1VTVE9NX0hFQURFUlMgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiAoe30pKTtcblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgSFRUUCBjb250ZXh0XG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tVXJsKCkge1xuICByZXR1cm4gbmV3IEh0dHBDb250ZXh0KCkuc2V0KENVU1RPTV9VUkwsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2tpcENvbnRleHRIZWFkZXJzKCkge1xuICByZXR1cm4gbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNLSVBfQ09OVEVYVF9IRUFERVJTLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDdXN0b21IZWFkZXJzKGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgcmV0dXJuIG5ldyBIdHRwQ29udGV4dCgpLnNldChDVVNUT01fSEVBREVSUywgaGVhZGVycyk7XG59XG5cbi8vIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBsaWJyYXJ5IGNvbnN1bWVyc1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ29udGV4dENvbmZpZyB7XG4gIGVuYWJsZUNvcnJlbGF0aW9uVHJhY2tpbmc/OiBib29sZWFuO1xuICBlbmFibGVSZXF1ZXN0TG9nZ2luZz86IGJvb2xlYW47XG4gIGVuYWJsZUVycm9yTG9nZ2luZz86IGJvb2xlYW47XG4gIGN1c3RvbUhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKT47XG4gIGNsaWVudFZlcnNpb24/OiBzdHJpbmc7XG4gIHRlbmFudElkSGVhZGVyPzogc3RyaW5nO1xuICBjb3JyZWxhdGlvbklkSGVhZGVyPzogc3RyaW5nO1xuICByZXF1ZXN0SWRIZWFkZXI/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcEhlYWRlcj86IHN0cmluZztcbiAgZXhjbHVkZVVybHM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZUF1dGhUb2tlbj86IGJvb2xlYW47XG4gIGJhc2VVcmxJbmplY3Rpb24/OiBib29sZWFuO1xuICByZWZyZXNoVG9rZW5DYWxsYmFjaz86ICgpID0+IE9ic2VydmFibGU8eyB0b2tlbjogc3RyaW5nOyByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfT47XG4gIGxvZ291dENhbGxiYWNrPzogKCkgPT4gdm9pZDtcbn1cblxuLy8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5jb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWQ8SHR0cENvbnRleHRDb25maWc+ID0ge1xuICBlbmFibGVDb3JyZWxhdGlvblRyYWNraW5nOiB0cnVlLFxuICBlbmFibGVSZXF1ZXN0TG9nZ2luZzogZmFsc2UsIC8vIFRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGVudmlyb25tZW50LmlzUHJvZHVjdGlvblxuICBlbmFibGVFcnJvckxvZ2dpbmc6IHRydWUsXG4gIGN1c3RvbUhlYWRlcnM6IHt9LFxuICBjbGllbnRWZXJzaW9uOiAnMS4wLjAnLFxuICB0ZW5hbnRJZEhlYWRlcjogJ1RlbmFudC1JZCcsXG4gIGNvcnJlbGF0aW9uSWRIZWFkZXI6ICdDb3JyZWxhdGlvbi1JZCcsXG4gIHJlcXVlc3RJZEhlYWRlcjogJ1JlcXVlc3QtSWQnLFxuICB0aW1lc3RhbXBIZWFkZXI6ICdUaW1lc3RhbXAnLFxuICBleGNsdWRlVXJsczogW10sXG4gIGluY2x1ZGVBdXRoVG9rZW46IHRydWUsXG4gIGJhc2VVcmxJbmplY3Rpb246IHRydWUsXG4gIHJlZnJlc2hUb2tlbkNhbGxiYWNrOiB1bmRlZmluZWQgYXMgYW55LFxuICBsb2dvdXRDYWxsYmFjazogdW5kZWZpbmVkIGFzIGFueSxcbn07XG5cbi8vIEluamVjdGlvbiB0b2tlbiBmb3IgY29uZmlndXJhdGlvbiAtIEZJWEVEXG5leHBvcnQgY29uc3QgSFRUUF9DT05URVhUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxIdHRwQ29udGV4dENvbmZpZz4oJ0hUVFBfQ09OVEVYVF9DT05GSUcnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IERFRkFVTFRfQ09ORklHLCAvLyBQcm92aWRlIGEgZGVmYXVsdCBmYWN0b3J5IGluIGNhc2UgaXQncyBub3QgcHJvdmlkZWRcbn0pO1xuXG5leHBvcnQgY29uc3QgaHR0cENvbnRleHRJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHRva2VuUHJvdmlkZXIgPSBpbmplY3QoVE9LRU5fUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdCB0ZW5hbnRTZXJ2aWNlID0gaW5qZWN0KFRlbmFudFNlcnZpY2UpO1xuICBjb25zdCBjb3JyZWxhdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ycmVsYXRpb25TZXJ2aWNlKTtcbiAgY29uc3QgbG9nZ2luZ1NlcnZpY2UgPSBpbmplY3QoTG9nZ2luZ1NlcnZpY2UpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgLy8gR2V0IGNvbmZpZ3VyYXRpb24gKHdpdGggZmFsbGJhY2sgdG8gZGVmYXVsdCkgLSBGSVhFRFxuICBjb25zdCBjb25maWc6IFJlcXVpcmVkPEh0dHBDb250ZXh0Q29uZmlnPiA9IHtcbiAgICAuLi5ERUZBVUxUX0NPTkZJRyxcbiAgICAvLyBUaGUgZGVmYXVsdCBlbmFibGVSZXF1ZXN0TG9nZ2luZyBuZWVkcyB0byBiZSBzZXQgYmFzZWQgb24gZW52aXJvbm1lbnQgaGVyZSxcbiAgICAvLyBhcyBpdCdzIGR5bmFtaWMsIGFuZCBERUZBVUxUX0NPTkZJRyBpcyBzdGF0aWMuXG4gICAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6ICFlbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24sXG4gICAgLi4uaW5qZWN0KEhUVFBfQ09OVEVYVF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSksXG4gIH07XG5cbiAgLy8gQ2hlY2sgSFRUUCBjb250ZXh0IHRva2Vuc1xuICBjb25zdCBpc0N1c3RvbVVybCA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fVVJMKTtcbiAgY29uc3Qgc2tpcEhlYWRlcnMgPSByZXEuY29udGV4dC5nZXQoU0tJUF9DT05URVhUX0hFQURFUlMpO1xuICBjb25zdCBjb250ZXh0SGVhZGVycyA9IHJlcS5jb250ZXh0LmdldChDVVNUT01fSEVBREVSUyk7XG5cbiAgLy8gU2tpcCBwcm9jZXNzaW5nIGlmIGhlYWRlcnMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgaWYgKHNraXBIZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIFVSTCBzaG91bGQgYmUgZXhjbHVkZWRcbiAgY29uc3Qgc2hvdWxkRXhjbHVkZSA9IGNvbmZpZy5leGNsdWRlVXJscy5zb21lKFxuICAgIHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkgfHwgbmV3IFJlZ0V4cCh1cmwpLnRlc3QocmVxLnVybCksXG4gICk7XG5cbiAgaWYgKHNob3VsZEV4Y2x1ZGUpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG5cbiAgLy8gU2tpcCBhdXRoIGZvciBsb2dpbiwgcmVnaXN0ZXIsIGFuZCByZWZyZXNoIGVuZHBvaW50c1xuICBjb25zdCBza2lwQXV0aCA9IHJlcS51cmwuaW5jbHVkZXMoJy9sb2dpbicpIHx8IHJlcS51cmwuaW5jbHVkZXMoJy9yZWdpc3RlcicpIHx8IHJlcS51cmwuaW5jbHVkZXMoJy9yZWZyZXNoJyk7XG5cbiAgLy8gSGFuZGxlIFVSTCB0cmFuc2Zvcm1hdGlvblxuICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnQuYXBpQmFzZVVybDtcbiAgY29uc3QgZmluYWxVcmwgPSBpc0N1c3RvbVVybCB8fCAhY29uZmlnLmJhc2VVcmxJbmplY3Rpb24gPyByZXEudXJsIDogYCR7YmFzZVVybH0ke3JlcS51cmx9YDtcblxuICAvLyBHZW5lcmF0ZSBvciBnZXQgY29ycmVsYXRpb24gY29udGV4dFxuICBjb25zdCBjb3JyZWxhdGlvbklkID0gY29uZmlnLmVuYWJsZUNvcnJlbGF0aW9uVHJhY2tpbmdcbiAgICA/IGNvcnJlbGF0aW9uU2VydmljZS5nZXRPckNyZWF0ZUNvcnJlbGF0aW9uSWQoKVxuICAgIDogdXVpZHY0KCk7XG4gIGNvbnN0IHRlbmFudElkID0gdGVuYW50U2VydmljZS5nZXRUZW5hbnRJZCgpO1xuICBjb25zdCByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcblxuICAvLyBCdWlsZCBkeW5hbWljIGhlYWRlcnNcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIC8vIENvcmUgY29udGV4dCBoZWFkZXJzXG4gIGhlYWRlcnNbY29uZmlnLnJlcXVlc3RJZEhlYWRlcl0gPSByZXF1ZXN0SWQ7XG5cbiAgaWYgKGNvbmZpZy5lbmFibGVDb3JyZWxhdGlvblRyYWNraW5nKSB7XG4gICAgaGVhZGVyc1tjb25maWcuY29ycmVsYXRpb25JZEhlYWRlcl0gPSBjb3JyZWxhdGlvbklkO1xuICB9XG5cbiAgaWYgKHRlbmFudElkKSB7XG4gICAgaGVhZGVyc1tjb25maWcudGVuYW50SWRIZWFkZXJdID0gdGVuYW50SWQ7XG4gIH1cblxuICBoZWFkZXJzW2NvbmZpZy50aW1lc3RhbXBIZWFkZXJdID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIC8vIENsaWVudCBpbmZvcm1hdGlvblxuICBpZiAoY29uZmlnLmNsaWVudFZlcnNpb24pIHtcbiAgICBoZWFkZXJzWydDbGllbnQtVmVyc2lvbiddID0gY29uZmlnLmNsaWVudFZlcnNpb247XG4gIH1cblxuICAvLyBFbnZpcm9ubWVudCBjbGllbnQgSURcbiAgaWYgKGVudmlyb25tZW50LmNsaWVudElkKSB7XG4gICAgaGVhZGVyc1snQ2xpZW50LUlkJ10gPSBlbnZpcm9ubWVudC5jbGllbnRJZDtcbiAgfVxuXG4gIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiBjb25maWd1cmVkIGFuZCBhdmFpbGFibGVcbiAgaWYgKGNvbmZpZy5pbmNsdWRlQXV0aFRva2VuICYmICFza2lwQXV0aCkge1xuICAgIGNvbnN0IGF1dGhUb2tlbiA9IHRva2VuUHJvdmlkZXI/LmdldFRva2VuKCk7XG4gICAgaWYgKGF1dGhUb2tlbikge1xuICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2F1dGhUb2tlbn1gO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByb2Nlc3MgY3VzdG9tIGhlYWRlcnMgZnJvbSBjb25maWd1cmF0aW9uIChjYW4gYmUgc3RhdGljIHZhbHVlcyBvciBkeW5hbWljIGZ1bmN0aW9ucylcbiAgT2JqZWN0LmVudHJpZXMoY29uZmlnLmN1c3RvbUhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGhlYWRlcnNba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKCkgOiB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQWRkIGhlYWRlcnMgZnJvbSBIVFRQIGNvbnRleHRcbiAgT2JqZWN0LmVudHJpZXMoY29udGV4dEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBBZGQgY29udGVudC10eXBlIGZvciBkYXRhIHJlcXVlc3RzIGlmIG5vdCBhbHJlYWR5IHNldFxuICBpZiAoXG4gICAgWydQT1NUJywgJ1BVVCcsICdQQVRDSCddLmluY2x1ZGVzKHJlcS5tZXRob2QudG9VcHBlckNhc2UoKSkgJiZcbiAgICAhcmVxLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKVxuICApIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIC8vIENsb25lIHJlcXVlc3Qgd2l0aCBlbmhhbmNlZCBoZWFkZXJzIGFuZCBVUkxcbiAgY29uc3QgZW5oYW5jZWRSZXEgPSByZXEuY2xvbmUoe1xuICAgIHVybDogZmluYWxVcmwsXG4gICAgc2V0SGVhZGVyczogaGVhZGVycyxcbiAgfSk7XG5cbiAgLy8gTG9nIG91dGdvaW5nIHJlcXVlc3QgaWYgZW5hYmxlZFxuICBpZiAoY29uZmlnLmVuYWJsZVJlcXVlc3RMb2dnaW5nKSB7XG4gICAgbG9nZ2luZ1NlcnZpY2UubG9nSHR0cFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgIG9yaWdpbmFsVXJsOiByZXEudXJsLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHRlbmFudElkLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBoZWFkZXJzOiBPYmplY3Qua2V5cyhoZWFkZXJzKSxcbiAgICAgIGlzQ3VzdG9tVXJsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSWYgcmVxdWVzdCBoYXMgYXV0aCBoZWFkZXIsIGhhbmRsZSB3aXRoIHJlZnJlc2ggbG9naWNcbiAgaWYgKGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSAmJiBjb25maWcucmVmcmVzaFRva2VuQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV4dChlbmhhbmNlZFJlcSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAvLyBJZiA0MDEgVW5hdXRob3JpemVkLCB0cnkgdG8gcmVmcmVzaCB0b2tlblxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0b2tlblByb3ZpZGVyPy5nZXRSZWZyZXNoVG9rZW4/LigpO1xuICAgICAgICAgIGlmIChyZWZyZXNoVG9rZW4gJiYgcmVmcmVzaFRva2VuLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnJlZnJlc2hUb2tlbkNhbGxiYWNrKCkhLnBpcGUoXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChuZXdUb2tlbnMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJldHJ5IHRoZSBvcmlnaW5hbCByZXF1ZXN0IHdpdGggbmV3IHRva2VuXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlSZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICAgICAgICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgICAgICAgICAgICAgIHNldEhlYWRlcnM6IHsgLi4uaGVhZGVycywgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7bmV3VG9rZW5zLnRva2VufWAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChyZXRyeVJlcSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKHJlZnJlc2hFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUmVmcmVzaCBmYWlsZWQsIGxvZ291dCB1c2VyXG4gICAgICAgICAgICAgICAgY29uZmlnLmxvZ291dENhbGxiYWNrPy4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiByZWZyZXNoRXJyb3IpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgZXJyb3IgbG9nZ2luZyB3aXRoIGNvbnRleHRcbiAgICAgICAgaWYgKGNvbmZpZy5lbmFibGVFcnJvckxvZ2dpbmcpIHtcbiAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dIdHRwRXJyb3Ioe1xuICAgICAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICAgICAgdXJsOiBmaW5hbFVybCxcbiAgICAgICAgICAgIG9yaWdpbmFsVXJsOiByZXEudXJsLFxuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgZXJyb3JEZXRhaWxzOiBlcnJvci5lcnJvcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudC5jbGllbnRJZCxcbiAgICAgICAgICAgIGlzQ3VzdG9tVXJsLFxuICAgICAgICAgICAgaGVhZGVyczogW10sIC8vIEhlYWRlcnMgYXJlIG5vdCBpbmNsdWRlZCBpbiBIdHRwRXJyb3JSZXNwb25zZSBieSBkZWZhdWx0LCBhZGp1c3QgaWYgbmVlZGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgb3RoZXIgZXJyb3Igc2NlbmFyaW9zXG4gICAgICAgIHN3aXRjaCAoZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICB0ZW5hbnRTZXJ2aWNlLmhhbmRsZUZvcmJpZGRlbigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nTmV0d29ya0Vycm9yKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dSYXRlTGltaXRFcnJvcihjb3JyZWxhdGlvbklkLCBmaW5hbFVybCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gYXV0aCBoZWFkZXIsIHVzZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZ1xuICAgIHJldHVybiBuZXh0KGVuaGFuY2VkUmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIEVuaGFuY2VkIGVycm9yIGxvZ2dpbmcgd2l0aCBjb250ZXh0XG4gICAgICAgIGlmIChjb25maWcuZW5hYmxlRXJyb3JMb2dnaW5nKSB7XG4gICAgICAgICAgbG9nZ2luZ1NlcnZpY2UubG9nSHR0cEVycm9yKHtcbiAgICAgICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogZmluYWxVcmwsXG4gICAgICAgICAgICBvcmlnaW5hbFVybDogcmVxLnVybCxcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogZXJyb3Iuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGVycm9yRGV0YWlsczogZXJyb3IuZXJyb3IsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQuY2xpZW50SWQsXG4gICAgICAgICAgICBpc0N1c3RvbVVybCxcbiAgICAgICAgICAgIGhlYWRlcnM6IFtdLCAvLyBIZWFkZXJzIGFyZSBub3QgaW5jbHVkZWQgaW4gSHR0cEVycm9yUmVzcG9uc2UgYnkgZGVmYXVsdCwgYWRqdXN0IGlmIG5lZWRlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvc1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5hdXRob3JpemVkIGFjY2VzcyAtIHRva2VuIGV4cGlyZWQgb3IgaW52YWxpZCcpO1xuICAgICAgICAgICAgLy8gTm90ZTogVG9rZW4gY2xlYXJpbmcgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGF1dGggc2VydmljZSwgbm90IGluZnJhc3RydWN0dXJlXG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIHRlbmFudFNlcnZpY2UuaGFuZGxlRm9yYmlkZGVuKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBsb2dnaW5nU2VydmljZS5sb2dOZXR3b3JrRXJyb3IoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgIGxvZ2dpbmdTZXJ2aWNlLmxvZ1JhdGVMaW1pdEVycm9yKGNvcnJlbGF0aW9uSWQsIGZpbmFsVXJsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLy8gU3VwcG9ydGluZyBpbnRlcmZhY2VzIGZvciB0eXBlIHNhZmV0eVxuZXhwb3J0IGludGVyZmFjZSBIdHRwUmVxdWVzdExvZyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgb3JpZ2luYWxVcmw6IHN0cmluZztcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIGhlYWRlcnM6IHN0cmluZ1tdO1xuICBpc0N1c3RvbVVybDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwRXJyb3JMb2cgZXh0ZW5kcyBIdHRwUmVxdWVzdExvZyB7XG4gIHN0YXR1czogbnVtYmVyO1xuICBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZXJyb3JEZXRhaWxzOiBhbnk7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgY29uZmlndXJhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKFxuICBvdmVycmlkZXM6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30sXG4pOiBIdHRwQ29udGV4dENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xufVxuXG4vLyBQcm92aWRlciBmdW5jdGlvbiBmb3IgZWFzeSBzZXR1cFxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVIdHRwQ29udGV4dChjb25maWc6IFBhcnRpYWw8SHR0cENvbnRleHRDb25maWc+ID0ge30pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBIVFRQX0NPTlRFWFRfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNyZWF0ZUh0dHBDb250ZXh0Q29uZmlnKGNvbmZpZyksXG4gICAgfSxcbiAgXTtcbn1cbiJdfQ==","import { HttpContext, HttpContextToken, } from '@angular/common/http';\nimport { finalize } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { 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.2\", ngImport: i0, type: ActiveRequestsTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: ActiveRequestsTracker, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", 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 console.log(requests);\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvaW50ZXJjZXB0b3JzL3NwaW5uZXIuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FHakIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFDMUQ7OztHQUdHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUUvRCxNQUFNLFFBQVEsR0FBdUIsRUFBRSxDQUFDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxjQUFjO0lBQzVCLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBeUI7UUFDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXlCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQzt1R0FkVSxxQkFBcUI7MkdBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQWtCRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNqRSwwQ0FBMEM7SUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFOUMsNENBQTRDO0lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV4QixtREFBbUQ7SUFDbkQsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osNkRBQTZEO1FBQzdELGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBDb250ZXh0LFxuICBIdHRwQ29udGV4dFRva2VuLFxuICBIdHRwSW50ZXJjZXB0b3JGbixcbiAgSHR0cFJlcXVlc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb21wb25lbnRzJztcbi8qKlxuICogVG9rZW4gdG8gZGV0ZXJtaW5lIGlmIGEgcmVxdWVzdCBzaG91bGQgc2hvdyBzcGlubmVyXG4gKiBEZWZhdWx0IGlzIHRydWUgKHNob3cgc3Bpbm5lciBmb3IgYWxsIHJlcXVlc3RzKVxuICovXG5jb25zdCBTSE9XX1NQSU5ORVIgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxib29sZWFuPigoKSA9PiB0cnVlKTtcblxuY29uc3QgcmVxdWVzdHM6IEh0dHBSZXF1ZXN0PGFueT5bXSA9IFtdO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBkaXNhYmxlIHNwaW5uZXIgZm9yIHNwZWNpZmljIHJlcXVlc3RzXG4gKiBAcmV0dXJucyBIdHRwQ29udGV4dCB3aXRoIHNwaW5uZXIgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhvdXRTcGlubmVyKCkge1xuICByZXR1cm4gbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNIT1dfU1BJTk5FUiwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gdHJhY2sgYWN0aXZlIEhUVFAgcmVxdWVzdHNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2ZVJlcXVlc3RzVHJhY2tlciB7XG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiByZXF1ZXN0cy5sZW5ndGg7XG4gIH1cblxuICBhZGQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IHZvaWQge1xuICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gIH1cblxuICByZW1vdmUocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdHMuaW5kZXhPZihyZXF1ZXN0KTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmVxdWVzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmNlcHRvciB0aGF0IHNob3dzL2hpZGVzIGEgbG9hZGluZyBzcGlubmVyIGJhc2VkIG9uIGFjdGl2ZSBIVFRQIHJlcXVlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzcGlubmVySW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICAvLyBUcmFjayBhY3RpdmUgcmVxdWVzdHMgcmVxdWlyaW5nIHNwaW5uZXJcbiAgY29uc29sZS5sb2cocmVxdWVzdHMpO1xuICBjb25zdCBhY3RpdmVSZXF1ZXN0cyA9IGluamVjdChBY3RpdmVSZXF1ZXN0c1RyYWNrZXIpO1xuICBjb25zdCBvdmVybGF5U2VydmljZSA9IGluamVjdChPdmVybGF5U2VydmljZSk7XG5cbiAgLy8gU2tpcCBzcGlubmVyIGlmIGRpc2FibGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgaWYgKCFyZXEuY29udGV4dC5nZXQoU0hPV19TUElOTkVSKSkge1xuICAgIHJldHVybiBuZXh0KHJlcSk7XG4gIH1cblxuICAvLyBBZGQgcmVxdWVzdCB0byB0cmFja2luZ1xuICBhY3RpdmVSZXF1ZXN0cy5hZGQocmVxKTtcblxuICAvLyBTaG93IHNwaW5uZXIgaWYgdGhpcyBpcyB0aGUgZmlyc3QgYWN0aXZlIHJlcXVlc3RcbiAgaWYgKGFjdGl2ZVJlcXVlc3RzLmNvdW50ID09PSAxKSB7XG4gICAgb3ZlcmxheVNlcnZpY2Uuc2hvd1NwaW5uZXIoKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KHJlcSkucGlwZShcbiAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAvLyBSZW1vdmUgcmVxdWVzdCBhbmQgaGlkZSBzcGlubmVyIGlmIG5vIG1vcmUgYWN0aXZlIHJlcXVlc3RzXG4gICAgICBhY3RpdmVSZXF1ZXN0cy5yZW1vdmUocmVxKTtcbiAgICAgIGlmIChhY3RpdmVSZXF1ZXN0cy5jb3VudCA9PT0gMCkge1xuICAgICAgICBvdmVybGF5U2VydmljZS5oaWRlU3Bpbm5lcigpO1xuICAgICAgfVxuICAgIH0pLFxuICApO1xufTtcbiJdfQ==","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.2\", ngImport: i0, type: BaseHttpRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: BaseHttpRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: BaseHttpRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3JlcG9zaXRvcmllcy9iYXNlLWh0dHAucmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBS2xELE1BQU0sT0FBZ0Isa0JBQWtCO0lBQzVCLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFHMUIsUUFBUSxDQUFDLE9BQWUsRUFBRTtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFFakYsT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLElBQUksUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRVMsR0FBRyxDQUFJLE9BQWUsRUFBRSxFQUFFLE1BQVk7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMsSUFBSSxDQUFJLE9BQWUsRUFBRSxFQUFFLElBQVM7UUFDNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFUyxHQUFHLENBQUksT0FBZSxFQUFFLEVBQUUsSUFBUztRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVTLEtBQUssQ0FBSSxPQUFlLEVBQUUsRUFBRSxJQUFTO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVMsTUFBTSxDQUFJLE9BQWUsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQTlCbUIsa0JBQWtCOzJHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5Q29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VIdHRwUmVwb3NpdG9yeSB7XG4gIHByb3RlY3RlZCBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29uZmlnOiBSZXBvc2l0b3J5Q29uZmlnOyAvLyBBYnN0cmFjdCBwcm9wZXJ0eVxuXG4gIHByb3RlY3RlZCBidWlsZFVybChwYXRoOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgfHwgJy9hcGknO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmNvbmZpZy52ZXJzaW9uID8gYC92JHt0aGlzLmNvbmZpZy52ZXJzaW9ufWAgOiAnJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHBhdGggPyBgJHt0aGlzLmNvbmZpZy5lbmRwb2ludH0vJHtwYXRofWAgOiB0aGlzLmNvbmZpZy5lbmRwb2ludDtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfSR7dmVyc2lvbn0vJHtlbmRwb2ludH1gLnJlcGxhY2UoL1xcLysvZywgJy8nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQ8VD4ocGF0aDogc3RyaW5nID0gJycsIHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIHsgcGFyYW1zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3Q8VD4ocGF0aDogc3RyaW5nID0gJycsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmJ1aWxkVXJsKHBhdGgpLCBib2R5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdXQ8VD4ocGF0aDogc3RyaW5nID0gJycsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhdGNoPFQ+KHBhdGg6IHN0cmluZyA9ICcnLCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFQ+KHRoaXMuYnVpbGRVcmwocGF0aCksIGJvZHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZTxUPihwYXRoOiBzdHJpbmcgPSAnJyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFQ+KHRoaXMuYnVpbGRVcmwocGF0aCkpO1xuICB9XG59XG4iXX0=","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.2\", ngImport: i0, type: GenericRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: GenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", 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.2\", ngImport: i0, type: SearchableGenericRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: SearchableGenericRepository });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: SearchableGenericRepository, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvZ2VuZXJpYy5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFJNUQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFtQixtQkFBbUIsQ0FBQyxDQUFDO0FBRzNGLE1BQU0sT0FBTyxpQkFDWCxTQUFRLGtCQUFrQjtJQUdQLE1BQU0sQ0FBbUI7SUFFNUM7UUFDRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQW1CLGlCQUFpQixDQUFDLENBQUM7UUFFM0QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQU87UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUE2QjtRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFVLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQU8sRUFBRSxNQUF3QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsRUFBTztRQUNaLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRVMsV0FBVyxDQUFDLFVBQTZCLEVBQUUsT0FBNkI7UUFDaEYsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBRXZCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFDMUQsSUFBSSxVQUFVLENBQUMsTUFBTTtnQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDekQsSUFBSSxVQUFVLENBQUMsYUFBYTtnQkFBRSxNQUFNLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDaEYsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzt1R0FqRFUsaUJBQWlCOzJHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7O0FBc0RYLE1BQU0sT0FBTywyQkFDWCxTQUFRLGlCQUErQjtJQUd2QyxNQUFNLENBQUMsS0FBYSxFQUFFLFVBQTRCO1FBQ2hELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBdUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7dUdBUlUsMkJBQTJCOzJHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlSHR0cFJlcG9zaXRvcnkgfSBmcm9tICcuL2Jhc2UtaHR0cC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IFJlcG9zaXRvcnksIFJlcG9zaXRvcnlDb25maWcsIFNlYXJjaGFibGVSZXBvc2l0b3J5IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0LCBQYWdpbmF0aW9uUGFyYW1zIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcblxuLy8gQ3JlYXRlIGFuIGluamVjdGlvbiB0b2tlbiBmb3IgUmVwb3NpdG9yeUNvbmZpZ1xuZXhwb3J0IGNvbnN0IFJFUE9TSVRPUllfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFJlcG9zaXRvcnlDb25maWc+KCdSRVBPU0lUT1JZX0NPTkZJRycpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR2VuZXJpY1JlcG9zaXRvcnk8VEVudGl0eSA9IGFueSwgVElkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID0gbnVtYmVyPlxuICBleHRlbmRzIEJhc2VIdHRwUmVwb3NpdG9yeVxuICBpbXBsZW1lbnRzIFJlcG9zaXRvcnk8VEVudGl0eSwgVElkPlxue1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY29uZmlnOiBSZXBvc2l0b3J5Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdDxSZXBvc2l0b3J5Q29uZmlnPihSRVBPU0lUT1JZX0NPTkZJRyk7XG5cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgZ2V0QnlJZChpZDogVElkKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0PFRFbnRpdHk+KGlkLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgZ2V0QWxsKHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uUGFyYW1zKTogT2JzZXJ2YWJsZTxQYWdlZFJlc3VsdDxURW50aXR5Pj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuYnVpbGRQYXJhbXMocGFnaW5hdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0PFBhZ2VkUmVzdWx0PFRFbnRpdHk+PignJywgcGFyYW1zKTtcbiAgfVxuXG4gIGNyZWF0ZShlbnRpdHk6IFBhcnRpYWw8VEVudGl0eT4pOiBPYnNlcnZhYmxlPFRFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5wb3N0PFRFbnRpdHk+KCcnLCBlbnRpdHkpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBUSWQsIGVudGl0eTogUGFydGlhbDxURW50aXR5Pik6IE9ic2VydmFibGU8VEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLnB1dDxURW50aXR5PihpZC50b1N0cmluZygpLCBlbnRpdHkpO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBUSWQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlPHZvaWQ+KGlkLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUGFyYW1zKHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uUGFyYW1zLCBmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55Pik6IGFueSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcblxuICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICBwYXJhbXMucGFnZUluZGV4ID0gcGFnaW5hdGlvbi5wYWdlSW5kZXg/LnRvU3RyaW5nKCkgfHwgJzEnO1xuICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnaW5hdGlvbi5wYWdlU2l6ZT8udG9TdHJpbmcoKSB8fCAnMjAnO1xuICAgICAgaWYgKHBhZ2luYXRpb24uc29ydEJ5KSBwYXJhbXMuc29ydEJ5ID0gcGFnaW5hdGlvbi5zb3J0Qnk7XG4gICAgICBpZiAocGFnaW5hdGlvbi5zb3J0RGlyZWN0aW9uKSBwYXJhbXMuc29ydERpcmVjdGlvbiA9IHBhZ2luYXRpb24uc29ydERpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVHZW5lcmljUmVwb3NpdG9yeTxURW50aXR5ID0gYW55LCBUSWQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPSBudW1iZXI+XG4gIGV4dGVuZHMgR2VuZXJpY1JlcG9zaXRvcnk8VEVudGl0eSwgVElkPlxuICBpbXBsZW1lbnRzIFNlYXJjaGFibGVSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD5cbntcbiAgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcsIHBhZ2luYXRpb246IFBhZ2luYXRpb25QYXJhbXMpOiBPYnNlcnZhYmxlPFBhZ2VkUmVzdWx0PFRFbnRpdHk+PiB7XG4gICAgY29uc3Qgc2VhcmNoRmlsdGVycyA9IHsgcTogcXVlcnkgfTtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmJ1aWxkUGFyYW1zKHBhZ2luYXRpb24sIHNlYXJjaEZpbHRlcnMpO1xuICAgIHJldHVybiB0aGlzLmdldDxQYWdlZFJlc3VsdDxURW50aXR5Pj4oJ3NlYXJjaCcsIHBhcmFtcyk7XG4gIH1cbn1cbiJdfQ==","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.2\", ngImport: i0, type: RepositoryFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RepositoryFactory, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RepositoryFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvcmVwb3NpdG9yeS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLbEQsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sQ0FDSixNQUF3QjtRQUV4QixNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUN2RSxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBNkIsRUFBRSxFQUFFO1lBQ3BELE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztZQUN2QixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7Z0JBQzFELElBQUksVUFBVSxDQUFDLE1BQU07b0JBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUN6RCxJQUFJLFVBQVUsQ0FBQyxhQUFhO29CQUFFLE1BQU0sQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUNoRixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYsOEJBQThCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBTyxFQUFVLEVBQUU7WUFDckMsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsdUVBQXVFO1lBQ3ZFLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQztRQUVGLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV0RSxNQUFNLEVBQUUsQ0FBQyxVQUFXLEVBQUUsRUFBRSxDQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBdUIsUUFBUSxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDO2FBQ2hDLENBQUM7WUFFSixNQUFNLEVBQUUsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUM7WUFFakYsTUFBTSxFQUFFLENBQUMsRUFBTyxFQUFFLE1BQXdCLEVBQUUsRUFBRSxDQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO1lBRTFELE1BQU0sRUFBRSxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RFLENBQUM7SUFDSixDQUFDO3VHQWhEVSxpQkFBaUI7MkdBQWpCLGlCQUFpQixjQURKLE1BQU07OzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUGFnZWRSZXN1bHQsIFBhZ2luYXRpb25QYXJhbXMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSwgUmVwb3NpdG9yeUNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3NpdG9yeUZhY3Rvcnkge1xuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgY3JlYXRlPFRFbnRpdHksIFRJZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciA9IG51bWJlcj4oXG4gICAgY29uZmlnOiBSZXBvc2l0b3J5Q29uZmlnLFxuICApOiBSZXBvc2l0b3J5PFRFbnRpdHksIFRJZD4ge1xuICAgIGNvbnN0IGJ1aWxkVXJsID0gKHBhdGg6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgfHwgJy9hcGknO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uID8gYC92JHtjb25maWcudmVyc2lvbn1gIDogJyc7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IHBhdGggPyBgJHtjb25maWcuZW5kcG9pbnR9LyR7cGF0aH1gIDogY29uZmlnLmVuZHBvaW50O1xuICAgICAgcmV0dXJuIGAke2Jhc2VVcmx9JHt2ZXJzaW9ufS8ke2VuZHBvaW50fWAucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZFBhcmFtcyA9IChwYWdpbmF0aW9uPzogUGFnaW5hdGlvblBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcbiAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgIHBhcmFtcy5wYWdlID0gcGFnaW5hdGlvbi5wYWdlSW5kZXg/LnRvU3RyaW5nKCkgfHwgJzEnO1xuICAgICAgICBwYXJhbXMucGFnZVNpemUgPSBwYWdpbmF0aW9uLnBhZ2VTaXplPy50b1N0cmluZygpIHx8ICcyMCc7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uLnNvcnRCeSkgcGFyYW1zLnNvcnRCeSA9IHBhZ2luYXRpb24uc29ydEJ5O1xuICAgICAgICBpZiAocGFnaW5hdGlvbi5zb3J0RGlyZWN0aW9uKSBwYXJhbXMuc29ydERpcmVjdGlvbiA9IHBhZ2luYXRpb24uc29ydERpcmVjdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfTtcblxuICAgIC8vIFNhZmUgSUQgY29udmVyc2lvbiBmdW5jdGlvblxuICAgIGNvbnN0IGlkVG9TdHJpbmcgPSAoaWQ6IFRJZCk6IHN0cmluZyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBpZCA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgcmV0dXJuIGlkLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjayBmb3Igb3RoZXIgdHlwZXMgLSB5b3UgbWlnaHQgd2FudCB0byBoYW5kbGUgdGhpcyBkaWZmZXJlbnRseVxuICAgICAgcmV0dXJuIFN0cmluZyhpZCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBnZXRCeUlkOiAoaWQ6IFRJZCkgPT4gdGhpcy5odHRwLmdldDxURW50aXR5PihidWlsZFVybChpZFRvU3RyaW5nKGlkKSkpLFxuXG4gICAgICBnZXRBbGw6IChwYWdpbmF0aW9uPykgPT5cbiAgICAgICAgdGhpcy5odHRwLmdldDxQYWdlZFJlc3VsdDxURW50aXR5Pj4oYnVpbGRVcmwoKSwge1xuICAgICAgICAgIHBhcmFtczogYnVpbGRQYXJhbXMocGFnaW5hdGlvbiksXG4gICAgICAgIH0pLFxuXG4gICAgICBjcmVhdGU6IChlbnRpdHk6IFBhcnRpYWw8VEVudGl0eT4pID0+IHRoaXMuaHR0cC5wb3N0PFRFbnRpdHk+KGJ1aWxkVXJsKCksIGVudGl0eSksXG5cbiAgICAgIHVwZGF0ZTogKGlkOiBUSWQsIGVudGl0eTogUGFydGlhbDxURW50aXR5PikgPT5cbiAgICAgICAgdGhpcy5odHRwLnB1dDxURW50aXR5PihidWlsZFVybChpZFRvU3RyaW5nKGlkKSksIGVudGl0eSksXG5cbiAgICAgIHJlbW92ZTogKGlkOiBUSWQpID0+IHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oYnVpbGRVcmwoaWRUb1N0cmluZyhpZCkpKSxcbiAgICB9O1xuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport { TOKEN_PROVIDER } from '../interfaces/token-provider.interface';\nimport * as i0 from \"@angular/core\";\nexport class UserRepository {\n tokenProvider = inject(TOKEN_PROVIDER);\n getCurrentUser() {\n const token = this.tokenProvider.getToken();\n if (!token) {\n return null;\n }\n try {\n const decodedToken = jwtDecode(token);\n const email = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] ??\n decodedToken['email'] ??\n decodedToken['sub'] ??\n decodedToken['user_id'];\n const name = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'] ??\n decodedToken['name'] ??\n decodedToken['given_name'] ??\n decodedToken['display_name'];\n if (!email) {\n return null;\n }\n const userData = {\n email: email.toString(),\n displayName: name?.toString() ?? 'Unknown User',\n };\n return userData;\n }\n catch {\n return null;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UserRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UserRepository, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UserRepository, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2xpYi9yZXBvc2l0b3JpZXMvdXNlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQUt4RSxNQUFNLE9BQU8sY0FBYztJQUNSLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFeEQsY0FBYztRQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUEwQixLQUFLLENBQUMsQ0FBQztZQUUvRCxNQUFNLEtBQUssR0FDVCxZQUFZLENBQUMsb0VBQW9FLENBQUM7Z0JBQ2xGLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ25CLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUxQixNQUFNLElBQUksR0FDUixZQUFZLENBQUMsaUVBQWlFLENBQUM7Z0JBQy9FLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BCLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQzFCLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQWE7Z0JBQ3pCLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUN2QixXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLGNBQWM7YUFDaEQsQ0FBQztZQUVGLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO3VHQXJDVSxjQUFjOzJHQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyBVc2VyRGF0YSB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBUT0tFTl9QUk9WSURFUiB9IGZyb20gJy4uL2ludGVyZmFjZXMvdG9rZW4tcHJvdmlkZXIuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJSZXBvc2l0b3J5IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlblByb3ZpZGVyID0gaW5qZWN0KFRPS0VOX1BST1ZJREVSKTtcblxuICBnZXRDdXJyZW50VXNlcigpOiBVc2VyRGF0YSB8IG51bGwge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlblByb3ZpZGVyLmdldFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dERlY29kZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odG9rZW4pO1xuXG4gICAgICBjb25zdCBlbWFpbCA9XG4gICAgICAgIGRlY29kZWRUb2tlblsnaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvZW1haWxhZGRyZXNzJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWydlbWFpbCddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnc3ViJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWyd1c2VyX2lkJ107XG5cbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICBkZWNvZGVkVG9rZW5bJ2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2dpdmVubmFtZSddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnbmFtZSddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnZ2l2ZW5fbmFtZSddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnZGlzcGxheV9uYW1lJ107XG5cbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJEYXRhOiBVc2VyRGF0YSA9IHtcbiAgICAgICAgZW1haWw6IGVtYWlsLnRvU3RyaW5nKCksXG4gICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lPy50b1N0cmluZygpID8/ICdVbmtub3duIFVzZXInLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHVzZXJEYXRhO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1odHRwLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL2FkYXB0ZXJzL2FuZ3VsYXItaHR0cC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckMsU0FBUyxRQUFRLENBQUMsT0FBMkIsRUFBRSxRQUFnQjtJQUM3RCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzlCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBRVY7SUFDQTtJQUZuQixZQUNtQixJQUFnQixFQUNoQixPQUFnQjtRQURoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDaEMsQ0FBQztJQUVJLFlBQVksQ0FBQyxPQUFxQjtRQUN4QyxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtZQUMvQixNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FBSSxNQUt4QjtRQUNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUM5RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsR0FBRyxXQUFXO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVTtJQUNWLEdBQUcsQ0FBSSxHQUFXLEVBQUUsT0FBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksQ0FBSSxHQUFXLEVBQUUsSUFBVSxFQUFFLE9BQXFCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxVQUFVO0lBQ1YsR0FBRyxDQUFJLEdBQVcsRUFBRSxJQUFVLEVBQUUsT0FBcUI7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGFBQWE7SUFDYixNQUFNLENBQUksR0FBVyxFQUFFLE9BQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh0dHBPcHRpb25zLCBIdHRwUG9ydCB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5mdW5jdGlvbiBtZXJnZVVybChiYXNlVVJMOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWJhc2VVUkwpIHJldHVybiBlbmRwb2ludDtcbiAgcmV0dXJuIGAke2Jhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7ZW5kcG9pbnQucmVwbGFjZSgvXlxcLysvLCAnJyl9YDtcbn1cblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJIdHRwQWRhcHRlciBpbXBsZW1lbnRzIEh0dHBQb3J0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVSTD86IHN0cmluZyxcbiAgKSB7fVxuXG4gIHByaXZhdGUgYnVpbGRPcHRpb25zKG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzID8/IHt9LFxuICAgICAgcGFyYW1zOiBvcHRpb25zPy5wYXJhbXMgPz8ge30sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdDxUPihwYXJhbXM6IHtcbiAgICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnIHwgJ3B1dCcgfCAnZGVsZXRlJztcbiAgICB1cmw6IHN0cmluZztcbiAgICBkYXRhPzogYW55O1xuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9ucztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGZ1bGxVcmwgPSBtZXJnZVVybCh0aGlzLmJhc2VVUkwsIHBhcmFtcy51cmwpO1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0gdGhpcy5idWlsZE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpO1xuXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuaHR0cC5yZXF1ZXN0PFQ+KHBhcmFtcy5tZXRob2QsIGZ1bGxVcmwsIHtcbiAgICAgIGJvZHk6IHBhcmFtcy5kYXRhLFxuICAgICAgLi4uaHR0cE9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgbGFzdFZhbHVlRnJvbShvYnNlcnZhYmxlKTtcbiAgfVxuXG4gIC8qKiBHRVQgKi9cbiAgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgdXJsLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqIFBPU1QgKi9cbiAgcG9zdDxUPih1cmw6IHN0cmluZywgZGF0YT86IGFueSwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogJ3Bvc3QnLCB1cmwsIGRhdGEsIG9wdGlvbnMgfSk7XG4gIH1cblxuICAvKiogUFVUICovXG4gIHB1dDxUPih1cmw6IHN0cmluZywgZGF0YT86IGFueSwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogJ3B1dCcsIHVybCwgZGF0YSwgb3B0aW9ucyB9KTtcbiAgfVxuXG4gIC8qKiBERUxFVEUgKi9cbiAgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgdXJsLCBvcHRpb25zIH0pO1xuICB9XG59XG4iXX0=","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\n// Default configuration\nconst DEFAULT_CONFIG = {\n apiBaseUrl: '',\n apiTimeout: 30000,\n retryAttempts: 2,\n retryDelay: 1000,\n enableCorrelationTracking: true,\n enableRequestLogging: false,\n enableErrorLogging: true,\n enableToastNotifications: true,\n includeAuthToken: true,\n authTokenHeader: 'Authorization',\n enableMultiTenancy: true,\n tenantIdHeader: 'Tenant-Id',\n logLevel: 'info',\n enableConsoleLogging: true,\n customHeaders: {},\n excludeUrls: [],\n excludeMethods: [],\n};\n// Injection token for configuration\nexport const CORE_CONFIG = new InjectionToken('CORE_CONFIG', {\n factory: () => DEFAULT_CONFIG,\n});\nexport class CoreConfigService {\n config;\n environment = inject(ENVIRONMENT);\n constructor() {\n // Initialize with default config and environment overrides\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.2\", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CoreConfigService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvc2VydmljZXMvY29yZS1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQW9DbkQsd0JBQXdCO0FBQ3hCLE1BQU0sY0FBYyxHQUF5QjtJQUMzQyxVQUFVLEVBQUUsRUFBRTtJQUNkLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLHlCQUF5QixFQUFFLElBQUk7SUFDL0Isb0JBQW9CLEVBQUUsS0FBSztJQUMzQixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLHdCQUF3QixFQUFFLElBQUk7SUFDOUIsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGNBQWMsRUFBRSxXQUFXO0lBQzNCLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsYUFBYSxFQUFFLEVBQUU7SUFDakIsV0FBVyxFQUFFLEVBQUU7SUFDZixjQUFjLEVBQUUsRUFBRTtDQUNuQixDQUFDO0FBRUYsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBYSxhQUFhLEVBQUU7SUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWM7Q0FDOUIsQ0FBQyxDQUFDO0FBS0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixNQUFNLENBQXVCO0lBQzdCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENB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LElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7dUdBbkdVLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBdUdELG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsU0FBOEIsRUFBRTtJQUNoRSxPQUFPO1FBQ0w7WUFDRSxPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsTUFBTTtTQUNqQjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxZQUFpQyxFQUFFO0lBQ2xFLE9BQU87UUFDTCxHQUFHLGNBQWM7UUFDakIsR0FBRyxTQUFTO0tBQ2IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcblxuLy8gQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIHRoZSBjb3JlIGxpYnJhcnlcbmV4cG9ydCBpbnRlcmZhY2UgQ29yZUNvbmZpZyB7XG4gIC8vIEFQSSBDb25maWd1cmF0aW9uXG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG4gIGFwaVRpbWVvdXQ/OiBudW1iZXI7XG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHJldHJ5RGVsYXk/OiBudW1iZXI7XG5cbiAgLy8gRmVhdHVyZSBGbGFnc1xuICBlbmFibGVDb3JyZWxhdGlvblRyYWNraW5nPzogYm9vbGVhbjtcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc/OiBib29sZWFuO1xuICBlbmFibGVFcnJvckxvZ2dpbmc/OiBib29sZWFuO1xuICBlbmFibGVUb2FzdE5vdGlmaWNhdGlvbnM/OiBib29sZWFuO1xuXG4gIC8vIFNlY3VyaXR5XG4gIGluY2x1ZGVBdXRoVG9rZW4/OiBib29sZWFuO1xuICBhdXRoVG9rZW5IZWFkZXI/OiBzdHJpbmc7XG5cbiAgLy8gTXVsdGktdGVuYW5jeVxuICBlbmFibGVNdWx0aVRlbmFuY3k/OiBib29sZWFuO1xuICB0ZW5hbnRJZEhlYWRlcj86IHN0cmluZztcblxuICAvLyBMb2dnaW5nXG4gIGxvZ0xldmVsPzogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG4gIGVuYWJsZUNvbnNvbGVMb2dnaW5nPzogYm9vbGVhbjtcblxuICAvLyBDdXN0b20gSGVhZGVyc1xuICBjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgKCgpID0+IHN0cmluZyk+O1xuXG4gIC8vIEV4Y2x1c2lvbnNcbiAgZXhjbHVkZVVybHM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZU1ldGhvZHM/OiBzdHJpbmdbXTtcbn1cblxuLy8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5jb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWQ8Q29yZUNvbmZpZz4gPSB7XG4gIGFwaUJhc2VVcmw6ICcnLFxuICBhcGlUaW1lb3V0OiAzMDAwMCxcbiAgcmV0cnlBdHRlbXB0czogMixcbiAgcmV0cnlEZWxheTogMTAwMCxcbiAgZW5hYmxlQ29ycmVsYXRpb25UcmFja2luZzogdHJ1ZSxcbiAgZW5hYmxlUmVxdWVzdExvZ2dpbmc6IGZhbHNlLFxuICBlbmFibGVFcnJvckxvZ2dpbmc6IHRydWUsXG4gIGVuYWJsZVRvYXN0Tm90aWZpY2F0aW9uczogdHJ1ZSxcbiAgaW5jbHVkZUF1dGhUb2tlbjogdHJ1ZSxcbiAgYXV0aFRva2VuSGVhZGVyOiAnQXV0aG9yaXphdGlvbicsXG4gIGVuYWJsZU11bHRpVGVuYW5jeTogdHJ1ZSxcbiAgdGVuYW50SWRIZWFkZXI6ICdUZW5hbnQtSWQnLFxuICBsb2dMZXZlbDogJ2luZm8nLFxuICBlbmFibGVDb25zb2xlTG9nZ2luZzogdHJ1ZSxcbiAgY3VzdG9tSGVhZGVyczoge30sXG4gIGV4Y2x1ZGVVcmxzOiBbXSxcbiAgZXhjbHVkZU1ldGhvZHM6IFtdLFxufTtcblxuLy8gSW5qZWN0aW9uIHRva2VuIGZvciBjb25maWd1cmF0aW9uXG5leHBvcnQgY29uc3QgQ09SRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29yZUNvbmZpZz4oJ0NPUkVfQ09ORklHJywge1xuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0NPTkZJRyxcbn0pO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbmZpZ1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8Q29yZUNvbmZpZz47XG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEluaXRpYWxpemUgd2l0aCBkZWZhdWx0IGNvbmZpZyBhbmQgZW52aXJvbm1lbnQgb3ZlcnJpZGVzXG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmluaXRpYWxpemVDb25maWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0cyBhbmQgZW52aXJvbm1lbnQgb3ZlcnJpZGVzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVDb25maWcoKTogUmVxdWlyZWQ8Q29yZUNvbmZpZz4ge1xuICAgIGNvbnN0IGluamVjdGVkQ29uZmlnID0gaW5qZWN0KENPUkVfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgICAgLy8gRW52aXJvbm1lbnQgb3ZlcnJpZGVzXG4gICAgICBhcGlCYXNlVXJsOiB0aGlzLmVudmlyb25tZW50LmFwaUJhc2VVcmwgfHwgREVGQVVMVF9DT05GSUcuYXBpQmFzZVVybCxcbiAgICAgIGVuYWJsZVJlcXVlc3RMb2dnaW5nOiAhdGhpcy5lbnZpcm9ubWVudC5pc1Byb2R1Y3Rpb24sXG4gICAgICAvLyBJbmplY3RlZCBjb25maWcgb3ZlcnJpZGVzXG4gICAgICAuLi5pbmplY3RlZENvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXRDb25maWcoKTogUmVxdWlyZWQ8Q29yZUNvbmZpZz4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gYXQgcnVudGltZVxuICAgKi9cbiAgdXBkYXRlQ29uZmlnKHVwZGF0ZXM6IFBhcnRpYWw8Q29yZUNvbmZpZz4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIC4uLnVwZGF0ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHZhbHVlXG4gICAqL1xuICBnZXQ8SyBleHRlbmRzIGtleW9mIENvcmVDb25maWc+KGtleTogSyk6IENvcmVDb25maWdbS10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZmVhdHVyZSBpcyBlbmFibGVkXG4gICAqL1xuICBpc0ZlYXR1cmVFbmFibGVkKGZlYXR1cmU6IGtleW9mIENvcmVDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29uZmlnW2ZlYXR1cmVdO1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEFQSSBVUkwgZm9yIGEgc3BlY2lmaWMgZW50aXR5XG4gICAqL1xuICBnZXRBcGlVcmwoZW50aXR5TmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnLmFwaUJhc2VVcmw7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSByZXR1cm4gYmFzZVVybDtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtlbnRpdHlOYW1lfWAucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgVVJMIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHByb2Nlc3NpbmdcbiAgICovXG4gIHNob3VsZEV4Y2x1ZGVVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZXhjbHVkZVVybHMuc29tZShcbiAgICAgIGV4Y2x1ZGVQYXR0ZXJuID0+IHVybC5pbmNsdWRlcyhleGNsdWRlUGF0dGVybikgfHwgbmV3IFJlZ0V4cChleGNsdWRlUGF0dGVybikudGVzdCh1cmwpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBtZXRob2Qgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gcHJvY2Vzc2luZ1xuICAgKi9cbiAgc2hvdWxkRXhjbHVkZU1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5leGNsdWRlTWV0aG9kcy5zb21lKFxuICAgICAgZXhjbHVkZU1ldGhvZCA9PiBleGNsdWRlTWV0aG9kLnRvTG93ZXJDYXNlKCkgPT09IG1ldGhvZC50b0xvd2VyQ2FzZSgpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1c3RvbSBoZWFkZXJzIHdpdGggZHluYW1pYyB2YWx1ZXMgcmVzb2x2ZWRcbiAgICovXG4gIGdldEN1c3RvbUhlYWRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcuY3VzdG9tSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBoZWFkZXJzW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZSgpIDogdmFsdWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBjb25maWd1cmF0aW9uIHRvIGRlZmF1bHRzXG4gICAqL1xuICByZXNldENvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuaW5pdGlhbGl6ZUNvbmZpZygpO1xuICB9XG59XG5cbi8vIFByb3ZpZGVyIGZ1bmN0aW9uIGZvciBlYXN5IHNldHVwXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvcmVDb25maWcoY29uZmlnOiBQYXJ0aWFsPENvcmVDb25maWc+ID0ge30pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBDT1JFX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiBjb25maWcsXG4gICAgfSxcbiAgXTtcbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29yZUNvbmZpZyhvdmVycmlkZXM6IFBhcnRpYWw8Q29yZUNvbmZpZz4gPSB7fSk6IENvcmVDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcbn1cbiJdfQ==","export class BaseUseCase {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS51c2UtY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvdXNlLWNhc2VzL2Jhc2UudXNlLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFnQixXQUFXO0NBSWhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUNhc2U8VFJlcXVlc3QgPSB2b2lkLCBUUmVzcG9uc2UgPSB2b2lkPiB7XG4gIGV4ZWN1dGUocmVxdWVzdDogVFJlcXVlc3QpOiBPYnNlcnZhYmxlPFRSZXNwb25zZT47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlVXNlQ2FzZTxUUmVxdWVzdCA9IHZvaWQsIFRSZXNwb25zZSA9IHZvaWQ+XG4gIGltcGxlbWVudHMgVXNlQ2FzZTxUUmVxdWVzdCwgVFJlc3BvbnNlPlxue1xuICBhYnN0cmFjdCBleGVjdXRlKHJlcXVlc3Q6IFRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUUmVzcG9uc2U+O1xufVxuIl19","import { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { BaseUseCase } from './base.use-case';\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 console.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1pbmZyYXN0cnVjdHVyZS9zcmMvbGliL3VzZS1jYXNlcy9jb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsNERBQTREO0FBQzVELE1BQU0sT0FBZ0IsT0FBb0MsU0FBUSxXQUFnQztJQUNoRyxnREFBZ0Q7SUFDdEMsUUFBUSxDQUFDLE9BQWlCO1FBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsaUNBQWlDO0lBQzlDLENBQUM7SUFFUSxPQUFPLENBQUMsT0FBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDakUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQiw4QkFBOEI7WUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVwRSxpREFBaUQ7WUFDakQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNlVXNlQ2FzZSB9IGZyb20gJy4vYmFzZS51c2UtY2FzZSc7XG5cbi8vIE9ubHkgY3JlYXRlIGNvbW1hbmRzIGlmIHlvdSBoYXZlIGNvbXBsZXggdmFsaWRhdGlvbiBsb2dpY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1hbmQ8VFJlcXVlc3QsIFRSZXNwb25zZSA9IHZvaWQ+IGV4dGVuZHMgQmFzZVVzZUNhc2U8VFJlcXVlc3QsIFRSZXNwb25zZT4ge1xuICAvLyBTaW1wbGUgdmFsaWRhdGlvbiAtIG92ZXJyaWRlIG9ubHkgd2hlbiBuZWVkZWRcbiAgcHJvdGVjdGVkIHZhbGlkYXRlKHJlcXVlc3Q6IFRSZXF1ZXN0KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTsgLy8gUmV0dXJuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzXG4gIH1cblxuICBvdmVycmlkZSBleGVjdXRlKHJlcXVlc3Q6IFRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLnZhbGlkYXRlKHJlcXVlc3QpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gKHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBjb2RlOiAnVkFMSURBVElPTl9GQUlMRUQnLFxuICAgICAgICBtZXNzYWdlOiAnVmFsaWRhdGlvbiBmYWlsZWQnLFxuICAgICAgICBlcnJvcnM6IGVycm9ycy5tYXAobXNnID0+ICh7IGNvZGU6ICdWQUxJREFUSU9OJywgbWVzc2FnZTogbXNnIH0pKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUludGVybmFsKHJlcXVlc3QpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgLy8gTG9nIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjb21tYW5kIGV4ZWN1dGlvbjonLCBlcnJvcik7XG5cbiAgICAgICAgLy8gUmUtdGhyb3cgdGhlIGVycm9yIHNvIHRoZSBjYWxsZXIgY2FuIGhhbmRsZSBpdFxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVJbnRlcm5hbChyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPjtcbn1cbiJdfQ==","import { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { BaseUseCase } from './base.use-case';\nexport class Query extends BaseUseCase {\n execute(request) {\n return this.executeInternal(request).pipe(catchError(error => {\n console.error('An error occurred during query execution:', error);\n return throwError(() => error);\n }));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWluZnJhc3RydWN0dXJlL3NyYy9saWIvdXNlLWNhc2VzL3F1ZXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE1BQU0sT0FBZ0IsS0FBMkIsU0FBUSxXQUFnQztJQUM5RSxPQUFPLENBQUMsT0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdkMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNlVXNlQ2FzZSB9IGZyb20gJy4vYmFzZS51c2UtY2FzZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdWVyeTxUUmVxdWVzdCwgVFJlc3BvbnNlPiBleHRlbmRzIEJhc2VVc2VDYXNlPFRSZXF1ZXN0LCBUUmVzcG9uc2U+IHtcbiAgb3ZlcnJpZGUgZXhlY3V0ZShyZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUludGVybmFsKHJlcXVlc3QpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbjonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZXhlY3V0ZUludGVybmFsKHJlcXVlc3Q6IFRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUUmVzcG9uc2U+O1xufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvbnRwbHVzLW5nLWluZnJhc3RydWN0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctaW5mcmFzdHJ1Y3R1cmUvc3JjL2Fjb250cGx1cy1uZy1pbmZyYXN0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["uuidv4","DEFAULT_CONFIG","catchError"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -261,5 +261,23 @@ declare class LoggingService {
|
|
|
261
261
|
static ɵprov: i0.ɵɵInjectableDeclaration<LoggingService>;
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
|
|
265
|
-
|
|
264
|
+
interface UseCase<TRequest = void, TResponse = void> {
|
|
265
|
+
execute(request: TRequest): Observable<TResponse>;
|
|
266
|
+
}
|
|
267
|
+
declare abstract class BaseUseCase<TRequest = void, TResponse = void> implements UseCase<TRequest, TResponse> {
|
|
268
|
+
abstract execute(request: TRequest): Observable<TResponse>;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
declare abstract class Command<TRequest, TResponse = void> extends BaseUseCase<TRequest, TResponse> {
|
|
272
|
+
protected validate(request: TRequest): string[];
|
|
273
|
+
execute(request: TRequest): Observable<TResponse>;
|
|
274
|
+
protected abstract executeInternal(request: TRequest): Observable<TResponse>;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
declare abstract class Query<TRequest, TResponse> extends BaseUseCase<TRequest, TResponse> {
|
|
278
|
+
execute(request: TRequest): Observable<TResponse>;
|
|
279
|
+
protected abstract executeInternal(request: TRequest): Observable<TResponse>;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export { ActiveRequestsTracker, AngularHttpAdapter, BaseHttpRepository, BaseUseCase, CORE_CONFIG, Command, CoreConfigService, CorrelationService, GenericRepository, HTTP_CONTEXT_CONFIG, LoggingService, Query, REPOSITORY_CONFIG, RepositoryFactory, SHOW_NOTIFICATIONS, SKIP_NOTIFICATION, SearchableGenericRepository, TOKEN_PROVIDER, UserRepository, apiInterceptor, createCoreConfig, createHttpContextConfig, customUrl, httpContextInterceptor, provideCoreConfig, provideHttpContext, skipContextHeaders, spinnerInterceptor, withCustomHeaders, withoutSpinner };
|
|
283
|
+
export type { CoreConfig, HttpContextConfig, HttpErrorLog, HttpRequestLog, ITokenProvider, UseCase };
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acontplus/ng-infrastructure",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Acontplus Angular Infrastructure library for managing HTTP interceptors and repositories.",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"tslib": "^2.3.0"
|
|
7
7
|
},
|
|
8
8
|
"peerDependencies": {
|
|
9
|
-
"@acontplus/core": "^1.0.
|
|
10
|
-
"@acontplus/ng-config": "^1.0.
|
|
9
|
+
"@acontplus/core": "^1.0.14",
|
|
10
|
+
"@acontplus/ng-config": "^1.0.2",
|
|
11
11
|
"@acontplus/ng-notifications": "^1.0.7",
|
|
12
12
|
"@acontplus/ng-components": "^1.0.11",
|
|
13
13
|
"@angular/common": "^20.3.2",
|