Skip to content

fix(auth): hide the reopen prompt once Internet Identity answers - #595

Open
yhabib wants to merge 4 commits into
mainfrom
fix/login-prompt-after-ii-answer
Open

yhabib wants to merge 4 commits into
mainfrom
fix/login-prompt-after-ii-answer

Conversation

@yhabib

@yhabib yhabib commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator

Motivation

With auth 10, the II window closes before the first delegation exists, so the app waits about 1 s on the "Authenticating" overlay. The "Closed the window? Open Internet Identity again" prompt appears 3 s after the click, so it is on screen for that whole wait, after II succeeded. A click restarts a login that is almost done.

Changes

  • Added iiAnswered to the auth state. The first agent call of a login sets it.
  • Added isFinishingLogin to useInternetIdentity.
  • Hid the prompt in LoginRestart once II answered. Its space stays, so the logo does not move.
  • Added tests for the signal and the prompt.

Screenshots

Before After
The overlay after II answered, before The overlay after II answered, after

@yhabib
yhabib requested a review from a team as a code owner November 7, 2026 08:11
Copilot AI balanced review requested due to automatic review settings November 7, 2026 08:11
@github-actions

github-actions Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

📊 Build Bundle Stats

The latest build generated the following assets:

dist/index.html                                           6.12 kB │ gzip:   1.73 kB
dist/assets/index-DHR8rj0Y.css                          150.06 kB │ gzip:  24.02 kB
dist/assets/icpLedger-CZlO38WW.js                         0.23 kB │ gzip:   0.21 kB
dist/assets/useNowInSeconds-ZWPZsQhm.js                   0.43 kB │ gzip:   0.31 kB
dist/assets/Skeleton-D0Kuq4T-.js                          0.44 kB │ gzip:   0.32 kB
dist/assets/webhid-D0yio6wG.js                            0.53 kB │ gzip:   0.32 kB
dist/assets/advancedFeatures-DOn07sBL.js                  0.53 kB │ gzip:   0.27 kB
dist/assets/useTvlValue-DC99tNHA.js                       0.60 kB │ gzip:   0.41 kB
dist/assets/webVitals-CREpCKxJ.js                         0.63 kB │ gzip:   0.45 kB
dist/assets/nnsDapp-CCzabI8b.js                           0.68 kB │ gzip:   0.25 kB
dist/assets/SkeletonPageHeader-CtmR3Iyu.js                0.76 kB │ gzip:   0.47 kB
dist/assets/PageHeader-jXzaR6sL.js                        0.77 kB │ gzip:   0.45 kB
dist/assets/CertifiedBadge-VSlBxlmv.js                    0.81 kB │ gzip:   0.48 kB
dist/assets/SkeletonStatCard-BtTLaT_w.js                  0.81 kB │ gzip:   0.50 kB
dist/assets/Separator-BZ2y3gE1.js                         0.83 kB │ gzip:   0.50 kB
dist/assets/useForecastPeriod-CIUGuCZS.js                 1.00 kB │ gzip:   0.60 kB
dist/assets/utils-BJfPv5Ma.js                             1.02 kB │ gzip:   0.59 kB
dist/assets/useIcpIndex-Br-x2hLF.js                       1.09 kB │ gzip:   0.64 kB
dist/assets/useSubaccountsMetadata-DDjcUr60.js            1.10 kB │ gzip:   0.62 kB
dist/assets/numbers-TF70NLwF.js                           1.15 kB │ gzip:   0.57 kB
dist/assets/routeLoaders-BAoU-G6U.js                      1.19 kB │ gzip:   0.56 kB
dist/assets/rolldown-runtime-DAXXjFlN.js                  1.26 kB │ gzip:   0.70 kB
dist/assets/useHardwareWalletsMetadata-LyxIijyr.js        1.39 kB │ gzip:   0.69 kB
dist/assets/events-DDiGxWbS.js                            1.66 kB │ gzip:   0.86 kB
dist/assets/SkeletonListRows-DaQ_sSKx.js                  1.69 kB │ gzip:   0.53 kB
dist/assets/useLedgerNeuronCall-DmDPAeNc.js               1.90 kB │ gzip:   1.04 kB
dist/assets/errors-C_oENL0S.js                            1.95 kB │ gzip:   0.97 kB
dist/assets/AnimatedNumber-ddBBW7fo.js                    1.98 kB │ gzip:   1.13 kB
dist/assets/useCommandPaletteSettings-C0NlaXXg.js         2.12 kB │ gzip:   1.06 kB
dist/assets/addressBook-C7pIpPY4.js                       2.14 kB │ gzip:   1.19 kB
dist/assets/useIcpIndexTransactionsPolling-B1osqTfv.js    2.17 kB │ gzip:   1.15 kB
dist/assets/useGovernanceAppCanister-eIkdcIUr.js          2.41 kB │ gzip:   1.07 kB
dist/assets/useShortcutSettings-Id1EThmW.js               2.41 kB │ gzip:   1.19 kB
dist/assets/useAddHotkey-DZ-UWSRH.js                      2.61 kB │ gzip:   1.35 kB
dist/assets/governance-C_MsSm7w.js                        2.99 kB │ gzip:   1.15 kB
dist/assets/ToggleGroup--5bepaXB.js                       3.09 kB │ gzip:   1.41 kB
dist/assets/useClaimPendingDeviceStakes-BG9jNz6I.js       3.12 kB │ gzip:   1.42 kB
dist/assets/SkeletonText-D-qGU1wu.js                      3.71 kB │ gzip:   1.29 kB
dist/assets/useAccounts-CIUXk-k0.js                       4.98 kB │ gzip:   2.20 kB
dist/assets/tickers-CSQYeKv8.js                           6.54 kB │ gzip:   2.73 kB
dist/assets/AlertDialog-BkQbV8ko.js                       7.73 kB │ gzip:   2.72 kB
dist/assets/DeviceActionDetail-DvIbeIvC.js                8.45 kB │ gzip:   3.03 kB
dist/assets/TopicFollowingAccordion-CA8G2rXx.js           8.55 kB │ gzip:   3.41 kB
dist/assets/routes-CcobS7em.js                            9.01 kB │ gzip:   3.10 kB
dist/assets/ledgerIdentity-CbGbEww2.js                   10.16 kB │ gzip:   3.70 kB
dist/assets/MutationDialog-FE2N1VNc.js                   11.55 kB │ gzip:   4.03 kB
dist/assets/spamFilter-aCBzJN1j.js                       11.77 kB │ gzip:   5.02 kB
dist/assets/ResponsiveDialog-DP7wj7ZC.js                 14.56 kB │ gzip:   4.06 kB
dist/assets/_id-o3ARpG2X.js                              16.61 kB │ gzip:   5.33 kB
dist/assets/AmountInput-oWUEILpd.js                      16.96 kB │ gzip:   6.77 kB
dist/assets/_auth-CMFIrK4e.js                            22.49 kB │ gzip:   8.30 kB
dist/assets/HideBalancesToggle-ChMkZvlQ.js               22.99 kB │ gzip:   8.58 kB
dist/assets/vendor-buffer-EX-AqChq.js                    26.95 kB │ gzip:   8.18 kB
dist/assets/accounts-BGIpFAqO.js                         32.08 kB │ gzip:  10.90 kB
dist/assets/SendICPButton-DVv1pCrl.js                    37.11 kB │ gzip:  13.54 kB
dist/assets/settings-Cqz0ScMg.js                         54.47 kB │ gzip:  15.55 kB
dist/assets/dashboard-BsCaFT9f.js                        57.76 kB │ gzip:  19.10 kB
dist/assets/voting-BEwNpRZh.js                           69.29 kB │ gzip:  21.73 kB
dist/assets/index-Dd5RMWJ3.js                            69.56 kB │ gzip:  20.58 kB
dist/assets/vendor-md-DQa12sMs.js                        73.29 kB │ gzip:  19.98 kB
dist/assets/button-CLfjU7g0.js                           86.64 kB │ gzip:  29.11 kB
dist/assets/neurons-CmcWxYu4.js                          90.51 kB │ gzip:  27.16 kB
dist/assets/DisburseModal-ChLxTfqE.js                   101.47 kB │ gzip:  29.64 kB
dist/assets/vendor-tanstack-D12Yy7ks.js                 120.02 kB │ gzip:  39.22 kB
dist/assets/vendor-jsqr-CjiBYtfG.js                     129.98 kB │ gzip:  47.50 kB
dist/assets/vendor-core-react-bRRjyX41.js               189.81 kB │ gzip:  59.76 kB
dist/assets/vendor-recharts-DQ8kALIQ.js                 280.26 kB │ gzip:  76.83 kB
dist/assets/vendor-ledger-Bz6feAP8.js                   403.26 kB │ gzip:  98.84 kB
dist/assets/vendor-icp-e5O_ocwA.js                      468.31 kB │ gzip: 117.84 kB
dist/assets/vendor-libs-BjQATLf3.js                     587.62 kB │ gzip: 189.56 kB

@zeropath-ai

zeropath-ai Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

✅ No security or compliance issues detected. Reviewed everything up to c084f78.

Security Overview
Detected Code Changes
Change Type Relevant files
Enhancement ► src/governance-app-frontend/src/common/auth/internetIdentity.ts
    Add iiAnswered state and fetchForAuthClient wrapper to mark Internet Identity answered during login
► src/governance-app-frontend/src/common/hooks/useInternetIdentity.ts
    Expose iiAnswered and isFinishingLogin via hook
► src/governance-app-frontend/src/routes/index.tsx
    Pass isFinishingLogin to LoginRestart component
► src/governance-app-frontend/src/features/login/components/LoginRestart.tsx
    Add isFinishing prop and adjust rendering logic
► src/governance-app-frontend/src/features/login/components/LoginRestart.spec.tsx
    Add tests for LoginRestart behavior (finishing state)
Enhancement ► src/governance-app-frontend/src/common/auth/internetIdentity.test.ts
    Update tests to expect agentOptions.fetch and iiAnswered flow
► src/governance-app-frontend/src/routes/index.tsx
    Consume isFinishingLogin for LoginRestart display
► src/governance-app-frontend/tests/e2e/session.spec.ts
    Add test covering "Hides the reopen prompt once Internet Identity answers"

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Restarting an in-progress login can retain iiAnswered: true, hiding the recovery prompt if the replacement popup closes prematurely.

1 open issue
What changed in this PR

This PR hides the Internet Identity reopen prompt once authentication reaches the delegation stage, preventing unnecessary login restarts while preserving the overlay layout.

Changes:

  • Tracks iiAnswered in auth state and exposes isFinishingLogin.
  • Hides the recovery prompt while login finishes, retaining its space.
  • Adds tests for the auth signal, failure reset, and prompt visibility.
File Description
src/​governance-app-frontend/​src/​routes/​index.tsx Passes login completion state to the recovery prompt.
src/​governance-app-frontend/​src/​features/​login/​components/​LoginRestart.tsx Hides the prompt while login finishes without shifting layout.
src/​governance-app-frontend/​src/​features/​login/​components/​LoginRestart.spec.tsx Tests delayed visibility and finishing-state hiding.
src/​governance-app-frontend/​src/​common/​hooks/​useInternetIdentity.ts Exposes isFinishingLogin to components.
src/​governance-app-frontend/​src/​common/​auth/​internetIdentity.ts Records the first auth-agent fetch during login.
src/​governance-app-frontend/​src/​common/​auth/​internetIdentity.test.ts Tests the fetch signal and its reset after failure.

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings November 7, 2026 08:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A late fetch from a replaced client can mark the replacement login as answered and prematurely hide its recovery prompt, so the callback needs a client-generation guard and a regression test.

1 open issue
1 resolved since last review

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings November 7, 2026 08:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Mocked tests cannot establish that the real auth SDK waits for II’s response before agent requests, including local root-key fetching and client replacement, leaving login-recovery ordering unverified.

No open issues 🎉

1 resolved since last review

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings November 7, 2026 08:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approved

The review identifies no active issues requiring changes.

No open issues 🎉

Review effort: Balanced

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.

2 participants