@error-explorer/node 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1720 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +261 -0
- package/dist/index.d.ts +261 -0
- package/dist/index.js +1674 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/express.cjs +1625 -0
- package/dist/middleware/express.cjs.map +1 -0
- package/dist/middleware/express.d.cts +60 -0
- package/dist/middleware/express.d.ts +60 -0
- package/dist/middleware/express.js +1597 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/http.cjs +1587 -0
- package/dist/middleware/http.cjs.map +1 -0
- package/dist/middleware/http.d.cts +29 -0
- package/dist/middleware/http.d.ts +29 -0
- package/dist/middleware/http.js +1560 -0
- package/dist/middleware/http.js.map +1 -0
- package/dist/types-D5NSSblm.d.cts +255 -0
- package/dist/types-D5NSSblm.d.ts +255 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/Config.ts","../src/utils/stacktrace.ts","../src/utils/uuid.ts","../src/context/ProcessContext.ts","../src/context/OsContext.ts","../src/context/RuntimeContext.ts","../src/context/ServerContext.ts","../src/context/UserContext.ts","../src/context/RequestContext.ts","../src/breadcrumbs/BreadcrumbManager.ts","../src/breadcrumbs/ConsoleTracker.ts","../src/breadcrumbs/HttpTracker.ts","../src/capture/ProcessCapture.ts","../src/capture/ConsoleCapture.ts","../src/security/HmacSigner.ts","../src/transport/HttpTransport.ts","../src/ErrorExplorer.ts","../src/middleware/express.ts","../src/middleware/http.ts","../src/index.ts"],"names":["os","os3","path","hostname","crypto2","https","http","processCapture"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Configuration module for @error-explorer/node SDK\n */\n\nimport * as os from 'node:os';\nimport type { InitOptions, ResolvedConfig } from '../types.js';\n\nconst DEFAULT_ENDPOINT = 'https://error-explorer.com/api/v1/webhook';\n\n/**\n * Parse DSN string to extract token and endpoint\n * DSN format: http(s)://token@host/path\n * Example: https://ee_abc123@error-explorer.com/api/v1/webhook\n */\nexport function parseDsn(dsn: string): { token: string; endpoint: string } {\n let url: URL;\n\n try {\n url = new URL(dsn);\n } catch {\n throw new Error(`Invalid DSN format: ${dsn}. Expected format: https://token@host/path`);\n }\n\n const token = url.username;\n\n if (!token) {\n throw new Error('DSN must contain a token (username part)');\n }\n\n // Reconstruct endpoint without credentials\n url.username = '';\n url.password = '';\n\n return {\n token,\n endpoint: url.toString().replace(/\\/$/, ''),\n };\n}\n\n/**\n * Detect environment from NODE_ENV or other sources\n */\nfunction detectEnvironment(): string {\n return process.env['NODE_ENV'] || 'development';\n}\n\n/**\n * Get default server name\n */\nfunction getDefaultServerName(): string {\n try {\n return os.hostname();\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Resolve full configuration from options\n */\nexport function resolveConfig(options: InitOptions): ResolvedConfig {\n // Token/DSN handling\n let token: string;\n let endpoint: string;\n\n if (options.dsn) {\n const parsed = parseDsn(options.dsn);\n token = parsed.token;\n endpoint = options.endpoint || parsed.endpoint;\n } else if (options.token) {\n token = options.token;\n endpoint = options.endpoint || DEFAULT_ENDPOINT;\n } else {\n throw new Error('Either token or dsn must be provided');\n }\n\n // Validate token format\n if (!token.startsWith('ee_')) {\n console.warn('[ErrorExplorer] Token should start with \"ee_\" prefix');\n }\n\n return {\n token,\n endpoint,\n environment: options.environment || detectEnvironment(),\n release: options.release || '',\n serverName: options.serverName || getDefaultServerName(),\n\n autoCapture: {\n uncaughtExceptions: options.autoCapture?.uncaughtExceptions ?? true,\n unhandledRejections: options.autoCapture?.unhandledRejections ?? true,\n console: options.autoCapture?.console ?? false,\n },\n\n breadcrumbs: {\n enabled: options.breadcrumbs?.enabled ?? true,\n maxBreadcrumbs: options.breadcrumbs?.maxBreadcrumbs ?? 50,\n http: options.breadcrumbs?.http ?? true,\n console: options.breadcrumbs?.console ?? true,\n },\n\n beforeSend: options.beforeSend,\n ignoreErrors: options.ignoreErrors || [],\n maxRetries: options.maxRetries ?? 3,\n timeout: options.timeout ?? 5000,\n debug: options.debug ?? false,\n hmacSecret: options.hmacSecret,\n exitOnUncaughtException: options.exitOnUncaughtException ?? true,\n };\n}\n\n/**\n * Check if a string matches any pattern\n */\nexport function matchesPattern(str: string, patterns: (string | RegExp)[]): boolean {\n return patterns.some((pattern) => {\n if (typeof pattern === 'string') {\n return str.includes(pattern);\n }\n return pattern.test(str);\n });\n}\n","/**\n * Stack trace parsing utilities for Node.js\n */\n\nimport * as path from 'node:path';\nimport type { StackFrame } from '../types.js';\n\n/**\n * Parse a V8 stack trace string into structured frames\n */\nexport function parseStackTrace(stack: string | undefined): StackFrame[] {\n if (!stack) {\n return [];\n }\n\n const frames: StackFrame[] = [];\n const lines = stack.split('\\n');\n\n for (const line of lines) {\n const frame = parseStackLine(line);\n if (frame) {\n frames.push(frame);\n }\n }\n\n return frames;\n}\n\n/**\n * Parse a single stack line\n * V8 formats:\n * - \" at functionName (file:line:col)\"\n * - \" at file:line:col\"\n * - \" at async functionName (file:line:col)\"\n * - \" at Object.<anonymous> (file:line:col)\"\n */\nfunction parseStackLine(line: string): StackFrame | null {\n // Skip non-stack lines\n if (!line.trim().startsWith('at ')) {\n return null;\n }\n\n // Remove \"at \" prefix and trim\n const content = line.replace(/^\\s*at\\s+/, '').trim();\n\n // Pattern: \"async? functionName (file:line:col)\"\n const withFunctionMatch = content.match(\n /^(?:async\\s+)?(.+?)\\s+\\((.+?):(\\d+):(\\d+)\\)$/\n );\n\n if (withFunctionMatch) {\n const [, fn, file, lineNo, colNo] = withFunctionMatch;\n return createFrame(fn, file, lineNo, colNo);\n }\n\n // Pattern: \"file:line:col\" (anonymous)\n const anonymousMatch = content.match(/^(.+?):(\\d+):(\\d+)$/);\n\n if (anonymousMatch) {\n const [, file, lineNo, colNo] = anonymousMatch;\n return createFrame(undefined, file, lineNo, colNo);\n }\n\n // Pattern: \"native code\" or other\n return null;\n}\n\n/**\n * Create a stack frame object\n */\nfunction createFrame(\n fn: string | undefined,\n file: string | undefined,\n lineNo: string | undefined,\n colNo: string | undefined\n): StackFrame {\n const frame: StackFrame = {};\n\n if (fn) {\n // Clean up function name\n frame.function = cleanFunctionName(fn);\n }\n\n if (file) {\n frame.filename = file;\n frame.abs_path = path.isAbsolute(file) ? file : undefined;\n\n // Determine if in_app (not from node_modules)\n frame.in_app = !file.includes('node_modules') && !file.startsWith('node:');\n\n // Extract module name from path\n if (frame.in_app && file.includes('/')) {\n const parts = file.split('/');\n frame.module = parts[parts.length - 1]?.replace(/\\.[^/.]+$/, '');\n }\n }\n\n if (lineNo) {\n frame.lineno = parseInt(lineNo, 10);\n }\n\n if (colNo) {\n frame.colno = parseInt(colNo, 10);\n }\n\n return frame;\n}\n\n/**\n * Clean up function name\n */\nfunction cleanFunctionName(name: string): string {\n // Remove \"Object.\" prefix\n name = name.replace(/^Object\\./, '');\n\n // Remove \"Module.\" prefix\n name = name.replace(/^Module\\./, '');\n\n // Clean up \"<anonymous>\"\n if (name === '<anonymous>') {\n return '(anonymous)';\n }\n\n return name;\n}\n\n/**\n * Get error name from an error-like object\n */\nexport function getErrorName(error: unknown): string {\n if (error instanceof Error) {\n return error.name || error.constructor.name;\n }\n\n if (typeof error === 'object' && error !== null) {\n const obj = error as Record<string, unknown>;\n if (typeof obj['name'] === 'string') {\n return obj['name'];\n }\n }\n\n return 'Error';\n}\n\n/**\n * Get error message from an error-like object\n */\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (typeof error === 'object' && error !== null) {\n const obj = error as Record<string, unknown>;\n if (typeof obj['message'] === 'string') {\n return obj['message'];\n }\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n }\n\n return String(error);\n}\n\n/**\n * Get error stack from an error-like object\n */\nexport function getErrorStack(error: unknown): string | undefined {\n if (error instanceof Error) {\n return error.stack;\n }\n\n if (typeof error === 'object' && error !== null) {\n const obj = error as Record<string, unknown>;\n if (typeof obj['stack'] === 'string') {\n return obj['stack'];\n }\n }\n\n return undefined;\n}\n","/**\n * UUID generation utilities\n */\n\nimport * as crypto from 'node:crypto';\n\n/**\n * Generate a UUID v4\n */\nexport function generateUuid(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Generate a short ID (8 chars)\n */\nexport function generateShortId(): string {\n return crypto.randomBytes(4).toString('hex');\n}\n\n/**\n * Generate a transaction ID\n */\nexport function generateTransactionId(): string {\n return `txn_${crypto.randomBytes(12).toString('hex')}`;\n}\n","/**\n * Process context collector\n */\n\nimport type { ProcessContext as ProcessContextType } from '../types.js';\n\n/**\n * Collect current process context\n */\nexport function collectProcessContext(): ProcessContextType {\n const memoryUsage = process.memoryUsage();\n const cpuUsage = process.cpuUsage();\n\n return {\n pid: process.pid,\n ppid: process.ppid,\n uptime: process.uptime(),\n memory: {\n rss: memoryUsage.rss,\n heapTotal: memoryUsage.heapTotal,\n heapUsed: memoryUsage.heapUsed,\n external: memoryUsage.external,\n arrayBuffers: memoryUsage.arrayBuffers,\n },\n cpu: {\n user: cpuUsage.user,\n system: cpuUsage.system,\n },\n };\n}\n","/**\n * OS context collector\n */\n\nimport * as os from 'node:os';\nimport type { OsContext as OsContextType } from '../types.js';\n\n/**\n * Collect OS context (cached - doesn't change during runtime)\n */\nlet cachedOsContext: OsContextType | null = null;\n\nexport function collectOsContext(): OsContextType {\n if (cachedOsContext) {\n return cachedOsContext;\n }\n\n cachedOsContext = {\n name: os.platform(),\n version: os.release(),\n arch: os.arch(),\n kernel_version: os.version(),\n };\n\n return cachedOsContext;\n}\n\n/**\n * Reset cached OS context (useful for tests)\n */\nexport function resetOsContext(): void {\n cachedOsContext = null;\n}\n","/**\n * Runtime context collector\n */\n\nimport type { RuntimeContext as RuntimeContextType } from '../types.js';\n\n/**\n * Collect runtime context (cached)\n */\nlet cachedRuntimeContext: RuntimeContextType | null = null;\n\nexport function collectRuntimeContext(): RuntimeContextType {\n if (cachedRuntimeContext) {\n return cachedRuntimeContext;\n }\n\n cachedRuntimeContext = {\n name: 'node',\n version: process.version,\n };\n\n return cachedRuntimeContext;\n}\n\n/**\n * Reset cached runtime context (useful for tests)\n */\nexport function resetRuntimeContext(): void {\n cachedRuntimeContext = null;\n}\n","/**\n * Server context collector\n */\n\nimport * as os from 'node:os';\nimport type { ServerContext as ServerContextType } from '../types.js';\n\n/**\n * Server context singleton\n */\nlet serverContext: ServerContextType = {\n name: undefined,\n hostname: os.hostname(),\n};\n\n/**\n * Get current server context\n */\nexport function getServerContext(): ServerContextType {\n return serverContext;\n}\n\n/**\n * Set server name\n */\nexport function setServerName(name: string): void {\n serverContext = {\n ...serverContext,\n name,\n };\n}\n\n/**\n * Reset server context (useful for tests)\n */\nexport function resetServerContext(): void {\n serverContext = {\n name: undefined,\n hostname: os.hostname(),\n };\n}\n","/**\n * User context manager for @error-explorer/node SDK\n */\n\nimport type { UserContext } from '../types.js';\n\n/**\n * Global user context manager\n */\nclass UserContextManager {\n private user: UserContext | null = null;\n\n /**\n * Set user context\n */\n setUser(user: UserContext | null): void {\n this.user = user;\n }\n\n /**\n * Get current user context\n */\n getUser(): UserContext | null {\n return this.user;\n }\n\n /**\n * Clear user context\n */\n clearUser(): void {\n this.user = null;\n }\n\n /**\n * Reset manager state\n */\n reset(): void {\n this.user = null;\n }\n}\n\n// Singleton instance\nlet userContextManager: UserContextManager | null = null;\n\nexport function getUserContextManager(): UserContextManager {\n if (!userContextManager) {\n userContextManager = new UserContextManager();\n }\n return userContextManager;\n}\n\nexport function resetUserContextManager(): void {\n if (userContextManager) {\n userContextManager.reset();\n }\n userContextManager = null;\n}\n","/**\n * Request context extractor\n */\n\nimport type { IncomingMessage } from 'node:http';\nimport type { RequestContext, ExpressRequest } from '../types.js';\n\n/**\n * Extract request context from Node.js IncomingMessage or Express request\n */\nexport function extractRequestContext(\n req: IncomingMessage | ExpressRequest\n): RequestContext {\n const headers: Record<string, string | string[] | undefined> = {};\n\n // Copy headers, filtering out sensitive ones\n const sensitiveHeaders = ['authorization', 'cookie', 'x-api-key', 'x-auth-token'];\n for (const [key, value] of Object.entries(req.headers)) {\n const lowerKey = key.toLowerCase();\n if (!sensitiveHeaders.includes(lowerKey)) {\n headers[key] = value;\n } else {\n headers[key] = '[Filtered]';\n }\n }\n\n const context: RequestContext = {\n method: req.method,\n headers,\n url: getFullUrl(req),\n };\n\n // Add query string\n const url = req.url || '';\n const queryIndex = url.indexOf('?');\n if (queryIndex !== -1) {\n context.query_string = url.substring(queryIndex + 1);\n }\n\n // Express-specific data\n const expressReq = req as ExpressRequest;\n if (expressReq.body !== undefined) {\n context.data = sanitizeBody(expressReq.body);\n }\n\n // Add cookies if available (from cookie-parser middleware)\n if (expressReq.cookies) {\n context.cookies = sanitizeCookies(expressReq.cookies);\n }\n\n return context;\n}\n\n/**\n * Get full URL from request\n */\nfunction getFullUrl(req: IncomingMessage | ExpressRequest): string {\n const expressReq = req as ExpressRequest;\n\n // Use originalUrl if available (Express)\n const path = expressReq.originalUrl || req.url || '/';\n\n // Try to construct full URL\n const protocol = (req.headers['x-forwarded-proto'] as string) || 'http';\n const host = req.headers.host || 'localhost';\n\n return `${protocol}://${host}${path}`;\n}\n\n/**\n * Sanitize request body (remove sensitive fields)\n */\nfunction sanitizeBody(body: unknown): unknown {\n if (!body || typeof body !== 'object') {\n return body;\n }\n\n const sensitiveKeys = ['password', 'secret', 'token', 'api_key', 'apiKey', 'credit_card', 'creditCard', 'cvv', 'ssn'];\n const sanitized: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(body as Record<string, unknown>)) {\n const lowerKey = key.toLowerCase();\n if (sensitiveKeys.some((sk) => lowerKey.includes(sk))) {\n sanitized[key] = '[Filtered]';\n } else if (typeof value === 'object' && value !== null) {\n sanitized[key] = sanitizeBody(value);\n } else {\n sanitized[key] = value;\n }\n }\n\n return sanitized;\n}\n\n/**\n * Sanitize cookies (remove sensitive ones)\n */\nfunction sanitizeCookies(cookies: Record<string, string>): Record<string, string> {\n const sensitiveNames = ['session', 'sess', 'token', 'auth', 'jwt', 'sid'];\n const sanitized: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(cookies)) {\n const lowerKey = key.toLowerCase();\n if (sensitiveNames.some((sn) => lowerKey.includes(sn))) {\n sanitized[key] = '[Filtered]';\n } else {\n sanitized[key] = value;\n }\n }\n\n return sanitized;\n}\n","/**\n * Breadcrumb manager for @error-explorer/node SDK\n */\n\nimport type { Breadcrumb, InternalBreadcrumb, ResolvedConfig } from '../types.js';\n\n/**\n * Breadcrumb manager singleton\n */\nclass BreadcrumbManager {\n private breadcrumbs: InternalBreadcrumb[] = [];\n private maxBreadcrumbs: number = 50;\n\n /**\n * Initialize with configuration\n */\n init(config: ResolvedConfig): void {\n this.maxBreadcrumbs = config.breadcrumbs.maxBreadcrumbs;\n this.breadcrumbs = [];\n }\n\n /**\n * Add a breadcrumb\n */\n add(breadcrumb: Breadcrumb): void {\n const internal: InternalBreadcrumb = {\n ...breadcrumb,\n timestamp: breadcrumb.timestamp ?? Date.now(),\n };\n\n this.breadcrumbs.push(internal);\n\n // Trim to max size\n if (this.breadcrumbs.length > this.maxBreadcrumbs) {\n this.breadcrumbs = this.breadcrumbs.slice(-this.maxBreadcrumbs);\n }\n }\n\n /**\n * Get all breadcrumbs (oldest first)\n */\n getAll(): InternalBreadcrumb[] {\n return [...this.breadcrumbs];\n }\n\n /**\n * Get the last N breadcrumbs\n */\n getLast(count: number): InternalBreadcrumb[] {\n return this.breadcrumbs.slice(-count);\n }\n\n /**\n * Clear all breadcrumbs\n */\n clear(): void {\n this.breadcrumbs = [];\n }\n\n /**\n * Reset manager\n */\n reset(): void {\n this.breadcrumbs = [];\n this.maxBreadcrumbs = 50;\n }\n}\n\n// Singleton instance\nlet breadcrumbManager: BreadcrumbManager | null = null;\n\nexport function initBreadcrumbManager(config: ResolvedConfig): BreadcrumbManager {\n if (!breadcrumbManager) {\n breadcrumbManager = new BreadcrumbManager();\n }\n breadcrumbManager.init(config);\n return breadcrumbManager;\n}\n\nexport function getBreadcrumbManager(): BreadcrumbManager | null {\n return breadcrumbManager;\n}\n\nexport function resetBreadcrumbManager(): void {\n if (breadcrumbManager) {\n breadcrumbManager.reset();\n }\n breadcrumbManager = null;\n}\n","/**\n * Console breadcrumb tracker\n * Intercepts console methods to create breadcrumbs\n */\n\nimport type { BreadcrumbLevel } from '../types.js';\nimport { getBreadcrumbManager } from './BreadcrumbManager.js';\n\ntype ConsoleMethod = 'log' | 'info' | 'warn' | 'error' | 'debug';\n\ninterface OriginalConsoleMethods {\n log: typeof console.log;\n info: typeof console.info;\n warn: typeof console.warn;\n error: typeof console.error;\n debug: typeof console.debug;\n}\n\nclass ConsoleTracker {\n private originalMethods: OriginalConsoleMethods | null = null;\n private started = false;\n\n /**\n * Start tracking console calls\n */\n start(): void {\n if (this.started) {\n return;\n }\n\n // Store original methods\n this.originalMethods = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console),\n };\n\n // Wrap each method\n const methods: ConsoleMethod[] = ['log', 'info', 'warn', 'error', 'debug'];\n for (const method of methods) {\n this.wrapConsoleMethod(method);\n }\n\n this.started = true;\n }\n\n /**\n * Stop tracking console calls\n */\n stop(): void {\n if (!this.started || !this.originalMethods) {\n return;\n }\n\n // Restore original methods\n console.log = this.originalMethods.log;\n console.info = this.originalMethods.info;\n console.warn = this.originalMethods.warn;\n console.error = this.originalMethods.error;\n console.debug = this.originalMethods.debug;\n\n this.originalMethods = null;\n this.started = false;\n }\n\n /**\n * Wrap a console method to add breadcrumbs\n */\n private wrapConsoleMethod(method: ConsoleMethod): void {\n const original = this.originalMethods![method];\n const self = this;\n\n console[method] = function (...args: unknown[]): void {\n // Create breadcrumb\n self.addBreadcrumb(method, args);\n\n // Call original\n original(...args);\n };\n }\n\n /**\n * Add a breadcrumb for a console call\n */\n private addBreadcrumb(method: ConsoleMethod, args: unknown[]): void {\n const manager = getBreadcrumbManager();\n if (!manager) {\n return;\n }\n\n const level = this.methodToLevel(method);\n const message = this.formatArgs(args);\n\n manager.add({\n type: 'console',\n category: `console.${method}`,\n message,\n level,\n data: {\n arguments: this.serializeArgs(args),\n },\n });\n }\n\n /**\n * Map console method to breadcrumb level\n */\n private methodToLevel(method: ConsoleMethod): BreadcrumbLevel {\n switch (method) {\n case 'error':\n return 'error';\n case 'warn':\n return 'warning';\n case 'debug':\n return 'debug';\n default:\n return 'info';\n }\n }\n\n /**\n * Format arguments into a string message\n */\n private formatArgs(args: unknown[]): string {\n return args\n .map((arg) => {\n if (typeof arg === 'string') {\n return arg;\n }\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n })\n .join(' ')\n .substring(0, 500); // Limit length\n }\n\n /**\n * Serialize arguments for data storage\n */\n private serializeArgs(args: unknown[]): unknown[] {\n return args.map((arg) => {\n if (typeof arg === 'string' || typeof arg === 'number' || typeof arg === 'boolean') {\n return arg;\n }\n if (arg === null || arg === undefined) {\n return arg;\n }\n if (arg instanceof Error) {\n return {\n name: arg.name,\n message: arg.message,\n };\n }\n try {\n // Attempt to serialize, limit depth\n return JSON.parse(JSON.stringify(arg));\n } catch {\n return '[Unserializable]';\n }\n });\n }\n\n /**\n * Reset tracker state\n */\n reset(): void {\n this.stop();\n }\n}\n\n// Singleton instance\nlet consoleTracker: ConsoleTracker | null = null;\n\nexport function getConsoleTracker(): ConsoleTracker {\n if (!consoleTracker) {\n consoleTracker = new ConsoleTracker();\n }\n return consoleTracker;\n}\n\nexport function resetConsoleTracker(): void {\n if (consoleTracker) {\n consoleTracker.reset();\n }\n consoleTracker = null;\n}\n","/**\n * HTTP breadcrumb tracker\n * Tracks outgoing HTTP requests (http.request, https.request)\n *\n * Note: In some environments (like test runners), we cannot patch http modules.\n * The tracker gracefully handles this case.\n */\n\nimport * as http from 'node:http';\nimport * as https from 'node:https';\nimport { getBreadcrumbManager } from './BreadcrumbManager.js';\n\ntype HttpModule = typeof http | typeof https;\ntype RequestOptions = http.RequestOptions | string | URL;\n\nclass HttpTracker {\n private originalHttpRequest: typeof http.request | null = null;\n private originalHttpsRequest: typeof https.request | null = null;\n private started = false;\n private patchFailed = false;\n\n /**\n * Start tracking HTTP requests\n */\n start(): void {\n if (this.started || this.patchFailed) {\n return;\n }\n\n try {\n // Store originals\n this.originalHttpRequest = http.request;\n this.originalHttpsRequest = https.request;\n\n // Wrap http.request\n this.wrapRequestMethod(http, 'http');\n\n // Wrap https.request\n this.wrapRequestMethod(https, 'https');\n\n this.started = true;\n } catch {\n // In some environments (like test runners), patching fails\n // This is not critical, just disable HTTP tracking\n this.patchFailed = true;\n this.originalHttpRequest = null;\n this.originalHttpsRequest = null;\n }\n }\n\n /**\n * Stop tracking HTTP requests\n */\n stop(): void {\n if (!this.started) {\n return;\n }\n\n try {\n // Restore originals\n if (this.originalHttpRequest) {\n Object.defineProperty(http, 'request', {\n value: this.originalHttpRequest,\n writable: true,\n configurable: true,\n });\n }\n if (this.originalHttpsRequest) {\n Object.defineProperty(https, 'request', {\n value: this.originalHttpsRequest,\n writable: true,\n configurable: true,\n });\n }\n } catch {\n // Ignore restore failures\n }\n\n this.originalHttpRequest = null;\n this.originalHttpsRequest = null;\n this.started = false;\n }\n\n /**\n * Wrap a module's request method\n */\n private wrapRequestMethod(mod: HttpModule, _protocol: 'http' | 'https'): void {\n const originalRequest = mod.request.bind(mod);\n const self = this;\n\n const wrappedRequest = function (\n ...args: Parameters<typeof http.request>\n ): http.ClientRequest {\n const [urlOrOptions, optionsOrCallback, maybeCallback] = args;\n\n // Parse URL and options\n const { url, method, hostname } = self.parseRequestArgs(\n urlOrOptions,\n optionsOrCallback\n );\n\n const startTime = Date.now();\n\n // Call original\n const req = originalRequest.apply(mod, args);\n\n // Track response\n req.on('response', (res) => {\n const duration = Date.now() - startTime;\n self.addBreadcrumb(method, url, hostname, res.statusCode, duration);\n });\n\n // Track errors\n req.on('error', (error) => {\n const duration = Date.now() - startTime;\n self.addErrorBreadcrumb(method, url, hostname, error, duration);\n });\n\n return req;\n };\n\n // Use Object.defineProperty to avoid strict mode issues\n Object.defineProperty(mod, 'request', {\n value: wrappedRequest,\n writable: true,\n configurable: true,\n });\n }\n\n /**\n * Parse request arguments to extract URL info\n */\n private parseRequestArgs(\n urlOrOptions: RequestOptions,\n optionsOrCallback?: http.RequestOptions | ((res: http.IncomingMessage) => void)\n ): { url: string; method: string; hostname: string } {\n let url = '';\n let method = 'GET';\n let hostname = '';\n\n if (typeof urlOrOptions === 'string') {\n url = urlOrOptions;\n try {\n const parsed = new URL(urlOrOptions);\n hostname = parsed.hostname;\n } catch {\n hostname = urlOrOptions;\n }\n } else if (urlOrOptions instanceof URL) {\n url = urlOrOptions.toString();\n hostname = urlOrOptions.hostname;\n } else if (typeof urlOrOptions === 'object') {\n const opts = urlOrOptions;\n hostname = opts.hostname || opts.host || 'localhost';\n const port = opts.port ? `:${opts.port}` : '';\n const path = opts.path || '/';\n const protocol = opts.protocol || 'http:';\n url = `${protocol}//${hostname}${port}${path}`;\n method = opts.method || 'GET';\n }\n\n // Check if second arg is options (not callback)\n if (\n optionsOrCallback &&\n typeof optionsOrCallback === 'object' &&\n optionsOrCallback.method\n ) {\n method = optionsOrCallback.method;\n }\n\n return { url, method: method.toUpperCase(), hostname };\n }\n\n /**\n * Add a breadcrumb for a successful HTTP request\n */\n private addBreadcrumb(\n method: string,\n url: string,\n hostname: string,\n statusCode: number | undefined,\n duration: number\n ): void {\n const manager = getBreadcrumbManager();\n if (!manager) {\n return;\n }\n\n manager.add({\n type: 'http',\n category: 'http.client',\n message: `${method} ${url}`,\n level: statusCode && statusCode >= 400 ? 'warning' : 'info',\n data: {\n method,\n url: this.truncateUrl(url),\n hostname,\n status_code: statusCode,\n duration_ms: duration,\n },\n });\n }\n\n /**\n * Add a breadcrumb for a failed HTTP request\n */\n private addErrorBreadcrumb(\n method: string,\n url: string,\n hostname: string,\n error: Error,\n duration: number\n ): void {\n const manager = getBreadcrumbManager();\n if (!manager) {\n return;\n }\n\n manager.add({\n type: 'http',\n category: 'http.client',\n message: `${method} ${url} failed: ${error.message}`,\n level: 'error',\n data: {\n method,\n url: this.truncateUrl(url),\n hostname,\n error: error.message,\n duration_ms: duration,\n },\n });\n }\n\n /**\n * Truncate URL for storage\n */\n private truncateUrl(url: string): string {\n const maxLength = 200;\n if (url.length <= maxLength) {\n return url;\n }\n return url.substring(0, maxLength) + '...';\n }\n\n /**\n * Reset tracker state\n */\n reset(): void {\n this.stop();\n this.patchFailed = false;\n }\n}\n\n// Singleton instance\nlet httpTracker: HttpTracker | null = null;\n\nexport function getHttpTracker(): HttpTracker {\n if (!httpTracker) {\n httpTracker = new HttpTracker();\n }\n return httpTracker;\n}\n\nexport function resetHttpTracker(): void {\n if (httpTracker) {\n httpTracker.reset();\n }\n httpTracker = null;\n}\n","/**\n * Process-level error capture\n * Handles uncaughtException and unhandledRejection\n */\n\nexport interface CapturedError {\n error: Error;\n message: string;\n type: 'uncaughtException' | 'unhandledRejection';\n severity: 'critical' | 'error';\n promise?: Promise<unknown>;\n}\n\ntype CaptureHandler = (captured: CapturedError) => void;\n\nclass ProcessCapture {\n private handler: CaptureHandler | null = null;\n private uncaughtHandler: ((error: Error) => void) | null = null;\n private rejectionHandler: ((reason: unknown, promise: Promise<unknown>) => void) | null = null;\n private started = false;\n private exitOnUncaught = true;\n\n /**\n * Start capturing process errors\n */\n start(handler: CaptureHandler, exitOnUncaught = true): void {\n if (this.started) {\n return;\n }\n\n this.handler = handler;\n this.exitOnUncaught = exitOnUncaught;\n\n // Create bound handlers\n this.uncaughtHandler = this.handleUncaughtException.bind(this);\n this.rejectionHandler = this.handleUnhandledRejection.bind(this);\n\n // Register handlers\n process.on('uncaughtException', this.uncaughtHandler);\n process.on('unhandledRejection', this.rejectionHandler);\n\n this.started = true;\n }\n\n /**\n * Start only uncaughtException capture\n */\n startUncaughtException(handler: CaptureHandler, exitOnUncaught = true): void {\n if (this.uncaughtHandler) {\n return;\n }\n\n this.handler = handler;\n this.exitOnUncaught = exitOnUncaught;\n this.uncaughtHandler = this.handleUncaughtException.bind(this);\n process.on('uncaughtException', this.uncaughtHandler);\n }\n\n /**\n * Start only unhandledRejection capture\n */\n startUnhandledRejection(handler: CaptureHandler): void {\n if (this.rejectionHandler) {\n return;\n }\n\n this.handler = handler;\n this.rejectionHandler = this.handleUnhandledRejection.bind(this);\n process.on('unhandledRejection', this.rejectionHandler);\n }\n\n /**\n * Stop capturing process errors\n */\n stop(): void {\n if (this.uncaughtHandler) {\n process.off('uncaughtException', this.uncaughtHandler);\n this.uncaughtHandler = null;\n }\n\n if (this.rejectionHandler) {\n process.off('unhandledRejection', this.rejectionHandler);\n this.rejectionHandler = null;\n }\n\n this.handler = null;\n this.started = false;\n }\n\n /**\n * Handle uncaught exception\n */\n private handleUncaughtException(error: Error): void {\n if (!this.handler) {\n return;\n }\n\n const captured: CapturedError = {\n error,\n message: error.message,\n type: 'uncaughtException',\n severity: 'critical',\n };\n\n // Call handler synchronously\n try {\n this.handler(captured);\n } catch {\n // Ignore errors in handler to avoid infinite loop\n }\n\n // Exit process if configured (recommended for uncaughtException)\n if (this.exitOnUncaught) {\n // Allow time for async operations to complete\n setTimeout(() => {\n process.exit(1);\n }, 100);\n }\n }\n\n /**\n * Handle unhandled rejection\n */\n private handleUnhandledRejection(reason: unknown, promise: Promise<unknown>): void {\n if (!this.handler) {\n return;\n }\n\n // Convert reason to Error\n const error = reason instanceof Error ? reason : new Error(String(reason));\n\n const captured: CapturedError = {\n error,\n message: error.message,\n type: 'unhandledRejection',\n severity: 'error',\n promise,\n };\n\n try {\n this.handler(captured);\n } catch {\n // Ignore errors in handler\n }\n }\n\n /**\n * Reset capture state\n */\n reset(): void {\n this.stop();\n }\n}\n\n// Singleton instance\nlet processCapture: ProcessCapture | null = null;\n\nexport function getProcessCapture(): ProcessCapture {\n if (!processCapture) {\n processCapture = new ProcessCapture();\n }\n return processCapture;\n}\n\nexport function resetProcessCapture(): void {\n if (processCapture) {\n processCapture.reset();\n }\n processCapture = null;\n}\n","/**\n * Console error capture\n * Captures console.error calls as errors (optional)\n */\n\nimport type { CapturedError } from './ProcessCapture.js';\n\ntype CaptureHandler = (captured: CapturedError) => void;\n\nclass ConsoleCapture {\n private handler: CaptureHandler | null = null;\n private originalConsoleError: typeof console.error | null = null;\n private started = false;\n\n /**\n * Start capturing console.error calls\n */\n start(handler: CaptureHandler): void {\n if (this.started) {\n return;\n }\n\n this.handler = handler;\n this.originalConsoleError = console.error.bind(console);\n\n const self = this;\n console.error = function (...args: unknown[]): void {\n // Call original first\n self.originalConsoleError!(...args);\n\n // Then capture\n self.handleConsoleError(args);\n };\n\n this.started = true;\n }\n\n /**\n * Stop capturing console.error\n */\n stop(): void {\n if (!this.started || !this.originalConsoleError) {\n return;\n }\n\n console.error = this.originalConsoleError;\n this.originalConsoleError = null;\n this.handler = null;\n this.started = false;\n }\n\n /**\n * Handle console.error call\n */\n private handleConsoleError(args: unknown[]): void {\n if (!this.handler) {\n return;\n }\n\n // Extract error or create one from arguments\n let error: Error;\n let message: string;\n\n const firstArg = args[0];\n if (firstArg instanceof Error) {\n error = firstArg;\n message = error.message;\n } else {\n message = args\n .map((arg) => {\n if (typeof arg === 'string') return arg;\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n })\n .join(' ');\n error = new Error(message);\n }\n\n const captured: CapturedError = {\n error,\n message,\n type: 'unhandledRejection', // Use this type for console errors\n severity: 'error',\n };\n\n try {\n this.handler(captured);\n } catch {\n // Ignore handler errors\n }\n }\n\n /**\n * Reset capture state\n */\n reset(): void {\n this.stop();\n }\n}\n\n// Singleton instance\nlet consoleCapture: ConsoleCapture | null = null;\n\nexport function getConsoleCapture(): ConsoleCapture {\n if (!consoleCapture) {\n consoleCapture = new ConsoleCapture();\n }\n return consoleCapture;\n}\n\nexport function resetConsoleCapture(): void {\n if (consoleCapture) {\n consoleCapture.reset();\n }\n consoleCapture = null;\n}\n","/**\n * HMAC signing for secure webhook requests\n */\n\nimport * as crypto from 'node:crypto';\n\nexport class HmacSigner {\n private secret: string;\n\n constructor(secret: string) {\n this.secret = secret;\n }\n\n /**\n * Sign a payload with HMAC-SHA256\n * @param payload - The JSON payload string to sign\n * @param timestamp - Unix timestamp (defaults to current time)\n * @returns Hex-encoded signature\n */\n sign(payload: string, timestamp?: number): string {\n const ts = timestamp ?? Math.floor(Date.now() / 1000);\n const signedPayload = `${ts}.${payload}`;\n\n const hmac = crypto.createHmac('sha256', this.secret);\n hmac.update(signedPayload);\n\n return hmac.digest('hex');\n }\n\n /**\n * Build headers for a signed request\n * @param payload - The JSON payload string\n * @returns Headers object with signature and timestamp\n */\n buildHeaders(payload: string): Record<string, string> {\n const timestamp = Math.floor(Date.now() / 1000);\n const signature = this.sign(payload, timestamp);\n\n return {\n 'X-Webhook-Signature': signature,\n 'X-Webhook-Timestamp': String(timestamp),\n };\n }\n\n /**\n * Verify a signature (useful for testing)\n * @param payload - The payload that was signed\n * @param signature - The signature to verify\n * @param timestamp - The timestamp used in signing\n * @param maxAge - Maximum age in seconds (default: 5 minutes)\n */\n verify(payload: string, signature: string, timestamp: number, maxAge = 300): boolean {\n // Check timestamp age\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > maxAge) {\n return false;\n }\n\n // Calculate expected signature\n const expected = this.sign(payload, timestamp);\n\n // Compare using timing-safe comparison\n return crypto.timingSafeEqual(\n Buffer.from(signature, 'hex'),\n Buffer.from(expected, 'hex')\n );\n }\n}\n","/**\n * HTTP transport for sending events to Error Explorer\n */\n\nimport * as http from 'node:http';\nimport * as https from 'node:https';\nimport type { TransportOptions, ErrorEvent } from '../types.js';\nimport { HmacSigner } from '../security/HmacSigner.js';\n\nexport class HttpTransport {\n private endpoint: string;\n private token: string;\n private timeout: number;\n private maxRetries: number;\n private hmacSigner: HmacSigner | null = null;\n private debug: boolean;\n\n constructor(options: TransportOptions) {\n this.endpoint = options.endpoint;\n this.token = options.token;\n this.timeout = options.timeout;\n this.maxRetries = options.maxRetries;\n this.debug = options.debug ?? false;\n\n if (options.hmacSecret) {\n this.hmacSigner = new HmacSigner(options.hmacSecret);\n }\n }\n\n /**\n * Send an event to the Error Explorer API\n */\n async send(event: ErrorEvent): Promise<boolean> {\n const payload = JSON.stringify(event);\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n try {\n const success = await this.doSend(payload);\n if (success) {\n if (this.debug) {\n console.log('[ErrorExplorer] Event sent successfully');\n }\n return true;\n }\n } catch (error) {\n lastError = error as Error;\n if (this.debug) {\n console.error(`[ErrorExplorer] Send attempt ${attempt + 1} failed:`, error);\n }\n\n // Exponential backoff\n if (attempt < this.maxRetries) {\n await this.sleep(Math.pow(2, attempt) * 100);\n }\n }\n }\n\n if (this.debug && lastError) {\n console.error('[ErrorExplorer] All send attempts failed:', lastError);\n }\n\n return false;\n }\n\n /**\n * Perform the actual HTTP request\n */\n private doSend(payload: string): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const url = new URL(this.endpoint);\n const isHttps = url.protocol === 'https:';\n const transport = isHttps ? https : http;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Content-Length': String(Buffer.byteLength(payload)),\n 'X-Webhook-Token': this.token,\n 'User-Agent': '@error-explorer/node/1.0.0',\n // Include Host header for proper virtual host routing\n 'Host': url.host,\n };\n\n // Add HMAC signature if configured\n if (this.hmacSigner) {\n const hmacHeaders = this.hmacSigner.buildHeaders(payload);\n Object.assign(headers, hmacHeaders);\n }\n\n const options: http.RequestOptions = {\n method: 'POST',\n hostname: url.hostname,\n port: url.port || (isHttps ? 443 : 80),\n path: url.pathname,\n headers,\n timeout: this.timeout,\n };\n\n const req = transport.request(options, (res) => {\n let data = '';\n\n res.on('data', (chunk) => {\n data += chunk;\n });\n\n res.on('end', () => {\n const statusCode = res.statusCode || 0;\n\n if (statusCode >= 200 && statusCode < 300) {\n resolve(true);\n } else if (statusCode === 429) {\n // Rate limited\n const retryAfter = res.headers['retry-after'];\n reject(new Error(`Rate limited. Retry after: ${retryAfter}`));\n } else if (statusCode >= 500) {\n // Server error - retry\n reject(new Error(`Server error: ${statusCode}`));\n } else {\n // Client error - don't retry\n if (this.debug) {\n console.error(`[ErrorExplorer] Client error ${statusCode}:`, data);\n }\n resolve(false);\n }\n });\n });\n\n req.on('error', (error) => {\n reject(error);\n });\n\n req.on('timeout', () => {\n req.destroy();\n reject(new Error('Request timeout'));\n });\n\n req.write(payload);\n req.end();\n });\n }\n\n /**\n * Send synchronously (blocking) - for use in exit handlers\n */\n sendSync(event: ErrorEvent): void {\n // In Node.js, we can't truly send synchronously\n // But we can use a sync-rpc pattern or just fire and forget\n // For critical errors, we'll use a best-effort approach\n this.send(event).catch((err) => {\n if (this.debug) {\n console.error('[ErrorExplorer] Sync send failed:', err);\n }\n });\n }\n\n /**\n * Sleep for a given duration\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Main ErrorExplorer client for Node.js\n */\n\nimport type {\n InitOptions,\n ResolvedConfig,\n Breadcrumb,\n UserContext,\n CaptureContext,\n SeverityLevel,\n ErrorEvent,\n} from './types.js';\nimport { resolveConfig, matchesPattern } from './config/Config.js';\nimport { parseStackTrace, getErrorName, getErrorMessage, getErrorStack } from './utils/stacktrace.js';\nimport { generateUuid } from './utils/uuid.js';\n\n// Context collectors\nimport { collectProcessContext } from './context/ProcessContext.js';\nimport { collectOsContext, resetOsContext } from './context/OsContext.js';\nimport { collectRuntimeContext, resetRuntimeContext } from './context/RuntimeContext.js';\nimport { getServerContext, setServerName, resetServerContext } from './context/ServerContext.js';\nimport { getUserContextManager, resetUserContextManager } from './context/UserContext.js';\nimport { extractRequestContext } from './context/RequestContext.js';\n\n// Breadcrumbs\nimport { initBreadcrumbManager, getBreadcrumbManager, resetBreadcrumbManager } from './breadcrumbs/BreadcrumbManager.js';\nimport { getConsoleTracker, resetConsoleTracker } from './breadcrumbs/ConsoleTracker.js';\nimport { getHttpTracker, resetHttpTracker } from './breadcrumbs/HttpTracker.js';\n\n// Capture\nimport type { CapturedError } from './capture/ProcessCapture.js';\nimport { getProcessCapture, resetProcessCapture } from './capture/ProcessCapture.js';\nimport { getConsoleCapture, resetConsoleCapture } from './capture/ConsoleCapture.js';\n\n// Transport\nimport { HttpTransport } from './transport/HttpTransport.js';\n\nconst SDK_NAME = '@error-explorer/node';\nconst SDK_VERSION = '1.0.0';\n\n/**\n * Main ErrorExplorer class - singleton pattern\n */\nclass ErrorExplorerClient {\n private config: ResolvedConfig | null = null;\n private transport: HttpTransport | null = null;\n private initialized = false;\n private tags: Record<string, string> = {};\n private extra: Record<string, unknown> = {};\n private contexts: Record<string, Record<string, unknown>> = {};\n\n /**\n * Initialize the SDK\n */\n init(options: InitOptions): void {\n if (this.initialized) {\n console.warn('[ErrorExplorer] Already initialized');\n return;\n }\n\n try {\n // Resolve configuration\n this.config = resolveConfig(options);\n\n // Set server name\n if (this.config.serverName) {\n setServerName(this.config.serverName);\n }\n\n // Initialize transport\n this.transport = new HttpTransport({\n endpoint: this.config.endpoint,\n token: this.config.token,\n timeout: this.config.timeout,\n maxRetries: this.config.maxRetries,\n hmacSecret: this.config.hmacSecret,\n debug: this.config.debug,\n });\n\n // Initialize breadcrumbs\n if (this.config.breadcrumbs.enabled) {\n initBreadcrumbManager(this.config);\n this.startBreadcrumbTrackers();\n }\n\n // Setup error captures\n if (this.config.autoCapture.uncaughtExceptions || this.config.autoCapture.unhandledRejections) {\n const processCapture = getProcessCapture();\n if (this.config.autoCapture.uncaughtExceptions) {\n processCapture.startUncaughtException(\n this.handleCapturedError.bind(this),\n this.config.exitOnUncaughtException\n );\n }\n if (this.config.autoCapture.unhandledRejections) {\n processCapture.startUnhandledRejection(this.handleCapturedError.bind(this));\n }\n }\n\n if (this.config.autoCapture.console) {\n getConsoleCapture().start(this.handleCapturedError.bind(this));\n }\n\n this.initialized = true;\n\n if (this.config.debug) {\n console.log('[ErrorExplorer] Initialized', {\n endpoint: this.config.endpoint,\n environment: this.config.environment,\n serverName: this.config.serverName,\n });\n }\n } catch (error) {\n console.error('[ErrorExplorer] Initialization failed:', error);\n throw error;\n }\n }\n\n /**\n * Check if SDK is initialized\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Set user context\n */\n setUser(user: UserContext | null): void {\n getUserContextManager().setUser(user);\n }\n\n /**\n * Clear user context\n */\n clearUser(): void {\n getUserContextManager().clearUser();\n }\n\n /**\n * Set a single tag\n */\n setTag(key: string, value: string): void {\n this.tags[key] = value;\n }\n\n /**\n * Set multiple tags\n */\n setTags(tags: Record<string, string>): void {\n this.tags = { ...this.tags, ...tags };\n }\n\n /**\n * Set extra data\n */\n setExtra(key: string, value: unknown): void {\n this.extra[key] = value;\n }\n\n /**\n * Set a named context\n */\n setContext(name: string, context: Record<string, unknown>): void {\n this.contexts[name] = context;\n }\n\n /**\n * Add a manual breadcrumb\n */\n addBreadcrumb(breadcrumb: Breadcrumb): void {\n const manager = getBreadcrumbManager();\n if (manager) {\n manager.add(breadcrumb);\n }\n }\n\n /**\n * Capture an exception manually\n */\n captureException(error: Error | unknown, context?: CaptureContext): string {\n if (!this.initialized || !this.config) {\n console.warn('[ErrorExplorer] Not initialized');\n return '';\n }\n\n const eventId = generateUuid();\n const event = this.buildEvent(error, context, 'error');\n this.processAndSend(event);\n return eventId;\n }\n\n /**\n * Capture a message manually\n */\n captureMessage(message: string, level: SeverityLevel = 'info'): string {\n if (!this.initialized || !this.config) {\n console.warn('[ErrorExplorer] Not initialized');\n return '';\n }\n\n const eventId = generateUuid();\n const event = this.buildEvent(new Error(message), undefined, level);\n event.exception_class = 'Message';\n this.processAndSend(event);\n return eventId;\n }\n\n /**\n * Flush all pending events (best effort)\n */\n async flush(timeout = 5000): Promise<boolean> {\n if (!this.initialized) {\n return false;\n }\n\n // In Node.js, we don't have an offline queue like the browser\n // Just wait a bit for any pending requests\n await new Promise((resolve) => setTimeout(resolve, Math.min(timeout, 100)));\n return true;\n }\n\n /**\n * Close the SDK and cleanup\n */\n async close(timeout = 5000): Promise<boolean> {\n if (!this.initialized) {\n return true;\n }\n\n // Flush pending events\n await this.flush(timeout);\n\n // Stop all trackers and captures\n this.stopAllTrackers();\n\n // Reset all singletons\n resetBreadcrumbManager();\n resetProcessCapture();\n resetConsoleCapture();\n resetConsoleTracker();\n resetHttpTracker();\n resetUserContextManager();\n resetServerContext();\n resetOsContext();\n resetRuntimeContext();\n\n this.config = null;\n this.transport = null;\n this.initialized = false;\n this.tags = {};\n this.extra = {};\n this.contexts = {};\n\n return true;\n }\n\n /**\n * Handle a captured error from auto-capture\n */\n private handleCapturedError(captured: CapturedError): void {\n if (!this.config) {\n return;\n }\n\n // Check if error should be ignored\n if (this.shouldIgnoreError(captured.message)) {\n if (this.config.debug) {\n console.log('[ErrorExplorer] Ignoring error:', captured.message);\n }\n return;\n }\n\n const event = this.buildEvent(captured.error, undefined, captured.severity);\n\n // Add capture type to tags\n event.tags = {\n ...event.tags,\n capture_type: captured.type,\n };\n\n this.processAndSend(event);\n }\n\n /**\n * Check if an error should be ignored\n */\n private shouldIgnoreError(message: string): boolean {\n if (!this.config) {\n return true;\n }\n\n return matchesPattern(message, this.config.ignoreErrors);\n }\n\n /**\n * Build a complete error event\n */\n private buildEvent(\n error: Error | unknown,\n context?: CaptureContext,\n severity: SeverityLevel = 'error'\n ): ErrorEvent {\n const config = this.config!;\n\n const message = getErrorMessage(error);\n const name = getErrorName(error);\n const stack = getErrorStack(error);\n\n // Parse stack trace\n const frames = parseStackTrace(stack);\n const topFrame = frames[0];\n\n const event: ErrorEvent = {\n message,\n exception_class: name,\n file: topFrame?.filename,\n line: topFrame?.lineno,\n column: topFrame?.colno,\n stack_trace: stack,\n frames,\n severity: context?.level ?? severity,\n environment: config.environment,\n release: config.release || undefined,\n timestamp: new Date().toISOString(),\n\n // User context\n user: context?.user ?? getUserContextManager().getUser() ?? undefined,\n\n // Server context\n server: getServerContext(),\n\n // Runtime context\n runtime: collectRuntimeContext(),\n\n // OS context\n os: collectOsContext(),\n\n // Process context\n process: collectProcessContext(),\n\n // Request context (if provided)\n request: context?.request ? extractRequestContext(context.request) : undefined,\n\n // Breadcrumbs\n breadcrumbs: getBreadcrumbManager()?.getAll(),\n\n // Tags (merge global + context)\n tags: { ...this.tags, ...context?.tags },\n\n // Extra data\n extra: { ...this.extra, ...context?.extra },\n\n // Custom contexts\n contexts: this.contexts,\n\n // SDK info\n sdk: {\n name: SDK_NAME,\n version: SDK_VERSION,\n },\n\n // Fingerprint for grouping\n fingerprint: context?.fingerprint,\n };\n\n return event;\n }\n\n /**\n * Process event through beforeSend and send\n */\n private async processAndSend(event: ErrorEvent): Promise<void> {\n if (!this.config || !this.transport) {\n return;\n }\n\n // Apply beforeSend hook\n let processedEvent: ErrorEvent | null = event;\n if (this.config.beforeSend) {\n try {\n const result = this.config.beforeSend(event);\n processedEvent = result instanceof Promise ? await result : result;\n } catch (e) {\n console.error('[ErrorExplorer] beforeSend threw an error:', e);\n processedEvent = event;\n }\n }\n\n // If beforeSend returned null, drop the event\n if (!processedEvent) {\n if (this.config.debug) {\n console.log('[ErrorExplorer] Event dropped by beforeSend');\n }\n return;\n }\n\n // Send event\n await this.transport.send(processedEvent);\n }\n\n /**\n * Start all breadcrumb trackers\n */\n private startBreadcrumbTrackers(): void {\n if (!this.config) {\n return;\n }\n\n const bc = this.config.breadcrumbs;\n\n if (bc.console) {\n getConsoleTracker().start();\n }\n\n if (bc.http) {\n getHttpTracker().start();\n }\n }\n\n /**\n * Stop all breadcrumb trackers\n */\n private stopAllTrackers(): void {\n resetConsoleTracker();\n resetHttpTracker();\n }\n}\n\n// Export singleton instance\nexport const ErrorExplorer = new ErrorExplorerClient();\n","/**\n * Express middleware for Error Explorer\n *\n * Usage:\n * ```typescript\n * import { ErrorExplorer } from '@error-explorer/node';\n * import { requestHandler, errorHandler } from '@error-explorer/node/express';\n *\n * const app = express();\n *\n * // Add request handler as early as possible\n * app.use(requestHandler());\n *\n * // Your routes here...\n *\n * // Add error handler as the LAST middleware\n * app.use(errorHandler());\n * ```\n */\n\nimport type {\n ExpressRequest,\n ExpressResponse,\n ExpressNextFunction,\n ExpressMiddleware,\n ExpressErrorMiddleware,\n UserContext,\n} from '../types.js';\nimport { ErrorExplorer } from '../ErrorExplorer.js';\nimport { extractRequestContext } from '../context/RequestContext.js';\nimport { generateTransactionId } from '../utils/uuid.js';\nimport { getBreadcrumbManager } from '../breadcrumbs/BreadcrumbManager.js';\n\nexport interface RequestHandlerOptions {\n /**\n * Function to extract user from request\n */\n extractUser?: (req: ExpressRequest) => UserContext | null | undefined;\n\n /**\n * Add request breadcrumbs (default: true)\n */\n breadcrumbs?: boolean;\n}\n\nexport interface ErrorHandlerOptions {\n /**\n * Whether to call next() after handling (default: true)\n */\n callNext?: boolean;\n\n /**\n * Custom error response function\n */\n onError?: (error: Error, req: ExpressRequest, res: ExpressResponse) => void;\n}\n\n/**\n * Request handler middleware - adds context to each request\n */\nexport function requestHandler(options: RequestHandlerOptions = {}): ExpressMiddleware {\n const { extractUser, breadcrumbs = true } = options;\n\n return (req: ExpressRequest, res: ExpressResponse, next: ExpressNextFunction): void => {\n // Generate transaction ID\n const transaction = generateTransactionId();\n\n // Attach ErrorExplorer context to request\n req.errorExplorer = {\n transaction,\n startTime: Date.now(),\n };\n\n // Extract and set user if function provided\n if (extractUser) {\n try {\n const user = extractUser(req);\n if (user) {\n req.errorExplorer.user = user;\n }\n } catch {\n // Ignore user extraction errors\n }\n }\n\n // Add request breadcrumb\n if (breadcrumbs) {\n const manager = getBreadcrumbManager();\n if (manager) {\n manager.add({\n type: 'http',\n category: 'http.request',\n message: `${req.method} ${req.path || req.url}`,\n level: 'info',\n data: {\n method: req.method,\n url: req.originalUrl || req.url,\n transaction,\n },\n });\n }\n }\n\n // Track response for breadcrumb\n if (breadcrumbs) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalEnd = res.end;\n let ended = false;\n\n // Override res.end to capture response timing\n res.end = function (\n ...args: unknown[]\n ): ExpressResponse {\n if (!ended) {\n ended = true;\n\n const duration = req.errorExplorer?.startTime\n ? Date.now() - req.errorExplorer.startTime\n : undefined;\n\n const manager = getBreadcrumbManager();\n if (manager) {\n manager.add({\n type: 'http',\n category: 'http.response',\n message: `${req.method} ${req.path || req.url} - ${res.statusCode}`,\n level: res.statusCode >= 400 ? 'warning' : 'info',\n data: {\n method: req.method,\n url: req.originalUrl || req.url,\n status_code: res.statusCode,\n duration_ms: duration,\n transaction,\n },\n });\n }\n }\n\n // Call original - TypeScript doesn't handle the overloads well\n return (originalEnd as (...args: unknown[]) => ExpressResponse).apply(res, args);\n } as typeof res.end;\n }\n\n next();\n };\n}\n\n/**\n * Error handler middleware - captures and reports errors\n */\nexport function errorHandler(options: ErrorHandlerOptions = {}): ExpressErrorMiddleware {\n const { callNext = true, onError } = options;\n\n return (\n error: Error,\n req: ExpressRequest,\n res: ExpressResponse,\n next: ExpressNextFunction\n ): void => {\n // Skip if already sent response\n if (res.headersSent) {\n if (callNext) {\n next(error);\n }\n return;\n }\n\n // Extract request context\n const requestContext = extractRequestContext(req);\n\n // Get user from request context or ErrorExplorer context\n const user = req.errorExplorer?.user;\n\n // Get transaction ID\n const transaction = req.errorExplorer?.transaction;\n\n // Capture the error\n ErrorExplorer.captureException(error, {\n request: req,\n user,\n tags: {\n transaction: transaction || 'unknown',\n route: req.path || req.url || 'unknown',\n method: req.method || 'unknown',\n },\n extra: {\n requestContext,\n query: req.query,\n params: req.params,\n },\n });\n\n // Call custom error handler if provided\n if (onError) {\n try {\n onError(error, req, res);\n } catch {\n // Ignore custom handler errors\n }\n }\n\n // Continue to next error handler\n if (callNext) {\n next(error);\n }\n };\n}\n\n/**\n * Convenience function to create both middlewares\n */\nexport function setupExpress(\n requestOptions: RequestHandlerOptions = {},\n errorOptions: ErrorHandlerOptions = {}\n): {\n requestHandler: ExpressMiddleware;\n errorHandler: ExpressErrorMiddleware;\n} {\n return {\n requestHandler: requestHandler(requestOptions),\n errorHandler: errorHandler(errorOptions),\n };\n}\n","/**\n * HTTP middleware for Error Explorer (framework-agnostic)\n *\n * For use with Node.js built-in http module or compatible frameworks\n */\n\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { UserContext } from '../types.js';\nimport { ErrorExplorer } from '../ErrorExplorer.js';\nimport { extractRequestContext } from '../context/RequestContext.js';\nimport { generateTransactionId } from '../utils/uuid.js';\nimport { getBreadcrumbManager } from '../breadcrumbs/BreadcrumbManager.js';\n\nexport interface HttpHandlerOptions {\n /**\n * Function to extract user from request\n */\n extractUser?: (req: IncomingMessage) => UserContext | null | undefined;\n\n /**\n * Add request breadcrumbs (default: true)\n */\n breadcrumbs?: boolean;\n}\n\n/**\n * Wrap an HTTP request handler to add error tracking\n */\nexport function wrapHandler(\n handler: (req: IncomingMessage, res: ServerResponse) => void | Promise<void>,\n options: HttpHandlerOptions = {}\n): (req: IncomingMessage, res: ServerResponse) => void {\n const { extractUser, breadcrumbs = true } = options;\n\n return async (req: IncomingMessage, res: ServerResponse): Promise<void> => {\n const transaction = generateTransactionId();\n const startTime = Date.now();\n\n // Add request breadcrumb\n if (breadcrumbs) {\n const manager = getBreadcrumbManager();\n if (manager) {\n manager.add({\n type: 'http',\n category: 'http.request',\n message: `${req.method} ${req.url}`,\n level: 'info',\n data: {\n method: req.method,\n url: req.url,\n transaction,\n },\n });\n }\n }\n\n // Extract user\n let user: UserContext | null | undefined;\n if (extractUser) {\n try {\n user = extractUser(req);\n } catch {\n // Ignore\n }\n }\n\n try {\n await handler(req, res);\n } catch (error) {\n // Capture the error\n ErrorExplorer.captureException(error, {\n request: req,\n user: user || undefined,\n tags: {\n transaction,\n method: req.method || 'unknown',\n },\n extra: {\n requestContext: extractRequestContext(req),\n },\n });\n\n // Re-throw to let the caller handle response\n throw error;\n } finally {\n // Add response breadcrumb\n if (breadcrumbs) {\n const duration = Date.now() - startTime;\n const manager = getBreadcrumbManager();\n if (manager) {\n manager.add({\n type: 'http',\n category: 'http.response',\n message: `${req.method} ${req.url} - ${res.statusCode}`,\n level: res.statusCode >= 400 ? 'warning' : 'info',\n data: {\n method: req.method,\n url: req.url,\n status_code: res.statusCode,\n duration_ms: duration,\n transaction,\n },\n });\n }\n }\n }\n };\n}\n\n/**\n * Create a simple HTTP server with error tracking\n */\nexport function createTrackedServer(\n handler: (req: IncomingMessage, res: ServerResponse) => void | Promise<void>,\n options: HttpHandlerOptions = {}\n): (req: IncomingMessage, res: ServerResponse) => void {\n return wrapHandler(handler, options);\n}\n","/**\n * @error-explorer/node - Error Explorer SDK for Node.js\n *\n * Usage:\n * ```typescript\n * import { ErrorExplorer } from '@error-explorer/node';\n *\n * ErrorExplorer.init({\n * dsn: 'https://ee_xxx@error-explorer.com/api/v1/webhook',\n * environment: 'production',\n * release: '1.0.0',\n * });\n *\n * // Manual capture\n * try {\n * // ... your code\n * } catch (error) {\n * ErrorExplorer.captureException(error);\n * }\n *\n * // With Express\n * import { requestHandler, errorHandler } from '@error-explorer/node/express';\n * app.use(requestHandler());\n * app.use(errorHandler());\n * ```\n */\n\n// Main client\nexport { ErrorExplorer } from './ErrorExplorer.js';\n\n// Types\nexport type {\n InitOptions,\n ResolvedConfig,\n Breadcrumb,\n BreadcrumbType,\n BreadcrumbLevel,\n InternalBreadcrumb,\n UserContext,\n CaptureContext,\n SeverityLevel,\n StackFrame,\n ErrorEvent,\n RequestContext,\n ServerContext,\n RuntimeContext,\n OsContext,\n ProcessContext,\n SdkInfo,\n TransportOptions,\n QueuedEvent,\n ExpressRequest,\n ExpressResponse,\n ExpressNextFunction,\n ExpressMiddleware,\n ExpressErrorMiddleware,\n} from './types.js';\n\n// Express middleware (also exported from ./express)\nexport { requestHandler, errorHandler, setupExpress } from './middleware/express.js';\nexport type { RequestHandlerOptions, ErrorHandlerOptions } from './middleware/express.js';\n\n// HTTP middleware (also exported from ./http)\nexport { wrapHandler, createTrackedServer } from './middleware/http.js';\nexport type { HttpHandlerOptions } from './middleware/http.js';\n\n// Breadcrumb utilities\nexport { getBreadcrumbManager } from './breadcrumbs/BreadcrumbManager.js';\n\n// Context utilities\nexport { collectProcessContext } from './context/ProcessContext.js';\nexport { collectOsContext } from './context/OsContext.js';\nexport { collectRuntimeContext } from './context/RuntimeContext.js';\nexport { getServerContext, setServerName } from './context/ServerContext.js';\nexport { extractRequestContext } from './context/RequestContext.js';\n\n// Utils\nexport { parseStackTrace } from './utils/stacktrace.js';\nexport { generateUuid, generateShortId, generateTransactionId } from './utils/uuid.js';\n\n// Security\nexport { HmacSigner } from './security/HmacSigner.js';\n\n// Re-export ErrorExplorer as default\nimport { ErrorExplorer as EE } from './ErrorExplorer.js';\nexport default EE;\n"]}
|