Commit Graph
570 Commits
Author SHA1 Message Date
thePR0M3TH3AN dd363f0086 Allow any public URL for storage 2026-01-26 07:01:35 -05:00
thePR0M3TH3AN 49809c2154 Merge pull request #1717 from PR0M3TH3AN/fix-privacy-warning-timeout-863377375539024117
Add timeout to sticky privacy warnings in profile modal
2026-01-26 06:34:15 -05:00
google-labs-jules[bot] 727892c61a fix: add timeout to sticky privacy warnings in profile modal
Updates the privacy warning notifications in `ProfileModalController` to auto-dismiss after 5 seconds. This resolves an issue where warnings about direct message relays and NIP-17 delivery would persist indefinitely, requiring manual dismissal or page reload.

The fix applies `{ autoHideMs: 5000 }` to `this.showStatus` calls for:
- "Privacy warning: direct messages are using your default relays because no NIP-17 relay list is available."
- "Privacy warning: this recipient has not shared NIP-17 relays, so we'll use your default relays."
- "Privacy warning: this message used default relays because no NIP-17 relay list was found."
2026-01-26 11:33:47 +00:00
google-labs-jules[bot] 62dcc57e64 refactor(ai): extract EditModalController from js/app.js (agent) 2026-01-26 03:21:44 +00:00
thePR0M3TH3AN 69dc281c04 Add debug logs for upload settings presence 2026-01-25 21:57:09 -05:00
thePR0M3TH3AN e1da71b802 Include R2 identifiers in uploads 2026-01-25 21:54:17 -05:00
thePR0M3TH3AN e096a8b136 Add R2 public URL to storage tests 2026-01-25 20:44:21 -05:00
google-labs-jules[bot] ad1d7de092 Clarify Public URL field in storage settings and add validation
- Renamed "Public URL / Prefix" to "Public Access URL" in Profile Modal to differentiate from S3 API Endpoint.
- Added helper text clarifying that Account ID is used for connection and Public URL is for CDN.
- Implemented validation in `ProfileModalController` to detect and warn if an S3/R2 API endpoint is entered into the Public URL field.
- Added blocking validation on save to prevent misconfiguration.
- Verified changes with unit tests and Playwright frontend verification.
2026-01-26 01:24:04 +00:00
google-labs-jules[bot] cd94900f02 fix(upload): improve error feedback in UploadModal
- Keep progress bar visible on upload failure
- Style error status text with `text-critical`
- Set generated link inputs to "Upload Failed" to clearly indicate failure
- Reset error state on retry
2026-01-25 23:53:08 +00:00
thePR0M3TH3AN 9c34a730f4 Merge pull request #1694 from PR0M3TH3AN/fix-upload-modal-exit-reset-2907666759560590370
Reset upload state on modal exit
2026-01-25 16:27:35 -05:00
google-labs-jules[bot] d4433fb886 fix(UploadModal): cancel and reset uploads on exit, preserve metadata 2026-01-25 21:24:01 +00:00
thePR0M3TH3AN 0d87efa6ac Merge pull request #1693 from PR0M3TH3AN/feature/truncate-storage-status-4436489322731743170
Truncate Storage Status fields in Upload Modal
2026-01-25 16:22:01 -05:00
google-labs-jules[bot] e1324c1bfc Truncate Storage Status fields in Upload Modal
Truncate Provider, Bucket, and URL Style fields to prevent layout overflow.
Add `title` attribute for native tooltips on hover.
Add `tabindex="0"` for keyboard accessibility.
2026-01-25 21:19:42 +00:00
google-labs-jules[bot] de03cd4c58 fix(storage): ensure R2 public URL is saved to connection metadata
When saving an R2 storage connection, the "Prefix" input (which holds the Public Bucket URL) was not being mapped to `meta.baseDomain` or `meta.publicBaseUrl`. This caused `R2Service.ensureBucketConfigForNpub` to throw "Public Bucket URL is missing" during upload preparation, as it relies on these properties.

This commit updates `ProfileModalController.handleSaveStorage` to correctly assign the prefix value to `baseDomain` and `publicBaseUrl` for the `cloudflare_r2` provider, aligning it with the behavior for generic S3 providers and resolving the upload error.
2026-01-25 21:14:05 +00:00
google-labs-jules[bot] 070c054043 Refactor upload flow for immediate uploads and fix logging crash
- Refactored `UploadModal.js` to trigger uploads immediately on file selection.
- Added progress bars and result fields (Video URL, Magnet, Torrent) to the UI.
- Fixed a crash in `r2Service.js` caused by `userLogger.debug` usage.
- Exposed `prepareUpload` and `uploadFile` methods in `r2Service` and `s3UploadService` for granular control.
- Updated `upload-modal.html` with new UI elements.
2026-01-25 20:53:16 +00:00
google-labs-jules[bot] 55d00900a0 Fix R2 upload failures by ensuring baseDomain is saved and used correctly. 2026-01-25 19:41:26 +00:00
google-labs-jules[bot] 2062ba0889 Refactor Upload Modal to use read-only storage status
Simplified the Upload Modal by removing inline storage configuration forms.
The modal now displays the active storage provider (read-only) or prompts the user
to configure storage via the Profile Modal if missing.

Changes:
- Refactored `js/ui/components/UploadModal.js` to consume stored credentials directly.
- Updated `components/upload-modal.html` to remove complex forms.
- Updated `tests/ui/uploadModal-integration.test.mjs` to match new UI structure.
- Removed race-prone logic for saving credentials within the upload flow.
2026-01-25 19:20:08 +00:00
google-labs-jules[bot] 94cafc26ab Fix storage credentials persistence on profile switch
This change ensures that cloud storage credentials are not leaked between Nostr profiles when switching accounts in the UI.

Changes:
- Imported `storageService` in `js/app.js` to enable the `bitvid:auth-changed` event listener to correctly lock the previous profile's storage session.
- Updated `ProfileModalController.populateStoragePane` to explicitly clear the storage form before loading new data.
- Enhanced `ProfileModalController.handleClearStorage` to fully reset the form state, including the provider selection and visibility toggles.

Verified with a reproduction script (`reproduce_storage_isolation.mjs`) that `StorageService` correctly isolates data by pubkey at the backend level. The UI fixes address the frontend persistence issue.
2026-01-25 18:32:46 +00:00
thePR0M3TH3AN 399f57a9a9 Merge pull request #1685 from PR0M3TH3AN/fix-storage-unlock-profile-switch-5219038763657167414
Fix storage unlock failure when switching profiles
2026-01-25 13:09:58 -05:00
google-labs-jules[bot] d50110f685 fix(storage): validate signer identity before unlocking storage
Prevents storage unlock failures and security risks when switching profiles by verifying that the active signer's public key matches the target profile. This ensures users are prompted to switch accounts in their NIP-07 extension if a mismatch occurs.

Fixes an issue where switching profiles caused the storage tab to break due to using the wrong decryption key.
2026-01-25 18:09:28 +00:00
google-labs-jules[bot] 31751579a3 Fix: prevent thumbnail cache from being cleared on empty video lists
This commit addresses an issue where thumbnail images would "drop" (disappear/flicker) upon login or re-initialization of the video list.

Changes:
- Modified `js/ui/views/VideoListView.js` to add a guard clause in `cleanupThumbnailCache`.
- The function now returns early if the provided `videos` list is empty, preserving the existing `loadedThumbnails` cache during transient loading states.

Verification:
- Created a reproduction script (`reproduce_issue.mjs`) that confirmed the cache was being cleared on empty input.
- Verified the fix with the same script, ensuring the cache is preserved.
- Verified no regression in `npm run lint:hex` and `npm run lint:inline-styles`.
2026-01-25 17:44:21 +00:00
thePR0M3TH3AN 3a599e3ad5 Merge pull request #1670 from PR0M3TH3AN/ai/onboarding-20231026-1317313232699865149
docs(ai): improve onboarding steps
2026-01-25 10:47:23 -05:00
google-labs-jules[bot] 93b3434145 docs(ai): improve onboarding steps (agent)
- Audit onboarding process (`npm ci`, build, lint).
- Fix hex color lint failures by updating `scripts/check-hex.js` ignore list.
- Fix inline style lint failures by updating `scripts/check-inline-styles.mjs` allowlist.
- Fix raw tailwind colors in `js/ui/components/EmbedPlayerModal.js` by using semantic tokens.
- Add `ai/onboarding-report.md` detailing the audit.
2026-01-25 08:25:42 +00:00
google-labs-jules[bot] 4c93080baa refactor(ai): extract ShareNostrController from js/app.js (agent) 2026-01-25 03:34:10 +00:00
google-labs-jules[bot] a33092fc47 feat(upload): support presigned multipart manifest for S3 uploads
- Updated `js/s3-quick.js` to support new manifest structure: `{ bucket, key, uploadId, parts: [{partNumber, url}] }`.
- Added logic to sort parts, upload chunks, collect ETags, and call `completeUrl` if present.
- Updated `js/ui/components/UploadModal.js` to handle manifest flow, validate new structure, and alert user if completion is manual (missing `completeUrl`).
- Updated `components/upload-modal.html` with new placeholder example and documentation note.
- Verified logic with reproduction script and UI with Playwright.
2026-01-25 02:44:49 +00:00
thePR0M3TH3AN feef662bf8 Merge pull request #1661 from PR0M3TH3AN/feat/s3-quick-upload-4202021437560592801
Add S3 quick upload with presigned manifest support
2026-01-24 20:42:50 -05:00
google-labs-jules[bot] adad6a07a4 feat: Add S3 quick upload with presigned manifest support
- Add `js/s3-quick.js` with `uploadWithManifest` and `uploadWithKeys`.
- Update `components/upload-modal.html` to add "Use presigned manifest" toggle and warning.
- Update `js/ui/components/UploadModal.js` to wire up the manifest upload flow.
- Add local persistence for quick S3 settings (though mainly handled by existing storage settings).
- Ensure keys are only used for client-side uploads or replaced by manifest flow.
2026-01-25 01:38:41 +00:00
google-labs-jules[bot] b2d5619f78 fix(ai): resolve PROVIDERS undefined in profileModalController (agent)
Import `PROVIDERS` from `../services/storageService.js` in `js/ui/profileModalController.js`.
This fixes a `ReferenceError` when testing or saving generic S3 storage configurations.
The error was caused by using `PROVIDERS.GENERIC` without importing the constant.
2026-01-25 01:14:37 +00:00
thePR0M3TH3AN 999235d71e Add S3 storage option to upload modal 2026-01-24 20:00:00 -05:00
google-labs-jules[bot] b9f7ffd95e fix: eliminate black bars in video modal player
Enforce full-width/height video display and dynamic object-fit logic to prevent letterboxing and layout gaps.

- Add robust CSS overrides to 'css/tailwind.source.css' to ensure video fills the stage.
- Update 'VideoModal.js' to dynamically switch between 'cover' and 'contain' based on aspect ratio match.
- Handle ambient canvas positioning to prevent layout shifts.
2026-01-25 00:29:52 +00:00
google-labs-jules[bot] d621e6f21a feat: update embed player design with transparent background and overlay stats
- Removed background colors from `embed.html` for transparency.
- Added a hover-triggered overlay with "Watch on BitVid" button and stats (views, likes, dislikes).
- Updated `js/ui/components/EmbedPlayerModal.js` to implement stats update methods and handle the overlay elements.
- Updated `js/embed.js` to set the share URL on the overlay after video resolution.
- Verified visual changes with Playwright.
2026-01-24 22:41:56 +00:00
google-labs-jules[bot] 981fac785a fix(embed): implement robust EmbedPlayerModal and guard resetTorrentStats
- Add `js/ui/components/EmbedPlayerModal.js` to implement the `VideoModal` interface for embed contexts (including `resetStats`).
- Update `js/ui/ModalManager.js` to detect embed mode and use `EmbedPlayerModal`.
- Clean up `js/embed.js` to remove local modal definition and add `postMessage` diagnostic logging.
- Update `js/app.js` `resetTorrentStats` log message and verify guard.
- Add unit tests for `EmbedPlayerModal` and `resetTorrentStats` logic.
- Add E2E reproduction script `tests/e2e/repro_issue.spec.ts`.
2026-01-24 22:09:03 +00:00
thePR0M3TH3AN 0f502a79c2 Merge pull request #1643 from PR0M3TH3AN/fix-embed-modal-buttons-12116875342849342102
Fix unresponsive buttons in Embed Video modal
2026-01-24 15:56:17 -05:00
google-labs-jules[bot] 95cf17e018 fix(ui): unwrap embed modal content to resolve button interaction issues
Refactored `EmbedVideoModal.js` to unwrap the fetched HTML content using a `DocumentFragment` before appending it to the DOM. This removes an unnecessary wrapper `div` that was causing stacking context issues, preventing the modal's buttons (Exit, Close, Copy) from being clickable when layered over other UI elements. This change aligns the implementation with `VideoModal.js`.
2026-01-24 20:50:50 +00:00
thePR0M3TH3AN c4a602651f Merge pull request #1642 from PR0M3TH3AN/ai/dead-code-20241109-12426490253240890993
chore(ai): remove dead code (unused exports & deps)
2026-01-24 15:40:44 -05:00
google-labs-jules[bot] 4a0b81ad98 chore(ai): remove dead code (unused exports & deps) 2026-01-24 20:28:53 +00:00
google-labs-jules[bot] 6e21247505 fix(ui): ensure modals render above video player
- Adds --z-modal-always-top: 200 token in css/tokens.css
- Adds .modal-always-on-top utility class in css/tailwind.source.css
- Applies class to EventDetailsModal, EmbedVideoModal, and ShareNostrModal
2026-01-24 20:12:04 +00:00
thePR0M3TH3AN 37f5083947 Merge branch 'unstable' into ai/debug-frontend-20260124-13275558127831455913 2026-01-24 14:36:28 -05:00
thePR0M3TH3AN 029ce974c8 Merge pull request #1635 from PR0M3TH3AN/ds-audit/2024-10-24-5776651930377436842
Design System Audit & Fixes
2026-01-24 14:35:33 -05:00
thePR0M3TH3AN 49355ccd35 Merge pull request #1627 from PR0M3TH3AN/ai/onboarding-20241025-6817543098205599361
docs(ai): improve onboarding steps and fix lint
2026-01-24 14:32:02 -05:00
thePR0M3TH3AN 84a6a450dc Merge pull request #1623 from PR0M3TH3AN/ai/refactor-reactions-20241026-2487608613137550346
Refactor reaction logic to ReactionController
2026-01-24 14:28:15 -05:00
google-labs-jules[bot] f2ab7302ab fix(ai): frontend console error — double load and lint fixes (agent) 2026-01-24 18:29:26 +00:00
thePR0M3TH3AN 15dea2bbf6 Add generic S3 connection support helpers 2026-01-24 12:39:56 -05:00
google-labs-jules[bot] 572fc1c9b8 Fix design system violations: raw lengths and inline styles
- Added `--size-40rem` to `css/tokens.css` and used it in `css/tailwind.source.css`.
- Refactored `js/ui/components/SearchFilterModal.js` to use Tailwind classes (`rotate-180`, `transition-transform`) instead of inline styles.
- Updated `REMEDIATION_REPORT.md` with audit results.
2026-01-24 15:58:49 +00:00
google-labs-jules[bot] eb25d2df89 docs(ai): improve onboarding steps and fix lint
- Fix `npm run lint` failure by replacing inline style with CSS class in `js/ui/components/SearchFilterModal.js`.
- Fix `npm run lint:tokens` failure by defining `--size-40rem` in `css/tokens.css` and using it in `css/tailwind.source.css`.
- Update `CONTRIBUTING.md` with troubleshooting tips for unit test hangs and linting failures.
- Attempt to update `caniuse-lite` to silence build warning (may persist due to environment/cache).
2026-01-24 08:37:11 +00:00
google-labs-jules[bot] 9fb07c6ce2 refactor(ai): extract reaction logic from js/app.js (agent)
Extracted video reaction logic (subscription, optimistic updates, and publishing) from `js/app.js` into a dedicated `ReactionController`.

*   Created `js/ui/reactionController.js`.
*   Refactored `js/app.js` to usage `ReactionController` and removed legacy methods.
*   Added unit tests in `tests/ui/reactionController.test.mjs`.
*   Ensured reaction subscription updates on user login/logout.

This follows the `AGENTS.md` guideline to move UI logic to controllers.
2026-01-24 03:21:14 +00:00
thePR0M3TH3AN 7666629cba Update embed modal pointer encoding 2026-01-23 17:58:45 -05:00
thePR0M3TH3AN b3de79f46c Add embed video modal 2026-01-23 17:14:07 -05:00
thePR0M3TH3AN 1709972f14 Add embed action to video modal 2026-01-23 15:24:09 -05:00
google-labs-jules[bot] e6e002ee8b Refactor search filter to responsive modal
- Replaced `SearchFiltersPopover` with `SearchFilterModal`
- Implemented responsive design: wide on desktop, tall/skinny on mobile
- Added "Advanced" toggle for complex filters
- Integrated NSFW toggle with config check (`ALLOW_NSFW_CONTENT`)
- Updated `js/index.js` to use the new modal
- Removed legacy popover component
2026-01-23 19:52:50 +00:00