From 68b21040c6e823b038c2e30410288a225c680f6c Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Thu, 30 Jul 2026 16:24:53 +0100 Subject: [PATCH 1/8] fix(auth): clear OTP inputs after resend --- .changeset/clear-otp-boxes-on-resend.md | 9 +++++++ e2e/step-definitions/auth.steps.ts | 24 +++++++++++++++++++ features/passwordless-authentication.feature | 4 +++- .../auth-service/src/routes/login-page.ts | 4 ++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 .changeset/clear-otp-boxes-on-resend.md diff --git a/.changeset/clear-otp-boxes-on-resend.md b/.changeset/clear-otp-boxes-on-resend.md new file mode 100644 index 00000000..c77f8681 --- /dev/null +++ b/.changeset/clear-otp-boxes-on-resend.md @@ -0,0 +1,9 @@ +--- +'ePDS': patch +--- + +Clicking "Resend code" now empties the digit boxes for the new code. + +**Affects:** End users + +**End users:** if you started typing your sign-in code, realised you'd made a mistake, and clicked **Resend code**, the boxes still held the digits you had typed. You had to delete them yourself before you could enter the fresh code. The boxes now reset on Resend so you can just type the new code straight away. diff --git a/e2e/step-definitions/auth.steps.ts b/e2e/step-definitions/auth.steps.ts index 2e18271c..4390a3a9 100644 --- a/e2e/step-definitions/auth.steps.ts +++ b/e2e/step-definitions/auth.steps.ts @@ -625,6 +625,15 @@ Then( }, ) +When( + 'the user enters two digits from the old OTP', + async function (this: EpdsWorld) { + const otpBoxes = getPage(this).locator('.otp-box') + await otpBoxes.nth(0).fill('1') + await otpBoxes.nth(1).fill('2') + }, +) + When( 'the user requests a new OTP via the resend button', async function (this: EpdsWorld) { @@ -665,6 +674,21 @@ Then( }, ) +Then( + 'the OTP entry boxes are empty with the first box focused', + async function (this: EpdsWorld) { + if (!this.otpCode) { + throw new Error('No fresh OTP was captured from the mail trap') + } + const otpBoxes = getPage(this).locator('.otp-box') + await expect(otpBoxes).toHaveCount(this.otpCode.length) + for (let index = 0; index < this.otpCode.length; index += 1) { + await expect(otpBoxes.nth(index)).toHaveValue('') + } + await expect(otpBoxes.first()).toBeFocused() + }, +) + // --------------------------------------------------------------------------- // Refresh / idempotency scenario // --------------------------------------------------------------------------- diff --git a/features/passwordless-authentication.feature b/features/passwordless-authentication.feature index 1492e1a9..05c74e3d 100644 --- a/features/passwordless-authentication.feature +++ b/features/passwordless-authentication.feature @@ -265,8 +265,10 @@ Feature: Passwordless authentication via email OTP And the user enters the OTP code Then the verification form shows an "OTP expired" error And the OTP entry boxes are visible and enabled - When the user requests a new OTP via the resend button + When the user enters two digits from the old OTP + And the user requests a new OTP via the resend button Then a fresh OTP email arrives in the mail trap for the test email + And the OTP entry boxes are empty with the first box focused When the user enters the OTP code And the user picks a handle Then the browser is redirected back to the demo client diff --git a/packages/auth-service/src/routes/login-page.ts b/packages/auth-service/src/routes/login-page.ts index 14416e38..c2d47f5d 100644 --- a/packages/auth-service/src/routes/login-page.ts +++ b/packages/auth-service/src/routes/login-page.ts @@ -1324,6 +1324,10 @@ export function renderLoginPage(opts: { if (result.error) { showError(result.error); } else { + // Clear any characters typed for the old code so the new code + // starts from a clean, focused input grid. + clearOtpBoxes(); + if (otpBoxes.length) otpBoxes[0].focus(); showSuccess('Code resent!'); } }); From a608f775190395c580ddc5b8c7f3f888ce49e4b3 Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Thu, 30 Jul 2026 22:45:18 +0100 Subject: [PATCH 2/8] test(e2e): assert old OTP digits land before resend The "boxes are empty after resend" assertion only proves the reset happened if the boxes held something beforehand. Without this check a regression that cleared or ignored input *before* resend would still satisfy the final empty-state assertion. Suggested by CodeRabbit in review of #220. Co-Authored-By: Claude Opus 5 (1M context) --- e2e/step-definitions/auth.steps.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/e2e/step-definitions/auth.steps.ts b/e2e/step-definitions/auth.steps.ts index 4390a3a9..58f0e36d 100644 --- a/e2e/step-definitions/auth.steps.ts +++ b/e2e/step-definitions/auth.steps.ts @@ -631,6 +631,11 @@ When( const otpBoxes = getPage(this).locator('.otp-box') await otpBoxes.nth(0).fill('1') await otpBoxes.nth(1).fill('2') + // Prove the digits actually landed, so the later empty-box assertion + // demonstrates that resend cleared them rather than that they were + // never entered. + await expect(otpBoxes.nth(0)).toHaveValue('1') + await expect(otpBoxes.nth(1)).toHaveValue('2') }, ) From b7329a21e394f01cfae4dfd9c6794ea45395878f Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Mon, 3 Aug 2026 20:15:28 +0100 Subject: [PATCH 3/8] feat(auth): warn on resend that earlier codes are dead MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resending an OTP invalidates every earlier one, but the UI never said so. A user holding two code emails had no way to tell which one the form would accept, and the natural guess — the one that arrived first and is higher up the inbox — is the wrong one. The spam-folder hint has the same shape: it only helps someone whose mail has not arrived, which is a minority of sign-ins. Both facts are noise for the user who signs in on the first code, so neither belongs in permanently-visible page copy. Clicking "Resend code" is the signal that the user is struggling, so the resend confirmation carries both: Use the new code; earlier ones no longer work. It may be in your spam folder. This replaces "Code resent!", which restated what the click already confirmed. The message renders in the existing flash region, which is a persistent role="status" live region rather than a toast, so the longer copy is announced to assistive tech and stays on screen until the next action clears it. Supersedes #221, which added the spam hint as a permanent line under the code boxes. The --muted-foreground contrast bump that #221 carried to make that 13px line pass WCAG AA is no longer needed here and will land separately on its own accessibility merit. Co-Authored-By: Claude Opus 5 (1M context) --- .changeset/clear-otp-boxes-on-resend.md | 4 ++-- packages/auth-service/src/routes/login-page.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.changeset/clear-otp-boxes-on-resend.md b/.changeset/clear-otp-boxes-on-resend.md index c77f8681..65ab35fd 100644 --- a/.changeset/clear-otp-boxes-on-resend.md +++ b/.changeset/clear-otp-boxes-on-resend.md @@ -2,8 +2,8 @@ 'ePDS': patch --- -Clicking "Resend code" now empties the digit boxes for the new code. +Asking for a new sign-in code now clears the boxes and tells you the old code has stopped working. **Affects:** End users -**End users:** if you started typing your sign-in code, realised you'd made a mistake, and clicked **Resend code**, the boxes still held the digits you had typed. You had to delete them yourself before you could enter the fresh code. The boxes now reset on Resend so you can just type the new code straight away. +**End users:** the boxes reset on **Resend code**, so a half-typed old code no longer has to be deleted by hand before you can type the new one. The confirmation message that replaces "Code resent!" also warns that only the newest code will be accepted, and points at the spam folder — the two things most likely to be going wrong for anyone who got as far as resending. diff --git a/packages/auth-service/src/routes/login-page.ts b/packages/auth-service/src/routes/login-page.ts index c2d47f5d..19b41fad 100644 --- a/packages/auth-service/src/routes/login-page.ts +++ b/packages/auth-service/src/routes/login-page.ts @@ -1328,7 +1328,14 @@ export function renderLoginPage(opts: { // starts from a clean, focused input grid. clearOtpBoxes(); if (otpBoxes.length) otpBoxes[0].focus(); - showSuccess('Code resent!'); + // Both facts only matter once a resend has happened, so they + // live here rather than in permanently-visible page copy: + // sending a new OTP invalidates every earlier one, and a user + // who needed to resend is the user whose mail may be in spam. + showSuccess( + 'Use the new code; earlier ones no longer work. ' + + 'It may be in your spam folder.', + ); } }); From 657acbd2269f18e918e8e943c7307bdd280368ac Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Mon, 3 Aug 2026 20:24:09 +0100 Subject: [PATCH 4/8] test(auth): pin the resend message's two warnings The resend confirmation carries two facts that a refactor could quietly drop while leaving the flow working: that earlier codes stop working, and that the mail may be in spam. Both were deliberately moved out of permanently-visible page copy, so nothing else on the page asserts them. Pin them by slicing the resend handler out of the rendered page, in the style of the surrounding abortIfFlowDead tests, and assert the success branch has not regressed to a bare "Code resent!". Verified the test fails when the message is reverted, rather than passing vacuously. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/__tests__/login-page.test.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/auth-service/src/__tests__/login-page.test.ts b/packages/auth-service/src/__tests__/login-page.test.ts index 32cb57c2..94ad2096 100644 --- a/packages/auth-service/src/__tests__/login-page.test.ts +++ b/packages/auth-service/src/__tests__/login-page.test.ts @@ -723,6 +723,28 @@ describe('renderLoginPage flow-aborted notice + reactive abort gates', () => { expect(branchSlice).toContain('showFlowAbortedNotice();') }) + it('tells the user on resend that earlier codes are dead', () => { + const html = renderDefault() + // Resending invalidates every earlier OTP, and a user who got as + // far as resending may have mail sitting in spam. Both facts are + // noise for the majority who sign in on the first code, so they + // live in the resend confirmation rather than in permanently + // visible page copy — which is what makes this worth pinning: a + // refactor that "tidies" the message back to a bare + // acknowledgement silently loses both. + const handlerStart = html.indexOf("'btn-resend').addEventListener") + expect(handlerStart).toBeGreaterThan(0) + const handlerEnd = html.indexOf( + "'btn-back').addEventListener", + handlerStart, + ) + const handlerBody = html.slice(handlerStart, handlerEnd) + expect(handlerBody).toContain('earlier ones no longer work') + expect(handlerBody).toContain('spam folder') + // The success branch must not regress to a bare acknowledgement. + expect(handlerBody).not.toContain("showSuccess('Code resent!')") + }) + it('gates the Resend click on abortIfFlowDead', () => { const html = renderDefault() // The Resend click handler must call abortIfFlowDead and From 50c8620896d8c797ab629467e09701d983426468 Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Tue, 4 Aug 2026 15:45:07 +0100 Subject: [PATCH 5/8] fix(auth): show sign-in errors at the point of failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The flash region sat above the heading, so a rejected code reported itself several elements away from the boxes the user had just typed into — past the subtitle and, when configured, the social buttons. The user's attention is at the input; the message was not. It also left Verify sitting immediately below the boxes looking like the thing to press again, when pressing it unchanged fails identically. Move the region between the boxes and Verify. The email step gets the same treatment for the same reason: a send failure now reads under the field that caused it. Keep it as ONE element rather than one per step, so there is still exactly one aria-live region for a screen reader to track. It is server-rendered into whichever step is initially visible and reparented on transition. Both transitions already call clearError() before switching, so the region is empty whenever it moves — moving a populated live region across parents can re-announce or drop the message depending on the screen reader. Verify stays put and stays enabled: the boxes are cleared and refocused after a failure, so retyping and pressing it is the intended recovery. Separately, wire an inline "Resend code" action into the code-invalidated branch. 3d31876 deliberately kept every non-expired error on the plain path so a typo wouldn't carry a resend CTA, and that reasoning still holds for a typo. But it does not hold for "too many attempts", which deletes the stored code server-side (better-auth 1.4.18, per the note in better-auth.ts) — there is nothing left to retype, so resending is the only route forward. Gated on parLikelyDead() to match refreshResendVisibility(), which hides the standalone Resend button in that state. Tests: pin that exactly one flash region renders, that it sits between the boxes and Verify, and that the invalidated branch offers the inline action while a plain typo does not. Verified each fails when the corresponding change is reverted. Co-Authored-By: Claude Opus 5 (1M context) --- .../sign-in-errors-at-point-of-failure.md | 11 +++ .../src/__tests__/login-page.test.ts | 56 ++++++++++++-- .../auth-service/src/routes/login-page.ts | 75 ++++++++++++++++++- 3 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 .changeset/sign-in-errors-at-point-of-failure.md diff --git a/.changeset/sign-in-errors-at-point-of-failure.md b/.changeset/sign-in-errors-at-point-of-failure.md new file mode 100644 index 00000000..fdbd818d --- /dev/null +++ b/.changeset/sign-in-errors-at-point-of-failure.md @@ -0,0 +1,11 @@ +--- +'ePDS': patch +--- + +Sign-in error messages now appear next to the field that caused them, instead of at the top of the page. + +**Affects:** End users + +**End users:** a rejected sign-in code used to report the problem above the page heading, several elements away from the boxes you had just typed into — easy to miss, and it left the **Verify** button looking like the thing to press again. The message now sits directly between the code boxes and **Verify**, and a failed email submission likewise reads under the email field rather than above it. + +When the code is rejected because of too many wrong attempts, the message now carries a **Resend code** link beside it. That case wipes the stored code, so retyping cannot work and a fresh code is the only way forward; the standalone **Resend code** button below the form was easy to overlook. A simple mistyped code is unchanged — the boxes clear and refocus so you can just type it again. diff --git a/packages/auth-service/src/__tests__/login-page.test.ts b/packages/auth-service/src/__tests__/login-page.test.ts index 94ad2096..03b862ad 100644 --- a/packages/auth-service/src/__tests__/login-page.test.ts +++ b/packages/auth-service/src/__tests__/login-page.test.ts @@ -500,7 +500,9 @@ describe('renderLoginPage handle login button', () => { // tests pin its structure so accidental refactors (removing the guard, // moving it after the fetch, resetting the flag unconditionally on // success) fail loudly. -function renderDefault(): string { +type LoginPageOpts = Parameters[0] + +function renderDefault(overrides: Partial = {}): string { return renderLoginPage({ flowId: 'flow-1', clientId: 'https://example.com/client-metadata.json', @@ -518,6 +520,7 @@ function renderDefault(): string { otpLength: 6, otpCharset: 'numeric', heartbeatEnabled: false, + ...overrides, }) } @@ -618,13 +621,54 @@ describe('renderLoginPage inline Resend action on expired OTP', () => { expect(html).toContain("document.getElementById('btn-resend').click()") }) - it('falls back to the plain showError on non-expired errors', () => { + it('renders exactly one flash region, inside the active step', () => { + // One element, so there is only ever one aria-live region for a + // screen reader to track; it is reparented between the two slots + // on step transitions rather than duplicated. + const emailStep = renderDefault() + expect(emailStep.match(/id="error-msg"/g)).toHaveLength(1) + expect(emailStep).toMatch(/flash-slot-email">
{ const html = renderDefault() - // The non-expired branch must NOT route through - // showErrorWithAction (otherwise an "Invalid code" message - // would carry an inappropriate "Send a new code" link). + // Position is the point of the slot: a rejected code must read at + // the input the user just filled, not above the subtitle. + const boxes = html.indexOf('id="otp-boxes"') + const slot = html.indexOf('id="flash-slot-otp"') + const verify = html.indexOf('>Verify<') + expect(boxes).toBeGreaterThan(-1) + expect(slot).toBeGreaterThan(boxes) + expect(verify).toBeGreaterThan(slot) + }) + + it('falls back to the plain showError on a merely-wrong code', () => { + const html = renderDefault() + // A typo must NOT carry a resend CTA: the boxes are cleared and + // refocused, so retyping is the intended recovery. The final else + // — reached when the error is neither expired nor code- + // invalidating — stays on the plain path. + expect(html).toMatch(/\} else \{\s*showError\(result\.error\);\s*\}/) + }) + + it('offers an inline resend when the stored code was invalidated', () => { + const html = renderDefault() + // "Too many attempts" deletes the stored code server-side, so + // there is nothing left to retype and resending is the only route + // forward — unlike a typo, which the plain path above covers. + expect(html).toMatch( + /needsFreshCode\s*=\s*\/too many attempts\|invalidated\/i/, + ) expect(html).toMatch( - /if \(isExpired\) \{[\s\S]*?\} else \{[\s\S]*?showError\(result\.error\);\s*\}/, + /else if \(needsFreshCode && !parLikelyDead\(\)\)[\s\S]*?showErrorWithAction\(\s*result\.error,\s*'Resend code'/, ) }) }) diff --git a/packages/auth-service/src/routes/login-page.ts b/packages/auth-service/src/routes/login-page.ts index 19b41fad..4cfe7bc5 100644 --- a/packages/auth-service/src/routes/login-page.ts +++ b/packages/auth-service/src/routes/login-page.ts @@ -559,6 +559,14 @@ export function renderLoginPage(opts: { const hasGithub = 'github' in socialProviders const hasSocialProviders = hasGoogle || hasGithub + // The flash region is a single element shared by both steps, so there + // is only ever one live region for assistive tech to track. It is + // server-rendered into whichever step is initially visible and moved + // between the two slots on step transitions; both transitions call + // clearError() first, so it is always empty when it moves. + const flashRegionHtml = + '' + // Social login buttons — redirect to better-auth provider endpoints const socialButtonsHtml = hasSocialProviders ? ` @@ -662,8 +670,6 @@ export function renderLoginPage(opts: { ${logoHtml}

${opts.initialStep === 'otp' ? 'Enter your code' : 'Sign in'}

- - ${socialButtonsHtml} @@ -677,6 +683,11 @@ export function renderLoginPage(opts: { value="${escapeHtml(opts.loginHint)}">
${renderEmailTypoGuardMarkup()} + +
${opts.initialStep === 'otp' ? '' : flashRegionHtml}
${handleLoginButtonHtml} @@ -704,6 +715,12 @@ export function renderLoginPage(opts: { ) .join('\n ')}
+ +
${opts.initialStep === 'otp' ? flashRegionHtml : ''}
@@ -1078,6 +1095,25 @@ export function renderLoginPage(opts: { }); } + /** + * Reparent the single flash region into the active step's slot, + * so a message always renders at the point of failure — under + * the email field on the email step, between the code boxes and + * Verify on the OTP step. + * + * Callers must clearError() first: moving a *populated* live + * region across parents can re-announce or drop the message + * depending on the screen reader. Both step transitions already + * clear before switching, so the region is empty whenever it + * moves here. + */ + function moveFlashTo(slotId) { + var slot = document.getElementById(slotId); + if (slot && errorEl && errorEl.parentNode !== slot) { + slot.appendChild(errorEl); + } + } + function clearError() { // Empty the region before hiding it. Clearing after the // display:none would mutate a region that is already out of @@ -1138,6 +1174,7 @@ export function renderLoginPage(opts: { clearOtpBoxes(); if (otpBoxes.length) otpBoxes[0].focus(); clearError(); + moveFlashTo('flash-slot-otp'); startHeartbeat(); refreshResendVisibility(); } @@ -1148,6 +1185,7 @@ export function renderLoginPage(opts: { headingEl.textContent = 'Sign in'; if (termsEl) termsEl.style.display = 'block'; clearError(); + moveFlashTo('flash-slot-email'); stopHeartbeat(); // Reset the email field — the user clicked "Use different // email" precisely to escape the previous value, so leaving @@ -1269,6 +1307,13 @@ export function renderLoginPage(opts: { // expired code") and the auth-service wording ("OTP // expired") plus generic "expir"/"too long" variants. var isExpired = /expir|too long/i.test(result.error); + // "Too many attempts" invalidates the stored code, so the + // user has nothing left to retype and a resend is the only + // route forward. Matched separately from isExpired because + // the wording shares no substring with it. + var needsFreshCode = /too many attempts|invalidated/i.test( + result.error, + ); if (isExpired) { // Only offer "Send a new code" when the PAR is still // alive. If it isn't, a fresh OTP would issue but @@ -1285,6 +1330,32 @@ export function renderLoginPage(opts: { document.getElementById('btn-resend').click(); }); } + } else if (needsFreshCode && !parLikelyDead()) { + // A rejected or invalidated code is the other case a + // fresh one actually fixes, so it gets the same inline + // shortcut as the expired path, for the same reason: + // the standalone Resend button sits below the form and + // is easy to miss. + // + // 3d31876 originally kept every non-expired error on the + // plain path so a typo wouldn't carry a "Send a new + // code" CTA. That reasoning holds for a typo — the user + // should retype, and the boxes are already cleared and + // focused for exactly that — but not for "too many + // attempts", which deletes the stored code server-side + // (better-auth 1.4.18 email-otp/routes.mjs, per the note + // in better-auth.ts). After a lockout there is no code + // left to retype, so resending is the only way forward. + // + // Gated on parLikelyDead() because + // refreshResendVisibility() hides the standalone Resend + // button in that state; surfacing an inline one anyway + // would re-offer an action the page has deliberately + // withdrawn. The aborted-flow notice carries its own + // restart action, so nothing is lost by staying quiet. + showErrorWithAction(result.error, 'Resend code', function() { + document.getElementById('btn-resend').click(); + }); } else { showError(result.error); } From e9977abd2cb28d51513c4edb36b9f5317822ff9d Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Tue, 4 Aug 2026 15:54:45 +0100 Subject: [PATCH 6/8] fix(auth): confirm the resend, and hide the flash by class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two review points from #220. Resend copy (@aspiers): lead with "Resent!" so the message confirms the click before it warns. Dropping the acknowledgement entirely left the user to infer from the warning alone that anything had happened. Flash visibility (CodeRabbit): the region carried a hard-coded inline display:none, which the surrounding code avoids — .step-otp.active and .step-email.hidden both gate visibility by class. Add .flash-msg.hidden and toggle it in setFlash()/clearError() instead. The inline style was pre-existing rather than introduced here, but this commit moved the markup, so it is the right point to fix it. Also reword the clearError() comment, which referred to "the display:none" as a thing rather than to the region being hidden. Co-Authored-By: Claude Opus 5 (1M context) --- packages/auth-service/src/routes/login-page.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/auth-service/src/routes/login-page.ts b/packages/auth-service/src/routes/login-page.ts index 4cfe7bc5..8f2dcd11 100644 --- a/packages/auth-service/src/routes/login-page.ts +++ b/packages/auth-service/src/routes/login-page.ts @@ -565,7 +565,7 @@ export function renderLoginPage(opts: { // between the two slots on step transitions; both transitions call // clearError() first, so it is always empty when it moves. const flashRegionHtml = - '' + '' // Social login buttons — redirect to better-auth provider endpoints const socialButtonsHtml = hasSocialProviders @@ -641,6 +641,7 @@ export function renderLoginPage(opts: { .divider { display: flex; align-items: center; gap: 12px; margin: 20px 0; color: var(--muted-foreground); font-size: 13px; } .divider::before, .divider::after { content: ''; flex: 1; height: 1px; background: #ececec; } .flash-msg { padding: 12px; border-radius: 10px; margin: 12px 0; font-size: 14px; text-align: center; } + .flash-msg.hidden { display: none; } .flash-msg.error { color: #dc3545; background: #fdf0f0; } .flash-msg.success { color: #28a745; background: #f0fff4; } /* Inline action button rendered next to an OTP-expired error so @@ -1040,7 +1041,7 @@ export function renderLoginPage(opts: { function setFlash(kind, buildContent) { errorEl.classList.remove('error', 'success'); errorEl.classList.add(kind); - errorEl.style.display = 'block'; + errorEl.classList.remove('hidden'); var frag = document.createDocumentFragment(); buildContent(frag); @@ -1116,11 +1117,11 @@ export function renderLoginPage(opts: { function clearError() { // Empty the region before hiding it. Clearing after the - // display:none would mutate a region that is already out of + // region is hidden would mutate one that is already out of // the accessibility tree, which some assistive tech reports // as a stale announcement. errorEl.replaceChildren(); - errorEl.style.display = 'none'; + errorEl.classList.add('hidden'); errorEl.classList.remove('error', 'success'); } @@ -1404,7 +1405,7 @@ export function renderLoginPage(opts: { // sending a new OTP invalidates every earlier one, and a user // who needed to resend is the user whose mail may be in spam. showSuccess( - 'Use the new code; earlier ones no longer work. ' + + 'Resent! Make sure to use the new code; earlier ones no longer work. ' + 'It may be in your spam folder.', ); } From 0e67e6b061a7b27605b4f8891acb0d38f36d83ab Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Tue, 4 Aug 2026 18:09:58 +0100 Subject: [PATCH 7/8] fix(auth): offer resend on any rejected code, not just lockout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Testing the previous commit surfaced the gap: entering a wrong code shows "Invalid OTP" with no way forward, because the inline action was gated on the "too many attempts" wording. That gate was based on a wrong assumption — that "Invalid OTP" means a typo, which retyping fixes. better-auth 1.4.18 throws it from two places in email-otp/routes.mjs: the wrong-code comparison, and a missing stored code. The second is reached in several states where retyping cannot possibly work: - after a lockout. TOO_MANY_ATTEMPTS *deletes* the stored value, so it is reported exactly once; every subsequent submit falls through to "Invalid OTP". The lockout gate therefore missed the very attempts where the user is most stuck. - after the code was consumed elsewhere, e.g. sign-in completed in another tab. - after expiry cleanup deleted the value, so a later submit reads "Invalid OTP" rather than "expired". The branch cannot distinguish those from a typo, so withholding the action stranded the users who needed it most. Offering it always costs a typo-ing user nothing — the boxes are cleared and focused for retyping either way. Drops needsFreshCode entirely; the gate is now just parLikelyDead(), matching refreshResendVisibility(). Reported by @aspiers testing #220. Co-Authored-By: Claude Opus 5 (1M context) --- .../sign-in-errors-at-point-of-failure.md | 2 +- .../src/__tests__/login-page.test.ts | 30 ++++++------ .../auth-service/src/routes/login-page.ts | 48 ++++++++++--------- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/.changeset/sign-in-errors-at-point-of-failure.md b/.changeset/sign-in-errors-at-point-of-failure.md index fdbd818d..7b15520a 100644 --- a/.changeset/sign-in-errors-at-point-of-failure.md +++ b/.changeset/sign-in-errors-at-point-of-failure.md @@ -8,4 +8,4 @@ Sign-in error messages now appear next to the field that caused them, instead of **End users:** a rejected sign-in code used to report the problem above the page heading, several elements away from the boxes you had just typed into — easy to miss, and it left the **Verify** button looking like the thing to press again. The message now sits directly between the code boxes and **Verify**, and a failed email submission likewise reads under the email field rather than above it. -When the code is rejected because of too many wrong attempts, the message now carries a **Resend code** link beside it. That case wipes the stored code, so retyping cannot work and a fresh code is the only way forward; the standalone **Resend code** button below the form was easy to overlook. A simple mistyped code is unchanged — the boxes clear and refocus so you can just type it again. +A rejected code now also carries a **Resend code** link beside the message. The standalone button below the form was easy to overlook, and "that code didn't work" often means there is no usable code left at all rather than that you mistyped it — after too many wrong attempts, after signing in from another tab, or once an old code has aged out. Retyping cannot recover any of those. The boxes still clear and refocus, so retyping remains one keystroke away when that is what you need. diff --git a/packages/auth-service/src/__tests__/login-page.test.ts b/packages/auth-service/src/__tests__/login-page.test.ts index 03b862ad..d9eb070a 100644 --- a/packages/auth-service/src/__tests__/login-page.test.ts +++ b/packages/auth-service/src/__tests__/login-page.test.ts @@ -650,26 +650,24 @@ describe('renderLoginPage inline Resend action on expired OTP', () => { expect(verify).toBeGreaterThan(slot) }) - it('falls back to the plain showError on a merely-wrong code', () => { + it('offers an inline resend on any rejected code', () => { const html = renderDefault() - // A typo must NOT carry a resend CTA: the boxes are cleared and - // refocused, so retyping is the intended recovery. The final else - // — reached when the error is neither expired nor code- - // invalidating — stays on the plain path. - expect(html).toMatch(/\} else \{\s*showError\(result\.error\);\s*\}/) + // "Invalid OTP" is not reliably a typo — better-auth also throws it + // when no stored code exists at all, which is the terminal state + // after a lockout, after the code was consumed in another tab, and + // after expiry cleanup. Retyping cannot recover any of those, so + // the action must not be withheld from the plain-invalid branch. + expect(html).toMatch( + /else if \(!parLikelyDead\(\)\)[\s\S]*?showErrorWithAction\(\s*result\.error,\s*'Resend code'/, + ) }) - it('offers an inline resend when the stored code was invalidated', () => { + it('withholds the inline resend once the flow is dead', () => { const html = renderDefault() - // "Too many attempts" deletes the stored code server-side, so - // there is nothing left to retype and resending is the only route - // forward — unlike a typo, which the plain path above covers. - expect(html).toMatch( - /needsFreshCode\s*=\s*\/too many attempts\|invalidated\/i/, - ) - expect(html).toMatch( - /else if \(needsFreshCode && !parLikelyDead\(\)\)[\s\S]*?showErrorWithAction\(\s*result\.error,\s*'Resend code'/, - ) + // refreshResendVisibility() hides the standalone Resend button when + // the PAR is dead; an inline one would re-offer a withdrawn action. + // The bare else is that path — plain message, no CTA. + expect(html).toMatch(/\} else \{\s*showError\(result\.error\);\s*\}/) }) }) diff --git a/packages/auth-service/src/routes/login-page.ts b/packages/auth-service/src/routes/login-page.ts index 8f2dcd11..f4459fb3 100644 --- a/packages/auth-service/src/routes/login-page.ts +++ b/packages/auth-service/src/routes/login-page.ts @@ -1308,13 +1308,6 @@ export function renderLoginPage(opts: { // expired code") and the auth-service wording ("OTP // expired") plus generic "expir"/"too long" variants. var isExpired = /expir|too long/i.test(result.error); - // "Too many attempts" invalidates the stored code, so the - // user has nothing left to retype and a resend is the only - // route forward. Matched separately from isExpired because - // the wording shares no substring with it. - var needsFreshCode = /too many attempts|invalidated/i.test( - result.error, - ); if (isExpired) { // Only offer "Send a new code" when the PAR is still // alive. If it isn't, a fresh OTP would issue but @@ -1331,22 +1324,33 @@ export function renderLoginPage(opts: { document.getElementById('btn-resend').click(); }); } - } else if (needsFreshCode && !parLikelyDead()) { - // A rejected or invalidated code is the other case a - // fresh one actually fixes, so it gets the same inline - // shortcut as the expired path, for the same reason: - // the standalone Resend button sits below the form and - // is easy to miss. + } else if (!parLikelyDead()) { + // Every other verify failure gets the same inline + // shortcut, for the same reason as the expired path: the + // standalone Resend button sits below the form and is + // easy to miss. // - // 3d31876 originally kept every non-expired error on the - // plain path so a typo wouldn't carry a "Send a new - // code" CTA. That reasoning holds for a typo — the user - // should retype, and the boxes are already cleared and - // focused for exactly that — but not for "too many - // attempts", which deletes the stored code server-side - // (better-auth 1.4.18 email-otp/routes.mjs, per the note - // in better-auth.ts). After a lockout there is no code - // left to retype, so resending is the only way forward. + // 3d31876 originally kept non-expired errors on the plain + // path, reasoning that a typo should be retyped rather + // than resent. But "Invalid OTP" does not reliably mean + // a typo: better-auth throws it from two places + // (1.4.18 email-otp/routes.mjs) — the wrong-code + // comparison, and a missing stored code. The second + // covers several states where retyping cannot possibly + // work and a fresh code is the only recovery: + // + // - after a lockout. TOO_MANY_ATTEMPTS deletes the + // stored value, so it is reported exactly once and + // every later submit falls through to "Invalid OTP". + // - after the code was consumed elsewhere, e.g. the + // user completed sign-in in another tab. + // - after expiry cleanup deleted the value, so a later + // submit reads "Invalid OTP" rather than "expired". + // + // Since the branch cannot distinguish those from a typo, + // withholding the action strands the users who need it + // most. Offering it costs a typo-ing user nothing: the + // boxes are cleared and focused for retyping either way. // // Gated on parLikelyDead() because // refreshResendVisibility() hides the standalone Resend From ce3caeffccc8747997a816602a7efa8725fe559c Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Tue, 4 Aug 2026 18:25:06 +0100 Subject: [PATCH 8/8] docs: stop committing PR screenshots to the repo Screenshots for a pull request are review ephemera. They have no value to the codebase, they are binaries that git keeps forever, and GitHub already hosts images attached to a PR body for free. f4ff99f introduced docs/screenshots/ for #232 and it holds nothing but those two files, so removing them takes the directory with it. The three added for #220 were dropped from that branch before merge. The blobs stay reachable in history; purging them would mean rewriting main, which is not worth it for ~100KB. Co-Authored-By: Claude Opus 5 (1M context) --- .../pr-232-before-low-contrast-muted-text.png | Bin 53033 -> 0 bytes docs/screenshots/pr-232-muted-text-contrast.png | Bin 53419 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/screenshots/pr-232-before-low-contrast-muted-text.png delete mode 100644 docs/screenshots/pr-232-muted-text-contrast.png diff --git a/docs/screenshots/pr-232-before-low-contrast-muted-text.png b/docs/screenshots/pr-232-before-low-contrast-muted-text.png deleted file mode 100644 index 31a90426e2a72ac4806d0ee1aee2e2e67558666f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53033 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

igI6Zi`EW= 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 VPl5_Z=yOD+lLQ(k0k_immJ^yU9sZ!w|U>#e> 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