Commit Graph
5197 Commits
Author SHA1 Message Date
thePR0M3TH3AN 4e273da0fe Merge pull request #2272 from PR0M3TH3AN/perf/load-test-wasm-signing-11705129069826506892
⚡ Accelerate load test signing with WASM
2026-02-09 13:36:43 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1569ce074f feat(perf): accelerate load test signing with WASM
Replaces pure JS `finalizeEvent` with `nostr-tools/wasm` implementation in `scripts/agent/load-test.mjs`.
This reduces signing time from ~6ms to ~1ms per event (5x-6x speedup), significantly increasing the event generation throughput capacity of the load test agent.

- Adds `nostr-wasm` to devDependencies.
- Updates `scripts/agent/load-test.mjs` to initialize and use WASM crypto.
- Adds `benchmarks/signing_benchmark.mjs` to verify performance gains.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 18:35:26 +00:00
thePR0M3TH3AN 74d15f2946 Merge pull request #2268 from PR0M3TH3AN/claude/fix-moderation-lists-error-OcOyU
Add RelayBatchFetcher to NostrClient initialization
2026-02-09 10:50:45 -05:00
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
thePR0M3TH3AN 5232fe28b4 Merge pull request #2266 from PR0M3TH3AN/content-docs-audit-10961466235628399718
🌐 Align /content user docs with actual upload & contribution behavior
2026-02-09 10:05:48 -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
google-labs-jules[bot]andPR0M3TH3AN 35d09e2379 docs(ai): update quickstart and contributing (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 14:10:40 +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
Claude 95f47c761c Fix moderation lists error: import and instantiate RelayBatchFetcher
The NostrClient.fetchListIncrementally() method delegates to
this.relayBatchFetcher, but RelayBatchFetcher was never imported or
instantiated in client.js, causing "Cannot read properties of undefined
(reading 'fetchListIncrementally')" on every page load when admin lists
try to load.

https://claude.ai/code/session_01KuHrohbGvitA41A2fPD5p5
2026-02-09 13:40:46 +00:00
thePR0M3TH3AN f553714eeb Merge pull request #2263 from PR0M3TH3AN/refactor-client-incremental-fetch-10947149003245285900
refactor: Integrate RelayBatchFetcher into NostrClient
2026-02-09 08:37:55 -05:00
google-labs-jules[bot]andPR0M3TH3AN e25d79b2a2 Fix CI failures in NostrClient and SignerManager
- Export `resolveSignerCapabilities` from `SignerManager` and import in `NostrClient` to fix ReferenceError in `sendDirectMessage`.
- Initialize `RelayBatchFetcher` in `NostrClient` constructor to fix TypeError in `fetchListIncrementally`.
- Implement `registerPrivateKeySigner` in `NostrClient` to fix TypeError in signer tests.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 03:03:56 +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 89b7fca560 Align /content user docs with actual upload & contribution behavior
- Updated `content/docs/guides/upload-content.md` with accurate file types, size limit explanations, and troubleshooting steps.
- Updated `content/docs/getting-started.md` to link to the detailed upload guide and clarify "Invite-only" (Whitelist) mode.
- Verified changes against `js/ui/components/UploadModal.js`, `js/storage/s3-multipart.js`, and `js/accessControl.js`.
- Included `VALIDATION_REPORT.md` documenting the verification process.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 02:59:27 +00:00
google-labs-jules[bot]andPR0M3TH3AN 50930120fa Refactor fetchListIncrementally to use RelayBatchFetcher
Extracted the complex incremental fetching logic from NostrClient into a dedicated RelayBatchFetcher class to improve maintainability and readability.

Also includes necessary fixes for SignerManager and Client regressions exposed by the refactor:
- Restored missing `registerPrivateKeySigner` and `installNip46Client` methods.
- Fixed `SignerManager.ensureSessionActor` to correctly generate session keys when missing.
- Fixed `SignerManager.ensureExtensionPermissions` logic.
- Exposed `signEventWithPrivateKey` on SignerManager for consistency.
- Fixed `isSessionActor` logic to correctly identify logged-in users vs session actors.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 02:38:39 +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
google-labs-jules[bot]andPR0M3TH3AN 31d6730c59 Refactor fetchListIncrementally to use RelayBatchFetcher
This change completes the refactoring of `fetchListIncrementally` by:
1.  Importing `RelayBatchFetcher` in `js/nostr/client.js`.
2.  Instantiating `RelayBatchFetcher` in `NostrClient` constructor.
3.  Ensuring `RelayBatchFetcher` receives the client instance.

The complex logic was already moved to `js/nostr/relayBatchFetcher.js`, but the integration was missing, causing runtime errors. This change fixes the wiring and ensures the new class is used.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 01:46:46 +00:00
thePR0M3TH3AN 286e676280 Merge pull request #2262 from PR0M3TH3AN/claude/speed-up-nostr-login-g3yf4
Optimize login performance and fix decryption race conditions
2026-02-08 20:12:21 -05:00
Claude 29215d9b5e Speed up Nostr login and fix list sync, storage unlock, and feed registration
- Remove redundant double signer readiness gate evaluation that added 5-10s
  to the login path (authSessionCoordinator)
- Reduce decryption timeouts (10s→6s per scheme, 3s→1.5s retry delay,
  8s→5s NIP-07 no-prompt, 45s→25s overall ensureLoaded) for faster scheme
  fallback during list sync
- Fix storage tab unlock: remove overly strict capabilities check that
  blocked lazy-injecting NIP-07 extensions, and add auto-unlock attempt
  when profile modal opens with an active signer
- Fix subscription/hashtag decryption: always resolve signer for background
  refreshes (was previously gated behind allowPermissionPrompt), and always
  check window.nostr as fallback decryptor regardless of prompt mode
- Fix capabilities check in subscription decryption: use method existence
  instead of dynamic capabilities getter that returns false during lazy
  extension injection
- Wrap Promise.any decryptor calls in Promise.resolve().then() to catch
  synchronous throws from NIP-07 adapter methods when extension modules
  haven't loaded yet
- Make watch-history feed registration race-safe with pre-check and
  try/catch for concurrent registration attempts
- Improve NIP-07 extension detection with DOMContentLoaded listener for
  faster detection of extensions that inject during page load

https://claude.ai/code/session_0174XTB5ADJ9cMBSucqL9Wer
2026-02-09 00:18:43 +00:00
thePR0M3TH3AN 2e0d86eb50 Merge pull request #2260 from PR0M3TH3AN/refactor/nostr-client-managers-15317011398012543442
Refactor NostrClient into specialized managers
2026-02-08 15:52:16 -05: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 dc196b8e43 Merge pull request #2259 from PR0M3TH3AN/codex/update-fetchhistory-to-handle-registration-errors
Guard watch-history renderer when feed registration is unavailable
2026-02-08 14:52:04 -05:00
thePR0M3TH3AN 7e5d1c7d63 Guard watch-history renderer feed fallback path 2026-02-08 14:48:19 -05:00
thePR0M3TH3AN ffae61ca75 Merge pull request #2258 from PR0M3TH3AN/codex/update-unlock/decrypt-flow-in-storage
Improve storage unlock permission flow and normalize decrypt errors
2026-02-08 14:42:09 -05:00
thePR0M3TH3AN 44dfcc363b Improve storage unlock permission and decrypt error handling 2026-02-08 14:38:21 -05:00
thePR0M3TH3AN a54e3c1329 Merge pull request #2257 from PR0M3TH3AN/claude/fix-logout-button-fxhy2
Deduplicate concurrent auth logout calls
2026-02-08 14:31:38 -05:00
thePR0M3TH3AN 2432e2b45b Merge pull request #2256 from PR0M3TH3AN/codex/add-signer-readiness-gate-for-login-sync
Unify signer-readiness gate across login list sync orchestration
2026-02-08 14:31:30 -05:00
thePR0M3TH3AN 7e07e1ce40 Unify signer-readiness gating for login list sync 2026-02-08 14:27:35 -05:00
thePR0M3TH3AN a7f3fa3a7d Merge pull request #2255 from PR0M3TH3AN/ai/load-test-20260208-18397515604721596787
feat: implement load test script and generate report
2026-02-08 14:22:39 -05:00
thePR0M3TH3AN ffe1cd4220 Merge pull request #2253 from PR0M3TH3AN/refactor-fetch-list-incrementally-15014692697767118430
Refactor fetchListIncrementally into RelayBatchFetcher
2026-02-08 14:21:06 -05:00
thePR0M3TH3AN 922a1cc8c2 Merge pull request #2254 from PR0M3TH3AN/codex/refactor-state-management-in-subscriptions-and-hashtag-prefe
Split subscriptions/hashtag readiness state and surface unavailable preference status
2026-02-08 14:19:42 -05:00
google-labs-jules[bot]andPR0M3TH3AN 35f95434f7 feat: implement load test script and generate report
- Refined scripts/agent/load-test.mjs to generate detailed JSON reports including topHotFunctions and error details.
- Added pnpm-lock.yaml to lock dependencies for reproducible runs.
- Generated artifacts/load-report-20260208.json from a 60s load test run.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 19:18:51 +00:00
thePR0M3TH3AN fd3f9e723a Split subscriptions/hashtag readiness and expose unavailable preference states 2026-02-08 14:10:39 -05:00
Claude 47fdad0ef2 Fix logout button not actually logging out the user
The auth:logout event listener in applicationBootstrap.js fires
synchronously during authService.logout(), setting __handled = true and
starting handleAuthLogout as fire-and-forget. When requestLogout() then
checked detail.__handled, it saw true and returned early — before
applyLoggedOutUiState() could update the UI.

Two changes fix this:

1. Remove the __handled early-return guard from requestLogout() so it
   always awaits handleAuthLogout.

2. Add a promise-based dedup guard to handleAuthLogout so the event
   listener's fire-and-forget call and requestLogout's awaited call
   share a single execution instead of running the logout cleanup twice.

https://claude.ai/code/session_01ArpiYU9bNdzme5xBHWnKuS
2026-02-08 19:09:50 +00:00
google-labs-jules[bot]andPR0M3TH3AN 6a74b3ddfc Refactor fetchListIncrementally into RelayBatchFetcher and genericize timeout logic
Extracted `fetchListIncrementally` from `js/nostr/client.js` into a new `RelayBatchFetcher` class in `js/nostr/relayBatchFetcher.js` to reduce complexity in `NostrClient`.
Moved `withRequestTimeout` to `js/utils/asyncUtils.js` to make it reusable and remove duplication.
Updated `js/nostr/client.js` to use these new components while preserving existing behavior and specific logging for COUNT diagnostics.

- Created `js/nostr/relayBatchFetcher.js`
- Updated `js/utils/asyncUtils.js`
- Refactored `js/nostr/client.js`
- Verified with existing tests

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 19:09:11 +00:00
thePR0M3TH3AN c785894943 Merge pull request #2252 from PR0M3TH3AN/codex/track-parallel-task-results-in-authsessioncoordinator
Track auth list sync outcomes and add consolidated auth-sync retry
2026-02-08 13:55:48 -05:00
thePR0M3TH3AN ffc248ecd3 Track auth list sync outcomes and expose retryable auth status 2026-02-08 13:52:04 -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 e8eb138278 Merge pull request #2250 from PR0M3TH3AN/known-issues-triage-1473100205507666275
docs: update KNOWN_ISSUES.md and triage environment issues
2026-02-08 13:32:20 -05:00
thePR0M3TH3AN ede2f5cdc2 Merge pull request #2249 from PR0M3TH3AN/docs-subscription-backup-schema-11453826493234400433
Add Subscription Backup to Nostr Event Schemas Docs
2026-02-08 13:32:04 -05:00
thePR0M3TH3AN 5fcab6305f Merge pull request #2248 from PR0M3TH3AN/perf-sorters-optimization-11213639907851955656
⚡ Optimize chronological sorter performance
2026-02-08 13:31:49 -05:00
thePR0M3TH3AN a0614cdf82 Merge pull request #2247 from PR0M3TH3AN/ai/doc-moderationService-20260208-12200370596611243912
chore(ai): document js/services/moderationService.js
2026-02-08 13:31:33 -05:00
thePR0M3TH3AN 5b460fd327 Merge pull request #2246 from PR0M3TH3AN/ai/schema-validate-20260208-8755993239566575953
chore(ai): event schema validation tool + fixes
2026-02-08 13:31:20 -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