Conversation
`renderLogin` se quedó sin llamadas cuando el setup pasó a ser cuatro pasos bajo el banner (helmcode#19): donde antes se dibujaba aquella pantalla, `View` dibuja ahora `renderWizard`. Con el wizard puesto la vieja no se alcanza, y las dos entradas del login - `startLogin` y `linkSentMsg` - lo ponen, así que en el flujo normal no hay estado en el que se vea; la única excepción es una respuesta que llegue después de un esc, que deja `loginStage` puesto con el wizard apagado y no dibuja ninguna pantalla. Ese estado ya estaba antes de este cambio y esto no lo toca. Su test seguía pasando porque llamaba al renderer a mano, que es la única forma de que un test esté verde y equivocado a la vez, y por eso afirmaba sobre "Step 1 of 2" y "Nothing arrived? esc, then s to start again", dos textos que hoy no ve nadie: el panel enseña el wizard y el pie dice "enter to continue esc to leave setup". El test pasa a preguntarle a `View`, y a mover el flujo con el mismo mensaje que lo mueve de verdad, `linkSentMsg`. Romper el título del paso 2, el prompt `Paste the link:`, la transición de estado o el número de minutos lo hacen fallar ahora; comprobado mutando cada uno por separado.
Un miembro reportó que el correo con el enlace tardó más de cinco minutos. El CLI no tenía nada que decir sobre eso: decía "the link works once" y se quedaba esperando el pegado, sin mencionar que el enlace vence a los 15 minutos - la pantalla de login de la plataforma lo dice, "It expires in 15 minutes and can only be used once" - así que un correo que llega tarde llega muerto, y quien lo espera no tiene cómo saberlo. Y cuando vencía, el motivo se aplanaba: `invalid_link` cubre a la vez un enlace vencido y uno ya gastado, y en pantalla salía "the link did not work: invalid link", que no dice ni qué pasó ni qué hacer. Medido contra la plataforma, un token que la API rechaza responde 302 a /access-denied?reason=invalid_link. Ahora los dos motivos que tienen respuesta la traen - pedir otro enlace, copiar el enlace entero - y un motivo que este binario no conozca se sigue diciendo. El número vive en un solo sitio, `auth.LinkValidity`, porque lo dicen las dos mitades del flujo: `nan auth login` y el panel.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Instalé el CLI desde la documentación de nan.builders y probé
nan auth login: me pidió el correo y el enlace tardó más de cinco minutos; a la segunda vez llegó en segundos. Investigué el caso: el retraso no es de este repo, pero el camino dejó dos cosas que sí lo son.El retraso, medido (y por qué no hay nada que arreglar aquí)
POST /api/auth/login/requestresponde202 {"accepted":true}en 0.30–0.72 s (cuatro sondas).nan auth logincon la entrada guionada imprime sus dos prompts y termina en 370–800 ms.RequestSignInLinktiene un timeout de 30 s, hace un único POST por ejecución (dos call sites en todo el repo, sin bucles) y después solo espera el pegado./api/auth/login/statusy/api/auth/login/pollresponden 404.Un 202 rápido prueba que este proceso no esperó, no que el correo haya salido: lo que tardó fue la ruta de correo de la plataforma. Lo que sí se puede arreglar aquí es lo que ese retraso deja al descubierto: el CLI no decía cuánto dura el enlace.
1.
fix(auth): el enlace vence a los 15 minutos, y tampoco lo decíamos cuando ya había vencidoLa pantalla de login de la plataforma dice "We sent a sign-in link to … It expires in 15 minutes and can only be used once". El CLI decía
the link works oncey nada más, así que quien espera cinco minutos está corriendo contra un reloj que no le dijimos: un correo que llega tarde llega muerto.Y cuando el enlace vencía, el motivo se aplanaba: medido contra la plataforma, un token que la API rechaza responde
302 → https://cloud.nan.builders/access-denied?reason=invalid_link, y en pantalla salíathe link did not work: invalid link, un slug que no dice ni qué pasó ni qué hacer justo para la persona a la que le pasa esto. Ahora los dos motivos que tienen respuesta la traen, y un motivo que este binario no conozca se sigue diciendo igual que antes.El número vive en un solo sitio,
auth.LinkValidity, porque lo dicen las dos mitades del flujo:nan auth loginy el panel.2.
refactor(tui): la mitad de la pantalla de login no se dibujabarenderLoginse quedó sin llamadas cuando el setup pasó a ser cuatro pasos bajo el banner (#19): donde antes se dibujaba,ViewdibujarenderWizard. Su test seguía pasando porque llamaba al renderer a mano — la única forma de que un test esté verde y equivocado a la vez — y por eso afirmaba sobreStep 1 of 2yNothing arrived? esc, then s to start again, dos textos que hoy no ve nadie: el panel enseña el wizard y el pie diceenter to continue esc to leave setup.El test pasa a preguntarle a
View, y a mover el flujo con el mismo mensaje que lo mueve de verdad,linkSentMsg.Lo que NO hace
Paste the link:: sigue siendonothing pastedy salida 1. La tentación era que un Enter vacío pidiera otro enlace, y es un amplificador de correo: cada Enter sería un POST nuevo, sin tope ni cooldown (el 429 solo devuelve error), y reusarlinkSentMsgpara eso deja el estado roto (vuelve aloginAskEmailsin restaurar prompt ni placeholder, con el campo en eco normal llevando una credencial). Si algún día quieres un--resend, va con tope explícito y por su propio camino.--emailni--link, que ya son la vía de recuperación — y la que la propia plataforma documenta: "Request a new one from the login page".Verificación
gofmt -l .limpio,go vet ./...limpio ygo test ./... -count=1verde en cada uno de los dos commits por separado, no solo en la punta.Paste the link:, la transición delinkSentMsgo cambiarLinkValiditya 20 minutos lo hacen fallar (comprobado mutando cada uno en una copia aparte).nothing pastedy saliendo 1 con la línea vacía, comparado contra el binario anterior.Encontrado de paso, fuera del alcance de este PR
escmientras la petición del enlace está en vuelo,cancelLoginapaga el wizard, y la respuesta que llega después vuelve a ponerloginStagesin wizard:Viewno dibuja ninguna pantalla de login y las teclas se las come el input escondido hasta un segundoesc. Existe igual antes y después de este PR (lo encontró la verificación de este cambio) y no lo toco aquí para no mezclar un arreglo de comportamiento con un borrado de código muerto.docs/PROJECT_OVERVIEW.mdestá desactualizado: describe el flujo Discord OAuth retirado y un paqueteinternal/browser/que ya no existe.github.com/nxssie/nan-climientras el remoto, el README y el CONTRIBUTING dicenhelmcode/nan-cli.