Commit Graph
1865 Commits
Author SHA1 Message Date
google-labs-jules[bot]andPR0M3TH3AN 5bdca14364 Fix list loading reliability and optimize NIP-07 login performance
- Fixes issue where user lists (subscriptions, blocks) fail to load if local cache is stale but metadata store is fresh.
- Updates `js/userBlocks.js` and `js/subscriptions.js` to persist `createdAt` timestamp and use it for incremental fetch `since` parameter.
- Optimizes `js/nostr/client.js` `ensureActiveSignerForPubkey` to reduce redundant `getPublicKey` calls to NIP-07 extension by 50%.
- Adds `preloadedPubkey` support to `createNip07Adapter`.
- Adds reproduction test for NIP-07 concurrency issue.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 19:35:05 +00:00
thePR0M3TH3AN 792473f56f Merge pull request #1989 from PR0M3TH3AN/fix/nip07-adapter-race-condition-531357967915833285
Fix NIP-07 adapter race condition for encrypted lists
2026-01-30 14:10:40 -05:00
google-labs-jules[bot]andPR0M3TH3AN 4f40025b9d fix(ai): frontend console error — strip xs on localhost (agent)
Diagnosed a CORS error on local development environment caused by WebTorrent fetching `.torrent` files from R2 buckets (via `xs` parameter) that do not allow localhost origin.

Modified `js/webtorrent.js` to strip the `xs` parameter from magnet links when running on `localhost` or `127.0.0.1`. This prevents the browser from attempting the blocked fetch request, resolving the console error while maintaining functionality (falling back to DHT/peers).

Verified using `scripts/agent/debug_frontend.py` which captures frontend console logs via Playwright.

Tests run:
- `npm run lint`
- `npm run test:unit:shard1`
- `python3 scripts/agent/debug_frontend.py` (verified error is gone)

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 18:53:25 +00:00
google-labs-jules[bot]andPR0M3TH3AN d38585f376 Fix NIP-07 adapter race condition with lazy encryption capability injection
- Modified `js/nostr/adapters/nip07Adapter.js` to use dynamic getters for `capabilities` (nip04/nip44) and unconditionally expose encryption methods.
- Updated `js/nostr/client.js` to use `Object.getOwnPropertyDescriptor` when handling `signer.capabilities`.
- Added `tests/nostr/nip07Adapter-race-condition.test.mjs` to verify the fix.
- Fixed test environment issues in `tests/nostr/adapters.test.mjs` and `tests/nostr-login-permissions.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 18:47:08 +00:00
google-labs-jules[bot]andPR0M3TH3AN 51924d1619 fix(nostr): handle lazy NIP-44 injection in NIP-07 adapter
Updates `js/nostr/adapters/nip07Adapter.js` to unconditionally expose encryption methods (`nip04Encrypt`, `nip44Decrypt`, etc.) and use dynamic property getters for capabilities. This fixes a race condition where the adapter would initialize without NIP-44 support if the browser extension injected the `nip44` API slightly after `window.nostr` became available, preventing encrypted user lists (subscriptions, blocks, hashtags) from loading.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 18:19:44 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9481de9e0a fix(app): sequence user list loading after profile relays are initialized
Prior to this change, user-specific lists (block lists, subscriptions, hashtag preferences, DMs, NWC settings) were fetched concurrently with the profile/relay initialization in `handleAuthLogin`. This caused a race condition where the application would attempt to fetch sensitive user data using default relays instead of the user's preferred relays, often resulting in empty or stale data.

This patch refactors `handleAuthLogin` in `js/app.js` to chain the loading of these lists to the completion of `profileStatePromise` (which ensures relays are loaded via `postLoginPromise`). This guarantees that the correct relays are used for fetching user-specific data.

Also defines `dmStatePromise`, `nwcPromise` and `hashtagPreferencesPromise` which were previously referenced but seemingly undefined in the scope, ensuring proper promise tracking.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 17:25:07 +00:00
thePR0M3TH3AN b8fad92b25 Merge pull request #1986 from PR0M3TH3AN/fix-nip07-decryption-13328665886531040373
fix(nostr): correctly resolve signer capabilities when methods are present
2026-01-30 11:43:25 -05:00
google-labs-jules[bot]andPR0M3TH3AN fdc070479b Optimize post-login sequence to load relays before other data
Prioritizes fetching the user's relay list (NIP-65) immediately after login, ensuring that subsequent data fetches (profile, contact list, DMs, feed) utilize the user's preferred relays instead of default ones. This prevents "slow" or incomplete data loading issues caused by relying on defaults.

- Refactored `authService.applyPostLoginState` to sequence relay loading before profile/block loading.
- Refactored `app.handleAuthLogin` to await relay loading before initiating dependent fetches (Hashtags, Moderation, DMs, NWC, Lists, Feed).
- Updated unit tests in `tests/auth-service.test.mjs` to verify sequential execution and correct return values.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 16:34:12 +00:00
google-labs-jules[bot]andPR0M3TH3AN 730618efa8 fix(nostr): correctly resolve signer capabilities when methods are present
This fixes a critical issue where valid NIP-07 signers were treated as incapable of NIP-44/NIP-04 operations if their initial `capabilities` flag was false, even if the necessary methods (e.g., `nip44Decrypt`) were subsequently added or already present.

This addresses errors like "Gift wrap events require a NIP-44 decryptor" for users with valid extensions.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 16:20:13 +00:00
thePR0M3TH3AN 09c0ac8127 Add relay health summary banner 2026-01-30 11:08:02 -05:00
thePR0M3TH3AN 9c8cc465ce Merge pull request #1983 from PR0M3TH3AN/codex/improve-websocket-stability-and-ui-responsiveness
Add per-relay backoff and rate-limited relay summary logging
2026-01-30 11:01:30 -05:00
thePR0M3TH3AN 6c8349fdfb Add relay backoff and summary logging 2026-01-30 11:01:17 -05:00
thePR0M3TH3AN 063f0d0305 Merge pull request #1979 from PR0M3TH3AN/ai/doc-client-20250224-5696189605440496000
chore(ai): document js/nostr/client.js
2026-01-30 11:00:55 -05:00
thePR0M3TH3AN 652e9a22d7 Merge pull request #1981 from PR0M3TH3AN/ds-audit/2024-05-22-5966333681015751836
Daily Design System Audit Report
2026-01-30 11:00:34 -05:00
google-labs-jules[bot]andPR0M3TH3AN e2b3ab82c9 fix(test): resolve duplicate declaration in batch fetch profile test and fix nip07 permission race
Resolves a SyntaxError where 'originalReadRelays' was declared twice in 'tests/app-batch-fetch-profiles.test.mjs', causing CI failures.
Also fixes a race condition in `js/nostr/client.js` where NIP-07 permission upgrades were not awaited, causing `tests/nostr-login-permissions.test.mjs` to fail. Updated tests to accommodate the multi-pass login flow.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 15:59:58 +00:00
thePR0M3TH3AN 5a5fd50641 Improve relay sanitization and health checks 2026-01-30 10:48:28 -05:00
thePR0M3TH3AN 368bc2d63d Merge pull request #1980 from PR0M3TH3AN/codex/clarify-dm-errors-for-missing-nip-44-support
Handle NIP-44 decryptor errors in DM panel
2026-01-30 10:32:55 -05:00
thePR0M3TH3AN 25ac2a2c6b Handle NIP-44 decryptor DM errors 2026-01-30 10:32:40 -05:00
google-labs-jules[bot]andPR0M3TH3AN 3862415340 chore(ai): doc js/nostr/client.js (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 15:31:06 +00:00
thePR0M3TH3AN 035291bfa6 Merge pull request #1977 from PR0M3TH3AN/perf/optimize-critical-paths-3892933543654891645
Optimize critical performance paths to prevent high CPU/GPU usage
2026-01-30 10:29:47 -05:00
thePR0M3TH3AN abdfa4b68b Defer NIP-07 encryption permissions 2026-01-30 10:29:00 -05:00
google-labs-jules[bot]andPR0M3TH3AN a0f893ace6 perf: optimize critical rendering and data processing paths
- Refactor `AmbientBackground` to use `ResizeObserver` instead of polling layout in animation loop.
- Implement async chunking for `ExploreDataService` to prevent main thread blocking during heavy calculations.
- Throttle `UrlHealthController` video probes to a maximum of 3 concurrent requests to prevent resource exhaustion.
- Document optimization tasks in `OPTIMIZATION_TASKS.md`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 15:27:25 +00:00
thePR0M3TH3AN 2a0a0a0427 Update NIP-07 signer hydration 2026-01-30 10:15:50 -05:00
thePR0M3TH3AN 2007e53b39 Add probe caching and dedupe for playback 2026-01-30 10:11:31 -05:00
thePR0M3TH3AN b246e8a37b Merge pull request #1974 from PR0M3TH3AN/codex/update-health-probe-polling-logic
Tighten torrent probe polling and dedupe in-flight probes
2026-01-30 10:07:39 -05:00
thePR0M3TH3AN 8a2ee7beae Tighten torrent probe polling 2026-01-30 10:07:28 -05:00
thePR0M3TH3AN cc7fe64e90 Merge pull request #1946 from PR0M3TH3AN/ai/dead-code-20240123-13702536329573366933
chore(ai): remove dead code (agent)
2026-01-30 10:05:35 -05:00
thePR0M3TH3AN 8cdeebed03 Consolidate torrent status interval handling 2026-01-30 10:03:47 -05:00
thePR0M3TH3AN d1853743da Throttle torrent status updates and logging 2026-01-30 09:30:55 -05:00
thePR0M3TH3AN 80a0bc8bb2 Merge branch 'unstable' into ai/refactor-videomodal-controller-18342133587526974097 2026-01-30 09:18:22 -05:00
thePR0M3TH3AN 55b338ee5a Merge pull request #1962 from PR0M3TH3AN/ai/schema-validate-20250130-4578214465880061430
Event Schema Validation Tool & NIP-71 Instrumentation
2026-01-30 09:17:42 -05:00
thePR0M3TH3AN db9a6b8e69 Merge pull request #1955 from PR0M3TH3AN/ai/smoke-tests-20250129-1837019461609586530
chore(ai): add smoke test script (agent)
2026-01-30 09:14:46 -05:00
thePR0M3TH3AN 31b5fc5c16 Harden dev mode defaults 2026-01-30 09:13:54 -05:00
google-labs-jules[bot]andPR0M3TH3AN 39c4e2249d chore(ai): event schema validation tool + fixes
- Created `scripts/agent/validate-events.mjs` to verify all event builders produce valid events against the schema.
- Instrumented `js/nostr/nip71.js` to validate NIP-71 events during construction (other builders in `js/nostrEventSchemas.js` were already instrumented).
- Validated all 25 event types using the new tool.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 05:34:50 +00:00
google-labs-jules[bot]andPR0M3TH3AN 3dfba92e04 refactor(ai): extract VideoModalController from js/app.js (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 03:40:36 +00:00
thePR0M3TH3AN 2726ee9ed4 Batch direct message UI updates 2026-01-29 19:07:29 -05:00
thePR0M3TH3AN f0f36e7c7b Merge cached profile and DM data safely 2026-01-29 19:01:11 -05:00
google-labs-jules[bot]andPR0M3TH3AN 624dabc576 chore(ai): add smoke test script (agent)
- Added `scripts/agent/smoke-test.mjs` which performs an end-to-e2e smoke test using a local relay, Node.js client, and headless Playwright browser.
- Fixed a bug in `js/app.js` where `activeProfilePubkey` and `savedProfiles` getters were missing, preventing auto-login and session restoration.
- The smoke test verifies:
    - Login flow (using ephemeral keys and localStorage injection).
    - Relay connection (using a local test relay).
    - Publish and Receive flow (Video Post).
    - DM Encryption/Decryption flow (Node.js client).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-29 21:45:32 +00:00
thePR0M3TH3AN a196e95127 Centralize relay list subscriptions 2026-01-29 16:32:11 -05:00
thePR0M3TH3AN bba94b9908 Improve login hydration parallelism 2026-01-29 16:13:35 -05:00
thePR0M3TH3AN 4b1725b1f1 Expand DM filters for gift-wrapped events 2026-01-29 16:08:52 -05:00
thePR0M3TH3AN 7596f8b8fd Batch relay-driven UI refreshes 2026-01-29 16:05:03 -05:00
thePR0M3TH3AN f4e2177af2 Add relay reconnect backoff and circuit breakers 2026-01-29 16:01:12 -05:00
thePR0M3TH3AN 1642b787ec Reset caches on logout 2026-01-29 15:54:44 -05:00
thePR0M3TH3AN aad2fe465a Tier login hydration and trim DM fetch 2026-01-29 15:43:34 -05:00
thePR0M3TH3AN 57d68846d1 Merge paged DM results into cache 2026-01-29 15:33:03 -05:00
google-labs-jules[bot]andPR0M3TH3AN 40e809245a chore(ai): remove dead code (agent)
Removed unused exports and functions identified as dead code.
- Removed unused exports from `js/utils/storage.js`, `js/utils/storagePointer.js`, `js/utils/videoTags.js`, `js/ui/moderationCopy.js`.
- Removed unused function `updateTagPillStrip` from `js/ui/components/tagPillList.js` and associated tests.
- Updated `tests/utils/video-tags.test.mjs` to remove test for private function.
- Added `artifacts/depcheck.json` showing dependency analysis.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-29 20:29:42 +00:00
thePR0M3TH3AN 89b8d124fa Consolidate profile metadata fetches 2026-01-29 15:25:08 -05:00
thePR0M3TH3AN e9db549406 Update login flow loading states 2026-01-29 15:13:12 -05:00
thePR0M3TH3AN 379287c87c Defer subscription and hashtag decrypt prompts 2026-01-29 13:08:35 -05:00