- Refactoring `scripts/check-hex.js` to use git's native search instead of `ripgrep` for better portability and dependency reduction.
- Updating `tests/ui/uploadModal-integration.test.mjs` to ensure DOM isolation between tests using `beforeEach` cleanup, resolving state pollution issues.
Co-authored-by: PR0M3TH3AN <[email protected]>
Added scripts/agent/smoke-test.mjs to verify login, relay connection, video publishing, and DM decryption flows using a headless Node.js client.
The script polyfills the necessary browser environment for NostrClient and uses local relay/server resources.
Co-authored-by: PR0M3TH3AN <[email protected]>
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]>
Refactored the test suite to use `beforeEach` for mocking `global.fetch` and `afterEach` for cleaning up `document.body`. This ensures that `fetch` is available for all tests and that DOM state (specifically elements with duplicate IDs) does not leak between tests, resolving `TypeError: Cannot read properties of null` failures in `UploadModal.bindEvents`.
Co-authored-by: PR0M3TH3AN <[email protected]>
- 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]>
Run `npm install` to regenerate `package-lock.json`, ensuring that all dependencies (including `@noble/hashes`) are correctly resolved and synchronized with `package.json`. This resolves the `npm ci` failure in the CI environment.
Co-authored-by: PR0M3TH3AN <[email protected]>
- Adds @noble/[email protected] to dependencies to satisfy jsdom's peer dependency requirement.
- Updates package-lock.json to include the new version at the root and nest the older version (1.3.1) required by nostr-tools.
- Fixes `npm ci` failure "Missing: @noble/[email protected] from lock file".
Co-authored-by: PR0M3TH3AN <[email protected]>
This resolves a CI failure where `npm ci` reports "Missing: @noble/[email protected] from lock file" due to an optional peer dependency chain in `jsdom` -> `html-encoding-sniffer` -> `@exodus/bytes` requiring `@noble/hashes@^2.0.0`, which was not being persisted in `package-lock.json` in some environments.
Explicitly adding the package ensures it is present in the lock file, satisfying the strict requirements of `npm ci`.
Co-authored-by: PR0M3TH3AN <[email protected]>
Explicitly adds @noble/[email protected] to devDependencies to satisfy the peer dependency of @exodus/bytes (used by jsdom), resolving the conflict with nostr-tools which requires version 1.3.1. Regenerates package-lock.json to include the correct versions.
Co-authored-by: PR0M3TH3AN <[email protected]>
Explicitly adds `@noble/[email protected]` to `package.json` dependencies.
This resolves a `peerDependencies` conflict where `@exodus/bytes` (a dependency
of `jsdom`) requires `@noble/hashes` ^1.8.0 || ^2.0.0, but `nostr-tools`
requires version 1.3.1.
By adding it to the root project, `npm` can correctly hoist version 2.0.1 for
`@exodus/bytes` while keeping version 1.3.1 nested for `nostr-tools`.
This fixes `npm ci` failures in CI environments that strictly validate the lockfile.
Co-authored-by: PR0M3TH3AN <[email protected]>
Explicitly add `@noble/[email protected]` to `devDependencies` to satisfy `jsdom`'s peer dependency requirement (via `@exodus/bytes`) while allowing `nostr-tools` to use its pinned version `1.3.1`. This resolves the `npm ci` failure in CI.
- Update `package.json` to include `@noble/hashes`.
- Update `package-lock.json` with resolved dependencies.
Co-authored-by: PR0M3TH3AN <[email protected]>
Update `tests/ui/video-list-view-popular-tags.test.mjs` to account for
the `#` prefix that `TagPillList` (and by extension `VideoListView`)
adds to tags. This fixes the assertion failures where "Nostr" was
expected but "#Nostr" was found, and updates the tag preference resolver
in the test to handle the prefixed format.
Fixes unit test failures in CI.
Co-authored-by: PR0M3TH3AN <[email protected]>
- 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]>
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]>
- 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]>
Wraps the `respects TTL` test body in a `try...finally` block to ensure `expiredService.db` is closed even if assertions fail, preventing `fake-indexeddb` from hanging during cleanup.
Adds a small delay to the same test to ensure time advances beyond the 0ms TTL (caused by negative TTL clamping), fixing a flaky assertion failure.
Co-authored-by: PR0M3TH3AN <[email protected]>
- 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]>
Currently, if the automated PR review script encounters failures (lint/test errors), it exits with code 1, but the failure details are only visible in the posted PR comment. In CI environments where the comment might not be immediately accessible or if posting fails, the logs are unhelpful.
This change unconditionally prints the generated review report (including failure details) to `stdout` at the end of the script execution. This ensures that failure reasons are always visible in the CI logs.
Co-authored-by: PR0M3TH3AN <[email protected]>