Commit Graph
3030 Commits
Author SHA1 Message Date
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
thePR0M3TH3AN 32a110aaff Merge pull request #1259 from PR0M3TH3AN/docs-extensible-storage-model-5543002850150607743
Update docs for extensible storage model
2026-01-16 07:17:35 -05:00
google-labs-jules[bot] d5da4a42d1 Update docs to describe the extensible model
- Create `docs/storage-tab-design.md` covering StorageService architecture
- Update `docs/storage-r2.md` to reflect the new provider pattern
- Expand Kind 22242 details in `docs/nostr-event-schemas.md`
2026-01-16 12:15:25 +00:00
thePR0M3TH3AN 95b86a3a13 Merge pull request #1258 from PR0M3TH3AN/test-coverage-expansion-18227096233978321770
Expand tests for generic connection payloads and R2-specific mapping
2026-01-16 07:08:45 -05:00
google-labs-jules[bot] 98e63e29e6 Expand tests for generic connection payloads and R2-specific mapping
This change adds comprehensive unit and integration tests to cover:
1. `signerKeyManager.js`: Verification of key derivation from signatures and passphrases.
2. `storageService.js`: Tests for saving, retrieving, and decrypting connections, specifically verifying that generic S3 payloads (endpoint, region, bucket) are preserved alongside R2 payloads.
3. `UploadModal.js`: Integration tests mocking the storage service to verify that R2 connection details correctly map to the UI input fields and that the "Unlock" flow updates the UI state.

It also introduces `fake-indexeddb` as a dev dependency to enable reliable testing of IndexedDB interactions in the Node/JSDOM test environment.
2026-01-16 12:07:17 +00:00
thePR0M3TH3AN 12f383b483 Merge pull request #1257 from PR0M3TH3AN/doc-storage-service-comments-10895297003667402845
Docs: Improve StorageService documentation
2026-01-16 06:52:42 -05:00
thePR0M3TH3AN 03f0ac12af Merge pull request #1256 from PR0M3TH3AN/storage-provider-ui-updates-2022136461655897759
Secure Storage Key Clearing & Provider UI Updates
2026-01-16 06:49:28 -05:00
google-labs-jules[bot] 40f60ec837 Docs: Add comments to StorageService
Added detailed in-code documentation to `js/services/storageService.js` to explain the `STORE_ACCOUNTS` schema, encryption strategy (NIP-44/NIP-04 fallback), and concurrency handling.
2026-01-16 05:05:24 +00:00
google-labs-jules[bot] d04e64d713 feat: ensure storage keys clear on auth change and UI reflects provider
- Added `bitvid:auth-changed` listener in `js/app.js` to trigger `storageService.lock()` and refresh `UploadModal`.
- Implemented `refreshState()` in `js/ui/components/UploadModal.js` to manage secure storage unlocking, sensitive data clearing, and dynamic provider metadata loading.
- Updated `js/ui/profileModalController.js` to prioritize default storage connections and display the provider name (e.g., "Unlocked (R2)") in the status text.
- Ensured sensitive configuration data is nulled out when storage is locked.
2026-01-16 04:06:49 +00:00
thePR0M3TH3AN 0dd21cc670 Merge pull request #1255 from PR0M3TH3AN/feature/storage-connection-test-16098191007604609215
Implement Storage Connection Testing
2026-01-15 22:50:41 -05:00
google-labs-jules[bot] 35d3b0de73 Implement storage connection testing
Added `testConnection` to `StorageService` and `testS3Connection` to `r2-s3.js`.
Updated `ProfileModalController` to use the new `storageService.testAccess` method for verifying credentials before saving.
The test logic supports both specific bucket checks (via `HeadBucket`) and general credential checks (via `ListBuckets`).
2026-01-16 03:50:13 +00:00
thePR0M3TH3AN 4987b79dd3 Merge pull request #1254 from PR0M3TH3AN/r2-generic-storage-17736545435676975081
Make r2Service generic and integrate storageService
2026-01-15 22:35:37 -05:00
google-labs-jules[bot] e51f21681b feat: make r2Service generic and integrate storageService 2026-01-16 02:58:36 +00:00
thePR0M3TH3AN 81fcbad6cc Merge pull request #1253 from PR0M3TH3AN/fix-moderation-trusted-mute-hide-1721971285351982326
Fix: Respect feed policy bypass for trusted mute hiding on Home feed
2026-01-15 21:45:02 -05:00
google-labs-jules[bot] dae7bfed8b Fix trusted mute hide threshold logic on home feed
- Ensure 'decorateVideoModeration' in 'js/app.js' respects the feed policy bypass logic (simulating server-side behavior).
- Pass 'feedContext' (feedName, feedVariant) to 'decorateVideoModeration' from 'refreshVisibleModerationUi' and 'handleModerationSettingsChange'.
- This prevents videos on the Home feed from being strictly hidden (removed from DOM) when the "Hide after trusted mutes" threshold is met, ensuring they remain visible but blurred as expected by the bypass policy.
- Verified with reproduction script that 'hidden' becomes false and 'blurThumbnail' remains true on Home feed context.
2026-01-16 02:43:03 +00:00
thePR0M3TH3AN 1a09e44cb9 Merge pull request #1252 from PR0M3TH3AN/feature/upload-modal-storage-service-10990407034706299008
Secure R2 Credentials in UploadModal via StorageService
2026-01-15 21:41:27 -05:00
google-labs-jules[bot] cf9d1c08be Refactor UploadModal to use StorageService for secure R2 credentials 2026-01-16 02:35:00 +00:00