ng-easycommerce-v18 0.3.18-beta.2 → 0.3.19-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +2 -5
  2. package/assets/ec-i18n/en.json +1 -0
  3. package/assets/ec-i18n/es.json +1 -0
  4. package/esm2022/lib/constants/api.constants.service.mjs +15 -19
  5. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +2 -4
  6. package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +37 -9
  7. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +21 -31
  8. package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +54 -6
  9. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +2 -2
  10. package/esm2022/lib/ec-services/cart.service.mjs +22 -4
  11. package/esm2022/lib/ec-services/checkout.service.mjs +2 -4
  12. package/esm2022/lib/ec-services/index.mjs +1 -3
  13. package/esm2022/lib/ec-services/product-detail.service.mjs +11 -1
  14. package/esm2022/lib/interceptors/index.mjs +1 -2
  15. package/esm2022/lib/interfaces/environment.mjs +1 -1
  16. package/esm2022/lib/interfaces/index.mjs +1 -2
  17. package/esm2022/lib/interfaces/product.mjs +1 -1
  18. package/esm2022/lib/providers/index.mjs +1 -2
  19. package/fesm2022/ng-easycommerce-v18.mjs +223 -541
  20. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  21. package/lib/constants/api.constants.service.d.ts +0 -1
  22. package/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.d.ts +1 -1
  23. package/lib/ec-components/product-ec/product-ec.component.d.ts +4 -0
  24. package/lib/ec-services/cart.service.d.ts +1 -1
  25. package/lib/ec-services/index.d.ts +0 -2
  26. package/lib/interceptors/index.d.ts +0 -1
  27. package/lib/interfaces/environment.d.ts +0 -1
  28. package/lib/interfaces/index.d.ts +0 -1
  29. package/lib/interfaces/product.d.ts +6 -0
  30. package/lib/providers/index.d.ts +0 -1
  31. package/package.json +1 -1
  32. package/esm2022/lib/ec-services/base-api.service.mjs +0 -148
  33. package/esm2022/lib/ec-services/runtime-config.service.mjs +0 -190
  34. package/esm2022/lib/interceptors/runtime-config.interceptor.mjs +0 -41
  35. package/esm2022/lib/interfaces/runtime-config.mjs +0 -2
  36. package/esm2022/lib/providers/provideRuntimeConfig.mjs +0 -42
  37. package/lib/ec-services/base-api.service.d.ts +0 -64
  38. package/lib/ec-services/runtime-config.service.d.ts +0 -63
  39. package/lib/interceptors/runtime-config.interceptor.d.ts +0 -7
  40. package/lib/interfaces/runtime-config.d.ts +0 -22
  41. package/lib/providers/provideRuntimeConfig.d.ts +0 -13
@@ -7,7 +7,6 @@ import * as i0 from "@angular/core";
7
7
  export declare class ApiConstantsService {
8
8
  private _localStorage;
9
9
  private _translate;
10
- private _runtimeConfig;
11
10
  /**
12
11
  * Contiene los datos provisto por el frontend en el archivo environment.ts
13
12
  */
@@ -16,8 +16,8 @@ export declare class CartItemEcComponent implements OnInit {
16
16
  isQuantityUpdating: boolean;
17
17
  ngOnInit(): void;
18
18
  updateQuantity(stock: number): void;
19
- less(stock: number, value?: number): void;
20
19
  plus(stock: number, value?: number): void;
20
+ less(stock: number, value?: number): void;
21
21
  deleteCartItem(): void;
22
22
  getVariants(product: any): any;
23
23
  createDiscountMessage(saleprice: number, price: number): string;
@@ -50,6 +50,10 @@ export declare class ProductEcComponent implements OnInit {
50
50
  plus(stock?: number, multipleQuantity?: number): void;
51
51
  less(multipleQuantity?: number): void;
52
52
  addToCart(): void;
53
+ /**
54
+ * Valida las restricciones de cantidad del producto
55
+ */
56
+ private validateQuantity;
53
57
  checkStock(stock: number): void;
54
58
  onQuantityChange(event: Event): void;
55
59
  static ɵfac: i0.ɵɵFactoryDeclaration<ProductEcComponent, never>;
@@ -115,7 +115,7 @@ export declare class CartService {
115
115
  * @param item el item a actualizar.
116
116
  * @param quantity la cantidad nueva.
117
117
  */
118
- updateItemQuantity(item: CartItem, quantity: number): void;
118
+ updateItemQuantity(item: CartItem, quantity: number): boolean;
119
119
  /**
120
120
  * Maneja el error en caso de que no se pueda agregar al carrito el producto.
121
121
  * @param err
@@ -24,5 +24,3 @@ export * from './order-utility.service';
24
24
  export * from './payment.service';
25
25
  export * from './test.service';
26
26
  export * from './orders.service';
27
- export * from './runtime-config.service';
28
- export * from './base-api.service';
@@ -1,2 +1 @@
1
1
  export * from './auth.interceptor';
2
- export * from './runtime-config.interceptor';
@@ -4,5 +4,4 @@ export interface Environment {
4
4
  frontendUrl?: string;
5
5
  locale: string;
6
6
  channel: string;
7
- appEnv?: string;
8
7
  }
@@ -16,4 +16,3 @@ export * from './coupon';
16
16
  export * from './step';
17
17
  export * from './checkout';
18
18
  export * from './faqs';
19
- export * from './runtime-config';
@@ -5,6 +5,9 @@ export interface OptionValue {
5
5
  name: string;
6
6
  description?: string;
7
7
  selected?: boolean;
8
+ maximumItemsQuantity?: number;
9
+ minimumItemsQuantity?: number;
10
+ multipleQuantity?: number;
8
11
  }
9
12
  export interface Options {
10
13
  code: string;
@@ -34,6 +37,9 @@ export interface Product {
34
37
  productWithUniqueVariant?: Product[];
35
38
  stock?: number;
36
39
  variant_id?: number;
40
+ maximumItemsQuantity?: number;
41
+ minimumItemsQuantity?: number;
42
+ multipleQuantity?: number;
37
43
  }
38
44
  export interface ProductToCartItem {
39
45
  productCode?: string;
@@ -1,2 +1 @@
1
1
  export * from './provideEnvironment';
2
- export * from './provideRuntimeConfig';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-easycommerce-v18",
3
- "version": "0.3.18-beta.2",
3
+ "version": "0.3.19-beta.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"
@@ -1,148 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { HttpHeaders } from '@angular/common/http';
3
- import { switchMap } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common/http";
6
- import * as i2 from "./runtime-config.service";
7
- /**
8
- * Servicio base para realizar peticiones HTTP usando configuración dinámica
9
- * Todos los servicios de la aplicación deben extender este servicio o usar sus métodos
10
- */
11
- export class BaseApiService {
12
- http;
13
- runtimeConfigService;
14
- constructor(http, runtimeConfigService) {
15
- this.http = http;
16
- this.runtimeConfigService = runtimeConfigService;
17
- }
18
- /**
19
- * Construye una URL completa usando la API_URL del runtime
20
- */
21
- buildApiUrl(endpoint) {
22
- return this.runtimeConfigService.buildApiUrl(endpoint);
23
- }
24
- /**
25
- * Obtiene headers comunes que incluyen información del runtime
26
- */
27
- getCommonHeaders() {
28
- const config = this.runtimeConfigService.getConfig();
29
- let headers = new HttpHeaders({
30
- 'Content-Type': 'application/json'
31
- });
32
- if (config) {
33
- headers = headers
34
- .set('X-Channel', config.channel)
35
- .set('X-Locale', config.locale)
36
- .set('X-Environment', config.appEnv);
37
- }
38
- return headers;
39
- }
40
- /**
41
- * Método GET genérico
42
- */
43
- get(endpoint, options = {}) {
44
- const url = this.buildApiUrl(endpoint);
45
- const headers = this.mergeHeaders(options.headers);
46
- return this.http.get(url, {
47
- ...options,
48
- headers
49
- });
50
- }
51
- /**
52
- * Método POST genérico
53
- */
54
- post(endpoint, data, options = {}) {
55
- const url = this.buildApiUrl(endpoint);
56
- const headers = this.mergeHeaders(options.headers);
57
- return this.http.post(url, data, {
58
- ...options,
59
- headers
60
- });
61
- }
62
- /**
63
- * Método PUT genérico
64
- */
65
- put(endpoint, data, options = {}) {
66
- const url = this.buildApiUrl(endpoint);
67
- const headers = this.mergeHeaders(options.headers);
68
- return this.http.put(url, data, {
69
- ...options,
70
- headers
71
- });
72
- }
73
- /**
74
- * Método PATCH genérico
75
- */
76
- patch(endpoint, data, options = {}) {
77
- const url = this.buildApiUrl(endpoint);
78
- const headers = this.mergeHeaders(options.headers);
79
- return this.http.patch(url, data, {
80
- ...options,
81
- headers
82
- });
83
- }
84
- /**
85
- * Método DELETE genérico
86
- */
87
- delete(endpoint, options = {}) {
88
- const url = this.buildApiUrl(endpoint);
89
- const headers = this.mergeHeaders(options.headers);
90
- return this.http.delete(url, {
91
- ...options,
92
- headers
93
- });
94
- }
95
- /**
96
- * Método para peticiones que necesitan esperar a que la config esté cargada
97
- */
98
- getWithConfig(endpoint, options = {}) {
99
- return this.runtimeConfigService.config$.pipe(switchMap(config => {
100
- if (!config) {
101
- throw new Error('Runtime config not loaded');
102
- }
103
- return this.get(endpoint, options);
104
- }));
105
- }
106
- /**
107
- * Método para POST que necesitan esperar a que la config esté cargada
108
- */
109
- postWithConfig(endpoint, data, options = {}) {
110
- return this.runtimeConfigService.config$.pipe(switchMap(config => {
111
- if (!config) {
112
- throw new Error('Runtime config not loaded');
113
- }
114
- return this.post(endpoint, data, options);
115
- }));
116
- }
117
- /**
118
- * Combina headers personalizados con los headers comunes
119
- */
120
- mergeHeaders(customHeaders) {
121
- let headers = this.getCommonHeaders();
122
- if (customHeaders) {
123
- if (customHeaders instanceof HttpHeaders) {
124
- customHeaders.keys().forEach(key => {
125
- const values = customHeaders.getAll(key);
126
- if (values) {
127
- headers = headers.set(key, values);
128
- }
129
- });
130
- }
131
- else {
132
- Object.keys(customHeaders).forEach(key => {
133
- headers = headers.set(key, customHeaders[key]);
134
- });
135
- }
136
- }
137
- return headers;
138
- }
139
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseApiService, deps: [{ token: i1.HttpClient }, { token: i2.RuntimeConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
140
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseApiService, providedIn: 'root' });
141
- }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BaseApiService, decorators: [{
143
- type: Injectable,
144
- args: [{
145
- providedIn: 'root'
146
- }]
147
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.RuntimeConfigService }] });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9iYXNlLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFdBQVcsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFTN0M7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFHYjtJQUNBO0lBRlosWUFDWSxJQUFnQixFQUNoQixvQkFBMEM7UUFEMUMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO0lBQ25ELENBQUM7SUFFSjs7T0FFRztJQUNPLFdBQVcsQ0FBQyxRQUFnQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ08sZ0JBQWdCO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyRCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM1QixjQUFjLEVBQUUsa0JBQWtCO1NBQ25DLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsT0FBTztpQkFDZCxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7aUJBQ2hDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDOUIsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMs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SlUsY0FBYzs0R0FBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUnVudGltZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3J1bnRpbWUtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcGlSZXF1ZXN0T3B0aW9ucyB7XHJcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwgeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xyXG4gIHBhcmFtcz86IEh0dHBQYXJhbXMgfCB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcclxuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogU2VydmljaW8gYmFzZSBwYXJhIHJlYWxpemFyIHBldGljaW9uZXMgSFRUUCB1c2FuZG8gY29uZmlndXJhY2nDs24gZGluw6FtaWNhXHJcbiAqIFRvZG9zIGxvcyBzZXJ2aWNpb3MgZGUgbGEgYXBsaWNhY2nDs24gZGViZW4gZXh0ZW5kZXIgZXN0ZSBzZXJ2aWNpbyBvIHVzYXIgc3VzIG3DqXRvZG9zXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlQXBpU2VydmljZSB7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByb3RlY3RlZCBydW50aW1lQ29uZmlnU2VydmljZTogUnVudGltZUNvbmZpZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnV5ZSB1bmEgVVJMIGNvbXBsZXRhIHVzYW5kbyBsYSBBUElfVVJMIGRlbCBydW50aW1lXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGJ1aWxkQXBpVXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucnVudGltZUNvbmZpZ1NlcnZpY2UuYnVpbGRBcGlVcmwoZW5kcG9pbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBoZWFkZXJzIGNvbXVuZXMgcXVlIGluY2x1eWVuIGluZm9ybWFjacOzbiBkZWwgcnVudGltZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRDb21tb25IZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMucnVudGltZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnNcclxuICAgICAgICAuc2V0KCdYLUNoYW5uZWwnLCBjb25maWcuY2hhbm5lbClcclxuICAgICAgICAuc2V0KCdYLUxvY2FsZScsIGNvbmZpZy5sb2NhbGUpXHJcbiAgICAgICAgLnNldCgnWC1FbnZpcm9ubWVudCcsIGNvbmZpZy5hcHBFbnYpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBHRVQgZ2Vuw6lyaWNvXHJcbiAgICovXHJcbiAgZ2V0PFQ+KGVuZHBvaW50OiBzdHJpbmcsIG9wdGlvbnM6IEFwaVJlcXVlc3RPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRBcGlVcmwoZW5kcG9pbnQpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMubWVyZ2VIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHVybCwge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gUE9TVCBnZW7DqXJpY29cclxuICAgKi9cclxuICBwb3N0PFQ+KGVuZHBvaW50OiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogQXBpUmVxdWVzdE9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZEFwaVVybChlbmRwb2ludCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5tZXJnZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odXJsLCBkYXRhLCB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIGhlYWRlcnNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBQVVQgZ2Vuw6lyaWNvXHJcbiAgICovXHJcbiAgcHV0PFQ+KGVuZHBvaW50OiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogQXBpUmVxdWVzdE9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZEFwaVVybChlbmRwb2ludCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5tZXJnZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPih1cmwsIGRhdGEsIHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgaGVhZGVyc1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIFBBVENIIGdlbsOpcmljb1xyXG4gICAqL1xyXG4gIHBhdGNoPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogQXBpUmVxdWVzdE9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZEFwaVVybChlbmRwb2ludCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5tZXJnZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFQ+KHVybCwgZGF0YSwge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gREVMRVRFIGdlbsOpcmljb1xyXG4gICAqL1xyXG4gIGRlbGV0ZTxUPihlbmRwb2ludDogc3RyaW5nLCBvcHRpb25zOiBBcGlSZXF1ZXN0T3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkQXBpVXJsKGVuZHBvaW50KTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLm1lcmdlSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFQ+KHVybCwge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcGFyYSBwZXRpY2lvbmVzIHF1ZSBuZWNlc2l0YW4gZXNwZXJhciBhIHF1ZSBsYSBjb25maWcgZXN0w6kgY2FyZ2FkYVxyXG4gICAqL1xyXG4gIGdldFdpdGhDb25maWc8VD4oZW5kcG9pbnQ6IHN0cmluZywgb3B0aW9uczogQXBpUmVxdWVzdE9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMucnVudGltZUNvbmZpZ1NlcnZpY2UuY29uZmlnJC5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoY29uZmlnID0+IHtcclxuICAgICAgICBpZiAoIWNvbmZpZykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW50aW1lIGNvbmZpZyBub3QgbG9hZGVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldDxUPihlbmRwb2ludCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBwYXJhIFBPU1QgcXVlIG5lY2VzaXRhbiBlc3BlcmFyIGEgcXVlIGxhIGNvbmZpZyBlc3TDqSBjYXJnYWRhXHJcbiAgICovXHJcbiAgcG9zdFdpdGhDb25maWc8VD4oZW5kcG9pbnQ6IHN0cmluZywgZGF0YTogYW55LCBvcHRpb25zOiBBcGlSZXF1ZXN0T3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lQ29uZmlnU2VydmljZS5jb25maWckLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcChjb25maWcgPT4ge1xyXG4gICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bnRpbWUgY29uZmlnIG5vdCBsb2FkZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdDxUPihlbmRwb2ludCwgZGF0YSwgb3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tYmluYSBoZWFkZXJzIHBlcnNvbmFsaXphZG9zIGNvbiBsb3MgaGVhZGVycyBjb211bmVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtZXJnZUhlYWRlcnMoY3VzdG9tSGVhZGVycz86IEh0dHBIZWFkZXJzIHwgeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9KTogSHR0cEhlYWRlcnMge1xyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldENvbW1vbkhlYWRlcnMoKTtcclxuXHJcbiAgICBpZiAoY3VzdG9tSGVhZGVycykge1xyXG4gICAgICBpZiAoY3VzdG9tSGVhZGVycyBpbnN0YW5jZW9mIEh0dHBIZWFkZXJzKSB7XHJcbiAgICAgICAgY3VzdG9tSGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gY3VzdG9tSGVhZGVycy5nZXRBbGwoa2V5KTtcclxuICAgICAgICAgIGlmICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWVzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCBjdXN0b21IZWFkZXJzW2tleV0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgfVxyXG59Il19
@@ -1,190 +0,0 @@
1
- import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
2
- import { isPlatformBrowser } from '@angular/common';
3
- import { of, BehaviorSubject } from 'rxjs';
4
- import { catchError, tap, shareReplay } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common/http";
7
- export class RuntimeConfigService {
8
- platformId;
9
- http;
10
- configSubject = new BehaviorSubject(null);
11
- config$ = this.configSubject.asObservable();
12
- _config = null;
13
- _loadPromise = null;
14
- _isLoaded = false;
15
- constructor(platformId, http) {
16
- this.platformId = platformId;
17
- this.http = http;
18
- // En SSR o browser, intentar cargar inmediatamente desde window si está disponible
19
- if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
20
- this._config = window.__RUNTIME_CONFIG__;
21
- this._isLoaded = true;
22
- this.configSubject.next(this._config);
23
- }
24
- }
25
- /**
26
- * Inicialización única - llamada por APP_INITIALIZER
27
- * Garantiza que la configuración se carga solo una vez al inicio
28
- */
29
- initialize() {
30
- if (this._isLoaded && this._config) {
31
- return Promise.resolve(this._config);
32
- }
33
- return new Promise((resolve, reject) => {
34
- this.loadConfig().subscribe({
35
- next: (config) => {
36
- this._isLoaded = true;
37
- resolve(config);
38
- },
39
- error: (error) => {
40
- reject(error);
41
- }
42
- });
43
- });
44
- }
45
- /**
46
- * Carga la configuración en runtime (optimizada para una sola carga)
47
- * - En SSR: Lee desde el objeto window inyectado por el servidor
48
- * - En Browser: Hace petición HTTP a /runtime-config.json (solo si no está en window)
49
- */
50
- loadConfig() {
51
- // Si ya tenemos la config cargada, la devolvemos inmediatamente
52
- if (this._isLoaded && this._config) {
53
- return of(this._config);
54
- }
55
- // Si ya hay una carga en progreso, reutilizamos esa petición
56
- if (this._loadPromise) {
57
- return this._loadPromise;
58
- }
59
- if (isPlatformBrowser(this.platformId)) {
60
- // En el navegador, primero intentamos obtener la config desde window
61
- if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
62
- this._config = window.__RUNTIME_CONFIG__;
63
- this._isLoaded = true;
64
- this.configSubject.next(this._config);
65
- return of(this._config);
66
- }
67
- // Si no está en window, hacemos petición HTTP (solo una vez)
68
- this._loadPromise = this.http.get('/runtime-config.json').pipe(tap(config => {
69
- this._config = config;
70
- this._isLoaded = true;
71
- this.configSubject.next(config);
72
- // Guardamos en window para siguientes accesos
73
- if (typeof window !== 'undefined') {
74
- window.__RUNTIME_CONFIG__ = config;
75
- }
76
- }), shareReplay(1), // Cache la respuesta para múltiples suscripciones
77
- catchError(error => {
78
- console.error('Error loading runtime config:', error);
79
- // Fallback config si falla la carga
80
- const fallbackConfig = {
81
- apiUrl: 'https://elden-preprod.backend.easycommerce.com.ar/',
82
- appEnv: 'preprod',
83
- production: false,
84
- locale: 'es_AR',
85
- channel: 'minorista'
86
- };
87
- this._config = fallbackConfig;
88
- this._isLoaded = true;
89
- this.configSubject.next(fallbackConfig);
90
- return of(fallbackConfig);
91
- }));
92
- return this._loadPromise;
93
- }
94
- else {
95
- // En SSR, leemos desde window que fue inyectado por el servidor
96
- if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
97
- this._config = window.__RUNTIME_CONFIG__;
98
- this._isLoaded = true;
99
- this.configSubject.next(this._config);
100
- return of(this._config);
101
- }
102
- // Fallback para SSR si no hay config inyectada
103
- // En el servidor, las variables de entorno se configuran desde el server.ts
104
- const fallbackConfig = {
105
- apiUrl: 'https://elden-preprod.backend.easycommerce.com.ar/',
106
- appEnv: 'preprod',
107
- production: false,
108
- locale: 'es_AR',
109
- channel: 'minorista'
110
- };
111
- this._config = fallbackConfig;
112
- this._isLoaded = true;
113
- this.configSubject.next(fallbackConfig);
114
- return of(fallbackConfig);
115
- }
116
- }
117
- /**
118
- * Obtiene la configuración actual (síncrono)
119
- */
120
- getConfig() {
121
- return this._config;
122
- }
123
- /**
124
- * Obtiene la API URL actual
125
- */
126
- getApiUrl() {
127
- return this._config?.apiUrl || 'https://elden-preprod.backend.easycommerce.com.ar/';
128
- }
129
- /**
130
- * Obtiene la Frontend URL actual
131
- */
132
- getFrontendUrl() {
133
- return this._config?.frontendUrl;
134
- }
135
- /**
136
- * Obtiene el entorno actual
137
- */
138
- getAppEnv() {
139
- return this._config?.appEnv || 'development';
140
- }
141
- /**
142
- * Verifica si estamos en producción
143
- */
144
- isProduction() {
145
- return this._config?.production || false;
146
- }
147
- /**
148
- * Obtiene el locale actual
149
- */
150
- getLocale() {
151
- return this._config?.locale || 'es_AR';
152
- }
153
- /**
154
- * Obtiene el canal actual
155
- */
156
- getChannel() {
157
- return this._config?.channel || 'minorista';
158
- }
159
- /**
160
- * Método helper para construir URLs de API
161
- */
162
- buildApiUrl(endpoint) {
163
- const apiUrl = this.getApiUrl();
164
- const cleanEndpoint = endpoint.startsWith('/') ? endpoint.slice(1) : endpoint;
165
- return `${apiUrl}${cleanEndpoint}`;
166
- }
167
- /**
168
- * Método helper para construir URLs del frontend
169
- */
170
- buildFrontendUrl(path) {
171
- const frontendUrl = this.getFrontendUrl();
172
- if (!frontendUrl) {
173
- return path;
174
- }
175
- const cleanPath = path.startsWith('/') ? path.slice(1) : path;
176
- return `${frontendUrl}${cleanPath}`;
177
- }
178
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, deps: [{ token: PLATFORM_ID }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
179
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, providedIn: 'root' });
180
- }
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, decorators: [{
182
- type: Injectable,
183
- args: [{
184
- providedIn: 'root'
185
- }]
186
- }], ctorParameters: () => [{ type: Object, decorators: [{
187
- type: Inject,
188
- args: [PLATFORM_ID]
189
- }] }, { type: i1.HttpClient }] });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUTlELE1BQU0sT0FBTyxvQkFBb0I7SUFTQTtJQUNyQjtJQVRGLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBdUIsSUFBSSxDQUFDLENBQUM7SUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0MsT0FBTyxHQUF5QixJQUFJLENBQUM7SUFDckMsWUFBWSxHQUFxQyxJQUFJLENBQUM7SUFDdEQsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUUxQixZQUMrQixVQUFrQixFQUN2QyxJQUFnQjtRQURLLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUV4QixtRkFBbUY7UUFDbkYsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUks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Q0FBQztZQUNqQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUQsT0FBTyxHQUFHLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxDQUFDO3dHQS9MVSxvQkFBb0Isa0JBU3JCLFdBQVc7NEdBVFYsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVVJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJ1bnRpbWVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3J1bnRpbWUtY29uZmlnJztcclxuXHJcbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uZmlnU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSdW50aW1lQ29uZmlnIHwgbnVsbD4obnVsbCk7XHJcbiAgcHVibGljIGNvbmZpZyQgPSB0aGlzLmNvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgXHJcbiAgcHJpdmF0ZSBfY29uZmlnOiBSdW50aW1lQ29uZmlnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbG9hZFByb21pc2U6IE9ic2VydmFibGU8UnVudGltZUNvbmZpZz4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9pc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XHJcbiAgKSB7XHJcbiAgICAvLyBFbiBTU1IgbyBicm93c2VyLCBpbnRlbnRhciBjYXJnYXIgaW5tZWRpYXRhbWVudGUgZGVzZGUgd2luZG93IHNpIGVzdMOhIGRpc3BvbmlibGVcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICB0aGlzLl9jb25maWcgPSB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fO1xyXG4gICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuX2NvbmZpZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmljaWFsaXphY2nDs24gw7puaWNhIC0gbGxhbWFkYSBwb3IgQVBQX0lOSVRJQUxJWkVSXHJcbiAgICogR2FyYW50aXphIHF1ZSBsYSBjb25maWd1cmFjacOzbiBzZSBjYXJnYSBzb2xvIHVuYSB2ZXogYWwgaW5pY2lvXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPFJ1bnRpbWVDb25maWc+IHtcclxuICAgIGlmICh0aGlzLl9pc0xvYWRlZCAmJiB0aGlzLl9jb25maWcpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZENvbmZpZygpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGNvbmZpZzogUnVudGltZUNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzb2x2ZShjb25maWcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYXJnYSBsYSBjb25maWd1cmFjacOzbiBlbiBydW50aW1lIChvcHRpbWl6YWRhIHBhcmEgdW5hIHNvbGEgY2FyZ2EpXHJcbiAgICogLSBFbiBTU1I6IExlZSBkZXNkZSBlbCBvYmpldG8gd2luZG93IGlueWVjdGFkbyBwb3IgZWwgc2Vydmlkb3JcclxuICAgKiAtIEVuIEJyb3dzZXI6IEhhY2UgcGV0aWNpw7NuIEhUVFAgYSAvcnVudGltZS1jb25maWcuanNvbiAoc29sbyBzaSBubyBlc3TDoSBlbiB3aW5kb3cpXHJcbiAgICovXHJcbiAgbG9hZENvbmZpZygpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb25maWc+IHtcclxuICAgIC8vIFNpIHlhIHRlbmVtb3MgbGEgY29uZmlnIGNhcmdhZGEsIGxhIGRldm9sdmVtb3MgaW5tZWRpYXRhbWVudGVcclxuICAgIGlmICh0aGlzLl9pc0xvYWRlZCAmJiB0aGlzLl9jb25maWcpIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTaSB5YSBoYXkgdW5hIGNhcmdhIGVuIHByb2dyZXNvLCByZXV0aWxpemFtb3MgZXNhIHBldGljacOzblxyXG4gICAgaWYgKHRoaXMuX2xvYWRQcm9taXNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkUHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICAvLyBFbiBlbCBuYXZlZ2Fkb3IsIHByaW1lcm8gaW50ZW50YW1vcyBvYnRlbmVyIGxhIGNvbmZpZyBkZXNkZSB3aW5kb3dcclxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gJiYgIXRoaXMuX2lzTG9hZGVkKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXztcclxuICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5fY29uZmlnKTtcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5fY29uZmlnIGFzIFJ1bnRpbWVDb25maWcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaSBubyBlc3TDoSBlbiB3aW5kb3csIGhhY2Vtb3MgcGV0aWNpw7NuIEhUVFAgKHNvbG8gdW5hIHZleilcclxuICAgICAgdGhpcy5fbG9hZFByb21pc2UgPSB0aGlzLmh0dHAuZ2V0PFJ1bnRpbWVDb25maWc+KCcvcnVudGltZS1jb25maWcuanNvbicpLnBpcGUoXHJcbiAgICAgICAgdGFwKGNvbmZpZyA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dChjb25maWcpO1xyXG4gICAgICAgICAgLy8gR3VhcmRhbW9zIGVuIHdpbmRvdyBwYXJhIHNpZ3VpZW50ZXMgYWNjZXNvc1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gPSBjb25maWc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksIC8vIENhY2hlIGxhIHJlc3B1ZXN0YSBwYXJhIG3Dumx0aXBsZXMgc3VzY3JpcGNpb25lc1xyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBydW50aW1lIGNvbmZpZzonLCBlcnJvcik7XHJcbiAgICAgICAgICAvLyBGYWxsYmFjayBjb25maWcgc2kgZmFsbGEgbGEgY2FyZ2FcclxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnOiBSdW50aW1lQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhcGlVcmw6ICdodHRwczovL2VsZGVuLXByZXByb2QuYmFja2VuZC5lYXN5Y29tbWVyY2UuY29tLmFyLycsXHJcbiAgICAgICAgICAgIGFwcEVudjogJ3ByZXByb2QnLFxyXG4gICAgICAgICAgICBwcm9kdWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgbG9jYWxlOiAnZXNfQVInLFxyXG4gICAgICAgICAgICBjaGFubmVsOiAnbWlub3Jpc3RhJ1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IGZhbGxiYWNrQ29uZmlnO1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKGZhbGxiYWNrQ29uZmlnKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvYWRQcm9taXNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRW4gU1NSLCBsZWVtb3MgZGVzZGUgd2luZG93IHF1ZSBmdWUgaW55ZWN0YWRvIHBvciBlbCBzZXJ2aWRvclxyXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXyAmJiAhdGhpcy5faXNMb2FkZWQpIHtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fO1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLl9jb25maWcpO1xyXG4gICAgICAgIHJldHVybiBvZih0aGlzLl9jb25maWcgYXMgUnVudGltZUNvbmZpZyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZhbGxiYWNrIHBhcmEgU1NSIHNpIG5vIGhheSBjb25maWcgaW55ZWN0YWRhXHJcbiAgICAgIC8vIEVuIGVsIHNlcnZpZG9yLCBsYXMgdmFyaWFibGVzIGRlIGVudG9ybm8gc2UgY29uZmlndXJhbiBkZXNkZSBlbCBzZXJ2ZXIudHNcclxuICAgICAgY29uc3QgZmFsbGJhY2tDb25maWc6IFJ1bnRpbWVDb25maWcgPSB7XHJcbiAgICAgICAgYXBpVXJsOiAnaHR0cHM6Ly9lbGRlbi1wcmVwcm9kLmJhY2tlbmQuZWFzeWNvbW1lcmNlLmNvbS5hci8nLFxyXG4gICAgICAgIGFwcEVudjogJ3ByZXByb2QnLFxyXG4gICAgICAgIHByb2R1Y3Rpb246IGZhbHNlLFxyXG4gICAgICAgIGxvY2FsZTogJ2VzX0FSJyxcclxuICAgICAgICBjaGFubmVsOiAnbWlub3Jpc3RhJ1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgdGhpcy5fY29uZmlnID0gZmFsbGJhY2tDb25maWc7XHJcbiAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICByZXR1cm4gb2YoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBhY3R1YWwgKHPDrW5jcm9ubylcclxuICAgKi9cclxuICBnZXRDb25maWcoKTogUnVudGltZUNvbmZpZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgbGEgQVBJIFVSTCBhY3R1YWxcclxuICAgKi9cclxuICBnZXRBcGlVcmwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmFwaVVybCB8fCAnaHR0cHM6Ly9lbGRlbi1wcmVwcm9kLmJhY2tlbmQuZWFzeWNvbW1lcmNlLmNvbS5hci8nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBGcm9udGVuZCBVUkwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0RnJvbnRlbmRVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmZyb250ZW5kVXJsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBlbnRvcm5vIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldEFwcEVudigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uYXBwRW52IHx8ICdkZXZlbG9wbWVudCc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZmljYSBzaSBlc3RhbW9zIGVuIHByb2R1Y2Npw7NuXHJcbiAgICovXHJcbiAgaXNQcm9kdWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8ucHJvZHVjdGlvbiB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgbG9jYWxlIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8ubG9jYWxlIHx8ICdlc19BUic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGVsIGNhbmFsIGFjdHVhbFxyXG4gICAqL1xyXG4gIGdldENoYW5uZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc/LmNoYW5uZWwgfHwgJ21pbm9yaXN0YSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGhlbHBlciBwYXJhIGNvbnN0cnVpciBVUkxzIGRlIEFQSVxyXG4gICAqL1xyXG4gIGJ1aWxkQXBpVXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5nZXRBcGlVcmwoKTtcclxuICAgIGNvbnN0IGNsZWFuRW5kcG9pbnQgPSBlbmRwb2ludC5zdGFydHNXaXRoKCcvJykgPyBlbmRwb2ludC5zbGljZSgxKSA6IGVuZHBvaW50O1xyXG4gICAgcmV0dXJuIGAke2FwaVVybH0ke2NsZWFuRW5kcG9pbnR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gaGVscGVyIHBhcmEgY29uc3RydWlyIFVSTHMgZGVsIGZyb250ZW5kXHJcbiAgICovXHJcbiAgYnVpbGRGcm9udGVuZFVybChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZnJvbnRlbmRVcmwgPSB0aGlzLmdldEZyb250ZW5kVXJsKCk7XHJcbiAgICBpZiAoIWZyb250ZW5kVXJsKSB7XHJcbiAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xlYW5QYXRoID0gcGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoLnNsaWNlKDEpIDogcGF0aDtcclxuICAgIHJldHVybiBgJHtmcm9udGVuZFVybH0ke2NsZWFuUGF0aH1gO1xyXG4gIH1cclxufSJdfQ==
@@ -1,41 +0,0 @@
1
- import { inject } from '@angular/core';
2
- import { RuntimeConfigService } from '../ec-services/runtime-config.service';
3
- import { switchMap, take, filter } from 'rxjs/operators';
4
- /**
5
- * Interceptor que garantiza que las peticiones HTTP no se hagan hasta que
6
- * el runtime config esté completamente cargado
7
- * Evita que se hagan peticiones con URLs incorrectas
8
- */
9
- export const runtimeConfigInterceptor = (req, next) => {
10
- const runtimeConfigService = inject(RuntimeConfigService);
11
- // Si la petición es para obtener el runtime config, la dejamos pasar inmediatamente
12
- if (req.url.includes('/runtime-config.json')) {
13
- return next(req);
14
- }
15
- // Si la petición es para assets estáticos, la dejamos pasar
16
- if (req.url.includes('/assets/') || req.url.includes('.json') || req.url.includes('.css') || req.url.includes('.js')) {
17
- return next(req);
18
- }
19
- // Para las demás peticiones, esperamos a que el config esté listo
20
- return runtimeConfigService.config$.pipe(filter(config => config !== null), // Esperamos hasta que haya config
21
- take(1), // Solo tomamos el primer valor válido
22
- switchMap(config => {
23
- // Si la URL ya es completa (empieza con http), la dejamos como está
24
- if (req.url.startsWith('http')) {
25
- return next(req);
26
- }
27
- // Si es una URL relativa que debería ir al API, la completamos
28
- if (req.url.startsWith('/api/') || req.url.startsWith('api/')) {
29
- const apiUrl = config.apiUrl;
30
- const cleanUrl = req.url.startsWith('/') ? req.url.substring(1) : req.url;
31
- const fullUrl = `${apiUrl}${cleanUrl}`;
32
- const modifiedReq = req.clone({
33
- url: fullUrl
34
- });
35
- return next(modifiedReq);
36
- }
37
- // Para otras URLs, las dejamos pasar sin modificar
38
- return next(req);
39
- }));
40
- };
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvaW50ZXJjZXB0b3JzL3J1bnRpbWUtY29uZmlnLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFzQixDQUFDLEdBQXlCLEVBQUUsSUFBbUIsRUFBRSxFQUFFO0lBQzVHLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFMUQsb0ZBQW9GO0lBQ3BGLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JILE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsa0NBQWtDO0lBQ3JFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxzQ0FBc0M7SUFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pCLG9FQUFvRTtRQUNwRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUVELCtEQUErRDtRQUMvRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTyxDQUFDLE1BQU0sQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDMUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFFdkMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsR0FBRyxFQUFFLE9BQU87YUFDYixDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsbURBQW1EO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiwgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyRm4gfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSdW50aW1lQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2VjLXNlcnZpY2VzL3J1bnRpbWUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmNlcHRvciBxdWUgZ2FyYW50aXphIHF1ZSBsYXMgcGV0aWNpb25lcyBIVFRQIG5vIHNlIGhhZ2FuIGhhc3RhIHF1ZSBcclxuICogZWwgcnVudGltZSBjb25maWcgZXN0w6kgY29tcGxldGFtZW50ZSBjYXJnYWRvXHJcbiAqIEV2aXRhIHF1ZSBzZSBoYWdhbiBwZXRpY2lvbmVzIGNvbiBVUkxzIGluY29ycmVjdGFzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcnVudGltZUNvbmZpZ0ludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlckZuKSA9PiB7XHJcbiAgY29uc3QgcnVudGltZUNvbmZpZ1NlcnZpY2UgPSBpbmplY3QoUnVudGltZUNvbmZpZ1NlcnZpY2UpO1xyXG4gIFxyXG4gIC8vIFNpIGxhIHBldGljacOzbiBlcyBwYXJhIG9idGVuZXIgZWwgcnVudGltZSBjb25maWcsIGxhIGRlamFtb3MgcGFzYXIgaW5tZWRpYXRhbWVudGVcclxuICBpZiAocmVxLnVybC5pbmNsdWRlcygnL3J1bnRpbWUtY29uZmlnLmpzb24nKSkge1xyXG4gICAgcmV0dXJuIG5leHQocmVxKTtcclxuICB9XHJcbiAgXHJcbiAgLy8gU2kgbGEgcGV0aWNpw7NuIGVzIHBhcmEgYXNzZXRzIGVzdMOhdGljb3MsIGxhIGRlamFtb3MgcGFzYXJcclxuICBpZiAocmVxLnVybC5pbmNsdWRlcygnL2Fzc2V0cy8nKSB8fCByZXEudXJsLmluY2x1ZGVzKCcuanNvbicpIHx8IHJlcS51cmwuaW5jbHVkZXMoJy5jc3MnKSB8fCByZXEudXJsLmluY2x1ZGVzKCcuanMnKSkge1xyXG4gICAgcmV0dXJuIG5leHQocmVxKTtcclxuICB9XHJcblxyXG4gIC8vIFBhcmEgbGFzIGRlbcOhcyBwZXRpY2lvbmVzLCBlc3BlcmFtb3MgYSBxdWUgZWwgY29uZmlnIGVzdMOpIGxpc3RvXHJcbiAgcmV0dXJuIHJ1bnRpbWVDb25maWdTZXJ2aWNlLmNvbmZpZyQucGlwZShcclxuICAgIGZpbHRlcihjb25maWcgPT4gY29uZmlnICE9PSBudWxsKSwgLy8gRXNwZXJhbW9zIGhhc3RhIHF1ZSBoYXlhIGNvbmZpZ1xyXG4gICAgdGFrZSgxKSwgLy8gU29sbyB0b21hbW9zIGVsIHByaW1lciB2YWxvciB2w6FsaWRvXHJcbiAgICBzd2l0Y2hNYXAoY29uZmlnID0+IHtcclxuICAgICAgLy8gU2kgbGEgVVJMIHlhIGVzIGNvbXBsZXRhIChlbXBpZXphIGNvbiBodHRwKSwgbGEgZGVqYW1vcyBjb21vIGVzdMOhXHJcbiAgICAgIGlmIChyZXEudXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgICAgIHJldHVybiBuZXh0KHJlcSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFNpIGVzIHVuYSBVUkwgcmVsYXRpdmEgcXVlIGRlYmVyw61hIGlyIGFsIEFQSSwgbGEgY29tcGxldGFtb3NcclxuICAgICAgaWYgKHJlcS51cmwuc3RhcnRzV2l0aCgnL2FwaS8nKSB8fCByZXEudXJsLnN0YXJ0c1dpdGgoJ2FwaS8nKSkge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGNvbmZpZyEuYXBpVXJsO1xyXG4gICAgICAgIGNvbnN0IGNsZWFuVXJsID0gcmVxLnVybC5zdGFydHNXaXRoKCcvJykgPyByZXEudXJsLnN1YnN0cmluZygxKSA6IHJlcS51cmw7XHJcbiAgICAgICAgY29uc3QgZnVsbFVybCA9IGAke2FwaVVybH0ke2NsZWFuVXJsfWA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbW9kaWZpZWRSZXEgPSByZXEuY2xvbmUoe1xyXG4gICAgICAgICAgdXJsOiBmdWxsVXJsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG5leHQobW9kaWZpZWRSZXEpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBQYXJhIG90cmFzIFVSTHMsIGxhcyBkZWphbW9zIHBhc2FyIHNpbiBtb2RpZmljYXJcclxuICAgICAgcmV0dXJuIG5leHQocmVxKTtcclxuICAgIH0pXHJcbiAgKTtcclxufTsiXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvaW50ZXJmYWNlcy9ydW50aW1lLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBSdW50aW1lQ29uZmlnIHtcclxuICBhcGlVcmw6IHN0cmluZztcclxuICBmcm9udGVuZFVybD86IHN0cmluZztcclxuICAvKiogQW1iaWVudGUgZGUgbGEgYXBsaWNhY2nDs24uIFZhbG9yZXMgdsOhbGlkb3M6ICdwcm9kJywgJ3ByZXByb2QnLCAndGVzdCcgKi9cclxuICBhcHBFbnY6ICdwcm9kJyB8ICdwcmVwcm9kJyB8ICd0ZXN0JztcclxuICBwcm9kdWN0aW9uOiBib29sZWFuO1xyXG4gIGxvY2FsZTogc3RyaW5nO1xyXG4gIGNoYW5uZWw6IHN0cmluZztcclxuICBwb3J0PzogbnVtYmVyO1xyXG4gIGhvc3Q/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyRW52aXJvbm1lbnRWYXJpYWJsZXMge1xyXG4gIEFQSV9VUkw/OiBzdHJpbmc7XHJcbiAgRlJPTlRFTkRfVVJMPzogc3RyaW5nO1xyXG4gIC8qKiBBbWJpZW50ZSBkZSBsYSBhcGxpY2FjacOzbi4gVmFsb3JlcyB2w6FsaWRvczogJ3Byb2QnLCAncHJlcHJvZCcsICd0ZXN0JyAqL1xyXG4gIEFQUF9FTlY/OiAncHJvZCcgfCAncHJlcHJvZCcgfCAndGVzdCc7XHJcbiAgUE9SVD86IHN0cmluZztcclxuICBIT1NUPzogc3RyaW5nO1xyXG4gIE5PREVfRU5WPzogJ2RldmVsb3BtZW50JyB8ICdwcm9kdWN0aW9uJztcclxuICBMT0NBTEU/OiBzdHJpbmc7XHJcbiAgQ0hBTk5FTD86IHN0cmluZztcclxufSJdfQ==
@@ -1,42 +0,0 @@
1
- import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
2
- import { RuntimeConfigService } from '../ec-services/runtime-config.service';
3
- /**
4
- * Factory function para APP_INITIALIZER (OPTIMIZADA)
5
- * Carga la configuración runtime UNA SOLA VEZ antes de que Angular bootstrap la aplicación
6
- * Evita múltiples cargas y mejora el rendimiento
7
- */
8
- export function initializeRuntimeConfig(runtimeConfigService) {
9
- return () => {
10
- console.log('🚀 Inicializando Runtime Config...');
11
- return runtimeConfigService.initialize()
12
- .then((config) => {
13
- console.log('✅ Runtime config inicializado correctamente:', {
14
- apiUrl: config.apiUrl,
15
- appEnv: config.appEnv,
16
- production: config.production
17
- });
18
- return config;
19
- })
20
- .catch((error) => {
21
- console.error('❌ Error al inicializar runtime config:', error);
22
- // Aún en caso de error, continuamos para no bloquear la app
23
- return null;
24
- });
25
- };
26
- }
27
- /**
28
- * Función que configura el RuntimeConfigService y su inicialización
29
- * Debe ser usado en app.config.ts junto con provideEnvironment
30
- */
31
- export function provideRuntimeConfig() {
32
- return makeEnvironmentProviders([
33
- RuntimeConfigService,
34
- {
35
- provide: APP_INITIALIZER,
36
- useFactory: initializeRuntimeConfig,
37
- deps: [RuntimeConfigService],
38
- multi: true
39
- }
40
- ]);
41
- }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZVJ1bnRpbWVDb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvcHJvdmlkZXJzL3Byb3ZpZGVSdW50aW1lQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsb0JBQTBDO0lBQ2hGLE9BQU8sR0FBaUIsRUFBRTtRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUU7YUFDckMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxFQUFFO2dCQUMxRCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDckIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2FBQzlCLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRCw0REFBNEQ7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsb0JBQW9CO1FBQ3BCO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLHVCQUF1QjtZQUNuQyxJQUFJLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztZQUM1QixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSdW50aW1lQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2VjLXNlcnZpY2VzL3J1bnRpbWUtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEZhY3RvcnkgZnVuY3Rpb24gcGFyYSBBUFBfSU5JVElBTElaRVIgKE9QVElNSVpBREEpXHJcbiAqIENhcmdhIGxhIGNvbmZpZ3VyYWNpw7NuIHJ1bnRpbWUgVU5BIFNPTEEgVkVaIGFudGVzIGRlIHF1ZSBBbmd1bGFyIGJvb3RzdHJhcCBsYSBhcGxpY2FjacOzblxyXG4gKiBFdml0YSBtw7psdGlwbGVzIGNhcmdhcyB5IG1lam9yYSBlbCByZW5kaW1pZW50b1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVSdW50aW1lQ29uZmlnKHJ1bnRpbWVDb25maWdTZXJ2aWNlOiBSdW50aW1lQ29uZmlnU2VydmljZSk6ICgpID0+IFByb21pc2U8YW55PiB7XHJcbiAgcmV0dXJuICgpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gICAgY29uc29sZS5sb2coJ/CfmoAgSW5pY2lhbGl6YW5kbyBSdW50aW1lIENvbmZpZy4uLicpO1xyXG4gICAgcmV0dXJuIHJ1bnRpbWVDb25maWdTZXJ2aWNlLmluaXRpYWxpemUoKVxyXG4gICAgICAudGhlbigoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ+KchSBSdW50aW1lIGNvbmZpZyBpbmljaWFsaXphZG8gY29ycmVjdGFtZW50ZTonLCB7XHJcbiAgICAgICAgICBhcGlVcmw6IGNvbmZpZy5hcGlVcmwsXHJcbiAgICAgICAgICBhcHBFbnY6IGNvbmZpZy5hcHBFbnYsXHJcbiAgICAgICAgICBwcm9kdWN0aW9uOiBjb25maWcucHJvZHVjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgRXJyb3IgYWwgaW5pY2lhbGl6YXIgcnVudGltZSBjb25maWc6JywgZXJyb3IpO1xyXG4gICAgICAgIC8vIEHDum4gZW4gY2FzbyBkZSBlcnJvciwgY29udGludWFtb3MgcGFyYSBubyBibG9xdWVhciBsYSBhcHBcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZ1bmNpw7NuIHF1ZSBjb25maWd1cmEgZWwgUnVudGltZUNvbmZpZ1NlcnZpY2UgeSBzdSBpbmljaWFsaXphY2nDs25cclxuICogRGViZSBzZXIgdXNhZG8gZW4gYXBwLmNvbmZpZy50cyBqdW50byBjb24gcHJvdmlkZUVudmlyb25tZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVJ1bnRpbWVDb25maWcoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xyXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xyXG4gICAgUnVudGltZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcclxuICAgICAgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZVJ1bnRpbWVDb25maWcsXHJcbiAgICAgIGRlcHM6IFtSdW50aW1lQ29uZmlnU2VydmljZV0sXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXSk7XHJcbn0iXX0=