Commit Graph
60 Commits
Author SHA1 Message Date
google-labs-jules[bot] cbd8af42a6 Enforce v=2 tag and mandatory encryption for watch history 2026-01-17 11:32:31 +00:00
google-labs-jules[bot] c322fcee14 fix(watch-history): add manual refresh and fix dynamic pulling
This commit addresses issues with the watch history not updating dynamically and adds a manual refresh mechanism.

Changes:
- Added a "Refresh" button to the watch history view in `views/history.html` and `js/historyView.js`.
- Updated `watchHistoryService.js` to accept a `forceRefresh` option in `loadLatest`, which bypasses the cache freshness check and triggers a relay fetch.
- Updated `js/feedEngine/watchHistoryFeed.js` to propagate the `forceRefresh` flag from the runtime context to the service.
- Added user feedback (toast messages and logs) for "Clear Local History" and "Republish Now" actions.
- Updated `tests/watch-history.test.mjs` to align with the new `fetchHistory` signature.
2026-01-07 14:05:21 +00:00
google-labs-jules[bot] 873b534867 fix(watch-history): use localStorage for pending video queue
Replace sessionStorage with localStorage to ensure pending watch history updates persist across tab closures and sessions. Update `loadLatest` to always restore queue state on initialization to catch any pending uploads.
2026-01-07 00:11:56 +00:00
thePR0M3TH3AN 891226697d Simplify watch history pipeline 2026-01-06 18:53:27 -05:00
thePR0M3TH3AN 3996986e63 Remove nostr shim and retarget imports 2026-01-06 15:32:21 -05:00
google-labs-jules[bot] 1b577d3326 Refactor: remove legacy compatibility systems
- Removed `WATCH_HISTORY_LEGACY_KIND` (30078) support from watch history fetch and config.
- Removed `WATCH_HISTORY_LEGACY_LIST_IDENTIFIERS` from config.
- Removed `LEGACY_EVENTS_STORAGE_KEY` (bitvidEvents) migration logic from client.
- Removed `loadLegacyAdminState` and `LEGACY_STORAGE_KEYS` from admin list store.
- Updated tests to remove references to legacy kinds.
2026-01-06 19:48:55 +00:00
google-labs-jules[bot] b3aeb95a0b Fix watch history reliability by migrating to Kind 30003
Migrates watch history persistence from Kind 30078 (Application Data) to Kind 30003 (Bookmark List) to resolve blocking issues on some relays. Updates fetch logic to query both kinds for backward compatibility.
2026-01-06 19:03:03 +00:00
google-labs-jules[bot] 99c3f60a23 feat: implement video hydration stage for watch history feed
This introduces a new stage in the watch history feed pipeline that fetches missing video metadata from relays. Since watch history storage was optimized to store only event IDs, this hydration step ensures that the UI can display titles and thumbnails without requiring them to be persisted in the history payload itself.

- Implemented `createWatchHistoryHydrationStage` in `js/feedEngine/watchHistoryFeed.js`.
- Integrated `convertEventToVideo` to transform fetched events into usable video objects.
- Added a comprehensive integration test in `tests/watch-history.test.mjs` verifying the full flow from ID-only storage to hydrated feed items.
2026-01-05 20:22:34 +00:00
google-labs-jules[bot] 4c7230f540 Remove metadata storage and handling from watch history
Removes the metadata argument from `WatchHistoryService.publishView` and cleans up the associated caching and resolution logic in `watchHistory.js` and `watchHistoryFeed.js`. Deletes `js/watchHistoryMetadata.js` as it is no longer used.

This simplification ensures watch history strictly manages pointers and timestamps, leaving metadata resolution to higher-level consumers. It also reduces the payload size and complexity of persisted history records.

Tests have been updated to reflect the API changes.
2026-01-05 16:58:59 +00:00
google-labs-jules[bot] ac3873e5d7 Refactor watch history service to use idempotent monthly upsert logic.
Removes legacy snapshot/chunk retry scheduling in favor of a monthly upsert approach.
Updates state persistence to remove `pendingSnapshotId`.
Fixes race condition in `scheduleRepublishForQueue` by using selective queue pruning.
Ensures data is not lost on publish failure in `snapshot`.
Updates tests to align with new architecture.
2026-01-05 15:42:48 +00:00
google-labs-jules[bot] e9ba3f6681 Refactor watch history to use plaintext monthly buckets
- Update `js/nostrEventSchemas.js` to remove encryption tagging and update schema for `WATCH_HISTORY`.
- Update `js/nostr/watchHistory.js` to:
  - Bump storage version to 4.
  - Bucket items by `YYYY-MM`.
  - Publish plaintext JSON payloads with only event IDs and timestamps.
  - Remove encryption logic from publishing.
  - Update fetching to handle plaintext and fallback to legacy parsing.
- Update `js/watchHistoryService.js` to strip metadata from queued items and handle new snapshot response.
- Update `tests/watch-history.test.mjs` to reflect new plaintext behavior and disabled obsolete tests.
2026-01-05 15:26:31 +00:00
google-labs-jules[bot] cc25635ce6 Refactor watch history to use monthly buckets (v3)
Refactors `js/nostr/watchHistory.js` to store and publish watch history items in monthly buckets (`YYYY-MM`) instead of using chunk splitting. Updates storage version to 3, migrates existing data, and simplifies fetch/merge logic to handle monthly records. Removes legacy chunk rebalancing code. Updates tests to verify monthly bucketing behavior.
2026-01-05 14:11:57 +00:00
google-labs-jules[bot] b79a8eb0d0 Refactor watch history to use monthly payload schema
* Redefine `parseWatchHistoryPayload` to support `month`, `events` (IDs), and `watchedAt` map.
* Update `mergeWatchHistoryItemsWithFallback` to merge new monthly fields with fallback items.
* Update `buildWatchHistoryPayload` to produce payloads with `events` instead of `items`.
* Update `WatchHistoryManager` to remove legacy chunk index handling.
* Ensure backward compatibility for legacy chunk payloads.
2026-01-04 22:15:27 +00:00
google-labs-jules[bot] 595d4cbe07 Refactor watch history to use single monthly event
Replaces the legacy chunked storage architecture with a single encrypted event per month.
- Renames `buildWatchHistoryChunkEvent` to `buildWatchHistoryEvent`.
- Updates `WatchHistoryManager` to publish and fetch single events, maintaining read compatibility for legacy chunks.
- Simplifies payload construction and removes chunk indexing logic.
- Updates tests to verify single-event publishing and legacy fallback.
2026-01-04 22:03:34 +00:00
google-labs-jules[bot] 34b835d4e1 Refactor watch history to use single monthly payload event
Replaces the chunked watch history implementation with a single monthly payload.
This simplifies the event structure and removes chunking logic while maintaining backward compatibility for reading legacy chunked events.
Updates `parseWatchHistoryPayload`, `buildWatchHistoryPayload`, `publishSnapshot` and `fetch` in `js/nostr/watchHistory.js`.
Updates tests to reflect the new single-event behavior.
2026-01-04 21:19:41 +00:00
thePR0M3TH3AN cd3c3824b9 Handle dual NIP-44/NIP-04 watch history encryption 2025-10-30 11:17:39 -04:00
thePR0M3TH3AN 217fe807b7 Handle inflight watch history queue updates 2025-10-26 16:14:26 -04:00
thePR0M3TH3AN ba6b56dc26 Switch moderation hide flows to block 2025-10-25 21:54:31 -04:00
thePR0M3TH3AN 87bde7f022 Add moderation UI support to watch history cards 2025-10-25 19:39:18 -04:00
thePR0M3TH3AN 1ff3523bd0 Improve Nostr watch history snapshot caching 2025-10-22 20:13:10 -04:00
thePR0M3TH3AN 5e0a880d09 Add nostr watch history unit tests 2025-10-22 14:37:38 -04:00
thePR0M3TH3AN a5562b4707 Refactor watch history helpers to new module 2025-10-22 14:08:47 -04:00
thePR0M3TH3AN 7c9db2eeaf Fix watch history snapshot merging 2025-10-20 22:36:19 -04:00
thePR0M3TH3AN 8393283cf8 Persist NIP-07 permissions between sessions 2025-10-20 13:21:01 -04:00
thePR0M3TH3AN c85567468f Persist NIP-07 permissions cache to storage 2025-10-20 09:11:38 -04:00
thePR0M3TH3AN 4d367109d5 Preserve playback metadata in watch history 2025-10-09 19:23:29 -04:00
thePR0M3TH3AN 5d7df0eb61 Add manual npub decode fallback and expand tests 2025-10-09 15:37:52 -04:00
thePR0M3TH3AN 89986759e0 Short-circuit hex actor keys 2025-10-09 15:26:51 -04:00
thePR0M3TH3AN 3b0465067f Normalize watch history actors to hex 2025-10-09 14:19:00 -04:00
thePR0M3TH3AN fd6919b65f Ensure watch history decrypts request nip04 permission 2025-10-09 12:29:59 -04:00
thePR0M3TH3AN 46ef2b8123 Ensure watch history loads include full lists by default 2025-10-08 08:11:26 -04:00
thePR0M3TH3AN 10751a8fb9 Improve watch history loading responsiveness 2025-10-08 07:33:44 -04:00
thePR0M3TH3AN cf34e28a47 Refactor app orchestrator into Application with dependency injection 2025-10-03 21:10:22 -04:00
thePR0M3TH3AN 762dbe5dcc Fix watch history sync when logged in 2025-10-02 18:45:44 -04:00
thePR0M3TH3AN c3ed4bc6ea Scope watch history sync to logged users 2025-10-02 18:26:43 -04:00
thePR0M3TH3AN b1a493f113 Enable local watch history fallback when sync disabled 2025-10-02 17:07:21 -04:00
thePR0M3TH3AN 041aa58398 Handle partial watch history publish retries 2025-10-02 16:14:20 -04:00
thePR0M3TH3AN f6729b8e35 Fix watch history batch window 2025-10-02 15:59:06 -04:00
thePR0M3TH3AN 9112aeadcc Add comprehensive watch history test coverage 2025-10-02 15:41:41 -04:00
thePR0M3TH3AN 48410b1abb chore: remove watch history logic 2025-10-02 11:43:15 -04:00
thePR0M3TH3AN 38924abdcc chore: migrate watch history kind to 30079 2025-10-01 21:58:31 -04:00
thePR0M3TH3AN b6dc562a3e Revert "Guard watch history publish when relays omit seen listener" 2025-10-01 21:30:18 -04:00
thePR0M3TH3AN 672c7cb052 Guard watch history publish against missing seen listener 2025-10-01 21:25:38 -04:00
thePR0M3TH3AN 8ff22e1e81 Increase watch history fetch limit and expand tests 2025-10-01 21:02:55 -04:00
thePR0M3TH3AN 61c8b3a8ee Handle missing signer when decrypting watch history 2025-10-01 20:50:08 -04:00
thePR0M3TH3AN a1505b7538 Handle watch history snapshot publish without NIP-07 signer 2025-10-01 20:37:47 -04:00
thePR0M3TH3AN ea25e0a92a Guard relay publish listeners 2025-10-01 19:34:26 -04:00
thePR0M3TH3AN 9416efdf1a Handle plaintext watch history chunks 2025-10-01 19:20:11 -04:00
thePR0M3TH3AN bea08e3b3c Sort watch history by most recent view 2025-10-01 19:00:54 -04:00
thePR0M3TH3AN ecd3f4026e Restore canonical watch history snapshot format 2025-10-01 18:47:57 -04:00