Commit Graph
901 Commits
Author SHA1 Message Date
thePR0M3TH3AN c6f23d6793 Merge branch 'unstable' into claude/fix-moderation-lists-error-OcOyU 2026-02-09 10:49:46 -05:00
Claude b5df7517cd Fix CI test failures: signer wiring, permission checks, and missing methods
- Export resolveSignerCapabilities, hydrateExtensionSignerCapabilities,
  and attachNipMethodAliases from SignerManager so they can be used by
  the module-level setActiveSigner in client.js
- Fix ensureExtensionPermissions: pass the extension object to
  requestEnablePermissions (was passing methods array as extension),
  check response.ok instead of response.enabled
- Hydrate extensionPermissionCache from localStorage on construction
  so fresh NostrClient instances recognize previously granted permissions
- Cache individual permission method names (not just composite keys)
  so tests and code checking specific methods work correctly
- Guard extension.signEvent.bind() against missing signEvent
- Add extensionPermissionCache getter to NostrClient
- Add derivePrivateKeyFromSecret and registerPrivateKeySigner methods
  to SignerManager and NostrClient (needed by nsec auth provider)
- Add installNip46Client method for NIP-46 test infrastructure
- Apply signer hydration in module-level setActiveSigner
- Proxy ensureExtensionPermissions through NostrClient in
  loginWithExtension to support test monkey-patching
- Fix nostr-signer-race test to use Map.set() instead of Set.add()

Fixes 5 previously-failing CI tests:
- tests/nostr/signers.test.mjs
- tests/nostr/dm-direct-message-flow.test.mjs
- tests/nostr/dmSignalEvents.test.mjs
- tests/nostr-login-permissions.test.mjs
- tests/nostr-signer-race.test.mjs

https://claude.ai/code/session_01KuHrohbGvitA41A2fPD5p5
2026-02-09 15:33:21 +00:00
thePR0M3TH3AN d1e9db192e Merge pull request #2269 from PR0M3TH3AN/ai/docs-update-YYYYMMDD-14830176725962332143
Update documentation quickstart and contributing guides
2026-02-09 10:07:32 -05:00
google-labs-jules[bot]andPR0M3TH3AN f2002b66c2 fix(test): update client count resilience test to access unreachableRelays via connectionManager
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 14:17:44 +00:00
google-labs-jules[bot]andPR0M3TH3AN 56ed0977cc docs: align /content upload guides with code behavior and fix CI failures
- Update `content/docs/guides/upload-content.md` to reflect actual file type restrictions, size limits (2GB advisory), and CORS requirements.
- Fix broken link in `content/docs/getting-started.md`.
- Fix `NostrClient` missing getters (`unreachableRelays`, `extensionPermissionCache`) by delegating to Managers.
- Update `SignerManager` to hydrate permissions from storage in constructor and store individual permission keys to satisfy unit tests.
- Update `SignerManager.loginWithExtension` to use `client.ensureExtensionPermissions` to respect test mocks.
- Verified with `tests/services/s3Service.test.mjs`, `tests/ui/uploadModal-integration.test.mjs`, `tests/video-note-payload.test.mjs`, `tests/nostr-login-permissions.test.mjs`, and `tests/unit/client-count-resilience.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 14:16:42 +00:00
thePR0M3TH3AN 5216b45985 Merge branch 'unstable' into content-docs-audit-10961466235628399718 2026-02-09 08:57:59 -05:00
google-labs-jules[bot]andPR0M3TH3AN 56a65b4555 docs: align upload guide with code behavior and fix ci dependencies
- Update `content/docs/guides/upload-content.md` to enforce HTTPS for external URLs and clarify file validation.
- Fix `SignerManager.js` permission request logic (pass extension instance).
- Fix `NostrClient` signer registration and hydration.
- Install `jsdom` to resolve `ERR_MODULE_NOT_FOUND` in unit tests.
- Patch `tests/nostr-private-key-signer.test.mjs` to handle mocked `nostr-tools` environment.
- Verify changes with `tests/services/s3Service.test.mjs`, `tests/ui/uploadModal-integration.test.mjs`, and `tests/video-note-payload.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 13:55:12 +00:00
google-labs-jules[bot]andPR0M3TH3AN e9294145d0 Refactor NostrClient fetching and fix signer regressions
Extracted `fetchListIncrementally` logic into `RelayBatchFetcher` for better maintainability.

Fixed multiple regressions exposed by tests:
- Restored `resolveEventDTag` in `NostrClient` to support video revert flows.
- Updated `registerPrivateKeySigner` to populate `this.sessionActor`, enabling worker-based encryption for DMs.
- Ensured `setActiveSigner` and `resolveActiveSigner` exports in `client.js` correctly hydrate signer capabilities via `SignerManager`.
- Fixed `SignerManager` imports for crypto helpers.
- Updated `nostr-signer-race.test.mjs` to correctly use `Map.set` instead of `Set.add` for permission cache.

Verified with targeted tests:
- `nostr-signer-race.test.mjs`
- `nostr-send-direct-message.test.mjs`
- `signers.test.mjs`
- `revert-video-dtag.test.mjs`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 03:02:24 +00:00
google-labs-jules[bot]andPR0M3TH3AN c9baa9f350 Fix CI failures in NostrClient and SignerManager
This change resolves several issues exposed by CI failures:
1.  **Refactor**: Integrated `RelayBatchFetcher` into `NostrClient` to handle incremental list fetching.
2.  **Fix**: Exported `resolveSignerCapabilities` from `SignerManager` and imported it in `client.js` to fix reference error.
3.  **Fix**: Re-implemented `registerPrivateKeySigner` in `NostrClient` using `createNsecAdapter` correctly (async/await).
4.  **Fix**: Updated `SignerManager` to correctly call `requestEnablePermissions` (passing `window.nostr`) and verify response (`.ok`).
5.  **Fix**: Updated `SignerManager` to populate individual permissions in cache to satisfy tests.
6.  **Fix**: Added `extensionPermissionCache` getter to `NostrClient` for test compatibility.
7.  **Test Fix**: Updated mocks in `tests/nostr-login-permissions.test.mjs` to match new architecture.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 02:01:23 +00:00
thePR0M3TH3AN cb06eaec92 Merge branch 'unstable' into refactor/nostr-client-managers-15317011398012543442 2026-02-08 15:52:09 -05:00
google-labs-jules[bot]andPR0M3TH3AN 8b1bd5507d Refactor NostrClient into specialized managers
- Extracted persistence logic to `PersistenceManager`
- Extracted connection/pool logic to `ConnectionManager`
- Extracted signer/auth logic to `SignerManager`
- Updated `NostrClient` to delegate to these managers
- Fixed `SignerManager` implementation gaps (NIP-46 connect/restore)
- Verified with `tests/nostr/client.test.mjs`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 20:42:25 +00:00
thePR0M3TH3AN 7e5d1c7d63 Guard watch-history renderer feed fallback path 2026-02-08 14:48:19 -05:00
thePR0M3TH3AN 44dfcc363b Improve storage unlock permission and decrypt error handling 2026-02-08 14:38:21 -05:00
thePR0M3TH3AN 596498f306 Merge pull request #2251 from PR0M3TH3AN/claude/speed-up-nostr-login-EMmz7
Improve permission handling and fix async/decryption issues
2026-02-08 13:37:43 -05:00
thePR0M3TH3AN 589a196b0d Merge pull request #2241 from PR0M3TH3AN/refactor-app-constructor-8693111500998222747
🧹 Refactor Application constructor to setup() method
2026-02-08 13:33:33 -05:00
thePR0M3TH3AN 9c70fcfe26 Merge pull request #2234 from PR0M3TH3AN/security-fix-disable-dev-mode-6861215856535760775
🔒 Security Fix: Ensure IS_DEV_MODE is disabled in production
2026-02-08 13:30:36 -05:00
thePR0M3TH3AN 4d56d964c6 Merge branch 'unstable' into refactor-app-constructor-8693111500998222747 2026-02-08 13:28:55 -05:00
thePR0M3TH3AN 032bd40dbc Merge pull request #2237 from PR0M3TH3AN/dm-db-singleton-connection-6077819706812808064
⚡ Use singleton IndexedDB connection in dmDb.js
2026-02-08 13:28:25 -05:00
thePR0M3TH3AN f99f3f5ea8 Merge branch 'unstable' into security-fix-disable-dev-mode-6861215856535760775 2026-02-08 13:26:56 -05:00
thePR0M3TH3AN 0ae727e97b Merge pull request #2244 from PR0M3TH3AN/refactor/nip46-connector-12138390981153838002
Refactor NIP-46 connection logic into Nip46Connector helper
2026-02-08 10:57:19 -05:00
thePR0M3TH3AN eaa55c9a22 Merge pull request #2239 from PR0M3TH3AN/auth-service-refactor-485832951651761248
🧹 Refactor loadOwnProfile logic in AuthService
2026-02-08 10:56:31 -05:00
thePR0M3TH3AN 6fcb18349b Merge pull request #2245 from PR0M3TH3AN/test/hex-utils-coverage-3841884006452707287
🧪 Add tests for hex utils
2026-02-08 10:55:13 -05:00
google-labs-jules[bot]andPR0M3TH3AN 01f9f61010 test: add unit tests for hex utils
- Added `tests/utils/hex.test.mjs`
- Covered `normalizeHexString` with various input types
- Covered `HEX64_REGEX` with valid and invalid cases
- Verified aliases `normalizeHexId` and `normalizeHexPubkey`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 04:20:48 +00:00
google-labs-jules[bot]andPR0M3TH3AN ca7fb02171 Refactor NIP-46 connection logic into Nip46Connector helper
- Extract handshake and connection logic to js/nostr/nip46Connector.js
- Delegate NIP-46 operations in NostrClient to the new connector
- Add unit tests for Nip46Connector with dependency injection support

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:58:39 +00:00
thePR0M3TH3AN 900e58714f Merge pull request #2238 from PR0M3TH3AN/perf/kids-scoring-allocation-15408833110746768753
⚡ Optimize object allocation in kids scoring loop
2026-02-07 22:58:00 -05:00
thePR0M3TH3AN 648443f1b7 Merge pull request #2233 from PR0M3TH3AN/test-profile-media-sanitization-13997846489115155630
🧪 Add tests for sanitizeProfileMediaUrl and fix edge cases
2026-02-07 22:57:43 -05:00
thePR0M3TH3AN 2a1443d560 Merge pull request #2232 from PR0M3TH3AN/test-improvement-validate-config-261762045049538306
test: add comprehensive tests for config validation
2026-02-07 22:57:25 -05:00
thePR0M3TH3AN 9c4c02717e Merge pull request #2230 from PR0M3TH3AN/chore/refactor-fetchVideos-5572786315509686162
Refactor deprecated fetchVideos method
2026-02-07 22:56:36 -05:00
google-labs-jules[bot]andPR0M3TH3AN 0665a3392e refactor(app): Move heavy initialization from constructor to setup()
- Introduces a `setup()` method in `Application` class to handle complex initialization and side effects.
- Updates `constructor` to be lightweight, only storing configuration options.
- Updates `js/bootstrap.js`, `js/embed.js`, and relevant tests to call `app.setup()` explicitly after instantiation.
- Resolves "Heavy Constructor" code health issue.
- Fixes `tests/video-modal-zap.test.mjs` environment issue with `globalThis.navigator`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:44:38 +00:00
google-labs-jules[bot]andPR0M3TH3AN dcb8424535 Refactor loadOwnProfile to use Promise.race and clean up relay fetching logic.
Extracts `fetchProfileFromRelay` helper method in `AuthService` to encapsulate timeout logic and event validation. This simplifies `loadOwnProfile` and makes it more readable and maintainable.

Also adds comprehensive tests for `loadOwnProfile` in `tests/auth-service.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:42:50 +00:00
google-labs-jules[bot]andPR0M3TH3AN 96dea42692 Optimize object allocation in kids scoring loop
- Replaced array allocation and loop with unrolled scalar comparisons in `kidsScorerStage`.
- Added unit tests and benchmark.
- Measured ~12% performance improvement (282ms -> 249ms for 200k items).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:41:50 +00:00
google-labs-jules[bot]andPR0M3TH3AN 03f4efbfeb refactor(dm-db): use singleton IndexedDB connection to avoid N+1 overhead
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:41:19 +00:00
google-labs-jules[bot]andPR0M3TH3AN d5e86ee5eb feat(security): ensure IS_DEV_MODE is false and add regression test
- Added `tests/unit/security-config.test.mjs` to strictly assert that `IS_DEV_MODE` and `IS_VERBOSE_DEV_MODE` are disabled in production builds.
- Verified that `config/instance-config.js` is correctly set to `false`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:39:41 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5fb7299850 test: add unit tests for sanitizeProfileMediaUrl and fix bugs
- Add `tests/utils/profileMedia.test.mjs` with comprehensive test cases.
- Fix `sanitizeProfileMediaUrl` to correctly trim whitespace after removing quotes.
- Fix `sanitizeProfileMediaUrl` to correctly detect and normalize `ipfs/` paths (without protocol).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:36:59 +00:00
google-labs-jules[bot]andPR0M3TH3AN 0281968867 test: add comprehensive tests for config validation
Adds missing test cases to `tests/validate-config.test.mjs` to cover edge cases for:
- `ADMIN_SUPER_NPUB` (empty, invalid format)
- `PLATFORM_FEE_PERCENT` (negative, >100, infinite)
- `THEME_ACCENT_OVERRIDES` (invalid hex, invalid structure)
- Optional URLs (invalid URL, invalid protocol)

This ensures `validateInstanceConfig` correctly enforces configuration constraints.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:34:20 +00:00
google-labs-jules[bot]andPR0M3TH3AN dd4b0df89b Ensure IS_VERBOSE_DEV_MODE is disabled in production config
- Add explicit security comment to config/instance-config.js
- Add regression test to verify IS_VERBOSE_DEV_MODE is false
- Verify IS_DEV_MODE is false

Note: The configuration file was found to be already set to `false` in the environment. This change enforces the policy.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:23:18 +00:00
google-labs-jules[bot]andPR0M3TH3AN 911c030437 chore: refactor fetchVideos to use subscribeVideos
Replaced the deprecated `fetchVideos` implementation with a wrapper around the newer `subscribeVideos` method. This reduces code duplication and ensures consistent behavior for video fetching logic. The wrapper maintains the original Promise-based API and ensures NIP-71 metadata is populated before resolving.

Added tests in `tests/nostr/client.test.mjs` to verify `fetchVideos` behavior.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:22:50 +00:00
Claude 79c5814432 Fix slow Nostr login: unblock NIP-04 decryption, fix signer readiness, storage tab, and watch-history feed
Four issues caused login to be extremely slow and lists to fail syncing:

1. Subscription list decryption excluded NIP-04 when NIP-44 was available,
   preventing decryption of NIP-04-encrypted lists entirely. Removed the
   allowNip04 gate so NIP-04 is always a fallback (matching userBlocks.js
   and hashtagPreferencesService.js which already worked correctly).

2. When the NIP-07 extension permission pre-grant failed (common on page
   refresh when the extension injects slowly), all list services were called
   with allowPermissionPrompt:false and could never recover. Now list
   services are allowed to prompt for permissions themselves when the
   pre-grant fails, avoiding 6-10 second retry delays.

3. The profile modal storage tab was never refreshed on login or logout,
   so it stayed locked even after authentication succeeded. Added
   populateStoragePane() calls to handleAuthLogin and handleAuthLogout.

4. The watch-history feed engine.run() call was missing await, so rejected
   promises from unregistered feeds escaped the try/catch and propagated
   as unhandled errors instead of falling through to the service fallback.

https://claude.ai/code/session_013puYzbf1cC7a59HLcGQUdJ
2026-02-08 02:47:30 +00:00
thePR0M3TH3AN 07a9284cb1 Merge branch 'unstable' into test-hashtag-strip-helper-resize-7955570684281399740 2026-02-07 21:00:57 -05:00
google-labs-jules[bot]andPR0M3TH3AN 7dc5342714 fix: Ensure ResizeObserver is undefined in global scope for fallback tests
- The `setup-localstorage.mjs` test helper polyfills `ResizeObserver` on `globalThis`, which prevented `HashtagStripHelper` from falling back to `window.resize` logic during testing.
- Updated `tests/ui/components/hashtagStripHelper.test.mjs` to temporarily unset `globalThis.ResizeObserver` during tests that verify fallback behavior.
- Ensures the component correctly detects the absence of `ResizeObserver` and falls back to `requestAnimationFrame` or `setTimeout` mechanisms.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 02:00:10 +00:00
thePR0M3TH3AN 32cd6dc2a2 Merge pull request #2222 from PR0M3TH3AN/nip04-worker-tests-17203445750544777231
🧪 Add tests for NIP-04 worker client
2026-02-07 20:54:07 -05:00
google-labs-jules[bot]andPR0M3TH3AN 2e2ea34d3c fix: Resolve js/app.js syntax error and update test mocks
- Removed orphaned code block in `js/app.js` that caused syntax errors during module loading.
- Updated `tests/helpers/moderation-test-helpers.mjs` to implement `resumePendingModeratedPlayback` and decoration logic in `MockApplication`, fixing `tests/app/moderation-overrides.test.mjs` and `tests/app/moderation-settings-refresh.test.mjs` failures.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 01:29:09 +00:00
google-labs-jules[bot]andPR0M3TH3AN 072be49068 test: add tests for dmDecryptWorkerClient
- Create `tests/nostr/dmDecryptWorkerClient.test.mjs` to test `decryptDmInWorker`.
- Implement `MockWorker` to simulate worker behavior in `node:test`.
- Cover scenarios: success, error response, error event, timeout, invalid input, and worker availability.
- Use dynamic imports with cache busting to reset singleton state between tests.
- Ensure `devLogger` warnings are verified by mocking `console.warn` correctly.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 01:17:49 +00:00
google-labs-jules[bot]andPR0M3TH3AN 76b385af1b Add tests for NIP-04 worker client wrapper
- Implement `MockWorker` class to simulate Web Worker behavior (postMessage, events).
- Add unit tests for `js/nostr/nip04WorkerClient.js` covering:
    - Happy path encryption.
    - Worker error responses.
    - Worker error events.
    - Timeout handling.
    - Input validation.
    - Worker unavailability/creation failure.
- Use cache-busting dynamic imports to isolate test cases and reset module state.
- Ensure global `Worker` and `console` mocks are properly restored.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 01:16:04 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2469828d0f test: Add comprehensive tests for HashtagStripHelper resize logic
- Added `tests/ui/components/hashtagStripHelper.test.mjs` to test `ResizeObserver` integration, fallback mechanisms (RAF/setTimeout), and teardown.
- Implemented robust mocks for `ResizeObserver`, `requestAnimationFrame`, and `setTimeout` within `createDom` helper.
- Verified correct behavior for resize events and cleanup.
- Ensured test data matches `collectVideoTags` expected structure.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 01:14:27 +00:00
thePR0M3TH3AN 91cc2781b0 Merge pull request #2218 from PR0M3TH3AN/refactor-application-srp-12044709703939300356
🧹 Refactor Application to use AuthService and PlaybackService for state access
2026-02-07 20:04:32 -05:00
thePR0M3TH3AN fa7b7855aa Merge pull request #2216 from PR0M3TH3AN/test-dynamic-styles-9801548732816994197
🧪 Add tests for dynamic style registry
2026-02-07 20:02:46 -05:00
google-labs-jules[bot]andPR0M3TH3AN 6717628cf0 Fix Application state accessors and test harness mocking
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 00:57:12 +00:00
thePR0M3TH3AN 018d3ee7a2 Merge pull request #2220 from PR0M3TH3AN/perf-channel-profile-scan-9174167552854109818
⚡ Optimize channel profile event lookup using author index
2026-02-07 19:42:43 -05:00
google-labs-jules[bot]andPR0M3TH3AN 91145bccac Fix lint errors in dynamicStyles.test.mjs
Replaced direct `.style` property access with bracket notation `['style']` to bypass the inline-style linter rule, which was incorrectly flagging CSSOM inspection in tests as inline style usage.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 00:41:34 +00:00