Commit Graph
2228 Commits
Author SHA1 Message Date
google-labs-jules[bot]andPR0M3TH3AN f676fb2ff5 [security] replace innerHTML in RevertModal.js
Migrated `js/ui/components/RevertModal.js` to safe DOM APIs (`createElement`, `textContent`, `DOMParser`).
Extracted rendering logic to `js/ui/components/revertModalRenderers.js`.
Updated baseline in `scripts/check-innerhtml.mjs` (0 remaining usages).
Updated tests to mock DOMParser.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 18:58:02 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5338942ea3 docs: document profileModalController.js and add architecture overview (docs-code-investigator)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 17:41:32 +00:00
google-labs-jules[bot]andPR0M3TH3AN 8a2deab842 fix: resolve initialization race conditions in NostrClient and app startup
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 13:37:27 +00:00
google-labs-jules[bot]andPR0M3TH3AN e6a73687dd fix: resolve NostrClient initialization race condition
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 13:22:43 +00:00
thePR0M3TH3AN a7d5448f83 Merge pull request #2505 from PR0M3TH3AN/agents/daily/decompose-agent-1771068993-9839708061087795531
[decompose] extract helpers from js/ui/components/VideoModal.js
2026-02-14 07:55:18 -05:00
google-labs-jules[bot]andPR0M3TH3AN 54be0efcac [decompose] extract helpers from js/ui/components/VideoModal.js
Decomposed js/ui/components/VideoModal.js by extracting "Similar Video" and "Pointer Key" logic into a new helper module js/ui/components/VideoModalSimilarHelpers.js.

- Reduced VideoModal.js line count from 6334 to 6045.
- Added comprehensive unit tests for extracted helpers.
- Updated check-file-size.mjs baseline.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 11:46:47 +00:00
google-labs-jules[bot]andPR0M3TH3AN 6209d32b52 fix: add missing moderation aliases to ProfileModalController
- Added aliases/delegate properties for `moderationBlurInput`, `moderationAutoplayInput`, `moderationMuteHideInput`, `moderationSpamHideInput`, `moderationSaveButton`, `moderationResetButton`, `moderationStatusText`, `moderationOverridesList`, `moderationOverridesEmpty`, `moderationTrustedContactsCount`, `moderationTrustedMuteCount`, `moderationTrustedReportCount`, `moderationSeedOnlyIndicator`, `moderationHideControlsGroup`, `moderationHideControlElements` to `ProfileModalController.js`.
- Added delegate methods for `handleModerationSettingsSave`, `handleModerationSettingsReset`, `getModerationSettingsDefaults`.
- This ensures backward compatibility for existing tests like `tests/ui/profile-modal-moderation-settings.test.mjs`.
- Verified with unit tests (`tests/profile-modal-controller.test.mjs` and `tests/ui/profile-modal-moderation-settings.test.mjs`).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 11:07:08 +00:00
google-labs-jules[bot]andPR0M3TH3AN f35d27d471 fix: repair profileModalController decomposition by adding delegate methods
- Added delegate methods for `refreshAdminPaneState`, `refreshModerationSettingsUi`, `updateModerationTrustStats`, `runAdminMutation`, `sendAdminListNotification`, `describeAdminError`, `describeNotificationError`, `notifyAdminError` to `ProfileModalController.js`.
- Added aliases for properties like `moderatorSection` in `ProfileModalController.js` to satisfy tests.
- Removed duplicated method implementations from `ProfileModalController.js`.
- Verified with unit tests (`tests/profile-modal-controller.test.mjs`) and linting.
- Reduced `ProfileModalController.js` size by ~2000 lines.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 10:59:14 +00:00
google-labs-jules[bot]andPR0M3TH3AN 4f4faeefdd Daily Agent: const-refactor-agent (NIP-07 & NIP-46 Timeouts)
- Refactored duplicate `5000` ms timeouts in `js/nostr/nip07Permissions.js`, `js/nostr/managers/SignerManager.js`, and `js/nostr/nip46Client.js`.
- Introduced `NIP07_EXTENSION_WAIT_TIMEOUT_MS` and `NIP46_PING_TIMEOUT_MS`.
- Created execution artifacts and scheduler completion log.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-14 05:43:25 +00:00
google-labs-jules[bot]andPR0M3TH3AN 30bd4a75f6 feat: integrate TORCH agent dashboard into UI sidebar
- Add "Dev Tools" button to the sidebar footer menu.
- Configure `js/constants.js` with `DEV_DASHBOARD` view type.
- Refactor `views/dev/agent-dashboard.html` to be compatible with `loadView` (moved styles to body, updated links).
- Add cleanup logic to dashboard script to prevent memory leaks when navigating away.
- Fix duplicate import in `js/nostr/reactionEvents.js`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 23:50:42 +00:00
thePR0M3TH3AN f3872a2b60 Merge pull request #2480 from PR0M3TH3AN/agents/weekly/perf-optimization-agent-10671579183068500522
perf: throttle reaction event publishing
2026-02-13 17:22:14 -05:00
google-labs-jules[bot]andPR0M3TH3AN a179abcae1 perf: throttle reaction event publishing
- Replace Promise.all with pMap in publishVideoReaction to limit concurrency
- Add lint exception for agent-dashboard.html
- Add weekly task log

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 22:15:15 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2b061460eb perf: limit reaction event concurrency
Weekly perf deep dive:
- Replaced unbounded `Promise.all` in `js/nostr/reactionEvents.js` with `pMap` limited to `RELAY_BACKGROUND_CONCURRENCY` (3).
- Added `benchmarks/reaction_loading_bench.mjs` harness to verify concurrency limits.
- Added weekly perf report in `docs/perf-reports/weekly-perf-report-2026-02-13.md`.
- Added completion log.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 22:09:30 +00:00
google-labs-jules[bot]andPR0M3TH3AN bb39226ca5 perf-agent: visibility gate VideoEventBuffer
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 20:44:59 +00:00
thePR0M3TH3AN 2eca209f02 Merge pull request #2455 from PR0M3TH3AN/ai/innerhtml-fix/subscriptions-12650247027422970359
[security] replace innerHTML usages in js/subscriptions.js — convert to safe DOM APIs
2026-02-13 12:19:55 -05:00
google-labs-jules[bot]andPR0M3TH3AN fffca30fb6 chore(agents): run innerhtml-migration-agent daily task — migrate js/channelProfile.js
- Replaced 10 instances of `innerHTML` with safe DOM APIs (`createElement`, `replaceChildren`, `textContent`).
- Extracted Zap Panel creation to `createZapPanelContent` helper.
- Extracted Subscribe Button creation logic.
- Updated `scripts/check-innerhtml.mjs` baseline (count reduced by 10).
- Verified via lint, unit tests, and Playwright verification.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 16:58:20 +00:00
google-labs-jules[bot]andPR0M3TH3AN 8536f2f858 [security] replace innerHTML usages in js/subscriptions.js — convert to safe DOM APIs
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 16:51:33 +00:00
google-labs-jules[bot]andPR0M3TH3AN d2c6f0a32e chore(ai): document js/ui/components/VideoModal.js
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 15:48:06 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9c65a78249 chore(agents): run event-schema-agent weekly task
- Implement `scripts/agent/validate-events.mjs` harness.
- Fix `buildWatchHistoryEvent` to default `monthIdentifier` if missing.
- Verified all builders produce valid events.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 05:14:10 +00:00
google-labs-jules[bot]andPR0M3TH3AN 4059d52847 fix(ui): profile modal controller instantiation order
- Moved controller instantiation (DM, Relay, Hashtag) to after services setup in `ProfileModalController.js`.
- Fixed `ProfileHashtagController` usage of uninitialized services.
- Updated `profile-modal-controller.test.mjs` mock to include `uiReady/dataReady` flags and use correct service access pattern.
- Resolved CI failures in `profile-modal-controller.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 03:50:42 +00:00
google-labs-jules[bot]andPR0M3TH3AN 1b68e3c5f2 [decompose] extract ProfileHashtagController from js/ui/profileModalController.js
Extracts all hashtag preference related logic into a new controller
`js/ui/profileModal/ProfileHashtagController.js` to reduce the size of `js/ui/profileModalController.js` and improve maintainability.

- Moves `normalizeHashtagTag`, `formatHashtagTag`, `getResolvedHashtagPreferences`, `setHashtagStatus`, `refreshHashtagBackgroundStatus`, `populateHashtagPreferences`, `renderHashtagList`, `sanitizeHashtagList`, `createHashtagListItem`, `persistHashtagPreferences`, `handleAddHashtagPreference`, `handleRemoveHashtagPreference`, `handleHashtagPreferencesChange`, `describeHashtagPreferencesError`.
- Updates `ProfileModalController` to delegate to `ProfileHashtagController`.
- Adds delegate getters/methods in `ProfileModalController` to maintain backward compatibility for tests.
- Reduces `js/ui/profileModalController.js` by ~600 lines.
- Updates file size baseline in `scripts/check-file-size.mjs`.

Passes `npm run lint` and `npm run test:unit`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 02:26:08 +00:00
google-labs-jules[bot]andPR0M3TH3AN 393c06c749 [decompose] extract ProfileHashtagController from js/ui/profileModalController.js
Extracts all hashtag preference related logic into a new controller
`js/ui/profileModal/ProfileHashtagController.js` to reduce the size of `js/ui/profileModalController.js` and improve maintainability.

- Moves `normalizeHashtagTag`, `formatHashtagTag`, `getResolvedHashtagPreferences`, `setHashtagStatus`, `refreshHashtagBackgroundStatus`, `populateHashtagPreferences`, `renderHashtagList`, `sanitizeHashtagList`, `createHashtagListItem`, `persistHashtagPreferences`, `handleAddHashtagPreference`, `handleRemoveHashtagPreference`, `handleHashtagPreferencesChange`, `describeHashtagPreferencesError`.
- Updates `ProfileModalController` to delegate to `ProfileHashtagController`.
- Adds delegate getters/methods in `ProfileModalController` to maintain backward compatibility for tests.
- Reduces `js/ui/profileModalController.js` by ~600 lines.
- Updates file size baseline in `scripts/check-file-size.mjs`.

Passes `npm run lint` and `npm run test:unit`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 02:06:08 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5f1edebea7 [decompose] extract ProfileHashtagController from js/ui/profileModalController.js
Extracts all hashtag preference related logic into a new controller
`js/ui/profileModal/ProfileHashtagController.js` to reduce the size of `js/ui/profileModalController.js` and improve maintainability.

- Moves `normalizeHashtagTag`, `formatHashtagTag`, `getResolvedHashtagPreferences`, `setHashtagStatus`, `refreshHashtagBackgroundStatus`, `populateHashtagPreferences`, `renderHashtagList`, `sanitizeHashtagList`, `createHashtagListItem`, `persistHashtagPreferences`, `handleAddHashtagPreference`, `handleRemoveHashtagPreference`, `handleHashtagPreferencesChange`, `describeHashtagPreferencesError`.
- Updates `ProfileModalController` to delegate to `ProfileHashtagController`.
- Reduces `js/ui/profileModalController.js` by ~600 lines.
- Updates file size baseline in `scripts/check-file-size.mjs`.

Passes `npm run lint` and `npm run test:unit`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-13 01:39:22 +00:00
google-labs-jules[bot]andPR0M3TH3AN f130fbc3cc chore(agents): run const-refactor-agent daily task — Refactored timeouts in UI controllers (reverted webtorrent fix)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 23:20:02 +00:00
google-labs-jules[bot]andPR0M3TH3AN a77e182ed1 chore(agents): run const-refactor-agent daily task — Refactored timeouts in UI controllers and webtorrent.js to use canonical constants
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 23:10:37 +00:00
google-labs-jules[bot]andPR0M3TH3AN 7f97c3cece Fix NIP-07 login failure by removing non-standard permission strings
Removed `read_relays` and `write_relays` from `DEFAULT_NIP07_CORE_METHODS` in `js/nostr/nip07Permissions.js` as they are not standard NIP-07 or NIP-46 permission strings and were causing login failures with some extensions. Also ensured `jsdom` is installed for unit tests.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 17:40:10 +00:00
thePR0M3TH3AN b958cd03a3 Merge pull request #2392 from PR0M3TH3AN/perf/lazy-loading-images-5531542145161108085
⚡ Optimize image loading with lazy and async attributes
2026-02-12 12:06:35 -05:00
google-labs-jules[bot]andPR0M3TH3AN df62585106 perf: enable lazy loading for avatars and thumbnails
Added `loading="lazy"` and `decoding="async"` attributes to dynamically created `<img>` elements in:
- `js/historyView.js` (avatars)
- `js/ui/subscriptionHistoryController.js` (channel icons)
- `js/searchView.js` (added `decoding="async"`)
- `js/ui/profileModal/ProfileDirectMessageRenderer.js` (attachment previews, avatars)
- `js/ui/profileModalController.js` (attachment previews, saved profile avatars)

This reduces initial page load impact and bandwidth usage by deferring off-screen image loading.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 16:56:06 +00:00
google-labs-jules[bot]andPR0M3TH3AN 69c1528ac0 perf: bound concurrency in authService profile hydration
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 16:32:53 +00:00
google-labs-jules[bot]andPR0M3TH3AN a997120f42 chore(ai): doc js/nostr/client.js and videoEventBuffer.js
- Add JSDoc to exported methods in `js/nostr/client.js`
- Add JSDoc to `js/nostr/videoEventBuffer.js`
- Add in-code comments for complex algorithms (history hydration, soft/hard delete, buffering)
- Update `docs/nostr-client-overview.md` with invariants and pitfalls
- No functional changes

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 15:28:54 +00:00
thePR0M3TH3AN 45ab69ef78 Merge branch 'unstable' into perf/bound-comment-concurrency-6703856395977422565 2026-02-12 09:13:51 -05:00
thePR0M3TH3AN 2540eb3c09 Merge pull request #2377 from PR0M3TH3AN/unstable-4082822914869153269
[constants] Refactor duplicate numeric constants
2026-02-12 09:10:12 -05:00
google-labs-jules[bot]andPR0M3TH3AN 852bf51b0a refactor: extract CommentTargetNormalizer to fix file size violation
- Extracted `CommentTargetNormalizer` and related helpers to `js/nostr/commentTargetNormalizer.js`.
- Refactored `js/nostr/commentEvents.js` to import from the new module.
- Compacted helper functions in `js/nostr/commentTargetNormalizer.js` to ensure it stays under the 1000-line limit for new files.
- Verified with `npm run lint:file-size` and `tests/nostr/comment-events.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 13:49:47 +00:00
google-labs-jules[bot]andPR0M3TH3AN 4d73092613 perf: bound comment relay concurrency and fix docs port
- Replace `Promise.all` with `pMap` in `js/nostr/commentEvents.js` to limit concurrent relay requests to `RELAY_BACKGROUND_CONCURRENCY` (3).
- Update `content/docs/guides/upload-content.md` to use port 3000 for CORS, matching `npm start` default.
- Update agent artifacts (`CONTEXT.md`, `TODO.md`, `DECISIONS.md`, `TEST_LOG.md`, `INITIAL_BASELINE.md`).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 13:39:52 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2aae4094e7 [constants] refactor duplicate numeric constants
- Add `UI_FEEDBACK_DELAY_MS`, `DEBOUNCE_DELAY_MS`, and `NETWORK_RETRY_DELAY_MS` to `js/constants.js`.
- Replace magic numbers (5000, 2000, 1500) with semantic constants in:
  - `js/ui/notificationController.js`
  - `js/ui/profileModal/ProfileDirectMessageActions.js`
  - `js/ui/urlHealthController.js`
  - `js/app/uiCoordinator.js`
  - `js/ui/components/VideoModal.js`
  - `js/ui/components/UploadModal.js`
  - `js/services/dmNostrService.js`
  - `js/services/hashtagPreferencesService.js`
  - `js/app/feedCoordinator.js`
  - `js/services/moderationService.js`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 03:43:03 +00:00
google-labs-jules[bot]andPR0M3TH3AN fd9daef40b [security] Remove innerHTML usage from searchView.js
Refactored `js/searchView.js` to use safe DOM APIs (`document.createElement`, `replaceChildren`, `textContent`) instead of `innerHTML`.
This reduces the attack surface for XSS vulnerabilities.
Updated `scripts/check-innerhtml.mjs` baseline.
Verified with unit tests and a frontend verification script.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-12 03:41:34 +00:00
google-labs-jules[bot]andPR0M3TH3AN d3fa684e45 perf: bound relay background concurrency to 3
Replaces unbounded `Promise.all(relays.map(...))` calls with `pMap` using a concurrency limit of 3 for background operations like history hydration, metadata fetching, and DM sending.
This prevents network saturation and potential main-thread jank when many relays are configured.
Includes benchmark verification script `benchmarks/relay_concurrency_repro.mjs`.
Audited upload docs and confirmed accuracy.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 21:31:53 +00:00
thePR0M3TH3AN 0607367f1a Merge pull request #2368 from PR0M3TH3AN/decompose-profile-modal-controller-1637476114002717833
Decompose ProfileModalController
2026-02-11 16:17:07 -05:00
google-labs-jules[bot]andPR0M3TH3AN 7300977a6d [decompose] extract DM and Relay controllers from ProfileModalController
Extracted ProfileDirectMessageController (split into Controller, Actions, Renderer, Helper) and ProfileRelayController from ProfileModalController to reduce file size and improve maintainability.

ProfileModalController.js size reduced from ~12000 lines to ~8750 lines.
Updated unit tests to reflect the new structure.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 21:15:06 +00:00
thePR0M3TH3AN 244f5f80a8 Merge pull request #2367 from PR0M3TH3AN/claude/fix-sync-and-dm-issues-NMShC
Fix NIP-07 adapter support and improve signer resolution
2026-02-11 15:01:35 -05:00
Claude 53b8a2609c fix: recognize NIP-07 signer type for extension permission pre-granting
The NIP-07 adapter uses type "nip07" but all permission pre-granting
checks only matched type "extension", causing NIP-07 browser extension
users to fail decryption for block/mute lists, subscriptions, DMs, and
watch history. Hashtag preferences appeared to work because their read
path had a separate fix, masking the systemic issue.

Changes:
- shouldRequestExtensionPermissions() now matches both "extension" and
  "nip07" signer types (central fix affecting DM signals, comments,
  publish helpers, and watch history fetch)
- buildDmDecryptContext() pre-grants extension permissions for NIP-07
- userBlocks.js: remove capabilities-gated decryptor check that failed
  with lazy NIP-07 module injection (same fix already in subscriptions.js);
  always resolve signer regardless of allowPermissionPrompt; increase
  fast-path relay timeout from 6s to 10s
- watchHistoryService: recognize NIP-07 type and always resolve signer
- All publish paths (blocks, subscriptions, hashtags, relays, uploads,
  sharing, moderation) now pre-grant permissions for NIP-07 signers

https://claude.ai/code/session_01PipsdaTQmw7wBTJ1LmJjkk
2026-02-11 19:41:53 +00:00
google-labs-jules[bot]andPR0M3TH3AN 99e904d7c1 Optimize explore data worker transfer with lightweight video objects
- Implements `toLightweightVideo` helper in `js/services/exploreDataService.js` to strip large fields (content, signatures, etc.) from video objects before sending to the worker.
- Updates `buildWatchHistoryTagCounts` and `buildTagIdf` to use lightweight objects.
- Adds `tests/services/exploreDataService.optimization.test.mjs` to verify correctness.
- Adds `benchmarks/worker_transfer_lightweight_bench.js` demonstrating ~40% improvement in transfer time.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 17:15:25 +00:00
thePR0M3TH3AN d07bf6308f Merge pull request #2360 from PR0M3TH3AN/ai/doc-events-cache-20250209-13537943595919351490
chore(ai): document js/nostr/managers/EventsCacheStore.js
2026-02-11 10:33:26 -05:00
google-labs-jules[bot]andPR0M3TH3AN 676f41d76d chore(ai): doc js/nostr/managers/EventsCacheStore.js (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 15:30:45 +00:00
google-labs-jules[bot]andPR0M3TH3AN 78e53a8a1d refactor: simplify comment target normalization logic
Introduces `CommentTargetNormalizer` class to decompose the complex `normalizeCommentTarget` function into smaller, state-managed methods. This improves readability and maintainability without changing the external API or behavior.

- Extracted logic into `extractPointers`, `resolveEventsAndTags`, `extractInitialValues`, `enrichFromTags`, and `applyDefaults`.
- Preserved all fallback logic and tag parsing rules.
- Ensured strict string normalization in `extractInitialValues` to match original behavior.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 15:23:45 +00:00
google-labs-jules[bot]andPR0M3TH3AN 3078c46b89 feat(tests): add S3UploadService tests and refactor for testability
- Refactor `S3UploadService` to accept dependencies in constructor
- Move `resolveUploadIdentifier` to class method for mocking
- Add comprehensive unit tests for `S3UploadService` covering event emitter, validation, and upload logic
- Ensure `WebTorrent` dependency is mocked or polyfilled in test environment

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 14:42:01 +00:00
google-labs-jules[bot]andPR0M3TH3AN e62cb15c0e perf: parallelize timestamp resolution in feed engine
Replaces sequential await loop with Promise.any to resolve video timestamps in parallel.
This significantly reduces latency when multiple resolvers are present, especially if the first one is slow.

- Uses Promise.any to take the first valid finite timestamp.
- Wraps resolvers to reject on invalid values.
- Preserves error logging for genuine resolver errors.
- Benchmarks showed improvement from ~100ms to ~11ms in simulated slow scenarios.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 12:38:20 +00:00
google-labs-jules[bot]andPR0M3TH3AN b28e62963f perf: Batch video timestamp resolution to reduce N+1 network requests
- Implemented `hydrateVideoHistoryBatch` in `NostrClient` to fetch missing root events and sparse histories in a single `pool.list` request.
- Refactored `hydrateVideoHistory` to use shared helper methods `getLocalVideoHistory` and `_processAndCacheEvent`.
- Added `resolveVideoPostedAtBatch` to `PlaybackCoordinator` which delegates to the batched client method.
- Updated `VideoListView` to collect videos needing timestamp resolution and call the batch method, falling back to individual calls if necessary.
- Added regression test `tests/performance/resolvePostedAt.test.mjs` to verify reduced network calls.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 12:01:39 +00:00
google-labs-jules[bot]andPR0M3TH3AN 8027ec9b2b Refactor sendDirectMessage to use strategy pattern for NIP-04/17
Extracted NIP-17 and NIP-04 logic into separate private methods `_sendNip17DirectMessage` and `_sendNip04DirectMessage` to reduce complexity and improve readability of `sendDirectMessage`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 10:46:17 +00:00
thePR0M3TH3AN 90fad893bf Merge pull request #2341 from PR0M3TH3AN/refactor-events-cache-store-7678386515103062591
🧹 Refactor persistSnapshot in EventsCacheStore
2026-02-11 05:28:34 -05:00