Entornos y configuración
Archivos de entorno
El código importa environment desde src/environments/environment (por ejemplo src/app/core/services/api/auth.service.ts). En el build de producción angular.json reemplaza src/environments/environment.ts por src/environments/environment.prod.ts (fileReplacements).
:::caution Los archivos no están en el repositorio
.gitignore excluye /src/environments/*, así que ni environment.ts ni environment.prod.ts existen en el árbol versionado. Cada persona o pipeline debe crearlos. main.ts lee environment.production para llamar a enableProdMode().
:::
Claves leídas por el código
Obtenidas con una búsqueda de environment.<clave> en src/app:
| Clave | Usada en | Descripción |
|---|---|---|
production | main.ts | Habilita el modo de producción de Angular |
apiUrl | 43 referencias en servicios de API | Base de la API REST (incluye /api/v1 en los ejemplos del Dockerfile) |
socketUrl | chat-socket.service.ts, internal-chat-socket.service.ts | Base del servidor Socket.IO; los sockets se conectan a <socketUrl>/chat |
fileUrl | image-load.service.ts | Base para construir URLs de imágenes |
apiReportsUrl | report.service.ts | API de reportes (heredada) |
AES_GCM_AAD | encryption.service.ts | AAD opcional del cifrado híbrido |
PUBLIC_KEY_FINGERPRINT | encryption.service.ts | Huella SHA-256 esperada de la clave pública del backend |
allowedParentOrigins | frame-bridge.service.ts | Lista de orígenes permitidos para postMessage en modo iframe (ver Frame) |
Los valores son configuración del despliegue; no se documentan aquí. Para las dependencias que consumen estas claves (node-forge, crypto-js, socket.io-client) ver Librerías.
Plantilla de referencia
export const environment = {
production: false,
apiUrl: '<URL de la API>/api/v1',
socketUrl: '<URL del servidor de sockets>',
fileUrl: '<URL de archivos>',
apiReportsUrl: '<URL de reportes>',
AES_GCM_AAD: '<opcional>',
PUBLIC_KEY_FINGERPRINT: '<huella SHA-256>',
allowedParentOrigins: ['<origen del padre>'],
};
Inconsistencias observadas
- El workflow
.github/workflows/main-aws.ymlgenera unenvironment.prod.tsconproduction,apiUrl,casinoUrl,fileUrl,siteUrl,betResolverUrl,AES_GCM_AAD,PUBLIC_KEY_FINGERPRINTyapiReportsUrl. No incluyesocketUrlniallowedParentOrigins, que el código sí lee;casinoUrl,siteUrlybetResolverUrlno se referencian ensrc/app. Un build hecho con ese archivo no tendríasocketUrldefinido. - El
Dockerfilereescribe conseddos URLs literales dentro deenvironment.prod.ts(la de la API con/api/v1y la base del socket). Eso presupone que el archivo ya existe en el contexto de build con esos valores de ejemplo; ver Build y despliegue. StorageServicecifra la sesión con una clave fija en el código fuente (storage.service.ts), no con una variable de entorno. Es ofuscación, no un secreto.
Otras configuraciones
| Archivo | Contenido |
|---|---|
angular.json | outputPath: dist/backoffice, presupuestos de 9 MB (initial y anyComponentStyle), allowedCommonJsDependencies |
tsconfig.json | strict, strictTemplates, noImplicitReturns, target ES2022 |
.prettierrc | singleQuote, tabWidth: 2, printWidth: 100, trailingComma: es5, bracketSameLine |
.gitleaks.toml | Reglas por defecto de gitleaks + regla de secretos literales (ver Testing y calidad) |