UNPKG

@sentry-internal/lynx-plugin

Version:
1 lines 5.16 kB
{"version":3,"file":"middleware.mjs","sources":["../../src/middleware.ts"],"sourcesContent":["import { ServerResponse } from 'node:http';\nimport { IncomingMessage } from 'node:http';\nimport * as path from 'node:path';\nimport { symbolicateFrames } from './symbolicator';\nimport { logger } from '@sentry/core';\nimport { PREFIX } from './prefix';\nimport { tryCatch } from './utils/tryCatch';\nimport { RsbuildConfig } from '@rsbuild/core';\nimport { getRawBody } from './utils/getRawBody';\n\nexport const SENTRY_SYMBOLICATE_ENDPOINT = '/__sentry__/symbolicate';\n\nexport type NextFunction = () => void;\n\nexport const createSentrySymbolicatorMiddleware = (config: RsbuildConfig) => {\n if (!config.root) {\n logger.warn(`${PREFIX} No project root path provided. Symbolication will not work.`);\n return noopMiddleware;\n }\n\n const projectRootPath = config.root\n const distPath = config.output?.distPath?.root ?? './'\n const serverPublicPath = path.isAbsolute(distPath)\n ? distPath\n : path.join(projectRootPath, distPath);\n\n return async (req: IncomingMessage, res: ServerResponse, next: NextFunction) => {\n if (req.url?.startsWith(SENTRY_SYMBOLICATE_ENDPOINT)) {\n try {\n await processSymbolicateRequest({ req, res, projectRootPath, serverPublicPath });\n } catch (error) {\n logger.error(`${PREFIX} Error processing symbolicate request: ${error}`);\n res.setHeader('Content-Type', 'application/json');\n res.statusCode = 500;\n res.end('{ \"error\": \"Internal Server Error\" }');\n }\n } else {\n next();\n }\n };\n}\n\nexport const noopMiddleware = (_req: IncomingMessage, _res: ServerResponse, next: NextFunction) => {\n next();\n};\n\nexport async function processSymbolicateRequest({\n req,\n res,\n projectRootPath,\n serverPublicPath,\n}: {\n req: IncomingMessage,\n res: ServerResponse,\n projectRootPath?: string,\n serverPublicPath?: string,\n}) {\n const body = await getRawBody(req);\n res.setHeader('Content-Type', 'application/json');\n\n const { data, error } = tryCatch(() => JSON.parse(body));\n if (error) {\n logger.error(`${PREFIX} Error parsing symbolicate request body: ${body}\\nerror: ${error}`);\n res.statusCode = 400;\n res.end('{ \"error\": \"Bad Request\" }');\n return;\n }\n\n logger.debug(`${PREFIX} Symbolicating ${data.frames.length} frames.`);\n const { data: symbolicatedFrames, error: symbolicationError } = await tryCatch(() => symbolicateFrames({\n frames: data.frames,\n projectRootPath,\n serverPublicPath,\n }));\n if (symbolicationError) {\n logger.error(`${PREFIX} Error symbolicating frames: ${symbolicationError}`);\n res.statusCode = 500;\n res.end('{ \"error\": \"Internal Server Error\" }');\n return;\n }\n\n res.end(JSON.stringify({ frames: symbolicatedFrames }));\n}\n"],"names":[],"mappings":"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"}