Skip to content

refactor(transport): extract oversized helpers and clean discovery tags#41

Merged
ContextVM-org merged 9 commits intoContextVM:masterfrom
1amKhush:refactor/oversized-transport-modules
Apr 21, 2026
Merged

refactor(transport): extract oversized helpers and clean discovery tags#41
ContextVM-org merged 9 commits intoContextVM:masterfrom
1amKhush:refactor/oversized-transport-modules

Conversation

@1amKhush
Copy link
Copy Markdown
Contributor

@1amKhush 1amKhush commented Apr 4, 2026

Closes #40

What

Post-merge cleanup for #35. Extracts focused submodules from the two largest
transport files without changing any public API or behavior.

Why

After the CEP-22 oversized transfer feature landed, both main transport files
exceeded the project's ~700 LOC guideline at ~1,140 LOC each. Several
self-contained concerns were inlined that are better expressed as dedicated
modules following the existing extraction pattern (correlation-store.ts,
stateless-mode-handler.ts, session-store.ts).

Changes

New modules

File LOC Responsibility
discovery-tags.ts 97 Shared tag helpers (hasSingleTag, hasEventTag, parseDiscoveredPeerCapabilities, mergeDiscoveryTags) — previously duplicated across both transports
nostr-client/oversized-client-sender.ts 92 CEP-22 oversized request frame publishing, extracted from NostrClientTransport.sendOversizedRequest
nostr-client/relay-resolution.ts 133 Relay resolution with hint/discovery/fallback probing, extracted from resolveOperationalRelayHandler
nostr-server/oversized-server-handler.ts 133 sendOversizedServerResponse + sendAcceptFrame for CEP-22 server-side frame publishing
nostr-server/capability-learner.ts 32 learnPeerCapabilities — inspects inbound tags to learn peer support flags

Modified files

File Before After Δ
nostr-client-transport.ts 1,139 1,063 -76
nostr-server-transport.ts 1,148 1,142 -6
discovery-tags.ts 104 97 -7 (dead exports removed)

Bug fix

  • capability-learner.ts: Fixed dead ternary where the oversizedEnabled
    parameter had no effect — both branches were identical. The false branch
    now correctly returns false.

Cleanup

  • Removed dead exports hasKnownDiscoveryTag and hasDiscoveryTags from
    discovery-tags.ts (exported but never imported).
  • Removed unused KNOWN_DISCOVERY_TAGS constant.
  • Added JSDoc to all new public interfaces and functions per project guidelines.

Design decisions

  • Dependency injection via interfaces (*Deps / *Config), not class
    inheritance. Follows the existing pattern in correlation-store.ts and
    announcement-manager.ts.
  • Extracted modules are internal — no new exports in
    src/transport/index.ts.
  • Tests remain in parent transport test files to minimize churn; the
    extracted logic is exercised through the same integration paths.

Verification

  • bun run build
  • bun test src/transport/158 pass, 0 fail
  • No new public exports in index.ts
  • All new files follow kebab-case naming
  • All new public APIs have JSDoc

Copilot AI review requested due to automatic review settings April 4, 2026 22:22
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the Nostr transport layer by extracting previously inlined/duplicated logic into focused internal submodules, reducing file size and improving separation of concerns while preserving existing behavior (plus a small capability-flag fix).

Changes:

  • Extracted CEP-22 oversized transfer sending/handling into dedicated client/server helper modules.
  • Extracted client relay resolution (configured/hint/discovery/fallback probing) into a standalone resolver.
  • Consolidated discovery tag helpers and introduced a dedicated server-side peer capability learner (including a fix where oversizedEnabled=false now correctly disables oversized capability learning).

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/transport/nostr-server/oversized-server-handler.ts New helper for publishing oversized server responses + CEP-22 accept frames.
src/transport/nostr-server/capability-learner.ts New helper to learn peer capability flags from inbound tags (includes bug fix).
src/transport/nostr-server-transport.ts Rewired server transport to use extracted oversized sender/accept + capability learner.
src/transport/nostr-client/relay-resolution.ts New module for operational relay resolution logic extracted from client transport.
src/transport/nostr-client/oversized-client-sender.ts New helper for publishing oversized client requests (CEP-22 frames + accept wait).
src/transport/nostr-client-transport.ts Uses extracted relay resolution + oversized client sender; removes inlined logic.
src/transport/discovery-tags.ts Centralizes tag helpers (hasSingleTag, hasEventTag) and keeps discovery parsing/merge utilities.
src/core/utils/utils.ts Removes tag helper exports that were moved into discovery-tags.ts.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/transport/discovery-tags.ts Outdated
Comment thread src/transport/nostr-client/oversized-client-sender.ts
Comment thread src/transport/nostr-client/relay-resolution.ts Outdated
1amKhush and others added 3 commits April 5, 2026 04:10
…module

Move the PeerCapabilities interface and learnPeerCapabilities function from the
separate capability-learner.ts file into discovery-tags.ts. This consolidates
all discovery tag parsing logic in one place and simplifies the capability
detection by handling the oversizedEnabled check in the caller. The
capability-learner.ts file is now redundant and has been deleted.
@ContextVM-org
Copy link
Copy Markdown
Contributor

I removed the src/transport/nostr-server/capability-learner.ts and consolidated it in the src/transport/discovery-tags.ts

Add unit tests for sendOversizedClientRequest and sendOversizedServerResponse functions, covering accept frame waiting behavior and frame publishing with correct tags. Also refactor OversizedServerHandlerDeps into separate OversizedServerResponseDeps and OversizedAcceptFrameDeps interfaces for better separation of concerns.
@ContextVM-org ContextVM-org merged commit 3a13f7f into ContextVM:master Apr 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(transport): break down oversized transport modules after PR #35

3 participants