Skip to content

Add JWT decode UI, InfoTip tooltips, and OIDC discovery#13

Merged
kellenmurphy merged 1 commit into
mainfrom
feat/oidc-discovery-ui
May 11, 2026
Merged

Add JWT decode UI, InfoTip tooltips, and OIDC discovery#13
kellenmurphy merged 1 commit into
mainfrom
feat/oidc-discovery-ui

Conversation

@kellenmurphy
Copy link
Copy Markdown
Owner

Summary

  • JWT decode UI — full results panel with summary, timestamps, scopes, alg-none/weak warnings, and header+payload JSON; auto-detected from the single input box alongside SAML
  • InfoTip tooltips — hover ? on every summary field (SAML and JWT), tooltip text externalized in explanations.ts for future i18n; position: fixed to escape overflow-hidden card containers
  • OIDC Discovery — "Discover" button on JWT Issuer row fetches /.well-known/openid-configuration via the /api/discover proxy; displays issuer match/mismatch badge, JWKS URI, auth/token/userinfo endpoints as links, and ID token algs with the token's alg highlighted; race-condition safe via generation counter
  • Dependency cleanup — removed unused @peculiar/x509 (replaced by custom DER parser)
  • Test coverage — 100% statements/branches/functions/lines maintained across all src/lib/ modules (162 tests)
  • Docs — rewrote README, SECURITY.md, and CLAUDE.md to accurately reflect the current state of the project

Test plan

  • Paste a JWT with a known OIDC issuer (e.g. Google, Okta, Entra) — summary, timestamps, and scopes render correctly
  • Click "Discover" — OIDC Discovery card appears with issuer match badge, endpoints, and alg list
  • Paste a JWT with a fake/unreachable issuer — error banner appears below scopes
  • Paste a new JWT while discovery is loading — stale result is discarded (generation counter)
  • Paste a SAML assertion — SAML path unaffected, discovery state resets
  • Clear the input — all state resets, no stale discovery card
  • Hover ? tooltips on SAML and JWT summary fields — tooltip renders above button, text is legible in both light and dark mode
  • CI passes (build, lint, type check, coverage)

🤖 Generated with Claude Code

- Full JWT decode UI in +page.svelte: summary panel, timestamps, scopes,
  alg-none/weak warnings, header+payload JSON
- InfoTip hover tooltips on all summary fields (SAML and JWT), with
  tooltip text externalized in explanations.ts for future i18n
- OIDC Discovery: Discover button on JWT Issuer row, fetches
  /.well-known/openid-configuration via /api/discover proxy, displays
  issuer match badge, JWKS URI, endpoints, and supported ID token algs
  with token alg highlighted; race condition safe via generation counter
- Remove unused @peculiar/x509 dependency (replaced by custom DER parser)
- Expand jwt.ts: alg detection, timestamp math, scope parsing
- Fix cert.ts RSA fallback path; improve test coverage across all lib modules
- Rewrite README, SECURITY.md, and CLAUDE.md to reflect current state
- 100% statement/branch/function/line coverage maintained (162 tests)
@codecov-commenter
Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@kellenmurphy kellenmurphy merged commit 5ea87f5 into main May 11, 2026
2 checks passed
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