ng-easycommerce-v18 0.3.19-beta.3 → 0.3.19-beta.5

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.
@@ -1,20 +1,23 @@
1
- import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
1
+ import { Injectable, Inject, PLATFORM_ID, Optional } from '@angular/core';
2
2
  import { isPlatformBrowser } from '@angular/common';
3
3
  import { of, BehaviorSubject } from 'rxjs';
4
4
  import { catchError, tap, shareReplay } from 'rxjs/operators';
5
+ import { ENVIRONMENT_TOKEN } from '../providers/provideEnvironment';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/common/http";
7
8
  export class RuntimeConfigService {
8
9
  platformId;
9
10
  http;
11
+ environment;
10
12
  configSubject = new BehaviorSubject(null);
11
13
  config$ = this.configSubject.asObservable();
12
14
  _config = null;
13
15
  _loadPromise = null;
14
16
  _isLoaded = false;
15
- constructor(platformId, http) {
17
+ constructor(platformId, http, environment) {
16
18
  this.platformId = platformId;
17
19
  this.http = http;
20
+ this.environment = environment;
18
21
  // En SSR o browser, intentar cargar inmediatamente desde window si está disponible
19
22
  if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
20
23
  this._config = window.__RUNTIME_CONFIG__;
@@ -22,6 +25,22 @@ export class RuntimeConfigService {
22
25
  this.configSubject.next(this._config);
23
26
  }
24
27
  }
28
+ /**
29
+ * Obtiene configuración de fallback desde environment.ts
30
+ */
31
+ getFallbackConfig() {
32
+ if (this.environment) {
33
+ console.warn('⚠️ [RuntimeConfigService] Usando configuración desde environment.ts como fallback');
34
+ return {
35
+ apiUrl: this.environment.apiUrl || '',
36
+ appEnv: (this.environment.production ? 'prod' : 'preprod'),
37
+ production: this.environment.production,
38
+ locale: this.environment.locale,
39
+ channel: this.environment.channel
40
+ };
41
+ }
42
+ return null;
43
+ }
25
44
  /**
26
45
  * Inicialización única - llamada por APP_INITIALIZER
27
46
  * Garantiza que la configuración se carga solo una vez al inicio
@@ -76,25 +95,41 @@ export class RuntimeConfigService {
76
95
  }), shareReplay(1), // Cache la respuesta para múltiples suscripciones
77
96
  catchError(error => {
78
97
  console.error('❌ [RuntimeConfigService] Error loading /runtime-config.json:', error);
79
- console.warn('⚠️ [RuntimeConfigService] CRITICAL: No se pudo cargar runtime-config.json y no hay fallback configurado');
80
- console.warn('⚠️ [RuntimeConfigService] Asegúrate de que el servidor esté inyectando window.__RUNTIME_CONFIG__ correctamente');
81
- // Re-lanzar el error para que se maneje en APP_INITIALIZER
98
+ // Intentar usar fallback desde environment
99
+ const fallbackConfig = this.getFallbackConfig();
100
+ if (fallbackConfig) {
101
+ this._config = fallbackConfig;
102
+ this._isLoaded = true;
103
+ this.configSubject.next(fallbackConfig);
104
+ return of(fallbackConfig);
105
+ }
106
+ // Si no hay environment, lanzar error
107
+ console.error('❌ [RuntimeConfigService] No se pudo cargar runtime-config.json y no hay environment configurado');
82
108
  throw error;
83
109
  }));
84
110
  return this._loadPromise;
85
111
  }
86
112
  else {
87
- // En SSR, leemos desde window que fue inyectado por el servidor
113
+ // En SSR, primero intentar usar fallback desde environment (más confiable)
114
+ console.log('🔧 [RuntimeConfigService SSR] Ejecutando en servidor, usando environment como fuente principal');
115
+ const fallbackConfig = this.getFallbackConfig();
116
+ if (fallbackConfig) {
117
+ this._config = fallbackConfig;
118
+ this._isLoaded = true;
119
+ this.configSubject.next(fallbackConfig);
120
+ return of(fallbackConfig);
121
+ }
122
+ // Como alternativa, intentar leer desde window si está disponible
88
123
  if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
124
+ console.log('🔧 [RuntimeConfigService SSR] Usando window.__RUNTIME_CONFIG__ como alternativa');
89
125
  this._config = window.__RUNTIME_CONFIG__;
90
126
  this._isLoaded = true;
91
127
  this.configSubject.next(this._config);
92
128
  return of(this._config);
93
129
  }
94
- // Si llegamos aquí en SSR sin config, es un error crítico
95
- console.error('❌ [RuntimeConfigService SSR] CRITICAL: window.__RUNTIME_CONFIG__ no está disponible');
96
- console.error(' [RuntimeConfigService SSR] El server.ts debe inyectar la configuración en el HTML');
97
- throw new Error('RuntimeConfig no disponible en SSR. Verifica que server.ts esté inyectando window.__RUNTIME_CONFIG__');
130
+ // Si no hay environment configurado, lanzar error
131
+ console.error('❌ [RuntimeConfigService SSR] No hay environment configurado. Agrega provideEnvironment() en app.config.ts');
132
+ throw new Error('RuntimeConfig no disponible. Configura provideEnvironment() en app.config.ts');
98
133
  }
99
134
  }
100
135
  /**
@@ -108,8 +143,9 @@ export class RuntimeConfigService {
108
143
  */
109
144
  getApiUrl() {
110
145
  if (!this._config?.apiUrl) {
111
- console.error(' [RuntimeConfigService] getApiUrl() llamado sin configuración cargada');
112
- throw new Error('RuntimeConfig no está inicializado. Asegúrate de que provideRuntimeConfig() esté configurado correctamente.');
146
+ console.warn('⚠️ [RuntimeConfigService] getApiUrl() llamado sin configuración cargada, usando fallback');
147
+ const fallback = this.getFallbackConfig();
148
+ return fallback?.apiUrl || '';
113
149
  }
114
150
  return this._config.apiUrl;
115
151
  }
@@ -142,8 +178,9 @@ export class RuntimeConfigService {
142
178
  */
143
179
  getChannel() {
144
180
  if (!this._config?.channel) {
145
- console.error(' [RuntimeConfigService] getChannel() llamado sin configuración cargada');
146
- throw new Error('RuntimeConfig no está inicializado. Asegúrate de que provideRuntimeConfig() esté configurado correctamente.');
181
+ console.warn('⚠️ [RuntimeConfigService] getChannel() llamado sin configuración cargada, usando fallback');
182
+ const fallback = this.getFallbackConfig();
183
+ return fallback?.channel || '';
147
184
  }
148
185
  return this._config.channel;
149
186
  }
@@ -166,7 +203,7 @@ export class RuntimeConfigService {
166
203
  const cleanPath = path.startsWith('/') ? path.slice(1) : path;
167
204
  return `${frontendUrl}${cleanPath}`;
168
205
  }
169
- 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 });
206
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, deps: [{ token: PLATFORM_ID }, { token: i1.HttpClient }, { token: ENVIRONMENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
170
207
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, providedIn: 'root' });
171
208
  }
172
209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, decorators: [{
@@ -177,5 +214,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
177
214
  }], ctorParameters: () => [{ type: Object, decorators: [{
178
215
  type: Inject,
179
216
  args: [PLATFORM_ID]
180
- }] }, { type: i1.HttpClient }] });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUTlELE1BQU0sT0FBTyxvQkFBb0I7SUFTQTtJQUNyQjtJQVRGLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBdUIsSUFBSSxDQUFDLENBQUM7SUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0MsT0FBTyxHQUF5QixJQUFJLENBQUM7SUFDckMsWUFBWSxHQUFxQyxJQUFJLENBQUM7SUFDdEQsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUUxQixZQUMrQixVQUFrQixFQUN2QyxJQUFnQjtRQURLLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUV4QixtRkFBbUY7UUFDbkYsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUks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QUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlELE9BQU8sR0FBRyxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDdEMsQ0FBQzt3R0FyTFUsb0JBQW9CLGtCQVNyQixXQUFXOzRHQVRWLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFVSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSdW50aW1lQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ydW50aW1lLWNvbmZpZyc7XHJcblxyXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogYW55O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUnVudGltZUNvbmZpZ1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgY29uZmlnU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UnVudGltZUNvbmZpZyB8IG51bGw+KG51bGwpO1xyXG4gIHB1YmxpYyBjb25maWckID0gdGhpcy5jb25maWdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIFxyXG4gIHByaXZhdGUgX2NvbmZpZzogUnVudGltZUNvbmZpZyB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xvYWRQcm9taXNlOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb25maWc+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkge1xyXG4gICAgLy8gRW4gU1NSIG8gYnJvd3NlciwgaW50ZW50YXIgY2FyZ2FyIGlubWVkaWF0YW1lbnRlIGRlc2RlIHdpbmRvdyBzaSBlc3TDoSBkaXNwb25pYmxlXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXyAmJiAhdGhpcy5faXNMb2FkZWQpIHtcclxuICAgICAgdGhpcy5fY29uZmlnID0gd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXztcclxuICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLl9jb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pY2lhbGl6YWNpw7NuIMO6bmljYSAtIGxsYW1hZGEgcG9yIEFQUF9JTklUSUFMSVpFUlxyXG4gICAqIEdhcmFudGl6YSBxdWUgbGEgY29uZmlndXJhY2nDs24gc2UgY2FyZ2Egc29sbyB1bmEgdmV6IGFsIGluaWNpb1xyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTxSdW50aW1lQ29uZmlnPiB7XHJcbiAgICBpZiAodGhpcy5faXNMb2FkZWQgJiYgdGhpcy5fY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRDb25maWcoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChjb25maWc6IFJ1bnRpbWVDb25maWcpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJlc29sdmUoY29uZmlnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FyZ2EgbGEgY29uZmlndXJhY2nDs24gZW4gcnVudGltZSAob3B0aW1pemFkYSBwYXJhIHVuYSBzb2xhIGNhcmdhKVxyXG4gICAqIC0gRW4gU1NSOiBMZWUgZGVzZGUgZWwgb2JqZXRvIHdpbmRvdyBpbnllY3RhZG8gcG9yIGVsIHNlcnZpZG9yXHJcbiAgICogLSBFbiBCcm93c2VyOiBIYWNlIHBldGljacOzbiBIVFRQIGEgL3J1bnRpbWUtY29uZmlnLmpzb24gKHNvbG8gc2kgbm8gZXN0w6EgZW4gd2luZG93KVxyXG4gICAqL1xyXG4gIGxvYWRDb25maWcoKTogT2JzZXJ2YWJsZTxSdW50aW1lQ29uZmlnPiB7XHJcbiAgICAvLyBTaSB5YSB0ZW5lbW9zIGxhIGNvbmZpZyBjYXJnYWRhLCBsYSBkZXZvbHZlbW9zIGlubWVkaWF0YW1lbnRlXHJcbiAgICBpZiAodGhpcy5faXNMb2FkZWQgJiYgdGhpcy5fY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBvZih0aGlzLl9jb25maWcgYXMgUnVudGltZUNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2kgeWEgaGF5IHVuYSBjYXJnYSBlbiBwcm9ncmVzbywgcmV1dGlsaXphbW9zIGVzYSBwZXRpY2nDs25cclxuICAgIGlmICh0aGlzLl9sb2FkUHJvbWlzZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9hZFByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgLy8gRW4gZWwgbmF2ZWdhZG9yLCBwcmltZXJvIGludGVudGFtb3Mgb2J0ZW5lciBsYSBjb25maWcgZGVzZGUgd2luZG93XHJcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX187XHJcbiAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuX2NvbmZpZyk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2kgbm8gZXN0w6EgZW4gd2luZG93LCBoYWNlbW9zIHBldGljacOzbiBIVFRQIChzb2xvIHVuYSB2ZXopXHJcbiAgICAgIHRoaXMuX2xvYWRQcm9taXNlID0gdGhpcy5odHRwLmdldDxSdW50aW1lQ29uZmlnPignL3J1bnRpbWUtY29uZmlnLmpzb24nKS5waXBlKFxyXG4gICAgICAgIHRhcChjb25maWcgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoY29uZmlnKTtcclxuICAgICAgICAgIC8vIEd1YXJkYW1vcyBlbiB3aW5kb3cgcGFyYSBzaWd1aWVudGVzIGFjY2Vzb3NcclxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fID0gY29uZmlnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpLCAvLyBDYWNoZSBsYSByZXNwdWVzdGEgcGFyYSBtw7psdGlwbGVzIHN1c2NyaXBjaW9uZXNcclxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBbUnVudGltZUNvbmZpZ1NlcnZpY2VdIEVycm9yIGxvYWRpbmcgL3J1bnRpbWUtY29uZmlnLmpzb246JywgZXJyb3IpO1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gW1J1bnRpbWVDb25maWdTZXJ2aWNlXSBDUklUSUNBTDogTm8gc2UgcHVkbyBjYXJnYXIgcnVudGltZS1jb25maWcuanNvbiB5IG5vIGhheSBmYWxsYmFjayBjb25maWd1cmFkbycpO1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gW1J1bnRpbWVDb25maWdTZXJ2aWNlXSBBc2Vnw7pyYXRlIGRlIHF1ZSBlbCBzZXJ2aWRvciBlc3TDqSBpbnllY3RhbmRvIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18gY29ycmVjdGFtZW50ZScpO1xyXG4gICAgICAgICAgLy8gUmUtbGFuemFyIGVsIGVycm9yIHBhcmEgcXVlIHNlIG1hbmVqZSBlbiBBUFBfSU5JVElBTElaRVJcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5fbG9hZFByb21pc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBFbiBTU1IsIGxlZW1vcyBkZXNkZSB3aW5kb3cgcXVlIGZ1ZSBpbnllY3RhZG8gcG9yIGVsIHNlcnZpZG9yXHJcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX187XHJcbiAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuX2NvbmZpZyk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbmZpZyBhcyBSdW50aW1lQ29uZmlnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2kgbGxlZ2Ftb3MgYXF1w60gZW4gU1NSIHNpbiBjb25maWcsIGVzIHVuIGVycm9yIGNyw610aWNvXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBbUnVudGltZUNvbmZpZ1NlcnZpY2UgU1NSXSBDUklUSUNBTDogd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXyBubyBlc3TDoSBkaXNwb25pYmxlJyk7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBbUnVudGltZUNvbmZpZ1NlcnZpY2UgU1NSXSBFbCBzZXJ2ZXIudHMgZGViZSBpbnllY3RhciBsYSBjb25maWd1cmFjacOzbiBlbiBlbCBIVE1MJyk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVudGltZUNvbmZpZyBubyBkaXNwb25pYmxlIGVuIFNTUi4gVmVyaWZpY2EgcXVlIHNlcnZlci50cyBlc3TDqSBpbnllY3RhbmRvIHdpbmRvdy5fX1JVTlRJTUVfQ09ORklHX18nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gYWN0dWFsIChzw61uY3Jvbm8pXHJcbiAgICovXHJcbiAgZ2V0Q29uZmlnKCk6IFJ1bnRpbWVDb25maWcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGxhIEFQSSBVUkwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0QXBpVXJsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX2NvbmZpZz8uYXBpVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBbUnVudGltZUNvbmZpZ1NlcnZpY2VdIGdldEFwaVVybCgpIGxsYW1hZG8gc2luIGNvbmZpZ3VyYWNpw7NuIGNhcmdhZGEnKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW50aW1lQ29uZmlnIG5vIGVzdMOhIGluaWNpYWxpemFkby4gQXNlZ8O6cmF0ZSBkZSBxdWUgcHJvdmlkZVJ1bnRpbWVDb25maWcoKSBlc3TDqSBjb25maWd1cmFkbyBjb3JyZWN0YW1lbnRlLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hcGlVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGxhIEZyb250ZW5kIFVSTCBhY3R1YWxcclxuICAgKi9cclxuICBnZXRGcm9udGVuZFVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uZnJvbnRlbmRVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGVsIGVudG9ybm8gYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5hcHBFbnYgfHwgJ2RldmVsb3BtZW50JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNpIGVzdGFtb3MgZW4gcHJvZHVjY2nDs25cclxuICAgKi9cclxuICBpc1Byb2R1Y3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5wcm9kdWN0aW9uIHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBsb2NhbGUgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5sb2NhbGUgfHwgJ2VzX0FSJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgY2FuYWwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0Q2hhbm5lbCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9jb25maWc/LmNoYW5uZWwpIHtcclxuICAgICAgY29uc29sZS5lcnJvcign4p2MIFtSdW50aW1lQ29uZmlnU2VydmljZV0gZ2V0Q2hhbm5lbCgpIGxsYW1hZG8gc2luIGNvbmZpZ3VyYWNpw7NuIGNhcmdhZGEnKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW50aW1lQ29uZmlnIG5vIGVzdMOhIGluaWNpYWxpemFkby4gQXNlZ8O6cmF0ZSBkZSBxdWUgcHJvdmlkZVJ1bnRpbWVDb25maWcoKSBlc3TDqSBjb25maWd1cmFkbyBjb3JyZWN0YW1lbnRlLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5jaGFubmVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBoZWxwZXIgcGFyYSBjb25zdHJ1aXIgVVJMcyBkZSBBUElcclxuICAgKi9cclxuICBidWlsZEFwaVVybChlbmRwb2ludDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGFwaVVybCA9IHRoaXMuZ2V0QXBpVXJsKCk7XHJcbiAgICBjb25zdCBjbGVhbkVuZHBvaW50ID0gZW5kcG9pbnQuc3RhcnRzV2l0aCgnLycpID8gZW5kcG9pbnQuc2xpY2UoMSkgOiBlbmRwb2ludDtcclxuICAgIHJldHVybiBgJHthcGlVcmx9JHtjbGVhbkVuZHBvaW50fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGhlbHBlciBwYXJhIGNvbnN0cnVpciBVUkxzIGRlbCBmcm9udGVuZFxyXG4gICAqL1xyXG4gIGJ1aWxkRnJvbnRlbmRVcmwocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZyb250ZW5kVXJsID0gdGhpcy5nZXRGcm9udGVuZFVybCgpO1xyXG4gICAgaWYgKCFmcm9udGVuZFVybCkge1xyXG4gICAgICByZXR1cm4gcGF0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsZWFuUGF0aCA9IHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aC5zbGljZSgxKSA6IHBhdGg7XHJcbiAgICByZXR1cm4gYCR7ZnJvbnRlbmRVcmx9JHtjbGVhblBhdGh9YDtcclxuICB9XHJcbn0iXX0=
217
+ }] }, { type: i1.HttpClient }, { type: undefined, decorators: [{
218
+ type: Optional
219
+ }, {
220
+ type: Inject,
221
+ args: [ENVIRONMENT_TOKEN]
222
+ }] }] });
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9ydW50aW1lLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQVFwRSxNQUFNLE9BQU8sb0JBQW9CO0lBU0E7SUFDckI7SUFDdUM7SUFWekMsYUFBYSxHQUFHLElBQUksZUFBZSxDQUF1QixJQUFJLENBQUMsQ0FBQztJQUNqRSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUzQyxPQUFPLEdBQXlCLElBQUksQ0FBQztJQUNyQyxZQUFZLEdBQXFDLElBQUksQ0FBQztJQUN0RCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLFlBQytCLFVBQWtCLEVBQ3ZDLElBQWdCLEVBQ3VCLFdBQStCO1FBRmpELGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUN1QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFFOUUsbUZBQW1GO1FBQ25GLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVB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QUFNLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM5RCxPQUFPLEdBQUcsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQ3RDLENBQUM7d0dBNU5VLG9CQUFvQixrQkFTckIsV0FBVyx1Q0FFQyxpQkFBaUI7NEdBWDVCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFVSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUVsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgUExBVEZPUk1fSUQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSdW50aW1lQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ydW50aW1lLWNvbmZpZyc7XHJcbmltcG9ydCB7IEVOVklST05NRU5UX1RPS0VOIH0gZnJvbSAnLi4vcHJvdmlkZXJzL3Byb3ZpZGVFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogYW55O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUnVudGltZUNvbmZpZ1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgY29uZmlnU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UnVudGltZUNvbmZpZyB8IG51bGw+KG51bGwpO1xyXG4gIHB1YmxpYyBjb25maWckID0gdGhpcy5jb25maWdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIFxyXG4gIHByaXZhdGUgX2NvbmZpZzogUnVudGltZUNvbmZpZyB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xvYWRQcm9taXNlOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb25maWc+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRU5WSVJPTk1FTlRfVE9LRU4pIHByaXZhdGUgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50IHwgbnVsbFxyXG4gICkge1xyXG4gICAgLy8gRW4gU1NSIG8gYnJvd3NlciwgaW50ZW50YXIgY2FyZ2FyIGlubWVkaWF0YW1lbnRlIGRlc2RlIHdpbmRvdyBzaSBlc3TDoSBkaXNwb25pYmxlXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXyAmJiAhdGhpcy5faXNMb2FkZWQpIHtcclxuICAgICAgdGhpcy5fY29uZmlnID0gd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXztcclxuICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLl9jb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBjb25maWd1cmFjacOzbiBkZSBmYWxsYmFjayBkZXNkZSBlbnZpcm9ubWVudC50c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0RmFsbGJhY2tDb25maWcoKTogUnVudGltZUNvbmZpZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gW1J1bnRpbWVDb25maWdTZXJ2aWNlXSBVc2FuZG8gY29uZmlndXJhY2nDs24gZGVzZGUgZW52aXJvbm1lbnQudHMgY29tbyBmYWxsYmFjaycpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGFwaVVybDogdGhpcy5lbnZpcm9ubWVudC5hcGlVcmwgfHwgJycsXHJcbiAgICAgICAgYXBwRW52OiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uID8gJ3Byb2QnIDogJ3ByZXByb2QnKSBhcyAncHJvZCcgfCAncHJlcHJvZCcgfCAndGVzdCcsXHJcbiAgICAgICAgcHJvZHVjdGlvbjogdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uLFxyXG4gICAgICAgIGxvY2FsZTogdGhpcy5lbnZpcm9ubWVudC5sb2NhbGUsXHJcbiAgICAgICAgY2hhbm5lbDogdGhpcy5lbnZpcm9ubWVudC5jaGFubmVsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaWNpYWxpemFjacOzbiDDum5pY2EgLSBsbGFtYWRhIHBvciBBUFBfSU5JVElBTElaRVJcclxuICAgKiBHYXJhbnRpemEgcXVlIGxhIGNvbmZpZ3VyYWNpw7NuIHNlIGNhcmdhIHNvbG8gdW5hIHZleiBhbCBpbmljaW9cclxuICAgKi9cclxuICBpbml0aWFsaXplKCk6IFByb21pc2U8UnVudGltZUNvbmZpZz4ge1xyXG4gICAgaWYgKHRoaXMuX2lzTG9hZGVkICYmIHRoaXMuX2NvbmZpZykge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2NvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5sb2FkQ29uZmlnKCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoY29uZmlnOiBSdW50aW1lQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXNvbHZlKGNvbmZpZyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcmdhIGxhIGNvbmZpZ3VyYWNpw7NuIGVuIHJ1bnRpbWUgKG9wdGltaXphZGEgcGFyYSB1bmEgc29sYSBjYXJnYSlcclxuICAgKiAtIEVuIFNTUjogTGVlIGRlc2RlIGVsIG9iamV0byB3aW5kb3cgaW55ZWN0YWRvIHBvciBlbCBzZXJ2aWRvclxyXG4gICAqIC0gRW4gQnJvd3NlcjogSGFjZSBwZXRpY2nDs24gSFRUUCBhIC9ydW50aW1lLWNvbmZpZy5qc29uIChzb2xvIHNpIG5vIGVzdMOhIGVuIHdpbmRvdylcclxuICAgKi9cclxuICBsb2FkQ29uZmlnKCk6IE9ic2VydmFibGU8UnVudGltZUNvbmZpZz4ge1xyXG4gICAgLy8gU2kgeWEgdGVuZW1vcyBsYSBjb25maWcgY2FyZ2FkYSwgbGEgZGV2b2x2ZW1vcyBpbm1lZGlhdGFtZW50ZVxyXG4gICAgaWYgKHRoaXMuX2lzTG9hZGVkICYmIHRoaXMuX2NvbmZpZykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5fY29uZmlnIGFzIFJ1bnRpbWVDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNpIHlhIGhheSB1bmEgY2FyZ2EgZW4gcHJvZ3Jlc28sIHJldXRpbGl6YW1vcyBlc2EgcGV0aWNpw7NuXHJcbiAgICBpZiAodGhpcy5fbG9hZFByb21pc2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvYWRQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIC8vIEVuIGVsIG5hdmVnYWRvciwgcHJpbWVybyBpbnRlbnRhbW9zIG9idGVuZXIgbGEgY29uZmlnIGRlc2RlIHdpbmRvd1xyXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXyAmJiAhdGhpcy5faXNMb2FkZWQpIHtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fO1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLl9jb25maWcpO1xyXG4gICAgICAgIHJldHVybiBvZih0aGlzLl9jb25maWcgYXMgUnVudGltZUNvbmZpZyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNpIG5vIGVzdMOhIGVuIHdpbmRvdywgaGFjZW1vcyBwZXRpY2nDs24gSFRUUCAoc29sbyB1bmEgdmV6KVxyXG4gICAgICB0aGlzLl9sb2FkUHJvbWlzZSA9IHRoaXMuaHR0cC5nZXQ8UnVudGltZUNvbmZpZz4oJy9ydW50aW1lLWNvbmZpZy5qc29uJykucGlwZShcclxuICAgICAgICB0YXAoY29uZmlnID0+IHtcclxuICAgICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KGNvbmZpZyk7XHJcbiAgICAgICAgICAvLyBHdWFyZGFtb3MgZW4gd2luZG93IHBhcmEgc2lndWllbnRlcyBhY2Nlc29zXHJcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgd2luZG93Ll9fUlVOVElNRV9DT05GSUdfXyA9IGNvbmZpZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBzaGFyZVJlcGxheSgxKSwgLy8gQ2FjaGUgbGEgcmVzcHVlc3RhIHBhcmEgbcO6bHRpcGxlcyBzdXNjcmlwY2lvbmVzXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgW1J1bnRpbWVDb25maWdTZXJ2aWNlXSBFcnJvciBsb2FkaW5nIC9ydW50aW1lLWNvbmZpZy5qc29uOicsIGVycm9yKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gSW50ZW50YXIgdXNhciBmYWxsYmFjayBkZXNkZSBlbnZpcm9ubWVudFxyXG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSB0aGlzLmdldEZhbGxiYWNrQ29uZmlnKCk7XHJcbiAgICAgICAgICBpZiAoZmFsbGJhY2tDb25maWcpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uZmlnID0gZmFsbGJhY2tDb25maWc7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBTaSBubyBoYXkgZW52aXJvbm1lbnQsIGxhbnphciBlcnJvclxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIFtSdW50aW1lQ29uZmlnU2VydmljZV0gTm8gc2UgcHVkbyBjYXJnYXIgcnVudGltZS1jb25maWcuanNvbiB5IG5vIGhheSBlbnZpcm9ubWVudCBjb25maWd1cmFkbycpO1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkUHJvbWlzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEVuIFNTUiwgcHJpbWVybyBpbnRlbnRhciB1c2FyIGZhbGxiYWNrIGRlc2RlIGVudmlyb25tZW50IChtw6FzIGNvbmZpYWJsZSlcclxuICAgICAgY29uc29sZS5sb2coJ/CflKcgW1J1bnRpbWVDb25maWdTZXJ2aWNlIFNTUl0gRWplY3V0YW5kbyBlbiBzZXJ2aWRvciwgdXNhbmRvIGVudmlyb25tZW50IGNvbW8gZnVlbnRlIHByaW5jaXBhbCcpO1xyXG4gICAgICBjb25zdCBmYWxsYmFja0NvbmZpZyA9IHRoaXMuZ2V0RmFsbGJhY2tDb25maWcoKTtcclxuICAgICAgaWYgKGZhbGxiYWNrQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZmFsbGJhY2tDb25maWc7XHJcbiAgICAgICAgdGhpcy5faXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KGZhbGxiYWNrQ29uZmlnKTtcclxuICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2tDb25maWcpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBDb21vIGFsdGVybmF0aXZhLCBpbnRlbnRhciBsZWVyIGRlc2RlIHdpbmRvdyBzaSBlc3TDoSBkaXNwb25pYmxlXHJcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fICYmICF0aGlzLl9pc0xvYWRlZCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfwn5SnIFtSdW50aW1lQ29uZmlnU2VydmljZSBTU1JdIFVzYW5kbyB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fIGNvbW8gYWx0ZXJuYXRpdmEnKTtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB3aW5kb3cuX19SVU5USU1FX0NPTkZJR19fO1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLl9jb25maWcpO1xyXG4gICAgICAgIHJldHVybiBvZih0aGlzLl9jb25maWcgYXMgUnVudGltZUNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFNpIG5vIGhheSBlbnZpcm9ubWVudCBjb25maWd1cmFkbywgbGFuemFyIGVycm9yXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBbUnVudGltZUNvbmZpZ1NlcnZpY2UgU1NSXSBObyBoYXkgZW52aXJvbm1lbnQgY29uZmlndXJhZG8uIEFncmVnYSBwcm92aWRlRW52aXJvbm1lbnQoKSBlbiBhcHAuY29uZmlnLnRzJyk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVudGltZUNvbmZpZyBubyBkaXNwb25pYmxlLiBDb25maWd1cmEgcHJvdmlkZUVudmlyb25tZW50KCkgZW4gYXBwLmNvbmZpZy50cycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBhY3R1YWwgKHPDrW5jcm9ubylcclxuICAgKi9cclxuICBnZXRDb25maWcoKTogUnVudGltZUNvbmZpZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgbGEgQVBJIFVSTCBhY3R1YWxcclxuICAgKi9cclxuICBnZXRBcGlVcmwoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fY29uZmlnPy5hcGlVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gW1J1bnRpbWVDb25maWdTZXJ2aWNlXSBnZXRBcGlVcmwoKSBsbGFtYWRvIHNpbiBjb25maWd1cmFjacOzbiBjYXJnYWRhLCB1c2FuZG8gZmFsbGJhY2snKTtcclxuICAgICAgY29uc3QgZmFsbGJhY2sgPSB0aGlzLmdldEZhbGxiYWNrQ29uZmlnKCk7XHJcbiAgICAgIHJldHVybiBmYWxsYmFjaz8uYXBpVXJsIHx8ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hcGlVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGxhIEZyb250ZW5kIFVSTCBhY3R1YWxcclxuICAgKi9cclxuICBnZXRGcm9udGVuZFVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uZnJvbnRlbmRVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnRpZW5lIGVsIGVudG9ybm8gYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5hcHBFbnYgfHwgJ2RldmVsb3BtZW50JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNpIGVzdGFtb3MgZW4gcHJvZHVjY2nDs25cclxuICAgKi9cclxuICBpc1Byb2R1Y3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5wcm9kdWN0aW9uIHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0aWVuZSBlbCBsb2NhbGUgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5sb2NhbGUgfHwgJ2VzX0FSJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idGllbmUgZWwgY2FuYWwgYWN0dWFsXHJcbiAgICovXHJcbiAgZ2V0Q2hhbm5lbCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9jb25maWc/LmNoYW5uZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gW1J1bnRpbWVDb25maWdTZXJ2aWNlXSBnZXRDaGFubmVsKCkgbGxhbWFkbyBzaW4gY29uZmlndXJhY2nDs24gY2FyZ2FkYSwgdXNhbmRvIGZhbGxiYWNrJyk7XHJcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gdGhpcy5nZXRGYWxsYmFja0NvbmZpZygpO1xyXG4gICAgICByZXR1cm4gZmFsbGJhY2s/LmNoYW5uZWwgfHwgJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmNoYW5uZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGhlbHBlciBwYXJhIGNvbnN0cnVpciBVUkxzIGRlIEFQSVxyXG4gICAqL1xyXG4gIGJ1aWxkQXBpVXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5nZXRBcGlVcmwoKTtcclxuICAgIGNvbnN0IGNsZWFuRW5kcG9pbnQgPSBlbmRwb2ludC5zdGFydHNXaXRoKCcvJykgPyBlbmRwb2ludC5zbGljZSgxKSA6IGVuZHBvaW50O1xyXG4gICAgcmV0dXJuIGAke2FwaVVybH0ke2NsZWFuRW5kcG9pbnR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gaGVscGVyIHBhcmEgY29uc3RydWlyIFVSTHMgZGVsIGZyb250ZW5kXHJcbiAgICovXHJcbiAgYnVpbGRGcm9udGVuZFVybChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZnJvbnRlbmRVcmwgPSB0aGlzLmdldEZyb250ZW5kVXJsKCk7XHJcbiAgICBpZiAoIWZyb250ZW5kVXJsKSB7XHJcbiAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xlYW5QYXRoID0gcGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoLnNsaWNlKDEpIDogcGF0aDtcclxuICAgIHJldHVybiBgJHtmcm9udGVuZFVybH0ke2NsZWFuUGF0aH1gO1xyXG4gIH1cclxufSJdfQ==
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Injectable, Inject, APP_INITIALIZER, inject, RendererFactory2, afterNextRender, signal, EnvironmentInjector, runInInjectionContext, Component, ChangeDetectorRef, HostListener, CUSTOM_ELEMENTS_SCHEMA, Input, Pipe, Injector, EventEmitter, Output, forwardRef, afterRender, ViewChild, computed, Renderer2, ChangeDetectionStrategy, Directive } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Injectable, Inject, Optional, APP_INITIALIZER, inject, RendererFactory2, afterNextRender, signal, EnvironmentInjector, runInInjectionContext, Component, ChangeDetectorRef, HostListener, CUSTOM_ELEMENTS_SCHEMA, Input, Pipe, Injector, EventEmitter, Output, forwardRef, afterRender, ViewChild, computed, Renderer2, ChangeDetectionStrategy, Directive } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { isPlatformBrowser, DOCUMENT, AsyncPipe, CommonModule, TitleCasePipe, JsonPipe, UpperCasePipe, Location } from '@angular/common';
5
5
  import { BehaviorSubject, of, take, shareReplay as shareReplay$1, map, catchError as catchError$1, filter, ReplaySubject, firstValueFrom, concatMap, throwError, switchMap, combineLatest } from 'rxjs';
@@ -47,14 +47,16 @@ const provideEnvironment = (environment) => {
47
47
  class RuntimeConfigService {
48
48
  platformId;
49
49
  http;
50
+ environment;
50
51
  configSubject = new BehaviorSubject(null);
51
52
  config$ = this.configSubject.asObservable();
52
53
  _config = null;
53
54
  _loadPromise = null;
54
55
  _isLoaded = false;
55
- constructor(platformId, http) {
56
+ constructor(platformId, http, environment) {
56
57
  this.platformId = platformId;
57
58
  this.http = http;
59
+ this.environment = environment;
58
60
  // En SSR o browser, intentar cargar inmediatamente desde window si está disponible
59
61
  if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
60
62
  this._config = window.__RUNTIME_CONFIG__;
@@ -62,6 +64,22 @@ class RuntimeConfigService {
62
64
  this.configSubject.next(this._config);
63
65
  }
64
66
  }
67
+ /**
68
+ * Obtiene configuración de fallback desde environment.ts
69
+ */
70
+ getFallbackConfig() {
71
+ if (this.environment) {
72
+ console.warn('⚠️ [RuntimeConfigService] Usando configuración desde environment.ts como fallback');
73
+ return {
74
+ apiUrl: this.environment.apiUrl || '',
75
+ appEnv: (this.environment.production ? 'prod' : 'preprod'),
76
+ production: this.environment.production,
77
+ locale: this.environment.locale,
78
+ channel: this.environment.channel
79
+ };
80
+ }
81
+ return null;
82
+ }
65
83
  /**
66
84
  * Inicialización única - llamada por APP_INITIALIZER
67
85
  * Garantiza que la configuración se carga solo una vez al inicio
@@ -116,25 +134,41 @@ class RuntimeConfigService {
116
134
  }), shareReplay(1), // Cache la respuesta para múltiples suscripciones
117
135
  catchError(error => {
118
136
  console.error('❌ [RuntimeConfigService] Error loading /runtime-config.json:', error);
119
- console.warn('⚠️ [RuntimeConfigService] CRITICAL: No se pudo cargar runtime-config.json y no hay fallback configurado');
120
- console.warn('⚠️ [RuntimeConfigService] Asegúrate de que el servidor esté inyectando window.__RUNTIME_CONFIG__ correctamente');
121
- // Re-lanzar el error para que se maneje en APP_INITIALIZER
137
+ // Intentar usar fallback desde environment
138
+ const fallbackConfig = this.getFallbackConfig();
139
+ if (fallbackConfig) {
140
+ this._config = fallbackConfig;
141
+ this._isLoaded = true;
142
+ this.configSubject.next(fallbackConfig);
143
+ return of(fallbackConfig);
144
+ }
145
+ // Si no hay environment, lanzar error
146
+ console.error('❌ [RuntimeConfigService] No se pudo cargar runtime-config.json y no hay environment configurado');
122
147
  throw error;
123
148
  }));
124
149
  return this._loadPromise;
125
150
  }
126
151
  else {
127
- // En SSR, leemos desde window que fue inyectado por el servidor
152
+ // En SSR, primero intentar usar fallback desde environment (más confiable)
153
+ console.log('🔧 [RuntimeConfigService SSR] Ejecutando en servidor, usando environment como fuente principal');
154
+ const fallbackConfig = this.getFallbackConfig();
155
+ if (fallbackConfig) {
156
+ this._config = fallbackConfig;
157
+ this._isLoaded = true;
158
+ this.configSubject.next(fallbackConfig);
159
+ return of(fallbackConfig);
160
+ }
161
+ // Como alternativa, intentar leer desde window si está disponible
128
162
  if (typeof window !== 'undefined' && window.__RUNTIME_CONFIG__ && !this._isLoaded) {
163
+ console.log('🔧 [RuntimeConfigService SSR] Usando window.__RUNTIME_CONFIG__ como alternativa');
129
164
  this._config = window.__RUNTIME_CONFIG__;
130
165
  this._isLoaded = true;
131
166
  this.configSubject.next(this._config);
132
167
  return of(this._config);
133
168
  }
134
- // Si llegamos aquí en SSR sin config, es un error crítico
135
- console.error('❌ [RuntimeConfigService SSR] CRITICAL: window.__RUNTIME_CONFIG__ no está disponible');
136
- console.error(' [RuntimeConfigService SSR] El server.ts debe inyectar la configuración en el HTML');
137
- throw new Error('RuntimeConfig no disponible en SSR. Verifica que server.ts esté inyectando window.__RUNTIME_CONFIG__');
169
+ // Si no hay environment configurado, lanzar error
170
+ console.error('❌ [RuntimeConfigService SSR] No hay environment configurado. Agrega provideEnvironment() en app.config.ts');
171
+ throw new Error('RuntimeConfig no disponible. Configura provideEnvironment() en app.config.ts');
138
172
  }
139
173
  }
140
174
  /**
@@ -148,8 +182,9 @@ class RuntimeConfigService {
148
182
  */
149
183
  getApiUrl() {
150
184
  if (!this._config?.apiUrl) {
151
- console.error(' [RuntimeConfigService] getApiUrl() llamado sin configuración cargada');
152
- throw new Error('RuntimeConfig no está inicializado. Asegúrate de que provideRuntimeConfig() esté configurado correctamente.');
185
+ console.warn('⚠️ [RuntimeConfigService] getApiUrl() llamado sin configuración cargada, usando fallback');
186
+ const fallback = this.getFallbackConfig();
187
+ return fallback?.apiUrl || '';
153
188
  }
154
189
  return this._config.apiUrl;
155
190
  }
@@ -182,8 +217,9 @@ class RuntimeConfigService {
182
217
  */
183
218
  getChannel() {
184
219
  if (!this._config?.channel) {
185
- console.error(' [RuntimeConfigService] getChannel() llamado sin configuración cargada');
186
- throw new Error('RuntimeConfig no está inicializado. Asegúrate de que provideRuntimeConfig() esté configurado correctamente.');
220
+ console.warn('⚠️ [RuntimeConfigService] getChannel() llamado sin configuración cargada, usando fallback');
221
+ const fallback = this.getFallbackConfig();
222
+ return fallback?.channel || '';
187
223
  }
188
224
  return this._config.channel;
189
225
  }
@@ -206,7 +242,7 @@ class RuntimeConfigService {
206
242
  const cleanPath = path.startsWith('/') ? path.slice(1) : path;
207
243
  return `${frontendUrl}${cleanPath}`;
208
244
  }
209
- 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 });
245
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, deps: [{ token: PLATFORM_ID }, { token: i1.HttpClient }, { token: ENVIRONMENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
210
246
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, providedIn: 'root' });
211
247
  }
212
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RuntimeConfigService, decorators: [{
@@ -217,7 +253,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
217
253
  }], ctorParameters: () => [{ type: Object, decorators: [{
218
254
  type: Inject,
219
255
  args: [PLATFORM_ID]
220
- }] }, { type: i1.HttpClient }] });
256
+ }] }, { type: i1.HttpClient }, { type: undefined, decorators: [{
257
+ type: Optional
258
+ }, {
259
+ type: Inject,
260
+ args: [ENVIRONMENT_TOKEN]
261
+ }] }] });
221
262
 
222
263
  /**
223
264
  * Factory function para APP_INITIALIZER (OPTIMIZADA)