Dialog.Portal intenta instanciar clases del DOM durante SSR causando
'Class constructors cannot be invoked without new' en GET /dashboard.
El diálogo es puramente client-side, no necesita renderizado en servidor.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
No hay opción en el modal que lo llame. Solo existen las 8 interfaces
del select y los 4 regímenes de importación XML_RB_SYSTEMS.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Todos los métodos del archivo usaban fetch() directo con localStorage,
bypaseando el silent refresh automático. Ahora todos usan api.post()/api.get()
de $lib/api para manejo uniforme de 401 → refresh → retry en toda la interfaz.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Los 4 métodos XML RB Systems usaban fetch() con localStorage, bypaseando
el fetchApi() de $lib/api que tiene 401 → silent refresh → retry automático.
Ahora el token expirado se renueva de forma transparente sin interrumpir al usuario.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Detecta respuestas 401 en los 4 métodos XML RB Systems (impo-temp, impo-def,
impo, expo) y lanza un mensaje claro en lugar del error genérico de generación.
Además elimina entry_port/exit_port del tipo de request de exportación.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Para exportación los puertos vienen del manifiesto en BD (entry_port/foreign_exit_port),
no del request. El selector de puertos ahora solo aparece cuando movementType === 'Importacion'.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Títulos y subtítulos de goods, pedimentos, customs_brokers, users, admin/roles, settings, account, reports
- Componente Maintenance (cubre 6 páginas de export)
- Corrección de imports de m faltantes en fixed-asset-classes y tariff-fractions/american
- Nuevas claves common (botones, subtítulos, títulos de página)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Restaura la construcción correcta de URLSearchParams en getSignatures,
eliminando el spread de filters inválido y el cierre de objeto roto.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Changed health check URL from localhost:8000 to localhost:3467 in Jenkinsfile.
- Reduced wait times in various e2e tests to improve performance and responsiveness.
- Cleaned up logging in middleware.py by removing unnecessary log statement.
These changes aim to enhance the CI pipeline efficiency and streamline the testing process.
En /dashboard/goods/parts/edit/new, +page.svelte abre un AlertDialog
"Aviso" cuando agentsCount === 0 || clientsCount === 0. En CI con DB
limpia (sin agentes ni clientes seedeados) esto es siempre el caso:
el overlay del modal intercepta los clicks del form y "Guardar"
falla por timeout.
El test ahora detecta el modal después de navegar a /new y clickea
"Aceptar" para cerrarlo y continuar con el flujo (Cancelar te saca
del editor, no sirve).
Ver routes/dashboard/goods/parts/edit/[[id]]/+page.svelte:29-38.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
docker-compose.prod.yml:
- Agrega SITE_URL=https://anexo76-dev.aduanasoft.com hardcodeado (no depende
del .env raíz). resolveSystemBaseUrl() lo usa como fallback cuando
ORIGIN tiene un valor localhost que pisó el default del compose.
- Agrega VITE_HUB_URL=https://workspace.aduanasoft.com para que
getWorkspaceBaseUrl() no dependa de VITE_HUB_URL del .env raíz dev.
- Documenta el problema: root .env con ORIGIN=localhost pisa el default.
Dockerfile.prod:
- Agrega ARG/ENV VITE_KEYCLOAK_REALM (faltaba en los build-args de Jenkins).
- Agrega ARG/ENV VITE_HUB_URL con default workspace.aduanasoft.com.
.env.example raíz:
- Agrega advertencia sobre ORIGIN, VITE_HUB_URL y APP_PUBLIC_URL con
instrucciones explícitas de cómo corregirlos en producción.
- Extrae estos valores al bloque documentado para que sean visibles.
Root cause: el deploy en producción ejecuta
docker compose -f docker-compose.prod.yml up
que carga automáticamente el .env raíz con ORIGIN=http://localhost:5173,
pisando el default correcto del prod compose.
url.origin en SvelteKit = localhost:5173 → redirect_uri con localhost.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- workspace-auth.ts: reemplaza isInternalOnlyHost por isDevOnlyUrl que
incluye localhost/127.0.0.1 e IPs LAN además de hostnames Docker.
getWorkspaceBaseUrl() y getPublicKeycloakBaseUrl() ya ignoran valores
dev-only; no usan VITE_KEYCLOAK_URL=http://localhost:... en prod.
- Nuevo resolveSystemBaseUrl(): cuando url.origin es localhost porque
ORIGIN env var apunta a localhost en producción, busca SITE_URL/APP_URL
como fallback para construir redirect_uri seguros.
- buildKeycloakAuthorizationUrl() y buildKeycloakLoginUrl() usan
resolveSystemBaseUrl() para el redirect_uri (evita localhost:5173).
- auth/callback/+page.server.ts: idem para el redirectUri del token exchange.
- auth.ts (cliente): resolveKeycloakUrl() detecta en runtime si
VITE_KEYCLOAK_URL bakeado apunta a localhost pero el browser NO está
en localhost → deriva la URL del hostname real del browser.
- .env.example: documenta vars de producción recomendadas (SITE_URL,
ORIGIN, VITE_HUB_URL) con advertencias sobre el efecto de ORIGIN.
Root cause: el .env de dev (ORIGIN=http://localhost:5173,
VITE_KEYCLOAK_URL=http://localhost:8085/kcauth) se usaba en producción
sin sobrescribir estas variables, causando que KC generara URLs con
localhost como redirect_uri y KC URL.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>