@@ -26,6 +26,14 @@ const PII_ATTRIBUTES = new Set([
26
26
MCP_TOOL_RESULT_CONTENT_ATTRIBUTE ,
27
27
] ) ;
28
28
29
+ /**
30
+ * Checks if an attribute key should be considered PII
31
+ * @internal
32
+ */
33
+ function isPiiAttribute ( key : string ) : boolean {
34
+ return PII_ATTRIBUTES . has ( key ) || key . startsWith ( `${ MCP_REQUEST_ARGUMENT } .` ) ;
35
+ }
36
+
29
37
/**
30
38
* Removes PII attributes from span data when sendDefaultPii is false
31
39
* @param spanData - Raw span attributes
@@ -35,15 +43,18 @@ const PII_ATTRIBUTES = new Set([
35
43
export function filterMcpPiiFromSpanData (
36
44
spanData : Record < string , unknown > ,
37
45
sendDefaultPii : boolean ,
38
- ) : Record < string , SpanAttributeValue | undefined > {
46
+ ) : Record < string , SpanAttributeValue > {
39
47
if ( sendDefaultPii ) {
40
- return spanData as Record < string , SpanAttributeValue | undefined > ;
48
+ return spanData as Record < string , SpanAttributeValue > ;
41
49
}
42
50
43
- return Object . fromEntries (
44
- Object . entries ( spanData ) . filter ( ( [ key ] ) => {
45
- const isPiiAttribute = PII_ATTRIBUTES . has ( key ) || key . startsWith ( `${ MCP_REQUEST_ARGUMENT } .` ) ;
46
- return ! isPiiAttribute ;
47
- } ) ,
48
- ) as Record < string , SpanAttributeValue | undefined > ;
51
+ return Object . entries ( spanData ) . reduce (
52
+ ( acc , [ key , value ] ) => {
53
+ if ( ! isPiiAttribute ( key ) ) {
54
+ acc [ key ] = value as SpanAttributeValue ;
55
+ }
56
+ return acc ;
57
+ } ,
58
+ { } as Record < string , SpanAttributeValue > ,
59
+ ) ;
49
60
}
0 commit comments