Commit Graph
2133 Commits
Author SHA1 Message Date
google-labs-jules[bot]andPR0M3TH3AN 6a043c2946 Fix CI test failures and clean up NostrClient
- Fixed duplicate imports and initializations in `js/nostr/client.js`.
- Fixed `registerPrivateKeySigner` to populate `sessionActor`, ensuring fallback encryption works in tests (fixing `tests/nostr-send-direct-message.test.mjs`).
- Removed duplicate/unused methods (`resolveEventDTag`, `extensionPermissionCache` getter).
- Installed missing dev dependencies (`jsdom`, `fake-indexeddb`).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-10 01:07:50 +00:00
thePR0M3TH3AN b50565b332 Merge pull request #2265 from PR0M3TH3AN/refactor-publishVideo-method-129817906368864748
Refactor publishVideo method in NostrClient
2026-02-09 19:51:34 -05:00
thePR0M3TH3AN 1124707ab9 Merge branch 'unstable' into refactor-publishVideo-method-129817906368864748 2026-02-09 19:49:45 -05:00
google-labs-jules[bot]andPR0M3TH3AN aebb667d1c fix(ai): prevent test timeouts in subscriptions (agent) suggested
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-10 00:28:27 +00:00
google-labs-jules[bot]andPR0M3TH3AN ab8c46d54d Refactor publishVideo logic and fix signer tests
- Extracted prepareVideoPublishPayload and prepareVideoMirrorOptions to js/nostr/videoPayloadBuilder.js
- Created js/utils/cryptoUtils.js and js/utils/mime.js
- Updated js/nostr/client.js to use new builder and helpers
- Fixed SignerManager permission hydration and session actor logic
- Fixed nostrClientRegistry update logic
- Fixed unit tests: nostr-private-key-signer, integration-remote-flow, dmSignalEvents

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 21:32:29 +00:00
thePR0M3TH3AN ec1d01d438 Merge branch 'unstable' into docs-codebase-alignment-1921547855180611109 2026-02-09 14:42:07 -05:00
google-labs-jules[bot]andPR0M3TH3AN 8fbf0a11d7 fix: Align development docs and fix SignerManager v2 compatibility
- Aligned `README.md`, `AGENTS.md`, and `docs/` with codebase reality.
- Fixed `ReferenceError` in `js/nostr/managers/SignerManager.js`.
- Implemented missing `resolveEventDTag` in `js/nostr/client.js`.
- Updated `SignerManager.js` to support `nostr-tools` v2 `generateSecretKey` and handle `generatePrivateKey` aliasing (returning `Uint8Array`).
- Updated `js/nostr/publishHelpers.js` to support `finalizeEvent` (v2) by converting hex keys to bytes.
- Updated `js/nostr/sessionActor.js` to correctly identify session actor context, allowing authenticated users to publish watch history.
- Fixed `tests/nostr/integration-remote-flow.test.mjs` by ensuring `generateSecretKey` is mocked.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 19:23:41 +00:00
google-labs-jules[bot]andPR0M3TH3AN 56b23be427 fix(nostr): implement missing resolveEventDTag in NostrClient
Added the `resolveEventDTag` method to the `NostrClient` class in `js/nostr/client.js`. This method was referenced in `editVideo` and `hydrateVideoHistory` but was missing from the implementation, causing `TypeError` in tests. The implementation delegates to `getDTagValueFromTags` from `js/nostr/nip71.js`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 18:45:26 +00:00
google-labs-jules[bot]andPR0M3TH3AN a53e3dbc56 fix: restore NostrClient methods and logic
- Restored `resolveEventDTag` in `js/nostr/client.js` which was accidentally removed, fixing `edit-video-dtag.test.mjs`.
- Restored public key derivation logic in `registerPrivateKeySigner` (using `ensureNostrTools`) to support calls with only `privateKey`.
- Verified `edit-video-dtag.test.mjs` passes.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 18:39:19 +00:00
google-labs-jules[bot]andPR0M3TH3AN 25551592ad fix(nostr): duplicate 'extension' declaration in SignerManager
Fixes a SyntaxError in SignerManager.js where `extension` was declared twice in the same scope. This resolves CI failures in tests depending on SignerManager.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 18:38:48 +00:00
google-labs-jules[bot]andPR0M3TH3AN 8bcd7261ab fix: remediate known issues and bugs
- Installed missing devDependencies (`jsdom`, `playwright`, `fake-indexeddb`).
- Fixed SyntaxError in `js/nostr/managers/SignerManager.js`.
- Fixed bug in `js/nostr/client.js` where `registerPrivateKeySigner` was defined twice, preventing `sessionActor` initialization.
- Updated `KNOWN_ISSUES.md` and related issue docs.
- Verified popover bug status (still present, skipped).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 18:31:31 +00: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
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
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
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 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 b9aa72a602 Fix CI failures in SignerManager and tests
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 02:24:53 +00:00
google-labs-jules[bot]andPR0M3TH3AN b7b29d5332 Refactor publishVideo and fix client dependencies
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 02:07:30 +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 b246e431e5 Refactor publishVideo method in NostrClient
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-09 01:54:07 +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 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 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 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 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 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 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 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
google-labs-jules[bot]andPR0M3TH3AN 7c1f3c9ada perf: Optimize chronological sorter hook resolution
Hoisted the timestamp hook resolution out of the inner loop in `createChronologicalSorter`.
This avoids allocating an array of candidate functions for every comparison during sorting (O(N log N)).
Benchmark shows a ~27% speedup (38ms -> 27ms for 100k items).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 16:55:27 +00:00
thePR0M3TH3AN ec50db8645 Merge pull request #2243 from PR0M3TH3AN/refactor-application-monolith-3243348981324014635
Refactor Application class into Router and UI Coordinators
2026-02-08 10:57:44 -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 6f765cc647 Merge pull request #2240 from PR0M3TH3AN/refactor-revert-video-2176939372137755635
🧹 Refactor revertVideo to use helper function
2026-02-08 10:56:57 -05:00