Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
No EOL
6 KiB
Text
1 line
No EOL
6 KiB
Text
{"version":3,"file":"correlation.js","sources":["../../../../src/integrations/mcp-server/correlation.ts"],"sourcesContent":["/**\n * Request-span correlation system for MCP server instrumentation\n *\n * Handles mapping requestId to span data for correlation with handler execution.\n * Uses WeakMap to scope correlation maps per transport instance, preventing\n * request ID collisions between different MCP sessions.\n */\n\nimport { getClient } from '../../currentScopes';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport type { Span } from '../../types-hoist/span';\nimport { filterMcpPiiFromSpanData } from './piiFiltering';\nimport { extractPromptResultAttributes, extractToolResultAttributes } from './resultExtraction';\nimport type { MCPTransport, RequestId, RequestSpanMapValue } from './types';\n\n/**\n * Transport-scoped correlation system that prevents collisions between different MCP sessions\n * @internal Each transport instance gets its own correlation map, eliminating request ID conflicts\n */\nconst transportToSpanMap = new WeakMap<MCPTransport, Map<RequestId, RequestSpanMapValue>>();\n\n/**\n * Gets or creates the span map for a specific transport instance\n * @internal\n * @param transport - MCP transport instance\n * @returns Span map for the transport\n */\nfunction getOrCreateSpanMap(transport: MCPTransport): Map<RequestId, RequestSpanMapValue> {\n let spanMap = transportToSpanMap.get(transport);\n if (!spanMap) {\n spanMap = new Map();\n transportToSpanMap.set(transport, spanMap);\n }\n return spanMap;\n}\n\n/**\n * Stores span context for later correlation with handler execution\n * @param transport - MCP transport instance\n * @param requestId - Request identifier\n * @param span - Active span to correlate\n * @param method - MCP method name\n */\nexport function storeSpanForRequest(transport: MCPTransport, requestId: RequestId, span: Span, method: string): void {\n const spanMap = getOrCreateSpanMap(transport);\n spanMap.set(requestId, {\n span,\n method,\n startTime: Date.now(),\n });\n}\n\n/**\n * Completes span with tool results and cleans up correlation\n * @param transport - MCP transport instance\n * @param requestId - Request identifier\n * @param result - Tool execution result for attribute extraction\n */\nexport function completeSpanWithResults(transport: MCPTransport, requestId: RequestId, result: unknown): void {\n const spanMap = getOrCreateSpanMap(transport);\n const spanData = spanMap.get(requestId);\n if (spanData) {\n const { span, method } = spanData;\n\n if (method === 'tools/call') {\n const rawToolAttributes = extractToolResultAttributes(result);\n const client = getClient();\n const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n const toolAttributes = filterMcpPiiFromSpanData(rawToolAttributes, sendDefaultPii);\n\n span.setAttributes(toolAttributes);\n } else if (method === 'prompts/get') {\n const rawPromptAttributes = extractPromptResultAttributes(result);\n const client = getClient();\n const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n const promptAttributes = filterMcpPiiFromSpanData(rawPromptAttributes, sendDefaultPii);\n\n span.setAttributes(promptAttributes);\n }\n\n span.end();\n spanMap.delete(requestId);\n }\n}\n\n/**\n * Cleans up pending spans for a specific transport (when that transport closes)\n * @param transport - MCP transport instance\n * @returns Number of pending spans that were cleaned up\n */\nexport function cleanupPendingSpansForTransport(transport: MCPTransport): number {\n const spanMap = transportToSpanMap.get(transport);\n if (!spanMap) {\n return 0;\n }\n\n const pendingCount = spanMap.size;\n\n for (const [, spanData] of spanMap) {\n spanData.span.setStatus({\n code: SPAN_STATUS_ERROR,\n message: 'cancelled',\n });\n spanData.span.end();\n }\n\n spanMap.clear();\n return pendingCount;\n}\n"],"names":[],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;AASA;AACA;AACA;AACA;AACA,MAAM,kBAAA,GAAqB,IAAI,OAAO,EAAqD;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,SAAS,EAAqD;AAC1F,EAAE,IAAI,UAAU,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACjD,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,OAAA,GAAU,IAAI,GAAG,EAAE;AACvB,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;AAC9C;AACA,EAAE,OAAO,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,SAAS,EAAgB,SAAS,EAAa,IAAI,EAAQ,MAAM,EAAgB;AACrH,EAAE,MAAM,OAAA,GAAU,kBAAkB,CAAC,SAAS,CAAC;AAC/C,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE;AACzB,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACzB,GAAG,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAC,SAAS,EAAgB,SAAS,EAAa,MAAM,EAAiB;AAC9G,EAAE,MAAM,OAAA,GAAU,kBAAkB,CAAC,SAAS,CAAC;AAC/C,EAAE,MAAM,WAAW,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,MAAM,EAAE,IAAI,EAAE,MAAA,EAAO,GAAI,QAAQ;;AAErC,IAAI,IAAI,MAAA,KAAW,YAAY,EAAE;AACjC,MAAM,MAAM,iBAAA,GAAoB,2BAA2B,CAAC,MAAM,CAAC;AACnE,MAAM,MAAM,MAAA,GAAS,SAAS,EAAE;AAChC,MAAM,MAAM,cAAA,GAAiB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC;AACzE,MAAM,MAAM,iBAAiB,wBAAwB,CAAC,iBAAiB,EAAE,cAAc,CAAC;;AAExF,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;AACxC,WAAW,IAAI,MAAA,KAAW,aAAa,EAAE;AACzC,MAAM,MAAM,mBAAA,GAAsB,6BAA6B,CAAC,MAAM,CAAC;AACvE,MAAM,MAAM,MAAA,GAAS,SAAS,EAAE;AAChC,MAAM,MAAM,cAAA,GAAiB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC;AACzE,MAAM,MAAM,mBAAmB,wBAAwB,CAAC,mBAAmB,EAAE,cAAc,CAAC;;AAE5F,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAC1C;;AAEA,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,+BAA+B,CAAC,SAAS,EAAwB;AACjF,EAAE,MAAM,UAAU,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACnD,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,OAAO,CAAC;AACZ;;AAEA,EAAE,MAAM,YAAA,GAAe,OAAO,CAAC,IAAI;;AAEnC,EAAE,KAAK,MAAM,GAAG,QAAQ,CAAA,IAAK,OAAO,EAAE;AACtC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,MAAM,IAAI,EAAE,iBAAiB;AAC7B,MAAM,OAAO,EAAE,WAAW;AAC1B,KAAK,CAAC;AACN,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;AACvB;;AAEA,EAAE,OAAO,CAAC,KAAK,EAAE;AACjB,EAAE,OAAO,YAAY;AACrB;;;;"} |