This change restores the missing `ensureExtensionPermissions` call in `NostrClient.loginWithExtension` to ensure that encryption permissions (NIP-04/NIP-44) are requested upfront as intended. It also updates the unit tests to match the current optimized permission request strategy (Plain -> Structured -> String) and fixes a timeout calculation logic that was preventing fast test execution.
- js/nostr/client.js: Added `ensureExtensionPermissions` call in `loginWithExtension` and throw on failure.
- js/nostr/nip07Permissions.js: Allow short timeouts (<1s) to bypass the default 15s minimum for faster testing.
- tests/nostr-login-permissions.test.mjs: Updated test expectations to match the Plain -> Structured -> String request order.
Co-authored-by: PR0M3TH3AN <[email protected]>
Optimizes `handleAuthLogin` in `js/app.js` to run user data fetching (blocks, subscriptions, hashtag preferences) in the background instead of blocking the main UI render. This significantly improves perceived login speed, especially for users with large lists or slow NIP-07 extensions.
- Moves `userBlocks.seedWithNpubs` (which involves publishing) to background.
- Moves `subscriptions.ensureLoaded` and `hashtagPreferences.load` (which involve decryption) to background.
- Adds a race condition for `userBlocks.ensureLoaded` (read-only) with a short timeout to attempt early hydration without blocking indefinitely.
- Ensures the UI updates reactively when background data arrives via existing event listeners.
Co-authored-by: PR0M3TH3AN <[email protected]>
* Boost DM decryption priority to HIGH in `nostrClient` to match other critical user data.
* Enforce blocking in `handleAuthLogin` to await initial DM sync before refreshing the main video feed.
* This ensures users see their personal data (blocks, messages) correctly loaded before the public feed appears, improving the perception of consistency.
Co-authored-by: PR0M3TH3AN <[email protected]>
- Expand fuzzing coverage for `js/nostrEventSchemas.js` to include all builder functions.
- Fix a crash in `buildAdminListEvent` where non-array `hexPubkeys` caused a TypeError.
- Update `scripts/agent/fuzz-dmDecryptor.mjs` and `scripts/agent/fuzz-magnetUtils.mjs` iterations.
- Add reproducer for the `buildAdminListEvent` crash.
- Generate fuzz reports in `artifacts/`.
Co-authored-by: PR0M3TH3AN <[email protected]>
Prioritize fetching of block lists, subscriptions, and other user data before loading the main video feed during login.
- In `handleAuthLogin`, stop the existing video feed subscription immediately to free up bandwidth.
- Explicitly await `subscriptions.ensureLoaded(activePubkey)` alongside `userBlocks.seedWithNpubs` before triggering `refreshAllVideoGrids`.
This ensures user context is fully loaded before the heavy feed sync starts, addressing slow sync issues especially with NIP-07.
Co-authored-by: PR0M3TH3AN <[email protected]>
Explicitly wait for the `#sidebar` element to lose the `fade-in` class after dismissing the disclaimer modal in `tests/visual/overlay-layers.spec.ts`. This prevents race conditions in CI environments where the `opacity: 0` style from the fade-in animation persists during subsequent visibility checks, causing `expect(locator).toBeVisible()` to fail unexpectedly.
Co-authored-by: PR0M3TH3AN <[email protected]>
Executed the daily design system audit using `scripts/daily-design-system-audit.mjs`.
The audit found no violations.
Generated `REMEDIATION_REPORT.md` with the results.
Co-authored-by: PR0M3TH3AN <[email protected]>
- Added detailed JSDoc to `init` and `fetchListIncrementally` in `js/nostr/client.js`.
- Verified existing JSDoc for `subscribeVideos`, `hydrateVideoHistory`, `revertVideo`, and `deleteAllVersions`.
- Updated `docs/nostr-client-overview.md` with new sections on Incremental List Fetching, Deletion & Reversion, and a Key Methods Reference table.
Co-authored-by: PR0M3TH3AN <[email protected]>
- Clean up `verify_fix.mjs`, `verify_source_toggle.py`, and logs to fix potential lint/grep issues in CI.
- Define `normalizeHexPubkey` on test harness in `tests/helpers/moderation-test-helpers.mjs` to ensure robust `Application` mocking for `ModerationActionController` tests.
- Verify build and tests pass.
Co-authored-by: PR0M3TH3AN <[email protected]>
- Implements a priority queue for NIP-07 (browser extension) requests to allow critical tasks (blocklist/prefs decryption) to jump the line.
- Updates NIP-46 client and adapters to support priority overrides for encryption/decryption.
- Updates UserBlockListManager, SubscriptionsManager, and HashtagPreferencesService to request HIGH priority when decrypting data.
- Ensures strict serialization for NIP-07 to prevent extension errors while optimizing latency for critical data.
Co-authored-by: PR0M3TH3AN <[email protected]>
Introduced a request queue in `js/nostr/nip07Permissions.js` to serialize all interactions with the NIP-07 extension (`window.nostr`).
Updated `js/userBlocks.js`, `js/services/hashtagPreferencesService.js`, and `js/auth/signingAdapter.js` to wrap direct extension calls with `runNip07WithRetry`, ensuring they participate in the queue.
This resolves "message channel closed" errors and timeouts caused by concurrent requests flooding the extension during sync operations.
Co-authored-by: PR0M3TH3AN <[email protected]>
- Refactor `loginWithExtension` into `NostrClient` to centralize NIP-07 logic.
- Add `validator` support to `NostrClient` login methods to enforce access control (whitelists/blacklists) before setting the active signer.
- Update `nip07`, `nip46`, and `nsec` auth providers to inject `accessControl` checks via validators.
- Fix imports in auth providers to ensure `accessControl` is available.
- Remove unused `accessControl` import from `js/nostr/client.js` to avoid potential circular dependencies.
- Verified with targeted unit tests and a custom integration script (`test-nip07-refactor.mjs`).
Co-authored-by: PR0M3TH3AN <[email protected]>