mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
Add BitLogin as the primary sign-in method (gated, unstable)
The login modal now shows <bitlogin-auth> -- a portable Nostr identity behind a login name and password -- as the default sign-in path, styled with bitvid's own brand tokens (accent-strong, surfaces, radii). The existing NIP-07 extension, nsec, and NIP-46 remote-signer options still work exactly as before, just collapsed under a new "Other login options" fold instead of a flat "Available methods" grid; nip07 no longer carries the stale "Recommended" eyebrow now that BitLogin has that role. BitLogin isn't a single button-click-then-await-a-promise flow like the other providers -- it's a whole multi-screen sign-in/create/recover UI -- so it gets a permanent, statically-declared widget in components/login-modal.html (js/ui/bitloginModalIntegration.js relocates it, never destroys and recreates it, since removal tears down its crypto Web Worker) instead of a grid button. It still goes through the exact same session-establishment path as every other signer: a new "bitlogin" provider (js/services/authProviders/bitlogin.js) lets AuthService resolve and activate it via the normal requestLogin -> handleAuthLogin path, while providersForModal excludes it from the grid so it isn't rendered twice. Two things this needed beyond the wiring itself: - js/app.js is one line from its lint/file-size ceiling, so the only change there is renaming an import binding (providers -> providersForModal), a net-zero line change. The actual widget/event wiring lives in a new, unconstrained module instead. - The login modal's HTML (including the permanent widget element) loads asynchronously after bootstrap runs, so wireBitloginLogin() waits via MutationObserver rather than assuming a specific call order. Vendored via scripts/build-bitlogin-widget.mjs (mirrors the existing Bitcoin Connect/Blossom vendor steps): BitLogin isn't published to npm, so the widget build is copied verbatim from the sibling ../bitlogin checkout into committed vendor/bitlogin/, then lazy-imported (like Bitcoin Connect) so its ~350KB never weighs on visitors who never open the login modal. Gated behind FEATURE_BITLOGIN (config/instance-config.js), default on for this unstable-branch experiment per AGENTS.md §1 -- reset to false before this reaches main until verified end-to-end against production relays. Verified: npm run lint (clean), the full auth/login test suite (43/43, including new coverage for the provider + adapter), and a manual Chrome pass against the built dist/ -- widget renders themed correctly, "Other login options" still shows the original four methods unchanged.
This commit is contained in:
1 parent
676844edfc
commit
88c906fd34
19 files changed
+16133
-19
No files matched your search
@@ -880,6 +880,29 @@
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Maps the <bitlogin-auth> widget's own theming hooks onto bitvid's design
|
||||
tokens (components/login-modal.html), so it reads as part of this site
|
||||
rather than a foreign embed, and follows the light/dark theme toggle
|
||||
automatically since every token below is itself theme-aware. */
|
||||
bitlogin-auth {
|
||||
display: block;
|
||||
--bl-accent: var(--color-accent-strong);
|
||||
--bl-accent-hover: var(--color-accent);
|
||||
--bl-accent-fg: rgb(255 255 255);
|
||||
--bl-bg: var(--surface-panel);
|
||||
--bl-fg: var(--text-primary);
|
||||
--bl-muted: var(--text-muted);
|
||||
--bl-border: var(--border-default);
|
||||
--bl-input-bg: var(--surface-sunken);
|
||||
--bl-danger: var(--status-danger);
|
||||
--bl-danger-bg: var(--status-danger-surface);
|
||||
--bl-warn: var(--status-warning);
|
||||
--bl-warn-bg: var(--status-warning-surface);
|
||||
--bl-radius: var(--radius-lg);
|
||||
--bl-font-family: inherit;
|
||||
--bl-max-width: none;
|
||||
}
|
||||
|
||||
.btn-ghost[data-state="active"],
|
||||
.btn-ghost[aria-pressed="true"] {
|
||||
@apply border-transparent bg-primary text-white shadow-md;
|
||||
|
||||
Reference in new issue
Block a user