Aceptar el correo en MAYÚSCULAS y mostrar las cuentas como WOW1, no 17#1

Dos fallos que se juntaban justo en «recuperar nombre de cuenta»:

- La validación de Gmail era sensible a mayúsculas (`/@gmail\.com$/` sin la `i`),
  así que NOVAWOW86@GMAIL.COM se rechazaba con invalidEmail. Y desde que los
  correos muestran la cuenta en MAYÚSCULAS, quien la copiara de ahí y la pegara
  no podía recuperar la cuenta, ni registrarse, ni cambiar el correo: la misma
  regex estaba repetida en register/change-email/recover. Ahora es una sola, con
  la `i`, en lib/bnet.ts (junto a normalizeEmail). El dominio de un correo NO
  distingue mayúsculas.

- Los correos enseñaban el username interno («17#1»), que no le dice nada a
  nadie, en vez del nombre visible («WOW1»). Afectaba a DOS plantillas: la de
  nombres de cuenta y la de la lista de tokens. La conversión existía, pero como
  helper local de my-account; sube a lib/bnet.ts como `gameAccountDisplayName`
  (el inverso de `makeGameAccountUsername`) y la aplican las propias plantillas,
  para que ningún sitio que las use pueda olvidarse.

Verificado: la regex acepta las 3 variantes de caja y sigue rechazando no-Gmail;
los dos correos renderizados muestran «Cuenta: WOW1 / WOW2».

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 18:53:09 +00:00
parent edf1feedf6
commit c255724ebf
6 changed files with 29 additions and 17 deletions
+18
View File
@@ -147,6 +147,24 @@ export function makeGameAccountUsername(bnetId: number, index = 1): string {
return `${bnetId}#${index}`
}
/**
* Inverso de `makeGameAccountUsername` para enseñárselo al usuario: «15#1» → «WOW1».
* El número tras # es la cuenta de juego (WOW1…WOW8). El `15#1` es interno y no le
* dice nada a nadie.
*/
export function gameAccountDisplayName(username: string): string {
const i = username.indexOf('#')
return i >= 0 ? `WOW${username.slice(i + 1)}` : username
}
/**
* Solo se admiten cuentas de Gmail. Lleva la `i` a propósito: sin ella
* `NOVAWOW86@GMAIL.COM` se rechazaba, y es justo como sale el correo en los
* mensajes que enviamos, así que quien lo copiara de ahí no podía ni registrarse
* ni recuperar la cuenta. El dominio del correo NO distingue mayúsculas.
*/
export const GMAIL_RE = /^[a-zA-Z0-9._%+-]+@gmail\.com$/i
/**
* Cuentas de juego por cuenta Battle.net (WoW1…WoW8). Vive aquí, y no en la ruta
* que la aplica, para que el correo de activación cite el límite REAL: el texto