@@ -19,25 +19,13 @@ import type { MCPTransport, RequestId, RequestSpanMapValue } from './types';
1919 */
2020const transportToSpanMap = new WeakMap < MCPTransport , Map < RequestId , RequestSpanMapValue > > ( ) ;
2121
22- /**
23- * Fallback span map for invalid transport objects
24- * @internal Used when transport objects cannot be used as WeakMap keys
25- */
26- const fallbackSpanMap = new Map < RequestId , RequestSpanMapValue > ( ) ;
27-
2822/**
2923 * Gets or creates the span map for a specific transport instance
3024 * @internal
3125 * @param transport - MCP transport instance
3226 * @returns Span map for the transport
3327 */
3428function getOrCreateSpanMap ( transport : MCPTransport ) : Map < RequestId , RequestSpanMapValue > {
35- // Handle invalid transport values for WeakMap while preserving correlation
36- if ( ! transport || typeof transport !== 'object' ) {
37- // Return persistent fallback Map to maintain correlation across calls
38- return fallbackSpanMap ;
39- }
40-
4129 let spanMap = transportToSpanMap . get ( transport ) ;
4230 if ( ! spanMap ) {
4331 spanMap = new Map ( ) ;
@@ -55,6 +43,7 @@ function getOrCreateSpanMap(transport: MCPTransport): Map<RequestId, RequestSpan
5543 */
5644export function storeSpanForRequest ( transport : MCPTransport , requestId : RequestId , span : Span , method : string ) : void {
5745 const spanMap = getOrCreateSpanMap ( transport ) ;
46+
5847 spanMap . set ( requestId , {
5948 span,
6049 method,
@@ -70,7 +59,7 @@ export function storeSpanForRequest(transport: MCPTransport, requestId: RequestI
7059 */
7160export function completeSpanWithResults ( transport : MCPTransport , requestId : RequestId , result : unknown ) : void {
7261 const spanMap = getOrCreateSpanMap ( transport ) ;
73- const spanData = spanMap . get ( requestId ) ;
62+ const spanData = spanMap ? .get ( requestId ) ;
7463 if ( spanData ) {
7564 const { span, method } = spanData ;
7665
@@ -84,29 +73,24 @@ export function completeSpanWithResults(transport: MCPTransport, requestId: Requ
8473 }
8574
8675 span . end ( ) ;
87- spanMap . delete ( requestId ) ;
76+ spanMap ? .delete ( requestId ) ;
8877 }
8978}
9079
9180/**
9281 * Cleans up pending spans for a specific transport (when that transport closes)
9382 * @param transport - MCP transport instance
94- * @returns Number of pending spans that were cleaned up
9583 */
96- export function cleanupPendingSpansForTransport ( transport : MCPTransport ) : number {
84+ export function cleanupPendingSpansForTransport ( transport : MCPTransport ) : void {
9785 const spanMap = transportToSpanMap . get ( transport ) ;
98- if ( ! spanMap ) return 0 ;
99-
100- const pendingCount = spanMap . size ;
101-
102- for ( const [ , spanData ] of spanMap ) {
103- spanData . span . setStatus ( {
104- code : SPAN_STATUS_ERROR ,
105- message : 'cancelled' ,
106- } ) ;
107- spanData . span . end ( ) ;
86+ if ( spanMap ) {
87+ for ( const [ , spanData ] of spanMap ) {
88+ spanData . span . setStatus ( {
89+ code : SPAN_STATUS_ERROR ,
90+ message : 'cancelled' ,
91+ } ) ;
92+ spanData . span . end ( ) ;
93+ }
94+ spanMap . clear ( ) ;
10895 }
109-
110- spanMap . clear ( ) ;
111- return pendingCount ;
11296}
0 commit comments