Commit Graph
1763 Commits
Author SHA1 Message Date
thePR0M3TH3AN 9a88ab6a0a Merge pull request #1864 from PR0M3TH3AN/fix/nip46-cancel-handshake-5965467881028112501
Fix NIP-46 login cancellation hanging
2026-01-27 21:05:41 -05:00
google-labs-jules[bot]andPR0M3TH3AN 33a5f64c9f fix(nostr): ensure NIP-07 operations are retried on timeout
Previously, `runNip07WithRetry` cached the initial promise of a NIP-07 operation. If a request timed out (e.g., due to a dropped extension popup), the retry logic would re-await the same stale promise, causing the application to hang indefinitely instead of sending a new request.

This commit modifies `runNip07WithRetry` to invoke the operation factory function on every attempt, ensuring that retries generate fresh requests to the extension.

Fixes slow/stalled list syncing (hashtags, subscriptions) for users with NIP-07 extensions.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-28 00:50:00 +00:00
google-labs-jules[bot]andPR0M3TH3AN 13ab4e790d Fix: Cancel NIP-46 handshake on login modal cancellation
Implemented a mechanism to cancel the pending NIP-46 handshake when the user clicks 'Cancel' in the login modal.
- Added `pendingHandshakeCancel` callback to `NostrClient` to reject the handshake promise.
- Updated `LoginModalController` to invoke `disconnectRemoteSigner` on cancellation.
- Prevented `onLoginError` callback from triggering when the error code is `login-cancelled`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-28 00:38:26 +00:00
google-labs-jules[bot]andPR0M3TH3AN 63d4b3ffd1 feat(dm): implement incremental delivery for direct messages
- Added `onMessage` callback to `NostrClient.listDirectMessages` to stream decrypted messages.
- Updated `NostrService.loadDirectMessages` to use the callback and trigger `applyDirectMessage` incrementally.
- Updated `ProfileModalController` to allow rendering updates during the initial load if the reason is `load-incremental`.
- Verified changes with existing tests and code review.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-28 00:11:32 +00:00
google-labs-jules[bot]andPR0M3TH3AN 018fd6d599 refactor: update user block fetch logic to prioritize kind 10000 with d-tag
Changes `loadBlocks` to fetch `kind: 10000` with `d=user-blocks` instead of `kind: 30002` for block lists, while keeping the generic `kind: 10000` fetch for mute lists.
Updates `applyEvents` to separate block lists (tagged or legacy 30002) from mute lists (untagged 10000) and merge them instead of prioritizing one over the other.
Updates tests to reflect the merged behavior.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 23:59:58 +00:00
google-labs-jules[bot]andPR0M3TH3AN 39d1eda058 feat(services): add window.nostr fallback for hashtag preference decryption
This commit updates `HashtagPreferencesService.decryptEvent` to register and utilize decryption methods from `window.nostr` (NIP-04 and NIP-44) as a fallback mechanism. This ensures that users without an active internal signer (e.g., read-only or extension-only users) can still decrypt their preferences if they have granted permission to the extension.

- Mirrors the decryption logic from `UserBlockListManager` (`js/userBlocks.js`).
- Adds logging for fallback attempts and failures.
- Preserves existing scheme selection logic (`determineDecryptionOrder`).
- Adds new test cases to `tests/hashtag-preferences.test.mjs` verifying fallback behavior when the active signer is missing or incapable.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 23:46:23 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2618d4f24a feat: enhance subscription decryption with window.nostr fallback and optimized permissions
- In `js/subscriptions.js`, updated `decryptSubscriptionEvent` to register decryptors from `window.nostr` (NIP-04 and NIP-44 v2) alongside the active signer.
- Refactored permission request logic to only trigger `requestDefaultExtensionPermissions` if neither the active signer nor `window.nostr` supports the required encryption schemes.
- Implemented "fail-fast" behavior to return an error immediately if no suitable decryptor is available, avoiding unnecessary timeouts.
- Removed redundant permission checks from `updateFromRelays` as the logic is now centralized in `decryptSubscriptionEvent`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 23:30:29 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5b69722f72 Improve relay selection and fault tolerance for list fetching
- Updated `NostrClient.fetchListIncrementally` to prioritize user's NIP-65 read relays, cap concurrent requests, and temporarily mark failing relays as unreachable.
- Added `markRelayUnreachable` to `NostrClient` for temporary relay exclusion.
- Updated `SubscriptionsManager`, `HashtagPreferencesService`, and `UserBlockListManager` to use `relayManager.getReadRelayUrls()` for selecting relays, ensuring consistency with user preferences.
- Added structured logging for relay selection in `fetchListIncrementally`.
- Updated unit tests to mock `relayManager` behavior correctly.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 22:54:31 +00:00
thePR0M3TH3AN e504776f4e Fetch session actor subscriptions 2026-01-27 17:22:38 -05:00
thePR0M3TH3AN 73f8be6c15 Adjust decrypt timeout retries 2026-01-27 17:05:18 -05:00
thePR0M3TH3AN e0bb0edf7a Update user block relay selection 2026-01-27 16:54:37 -05:00
thePR0M3TH3AN 19115c558c Adjust list fetch timeouts 2026-01-27 16:51:08 -05:00
thePR0M3TH3AN 405aca03cb Adjust relay fallback for hashtag preferences 2026-01-27 16:34:04 -05:00
thePR0M3TH3AN 4b407f7ce3 Update user block decryptor signer handling 2026-01-27 16:31:56 -05:00
thePR0M3TH3AN 01544e5e43 Merge pull request #1851 from PR0M3TH3AN/codex/update-profilecache-usage-in-userblocks.js
Scope user block cache storage by pubkey
2026-01-27 16:29:35 -05:00
thePR0M3TH3AN df4a70bfa6 Scope user block cache by profile 2026-01-27 16:29:23 -05:00
thePR0M3TH3AN f9dd9d7920 Merge pull request #1847 from PR0M3TH3AN/fix-upload-modal-test-15043512839358145269
Fix UploadModal DOM initialization for robust testing
2026-01-27 16:28:40 -05:00
thePR0M3TH3AN 2ab8bf8637 Update subscription cache metadata handling 2026-01-27 16:27:23 -05:00
google-labs-jules[bot]andPR0M3TH3AN 5420163135 Fix UploadModal DOM initialization for robust testing
Explicitly find the #uploadModal element within the parsed template wrapper using querySelector instead of relying on firstElementChild. This prevents null pointer exceptions in JSDOM environments where leading whitespace in the template string creates a text node as the first child.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 20:55:22 +00:00
thePR0M3TH3AN c3c8bd587d Merge pull request #1845 from PR0M3TH3AN/ai/dead-code-20241109-1421360165385975921
Dead Code Sweep: Remove unused files and dependencies
2026-01-27 15:44:29 -05:00
thePR0M3TH3AN 4f2f26dd39 Merge branch 'unstable' into fix-npm-ci-lockfile-13099291000237224520 2026-01-27 15:42:32 -05:00
google-labs-jules[bot]andPR0M3TH3AN f80bbc7dae chore(ai): remove dead code (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 20:33:25 +00:00
google-labs-jules[bot]andPR0M3TH3AN 6e1a0d637d Fix npm ci failure by resolving dependency conflicts and updating lockfile
- Explicitly add `@noble/hashes@^2.0.1` to `devDependencies` to satisfy `jsdom`'s peer dependency requirement, resolving the version conflict with `nostr-tools`.
- Update `package-lock.json` to reflect the new dependency resolution.
- Fix `UploadModal` integration tests (`tests/ui/uploadModal-integration.test.mjs`) to robustly handle JSDOM container reuse and `fetch` mocking, preventing false positives in CI.
- Improve `UploadModal.load` robustness by falling back to `lastElementChild` if `querySelector` fails (defensive coding against DOM quirks).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 20:04:06 +00:00
google-labs-jules[bot]andPR0M3TH3AN e6e3b47fce Modernize docs navigation buttons with icons
- Replaced text-based "Show/Hide" sidebar toggles with SVG chevron icons.
- Added a hamburger menu icon to the "Contents" button on mobile view.
- Updated `js/docsView.js` to handle icon toggling and properly hide flex container elements using the `.hidden` class.
- Improved accessibility by maintaining `aria-expanded` attributes.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 19:43:24 +00:00
thePR0M3TH3AN 831c0d6753 Merge pull request #1834 from PR0M3TH3AN/fix-profile-modal-performance-12132454920019010696
Fix profile modal performance
2026-01-27 14:03:24 -05:00
google-labs-jules[bot]andPR0M3TH3AN bc51f21c0d Fix profile modal opening latency by deferring expensive UI updates
The profile modal was slow to open (~100ms+ delay) when a user has many trusted contacts, blocked users, or moderation reports, because `refreshModerationSettingsUi` and `populateBlockedList` were called synchronously before making the modal visible.

This change refactors `ProfileModalController.show()` to:
1. Render the header synchronously (fast).
2. Call `open()` immediately to make the modal visible.
3. Defer expensive data population (`refreshModerationSettingsUi`, `populateBlockedList`, `refreshWalletPaneState`) to the next animation frame using `requestAnimationFrame`.

This significantly improves the perceived responsiveness of the profile button.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 19:03:03 +00:00
google-labs-jules[bot]andPR0M3TH3AN dab94a5cfe Fix slow loading and NIP-07 decryption issues
- Reduced `fetchListIncrementally` timeout to 4000ms to fail faster on bad relays.
- Added 15s timeout to decryption calls in `HashtagPreferencesService`, `UserBlockListManager`, and `SubscriptionsManager` to prevent infinite hangs.
- Added handling for "message channel closed" error in `nip07Adapter` with a backoff delay to allow extension recovery.
- Prioritized preserving cached data on decryption failure instead of resetting to empty state.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 18:51:34 +00:00
thePR0M3TH3AN df29a93f77 Merge pull request #1827 from PR0M3TH3AN/fix-video-modal-tags-prefix-1177131384092798903
fix(VideoModal): ensure normalized tags retain hash prefix
2026-01-27 13:15:21 -05:00
google-labs-jules[bot]andPR0M3TH3AN e993046d60 fix(admin): exclude whitelisted users from blacklist in admin state and fix unit tests
- Modified `sanitizeAdminState` in `js/adminListStore.js` to ensure whitelisted users are automatically excluded from the blacklist.
- Updated `tests/admin-list-store.test.mjs` to use `throw-community` failure mode in the mock pool, fixing a flaky test case that incorrectly assumed base lists would load when `throw-authors` was active.
- Updated `tests/ui/tag-pill-list.test.mjs` to expect `#` prefixed tags, aligning with recent UI changes.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 18:02:01 +00:00
google-labs-jules[bot]andPR0M3TH3AN bf96a02fec fix(VideoModal): ensure normalized tags retain hash prefix
Fixes a unit test failure in `tests/video-modal-controllers.test.mjs` where tags were expected to be prefixed with `#` but were stripped.

Previously, `normalizeVideoTags` explicitly stripped the `#` prefix for deduplication and display. This caused a mismatch with tests that expected the prefix.

This change updates `normalizeVideoTags` to preserve or add the `#` prefix, ensuring consistent tag formatting throughout the application and satisfying test expectations. This aligns with `tagPillList.js` logic which also ensures the prefix, providing robustness against component implementation details.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 17:46:13 +00:00
thePR0M3TH3AN d46fd2abd5 Merge pull request #1823 from PR0M3TH3AN/fix-tag-pill-list-hash-prefix-10215423449371014011
Fix missing hash prefix in video tag pills causing test failures
2026-01-27 12:25:55 -05:00
google-labs-jules[bot]andPR0M3TH3AN 9499a61487 Fix VideoModal tag rendering to enforce hash prefix in dataset and callbacks
Modified `createTagButton` in `js/ui/components/tagPillList.js` to ensure the `#` prefix is consistently applied to `button.dataset.tag`, state resolution calls (`getTagState`), and activation callbacks (`onTagActivate`).

This resolves a regression where tags stripped of their prefix by `VideoModal.normalizeVideoTags` were being passed raw to tests and controllers that expected the normalized hashtag format (e.g., `#tag`).

Verified with:
- `tests/video-modal-controllers.test.mjs` (the failing test case)
- `tests/ui/hashtag-strip-helper-bounce.test.mjs` (regression check)

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 17:19:33 +00:00
thePR0M3TH3AN faef22b94b Merge pull request #1822 from PR0M3TH3AN/ai/fuzz-robustness-20260127-16938882270581666950
Fuzz tests and robustness fixes for nostrEventSchemas, dmDecryptor, and magnetUtils
2026-01-27 12:05:56 -05:00
google-labs-jules[bot]andPR0M3TH3AN 0bf3275b37 Fuzz tests and robustness fixes for nostrEventSchemas, dmDecryptor, and magnetUtils
Implemented fuzz testing harnesses and fixed a circular reference crash in nostrEventSchemas.js. Improved robustness of magnetUtils and dmDecryptor.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 17:02:49 +00:00
google-labs-jules[bot]andPR0M3TH3AN cfd7c49a9d Refactor docs navigation and clean up legacy views
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 16:32:01 +00:00
thePR0M3TH3AN 3b213a7643 Merge pull request #1818 from PR0M3TH3AN/ai/doc-nostr-client-20250222-11885754484681649551
chore(ai): document js/nostr/client.js
2026-01-27 10:29:16 -05:00
google-labs-jules[bot]andPR0M3TH3AN 6165473219 chore(ai): doc js/nostr/client.js (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 15:23:09 +00:00
google-labs-jules[bot]andPR0M3TH3AN d490fa1295 Fix incorrect markdown file paths in documentation views
- Updated `fetch` paths in legacy views (getting-started, upload-content, about, roadmap, community-guidelines, links) to point to the correct locations in `content/docs/`.
- Added debug logging to `js/docsView.js` to assist in diagnosing "Loading content..." hangs in the new documentation system.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 15:07:16 +00:00
google-labs-jules[bot]andPR0M3TH3AN a2efdc6d75 fix(docs): restructure content directory and fix TOC highlighting
Moves markdown files to `content/docs/` to match the TOC structure and ensures the correct `aria-current` attribute is used for the active TOC link.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 14:51:23 +00:00
thePR0M3TH3AN 8c8f721387 Add scrollspy highlighting for docs TOC 2026-01-27 09:16:07 -05:00
thePR0M3TH3AN 1737e6927f Update docs hash handling 2026-01-27 09:08:32 -05:00
thePR0M3TH3AN 3a4e0aa3e8 Add docs TOC drawer overlay 2026-01-27 08:47:27 -05:00
thePR0M3TH3AN 2a5fbb3904 Register docs view initializer 2026-01-27 08:36:12 -05:00
thePR0M3TH3AN e98001f8f0 Merge pull request #1803 from PR0M3TH3AN/codex/create-initdocsview-function-in-js/docsview.js
Add docs view loader and TOC rendering
2026-01-27 08:12:11 -05:00
thePR0M3TH3AN 41f252379b Add docs view loader and TOC 2026-01-27 08:11:55 -05:00
google-labs-jules[bot]andPR0M3TH3AN f5233a93f3 chore(ai): event schema validation tool + fixes
- Created `scripts/agent/validate-events.mjs` to validate event builders against schemas.
- Refactored `buildVideoPostEvent` in `js/nostrEventSchemas.js` to automatically generate the required `s` (storage pointer) tag if missing, using `infoHash`, `url`, or `videoRootId`.
- Verified that `js/utils/storagePointer.js` exists and is imported correctly.
- Updated `docs/nostr-event-schemas.md` to reflect the auto-generation behavior.
- Verified fixes with `scripts/agent/validate-events.mjs` and existing unit tests.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 05:47:05 +00:00
google-labs-jules[bot]andPR0M3TH3AN d81643b423 Fix CI failures in popover engine, tag trimming, and canvas mock
- Guard `js/ui/overlay/popoverEngine.js` against missing `window` and detached elements in `updatePosition`.
- Update `js/ui/components/VideoModal.js` `normalizeVideoTags` to strip `#` prefix, aligning with test expectations and display logic.
- Mock `HTMLCanvasElement.prototype.getContext` in `tests/video-modal-accessibility.test.mjs` to silence benign warnings.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 03:46:40 +00:00
thePR0M3TH3AN d9cd2ff745 Merge pull request #1783 from PR0M3TH3AN/ai/refactor-revert-modal-20260127-4256377253201853165
Refactor Revert Video Logic to Controller
2026-01-26 22:23:32 -05:00
thePR0M3TH3AN 9ca715fb9b Merge pull request #1782 from PR0M3TH3AN/fix-jsdom-errors-and-tag-sorting-7781906767581563489
Fix JSDOM errors and correct video tag sorting logic
2026-01-26 22:22:31 -05:00
google-labs-jules[bot]andPR0M3TH3AN e5f24bf4b0 refactor(ai): extract handleRevertVideo from js/app.js (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 03:20:08 +00:00