Commit Graph
3046 Commits
Author SHA1 Message Date
thePR0M3TH3AN 7a7ecde97f Merge pull request #1281 from PR0M3TH3AN/cache-policies-wiring-2547401626759645404
Centralized Cache Policy Registry
2026-01-17 14:15:40 -05:00
google-labs-jules[bot] 86ffb8cb2a Define centralized cache policies and wire them into fetchers 2026-01-17 19:12:09 +00:00
thePR0M3TH3AN cb87d556a1 Merge pull request #1280 from PR0M3TH3AN/unified-db-sync-engine-11458894156823216819
Implement UnifiedDB and SyncEngine Caching Architecture
2026-01-17 13:33:00 -05:00
google-labs-jules[bot] fa8408961a feat: Implement UnifiedDB and SyncEngine\n\n- Replaced localStorage with IndexedDB (UnifiedDB) for robust data storage.\n- Implemented SyncEngine for advanced caching (SWR, TTL, background sync).\n- Migrated key services (WatchHistory, Subscriptions, UserBlocks, etc.) to new architecture.\n- Fixed regressions in ModerationService, TrustSeeds, and UI modals.\n- Resolved test failures in integration suite. 2026-01-17 18:13:15 +00:00
thePR0M3TH3AN 3ebb385717 Merge pull request #1279 from PR0M3TH3AN/fix-mobile-thumbnails-5841283595093157949
Fix oversized watch history thumbnails on mobile
2026-01-17 09:50:47 -05:00
google-labs-jules[bot] fca40daa70 Fix oversized watch history thumbnails on mobile
- Replaced `w-full` with `w-56 max-w-full` in `.watch-history-card__thumbnail` class.
- This ensures thumbnails are constrained to ~224px (14rem) on all viewports, fixing the "bleeding" issue on mobile while maintaining the desktop layout.
- The `max-w-full` ensures safety on very narrow screens.
2026-01-17 14:47:55 +00:00
thePR0M3TH3AN 424acc16a4 Merge pull request #1278 from PR0M3TH3AN/remove-watch-history-privacy-text-5720120204481768459
Remove watch history privacy banner and info text
2026-01-17 09:10:36 -05:00
google-labs-jules[bot] 163327aaa8 Remove watch history privacy banner and info text 2026-01-17 13:58:39 +00:00
thePR0M3TH3AN a0e02572ac Merge pull request #1277 from PR0M3TH3AN/fix-watch-history-mobile-layout-and-sort-13478333704116662784
Fix Watch History Mobile Layout & Sort Order
2026-01-17 08:42:12 -05:00
google-labs-jules[bot] b059d66d80 Fix watch history mobile layout and sort order
- Updated CSS for `.watch-history-card` to use `flex-col` on mobile for stacked layout, switching to `sm:flex-row` on larger screens.
- Added `w-full` to `.watch-history-card__thumbnail` on mobile to constrain image width.
- Fixed a bug in `js/nostr/watchHistory.js` where `computeWatchHistoryFingerprintForItems` was sorting the live history array in-place by ID, causing the UI to display an incorrect (non-chronological) order. The fix involves creating a shallow copy before sorting.
- Updated `tests/nostr/watchHistory.test.js` to verify behavior against the current storage version (`v5`).
2026-01-17 13:35:37 +00:00
thePR0M3TH3AN fef2d547ec Merge pull request #1276 from PR0M3TH3AN/codex/watch-history-v2-encryption-596800188208881719
Enforce v=2 tag and mandatory encryption for watch history
2026-01-17 07:56:44 -05:00
google-labs-jules[bot] cbd8af42a6 Enforce v=2 tag and mandatory encryption for watch history 2026-01-17 11:32:31 +00:00
thePR0M3TH3AN a9ec320806 Merge pull request #1275 from PR0M3TH3AN/doc-client-js-improvements-17150798691171609781
Improve NostrClient documentation
2026-01-17 05:06:51 -05:00
google-labs-jules[bot] 4f1b180c94 docs: improve architectural comments in NostrClient 2026-01-17 05:21:45 +00:00
thePR0M3TH3AN 93038893d7 Merge pull request #1273 from PR0M3TH3AN/feature/search-functionality-12617281545620383987
Implement Search Bar Functionality
2026-01-16 22:57:23 -05:00
google-labs-jules[bot] 52043a1872 feat: Implement local profile name search fallback
- Updated `js/searchView.js` to augment NIP-50 relay search with a local scan of cached profiles.
- `performProfileSearch` now iterates `nostrClient.activeMap` (locally cached videos) to find unique authors.
- It retrieves profile metadata using `app.getProfileCacheEntry(pubkey)`.
- It matches queries against `name`, `about`, `nip05`, and `lightningAddress`.
- Local results are merged with relay results, ensuring robust search functionality even if relay connections are unstable.
- Preserved existing NIP-50 relay search logic.
2026-01-17 03:56:09 +00:00
google-labs-jules[bot] be5c39f6e8 Implement search functionality for profiles and videos
- Modified `js/index.js` to handle search queries, detecting npubs for direct navigation.
- Added `views/search.html` and `js/searchView.js` to implement search UI and logic.
- Implemented dual-search strategy:
  - Profile search using NIP-50 on Kind 0.
  - Video search using NIP-50 on Kind 30078 and local cache search (robustness).
- Registered new search view in `js/viewManager.js`.
- Verified with Playwright tests.
2026-01-17 03:44:23 +00:00
google-labs-jules[bot] 2515ed9e8e Implement user and video search functionality
- Updated `js/index.js` to handle search input:
  - Redirects valid npubs to the channel profile.
  - Redirects other queries to the new search view.
- Created `views/search.html` to display search results.
- Created `js/searchView.js` to perform NIP-50 searches for profiles (Kind 0) and videos (Kind 30078).
  - Includes specific handling for hashtag searches (using `#t` filter).
- Updated `js/viewManager.js` to register the new search view.
2026-01-16 23:02:42 +00:00
thePR0M3TH3AN 827e99be6e Merge pull request #1272 from PR0M3TH3AN/nip46-ui-refactor-6379694737496943219
Refactor NIP-46 Login UI
2026-01-16 16:15:08 -05:00
google-labs-jules[bot] 8c042d74d2 Expose NIP-04/NIP-44 encryption methods for NIP-46 signers
- Updated `Nip46RpcClient` in `js/nostr/nip46Client.js` to implement `nip04Encrypt`, `nip04Decrypt`, `nip44Encrypt`, and `nip44Decrypt` methods by calling the respective RPC methods on the remote signer.
- Exposed these encryption methods in the `activeSignerCache` object returned by `getActiveSigner()`.
- This ensures that functions relying on encryption (like `StorageService` unlocking and DM decryption) work correctly when logged in via NIP-46.
2026-01-16 21:14:00 +00:00
thePR0M3TH3AN 27d0da2415 Merge pull request #1271 from PR0M3TH3AN/event-details-raw-json-16030877226735911355
Display raw event JSON in Event Details modal
2026-01-16 16:07:51 -05:00
google-labs-jules[bot] cf4c9171bb feat: reconstruct raw content in Event Details modal fallback
- Updated `EventDetailsModal` to handle cases where fetching the raw event fails or returns null.
- Implemented `getRawEvent` logic to reconstruct the `content` JSON string from available video metadata (title, thumbnail, description, etc.) if the raw content is missing.
- Ensures the user can inspect key metadata (like thumbnail URLs) even when the original signed event payload is not available in memory or via network fetch.
- Explicitly marks the signature as "unavailable (cached)" in fallback scenarios.
2026-01-16 20:57:39 +00:00
google-labs-jules[bot] 065e74769c Refactor NIP-46 login UI to be cleaner and QR-first
- Simplified `components/login-modal.html` to center the QR code and use a "Copy Link" button instead of a large textarea.
- Updated `js/ui/loginModalController.js` to support the new DOM structure and error handling.
- Added `docs/nip46-roadmap.md` to document current state and future features.
- Fixed `NostrClient.destroy()` usage (synchronous void method) in `js/nostr/client.js`.
- Relaxed NIP-46 `connect` response validation in `js/nostr/client.js` and `js/nostr/nip46Client.js` to accept "ack" (case-insensitive) as a valid success signal, preventing timeouts with signers that do not echo the secret.
2026-01-16 20:45:58 +00:00
google-labs-jules[bot] a82c41edb9 feat: reconstruct raw content in Event Details modal fallback
- Updated `EventDetailsModal` to handle cases where fetching the raw event fails or returns null.
- Implemented `getRawEvent` logic to reconstruct the `content` JSON string from available video metadata (title, thumbnail, description, etc.) if the raw content is missing.
- Ensures the user can inspect key metadata (like thumbnail URLs) even when the original signed event payload is not available in memory or via network fetch.
- Explicitly marks the signature as "unavailable (cached)" in fallback scenarios.
2026-01-16 19:41:15 +00:00
google-labs-jules[bot] 4196a6bb42 Refactor NIP-46 login UI to be cleaner and QR-first
- Simplified `components/login-modal.html` to center the QR code and use a "Copy Link" button instead of a large textarea.
- Updated `js/ui/loginModalController.js` to support the new DOM structure and error handling.
- Added `docs/nip46-roadmap.md` to document current state and future features.
2026-01-16 19:40:46 +00:00
google-labs-jules[bot] c908686043 feat: fetch and display raw event JSON in EventDetailsModal
- Updated `EventDetailsModal` to fetch the full raw event using `nostrClient.getEventById` with `{ includeRaw: true }`.
- Added a loading state ("Loading raw event...") to the JSON code block.
- Updated the "Copy JSON" action to copy the full raw event when available.
- Falls back to the reconstructed event object if the raw fetch fails.
2026-01-16 19:27:21 +00:00
thePR0M3TH3AN fba936635e Merge pull request #1270 from PR0M3TH3AN/codex/enhance-state-identifiers-and-render-overrides
Author-aware moderation overrides and profile modal UI for active overrides
2026-01-16 13:52:25 -05:00
thePR0M3TH3AN 5c3230074e Add moderation override tracking by author and content 2026-01-16 13:50:32 -05:00
thePR0M3TH3AN ee5e73c03f Merge pull request #1269 from PR0M3TH3AN/fix-inconsistent-subscriptions-loading-972138206177946035
Fix inconsistent subscriptions loading with persistent caching
2026-01-16 11:21:50 -05:00
google-labs-jules[bot] 1d8ab920ce Fix inconsistent subscriptions loading with persistent caching
Implements a stale-while-revalidate strategy for the SubscriptionsManager.
- Loads subscriptions from localStorage immediately to show UI state.
- Fetches fresh data from relays in the background.
- Preserves cached data if relays fail or return empty results (preventing "No subscriptions found" errors).
- Updates cache optimistically on subscribe/unsubscribe actions.
2026-01-16 16:18:02 +00:00
thePR0M3TH3AN 04bf9438e6 Merge pull request #1268 from PR0M3TH3AN/codex/extend-moderation-settings-schema-and-thresholds
Add per-category trusted-mute thresholds and category-aware mute handling
2026-01-16 10:54:08 -05:00
thePR0M3TH3AN e6f1d54bdb Merge pull request #1267 from PR0M3TH3AN/generic-storage-upload-modal-9485376532964213761
Generic Storage Support for Upload Modal
2026-01-16 10:49:57 -05:00
thePR0M3TH3AN 3a3339a57a Add per-category trusted mute thresholds 2026-01-16 10:49:32 -05:00
google-labs-jules[bot] 2b446e8ddd Refactor upload modal for generic storage and read-only config
- Updates Upload Modal UI labels to be provider-agnostic (e.g., 'Storage Credentials', 'Endpoint').
- Implements a read-only 'Summary View' for configured storage connections, collapsing the editable form by default.
- Adds 'Manage Storage' button that navigates to the Profile Modal's storage pane.
- Updates `initUploadModal.js` to inject the navigation callback.
- Updates `r2Service.js` status messages to be generic.
- Fixes unlock flow to ensure UI updates after storage unlock.
2026-01-16 15:44:22 +00:00
thePR0M3TH3AN 4cdeed7773 Merge pull request #1266 from PR0M3TH3AN/codex/add-seed-only-condition-detection
Show seeded-moderator-only indicator in moderation settings
2026-01-16 10:35:49 -05:00
thePR0M3TH3AN b983661b41 Add seed-only moderation indicator 2026-01-16 10:26:21 -05:00
thePR0M3TH3AN bcf42aae1c Merge pull request #1265 from PR0M3TH3AN/codex/add-helper-text-for-mute-threshold-input
Clarify trusted-mute hide helper text in profile modal and docs
2026-01-16 10:20:53 -05:00
thePR0M3TH3AN 24cea57581 Add moderation helper copy for trusted mute hides 2026-01-16 10:18:38 -05:00
thePR0M3TH3AN df864585ae Merge pull request #1264 from PR0M3TH3AN/codex/add-time-based-decay-to-mute-lists
Add 60-day rolling window for trusted mute aggregation
2026-01-16 10:09:57 -05:00
thePR0M3TH3AN 9c3a32c029 Add time-based decay for trusted mute aggregation 2026-01-16 10:09:35 -05:00
thePR0M3TH3AN 0f4775819e Merge pull request #1263 from PR0M3TH3AN/codex/extend-safety-moderation-section-display
Add trusted moderation stats to Safety & Moderation panel
2026-01-16 09:57:44 -05:00
thePR0M3TH3AN d2d55849b9 Add trusted moderation stats to profile modal 2026-01-16 09:55:10 -05:00
thePR0M3TH3AN ad93712a9e Merge pull request #1261 from PR0M3TH3AN/similar-content-moderation-fix-3143817000446806676
Fix Similar Content sidebar blurring and moderation buttons
2026-01-16 09:35:14 -05:00
google-labs-jules[bot] 9ac3cbd07e Fix blur visuals by clearing backdrop and forcing inline filter on SimilarContentCard
- Clears the card backdrop image when blurring is active to prevent the sharp background from showing through the blurred thumbnail (ghosting effect).
- Adds inline `filter: blur(24px)` to the thumbnail image as a fallback to ensure the blur effect is applied even if the `blur-xl` class is overridden or missing.
- Updates `refreshModerationUi` to handle backdrop restoration when unblurring.
2026-01-16 14:16:29 +00:00
google-labs-jules[bot] f6f76e02fd Fix blur visuals by clearing backdrop and forcing inline filter on SimilarContentCard
- Clears the card backdrop image when blurring is active to prevent the sharp background from showing through the blurred thumbnail (ghosting effect).
- Adds inline `filter: blur(24px)` to the thumbnail image as a fallback to ensure the blur effect is applied even if the `blur-xl` class is overridden or missing.
- Updates `refreshModerationUi` to handle backdrop restoration when unblurring.
2026-01-16 14:01:40 +00:00
google-labs-jules[bot] e6ebbb8343 Fix blurred thumbnail visuals and add moderation buttons to SimilarContentCard
- Adds `blur-xl` class to `SimilarContentCard` thumbnails when blurred, ensuring visual consistency.
- Implements `createModerationOverrideButton`, `createModerationHideButton`, and `createModerationBlockButton` in `SimilarContentCard.js` to provide missing interactivity.
- Updates `VideoModal.js` to wire up moderation callbacks (`onModerationOverride`, `onModerationHide`, `onModerationBlock`) when initializing similar content cards, dispatching global moderation events.
- Ensures moderation actions in the similar content sidebar function identically to the main video player.
2026-01-16 13:34:29 +00:00
thePR0M3TH3AN 991c090fc4 Merge pull request #1260 from PR0M3TH3AN/bugfix/login-generate-cancel-8391081948034062422
Fix Create Account cancellation flow and ensure fresh keys on entry
2026-01-16 08:00:14 -05:00
google-labs-jules[bot] eed0193d18 Fix stuck Create Account button after cancellation
- Fix a logic error where the `isSelectionInProgress` flag was not reset if the user cancelled the "Create Account" flow (or other flows with early returns).
- Wrapped the entire `handleProviderSelection` logic in a `try...finally` block to ensure the flag is always reset, preventing the button from becoming unresponsive.
- Verified with reproduction test that cancelling and re-opening the "Create Account" view now works correctly.
2026-01-16 12:58:55 +00:00
google-labs-jules[bot] a27dcd7a1e Fix double-click issue in LoginModal and add Generate Keys button
- Prevent race condition where double-clicking "Create Account" could stack multiple views, causing navigation issues on cancel.
- Implement "Generate Keys" button in the Create Account view to defer key generation until user action, as requested by the user.
- Ensure keys are not generated immediately upon opening the view.
- Fix memory leak in LoginModalController destroy method.
2026-01-16 12:53:25 +00:00
google-labs-jules[bot] 0e6bc392c6 Fix login modal create account cancellation and key persistence logic
- Always generate fresh keys when opening the Create Account view, as per user request.
- Fix issue where cancelling the Create Account view could trigger a re-entry or double-click behavior by adding event.stopPropagation() to the Cancel button.
- Fix memory leak in LoginModalController destroy method by properly clearing the modal close observer and interval.
2026-01-16 12:42:06 +00:00