@@ -19,25 +19,13 @@ import type { MCPTransport, RequestId, RequestSpanMapValue } from './types';
19
19
*/
20
20
const transportToSpanMap = new WeakMap < MCPTransport , Map < RequestId , RequestSpanMapValue > > ( ) ;
21
21
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
-
28
22
/**
29
23
* Gets or creates the span map for a specific transport instance
30
24
* @internal
31
25
* @param transport - MCP transport instance
32
26
* @returns Span map for the transport
33
27
*/
34
28
function 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
-
41
29
let spanMap = transportToSpanMap . get ( transport ) ;
42
30
if ( ! spanMap ) {
43
31
spanMap = new Map ( ) ;
@@ -55,6 +43,7 @@ function getOrCreateSpanMap(transport: MCPTransport): Map<RequestId, RequestSpan
55
43
*/
56
44
export function storeSpanForRequest ( transport : MCPTransport , requestId : RequestId , span : Span , method : string ) : void {
57
45
const spanMap = getOrCreateSpanMap ( transport ) ;
46
+
58
47
spanMap . set ( requestId , {
59
48
span,
60
49
method,
@@ -70,7 +59,7 @@ export function storeSpanForRequest(transport: MCPTransport, requestId: RequestI
70
59
*/
71
60
export function completeSpanWithResults ( transport : MCPTransport , requestId : RequestId , result : unknown ) : void {
72
61
const spanMap = getOrCreateSpanMap ( transport ) ;
73
- const spanData = spanMap . get ( requestId ) ;
62
+ const spanData = spanMap ? .get ( requestId ) ;
74
63
if ( spanData ) {
75
64
const { span, method } = spanData ;
76
65
@@ -84,29 +73,24 @@ export function completeSpanWithResults(transport: MCPTransport, requestId: Requ
84
73
}
85
74
86
75
span . end ( ) ;
87
- spanMap . delete ( requestId ) ;
76
+ spanMap ? .delete ( requestId ) ;
88
77
}
89
78
}
90
79
91
80
/**
92
81
* Cleans up pending spans for a specific transport (when that transport closes)
93
82
* @param transport - MCP transport instance
94
- * @returns Number of pending spans that were cleaned up
95
83
*/
96
- export function cleanupPendingSpansForTransport ( transport : MCPTransport ) : number {
84
+ export function cleanupPendingSpansForTransport ( transport : MCPTransport ) : void {
97
85
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 ( ) ;
108
95
}
109
-
110
- spanMap . clear ( ) ;
111
- return pendingCount ;
112
96
}
0 commit comments