Commit Graph
2800 Commits
Author SHA1 Message Date
google-labs-jules[bot] c080b83108 feat: seed anonymous session actors with baseline block list
- Added `seedLocalBaseline` to `js/userBlocks.js` to merge admin blacklist into local block list for session actors.
- Implemented `_saveLocal` and `_loadLocal` in `js/userBlocks.js` to persist local-only block lists to `localStorage`.
- Updated `loadBlocks` to prioritize local storage for session actors, bypassing relay fetching when local data exists.
- Modified `js/app.js` to call `seedLocalBaseline` with the admin blacklist during initialization if the user is anonymous.
- Ensured `UserBlockListManager` correctly resolves `localStorage` in various environments (browser/test).
- Verified changes with `tests/user-blocks-local-seed.test.mjs`.
2026-01-10 22:19:54 +00:00
thePR0M3TH3AN 760eeb906e Merge pull request #1171 from PR0M3TH3AN/fix-trusted-seed-reactivity-3260312645150646565
Fix: React to trusted seed block list updates for session actors
2026-01-10 17:03:09 -05:00
google-labs-jules[bot] d92cc58fc6 Fix: Enforce trusted mutes as blocks for anonymous users
Updates `js/app.js` to:
1.  Treat Trusted Seed mutes as hard blocks (`isAuthorBlocked` returns `true`) for anonymous users ("session actors"), ensuring strict filtering.
2.  Refresh the entire video grid (`refreshAllVideoGrids`) instead of just the UI (`refreshVisibleModerationUi`) when `trusted-mutes` events arrive for anonymous users, ensuring blocked content is removed dynamically once the lists load. This fixes a race condition where content might render before the block list is fully fetched.
2026-01-10 21:54:51 +00:00
google-labs-jules[bot] dc476392b2 Fix: Ensure UI refreshes upon trusted seed updates
Subscribes `js/app.js` to `moderationService` events (`trusted-mutes`, `user-blocks`, `summary`). This ensures that asynchronous updates to trusted seed block lists (Kind 10000) trigger an immediate UI refresh, correctly applying moderation (blur/hide) even for anonymous session actors who rely on these seeds. Previously, the initial render would complete before the async lists arrived, leaving blocked content visible until a page reload.
2026-01-10 21:37:43 +00:00
thePR0M3TH3AN 966a7810cb Merge pull request #1170 from PR0M3TH3AN/fix-trusted-seed-fail-open-bug-10900462745100729991
fix(moderation): prevent clearing trusted mute lists on network failure and ensure UI updates
2026-01-10 16:27:02 -05:00
google-labs-jules[bot] 1b092c09d6 fix(moderation): harden trusted mute fetch against network failures
- Implemented retry logic (3 attempts) for fetching trusted mute lists.
- Prevented clearing of existing mute lists if the fetch fails (fail-safe).
- Added `trusted-mutes` event listener to trigger immediate UI updates.
2026-01-10 21:25:52 +00:00
google-labs-jules[bot] c777f0f068 fix(moderation): prevent clearing trusted mute lists on network failure and ensure UI updates
This commit fixes a critical security/UX regression where Trusted Seed mute lists (Kind 10000) were being cleared ("fail-open") if the initial network fetch failed or timed out. This left anonymous users exposed to blocked content until a subsequent update or refresh.

Changes:
- **`js/services/moderationService.js`**:
    - Refactored `subscribeToTrustedMuteList` to use a retry mechanism (3 attempts with backoff) for fetching mute lists.
    - Modified error handling to distinguish between "successful empty fetch" and "network failure".
    - Prevented `replaceTrustedMuteList` (which clears the local state) from being called if the fetch fails, preserving any existing protection.
- **`js/app.js`**:
    - Added a listener for the `trusted-mutes` event in `setupEventListeners`.
    - This triggers `refreshVisibleModerationUi({ reason: "trusted-mutes" })`, ensuring that the UI (blurred thumbnails, hidden content) updates immediately when trusted mute lists are hydrated, without requiring a manual page refresh.

This ensures robust moderation for session actors (unauthenticated users) even under flaky network conditions.
2026-01-10 04:32:13 +00:00
thePR0M3TH3AN fcccce68e2 Merge pull request #1168 from PR0M3TH3AN/codex/exclude-blacklisted-seeds-from-trusted-seeds
Filter trusted seeds against access control blacklist
2026-01-09 22:48:36 -05:00
thePR0M3TH3AN 4809b8dac6 Filter trusted seeds against access control blacklist 2026-01-09 22:47:06 -05:00
thePR0M3TH3AN 24ce44833b Merge pull request #1167 from PR0M3TH3AN/codex/update-cleartrustedmutetracking-logic
Force rebuild of trusted contacts to trigger re-subscribe after clear
2026-01-09 22:44:10 -05:00
thePR0M3TH3AN 8bc39fa556 Reset trusted mute subscriptions on clear 2026-01-09 22:42:33 -05:00
thePR0M3TH3AN f8af3c27c1 Merge pull request #1166 from PR0M3TH3AN/bugfix/trust-seed-initialization-12779455138942724140
Fix Trusted Seed initialization and add blacklist enforcement
2026-01-09 22:39:22 -05:00
google-labs-jules[bot] 8aaa2f69ee Fix: Ensure trust seed mutes are loaded for session actors
- Fixed `ModerationService.reconcileTrustedMuteSubscriptions` to always force re-subscription to trusted seeds, bypassing previous state comparisons.
- Enhanced `ModerationService` to filter trusted seeds against the global admin blacklist.
- Added blacklist change event support to `AccessControl` and `TrustBootstrap` to dynamically update seeds when the blacklist changes.
- Added detailed logging to `ModerationService`, `TrustBootstrap`, and `AccessControl` to trace trust seed initialization and application.
2026-01-10 03:36:19 +00:00
google-labs-jules[bot] cda0671699 Fix: Ensure trust seed mutes are loaded for session actors
- Fixed `ModerationService.reconcileTrustedMuteSubscriptions` to always force re-subscription to trusted seeds, bypassing previous state comparisons.
- Enhanced `ModerationService` to filter trusted seeds against the global admin blacklist.
- Added blacklist change event support to `AccessControl` and `TrustBootstrap` to dynamically update seeds when the blacklist changes.
- Added detailed logging to `ModerationService` for tracking subscription lifecycle.
2026-01-10 01:40:46 +00:00
google-labs-jules[bot] 1c366a4a78 Fix: Ensure trust seed mutes are loaded for session actors
- Fixed `ModerationService.clearTrustedMuteTracking` to properly force re-subscription to trusted seeds by passing an empty previous state.
- Enhanced `ModerationService` to filter trusted seeds against the global admin blacklist.
- Added blacklist change event support to `AccessControl` and `TrustBootstrap` to dynamically update seeds when the blacklist changes.
2026-01-10 01:29:04 +00:00
thePR0M3TH3AN baf9793e3e Merge pull request #1165 from PR0M3TH3AN/codex/avoid-mutating-total-on-null-count
Preserve view totals when hydration yields no data
2026-01-09 20:06:35 -05:00
thePR0M3TH3AN 6e2db7a57f Preserve cached view totals when hydration fails 2026-01-09 19:34:39 -05:00
thePR0M3TH3AN 9d0aea45e7 Merge pull request #1164 from PR0M3TH3AN/codex/merge-collectqueueitems-into-fetchhistory
Merge queued watch history items during sync
2026-01-09 16:05:44 -05:00
thePR0M3TH3AN 3a95e5ea87 Merge queued watch history items during sync 2026-01-09 16:00:48 -05:00
thePR0M3TH3AN cc345afbcd Merge pull request #1162 from PR0M3TH3AN/codex/add-fallback-path-for-empty-actorkey
watchHistoryService: session actor fallback for publishView and local queue resilience
2026-01-09 15:55:13 -05:00
thePR0M3TH3AN 922951d74c Add session actor fallback for watch history 2026-01-09 15:53:26 -05:00
thePR0M3TH3AN adc0147825 Merge pull request #1161 from PR0M3TH3AN/fix-watch-history-sync-15826995413005562790
Fix watch history sync delay and timeouts
2026-01-09 15:41:10 -05:00
google-labs-jules[bot] c9d4cdf167 fix(watch-history): enable immediate optimistic updates and increase timeouts
- Increase default Nostr client request timeout to 15s to handle slower relays
- Implement `mergeWithQueue` in `watchHistoryService` to combine local pending views with cached remote history
- Update `HistoryView` to subscribe to `queue-changed` events and trigger immediate optimistic refreshes
- Ensures recently watched videos appear instantly in the list before network confirmation
2026-01-09 20:39:23 +00:00
thePR0M3TH3AN 76633148ba Merge pull request #1159 from PR0M3TH3AN/enhance-upload-modal-r2-link-17840660863493655553
Improve 'Learn How' link UX in Upload Modal
2026-01-09 14:11:55 -05:00
google-labs-jules[bot] 66bfc3c395 Refactor 'Learn How' button in Upload Modal to an inline link that auto-closes the modal.
- Replaced the button with a simple text link (`<a id="link-r2-help">`) inside the R2 credentials section.
- Added a click event listener in `UploadModal.js` to call `this.close()` when the link is clicked, allowing users to navigate to the setup guide without obstruction.
2026-01-09 19:09:45 +00:00
thePR0M3TH3AN c8ba54be4f Merge pull request #1156 from PR0M3TH3AN/codex/create-netlify.toml-for-build-configuration
Add Netlify build configuration
2026-01-09 12:26:35 -05:00
thePR0M3TH3AN 43edb6eac3 Add Netlify build configuration 2026-01-09 12:19:57 -05:00
thePR0M3TH3AN 905a33cb9d Merge pull request #1154 from PR0M3TH3AN/docs-upload-content-guide-2706114281832982522
Add Upload Content documentation and modal link
2026-01-08 22:41:42 -05:00
google-labs-jules[bot] dc6daa07f7 Add "Upload Content" guide, sidebar link, and improved modal button
- Create `assets/svg/upload-content-icon.svg`
- Create `content/upload-content.md` with Cloudflare R2 setup instructions
- Create `views/upload-content.html` to render the guide
- Add "Upload Content" link to `components/sidebar.html`
- Add styled "Learn How" button to `components/upload-modal.html` in the R2 credentials section
2026-01-09 03:39:05 +00:00
google-labs-jules[bot] cd38fd0c2a Add "Upload Content" guide and link in Upload Modal
- Create `assets/svg/upload-content-icon.svg`
- Create `content/upload-content.md` with Cloudflare R2 setup instructions
- Create `views/upload-content.html` to render the guide
- Add "Learn How" link to `components/upload-modal.html` in the R2 credentials section
2026-01-09 03:31:00 +00:00
thePR0M3TH3AN c19421f9a5 Merge pull request #1153 from PR0M3TH3AN/feature/thumbnail-upload-10115563811483498577
Thumbnail File Upload Support
2026-01-08 22:14:42 -05:00
google-labs-jules[bot] 0826a16ee1 Update UploadModal to toggle thumbnail browse button based on mode
- Modified `js/ui/components/UploadModal.js` to hide the thumbnail browse button when in 'External Link' mode.
- Ensured the browse button is visible when switching back to 'Upload File' mode.
- Added logic to clear the thumbnail file input when resetting the form.
2026-01-09 03:12:17 +00:00
google-labs-jules[bot] 44aed00b5e Add thumbnail upload support to UploadModal and R2Service
- Added file input and browse button for thumbnails in `upload-modal.html`.
- Updated `UploadModal.js` to handle thumbnail file selection and UI toggling.
- Updated `r2Service.js` to upload thumbnail file (if present) to R2 and update metadata.
- Ensured thumbnail keys are derived from video keys for consistent naming.
2026-01-09 03:03:35 +00:00
thePR0M3TH3AN 77fba07fc3 Merge pull request #1152 from PR0M3TH3AN/docs-r2-setup-guide-17852875101797036945
Improve R2 Setup Documentation and Error Messaging
2026-01-08 21:47:29 -05:00
google-labs-jules[bot] 3a86ad5b20 docs: Add detailed R2 setup guide and clarify API token requirement
- Add new "Setup Guide" section to `docs/storage-r2.md` detailing the dual-credential requirement (S3 Keys + Cloudflare API Token) for full automation.
- Remove unsupported "manual/S3-only" workflow documentation to prevent user confusion.
- Update `js/services/r2Service.js` error message to explicitly prompt users for an API Token when the public domain is missing, instead of suggesting manual configuration.
2026-01-09 02:44:25 +00:00
thePR0M3TH3AN 6a395f4cb0 Merge pull request #1151 from PR0M3TH3AN/refactor-similar-content-ui-5168390768142283500
Refactor "Similar Content" UI
2026-01-08 17:06:23 -05:00
google-labs-jules[bot] 90adb7db21 Refactor "Similar Content" UI for modern layout and responsiveness
- Refactored `SimilarContentCard.js` to use Flexbox layout.
- Updated `css/tailwind.source.css` to remove grid layout and use standard flex utilities.
- Improved thumbnail sizing (16:9, fixed width) and responsiveness.
- Added hover effects (background color, thumbnail zoom).
- Cleaned up typography and metadata hierarchy.
2026-01-08 21:07:17 +00:00
thePR0M3TH3AN 5e545e91dd Merge pull request #1150 from PR0M3TH3AN/fix-subscription-feed-hydration-8063110737162347770
Fix subscription feed hydration and infinite loading state
2026-01-08 14:48:16 -05:00
google-labs-jules[bot] b07332395b Fix subscription feed hydration and infinite loading state 2026-01-08 19:24:10 +00:00
thePR0M3TH3AN 19cafc9f1a Merge pull request #1149 from PR0M3TH3AN/docs-update-upload-readme-3287890274147075188
Update README for Upload Modal changes
2026-01-08 11:33:30 -05:00
google-labs-jules[bot] a46754e8bf docs: update README to reflect recent Upload Modal changes
- Terminology updated: 'Custom' -> 'External Link', 'Cloudflare' -> 'Upload File'.
- Clarified that richer metadata repeaters (captions, segments, etc.) are fully available in the Edit Video modal, while the Upload modal focuses on variants and hashtags.
- Updated 'Advanced settings' to 'Advanced options'.
2026-01-08 15:14:29 +00:00
thePR0M3TH3AN 012db07dbf Merge pull request #1148 from PR0M3TH3AN/feature/refactor-upload-modal-unified-14648826656934418979
Refactor Upload Modal to Unified UI
2026-01-08 09:46:36 -05:00
google-labs-jules[bot] caca630c66 Refactor Upload Modal to Unified UI
- Replaces split "Custom" vs "Cloudflare" forms with a single unified form
- Implements source switching between "Upload File" and "External Link"
- Consolidates NIP-71 advanced fields into a single collapsible section
- Moves R2 storage configuration to a dedicated, collapsible settings block
- Improves responsiveness and modernizes the UI layout
- Updates internal JS logic to handle unified form submission and validation
2026-01-08 14:27:36 +00:00
thePR0M3TH3AN 5045f2a0cb Merge pull request #1147 from PR0M3TH3AN/feat/r2-webtorrent-integration-8330031922940880613
feat: add client-side R2 to WebTorrent generation flow
2026-01-08 08:59:47 -05:00
google-labs-jules[bot] 9028f77464 feat: add client-side R2 to WebTorrent generation flow
Integrates WebTorrent client-side seeding into the Cloudflare R2 upload path.
- Adds `uploadFile` to `r2Service` for generic file uploads.
- Updates `UploadModal` to offer an optional "Create torrent & seed" flow.
- Generates magnet links and .torrent files in the browser after R2 upload.
- Uploads the .torrent file to R2 and populates `xs` tag.
- Populates `ws` (Web Seed) with the R2 public URL.
- Adds UI progress indicators for hashing and torrent upload.
- Enforces a 2GB file size limit for browser seeding to prevent crashes.
- Adds a mandatory legal rights confirmation checkbox for R2 uploads.
2026-01-08 13:50:53 +00:00
thePR0M3TH3AN cbeebd3714 Merge pull request #1146 from PR0M3TH3AN/upload-modal-advanced-layout-fix-3339058377323722638
Fix Upload Modal Advanced Options Overflow
2026-01-07 23:30:38 -05:00
google-labs-jules[bot] e2acdd6b12 fix(ui): use flex layout in UploadModal to fix advanced options overflow
- Converted .modal-sheet to flex flex-col to support dynamic content
- Added flex-1 min-h-0 to .modal-body to ensure proper scrolling
- Removed fixed max-height constraints that clipped expanded content
2026-01-08 04:28:53 +00:00
thePR0M3TH3AN 9582e5bc6b Merge pull request #1145 from PR0M3TH3AN/codex/update-destroy-to-reset-eventsbound
Ensure UploadModal events rebind after DOM reload
2026-01-07 23:08:08 -05:00
thePR0M3TH3AN 99e2c60e52 Make upload modal body scrollable 2026-01-07 23:05:37 -05:00
thePR0M3TH3AN d2ffa8971e Add after-toggle diagnostics for upload modal 2026-01-07 22:57:30 -05:00