Skip to content

fix: clean console.logs in production - #122

Open
mfagundez-4geeks wants to merge 5 commits into
masterfrom
fix/token-leak-in-console-logs
Open

fix: clean console.logs in production#122
mfagundez-4geeks wants to merge 5 commits into
masterfrom
fix/token-leak-in-console-logs

Conversation

@mfagundez-4geeks

@mfagundez-4geeks mfagundez-4geeks commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

fix learnpack/learnpack#2111

Fuga de tokens en los logs de producción

El bundle exponía credenciales en la consola del navegador por dos vías: seis console.log que volcaban el rigoToken y el bc_token (uno de ellos, la respuesta completa del login), y los console.error que registraban el error de axios entero, arrastrando config.headers con la cabecera de autenticación. Agravado por minify: true (esbuild), que no elimina las llamadas a consola.

Se eliminan los seis console.log con credenciales y se añade el helper describeError (src/utils/logging.ts), que conserva mensaje, estado, método y URL, descarta siempre cabeceras y configuración, y redacta los parámetros de query sensibles (alguna petición lleva el token en la URL). Aplicado en los 11 archivos que manejan tokens.

Limpieza de console.logs en producción

vite.config.ts añade esbuild.pure para descartar console.log/debug/info y conservar console.error y console.warn.

Verificado sobre el bundle compilado: las cinco cadenas con token pasan de 1 a 0 apariciones y los mensajes de diagnóstico siguen presentes.

Seis console.log imprimian credenciales en la consola del navegador y
llegaban intactos al bundle de produccion, sin proteccion por DEV_MODE:

- store.tsx: la respuesta completa del login (rigoToken + usuario), el
  par token/bc_token, y el token de Rigobot en fetchExercises y getSession
- apiCalls.ts: el token en isPackageAuthor
- TestLatex.tsx: el token en testLatex

Son logs de depuracion sin valor operativo, asi que se eliminan.
…cacion

Volcar el error de axios entero con console.error("...", error) publica
error.config.headers en las devtools, y ahi viaja la cabecera de
autenticacion (Authorization o x-rigo-token). Era una fuga menos evidente
que los console.log, pero mucho mas extendida.

Se anade el helper describeError en src/utils/logging.ts, que conserva lo
util para soporte (mensaje, estado, metodo y URL) y descarta siempre
cabeceras, configuracion y request. Ademas redacta los parametros de query
sensibles, porque algunas peticiones llevan el token en la URL
(/v1/auth/me/token?breathecode_token=...). En los errores que no son de red
mantiene la traza, que ahi es el dato principal.

Se aplica en los 11 archivos que montan cabeceras con token. En telemetry
se elimina ademas el bloque que volcaba data, status y headers de la
respuesta por separado.
minify: true usa esbuild, que minifica pero no elimina las llamadas a
consola, asi que los mas de 400 console.log del proyecto viajaban intactos
al bundle. Se anade esbuild.pure para descartar console.log, console.debug
y console.info.

Se conservan console.error y console.warn a proposito: el IDE no tiene
Sentry, ni ErrorBoundary, ni window.onerror, asi que son su unico canal de
diagnostico y un drop global dejaria a soporte a ciegas.

Como pure habria silenciado varios diagnosticos reales que estaban escritos
como console.log, se promueven a console.error: los tres fallos de
telemetria (progreso que no se guarda), el fallo al cargar los ejercicios y
el fallo al inicializar RigoAI.
Cinco console.error/warn señalaban situaciones que el codigo ya resuelve
con una clausula de guarda (icono inexistente, enlace de YouTube sin id,
blob vacio, slug que no es string, grupo de quiz ausente). No describen
ninguna incidencia accionable para soporte y solo anaden ruido.

En store.tsx se unifica el catch de getSession, que hacia console.error(e)
sin contexto seguido de un console.log con el mensaje: ahora es una unica
llamada con mensaje y error saneado.
The comments introduced along with the token-leak fix were written in
Spanish, while the rest of the codebase documents itself in English.

Translates the JSDoc blocks and inline comments in src/utils/logging.ts
and vite.config.ts. No behaviour change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Limpiar logs en prod

1 participant