Commit Graph
2815 Commits
Author SHA1 Message Date
thePR0M3TH3AN c2eb2cdc19 Improve npub decoding in user blocks 2026-01-11 09:40:41 -05:00
thePR0M3TH3AN b5fcdd9d95 Merge pull request #1180 from PR0M3TH3AN/codex/update-access-control-logic-and-ui
Allow overlapping whitelist and blacklist entries; surface overlaps in admin UI
2026-01-11 09:36:02 -05:00
thePR0M3TH3AN 40490afac2 Allow overlapping admin lists 2026-01-11 09:33:06 -05:00
thePR0M3TH3AN d1fdb5388c Merge pull request #1179 from PR0M3TH3AN/codex/update-access-control-logic-and-documentation
Enforce blacklist precedence over whitelist in access control
2026-01-11 09:19:09 -05:00
thePR0M3TH3AN 1211f1a25d Adjust blacklist precedence for access control 2026-01-11 09:14:35 -05:00
thePR0M3TH3AN be3a42ef45 Merge pull request #1178 from PR0M3TH3AN/codex/add-session-actor-lifecycle-hook-and-update-ui
Sync session actor blacklist on lifecycle events
2026-01-11 09:11:48 -05:00
thePR0M3TH3AN 83a9fdb097 Track regenerated Tailwind CSS 2026-01-11 09:10:50 -05:00
thePR0M3TH3AN db2b08378d Add session actor hook for moderation sync 2026-01-11 08:50:22 -05:00
thePR0M3TH3AN eb4cb84909 Merge pull request #1176 from PR0M3TH3AN/codex/add-access-control-blacklist-change-handler
Refresh guest feeds on admin blacklist changes
2026-01-10 20:38:10 -05:00
thePR0M3TH3AN 4a4ffa45b4 Refresh feeds on admin blacklist changes for guests 2026-01-10 20:37:11 -05:00
thePR0M3TH3AN e5d2d923de Merge pull request #1175 from PR0M3TH3AN/codex/add-reconciliation-path-for-admin-blacklist
Add session actor blacklist reconciliation
2026-01-10 20:34:16 -05:00
thePR0M3TH3AN faaad9c724 Add session actor blacklist reconciliation 2026-01-10 20:33:15 -05:00
thePR0M3TH3AN 0b8d45ed76 Merge pull request #1174 from PR0M3TH3AN/codex/session-actor-moderation-13643754943913031156
Enable session-local moderation for anonymous users
2026-01-10 17:43:11 -05:00
google-labs-jules[bot] 7c7ac3e9f2 Enable session-local moderation for anonymous users
- Update `ModerationService` to recognize session actors and load mutes from local storage.
- Update `UserBlockListManager` to persist blocks locally for session actors without relay publication.
- Ensure `submitReport` falls back to the session actor's signer.
- Add `resolveStorage` helper to safely access localStorage.
2026-01-10 22:41:18 +00:00
thePR0M3TH3AN 2c91e6359c Merge pull request #1173 from PR0M3TH3AN/local-baseline-blocks-16128041238995409855
Seed baseline block list for anonymous session actors
2026-01-10 17:21:18 -05:00
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