@oconde/radar 0.2.0 → 0.3.0
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/CHANGELOG.md +10 -0
- package/README.md +8 -0
- package/dist/{client-CZHtsQAd.d.cts → client-BB-to8cr.d.cts} +11 -0
- package/dist/{client-DbBsXgpj.d.ts → client-BS798K3S.d.ts} +11 -0
- package/dist/index.cjs +177 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +186 -23
- package/dist/index.js.map +1 -1
- package/dist/nest/index.cjs +177 -14
- package/dist/nest/index.cjs.map +1 -1
- package/dist/nest/index.d.cts +1 -1
- package/dist/nest/index.d.ts +1 -1
- package/dist/nest/index.js +186 -23
- package/dist/nest/index.js.map +1 -1
- package/dist/sveltekit/index.cjs +179 -16
- package/dist/sveltekit/index.cjs.map +1 -1
- package/dist/sveltekit/index.d.cts +1 -1
- package/dist/sveltekit/index.d.ts +1 -1
- package/dist/sveltekit/index.js +190 -27
- package/dist/sveltekit/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sveltekit/index.ts","../../src/context.ts","../../src/protocol/index.ts","../../src/client.ts","../../src/express.ts","../../src/redact.ts","../../src/serialize.ts","../../src/request.ts","../../src/options.ts","../../src/process-handlers.ts","../../src/source.ts","../../src/function-name.ts","../../src/stack.ts","../../src/transport.ts","../../src/util.ts","../../src/version.ts","../../src/radar.ts","../../src/sveltekit/sourcemaps.ts","../../src/sveltekit/vlq.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve, sep } from 'node:path';\nimport { performance } from 'node:perf_hooks';\nimport type { Handle, HandleServerError, RequestEvent, RequestHandler } from '@sveltejs/kit';\nimport type { RadarClient } from '../client.js';\nimport { requestIdFrom, runWithContext, type RadarContext, type RequestLike } from '../context.js';\nimport type { RedactMode } from '../options.js';\nimport { LIMITS, type ExceptionInfo, type StackFrame } from '../protocol/index.js';\nimport { radar } from '../radar.js';\nimport { maskValue } from '../redact.js';\nimport { redactUrl } from '../request.js';\nimport { truncate } from '../serialize.js';\nimport { parseBrowserStack } from '../stack.js';\n\nexport { composeServerSourceMaps, moveClientSourceMaps } from './sourcemaps.js';\n\nexport type RadarHandleOptions = { client?: RadarClient; requestId?: (event: RequestEvent) => string | null | undefined };\nexport type RadarHandleErrorOptions = { client?: RadarClient };\n\nexport type ClientErrorsOptions = {\n clientDir?: string;\n sourceMapsDir?: string;\n maxPerMinute?: number;\n maxGlobalPerMinute?: number;\n maxBytes?: number;\n client?: RadarClient;\n};\n\ntype ReportedAction = { kind: 'click' | 'submit'; element: string; label: string; msBefore: number };\ntype ClientErrorReport = { name: string; message: string; stack?: string; path: string; action?: ReportedAction };\n\nconst ACTION_KINDS = new Set(['click', 'submit']);\nconst ACTION_ELEMENT = /^[a-z][a-z0-9-]{0,23}$/;\nconst MAX_ACTION_LABEL = 60;\nconst MAX_RAW_ACTION_LABEL = 200;\nconst EMAIL_IN_LABEL = /[\\w.+-]+@[\\w-]+(?:\\.[\\w-]+)+/g;\nconst NUMBER_IN_LABEL = /(?<![\\w#])\\(?\\+?\\d(?:[\\d\\s().\\-/]*\\d){2,}/g;\nconst MAX_ACTION_DELAY_MS = 60_000;\n\nconst CREDENTIAL_IN_TEXT = /\\b(?:Bearer|Basic|Token)\\s+[A-Za-z0-9._~+/=-]{8,}|\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]*/g;\nconst MAX_STACK_LENGTH = 16_000;\nconst MAX_TRACKED_ADDRESSES = 10_000;\n\nfunction clientAddress(event: RequestEvent): string | undefined {\n try {\n return event.getClientAddress();\n } catch {\n return undefined;\n }\n}\n\nexport function routeName(id: string | null | undefined): string | undefined {\n if (!id) return undefined;\n return id.replace(/\\/\\([^)/]+\\)/g, '') || '/';\n}\n\nfunction contextFor(event: RequestEvent, chooseRequestId?: RadarHandleOptions['requestId']): RadarContext {\n const path = `${event.url.pathname}${event.url.search}`;\n const ip = clientAddress(event);\n const req: RequestLike = {\n method: event.request.method,\n url: path,\n originalUrl: path,\n params: event.params,\n query: Object.fromEntries(event.url.searchParams),\n headers: Object.fromEntries(event.request.headers),\n ...(ip ? { ip } : {}),\n };\n const route = routeName(event.route.id);\n const chosen = chooseRequestId?.(event);\n return { requestId: requestIdFrom(chosen || event.request.headers.get('x-request-id')), startedAt: performance.now(), req, ...(route ? { route } : {}) };\n}\n\nfunction withRequestId(response: Response, requestId: string): Response {\n try {\n response.headers.set('x-request-id', requestId);\n return response;\n } catch {\n try {\n const copy = new Response(response.body, response);\n copy.headers.set('x-request-id', requestId);\n return copy;\n } catch {\n return response;\n }\n }\n}\n\nexport function radarHandle(options: RadarHandleOptions = {}): Handle {\n const client = options.client ?? radar;\n return async ({ event, resolve: resolveEvent }) => {\n let context: RadarContext;\n try {\n context = contextFor(event, options.requestId);\n } catch {\n return resolveEvent(event);\n }\n const req = context.req as RequestLike;\n return runWithContext(context, async () => {\n let response: Response;\n try {\n response = await resolveEvent(event);\n } catch (error) {\n if (client.shouldLogRequest(req)) client.logHttpRequest(context, 500);\n throw error;\n }\n const tagged = withRequestId(response, context.requestId);\n if (client.shouldLogRequest(req)) client.logHttpRequest(context, tagged.status);\n return tagged;\n });\n };\n}\n\nexport function radarHandleError(inner?: HandleServerError, options: RadarHandleErrorOptions = {}): HandleServerError {\n const client = options.client ?? radar;\n return (input) => {\n const unexpected = (input.status ?? 500) >= 500;\n try {\n if (unexpected) client.captureError(input.error);\n } catch {\n return inner?.(input);\n }\n if (inner) return inner(input);\n if (unexpected) console.error(input.error);\n return undefined;\n };\n}\n\nclass WindowLimiter {\n private readonly hits = new Map<string, { count: number; resetAt: number }>();\n\n constructor(\n private readonly max: number,\n private readonly windowMs: number,\n ) {}\n\n allow(key: string, now = Date.now()): boolean {\n const entry = this.hits.get(key);\n if (!entry || entry.resetAt <= now) {\n if (this.hits.size >= MAX_TRACKED_ADDRESSES) this.prune(now);\n this.hits.set(key, { count: 1, resetAt: now + this.windowMs });\n return this.max > 0;\n }\n entry.count += 1;\n return entry.count <= this.max;\n }\n\n private prune(now: number): void {\n for (const [key, entry] of this.hits) if (entry.resetAt <= now) this.hits.delete(key);\n if (this.hits.size >= MAX_TRACKED_ADDRESSES) this.hits.clear();\n }\n}\n\nasync function readLimited(request: Request, maxBytes: number): Promise<string | null> {\n if (!request.body) return '';\n const reader = request.body.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (size > maxBytes) {\n await reader.cancel().catch(() => undefined);\n return null;\n }\n chunks.push(value);\n }\n return Buffer.concat(chunks).toString('utf8');\n}\n\nfunction optionalText(value: unknown, max: number): string | undefined | null {\n if (value === undefined || value === null) return undefined;\n return typeof value === 'string' ? value.slice(0, max) : null;\n}\n\nfunction parseAction(value: unknown): ReportedAction | undefined {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const { kind, element, label, msBefore } = record;\n if (typeof kind !== 'string' || !ACTION_KINDS.has(kind)) return undefined;\n if (typeof element !== 'string' || !ACTION_ELEMENT.test(element)) return undefined;\n if (typeof label !== 'string') return undefined;\n if (typeof msBefore !== 'number' || !Number.isInteger(msBefore) || msBefore < 0 || msBefore > MAX_ACTION_DELAY_MS) return undefined;\n return { kind: kind as ReportedAction['kind'], element, label: label.replace(/\\s+/g, ' ').trim().slice(0, MAX_RAW_ACTION_LABEL), msBefore };\n}\n\nfunction scrubLabel(label: string): string {\n return maskText(label).replace(EMAIL_IN_LABEL, '<email>').replace(NUMBER_IN_LABEL, '<número>');\n}\n\nfunction actionAttrs(action: ReportedAction | undefined, mode: RedactMode, routeOnly: boolean): Record<string, string | number> {\n if (!action) return {};\n const attrs: Record<string, string | number> = { 'ui.action': action.kind, 'ui.element': action.element };\n if (!routeOnly && action.label) attrs['ui.label'] = (mode === 'mask' ? scrubLabel(action.label) : action.label).slice(0, MAX_ACTION_LABEL);\n attrs['ui.msBefore'] = action.msBefore;\n return attrs;\n}\n\nfunction parseReport(text: string): ClientErrorReport | null {\n let payload: unknown;\n try {\n payload = JSON.parse(text);\n } catch {\n return null;\n }\n if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) return null;\n const record = payload as Record<string, unknown>;\n const name = optionalText(record.name, 200);\n const message = optionalText(record.message, LIMITS.messageLength);\n const stack = optionalText(record.stack, MAX_STACK_LENGTH);\n const path = optionalText(record.path, 2000);\n if (name === null || message === null || stack === null || path === null) return null;\n if (!message && !stack) return null;\n const action = parseAction(record.action);\n return { name: name || 'Error', message: message ?? '', ...(stack ? { stack } : {}), path: path?.startsWith('/') ? path : '/', ...(action ? { action } : {}) };\n}\n\nfunction maskText(text: string): string {\n return text.replace(CREDENTIAL_IN_TEXT, (match) => maskValue(match));\n}\n\nfunction remoteFrame(frame: StackFrame, file: string): StackFrame {\n return { ...frame, file, inApp: false };\n}\n\nfunction localFrame(frame: StackFrame, clientDir: string, mapFor: (file: string) => string | null, routeOnly: boolean): StackFrame {\n let url: URL;\n try {\n url = new URL(frame.file);\n } catch {\n return remoteFrame(frame, 'browser');\n }\n if (url.protocol !== 'https:' && url.protocol !== 'http:') return remoteFrame(frame, 'browser');\n const page = routeOnly ? url.origin : `${url.origin}${url.pathname}`;\n if (!url.pathname.startsWith('/_app/')) return remoteFrame(frame, page);\n let candidate: string;\n try {\n candidate = resolve(clientDir, `.${decodeURIComponent(url.pathname)}`);\n } catch {\n return remoteFrame(frame, page);\n }\n const map = candidate.startsWith(clientDir + sep) ? mapFor(candidate) : null;\n if (!map || !existsSync(map) || !existsSync(candidate)) return remoteFrame(frame, `${url.origin}${url.pathname}`);\n return { ...frame, fn: undefined, file: candidate, inApp: true };\n}\n\nfunction visitorKey(address: string | undefined): string {\n if (!address) return 'unknown';\n if (!address.includes(':')) return address;\n return address.toLowerCase().split(':').slice(0, 4).join(':');\n}\n\nexport function radarClientErrors(options: ClientErrorsOptions = {}): RequestHandler {\n const client = options.client ?? radar;\n const clientDir = resolve(options.clientDir ?? 'build/client');\n const mapsDir = resolve(options.sourceMapsDir ?? 'build/client-maps');\n const maxBytes = options.maxBytes ?? 16_384;\n const limiter = new WindowLimiter(options.maxPerMinute ?? 10, 60_000);\n const globalLimiter = new WindowLimiter(options.maxGlobalPerMinute ?? 60, 60_000);\n const mapLocator = (file: string) => (file.startsWith(clientDir + sep) ? `${resolve(mapsDir, file.slice(clientDir.length + 1))}.map` : null);\n return async (event) => {\n try {\n if (!limiter.allow(visitorKey(clientAddress(event))) || !globalLimiter.allow('route')) return new Response(null, { status: 429 });\n if (Number(event.request.headers.get('content-length') ?? 0) > maxBytes) return new Response(null, { status: 413 });\n const text = await readLimited(event.request, maxBytes);\n if (text === null) return new Response(null, { status: 413 });\n const report = parseReport(text);\n if (!report) return new Response(null, { status: 400 });\n const mode = client.settings.redact;\n const routeOnly = client.settings.requestDetail === 'route';\n const exception: ExceptionInfo = {\n type: truncate(report.name, 200),\n message: mode === 'mask' ? maskText(report.message) : report.message,\n frames: parseBrowserStack(report.stack).map((frame) => localFrame(frame, clientDir, mapLocator, routeOnly)),\n };\n const path = mode === 'mask' ? maskText(redactUrl(report.path, mode)) : report.path;\n client.captureException(exception, {\n handled: false,\n level: 'error',\n request: routeOnly ? null : { method: 'GET', url: path },\n attrs: { source: 'browser', ...actionAttrs(report.action, mode, routeOnly) },\n runtime: null,\n enrich: { mapLocator, inferFunctionNames: true },\n });\n return new Response(null, { status: 204 });\n } catch {\n return new Response(null, { status: 204 });\n }\n };\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { randomUUID } from 'node:crypto';\nimport { LIMITS, type UserInfo } from './protocol/index.js';\n\nexport type HeaderValue = string | string[] | number | undefined;\n\nexport type RequestLike = {\n method?: string;\n url?: string;\n originalUrl?: string;\n baseUrl?: string;\n route?: { path?: unknown };\n params?: Record<string, unknown>;\n query?: unknown;\n headers: Record<string, HeaderValue>;\n body?: unknown;\n ip?: string;\n socket?: { remoteAddress?: string };\n};\n\nexport type ResponseLike = {\n statusCode: number;\n setHeader(name: string, value: string): unknown;\n once(event: 'finish', listener: () => void): unknown;\n};\n\nexport type RadarContext = {\n requestId: string;\n startedAt: number;\n req?: RequestLike;\n route?: string;\n user?: UserInfo;\n};\n\ntype GlobalState = { storage: AsyncLocalStorage<RadarContext>; client?: unknown };\n\nconst STATE_KEY = Symbol.for('@oconde/radar');\n\nexport function globalState(): GlobalState {\n const holder = globalThis as unknown as Record<symbol, GlobalState | undefined>;\n let state = holder[STATE_KEY];\n if (!state) {\n state = { storage: new AsyncLocalStorage<RadarContext>() };\n holder[STATE_KEY] = state;\n }\n return state;\n}\n\nexport function currentContext(): RadarContext | undefined {\n return globalState().storage.getStore();\n}\n\nexport function runWithContext<T>(context: RadarContext, fn: () => T): T {\n return globalState().storage.run(context, fn);\n}\n\nconst SAFE_REQUEST_ID = /^[\\x21-\\x7e]+$/;\n\nexport function requestIdFrom(incoming: string | undefined | null): string {\n const value = incoming?.trim();\n return value && value.length <= LIMITS.requestIdLength && SAFE_REQUEST_ID.test(value) ? value : randomUUID();\n}\n","export const PROTOCOL_VERSION = 1;\n\nexport const INGEST_PATH = '/api/v1/events';\n\nexport const CHECKIN_PATH = '/api/v1/checkins/';\n\nexport const RELEASES_PATH = '/api/v1/releases/';\n\nexport const CHECKIN_SLUG = /^[a-z0-9][a-z0-9-]{0,63}$/;\n\nexport const CHECKIN_STATUSES = ['in_progress', 'ok', 'error'] as const;\n\nexport const LIMITS = {\n batchBytes: 1_000_000,\n batchEvents: 500,\n messageLength: 2000,\n stringLength: 2000,\n attrsBytes: 16_384,\n bodyBytes: 16_384,\n headers: 50,\n frames: 50,\n contextFrames: 10,\n contextLines: 5,\n contextLineLength: 300,\n causeDepth: 5,\n depth: 6,\n arrayItems: 50,\n requestIdLength: 128,\n checkInIdLength: 64,\n} as const;\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport type EventBatch = {\n v: 1;\n sdk: { name: string; version: string };\n environment?: string;\n release?: string;\n dropped?: number;\n events: RadarEvent[];\n};\n\nexport type RadarEvent = LogEvent | ErrorEvent;\n\nexport type LogEvent = {\n type: 'log';\n ts: number;\n level: LogLevel;\n message: string;\n requestId?: string;\n attrs?: Record<string, unknown>;\n request?: RequestInfo;\n user?: UserInfo;\n};\n\nexport type ErrorEvent = {\n type: 'error';\n ts: number;\n level: 'error' | 'fatal';\n handled: boolean;\n requestId?: string;\n exception: ExceptionInfo;\n request?: RequestInfo;\n user?: UserInfo;\n runtime?: RuntimeInfo;\n attrs?: Record<string, unknown>;\n};\n\nexport type ExceptionInfo = {\n type: string;\n message: string;\n frames: StackFrame[];\n cause?: ExceptionInfo;\n};\n\nexport type StackFrame = {\n fn?: string;\n file: string;\n line?: number;\n col?: number;\n inApp: boolean;\n context?: { pre: string[]; line: string; post: string[] };\n};\n\nexport type RequestInfo = {\n method: string;\n url: string;\n route?: string;\n params?: Record<string, string>;\n query?: Record<string, unknown>;\n headers?: Record<string, string>;\n body?: unknown;\n ip?: string;\n userAgent?: string;\n status?: number;\n durationMs?: number;\n};\n\nexport type UserInfo = { id?: string; email?: string; name?: string };\n\nexport type RuntimeInfo = {\n name: 'node';\n version: string;\n host?: string;\n pid?: number;\n memoryMb?: number;\n uptimeS?: number;\n};\n\nexport type IngestResponse = { accepted: number; dropped: number };\n\nexport type IngestErrorCode =\n | 'invalid_key'\n | 'account_disabled'\n | 'payload_too_large'\n | 'invalid_batch'\n | 'quota_exceeded'\n | 'rate_limited'\n | 'unknown_monitor'\n | 'invalid_checkin';\n\nexport type IngestError = { error: { code: IngestErrorCode; message: string } };\n\nexport type CheckInStatus = (typeof CHECKIN_STATUSES)[number];\n\nexport type CheckInPayload = {\n status: CheckInStatus;\n checkInId?: string;\n durationMs?: number;\n environment?: string;\n release?: string;\n};\n\nexport type ReleaseSummary = {\n release: string;\n firstSeen: string | null;\n newIssues: number;\n events: number;\n issues: { title: string; culprit: string | null; count: number; url: string }[];\n};\n","import { randomUUID } from 'node:crypto';\nimport { hostname } from 'node:os';\nimport { performance } from 'node:perf_hooks';\nimport { currentContext, requestIdFrom, runWithContext, type RadarContext, type RequestLike } from './context.js';\nimport { createMiddleware, type RadarMiddleware } from './express.js';\nimport { levelEnabled, resolveOptions, type RadarOptions, type RedactMode, type ResolvedOptions } from './options.js';\nimport { installProcessHandlers } from './process-handlers.js';\nimport {\n CHECKIN_PATH,\n CHECKIN_SLUG,\n CHECKIN_STATUSES,\n INGEST_PATH,\n LIMITS,\n type CheckInPayload,\n type CheckInStatus,\n type ErrorEvent,\n type ExceptionInfo,\n type LogEvent,\n type LogLevel,\n type RadarEvent,\n type RequestInfo,\n type RuntimeInfo,\n type UserInfo,\n} from './protocol/index.js';\nimport { pathParams, redactPath, requestInfo, requestPath, requestRoute } from './request.js';\nimport { setFingerprintSecret } from './redact.js';\nimport { prepareAttrs, truncate } from './serialize.js';\nimport { enrichException, type EnrichOptions } from './source.js';\nimport { exceptionInfo } from './stack.js';\nimport { Transport } from './transport.js';\nimport { describeError, elapsedSince } from './util.js';\nimport { SDK_NAME, SDK_VERSION } from './version.js';\n\nexport type Attributes = Record<string, unknown>;\nexport type LogRequestOptions = { level?: LogLevel; redact?: RedactMode };\nexport type CheckInOptions = { checkInId?: string; durationMs?: number };\n\ntype LogExtras = { request?: RequestInfo; mode?: RedactMode };\n\nexport type CaptureExceptionOptions = {\n handled?: boolean;\n level?: 'error' | 'fatal';\n request?: RequestInfo | null;\n attrs?: Attributes;\n runtime?: RuntimeInfo | null;\n enrich?: EnrichOptions;\n};\n\nconst MAX_CHECK_IN_DURATION_MS = 7 * 86_400_000;\nconst MAX_CHECK_IN_ENVIRONMENT = 64;\nconst MAX_CHECK_IN_RELEASE = 128;\n\nexport class RadarClient {\n private options: ResolvedOptions = resolveOptions({}, {});\n private transport: Transport | null = null;\n private initialized = false;\n private closed = false;\n private readonly captured = new WeakSet<object>();\n\n get isEnabled(): boolean {\n return this.transport !== null && !this.closed;\n }\n\n get settings(): Readonly<ResolvedOptions> {\n return this.options;\n }\n\n init(options: RadarOptions = {}): void {\n try {\n if (this.initialized) {\n this.debugWarn('radar.init chamado mais de uma vez; mantida a primeira configuração');\n return;\n }\n this.initialized = true;\n this.options = resolveOptions(options);\n setFingerprintSecret(this.options.key);\n if (this.options.enabled && this.options.key) {\n this.transport = new Transport({\n url: this.options.endpoint + INGEST_PATH,\n key: this.options.key,\n sdk: { name: SDK_NAME, version: SDK_VERSION },\n environment: this.options.environment,\n ...(this.options.release ? { release: this.options.release } : {}),\n checkInBaseUrl: this.options.endpoint + CHECKIN_PATH,\n onWarning: (message, always) => (always ? this.writeWarning(message) : this.debugWarn(message)),\n });\n }\n if (this.options.captureUnhandled && (this.transport || this.options.console)) installProcessHandlers(this);\n } catch (error) {\n this.debugWarn(`radar.init falhou: ${describeError(error)}`);\n }\n }\n\n debug(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('debug', message, data));\n }\n\n info(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('info', message, data));\n }\n\n warn(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('warn', message, data));\n }\n\n error(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('error', message, data));\n }\n\n logRequest(title: string, data?: Attributes, options: LogRequestOptions = {}): void {\n this.safely(() => {\n const context = currentContext();\n const mode = options.redact ?? this.options.redact;\n const request = context?.req ? requestInfo(context.req, mode, { route: context.route }, this.options.requestDetail) : undefined;\n this.emitLog(options.level ?? 'info', title, data, { request, mode });\n });\n }\n\n captureError(error: unknown, data?: Attributes): void {\n this.safely(() => this.emitError(error, data, 'error', true));\n }\n\n captureUnhandled(error: unknown, level: 'error' | 'fatal'): void {\n this.safely(() => this.emitError(error, undefined, level, false));\n }\n\n setUser(user: UserInfo): void {\n this.safely(() => {\n const context = currentContext();\n if (!context) return;\n context.user = {\n ...(user.id !== undefined && user.id !== null ? { id: truncate(String(user.id), 200) } : {}),\n ...(user.email ? { email: truncate(String(user.email), 200) } : {}),\n ...(user.name ? { name: truncate(String(user.name), 200) } : {}),\n };\n });\n }\n\n async track<T>(name: string, fn: () => T | Promise<T>, data?: Attributes): Promise<T> {\n const execute = async (): Promise<T> => {\n const started = performance.now();\n try {\n const result = await fn();\n this.info(name, { ...data, durationMs: elapsedSince(started), ok: true });\n return result;\n } catch (error) {\n this.error(name, { ...data, durationMs: elapsedSince(started), ok: false });\n this.captureError(error, data);\n throw error;\n }\n };\n if (currentContext()) return execute();\n return runWithContext({ requestId: randomUUID(), startedAt: performance.now() }, execute);\n }\n\n withContext<T>(fn: () => T, options: { requestId?: string } = {}): T {\n return runWithContext({ requestId: requestIdFrom(options.requestId), startedAt: performance.now() }, fn);\n }\n\n async checkIn(slug: string, status: CheckInStatus, options: CheckInOptions = {}): Promise<void> {\n try {\n if (!this.transport || this.closed) return;\n if (typeof slug !== 'string' || !CHECKIN_SLUG.test(slug)) {\n this.debugWarn(`slug de tarefa agendada inválido: ${String(slug).slice(0, 80)}`);\n return;\n }\n if (!CHECKIN_STATUSES.includes(status)) return;\n const checkInId = typeof options.checkInId === 'string' && options.checkInId ? options.checkInId.slice(0, LIMITS.checkInIdLength) : undefined;\n const durationMs = typeof options.durationMs === 'number' && Number.isFinite(options.durationMs) && options.durationMs >= 0 ? Math.min(Math.round(options.durationMs), MAX_CHECK_IN_DURATION_MS) : undefined;\n const environment = this.options.environment.slice(0, MAX_CHECK_IN_ENVIRONMENT) || 'production';\n const release = this.options.release?.slice(0, MAX_CHECK_IN_RELEASE);\n const payload: CheckInPayload = {\n status,\n ...(checkInId ? { checkInId } : {}),\n ...(durationMs !== undefined ? { durationMs } : {}),\n environment,\n ...(release ? { release } : {}),\n };\n await this.transport.checkIn(slug, payload);\n } catch (error) {\n this.debugWarn(`check-in falhou: ${describeError(error)}`);\n }\n }\n\n async cron<T>(slug: string, fn: () => T | Promise<T>): Promise<T> {\n const checkInId = randomUUID();\n const started = performance.now();\n const execute = async (): Promise<T> => {\n await this.checkIn(slug, 'in_progress', { checkInId });\n try {\n const result = await fn();\n await this.checkIn(slug, 'ok', { checkInId, durationMs: elapsedSince(started) });\n return result;\n } catch (error) {\n this.captureError(error, { cron: slug });\n await this.checkIn(slug, 'error', { checkInId, durationMs: elapsedSince(started) });\n throw error;\n }\n };\n if (currentContext()) return execute();\n return this.withContext(execute);\n }\n\n middleware(): RadarMiddleware {\n return createMiddleware(this);\n }\n\n shouldLogRequest(req: RequestLike): boolean {\n return this.options.logRequests && !this.options.ignorePaths.includes(requestPath(req));\n }\n\n logHttpRequest(context: RadarContext, status: number): void {\n this.safely(() => {\n const req = context.req;\n if (!req) return;\n const level: LogLevel = status >= 500 ? 'error' : status >= 400 ? 'warn' : 'info';\n const route = requestRoute(req, context.route);\n runWithContext(context, () =>\n this.emitLog(level, 'http.request', {\n method: (req.method ?? 'GET').toUpperCase(),\n ...(route ? { route } : {}),\n ...(this.options.requestDetail === 'full' ? { path: redactPath(requestPath(req), pathParams(req, requestPath(req)), this.options.redact) } : {}),\n status,\n durationMs: elapsedSince(context.startedAt),\n }),\n );\n });\n }\n\n async flush(timeoutMs = 2000): Promise<void> {\n try {\n await this.transport?.flush(timeoutMs);\n } catch (error) {\n this.debugWarn(`flush falhou: ${describeError(error)}`);\n }\n }\n\n async close(timeoutMs = 2000): Promise<void> {\n if (this.closed) return;\n await this.flush(timeoutMs);\n this.closed = true;\n this.transport?.stop();\n }\n\n private emitLog(level: LogLevel, message: string, data: Attributes | undefined, extras: LogExtras = {}): void {\n if (this.closed || !levelEnabled(level, this.options.minLevel)) return;\n const context = currentContext();\n const mode = extras.mode ?? this.options.redact;\n const event: LogEvent = {\n type: 'log',\n ts: Date.now(),\n level,\n message: truncate(String(message), LIMITS.messageLength),\n ...(context ? { requestId: context.requestId } : {}),\n ...(data !== undefined ? { attrs: prepareAttrs(data, mode) } : {}),\n ...(extras.request ? { request: extras.request } : {}),\n ...(context?.user ? { user: context.user } : {}),\n };\n this.print(event);\n this.transport?.enqueue(event);\n }\n\n captureException(exception: ExceptionInfo, options: CaptureExceptionOptions = {}): void {\n this.safely(() => this.emitException(exception, options));\n }\n\n private emitError(error: unknown, data: Attributes | undefined, level: 'error' | 'fatal', handled: boolean): void {\n if (this.closed) return;\n if (typeof error === 'object' && error !== null) {\n if (this.captured.has(error)) return;\n this.captured.add(error);\n }\n this.emitException(exceptionInfo(error), { level, handled, ...(data !== undefined ? { attrs: data } : {}) }, error instanceof Error ? error.stack : undefined);\n }\n\n private emitException(exception: ExceptionInfo, options: CaptureExceptionOptions, stack?: string): void {\n if (this.closed) return;\n const context = currentContext();\n const mode = this.options.redact;\n const request = options.request === null ? undefined : (options.request ?? (context?.req ? requestInfo(context.req, mode, { route: context.route }, this.options.requestDetail) : undefined));\n const runtime = options.runtime === undefined ? runtimeInfo() : options.runtime;\n const event: ErrorEvent = {\n type: 'error',\n ts: Date.now(),\n level: options.level ?? 'error',\n handled: options.handled ?? true,\n exception,\n ...(context ? { requestId: context.requestId } : {}),\n ...(request ? { request } : {}),\n ...(context?.user ? { user: context.user } : {}),\n ...(runtime ? { runtime } : {}),\n ...(options.attrs !== undefined ? { attrs: prepareAttrs(options.attrs, mode) } : {}),\n };\n this.print(event, stack);\n if (!this.transport) return;\n this.transport.enqueue(() =>\n enrichException(event.exception, process.cwd(), options.enrich).then(\n (enriched) => ({ ...event, exception: enriched }),\n () => event,\n ),\n );\n }\n\n private print(event: RadarEvent, stack?: string): void {\n if (!this.options.console) return;\n try {\n const requestId = event.requestId ? { requestId: event.requestId } : {};\n if (event.type === 'log') {\n const line = { ...event.attrs, ts: new Date(event.ts).toISOString(), level: event.level, message: event.message, ...requestId };\n (event.level === 'error' ? process.stderr : process.stdout).write(`${JSON.stringify(line)}\\n`);\n return;\n }\n const line = {\n ...event.attrs,\n ts: new Date(event.ts).toISOString(),\n level: event.level,\n message: `${event.exception.type}: ${event.exception.message}`,\n ...requestId,\n ...(stack ? { stack } : {}),\n };\n process.stderr.write(`${JSON.stringify(line)}\\n`);\n } catch {\n return;\n }\n }\n\n private safely(action: () => void): void {\n try {\n action();\n } catch (error) {\n this.debugWarn(`falha interna do Radar: ${describeError(error)}`);\n }\n }\n\n private debugWarn(message: string): void {\n if (this.options.debug) this.writeWarning(message);\n }\n\n private writeWarning(message: string): void {\n try {\n process.stderr.write(`[radar] ${message}\\n`);\n } catch {\n return;\n }\n }\n}\n\nfunction runtimeInfo(): RuntimeInfo {\n return {\n name: 'node',\n version: process.versions.node,\n host: hostname(),\n pid: process.pid,\n memoryMb: Math.round(process.memoryUsage.rss() / 1_048_576),\n uptimeS: Math.round(process.uptime()),\n };\n}\n","import { performance } from 'node:perf_hooks';\nimport { requestIdFrom, runWithContext, type RadarContext, type RequestLike, type ResponseLike } from './context.js';\nimport { headerValue } from './request.js';\n\nexport type RequestLogger = {\n shouldLogRequest(req: RequestLike): boolean;\n logHttpRequest(context: RadarContext, status: number): void;\n};\n\nexport type RadarMiddleware = (req: RequestLike, res: ResponseLike, next: (error?: unknown) => void) => void;\n\nexport function createMiddleware(logger: RequestLogger): RadarMiddleware {\n return (req, res, next) => {\n let context: RadarContext;\n try {\n const requestId = requestIdFrom(headerValue(req.headers['x-request-id']));\n context = { requestId, startedAt: performance.now(), req };\n res.setHeader('x-request-id', requestId);\n if (logger.shouldLogRequest(req)) res.once('finish', () => logger.logHttpRequest(context, res.statusCode));\n } catch {\n next();\n return;\n }\n runWithContext(context, () => next());\n };\n}\n","import { createHash, createHmac, randomBytes } from 'node:crypto';\nimport type { RedactMode } from './options.js';\n\nconst SECRET_WORDS = new Set([\n 'pass',\n 'passwd',\n 'password',\n 'passwords',\n 'senha',\n 'secret',\n 'secrets',\n 'token',\n 'tokens',\n 'authorization',\n 'auth',\n 'cookie',\n 'cookies',\n 'apikey',\n 'privatekey',\n 'cpf',\n 'card',\n 'cvv',\n 'cvc',\n 'pin',\n 'otp',\n 'signature',\n 'jwt',\n 'session',\n 'sessionid',\n 'credential',\n 'credentials',\n]);\nconst SECRET_PAIRS = [\n ['api', 'key'],\n ['private', 'key'],\n ['access', 'key'],\n ['secret', 'key'],\n];\nconst LOW_ENTROPY_WORDS = new Set(['pass', 'passwd', 'password', 'passwords', 'senha', 'cpf', 'card', 'cvv', 'cvc', 'pin', 'otp']);\nconst CUSTOM_SECRET_HEADER = /^x-.+-(key|secret|token)$/i;\nconst AUTH_SCHEME = /^(Bearer|Basic|Token|Digest|ApiKey)\\s+/i;\nconst JWT_PREFIX = /^eyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\./;\nconst MAX_DEPTH = 8;\nconst KEY_SLOT = Symbol.for('@oconde/radar/fingerprint-key');\n\ntype FingerprintSlot = { key: Buffer };\n\nfunction fingerprintSlot(): FingerprintSlot {\n const holder = globalThis as unknown as Record<symbol, FingerprintSlot | undefined>;\n let slot = holder[KEY_SLOT];\n if (!slot) {\n slot = { key: randomBytes(32) };\n holder[KEY_SLOT] = slot;\n }\n return slot;\n}\n\nexport function setFingerprintSecret(secret: string | undefined): void {\n fingerprintSlot().key = secret ? createHash('sha256').update(`@oconde/radar:${secret}`).digest() : randomBytes(32);\n}\n\nexport function fingerprint(value: string): string {\n return createHmac('sha256', fingerprintSlot().key).update(value).digest('hex').slice(0, 8);\n}\n\nfunction words(name: string): string[] {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter(Boolean);\n}\n\nexport function isSensitiveKey(key: string): boolean {\n const parts = words(key);\n if (parts.length === 1 && parts[0] === 'key') return true;\n if (parts.some((part) => SECRET_WORDS.has(part))) return true;\n return SECRET_PAIRS.some(([first, second]) => parts.some((part, index) => part === first && parts[index + 1] === second));\n}\n\nexport function isLowEntropyKey(key: string): boolean {\n return words(key).some((part) => LOW_ENTROPY_WORDS.has(part));\n}\n\nexport function isSensitiveHeader(name: string): boolean {\n return isSensitiveKey(name) || CUSTOM_SECRET_HEADER.test(name);\n}\n\nexport function looksLikeCredential(value: string): boolean {\n const head = value.slice(0, 64);\n return AUTH_SCHEME.test(head.slice(0, 16)) || JWT_PREFIX.test(head);\n}\n\nexport function maskValue(value: unknown, revealEdges = true): string {\n const text = typeof value === 'string' ? value : (JSON.stringify(value) ?? String(value));\n const scheme = AUTH_SCHEME.exec(text.slice(0, 16));\n const prefix = scheme ? `${scheme[1]} ` : '';\n const secret = scheme ? text.slice(scheme[0].length) : text;\n const visible = revealEdges && secret.length > 12 ? `${secret.slice(0, 4)}…${secret.slice(-4)}` : '•••';\n return `${prefix}${visible} #${fingerprint(text)}`;\n}\n\nexport function redactDeep(value: unknown, mode: RedactMode, depth = 0): unknown {\n if (mode === 'none' || depth > MAX_DEPTH || value === null) return value;\n if (typeof value === 'string') return looksLikeCredential(value) ? maskValue(value) : value;\n if (typeof value !== 'object') return value;\n if (Array.isArray(value)) return value.map((item) => redactDeep(item, mode, depth + 1));\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n const hasValue = item !== null && item !== undefined && item !== '';\n result[key] = isSensitiveKey(key) && hasValue ? maskValue(item, !isLowEntropyKey(key)) : redactDeep(item, mode, depth + 1);\n }\n return result;\n}\n","import type { RedactMode } from './options.js';\nimport { LIMITS } from './protocol/index.js';\nimport { redactDeep } from './redact.js';\n\nexport const TRUNCATED = '…[cortado]';\nexport const LIMIT_REACHED = '…[limite]';\n\nconst MAX_NODES = 2000;\n\ntype Budget = { remaining: number };\n\nexport function truncate(value: string, max: number = LIMITS.stringLength): string {\n return value.length > max ? value.slice(0, max) + TRUNCATED : value;\n}\n\nexport function sanitize(value: unknown, depth = 0, seen: WeakSet<object> = new WeakSet(), budget: Budget = { remaining: MAX_NODES }): unknown {\n if (value === null || value === undefined) return value;\n budget.remaining -= 1;\n switch (typeof value) {\n case 'string':\n return truncate(value);\n case 'number':\n return Number.isFinite(value) ? value : String(value);\n case 'boolean':\n return value;\n case 'bigint':\n return value.toString();\n case 'function':\n case 'symbol':\n return undefined;\n }\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();\n if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) return `[binário ${value.byteLength} bytes]`;\n if (value instanceof Error) return { name: value.name, message: truncate(value.message) };\n const object = value as object;\n if (seen.has(object)) return '[circular]';\n if (depth >= LIMITS.depth) return '[profundidade]';\n if (budget.remaining <= 0) return LIMIT_REACHED;\n seen.add(object);\n try {\n if (Array.isArray(object)) {\n const items: unknown[] = [];\n for (const item of object.slice(0, LIMITS.arrayItems)) {\n if (budget.remaining <= 0) {\n items.push(LIMIT_REACHED);\n break;\n }\n items.push(sanitize(item, depth + 1, seen, budget) ?? null);\n }\n if (object.length > LIMITS.arrayItems) items.push(`…[mais ${object.length - LIMITS.arrayItems}]`);\n return items;\n }\n if (object instanceof Map) return sanitize(Object.fromEntries(object.entries()), depth + 1, seen, budget);\n if (object instanceof Set) return sanitize([...object], depth + 1, seen, budget);\n const result: Record<string, unknown> = {};\n for (const key in object) {\n if (!Object.prototype.hasOwnProperty.call(object, key)) continue;\n if (budget.remaining <= 0) {\n result['…'] = LIMIT_REACHED;\n break;\n }\n const clean = sanitize((object as Record<string, unknown>)[key], depth + 1, seen, budget);\n if (clean !== undefined) result[key] = clean;\n }\n return result;\n } finally {\n seen.delete(object);\n }\n}\n\nexport function limitBytes(value: unknown, maxBytes: number): unknown {\n const json = JSON.stringify(value);\n if (json === undefined || Buffer.byteLength(json) <= maxBytes) return value;\n return { _truncated: truncate(json, maxBytes) };\n}\n\nexport function prepareAttrs(data: unknown, mode: RedactMode): Record<string, unknown> {\n const clean = redactDeep(sanitize(data), mode);\n const record = isRecord(clean) ? clean : { value: clean };\n return limitBytes(record, LIMITS.attrsBytes) as Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import type { HeaderValue, RequestLike } from './context.js';\nimport type { RedactMode, RequestDetail } from './options.js';\nimport { LIMITS, type RequestInfo } from './protocol/index.js';\nimport { isLowEntropyKey, isSensitiveHeader, isSensitiveKey, looksLikeCredential, maskValue, redactDeep } from './redact.js';\nimport { limitBytes, sanitize, truncate } from './serialize.js';\n\nexport function headerValue(value: HeaderValue): string | undefined {\n if (value === undefined) return undefined;\n return Array.isArray(value) ? value.join(', ') : String(value);\n}\n\nexport function requestHeaders(headers: Record<string, HeaderValue>, mode: RedactMode): Record<string, string> {\n const result: Record<string, string> = {};\n let count = 0;\n for (const [name, raw] of Object.entries(headers)) {\n const value = headerValue(raw);\n if (value === undefined) continue;\n if (count >= LIMITS.headers) break;\n const key = name.toLowerCase();\n result[key] = mode === 'mask' && (isSensitiveHeader(key) || looksLikeCredential(value)) ? maskValue(value) : truncate(value);\n count++;\n }\n return result;\n}\n\nexport function requestPath(req: RequestLike): string {\n const url = req.originalUrl ?? req.url ?? '';\n const end = url.indexOf('?');\n return end >= 0 ? url.slice(0, end) : url;\n}\n\nexport function requestRoute(req: RequestLike, route?: string): string | undefined {\n if (route) return route;\n return typeof req.route?.path === 'string' ? req.route.path : undefined;\n}\n\nconst ROUTE_PARAM = /^:([A-Za-z_$][\\w$]*)/;\n\nfunction pathSegments(value: string): string[] {\n const segments = value.split('/');\n while (segments.length > 1 && segments[segments.length - 1] === '') segments.pop();\n return segments;\n}\n\nfunction decodeSegment(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nexport function routeParams(req: RequestLike, path: string): Record<string, string> {\n if (typeof req.route?.path !== 'string') return {};\n const pattern = pathSegments(`${typeof req.baseUrl === 'string' ? req.baseUrl : ''}${req.route.path}`).filter((segment, index) => index > 0 || segment !== '');\n const values = pathSegments(path);\n if (pattern.length > values.length) return {};\n const offset = values.length - pattern.length;\n const result: Record<string, string> = {};\n for (let index = 0; index < pattern.length; index++) {\n const value = values[offset + index];\n const param = ROUTE_PARAM.exec(pattern[index]);\n if (!param) {\n if (pattern[index] !== value) return {};\n continue;\n }\n if (value) result[param[1]] = decodeSegment(value);\n }\n return result;\n}\n\nexport function pathParams(req: RequestLike, path: string): Record<string, unknown> {\n return { ...routeParams(req, path), ...(req.params ?? {}) };\n}\n\nexport function redactPath(path: string, params: Record<string, unknown> | undefined, mode: RedactMode): string {\n if (mode === 'none' || !params) return path;\n let result = path;\n for (const [key, value] of Object.entries(params)) {\n if (typeof value !== 'string' || value.length < 4 || !isSensitiveKey(key)) continue;\n const masked = maskValue(value, !isLowEntropyKey(key));\n for (const form of new Set([value, encodeURIComponent(value)])) result = result.split(form).join(masked);\n }\n return result;\n}\n\nexport function safeUrl(req: RequestLike, mode: RedactMode): string {\n const url = req.originalUrl ?? req.url ?? '';\n const queryStart = url.indexOf('?');\n const path = queryStart >= 0 ? url.slice(0, queryStart) : url;\n const query = queryStart >= 0 ? url.slice(queryStart) : '';\n return redactUrl(redactPath(path, pathParams(req, path), mode) + query, mode);\n}\n\nexport function redactUrl(url: string, mode: RedactMode): string {\n const queryStart = url.indexOf('?');\n if (mode === 'none' || queryStart < 0) return url;\n const params = new URLSearchParams(url.slice(queryStart + 1));\n let changed = false;\n for (const [key, value] of [...params.entries()]) {\n if (isSensitiveKey(key) && value !== '') {\n params.set(key, maskValue(value, !isLowEntropyKey(key)));\n changed = true;\n }\n }\n return changed ? `${url.slice(0, queryStart)}?${params.toString()}` : url;\n}\n\nexport function requestInfo(req: RequestLike, mode: RedactMode, extra: { route?: string; status?: number; durationMs?: number } = {}, detail: RequestDetail = 'full'): RequestInfo {\n const route = requestRoute(req, extra.route);\n if (detail === 'route') {\n return {\n method: (req.method ?? 'GET').toUpperCase(),\n url: route ?? '',\n ...(route ? { route } : {}),\n ...(extra.status !== undefined ? { status: extra.status } : {}),\n ...(extra.durationMs !== undefined ? { durationMs: extra.durationMs } : {}),\n };\n }\n const params = prepareRecord(req.params, mode) as Record<string, string> | undefined;\n const query = prepareRecord(req.query, mode);\n const body = prepareBody(req.body, mode);\n const userAgent = headerValue(req.headers['user-agent']);\n const ip = req.ip ?? req.socket?.remoteAddress;\n return {\n method: (req.method ?? 'GET').toUpperCase(),\n url: truncate(safeUrl(req, mode)),\n ...(route ? { route } : {}),\n ...(params ? { params } : {}),\n ...(query ? { query } : {}),\n headers: requestHeaders(req.headers, mode),\n ...(body !== undefined ? { body } : {}),\n ...(ip ? { ip } : {}),\n ...(userAgent ? { userAgent: truncate(userAgent, 500) } : {}),\n ...(extra.status !== undefined ? { status: extra.status } : {}),\n ...(extra.durationMs !== undefined ? { durationMs: extra.durationMs } : {}),\n };\n}\n\nfunction isEmptyRecord(value: unknown): boolean {\n return typeof value === 'object' && value !== null && !Array.isArray(value) && Object.keys(value).length === 0;\n}\n\nfunction prepareRecord(value: unknown, mode: RedactMode): Record<string, unknown> | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const clean = prepare(value, mode);\n return isEmptyRecord(clean) || typeof clean !== 'object' || clean === null ? undefined : (clean as Record<string, unknown>);\n}\n\nfunction prepare(value: unknown, mode: RedactMode): unknown {\n return redactDeep(sanitize(value), mode);\n}\n\nfunction prepareBody(body: unknown, mode: RedactMode): unknown {\n if (body === undefined || body === null || body === '') return undefined;\n const clean = prepare(body, mode);\n if (isEmptyRecord(clean)) return undefined;\n return limitBytes(clean, LIMITS.bodyBytes);\n}\n","import type { LogLevel } from './protocol/index.js';\n\nexport type RedactMode = 'mask' | 'none';\nexport type RequestDetail = 'full' | 'route';\n\nexport type RadarOptions = {\n key?: string;\n endpoint?: string;\n environment?: string;\n release?: string;\n enabled?: boolean;\n console?: boolean;\n minLevel?: LogLevel;\n redact?: RedactMode;\n requestDetail?: RequestDetail;\n logRequests?: boolean;\n ignorePaths?: string[];\n captureUnhandled?: boolean;\n debug?: boolean;\n};\n\nexport type ResolvedOptions = {\n key: string | undefined;\n endpoint: string;\n environment: string;\n release: string | undefined;\n enabled: boolean;\n console: boolean;\n minLevel: LogLevel;\n redact: RedactMode;\n requestDetail: RequestDetail;\n logRequests: boolean;\n ignorePaths: string[];\n captureUnhandled: boolean;\n debug: boolean;\n};\n\nexport const DEFAULT_ENDPOINT = 'https://radar-ingest.oconde.dev';\n\nconst LEVELS: LogLevel[] = ['debug', 'info', 'warn', 'error'];\n\nexport function resolveOptions(options: RadarOptions = {}, env: NodeJS.ProcessEnv = process.env): ResolvedOptions {\n const key = options.key?.trim() || undefined;\n return {\n key,\n endpoint: (options.endpoint ?? DEFAULT_ENDPOINT).replace(/\\/+$/, ''),\n environment: options.environment ?? env.NODE_ENV ?? 'production',\n release: options.release || undefined,\n enabled: options.enabled ?? Boolean(key),\n console: options.console ?? false,\n minLevel: options.minLevel && LEVELS.includes(options.minLevel) ? options.minLevel : 'info',\n redact: options.redact === 'none' ? 'none' : 'mask',\n requestDetail: options.requestDetail === 'route' ? 'route' : 'full',\n logRequests: options.logRequests ?? true,\n ignorePaths: options.ignorePaths ?? ['/healthz', '/health'],\n captureUnhandled: options.captureUnhandled ?? true,\n debug: options.debug ?? false,\n };\n}\n\nexport function levelEnabled(level: LogLevel, minLevel: LogLevel): boolean {\n return LEVELS.indexOf(level) >= LEVELS.indexOf(minLevel);\n}\n","import { inspect } from 'node:util';\n\nexport type UnhandledCapturer = {\n captureUnhandled(error: unknown, level: 'error' | 'fatal'): void;\n flush(timeoutMs?: number): Promise<void>;\n};\n\nconst INSTALLED = Symbol.for('@oconde/radar/process-handlers');\nconst MODE_FLAG = /^--unhandled-rejections=(\\S+)$/;\n\nexport function unhandledRejectionsMode(execArgv: string[] = process.execArgv, nodeOptions: string = process.env.NODE_OPTIONS ?? ''): string {\n for (const arg of [...nodeOptions.split(/\\s+/), ...execArgv]) {\n const match = MODE_FLAG.exec(arg);\n if (match?.[1]) return match[1];\n }\n return 'throw';\n}\n\nexport function asUncaught(reason: unknown): unknown {\n if (reason instanceof Error) return reason;\n const error = new Error(\n `This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason \"${inspect(reason)}\".`,\n ) as Error & { code: string };\n error.code = 'ERR_UNHANDLED_REJECTION';\n return error;\n}\n\nexport function installProcessHandlers(capturer: UnhandledCapturer): void {\n const holder = process as unknown as Record<symbol, boolean | undefined>;\n if (holder[INSTALLED]) return;\n holder[INSTALLED] = true;\n\n process.on('unhandledRejection', (reason) => {\n const mode = unhandledRejectionsMode();\n const othersListen = process.listenerCount('unhandledRejection') > 1;\n if (othersListen || mode !== 'throw') {\n capturer.captureUnhandled(reason, 'error');\n if (!othersListen && mode === 'warn-with-error-code') process.exitCode = 1;\n return;\n }\n const uncaught = asUncaught(reason);\n setImmediate(() => {\n throw uncaught;\n });\n });\n\n process.on('uncaughtException', (error) => {\n capturer.captureUnhandled(error, 'fatal');\n if (process.listenerCount('uncaughtException') > 1) return;\n try {\n process.stderr.write(`${inspect(error)}\\n`);\n } catch {\n process.exitCode = 1;\n }\n void capturer.flush(2000).finally(() => process.exit(1));\n });\n}\n","import { readFile, stat } from 'node:fs/promises';\nimport { SourceMap } from 'node:module';\nimport { dirname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { enclosingFunctionName } from './function-name.js';\nimport { LIMITS, type ExceptionInfo, type StackFrame } from './protocol/index.js';\n\nconst MAX_FILE_BYTES = 2 * 1024 * 1024;\nconst MAX_CACHED_FILES = 50;\nconst MAPPING_URL = /\\/\\/[#@]\\s*sourceMappingURL=(\\S+)\\s*$/;\n\ntype LoadedMap = { map: SourceMap; baseDir: string; sources: string[]; contents: (string | null)[]; lines: Map<number, string[]> };\ntype LoadedFile = { lines: string[]; map: LoadedMap | null };\ntype MappedFrame = { frame: StackFrame; lines: string[] | null; original: boolean };\ntype MapPayload = { sources?: string[]; sourcesContent?: (string | null)[]; sourceRoot?: string };\ntype MapEntry = { originalSource?: string; originalLine?: number; originalColumn?: number };\n\nexport type MapLocator = (file: string) => string | null;\nexport type EnrichOptions = { mapLocator?: MapLocator; inferFunctionNames?: boolean };\n\nconst cache = new Map<string, Promise<LoadedFile | null>>();\n\nexport function clearSourceCache(): void {\n cache.clear();\n}\n\nexport async function enrichFrames(frames: StackFrame[], cwd: string = process.cwd(), options: EnrichOptions = {}): Promise<StackFrame[]> {\n const result: StackFrame[] = [];\n let withContext = 0;\n for (const frame of frames) {\n try {\n const { frame: located, lines, original } = await mapFrame(frame, options.mapLocator);\n const named = options.inferFunctionNames && original && !located.fn && lines && located.line ? withInferredName(located, lines) : located;\n const mapped = named.inApp && isLibraryPath(named.file) ? { ...named, inApp: false } : named;\n let next = mapped;\n if (mapped.inApp && lines && mapped.line && withContext < LIMITS.contextFrames) {\n const context = contextFor(lines, mapped.line);\n if (context) {\n next = { ...mapped, context };\n withContext++;\n }\n }\n result.push({ ...next, file: relativize(next.file, cwd) });\n } catch {\n result.push({ ...frame, file: relativize(frame.file, cwd) });\n }\n }\n return result;\n}\n\nexport async function enrichException(exception: ExceptionInfo, cwd: string = process.cwd(), options: EnrichOptions = {}): Promise<ExceptionInfo> {\n const frames = await enrichFrames(exception.frames, cwd, options);\n if (!exception.cause) return { ...exception, frames };\n return { ...exception, frames, cause: await enrichException(exception.cause, cwd, options) };\n}\n\nfunction withInferredName(frame: StackFrame, lines: string[]): StackFrame {\n const fn = enclosingFunctionName(lines, frame.line ?? 0, frame.col);\n return fn ? { ...frame, fn } : frame;\n}\n\nfunction isLibraryPath(file: string): boolean {\n return file.includes('/node_modules/') || file.includes('\\\\node_modules\\\\');\n}\n\nexport function relativize(file: string, cwd: string): string {\n if (!isAbsolute(file)) return file;\n const path = relative(cwd, file);\n return path.startsWith('..') || isAbsolute(path) ? file : path.split(sep).join('/');\n}\n\nasync function mapFrame(frame: StackFrame, locator?: MapLocator): Promise<MappedFrame> {\n if (!frame.line || !isAbsolute(frame.file)) return { frame, lines: null, original: false };\n const file = await loadFile(frame.file, locator);\n if (!file) return { frame, lines: null, original: false };\n if (!file.map) return { frame, lines: file.lines, original: false };\n const entry = file.map.map.findEntry(frame.line - 1, (frame.col ?? 1) - 1) as MapEntry;\n if (typeof entry.originalSource !== 'string' || typeof entry.originalLine !== 'number') return { frame, lines: file.lines, original: false };\n const originalPath = resolveSource(file.map, entry.originalSource);\n const mapped: StackFrame = { ...frame, file: originalPath, line: entry.originalLine + 1, col: (entry.originalColumn ?? 0) + 1 };\n const lines = embeddedLines(file.map, file.map.sources.indexOf(entry.originalSource));\n if (lines) return { frame: mapped, lines, original: true };\n const original = await loadFile(originalPath);\n return { frame: mapped, lines: original?.lines ?? null, original: true };\n}\n\nfunction embeddedLines(map: LoadedMap, index: number): string[] | null {\n if (index < 0) return null;\n const cached = map.lines.get(index);\n if (cached) return cached;\n const content = map.contents[index];\n if (typeof content !== 'string') return null;\n const lines = content.split(/\\r?\\n/);\n map.lines.set(index, lines);\n return lines;\n}\n\nfunction contextFor(lines: string[], line: number): StackFrame['context'] {\n const index = line - 1;\n if (index < 0 || index >= lines.length) return undefined;\n const clip = (text: string) => (text.length > LIMITS.contextLineLength ? `${text.slice(0, LIMITS.contextLineLength)}…` : text);\n return {\n pre: lines.slice(Math.max(0, index - LIMITS.contextLines), index).map(clip),\n line: clip(lines[index] ?? ''),\n post: lines.slice(index + 1, index + 1 + LIMITS.contextLines).map(clip),\n };\n}\n\nfunction resolveSource(map: LoadedMap, source: string): string {\n if (source.startsWith('file://')) {\n try {\n return fileURLToPath(source);\n } catch {\n return source;\n }\n }\n return isAbsolute(source) ? source : resolve(map.baseDir, source);\n}\n\nfunction loadFile(path: string, locator?: MapLocator): Promise<LoadedFile | null> {\n const key = locator ? `${path}\\u0000located` : path;\n const cached = cache.get(key);\n if (cached) {\n cache.delete(key);\n cache.set(key, cached);\n return cached;\n }\n const pending = readSource(path, locator).catch(() => null);\n cache.set(key, pending);\n if (cache.size > MAX_CACHED_FILES) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) cache.delete(oldest);\n }\n return pending;\n}\n\nasync function readSource(path: string, locator?: MapLocator): Promise<LoadedFile | null> {\n const text = await readText(path);\n if (text === null) return null;\n const lines = text.split(/\\r?\\n/);\n return { lines, map: await loadMap(path, lines, locator) };\n}\n\nasync function readText(path: string): Promise<string | null> {\n try {\n const info = await stat(path);\n if (!info.isFile() || info.size > MAX_FILE_BYTES) return null;\n return await readFile(path, 'utf8');\n } catch {\n return null;\n }\n}\n\nasync function loadMap(path: string, lines: string[], locator?: MapLocator): Promise<LoadedMap | null> {\n let url: string | undefined;\n for (let index = lines.length - 1; index >= 0 && index >= lines.length - 5; index--) {\n const match = MAPPING_URL.exec(lines[index] ?? '');\n if (match) {\n url = match[1];\n break;\n }\n }\n let raw: string | null;\n let mapDir: string;\n const located = url ? null : locator ? locator(path) : `${path}.map`;\n if (located) {\n raw = await readText(located);\n mapDir = dirname(located);\n } else if (!url) {\n return null;\n } else if (url.startsWith('data:')) {\n const comma = url.indexOf(',');\n const encoded = url.slice(comma + 1);\n raw = url.slice(0, comma).endsWith(';base64') ? Buffer.from(encoded, 'base64').toString('utf8') : decodeURIComponent(encoded);\n mapDir = dirname(path);\n } else {\n const mapPath = url.startsWith('file://') ? fileURLToPath(url) : resolve(dirname(path), decodeURIComponent(url));\n raw = await readText(mapPath);\n mapDir = dirname(mapPath);\n }\n if (!raw) return null;\n try {\n const payload = JSON.parse(raw) as MapPayload;\n return {\n map: new SourceMap(payload as ConstructorParameters<typeof SourceMap>[0]),\n baseDir: resolve(mapDir, payload.sourceRoot ?? ''),\n sources: payload.sources ?? [],\n contents: payload.sourcesContent ?? [],\n lines: new Map(),\n };\n } catch {\n return null;\n }\n}\n","const IDENTIFIER = '[A-Za-z_$][\\\\w$]*';\nconst MAX_LINES_UP = 400;\nconst MAX_HEADER_LINES = 6;\nconst MAX_NAME_LENGTH = 100;\nconst CONTROL_BLOCK = /^\\s*(?:\\}\\s*)?(?:if|else|for|while|do|switch|try|catch|finally|with)\\b/;\nconst CLASS_BODY = new RegExp(`\\\\bclass\\\\s+${IDENTIFIER}`);\nconst MARKUP_BOUNDARY = /<\\/?(?:script|style|template)\\b/i;\nconst KEYWORDS = new Set(['if', 'for', 'while', 'switch', 'catch', 'function', 'return', 'new', 'typeof', 'await', 'else', 'do', 'try']);\nconst NAME_PATTERNS = [\n new RegExp(`\\\\bfunction\\\\s*\\\\*?\\\\s*(${IDENTIFIER})\\\\s*\\\\(`),\n new RegExp(`(${IDENTIFIER})\\\\s*[:=]\\\\s*(?:async\\\\s+)?function\\\\b`),\n new RegExp(`(${IDENTIFIER})\\\\s*(?::\\\\s*[^=]+)?=\\\\s*(?:async\\\\s+)?(?:\\\\([^]*\\\\)|${IDENTIFIER})\\\\s*(?::\\\\s*[^=]+)?=>\\\\s*$`),\n new RegExp(`(?:^|[{,(]\\\\s*)(${IDENTIFIER})\\\\s*:\\\\s*(?:async\\\\s+)?(?:\\\\([^]*\\\\)|${IDENTIFIER})\\\\s*(?::\\\\s*[^=]+)?=>\\\\s*$`),\n];\nconst METHOD_PATTERN = new RegExp(`^\\\\s*(?:(?:export|default|public|private|protected|static|async|override|readonly|get|set)\\\\s+)*\\\\*?\\\\s*(${IDENTIFIER})\\\\s*(?:<[^>]*>)?\\\\s*\\\\([^]*\\\\)\\\\s*(?::\\\\s*[^{]+)?$`);\nconst ANONYMOUS_FUNCTION = /\\bfunction\\b|=>/;\n\nfunction codeOnly(text: string): string {\n return text\n .replace(/([\"'`])(?:\\\\.|(?!\\1)[^\\\\])*\\1/g, '\"\"')\n .replace(/\\/\\*.*?\\*\\//g, '')\n .replace(/(^|[^:])\\/\\/.*$/, '$1');\n}\n\nfunction parenBalance(text: string): number {\n let balance = 0;\n for (const char of text) {\n if (char === '(') balance += 1;\n else if (char === ')') balance -= 1;\n }\n return balance;\n}\n\nfunction headerOf(lines: string[], index: number, prefix: string): string {\n let header = prefix;\n for (let previous = index - 1; previous >= 0 && previous >= index - MAX_HEADER_LINES; previous--) {\n if (header.trim() !== '' && parenBalance(header) >= 0) break;\n header = `${codeOnly(lines[previous] ?? '')} ${header}`;\n }\n return header;\n}\n\nfunction nameIn(header: string): string | undefined {\n const patterns = ANONYMOUS_FUNCTION.test(header) ? NAME_PATTERNS : [...NAME_PATTERNS, METHOD_PATTERN];\n for (const pattern of patterns) {\n const name = pattern.exec(header)?.[1];\n if (name && !KEYWORDS.has(name)) return name.slice(0, MAX_NAME_LENGTH);\n }\n return undefined;\n}\n\nexport function enclosingFunctionName(lines: string[], line: number, column?: number): string | undefined {\n const start = line - 1;\n if (start < 0 || start >= lines.length) return undefined;\n let depth = 0;\n for (let index = start; index >= 0 && index >= start - MAX_LINES_UP; index--) {\n const raw = lines[index] ?? '';\n if (index < start && MARKUP_BOUNDARY.test(raw)) return undefined;\n const code = codeOnly(index === start && column ? raw.slice(0, Math.max(0, column - 1)) : raw);\n for (let position = code.length - 1; position >= 0; position--) {\n const char = code[position];\n if (char === '}') {\n depth += 1;\n } else if (char === '{') {\n if (depth > 0) {\n depth -= 1;\n continue;\n }\n const header = headerOf(lines, index, code.slice(0, position));\n if (CLASS_BODY.test(header)) return undefined;\n if (CONTROL_BLOCK.test(header)) continue;\n const name = nameIn(header);\n if (name) return name;\n }\n }\n }\n return undefined;\n}\n","import { fileURLToPath } from 'node:url';\nimport { LIMITS, type ExceptionInfo, type StackFrame } from './protocol/index.js';\nimport { truncate } from './serialize.js';\n\nconst WITH_FUNCTION = /^at (?:async )?(.+?) \\((.+)\\)$/;\nconst LOCATION = /^(.+):(\\d+):(\\d+)$/;\nconst AT_SIGN_FRAME = /^(.*?)@(.+):(\\d+):(\\d+)$/;\nconst MAX_FRAME_LINE = 1000;\n\nexport function parseStack(stack: string | undefined): StackFrame[] {\n if (!stack) return [];\n const frames: StackFrame[] = [];\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (line.length > MAX_FRAME_LINE || !line.startsWith('at ')) continue;\n const withFunction = WITH_FUNCTION.exec(line);\n const fn = withFunction?.[1];\n const location = withFunction ? (withFunction[2] ?? '') : line.replace(/^at (?:async )?/, '');\n const parsed = LOCATION.exec(location);\n if (parsed) {\n const file = toPath(parsed[1] ?? '');\n frames.push({ ...(fn ? { fn } : {}), file, line: Number(parsed[2]), col: Number(parsed[3]), inApp: isInApp(file) });\n } else {\n frames.push({ ...(fn ? { fn } : {}), file: location, inApp: false });\n }\n if (frames.length >= LIMITS.frames) break;\n }\n return frames;\n}\n\nexport function parseBrowserStack(stack: string | undefined): StackFrame[] {\n if (!stack) return [];\n const frames: StackFrame[] = [];\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (line.length > MAX_FRAME_LINE) continue;\n if (line.startsWith('at ')) {\n const withFunction = WITH_FUNCTION.exec(line);\n const fn = withFunction?.[1];\n const location = withFunction ? (withFunction[2] ?? '') : line.replace(/^at (?:async )?/, '');\n const parsed = LOCATION.exec(location);\n frames.push(parsed ? { ...(fn ? { fn } : {}), file: parsed[1] ?? '', line: Number(parsed[2]), col: Number(parsed[3]), inApp: false } : { ...(fn ? { fn } : {}), file: location, inApp: false });\n } else {\n const parsed = AT_SIGN_FRAME.exec(line);\n if (!parsed) continue;\n const fn = parsed[1];\n frames.push({ ...(fn ? { fn } : {}), file: parsed[2] ?? '', line: Number(parsed[3]), col: Number(parsed[4]), inApp: false });\n }\n if (frames.length >= LIMITS.frames) break;\n }\n return frames;\n}\n\nexport function isInApp(file: string): boolean {\n if (file.includes('/node_modules/') || file.includes('\\\\node_modules\\\\')) return false;\n if (file.startsWith('node:') || file.startsWith('internal/')) return false;\n return file.startsWith('/') || /^[A-Za-z]:[\\\\/]/.test(file);\n}\n\nexport function exceptionInfo(error: unknown, depth = 0): ExceptionInfo {\n if (error instanceof Error) {\n const info: ExceptionInfo = {\n type: errorType(error),\n message: truncate(error.message ?? '', LIMITS.messageLength),\n frames: parseStack(error.stack),\n };\n const cause = (error as Error & { cause?: unknown }).cause;\n if (cause !== undefined && cause !== null && depth < LIMITS.causeDepth) info.cause = exceptionInfo(cause, depth + 1);\n return info;\n }\n if (typeof error === 'object' && error !== null) {\n const record = error as Record<string, unknown>;\n const message = typeof record.message === 'string' ? record.message : safeStringify(error);\n return { type: typeof record.name === 'string' ? record.name : 'Object', message: truncate(message, LIMITS.messageLength), frames: [] };\n }\n return { type: 'Error', message: truncate(String(error), LIMITS.messageLength), frames: [] };\n}\n\nfunction toPath(location: string): string {\n if (!location.startsWith('file://')) return location;\n try {\n return fileURLToPath(location);\n } catch {\n return location;\n }\n}\n\nfunction errorType(error: Error): string {\n if (error.name && error.name !== 'Error') return error.name;\n const constructorName = error.constructor?.name;\n return constructorName && constructorName !== 'Object' ? constructorName : 'Error';\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n","import { promisify } from 'node:util';\nimport { gzip } from 'node:zlib';\nimport { LIMITS, type CheckInPayload, type EventBatch, type RadarEvent } from './protocol/index.js';\nimport { describeError } from './util.js';\n\nconst gzipAsync = promisify(gzip);\n\nconst MAX_BATCH_BYTES = 900_000;\nconst GZIP_THRESHOLD_BYTES = 8192;\nconst MAX_BACKOFF_MS = 30_000;\nconst MAX_RETRY_AFTER_MS = 86_400_000;\nconst UNAUTHORIZED_PAUSE_MS = 10 * 60_000;\n\nexport type Pending = RadarEvent | (() => Promise<RadarEvent>);\n\nexport type TransportConfig = {\n url: string;\n key: string;\n sdk: { name: string; version: string };\n environment: string;\n release?: string;\n checkInBaseUrl?: string;\n onWarning?: (message: string, always: boolean) => void;\n flushIntervalMs?: number;\n maxQueue?: number;\n batchSize?: number;\n requestTimeoutMs?: number;\n};\n\ntype Outcome =\n | { kind: 'ok' }\n | { kind: 'retry'; retryAfterMs?: number }\n | { kind: 'unauthorized'; status: number }\n | { kind: 'rejected'; status: number };\n\nexport class Transport {\n private queue: Pending[] = [];\n private droppedCount = 0;\n private inFlight: Promise<boolean> | null = null;\n private nextAttemptAt = 0;\n private backoffMs = 0;\n private unauthorizedUntil = 0;\n private stopped = false;\n private readonly warned = new Set<string>();\n private readonly timer: ReturnType<typeof setInterval>;\n private readonly maxQueue: number;\n private readonly batchSize: number;\n\n constructor(private readonly config: TransportConfig) {\n this.maxQueue = config.maxQueue ?? 1000;\n this.batchSize = Math.min(config.batchSize ?? 100, LIMITS.batchEvents);\n this.timer = setInterval(() => {\n void this.send();\n }, config.flushIntervalMs ?? 2000);\n this.timer.unref();\n }\n\n get pending(): number {\n return this.queue.length;\n }\n\n get dropped(): number {\n return this.droppedCount;\n }\n\n enqueue(event: Pending): void {\n if (this.stopped) return;\n if (this.queue.length >= this.maxQueue) {\n this.droppedCount += 1;\n this.warn('queue_full', 'fila do Radar cheia; eventos estão sendo descartados', false);\n return;\n }\n this.queue.push(event);\n if (this.queue.length >= this.batchSize) void this.send();\n }\n\n send(): Promise<boolean> {\n if (this.inFlight) return this.inFlight;\n if (this.stopped || this.queue.length === 0 || Date.now() < this.nextAttemptAt) return Promise.resolve(false);\n const attempt = this.sendBatch().catch((error: unknown) => {\n this.warn('internal', `envio ao Radar falhou: ${describeError(error)}`, false);\n return false;\n });\n this.inFlight = attempt.finally(() => {\n this.inFlight = null;\n });\n return this.inFlight;\n }\n\n async flush(timeoutMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (this.queue.length > 0 || this.inFlight) {\n const remaining = deadline - Date.now();\n if (remaining <= 0) return;\n const progressed = await withTimeout(this.send(), remaining);\n if (progressed !== true && !this.inFlight) return;\n }\n }\n\n stop(): void {\n this.stopped = true;\n clearInterval(this.timer);\n }\n\n private async sendBatch(): Promise<boolean> {\n const items = this.queue.splice(0, this.batchSize);\n const resolved = await Promise.all(items.map((item) => Promise.resolve().then(() => (typeof item === 'function' ? item() : item)).then((event) => event, () => null)));\n const events: RadarEvent[] = [];\n const leftovers: RadarEvent[] = [];\n let bytes = 0;\n for (const event of resolved) {\n if (!event) {\n this.droppedCount += 1;\n continue;\n }\n const size = Buffer.byteLength(JSON.stringify(event));\n if (events.length > 0 && bytes + size > MAX_BATCH_BYTES) {\n leftovers.push(event);\n continue;\n }\n events.push(event);\n bytes += size;\n }\n if (leftovers.length > 0) this.queue.unshift(...leftovers);\n if (events.length === 0) return true;\n const dropped = this.droppedCount;\n const batch: EventBatch = {\n v: 1,\n sdk: this.config.sdk,\n environment: this.config.environment,\n ...(this.config.release ? { release: this.config.release } : {}),\n ...(dropped > 0 ? { dropped } : {}),\n events,\n };\n const outcome = await this.post(batch);\n switch (outcome.kind) {\n case 'ok':\n this.droppedCount -= dropped;\n this.backoffMs = 0;\n this.nextAttemptAt = 0;\n return true;\n case 'retry':\n this.requeue(events);\n this.backoffMs = Math.min(this.backoffMs > 0 ? this.backoffMs * 2 : 1000, MAX_BACKOFF_MS);\n this.nextAttemptAt = Date.now() + Math.max(this.backoffMs, outcome.retryAfterMs ?? 0);\n return false;\n case 'unauthorized':\n this.droppedCount += events.length;\n this.pauseUnauthorized(outcome.status);\n return false;\n case 'rejected':\n this.droppedCount += events.length;\n this.warn(`rejected_${outcome.status}`, `lote recusado pelo Radar (${outcome.status}); eventos descartados`, true);\n return true;\n }\n }\n\n async checkIn(slug: string, payload: CheckInPayload): Promise<void> {\n if (this.stopped || !this.config.checkInBaseUrl || Date.now() < this.unauthorizedUntil) return;\n let response: Response;\n try {\n response = await fetch(this.config.checkInBaseUrl + encodeURIComponent(slug), {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(payload),\n redirect: 'error',\n signal: AbortSignal.timeout(this.config.requestTimeoutMs ?? 5000),\n });\n } catch (error) {\n this.warn('checkin_network', `check-in no Radar falhou: ${describeError(error)}`, false);\n return;\n }\n await response.arrayBuffer().catch(() => undefined);\n if (response.ok) return;\n if (response.status === 401 || response.status === 403) {\n this.pauseUnauthorized(response.status);\n return;\n }\n if (response.status === 404) {\n this.warn(`checkin_unknown_${slug}`, `tarefa agendada \"${slug}\" não existe no projeto da chave; crie o monitor com esse slug no Radar`, true);\n return;\n }\n this.warn(`checkin_rejected_${response.status}`, `check-in recusado pelo Radar (${response.status})`, false);\n }\n\n private pauseUnauthorized(status: number): void {\n this.droppedCount += this.queue.length;\n this.queue = [];\n this.unauthorizedUntil = Date.now() + UNAUTHORIZED_PAUSE_MS;\n this.nextAttemptAt = Math.max(this.nextAttemptAt, this.unauthorizedUntil);\n this.warn('unauthorized', `chave do Radar recusada (${status}); envios pausados por 10 minutos`, true);\n }\n\n private headers(): Record<string, string> {\n return {\n 'content-type': 'application/json',\n authorization: `Bearer ${this.config.key}`,\n 'user-agent': `${this.config.sdk.name}/${this.config.sdk.version}`,\n };\n }\n\n private requeue(events: RadarEvent[]): void {\n this.queue.unshift(...events);\n const overflow = this.queue.length - this.maxQueue;\n if (overflow > 0) {\n this.queue.splice(this.maxQueue, overflow);\n this.droppedCount += overflow;\n }\n }\n\n private async post(batch: EventBatch): Promise<Outcome> {\n const json = JSON.stringify(batch);\n const compress = Buffer.byteLength(json) > GZIP_THRESHOLD_BYTES;\n const headers = this.headers();\n if (compress) headers['content-encoding'] = 'gzip';\n let response: Response;\n try {\n response = await fetch(this.config.url, {\n method: 'POST',\n headers,\n body: compress ? await gzipAsync(json) : json,\n redirect: 'error',\n signal: AbortSignal.timeout(this.config.requestTimeoutMs ?? 5000),\n });\n } catch (error) {\n this.warn('network', `Radar indisponível: ${describeError(error)}`, false);\n return { kind: 'retry' };\n }\n await response.arrayBuffer().catch(() => undefined);\n if (response.ok) return { kind: 'ok' };\n if (response.status === 401 || response.status === 403) return { kind: 'unauthorized', status: response.status };\n if (response.status === 429) return { kind: 'retry', retryAfterMs: retryAfterMs(response.headers.get('retry-after')) };\n if (response.status >= 500) return { kind: 'retry' };\n return { kind: 'rejected', status: response.status };\n }\n\n private warn(key: string, message: string, always: boolean): void {\n if (this.warned.has(key)) return;\n this.warned.add(key);\n this.config.onWarning?.(message, always);\n }\n}\n\nexport function retryAfterMs(header: string | null): number | undefined {\n if (!header) return undefined;\n const seconds = Number(header);\n if (Number.isFinite(seconds)) return Math.min(Math.max(0, seconds * 1000), MAX_RETRY_AFTER_MS);\n const date = Date.parse(header);\n return Number.isNaN(date) ? undefined : Math.min(Math.max(0, date - Date.now()), MAX_RETRY_AFTER_MS);\n}\n\nfunction withTimeout<T>(promise: Promise<T>, ms: number): Promise<T | undefined> {\n return new Promise((resolve) => {\n const timer = setTimeout(() => resolve(undefined), ms);\n timer.unref();\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n () => {\n clearTimeout(timer);\n resolve(undefined);\n },\n );\n });\n}\n","import { performance } from 'node:perf_hooks';\n\nexport function describeError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function elapsedSince(startedAt: number): number {\n return Math.round(performance.now() - startedAt);\n}\n","declare const __SDK_VERSION__: string | undefined;\n\nexport const SDK_NAME = '@oconde/radar';\nexport const SDK_VERSION: string = typeof __SDK_VERSION__ === 'string' ? __SDK_VERSION__ : '0.0.0-dev';\n","import { RadarClient } from './client.js';\nimport { globalState } from './context.js';\n\nconst state = globalState();\n\nexport const radar: RadarClient = (state.client as RadarClient | undefined) ?? (state.client = new RadarClient());\n","import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport { decodeMappings, encodeMappings, type Segment } from './vlq.js';\n\ntype SourceMapFile = { sources?: unknown; sourceRoot?: unknown };\ntype RawSourceMap = Record<string, unknown> & { sources?: unknown; sourcesContent?: unknown; names?: unknown; mappings?: unknown; sourceRoot?: unknown };\ntype ParsedSourceMap = { raw: RawSourceMap; lines: Segment[][]; sources: string[]; contents: (string | null)[]; names: string[]; baseDir: string };\n\nfunction filesUnder(directory: string): string[] {\n return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {\n const full = join(directory, entry.name);\n if (entry.isDirectory()) return filesUnder(full);\n return entry.isFile() ? [full] : [];\n });\n}\n\nfunction rebase(source: unknown, fromDir: string, root: string, toDir: string): unknown {\n if (typeof source !== 'string' || isAbsolute(source) || source.includes('://')) return source;\n return relative(toDir, resolve(fromDir, root, source)).split(sep).join('/');\n}\n\nfunction moveMap(file: string, target: string, originalDir: string): void {\n try {\n const map = JSON.parse(readFileSync(file, 'utf8')) as SourceMapFile;\n if (Array.isArray(map.sources)) {\n const root = typeof map.sourceRoot === 'string' ? map.sourceRoot : '';\n map.sources = map.sources.map((source) => rebase(source, originalDir, root, dirname(target)));\n delete map.sourceRoot;\n }\n writeFileSync(target, JSON.stringify(map));\n unlinkSync(file);\n } catch {\n renameSync(file, target);\n }\n}\n\nexport function moveClientSourceMaps(buildDir = 'build'): number {\n const clientDir = resolve(buildDir, 'client');\n const mapsDir = resolve(buildDir, 'client-maps');\n const generatedDir = resolve(buildDir, '..', '.svelte-kit/output/client');\n if (!existsSync(clientDir)) return -1;\n let moved = 0;\n for (const file of filesUnder(clientDir)) {\n if (file.endsWith('.map.gz') || file.endsWith('.map.br')) {\n unlinkSync(file);\n continue;\n }\n if (!file.endsWith('.map')) continue;\n const path = relative(clientDir, file);\n const target = join(mapsDir, path);\n mkdirSync(dirname(target), { recursive: true });\n const generated = join(generatedDir, path);\n moveMap(file, target, dirname(existsSync(generated) ? generated : file));\n moved += 1;\n }\n return moved;\n}\n\nfunction parseSourceMap(file: string): ParsedSourceMap | null {\n try {\n const raw = JSON.parse(readFileSync(file, 'utf8')) as RawSourceMap;\n if (typeof raw.mappings !== 'string' || !Array.isArray(raw.sources)) return null;\n const root = typeof raw.sourceRoot === 'string' ? raw.sourceRoot : '';\n return {\n raw,\n lines: decodeMappings(raw.mappings),\n sources: raw.sources.map((source) => (typeof source === 'string' ? source : '')),\n contents: Array.isArray(raw.sourcesContent) ? raw.sourcesContent.map((content) => (typeof content === 'string' ? content : null)) : [],\n names: Array.isArray(raw.names) ? raw.names.map(String) : [],\n baseDir: resolve(dirname(file), root),\n };\n } catch {\n return null;\n }\n}\n\nfunction isUrl(source: string): boolean {\n return source.includes('://');\n}\n\nfunction isInside(directory: string, path: string): boolean {\n const rel = relative(directory, path);\n return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);\n}\n\nfunction traceSegment(map: ParsedSourceMap, line: number, column: number): Segment | null {\n const segments = map.lines[line];\n if (!segments || segments.length === 0) return null;\n let low = 0;\n let high = segments.length - 1;\n let found = -1;\n while (low <= high) {\n const middle = (low + high) >> 1;\n if ((segments[middle]?.[0] ?? 0) <= column) {\n found = middle;\n low = middle + 1;\n } else {\n high = middle - 1;\n }\n }\n const segment = segments[Math.max(found, 0)];\n return segment && segment.length >= 4 ? segment : null;\n}\n\nclass ComposedTable {\n readonly sources: string[] = [];\n readonly contents: (string | null)[] = [];\n readonly names: string[] = [];\n private readonly sourceIndex = new Map<string, number>();\n private readonly nameIndex = new Map<string, number>();\n\n constructor(private readonly outputDir: string) {}\n\n source(baseDir: string, source: string, content: string | null): number {\n const key = isUrl(source) || isAbsolute(source) ? source : relative(this.outputDir, resolve(baseDir, source)).split(sep).join('/');\n const existing = this.sourceIndex.get(key);\n if (existing !== undefined) return existing;\n this.sourceIndex.set(key, this.sources.length);\n this.sources.push(key);\n this.contents.push(content);\n return this.sources.length - 1;\n }\n\n name(value: string): number {\n const existing = this.nameIndex.get(value);\n if (existing !== undefined) return existing;\n this.nameIndex.set(value, this.names.length);\n this.names.push(value);\n return this.names.length - 1;\n }\n}\n\nfunction composeMap(file: string, generatedDir: string, generatedMaps: Map<string, ParsedSourceMap | null>): boolean {\n const outer = parseSourceMap(file);\n if (!outer) return false;\n const inners = outer.sources.map((source) => {\n if (isUrl(source)) return null;\n const path = resolve(outer.baseDir, source);\n if (!isInside(generatedDir, path)) return null;\n if (!generatedMaps.has(path)) generatedMaps.set(path, parseSourceMap(`${path}.map`));\n return generatedMaps.get(path) ?? null;\n });\n if (inners.every((inner) => inner === null)) return false;\n const table = new ComposedTable(dirname(file));\n let traced = 0;\n const lines = outer.lines.map((segments) =>\n segments.map((segment): Segment => {\n const [column = 0, sourceIndex = 0, line = 0, originalColumn = 0, nameIndex] = segment;\n if (segment.length < 4) return [column];\n const inner = inners[sourceIndex];\n const original = inner ? traceSegment(inner, line, originalColumn) : null;\n if (inner && original) {\n traced += 1;\n const [, innerSource = 0, innerLine = 0, innerColumn = 0, innerName] = original;\n const source = table.source(inner.baseDir, inner.sources[innerSource] ?? '', inner.contents[innerSource] ?? null);\n const name = innerName !== undefined ? inner.names[innerName] : nameIndex !== undefined ? outer.names[nameIndex] : undefined;\n return name === undefined ? [column, source, innerLine, innerColumn] : [column, source, innerLine, innerColumn, table.name(name)];\n }\n const source = table.source(outer.baseDir, outer.sources[sourceIndex] ?? '', outer.contents[sourceIndex] ?? null);\n const name = nameIndex !== undefined ? outer.names[nameIndex] : undefined;\n return name === undefined ? [column, source, line, originalColumn] : [column, source, line, originalColumn, table.name(name)];\n }),\n );\n if (traced === 0) return false;\n const { sourceRoot: _root, ignoreList: _ignore, x_google_ignoreList: _googleIgnore, ...rest } = outer.raw;\n const composed = { ...rest, sources: table.sources, sourcesContent: table.contents, names: table.names, mappings: encodeMappings(lines) };\n writeFileSync(file, JSON.stringify(composed));\n return true;\n}\n\nexport function composeServerSourceMaps(buildDir = 'build'): number {\n const serverDir = resolve(buildDir, 'server');\n const generatedDir = resolve(buildDir, '..', '.svelte-kit/output/server');\n if (!existsSync(serverDir) || !existsSync(generatedDir)) return 0;\n const generatedMaps = new Map<string, ParsedSourceMap | null>();\n let composed = 0;\n for (const file of filesUnder(serverDir)) {\n if (file.endsWith('.map') && composeMap(file, generatedDir, generatedMaps)) composed += 1;\n }\n return composed;\n}\n","const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst DIGITS = new Map([...ALPHABET].map((char, index) => [char, index]));\nconst FIELDS = 5;\n\nexport type Segment = number[];\n\nfunction decodeGroup(group: string): number[] {\n const values: number[] = [];\n let value = 0;\n let factor = 1;\n for (const char of group) {\n const digit = DIGITS.get(char);\n if (digit === undefined) throw new Error(`invalid source map mapping: ${group}`);\n value += (digit % 32) * factor;\n if (digit >= 32) {\n factor *= 32;\n continue;\n }\n const magnitude = Math.floor(value / 2);\n values.push(value % 2 === 1 ? -magnitude : magnitude);\n value = 0;\n factor = 1;\n }\n return values;\n}\n\nfunction encodeValue(delta: number): string {\n let value = delta < 0 ? -delta * 2 + 1 : delta * 2;\n let encoded = '';\n do {\n const digit = value % 32;\n value = Math.floor(value / 32);\n encoded += ALPHABET[value > 0 ? digit + 32 : digit];\n } while (value > 0);\n return encoded;\n}\n\nexport function decodeMappings(mappings: string): Segment[][] {\n const state = new Array<number>(FIELDS).fill(0);\n return mappings.split(';').map((line) => {\n state[0] = 0;\n const segments: Segment[] = [];\n for (const group of line.split(',')) {\n if (!group) continue;\n const values = decodeGroup(group).slice(0, FIELDS);\n segments.push(values.map((delta, field) => (state[field] = (state[field] ?? 0) + delta)));\n }\n return segments;\n });\n}\n\nexport function encodeMappings(lines: Segment[][]): string {\n const state = new Array<number>(FIELDS).fill(0);\n return lines\n .map((segments) => {\n state[0] = 0;\n return segments\n .map((segment) =>\n segment\n .map((value, field) => {\n const delta = value - (state[field] ?? 0);\n state[field] = value;\n return encodeValue(delta);\n })\n .join(''),\n )\n .join(',');\n })\n .join(';');\n}\n"],"mappings":"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","names":["import_node_fs","import_node_path","import_node_perf_hooks","state","import_node_crypto","import_node_perf_hooks","import_node_crypto","import_node_url","import_node_util","import_node_perf_hooks","resolve","line","import_node_path","state","source","name","contextFor"]}
|
|
1
|
+
{"version":3,"sources":["../../src/sveltekit/index.ts","../../src/context.ts","../../src/protocol/index.ts","../../src/client.ts","../../src/express.ts","../../src/redact.ts","../../src/serialize.ts","../../src/request.ts","../../src/options.ts","../../src/process-handlers.ts","../../src/source.ts","../../src/function-name.ts","../../src/stack.ts","../../src/util.ts","../../src/trace-fetch.ts","../../src/transport.ts","../../src/version.ts","../../src/radar.ts","../../src/sveltekit/sourcemaps.ts","../../src/sveltekit/vlq.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve, sep } from 'node:path';\nimport { performance } from 'node:perf_hooks';\nimport type { Handle, HandleServerError, RequestEvent, RequestHandler } from '@sveltejs/kit';\nimport type { RadarClient } from '../client.js';\nimport { requestIdFrom, runWithContext, type RadarContext, type RequestLike } from '../context.js';\nimport type { RedactMode } from '../options.js';\nimport { LIMITS, type ExceptionInfo, type StackFrame } from '../protocol/index.js';\nimport { radar } from '../radar.js';\nimport { maskValue } from '../redact.js';\nimport { redactUrl } from '../request.js';\nimport { truncate } from '../serialize.js';\nimport { parseBrowserStack } from '../stack.js';\n\nexport { composeServerSourceMaps, moveClientSourceMaps } from './sourcemaps.js';\n\nexport type RadarHandleOptions = { client?: RadarClient; requestId?: (event: RequestEvent) => string | null | undefined };\nexport type RadarHandleErrorOptions = { client?: RadarClient };\n\nexport type ClientErrorsOptions = {\n clientDir?: string;\n sourceMapsDir?: string;\n maxPerMinute?: number;\n maxGlobalPerMinute?: number;\n maxBytes?: number;\n client?: RadarClient;\n};\n\ntype ReportedAction = { kind: 'click' | 'submit'; element: string; label: string; msBefore: number };\ntype ClientErrorReport = { name: string; message: string; stack?: string; path: string; action?: ReportedAction };\n\nconst ACTION_KINDS = new Set(['click', 'submit']);\nconst ACTION_ELEMENT = /^[a-z][a-z0-9-]{0,23}$/;\nconst MAX_ACTION_LABEL = 60;\nconst MAX_RAW_ACTION_LABEL = 200;\nconst EMAIL_IN_LABEL = /[\\w.+-]+@[\\w-]+(?:\\.[\\w-]+)+/g;\nconst NUMBER_IN_LABEL = /(?<![\\w#])\\(?\\+?\\d(?:[\\d\\s().\\-/]*\\d){2,}/g;\nconst MAX_ACTION_DELAY_MS = 60_000;\n\nconst CREDENTIAL_IN_TEXT = /\\b(?:Bearer|Basic|Token)\\s+[A-Za-z0-9._~+/=-]{8,}|\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]*/g;\nconst MAX_STACK_LENGTH = 16_000;\nconst MAX_TRACKED_ADDRESSES = 10_000;\n\nfunction clientAddress(event: RequestEvent): string | undefined {\n try {\n return event.getClientAddress();\n } catch {\n return undefined;\n }\n}\n\nexport function routeName(id: string | null | undefined): string | undefined {\n if (!id) return undefined;\n return id.replace(/\\/\\([^)/]+\\)/g, '') || '/';\n}\n\nfunction contextFor(event: RequestEvent, chooseRequestId?: RadarHandleOptions['requestId']): RadarContext {\n const path = `${event.url.pathname}${event.url.search}`;\n const ip = clientAddress(event);\n const req: RequestLike = {\n method: event.request.method,\n url: path,\n originalUrl: path,\n params: event.params,\n query: Object.fromEntries(event.url.searchParams),\n headers: Object.fromEntries(event.request.headers),\n ...(ip ? { ip } : {}),\n };\n const route = routeName(event.route.id);\n const chosen = chooseRequestId?.(event);\n return { requestId: requestIdFrom(chosen || event.request.headers.get('x-request-id')), startedAt: performance.now(), req, ...(route ? { route } : {}) };\n}\n\nfunction withRequestId(response: Response, requestId: string): Response {\n try {\n response.headers.set('x-request-id', requestId);\n return response;\n } catch {\n try {\n const copy = new Response(response.body, response);\n copy.headers.set('x-request-id', requestId);\n return copy;\n } catch {\n return response;\n }\n }\n}\n\nexport function radarHandle(options: RadarHandleOptions = {}): Handle {\n const client = options.client ?? radar;\n return async ({ event, resolve: resolveEvent }) => {\n let context: RadarContext;\n try {\n context = contextFor(event, options.requestId);\n } catch {\n return resolveEvent(event);\n }\n const req = context.req as RequestLike;\n return runWithContext(context, async () => {\n let response: Response;\n try {\n response = await resolveEvent(event);\n } catch (error) {\n if (client.shouldLogRequest(req)) client.logHttpRequest(context, 500);\n throw error;\n }\n const tagged = withRequestId(response, context.requestId);\n if (client.shouldLogRequest(req)) client.logHttpRequest(context, tagged.status);\n return tagged;\n });\n };\n}\n\nexport function radarHandleError(inner?: HandleServerError, options: RadarHandleErrorOptions = {}): HandleServerError {\n const client = options.client ?? radar;\n return (input) => {\n const unexpected = (input.status ?? 500) >= 500;\n try {\n if (unexpected) client.captureError(input.error);\n } catch {\n return inner?.(input);\n }\n if (inner) return inner(input);\n if (unexpected) console.error(input.error);\n return undefined;\n };\n}\n\nclass WindowLimiter {\n private readonly hits = new Map<string, { count: number; resetAt: number }>();\n\n constructor(\n private readonly max: number,\n private readonly windowMs: number,\n ) {}\n\n allow(key: string, now = Date.now()): boolean {\n const entry = this.hits.get(key);\n if (!entry || entry.resetAt <= now) {\n if (this.hits.size >= MAX_TRACKED_ADDRESSES) this.prune(now);\n this.hits.set(key, { count: 1, resetAt: now + this.windowMs });\n return this.max > 0;\n }\n entry.count += 1;\n return entry.count <= this.max;\n }\n\n private prune(now: number): void {\n for (const [key, entry] of this.hits) if (entry.resetAt <= now) this.hits.delete(key);\n if (this.hits.size >= MAX_TRACKED_ADDRESSES) this.hits.clear();\n }\n}\n\nasync function readLimited(request: Request, maxBytes: number): Promise<string | null> {\n if (!request.body) return '';\n const reader = request.body.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (size > maxBytes) {\n await reader.cancel().catch(() => undefined);\n return null;\n }\n chunks.push(value);\n }\n return Buffer.concat(chunks).toString('utf8');\n}\n\nfunction optionalText(value: unknown, max: number): string | undefined | null {\n if (value === undefined || value === null) return undefined;\n return typeof value === 'string' ? value.slice(0, max) : null;\n}\n\nfunction parseAction(value: unknown): ReportedAction | undefined {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const { kind, element, label, msBefore } = record;\n if (typeof kind !== 'string' || !ACTION_KINDS.has(kind)) return undefined;\n if (typeof element !== 'string' || !ACTION_ELEMENT.test(element)) return undefined;\n if (typeof label !== 'string') return undefined;\n if (typeof msBefore !== 'number' || !Number.isInteger(msBefore) || msBefore < 0 || msBefore > MAX_ACTION_DELAY_MS) return undefined;\n return { kind: kind as ReportedAction['kind'], element, label: label.replace(/\\s+/g, ' ').trim().slice(0, MAX_RAW_ACTION_LABEL), msBefore };\n}\n\nfunction scrubLabel(label: string): string {\n return maskText(label).replace(EMAIL_IN_LABEL, '<email>').replace(NUMBER_IN_LABEL, '<número>');\n}\n\nfunction actionAttrs(action: ReportedAction | undefined, mode: RedactMode, routeOnly: boolean): Record<string, string | number> {\n if (!action) return {};\n const attrs: Record<string, string | number> = { 'ui.action': action.kind, 'ui.element': action.element };\n if (!routeOnly && action.label) attrs['ui.label'] = (mode === 'mask' ? scrubLabel(action.label) : action.label).slice(0, MAX_ACTION_LABEL);\n attrs['ui.msBefore'] = action.msBefore;\n return attrs;\n}\n\nfunction parseReport(text: string): ClientErrorReport | null {\n let payload: unknown;\n try {\n payload = JSON.parse(text);\n } catch {\n return null;\n }\n if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) return null;\n const record = payload as Record<string, unknown>;\n const name = optionalText(record.name, 200);\n const message = optionalText(record.message, LIMITS.messageLength);\n const stack = optionalText(record.stack, MAX_STACK_LENGTH);\n const path = optionalText(record.path, 2000);\n if (name === null || message === null || stack === null || path === null) return null;\n if (!message && !stack) return null;\n const action = parseAction(record.action);\n return { name: name || 'Error', message: message ?? '', ...(stack ? { stack } : {}), path: path?.startsWith('/') ? path : '/', ...(action ? { action } : {}) };\n}\n\nfunction maskText(text: string): string {\n return text.replace(CREDENTIAL_IN_TEXT, (match) => maskValue(match));\n}\n\nfunction remoteFrame(frame: StackFrame, file: string): StackFrame {\n return { ...frame, file, inApp: false };\n}\n\nfunction localFrame(frame: StackFrame, clientDir: string, mapFor: (file: string) => string | null, routeOnly: boolean): StackFrame {\n let url: URL;\n try {\n url = new URL(frame.file);\n } catch {\n return remoteFrame(frame, 'browser');\n }\n if (url.protocol !== 'https:' && url.protocol !== 'http:') return remoteFrame(frame, 'browser');\n const page = routeOnly ? url.origin : `${url.origin}${url.pathname}`;\n if (!url.pathname.startsWith('/_app/')) return remoteFrame(frame, page);\n let candidate: string;\n try {\n candidate = resolve(clientDir, `.${decodeURIComponent(url.pathname)}`);\n } catch {\n return remoteFrame(frame, page);\n }\n const map = candidate.startsWith(clientDir + sep) ? mapFor(candidate) : null;\n if (!map || !existsSync(map) || !existsSync(candidate)) return remoteFrame(frame, `${url.origin}${url.pathname}`);\n return { ...frame, fn: undefined, file: candidate, inApp: true };\n}\n\nfunction visitorKey(address: string | undefined): string {\n if (!address) return 'unknown';\n if (!address.includes(':')) return address;\n return address.toLowerCase().split(':').slice(0, 4).join(':');\n}\n\nexport function radarClientErrors(options: ClientErrorsOptions = {}): RequestHandler {\n const client = options.client ?? radar;\n const clientDir = resolve(options.clientDir ?? 'build/client');\n const mapsDir = resolve(options.sourceMapsDir ?? 'build/client-maps');\n const maxBytes = options.maxBytes ?? 16_384;\n const limiter = new WindowLimiter(options.maxPerMinute ?? 10, 60_000);\n const globalLimiter = new WindowLimiter(options.maxGlobalPerMinute ?? 60, 60_000);\n const mapLocator = (file: string) => (file.startsWith(clientDir + sep) ? `${resolve(mapsDir, file.slice(clientDir.length + 1))}.map` : null);\n return async (event) => {\n try {\n if (!limiter.allow(visitorKey(clientAddress(event))) || !globalLimiter.allow('route')) return new Response(null, { status: 429 });\n if (Number(event.request.headers.get('content-length') ?? 0) > maxBytes) return new Response(null, { status: 413 });\n const text = await readLimited(event.request, maxBytes);\n if (text === null) return new Response(null, { status: 413 });\n const report = parseReport(text);\n if (!report) return new Response(null, { status: 400 });\n const mode = client.settings.redact;\n const routeOnly = client.settings.requestDetail === 'route';\n const exception: ExceptionInfo = {\n type: truncate(report.name, 200),\n message: mode === 'mask' ? maskText(report.message) : report.message,\n frames: parseBrowserStack(report.stack).map((frame) => localFrame(frame, clientDir, mapLocator, routeOnly)),\n };\n const path = mode === 'mask' ? maskText(redactUrl(report.path, mode)) : report.path;\n client.captureException(exception, {\n handled: false,\n level: 'error',\n request: routeOnly ? null : { method: 'GET', url: path },\n attrs: { source: 'browser', ...actionAttrs(report.action, mode, routeOnly) },\n runtime: null,\n enrich: { mapLocator, inferFunctionNames: true },\n });\n return new Response(null, { status: 204 });\n } catch {\n return new Response(null, { status: 204 });\n }\n };\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { randomUUID } from 'node:crypto';\nimport { LIMITS, type UserInfo } from './protocol/index.js';\n\nexport type HeaderValue = string | string[] | number | undefined;\n\nexport type RequestLike = {\n method?: string;\n url?: string;\n originalUrl?: string;\n baseUrl?: string;\n route?: { path?: unknown };\n params?: Record<string, unknown>;\n query?: unknown;\n headers: Record<string, HeaderValue>;\n body?: unknown;\n ip?: string;\n socket?: { remoteAddress?: string };\n};\n\nexport type ResponseLike = {\n statusCode: number;\n setHeader(name: string, value: string): unknown;\n once(event: 'finish', listener: () => void): unknown;\n};\n\nexport type RadarContext = {\n requestId: string;\n startedAt: number;\n req?: RequestLike;\n route?: string;\n user?: UserInfo;\n};\n\ntype GlobalState = { storage: AsyncLocalStorage<RadarContext>; client?: unknown };\n\nconst STATE_KEY = Symbol.for('@oconde/radar');\n\nexport function globalState(): GlobalState {\n const holder = globalThis as unknown as Record<symbol, GlobalState | undefined>;\n let state = holder[STATE_KEY];\n if (!state) {\n state = { storage: new AsyncLocalStorage<RadarContext>() };\n holder[STATE_KEY] = state;\n }\n return state;\n}\n\nexport function currentContext(): RadarContext | undefined {\n return globalState().storage.getStore();\n}\n\nexport function runWithContext<T>(context: RadarContext, fn: () => T): T {\n return globalState().storage.run(context, fn);\n}\n\nconst SAFE_REQUEST_ID = /^[\\x21-\\x7e]+$/;\n\nexport function requestIdFrom(incoming: string | undefined | null): string {\n const value = incoming?.trim();\n return value && value.length <= LIMITS.requestIdLength && SAFE_REQUEST_ID.test(value) ? value : randomUUID();\n}\n","export const PROTOCOL_VERSION = 1;\n\nexport const INGEST_PATH = '/api/v1/events';\n\nexport const CHECKIN_PATH = '/api/v1/checkins/';\n\nexport const RELEASES_PATH = '/api/v1/releases/';\n\nexport const CHECKIN_SLUG = /^[a-z0-9][a-z0-9-]{0,63}$/;\n\nexport const CHECKIN_STATUSES = ['in_progress', 'ok', 'error'] as const;\n\nexport const LIMITS = {\n batchBytes: 1_000_000,\n batchEvents: 500,\n messageLength: 2000,\n stringLength: 2000,\n attrsBytes: 16_384,\n bodyBytes: 16_384,\n headers: 50,\n frames: 50,\n contextFrames: 10,\n contextLines: 5,\n contextLineLength: 300,\n causeDepth: 5,\n depth: 6,\n arrayItems: 50,\n requestIdLength: 128,\n checkInIdLength: 64,\n} as const;\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport type EventBatch = {\n v: 1;\n sdk: { name: string; version: string };\n environment?: string;\n release?: string;\n dropped?: number;\n events: RadarEvent[];\n};\n\nexport type RadarEvent = LogEvent | ErrorEvent;\n\nexport type LogEvent = {\n type: 'log';\n ts: number;\n level: LogLevel;\n message: string;\n requestId?: string;\n attrs?: Record<string, unknown>;\n request?: RequestInfo;\n user?: UserInfo;\n};\n\nexport type ErrorEvent = {\n type: 'error';\n ts: number;\n level: 'error' | 'fatal';\n handled: boolean;\n requestId?: string;\n exception: ExceptionInfo;\n request?: RequestInfo;\n user?: UserInfo;\n runtime?: RuntimeInfo;\n attrs?: Record<string, unknown>;\n};\n\nexport type ExceptionInfo = {\n type: string;\n message: string;\n frames: StackFrame[];\n cause?: ExceptionInfo;\n};\n\nexport type StackFrame = {\n fn?: string;\n file: string;\n line?: number;\n col?: number;\n inApp: boolean;\n context?: { pre: string[]; line: string; post: string[] };\n};\n\nexport type RequestInfo = {\n method: string;\n url: string;\n route?: string;\n params?: Record<string, string>;\n query?: Record<string, unknown>;\n headers?: Record<string, string>;\n body?: unknown;\n ip?: string;\n userAgent?: string;\n status?: number;\n durationMs?: number;\n};\n\nexport type UserInfo = { id?: string; email?: string; name?: string };\n\nexport type RuntimeInfo = {\n name: 'node';\n version: string;\n host?: string;\n pid?: number;\n memoryMb?: number;\n uptimeS?: number;\n};\n\nexport type IngestResponse = { accepted: number; dropped: number };\n\nexport type IngestErrorCode =\n | 'invalid_key'\n | 'account_disabled'\n | 'payload_too_large'\n | 'invalid_batch'\n | 'quota_exceeded'\n | 'rate_limited'\n | 'unknown_monitor'\n | 'invalid_checkin';\n\nexport type IngestError = { error: { code: IngestErrorCode; message: string } };\n\nexport type CheckInStatus = (typeof CHECKIN_STATUSES)[number];\n\nexport type CheckInPayload = {\n status: CheckInStatus;\n checkInId?: string;\n durationMs?: number;\n environment?: string;\n release?: string;\n};\n\nexport type ReleaseSummary = {\n release: string;\n firstSeen: string | null;\n newIssues: number;\n events: number;\n issues: { title: string; culprit: string | null; count: number; url: string }[];\n};\n","import { randomUUID } from 'node:crypto';\nimport { hostname } from 'node:os';\nimport { performance } from 'node:perf_hooks';\nimport { currentContext, requestIdFrom, runWithContext, type RadarContext, type RequestLike } from './context.js';\nimport { createMiddleware, type RadarMiddleware } from './express.js';\nimport { levelEnabled, resolveOptions, type RadarOptions, type RedactMode, type ResolvedOptions } from './options.js';\nimport { installProcessHandlers } from './process-handlers.js';\nimport {\n CHECKIN_PATH,\n CHECKIN_SLUG,\n CHECKIN_STATUSES,\n INGEST_PATH,\n LIMITS,\n type CheckInPayload,\n type CheckInStatus,\n type ErrorEvent,\n type ExceptionInfo,\n type LogEvent,\n type LogLevel,\n type RadarEvent,\n type RequestInfo,\n type RuntimeInfo,\n type UserInfo,\n} from './protocol/index.js';\nimport { pathParams, redactPath, requestInfo, requestPath, requestRoute } from './request.js';\nimport { setFingerprintSecret } from './redact.js';\nimport { prepareAttrs, truncate } from './serialize.js';\nimport { enrichException, type EnrichOptions } from './source.js';\nimport { exceptionInfo } from './stack.js';\nimport { traceFetch } from './trace-fetch.js';\nimport { Transport } from './transport.js';\nimport { describeError, elapsedSince } from './util.js';\nimport { SDK_NAME, SDK_VERSION } from './version.js';\n\nexport type Attributes = Record<string, unknown>;\nexport type LogRequestOptions = { level?: LogLevel; redact?: RedactMode };\nexport type CheckInOptions = { checkInId?: string; durationMs?: number };\n\ntype LogExtras = { request?: RequestInfo; mode?: RedactMode };\n\nexport type CaptureExceptionOptions = {\n handled?: boolean;\n level?: 'error' | 'fatal';\n request?: RequestInfo | null;\n attrs?: Attributes;\n runtime?: RuntimeInfo | null;\n enrich?: EnrichOptions;\n};\n\nconst MAX_CHECK_IN_DURATION_MS = 7 * 86_400_000;\nconst MAX_CHECK_IN_ENVIRONMENT = 64;\nconst MAX_CHECK_IN_RELEASE = 128;\n\nexport class RadarClient {\n private options: ResolvedOptions = resolveOptions({}, {});\n private transport: Transport | null = null;\n private initialized = false;\n private closed = false;\n private readonly captured = new WeakSet<object>();\n private restoreFetch: (() => void) | null = null;\n\n get isEnabled(): boolean {\n return this.transport !== null && !this.closed;\n }\n\n get settings(): Readonly<ResolvedOptions> {\n return this.options;\n }\n\n init(options: RadarOptions = {}): void {\n try {\n if (this.initialized) {\n this.debugWarn('radar.init chamado mais de uma vez; mantida a primeira configuração');\n return;\n }\n this.initialized = true;\n this.options = resolveOptions(options);\n setFingerprintSecret(this.options.key);\n if (this.options.enabled && this.options.key) {\n this.transport = new Transport({\n url: this.options.endpoint + INGEST_PATH,\n key: this.options.key,\n sdk: { name: SDK_NAME, version: SDK_VERSION },\n environment: this.options.environment,\n ...(this.options.release ? { release: this.options.release } : {}),\n checkInBaseUrl: this.options.endpoint + CHECKIN_PATH,\n onWarning: (message, always) => (always ? this.writeWarning(message) : this.debugWarn(message)),\n });\n }\n if (this.options.captureUnhandled && (this.transport || this.options.console)) installProcessHandlers(this);\n if (this.options.traceFetch.enabled && (this.transport || this.options.console)) {\n this.restoreFetch = traceFetch({\n endpoint: this.options.endpoint,\n propagateTo: this.options.traceFetch.propagateTo,\n redact: this.options.redact,\n record: (level, attrs) => this.safely(() => this.emitLog(level, 'http.client', attrs)),\n });\n }\n } catch (error) {\n this.debugWarn(`radar.init falhou: ${describeError(error)}`);\n }\n }\n\n debug(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('debug', message, data));\n }\n\n info(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('info', message, data));\n }\n\n warn(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('warn', message, data));\n }\n\n error(message: string, data?: Attributes): void {\n this.safely(() => this.emitLog('error', message, data));\n }\n\n logRequest(title: string, data?: Attributes, options: LogRequestOptions = {}): void {\n this.safely(() => {\n const context = currentContext();\n const mode = options.redact ?? this.options.redact;\n const request = context?.req ? requestInfo(context.req, mode, { route: context.route }, this.options.requestDetail) : undefined;\n this.emitLog(options.level ?? 'info', title, data, { request, mode });\n });\n }\n\n captureError(error: unknown, data?: Attributes): void {\n this.safely(() => this.emitError(error, data, 'error', true));\n }\n\n captureUnhandled(error: unknown, level: 'error' | 'fatal'): void {\n this.safely(() => this.emitError(error, undefined, level, false));\n }\n\n setUser(user: UserInfo): void {\n this.safely(() => {\n const context = currentContext();\n if (!context) return;\n context.user = {\n ...(user.id !== undefined && user.id !== null ? { id: truncate(String(user.id), 200) } : {}),\n ...(user.email ? { email: truncate(String(user.email), 200) } : {}),\n ...(user.name ? { name: truncate(String(user.name), 200) } : {}),\n };\n });\n }\n\n async track<T>(name: string, fn: () => T | Promise<T>, data?: Attributes): Promise<T> {\n const execute = async (): Promise<T> => {\n const started = performance.now();\n try {\n const result = await fn();\n this.info(name, { ...data, durationMs: elapsedSince(started), ok: true });\n return result;\n } catch (error) {\n this.error(name, { ...data, durationMs: elapsedSince(started), ok: false });\n this.captureError(error, data);\n throw error;\n }\n };\n if (currentContext()) return execute();\n return runWithContext({ requestId: randomUUID(), startedAt: performance.now() }, execute);\n }\n\n withContext<T>(fn: () => T, options: { requestId?: string } = {}): T {\n return runWithContext({ requestId: requestIdFrom(options.requestId), startedAt: performance.now() }, fn);\n }\n\n async checkIn(slug: string, status: CheckInStatus, options: CheckInOptions = {}): Promise<void> {\n try {\n if (!this.transport || this.closed) return;\n if (typeof slug !== 'string' || !CHECKIN_SLUG.test(slug)) {\n this.debugWarn(`slug de tarefa agendada inválido: ${String(slug).slice(0, 80)}`);\n return;\n }\n if (!CHECKIN_STATUSES.includes(status)) return;\n const checkInId = typeof options.checkInId === 'string' && options.checkInId ? options.checkInId.slice(0, LIMITS.checkInIdLength) : undefined;\n const durationMs = typeof options.durationMs === 'number' && Number.isFinite(options.durationMs) && options.durationMs >= 0 ? Math.min(Math.round(options.durationMs), MAX_CHECK_IN_DURATION_MS) : undefined;\n const environment = this.options.environment.slice(0, MAX_CHECK_IN_ENVIRONMENT) || 'production';\n const release = this.options.release?.slice(0, MAX_CHECK_IN_RELEASE);\n const payload: CheckInPayload = {\n status,\n ...(checkInId ? { checkInId } : {}),\n ...(durationMs !== undefined ? { durationMs } : {}),\n environment,\n ...(release ? { release } : {}),\n };\n await this.transport.checkIn(slug, payload);\n } catch (error) {\n this.debugWarn(`check-in falhou: ${describeError(error)}`);\n }\n }\n\n async cron<T>(slug: string, fn: () => T | Promise<T>): Promise<T> {\n const checkInId = randomUUID();\n const started = performance.now();\n const execute = async (): Promise<T> => {\n await this.checkIn(slug, 'in_progress', { checkInId });\n try {\n const result = await fn();\n await this.checkIn(slug, 'ok', { checkInId, durationMs: elapsedSince(started) });\n return result;\n } catch (error) {\n this.captureError(error, { cron: slug });\n await this.checkIn(slug, 'error', { checkInId, durationMs: elapsedSince(started) });\n throw error;\n }\n };\n if (currentContext()) return execute();\n return this.withContext(execute);\n }\n\n middleware(): RadarMiddleware {\n return createMiddleware(this);\n }\n\n shouldLogRequest(req: RequestLike): boolean {\n return this.options.logRequests && !this.options.ignorePaths.includes(requestPath(req));\n }\n\n logHttpRequest(context: RadarContext, status: number): void {\n this.safely(() => {\n const req = context.req;\n if (!req) return;\n const level: LogLevel = status >= 500 ? 'error' : status >= 400 ? 'warn' : 'info';\n const route = requestRoute(req, context.route);\n runWithContext(context, () =>\n this.emitLog(level, 'http.request', {\n method: (req.method ?? 'GET').toUpperCase(),\n ...(route ? { route } : {}),\n ...(this.options.requestDetail === 'full' ? { path: redactPath(requestPath(req), pathParams(req, requestPath(req)), this.options.redact) } : {}),\n status,\n durationMs: elapsedSince(context.startedAt),\n }),\n );\n });\n }\n\n async flush(timeoutMs = 2000): Promise<void> {\n try {\n await this.transport?.flush(timeoutMs);\n } catch (error) {\n this.debugWarn(`flush falhou: ${describeError(error)}`);\n }\n }\n\n async close(timeoutMs = 2000): Promise<void> {\n if (this.closed) return;\n await this.flush(timeoutMs);\n this.restoreFetch?.();\n this.restoreFetch = null;\n this.closed = true;\n this.transport?.stop();\n }\n\n private emitLog(level: LogLevel, message: string, data: Attributes | undefined, extras: LogExtras = {}): void {\n if (this.closed || !levelEnabled(level, this.options.minLevel)) return;\n const context = currentContext();\n const mode = extras.mode ?? this.options.redact;\n const event: LogEvent = {\n type: 'log',\n ts: Date.now(),\n level,\n message: truncate(String(message), LIMITS.messageLength),\n ...(context ? { requestId: context.requestId } : {}),\n ...(data !== undefined ? { attrs: prepareAttrs(data, mode) } : {}),\n ...(extras.request ? { request: extras.request } : {}),\n ...(context?.user ? { user: context.user } : {}),\n };\n this.print(event);\n this.transport?.enqueue(event);\n }\n\n captureException(exception: ExceptionInfo, options: CaptureExceptionOptions = {}): void {\n this.safely(() => this.emitException(exception, options));\n }\n\n private emitError(error: unknown, data: Attributes | undefined, level: 'error' | 'fatal', handled: boolean): void {\n if (this.closed) return;\n if (typeof error === 'object' && error !== null) {\n if (this.captured.has(error)) return;\n this.captured.add(error);\n }\n this.emitException(exceptionInfo(error), { level, handled, ...(data !== undefined ? { attrs: data } : {}) }, error instanceof Error ? error.stack : undefined);\n }\n\n private emitException(exception: ExceptionInfo, options: CaptureExceptionOptions, stack?: string): void {\n if (this.closed) return;\n const context = currentContext();\n const mode = this.options.redact;\n const request = options.request === null ? undefined : (options.request ?? (context?.req ? requestInfo(context.req, mode, { route: context.route }, this.options.requestDetail) : undefined));\n const runtime = options.runtime === undefined ? runtimeInfo() : options.runtime;\n const event: ErrorEvent = {\n type: 'error',\n ts: Date.now(),\n level: options.level ?? 'error',\n handled: options.handled ?? true,\n exception,\n ...(context ? { requestId: context.requestId } : {}),\n ...(request ? { request } : {}),\n ...(context?.user ? { user: context.user } : {}),\n ...(runtime ? { runtime } : {}),\n ...(options.attrs !== undefined ? { attrs: prepareAttrs(options.attrs, mode) } : {}),\n };\n this.print(event, stack);\n if (!this.transport) return;\n this.transport.enqueue(() =>\n enrichException(event.exception, process.cwd(), options.enrich).then(\n (enriched) => ({ ...event, exception: enriched }),\n () => event,\n ),\n );\n }\n\n private print(event: RadarEvent, stack?: string): void {\n if (!this.options.console) return;\n try {\n const requestId = event.requestId ? { requestId: event.requestId } : {};\n if (event.type === 'log') {\n const line = { ...event.attrs, ts: new Date(event.ts).toISOString(), level: event.level, message: event.message, ...requestId };\n (event.level === 'error' ? process.stderr : process.stdout).write(`${JSON.stringify(line)}\\n`);\n return;\n }\n const line = {\n ...event.attrs,\n ts: new Date(event.ts).toISOString(),\n level: event.level,\n message: `${event.exception.type}: ${event.exception.message}`,\n ...requestId,\n ...(stack ? { stack } : {}),\n };\n process.stderr.write(`${JSON.stringify(line)}\\n`);\n } catch {\n return;\n }\n }\n\n private safely(action: () => void): void {\n try {\n action();\n } catch (error) {\n this.debugWarn(`falha interna do Radar: ${describeError(error)}`);\n }\n }\n\n private debugWarn(message: string): void {\n if (this.options.debug) this.writeWarning(message);\n }\n\n private writeWarning(message: string): void {\n try {\n process.stderr.write(`[radar] ${message}\\n`);\n } catch {\n return;\n }\n }\n}\n\nfunction runtimeInfo(): RuntimeInfo {\n return {\n name: 'node',\n version: process.versions.node,\n host: hostname(),\n pid: process.pid,\n memoryMb: Math.round(process.memoryUsage.rss() / 1_048_576),\n uptimeS: Math.round(process.uptime()),\n };\n}\n","import { performance } from 'node:perf_hooks';\nimport { requestIdFrom, runWithContext, type RadarContext, type RequestLike, type ResponseLike } from './context.js';\nimport { headerValue } from './request.js';\n\nexport type RequestLogger = {\n shouldLogRequest(req: RequestLike): boolean;\n logHttpRequest(context: RadarContext, status: number): void;\n};\n\nexport type RadarMiddleware = (req: RequestLike, res: ResponseLike, next: (error?: unknown) => void) => void;\n\nexport function createMiddleware(logger: RequestLogger): RadarMiddleware {\n return (req, res, next) => {\n let context: RadarContext;\n try {\n const requestId = requestIdFrom(headerValue(req.headers['x-request-id']));\n context = { requestId, startedAt: performance.now(), req };\n res.setHeader('x-request-id', requestId);\n if (logger.shouldLogRequest(req)) res.once('finish', () => logger.logHttpRequest(context, res.statusCode));\n } catch {\n next();\n return;\n }\n runWithContext(context, () => next());\n };\n}\n","import { createHash, createHmac, randomBytes } from 'node:crypto';\nimport type { RedactMode } from './options.js';\n\nconst SECRET_WORDS = new Set([\n 'pass',\n 'passwd',\n 'password',\n 'passwords',\n 'senha',\n 'secret',\n 'secrets',\n 'token',\n 'tokens',\n 'authorization',\n 'auth',\n 'cookie',\n 'cookies',\n 'apikey',\n 'privatekey',\n 'cpf',\n 'card',\n 'cvv',\n 'cvc',\n 'pin',\n 'otp',\n 'signature',\n 'jwt',\n 'session',\n 'sessionid',\n 'credential',\n 'credentials',\n]);\nconst SECRET_PAIRS = [\n ['api', 'key'],\n ['private', 'key'],\n ['access', 'key'],\n ['secret', 'key'],\n];\nconst LOW_ENTROPY_WORDS = new Set(['pass', 'passwd', 'password', 'passwords', 'senha', 'cpf', 'card', 'cvv', 'cvc', 'pin', 'otp']);\nconst CUSTOM_SECRET_HEADER = /^x-.+-(key|secret|token)$/i;\nconst AUTH_SCHEME = /^(Bearer|Basic|Token|Digest|ApiKey)\\s+/i;\nconst JWT_PREFIX = /^eyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\./;\nconst MAX_DEPTH = 8;\nconst KEY_SLOT = Symbol.for('@oconde/radar/fingerprint-key');\n\ntype FingerprintSlot = { key: Buffer };\n\nfunction fingerprintSlot(): FingerprintSlot {\n const holder = globalThis as unknown as Record<symbol, FingerprintSlot | undefined>;\n let slot = holder[KEY_SLOT];\n if (!slot) {\n slot = { key: randomBytes(32) };\n holder[KEY_SLOT] = slot;\n }\n return slot;\n}\n\nexport function setFingerprintSecret(secret: string | undefined): void {\n fingerprintSlot().key = secret ? createHash('sha256').update(`@oconde/radar:${secret}`).digest() : randomBytes(32);\n}\n\nexport function fingerprint(value: string): string {\n return createHmac('sha256', fingerprintSlot().key).update(value).digest('hex').slice(0, 8);\n}\n\nfunction words(name: string): string[] {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter(Boolean);\n}\n\nexport function isSensitiveKey(key: string): boolean {\n const parts = words(key);\n if (parts.length === 1 && parts[0] === 'key') return true;\n if (parts.some((part) => SECRET_WORDS.has(part))) return true;\n return SECRET_PAIRS.some(([first, second]) => parts.some((part, index) => part === first && parts[index + 1] === second));\n}\n\nexport function isLowEntropyKey(key: string): boolean {\n return words(key).some((part) => LOW_ENTROPY_WORDS.has(part));\n}\n\nexport function isSensitiveHeader(name: string): boolean {\n return isSensitiveKey(name) || CUSTOM_SECRET_HEADER.test(name);\n}\n\nexport function looksLikeCredential(value: string): boolean {\n const head = value.slice(0, 64);\n return AUTH_SCHEME.test(head.slice(0, 16)) || JWT_PREFIX.test(head);\n}\n\nexport function maskValue(value: unknown, revealEdges = true): string {\n const text = typeof value === 'string' ? value : (JSON.stringify(value) ?? String(value));\n const scheme = AUTH_SCHEME.exec(text.slice(0, 16));\n const prefix = scheme ? `${scheme[1]} ` : '';\n const secret = scheme ? text.slice(scheme[0].length) : text;\n const visible = revealEdges && secret.length > 12 ? `${secret.slice(0, 4)}…${secret.slice(-4)}` : '•••';\n return `${prefix}${visible} #${fingerprint(text)}`;\n}\n\nexport function redactDeep(value: unknown, mode: RedactMode, depth = 0): unknown {\n if (mode === 'none' || depth > MAX_DEPTH || value === null) return value;\n if (typeof value === 'string') return looksLikeCredential(value) ? maskValue(value) : value;\n if (typeof value !== 'object') return value;\n if (Array.isArray(value)) return value.map((item) => redactDeep(item, mode, depth + 1));\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n const hasValue = item !== null && item !== undefined && item !== '';\n result[key] = isSensitiveKey(key) && hasValue ? maskValue(item, !isLowEntropyKey(key)) : redactDeep(item, mode, depth + 1);\n }\n return result;\n}\n","import type { RedactMode } from './options.js';\nimport { LIMITS } from './protocol/index.js';\nimport { redactDeep } from './redact.js';\n\nexport const TRUNCATED = '…[cortado]';\nexport const LIMIT_REACHED = '…[limite]';\n\nconst MAX_NODES = 2000;\n\ntype Budget = { remaining: number };\n\nexport function truncate(value: string, max: number = LIMITS.stringLength): string {\n return value.length > max ? value.slice(0, max) + TRUNCATED : value;\n}\n\nexport function sanitize(value: unknown, depth = 0, seen: WeakSet<object> = new WeakSet(), budget: Budget = { remaining: MAX_NODES }): unknown {\n if (value === null || value === undefined) return value;\n budget.remaining -= 1;\n switch (typeof value) {\n case 'string':\n return truncate(value);\n case 'number':\n return Number.isFinite(value) ? value : String(value);\n case 'boolean':\n return value;\n case 'bigint':\n return value.toString();\n case 'function':\n case 'symbol':\n return undefined;\n }\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();\n if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) return `[binário ${value.byteLength} bytes]`;\n if (value instanceof Error) return { name: value.name, message: truncate(value.message) };\n const object = value as object;\n if (seen.has(object)) return '[circular]';\n if (depth >= LIMITS.depth) return '[profundidade]';\n if (budget.remaining <= 0) return LIMIT_REACHED;\n seen.add(object);\n try {\n if (Array.isArray(object)) {\n const items: unknown[] = [];\n for (const item of object.slice(0, LIMITS.arrayItems)) {\n if (budget.remaining <= 0) {\n items.push(LIMIT_REACHED);\n break;\n }\n items.push(sanitize(item, depth + 1, seen, budget) ?? null);\n }\n if (object.length > LIMITS.arrayItems) items.push(`…[mais ${object.length - LIMITS.arrayItems}]`);\n return items;\n }\n if (object instanceof Map) return sanitize(Object.fromEntries(object.entries()), depth + 1, seen, budget);\n if (object instanceof Set) return sanitize([...object], depth + 1, seen, budget);\n const result: Record<string, unknown> = {};\n for (const key in object) {\n if (!Object.prototype.hasOwnProperty.call(object, key)) continue;\n if (budget.remaining <= 0) {\n result['…'] = LIMIT_REACHED;\n break;\n }\n const clean = sanitize((object as Record<string, unknown>)[key], depth + 1, seen, budget);\n if (clean !== undefined) result[key] = clean;\n }\n return result;\n } finally {\n seen.delete(object);\n }\n}\n\nexport function limitBytes(value: unknown, maxBytes: number): unknown {\n const json = JSON.stringify(value);\n if (json === undefined || Buffer.byteLength(json) <= maxBytes) return value;\n return { _truncated: truncate(json, maxBytes) };\n}\n\nexport function prepareAttrs(data: unknown, mode: RedactMode): Record<string, unknown> {\n const clean = redactDeep(sanitize(data), mode);\n const record = isRecord(clean) ? clean : { value: clean };\n return limitBytes(record, LIMITS.attrsBytes) as Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import type { HeaderValue, RequestLike } from './context.js';\nimport type { RedactMode, RequestDetail } from './options.js';\nimport { LIMITS, type RequestInfo } from './protocol/index.js';\nimport { isLowEntropyKey, isSensitiveHeader, isSensitiveKey, looksLikeCredential, maskValue, redactDeep } from './redact.js';\nimport { limitBytes, sanitize, truncate } from './serialize.js';\n\nexport function headerValue(value: HeaderValue): string | undefined {\n if (value === undefined) return undefined;\n return Array.isArray(value) ? value.join(', ') : String(value);\n}\n\nexport function requestHeaders(headers: Record<string, HeaderValue>, mode: RedactMode): Record<string, string> {\n const result: Record<string, string> = {};\n let count = 0;\n for (const [name, raw] of Object.entries(headers)) {\n const value = headerValue(raw);\n if (value === undefined) continue;\n if (count >= LIMITS.headers) break;\n const key = name.toLowerCase();\n result[key] = mode === 'mask' && (isSensitiveHeader(key) || looksLikeCredential(value)) ? maskValue(value) : truncate(value);\n count++;\n }\n return result;\n}\n\nexport function requestPath(req: RequestLike): string {\n const url = req.originalUrl ?? req.url ?? '';\n const end = url.indexOf('?');\n return end >= 0 ? url.slice(0, end) : url;\n}\n\nexport function requestRoute(req: RequestLike, route?: string): string | undefined {\n if (route) return route;\n if (typeof req.route?.path !== 'string') return undefined;\n const base = typeof req.baseUrl === 'string' ? req.baseUrl.replace(/\\/+$/, '') : '';\n if (!base) return req.route.path;\n return req.route.path === '/' ? base : `${base}${req.route.path}`;\n}\n\nconst ROUTE_PARAM = /^:([A-Za-z_$][\\w$]*)/;\n\nfunction pathSegments(value: string): string[] {\n const segments = value.split('/');\n while (segments.length > 1 && segments[segments.length - 1] === '') segments.pop();\n return segments;\n}\n\nfunction decodeSegment(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nexport function routeParams(req: RequestLike, path: string): Record<string, string> {\n if (typeof req.route?.path !== 'string') return {};\n const pattern = pathSegments(`${typeof req.baseUrl === 'string' ? req.baseUrl : ''}${req.route.path}`).filter((segment, index) => index > 0 || segment !== '');\n const values = pathSegments(path);\n if (pattern.length > values.length) return {};\n const offset = values.length - pattern.length;\n const result: Record<string, string> = {};\n for (let index = 0; index < pattern.length; index++) {\n const value = values[offset + index];\n const param = ROUTE_PARAM.exec(pattern[index]);\n if (!param) {\n if (pattern[index] !== value) return {};\n continue;\n }\n if (value) result[param[1]] = decodeSegment(value);\n }\n return result;\n}\n\nexport function pathParams(req: RequestLike, path: string): Record<string, unknown> {\n return { ...routeParams(req, path), ...(req.params ?? {}) };\n}\n\nexport function redactPath(path: string, params: Record<string, unknown> | undefined, mode: RedactMode): string {\n if (mode === 'none' || !params) return path;\n let result = path;\n for (const [key, value] of Object.entries(params)) {\n if (typeof value !== 'string' || value.length < 4 || !isSensitiveKey(key)) continue;\n const masked = maskValue(value, !isLowEntropyKey(key));\n for (const form of new Set([value, encodeURIComponent(value)])) result = result.split(form).join(masked);\n }\n return result;\n}\n\nexport function safeUrl(req: RequestLike, mode: RedactMode): string {\n const url = req.originalUrl ?? req.url ?? '';\n const queryStart = url.indexOf('?');\n const path = queryStart >= 0 ? url.slice(0, queryStart) : url;\n const query = queryStart >= 0 ? url.slice(queryStart) : '';\n return redactUrl(redactPath(path, pathParams(req, path), mode) + query, mode);\n}\n\nexport function redactUrl(url: string, mode: RedactMode): string {\n const queryStart = url.indexOf('?');\n if (mode === 'none' || queryStart < 0) return url;\n const params = new URLSearchParams(url.slice(queryStart + 1));\n let changed = false;\n for (const [key, value] of [...params.entries()]) {\n if (isSensitiveKey(key) && value !== '') {\n params.set(key, maskValue(value, !isLowEntropyKey(key)));\n changed = true;\n }\n }\n return changed ? `${url.slice(0, queryStart)}?${params.toString()}` : url;\n}\n\nexport function requestInfo(req: RequestLike, mode: RedactMode, extra: { route?: string; status?: number; durationMs?: number } = {}, detail: RequestDetail = 'full'): RequestInfo {\n const route = requestRoute(req, extra.route);\n if (detail === 'route') {\n return {\n method: (req.method ?? 'GET').toUpperCase(),\n url: route ?? '',\n ...(route ? { route } : {}),\n ...(extra.status !== undefined ? { status: extra.status } : {}),\n ...(extra.durationMs !== undefined ? { durationMs: extra.durationMs } : {}),\n };\n }\n const params = prepareRecord(req.params, mode) as Record<string, string> | undefined;\n const query = prepareRecord(req.query, mode);\n const body = prepareBody(req.body, mode);\n const userAgent = headerValue(req.headers['user-agent']);\n const ip = req.ip ?? req.socket?.remoteAddress;\n return {\n method: (req.method ?? 'GET').toUpperCase(),\n url: truncate(safeUrl(req, mode)),\n ...(route ? { route } : {}),\n ...(params ? { params } : {}),\n ...(query ? { query } : {}),\n headers: requestHeaders(req.headers, mode),\n ...(body !== undefined ? { body } : {}),\n ...(ip ? { ip } : {}),\n ...(userAgent ? { userAgent: truncate(userAgent, 500) } : {}),\n ...(extra.status !== undefined ? { status: extra.status } : {}),\n ...(extra.durationMs !== undefined ? { durationMs: extra.durationMs } : {}),\n };\n}\n\nfunction isEmptyRecord(value: unknown): boolean {\n return typeof value === 'object' && value !== null && !Array.isArray(value) && Object.keys(value).length === 0;\n}\n\nfunction prepareRecord(value: unknown, mode: RedactMode): Record<string, unknown> | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const clean = prepare(value, mode);\n return isEmptyRecord(clean) || typeof clean !== 'object' || clean === null ? undefined : (clean as Record<string, unknown>);\n}\n\nfunction prepare(value: unknown, mode: RedactMode): unknown {\n return redactDeep(sanitize(value), mode);\n}\n\nfunction prepareBody(body: unknown, mode: RedactMode): unknown {\n if (body === undefined || body === null || body === '') return undefined;\n const clean = prepare(body, mode);\n if (isEmptyRecord(clean)) return undefined;\n return limitBytes(clean, LIMITS.bodyBytes);\n}\n","import type { LogLevel } from './protocol/index.js';\n\nexport type RedactMode = 'mask' | 'none';\nexport type RequestDetail = 'full' | 'route';\nexport type FetchTraceTarget = string | RegExp;\nexport type TraceFetchOption = boolean | { propagateTo?: FetchTraceTarget[] };\nexport type ResolvedTraceFetch = { enabled: boolean; propagateTo: FetchTraceTarget[] };\n\nexport type RadarOptions = {\n key?: string;\n endpoint?: string;\n environment?: string;\n release?: string;\n enabled?: boolean;\n console?: boolean;\n minLevel?: LogLevel;\n redact?: RedactMode;\n requestDetail?: RequestDetail;\n logRequests?: boolean;\n ignorePaths?: string[];\n captureUnhandled?: boolean;\n traceFetch?: TraceFetchOption;\n debug?: boolean;\n};\n\nexport type ResolvedOptions = {\n key: string | undefined;\n endpoint: string;\n environment: string;\n release: string | undefined;\n enabled: boolean;\n console: boolean;\n minLevel: LogLevel;\n redact: RedactMode;\n requestDetail: RequestDetail;\n logRequests: boolean;\n ignorePaths: string[];\n captureUnhandled: boolean;\n traceFetch: ResolvedTraceFetch;\n debug: boolean;\n};\n\nexport const DEFAULT_ENDPOINT = 'https://radar-ingest.oconde.dev';\n\nconst LEVELS: LogLevel[] = ['debug', 'info', 'warn', 'error'];\n\nfunction resolveTraceFetch(value: TraceFetchOption | undefined): ResolvedTraceFetch {\n if (!value) return { enabled: false, propagateTo: [] };\n if (value === true) return { enabled: true, propagateTo: [] };\n const targets = Array.isArray(value.propagateTo) ? value.propagateTo : [];\n return { enabled: true, propagateTo: targets.filter((target) => (typeof target === 'string' ? target.trim() !== '' : target instanceof RegExp)) };\n}\n\nexport function resolveOptions(options: RadarOptions = {}, env: NodeJS.ProcessEnv = process.env): ResolvedOptions {\n const key = options.key?.trim() || undefined;\n return {\n key,\n endpoint: (options.endpoint ?? DEFAULT_ENDPOINT).replace(/\\/+$/, ''),\n environment: options.environment ?? env.NODE_ENV ?? 'production',\n release: options.release || undefined,\n enabled: options.enabled ?? Boolean(key),\n console: options.console ?? false,\n minLevel: options.minLevel && LEVELS.includes(options.minLevel) ? options.minLevel : 'info',\n redact: options.redact === 'none' ? 'none' : 'mask',\n requestDetail: options.requestDetail === 'route' ? 'route' : 'full',\n logRequests: options.logRequests ?? true,\n ignorePaths: options.ignorePaths ?? ['/healthz', '/health'],\n captureUnhandled: options.captureUnhandled ?? true,\n traceFetch: resolveTraceFetch(options.traceFetch),\n debug: options.debug ?? false,\n };\n}\n\nexport function levelEnabled(level: LogLevel, minLevel: LogLevel): boolean {\n return LEVELS.indexOf(level) >= LEVELS.indexOf(minLevel);\n}\n","import { inspect } from 'node:util';\n\nexport type UnhandledCapturer = {\n captureUnhandled(error: unknown, level: 'error' | 'fatal'): void;\n flush(timeoutMs?: number): Promise<void>;\n};\n\nconst INSTALLED = Symbol.for('@oconde/radar/process-handlers');\nconst MODE_FLAG = /^--unhandled-rejections=(\\S+)$/;\n\nexport function unhandledRejectionsMode(execArgv: string[] = process.execArgv, nodeOptions: string = process.env.NODE_OPTIONS ?? ''): string {\n for (const arg of [...nodeOptions.split(/\\s+/), ...execArgv]) {\n const match = MODE_FLAG.exec(arg);\n if (match?.[1]) return match[1];\n }\n return 'throw';\n}\n\nexport function asUncaught(reason: unknown): unknown {\n if (reason instanceof Error) return reason;\n const error = new Error(\n `This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason \"${inspect(reason)}\".`,\n ) as Error & { code: string };\n error.code = 'ERR_UNHANDLED_REJECTION';\n return error;\n}\n\nexport function installProcessHandlers(capturer: UnhandledCapturer): void {\n const holder = process as unknown as Record<symbol, boolean | undefined>;\n if (holder[INSTALLED]) return;\n holder[INSTALLED] = true;\n\n process.on('unhandledRejection', (reason) => {\n const mode = unhandledRejectionsMode();\n const othersListen = process.listenerCount('unhandledRejection') > 1;\n if (othersListen || mode !== 'throw') {\n capturer.captureUnhandled(reason, 'error');\n if (!othersListen && mode === 'warn-with-error-code') process.exitCode = 1;\n return;\n }\n const uncaught = asUncaught(reason);\n setImmediate(() => {\n throw uncaught;\n });\n });\n\n process.on('uncaughtException', (error) => {\n capturer.captureUnhandled(error, 'fatal');\n if (process.listenerCount('uncaughtException') > 1) return;\n try {\n process.stderr.write(`${inspect(error)}\\n`);\n } catch {\n process.exitCode = 1;\n }\n void capturer.flush(2000).finally(() => process.exit(1));\n });\n}\n","import { readFile, stat } from 'node:fs/promises';\nimport { SourceMap } from 'node:module';\nimport { dirname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { enclosingFunctionName } from './function-name.js';\nimport { LIMITS, type ExceptionInfo, type StackFrame } from './protocol/index.js';\n\nconst MAX_FILE_BYTES = 2 * 1024 * 1024;\nconst MAX_CACHED_FILES = 50;\nconst MAPPING_URL = /\\/\\/[#@]\\s*sourceMappingURL=(\\S+)\\s*$/;\n\ntype LoadedMap = { map: SourceMap; baseDir: string; sources: string[]; contents: (string | null)[]; lines: Map<number, string[]> };\ntype LoadedFile = { lines: string[]; map: LoadedMap | null };\ntype MappedFrame = { frame: StackFrame; lines: string[] | null; original: boolean };\ntype MapPayload = { sources?: string[]; sourcesContent?: (string | null)[]; sourceRoot?: string };\ntype MapEntry = { originalSource?: string; originalLine?: number; originalColumn?: number };\n\nexport type MapLocator = (file: string) => string | null;\nexport type EnrichOptions = { mapLocator?: MapLocator; inferFunctionNames?: boolean };\n\nconst cache = new Map<string, Promise<LoadedFile | null>>();\n\nexport function clearSourceCache(): void {\n cache.clear();\n}\n\nexport async function enrichFrames(frames: StackFrame[], cwd: string = process.cwd(), options: EnrichOptions = {}): Promise<StackFrame[]> {\n const result: StackFrame[] = [];\n let withContext = 0;\n for (const frame of frames) {\n try {\n const { frame: located, lines, original } = await mapFrame(frame, options.mapLocator);\n const named = options.inferFunctionNames && original && !located.fn && lines && located.line ? withInferredName(located, lines) : located;\n const mapped = named.inApp && isLibraryPath(named.file) ? { ...named, inApp: false } : named;\n let next = mapped;\n if (mapped.inApp && lines && mapped.line && withContext < LIMITS.contextFrames) {\n const context = contextFor(lines, mapped.line);\n if (context) {\n next = { ...mapped, context };\n withContext++;\n }\n }\n result.push({ ...next, file: relativize(next.file, cwd) });\n } catch {\n result.push({ ...frame, file: relativize(frame.file, cwd) });\n }\n }\n return result;\n}\n\nexport async function enrichException(exception: ExceptionInfo, cwd: string = process.cwd(), options: EnrichOptions = {}): Promise<ExceptionInfo> {\n const frames = await enrichFrames(exception.frames, cwd, options);\n if (!exception.cause) return { ...exception, frames };\n return { ...exception, frames, cause: await enrichException(exception.cause, cwd, options) };\n}\n\nfunction withInferredName(frame: StackFrame, lines: string[]): StackFrame {\n const fn = enclosingFunctionName(lines, frame.line ?? 0, frame.col);\n return fn ? { ...frame, fn } : frame;\n}\n\nfunction isLibraryPath(file: string): boolean {\n return file.includes('/node_modules/') || file.includes('\\\\node_modules\\\\');\n}\n\nexport function relativize(file: string, cwd: string): string {\n if (!isAbsolute(file)) return file;\n const path = relative(cwd, file);\n return path.startsWith('..') || isAbsolute(path) ? file : path.split(sep).join('/');\n}\n\nasync function mapFrame(frame: StackFrame, locator?: MapLocator): Promise<MappedFrame> {\n if (!frame.line || !isAbsolute(frame.file)) return { frame, lines: null, original: false };\n const file = await loadFile(frame.file, locator);\n if (!file) return { frame, lines: null, original: false };\n if (!file.map) return { frame, lines: file.lines, original: false };\n const entry = file.map.map.findEntry(frame.line - 1, (frame.col ?? 1) - 1) as MapEntry;\n if (typeof entry.originalSource !== 'string' || typeof entry.originalLine !== 'number') return { frame, lines: file.lines, original: false };\n const originalPath = resolveSource(file.map, entry.originalSource);\n const mapped: StackFrame = { ...frame, file: originalPath, line: entry.originalLine + 1, col: (entry.originalColumn ?? 0) + 1 };\n const lines = embeddedLines(file.map, file.map.sources.indexOf(entry.originalSource));\n if (lines) return { frame: mapped, lines, original: true };\n const original = await loadFile(originalPath);\n return { frame: mapped, lines: original?.lines ?? null, original: true };\n}\n\nfunction embeddedLines(map: LoadedMap, index: number): string[] | null {\n if (index < 0) return null;\n const cached = map.lines.get(index);\n if (cached) return cached;\n const content = map.contents[index];\n if (typeof content !== 'string') return null;\n const lines = content.split(/\\r?\\n/);\n map.lines.set(index, lines);\n return lines;\n}\n\nfunction contextFor(lines: string[], line: number): StackFrame['context'] {\n const index = line - 1;\n if (index < 0 || index >= lines.length) return undefined;\n const clip = (text: string) => (text.length > LIMITS.contextLineLength ? `${text.slice(0, LIMITS.contextLineLength)}…` : text);\n return {\n pre: lines.slice(Math.max(0, index - LIMITS.contextLines), index).map(clip),\n line: clip(lines[index] ?? ''),\n post: lines.slice(index + 1, index + 1 + LIMITS.contextLines).map(clip),\n };\n}\n\nfunction resolveSource(map: LoadedMap, source: string): string {\n if (source.startsWith('file://')) {\n try {\n return fileURLToPath(source);\n } catch {\n return source;\n }\n }\n return isAbsolute(source) ? source : resolve(map.baseDir, source);\n}\n\nfunction loadFile(path: string, locator?: MapLocator): Promise<LoadedFile | null> {\n const key = locator ? `${path}\\u0000located` : path;\n const cached = cache.get(key);\n if (cached) {\n cache.delete(key);\n cache.set(key, cached);\n return cached;\n }\n const pending = readSource(path, locator).catch(() => null);\n cache.set(key, pending);\n if (cache.size > MAX_CACHED_FILES) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) cache.delete(oldest);\n }\n return pending;\n}\n\nasync function readSource(path: string, locator?: MapLocator): Promise<LoadedFile | null> {\n const text = await readText(path);\n if (text === null) return null;\n const lines = text.split(/\\r?\\n/);\n return { lines, map: await loadMap(path, lines, locator) };\n}\n\nasync function readText(path: string): Promise<string | null> {\n try {\n const info = await stat(path);\n if (!info.isFile() || info.size > MAX_FILE_BYTES) return null;\n return await readFile(path, 'utf8');\n } catch {\n return null;\n }\n}\n\nasync function loadMap(path: string, lines: string[], locator?: MapLocator): Promise<LoadedMap | null> {\n let url: string | undefined;\n for (let index = lines.length - 1; index >= 0 && index >= lines.length - 5; index--) {\n const match = MAPPING_URL.exec(lines[index] ?? '');\n if (match) {\n url = match[1];\n break;\n }\n }\n let raw: string | null;\n let mapDir: string;\n const located = url ? null : locator ? locator(path) : `${path}.map`;\n if (located) {\n raw = await readText(located);\n mapDir = dirname(located);\n } else if (!url) {\n return null;\n } else if (url.startsWith('data:')) {\n const comma = url.indexOf(',');\n const encoded = url.slice(comma + 1);\n raw = url.slice(0, comma).endsWith(';base64') ? Buffer.from(encoded, 'base64').toString('utf8') : decodeURIComponent(encoded);\n mapDir = dirname(path);\n } else {\n const mapPath = url.startsWith('file://') ? fileURLToPath(url) : resolve(dirname(path), decodeURIComponent(url));\n raw = await readText(mapPath);\n mapDir = dirname(mapPath);\n }\n if (!raw) return null;\n try {\n const payload = JSON.parse(raw) as MapPayload;\n return {\n map: new SourceMap(payload as ConstructorParameters<typeof SourceMap>[0]),\n baseDir: resolve(mapDir, payload.sourceRoot ?? ''),\n sources: payload.sources ?? [],\n contents: payload.sourcesContent ?? [],\n lines: new Map(),\n };\n } catch {\n return null;\n }\n}\n","const IDENTIFIER = '[A-Za-z_$][\\\\w$]*';\nconst MAX_LINES_UP = 400;\nconst MAX_HEADER_LINES = 6;\nconst MAX_NAME_LENGTH = 100;\nconst MAX_COMMENT_LINES = 40;\nconst CONTROL_BLOCK = /^\\s*(?:\\}\\s*)?(?:if|else|for|while|do|switch|try|catch|finally|with)\\b/;\nconst CLASS_BODY = new RegExp(`\\\\bclass\\\\s+${IDENTIFIER}`);\nconst MARKUP_BOUNDARY = /<\\/?(?:script|style|template)\\b/i;\nconst KEYWORDS = new Set(['if', 'for', 'while', 'switch', 'catch', 'function', 'return', 'new', 'typeof', 'await', 'else', 'do', 'try']);\nconst NAME_PATTERNS = [\n new RegExp(`\\\\bfunction\\\\s*\\\\*?\\\\s*(${IDENTIFIER})\\\\s*\\\\(`),\n new RegExp(`(${IDENTIFIER})\\\\s*[:=]\\\\s*(?:async\\\\s+)?function\\\\b`),\n new RegExp(`(${IDENTIFIER})\\\\s*(?::\\\\s*[^=]+)?=\\\\s*(?:async\\\\s+)?(?:\\\\([^]*\\\\)|${IDENTIFIER})\\\\s*(?::\\\\s*[^=]+)?=>\\\\s*$`),\n new RegExp(`(?:^|[{,(]\\\\s*)(${IDENTIFIER})\\\\s*:\\\\s*(?:async\\\\s+)?(?:\\\\([^]*\\\\)|${IDENTIFIER})\\\\s*(?::\\\\s*[^=]+)?=>\\\\s*$`),\n];\nconst METHOD_PATTERN = new RegExp(`^\\\\s*(?:(?:export|default|public|private|protected|static|async|override|readonly|get|set)\\\\s+)*\\\\*?\\\\s*(${IDENTIFIER})\\\\s*(?:<[^>]*>)?\\\\s*\\\\([^]*\\\\)\\\\s*(?::\\\\s*[^{]+)?$`);\nconst ANONYMOUS_FUNCTION = /\\bfunction\\b|=>/;\n\nconst STRING_LITERAL = /([\"'`])(?:\\\\.|(?!\\1)[^\\\\])*\\1/g;\n\nfunction lineCommentAt(text: string, from: number): number {\n for (let index = text.indexOf('//', from); index >= 0; index = text.indexOf('//', index + 1)) {\n if (index === 0 || text[index - 1] !== ':') return index;\n }\n return -1;\n}\n\nfunction blockCommentAt(text: string, from: number): number {\n for (let index = text.indexOf('/*', from); index >= 0; index = text.indexOf('/*', index + 1)) {\n if (index === 0 || text[index - 1] !== '\\\\') return index;\n }\n return -1;\n}\n\nfunction stripComments(text: string, insideComment: boolean, closesLater: () => boolean): { code: string; insideComment: boolean } {\n let code = '';\n let position = 0;\n let inside = insideComment;\n while (position < text.length) {\n if (inside) {\n const end = text.indexOf('*/', position);\n if (end < 0) return { code, insideComment: true };\n inside = false;\n position = end + 2;\n continue;\n }\n const block = blockCommentAt(text, position);\n const line = lineCommentAt(text, position);\n if (line >= 0 && (block < 0 || line < block)) return { code: code + text.slice(position, line), insideComment: false };\n if (block < 0) return { code: code + text.slice(position), insideComment: false };\n if (text.indexOf('*/', block + 2) < 0 && !closesLater()) {\n code += text.slice(position, block + 2);\n position = block + 2;\n continue;\n }\n code += text.slice(position, block);\n inside = true;\n position = block + 2;\n }\n return { code, insideComment: inside };\n}\n\nfunction codeLines(lines: string[], from: number, start: number, column: number | undefined): string[] {\n const plain = lines.slice(from, start + 1).map((line) => line.replace(STRING_LITERAL, '\"\"'));\n const closesWithin = (index: number) => plain.slice(index + 1, index + 1 + MAX_COMMENT_LINES).some((line) => line.includes('*/'));\n const result: string[] = [];\n let insideComment = false;\n for (let index = 0; index < plain.length; index++) {\n const text = index === plain.length - 1 && column ? (lines[start] ?? '').slice(0, Math.max(0, column - 1)).replace(STRING_LITERAL, '\"\"') : (plain[index] ?? '');\n const stripped = stripComments(text, insideComment, () => closesWithin(index));\n insideComment = stripped.insideComment;\n result.push(stripped.code);\n }\n return result;\n}\n\nfunction parenBalance(text: string): number {\n let balance = 0;\n for (const char of text) {\n if (char === '(') balance += 1;\n else if (char === ')') balance -= 1;\n }\n return balance;\n}\n\nfunction headerOf(code: string[], index: number, prefix: string): string {\n let header = prefix;\n for (let previous = index - 1; previous >= 0 && previous >= index - MAX_HEADER_LINES; previous--) {\n if (header.trim() !== '' && parenBalance(header) >= 0) break;\n header = `${code[previous] ?? ''} ${header}`;\n }\n return header;\n}\n\nfunction nameIn(header: string): string | undefined {\n const patterns = ANONYMOUS_FUNCTION.test(header) ? NAME_PATTERNS : [...NAME_PATTERNS, METHOD_PATTERN];\n for (const pattern of patterns) {\n const name = pattern.exec(header)?.[1];\n if (name && !KEYWORDS.has(name)) return name.slice(0, MAX_NAME_LENGTH);\n }\n return undefined;\n}\n\nexport function enclosingFunctionName(lines: string[], line: number, column?: number): string | undefined {\n const start = line - 1;\n if (start < 0 || start >= lines.length) return undefined;\n const from = Math.max(0, start - MAX_LINES_UP - MAX_HEADER_LINES);\n const cleaned = codeLines(lines, from, start, column);\n let depth = 0;\n for (let index = start; index >= 0 && index >= start - MAX_LINES_UP; index--) {\n if (index < start && MARKUP_BOUNDARY.test(lines[index] ?? '')) return undefined;\n const code = cleaned[index - from] ?? '';\n for (let position = code.length - 1; position >= 0; position--) {\n const char = code[position];\n if (char === '}') {\n depth += 1;\n } else if (char === '{') {\n if (depth > 0) {\n depth -= 1;\n continue;\n }\n const header = headerOf(cleaned, index - from, code.slice(0, position));\n if (CLASS_BODY.test(header)) return undefined;\n if (CONTROL_BLOCK.test(header)) continue;\n const name = nameIn(header);\n if (name) return name;\n }\n }\n }\n return undefined;\n}\n","import { fileURLToPath } from 'node:url';\nimport { LIMITS, type ExceptionInfo, type StackFrame } from './protocol/index.js';\nimport { truncate } from './serialize.js';\n\nconst WITH_FUNCTION = /^at (?:async )?(.+?) \\((.+)\\)$/;\nconst LOCATION = /^(.+):(\\d+):(\\d+)$/;\nconst AT_SIGN_FRAME = /^(.*?)@(.+):(\\d+):(\\d+)$/;\nconst MAX_FRAME_LINE = 1000;\n\nexport function parseStack(stack: string | undefined): StackFrame[] {\n if (!stack) return [];\n const frames: StackFrame[] = [];\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (line.length > MAX_FRAME_LINE || !line.startsWith('at ')) continue;\n const withFunction = WITH_FUNCTION.exec(line);\n const fn = withFunction?.[1];\n const location = withFunction ? (withFunction[2] ?? '') : line.replace(/^at (?:async )?/, '');\n const parsed = LOCATION.exec(location);\n if (parsed) {\n const file = toPath(parsed[1] ?? '');\n frames.push({ ...(fn ? { fn } : {}), file, line: Number(parsed[2]), col: Number(parsed[3]), inApp: isInApp(file) });\n } else {\n frames.push({ ...(fn ? { fn } : {}), file: location, inApp: false });\n }\n if (frames.length >= LIMITS.frames) break;\n }\n return frames;\n}\n\nexport function parseBrowserStack(stack: string | undefined): StackFrame[] {\n if (!stack) return [];\n const frames: StackFrame[] = [];\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (line.length > MAX_FRAME_LINE) continue;\n if (line.startsWith('at ')) {\n const withFunction = WITH_FUNCTION.exec(line);\n const fn = withFunction?.[1];\n const location = withFunction ? (withFunction[2] ?? '') : line.replace(/^at (?:async )?/, '');\n const parsed = LOCATION.exec(location);\n frames.push(parsed ? { ...(fn ? { fn } : {}), file: parsed[1] ?? '', line: Number(parsed[2]), col: Number(parsed[3]), inApp: false } : { ...(fn ? { fn } : {}), file: location, inApp: false });\n } else {\n const parsed = AT_SIGN_FRAME.exec(line);\n if (!parsed) continue;\n const fn = parsed[1];\n frames.push({ ...(fn ? { fn } : {}), file: parsed[2] ?? '', line: Number(parsed[3]), col: Number(parsed[4]), inApp: false });\n }\n if (frames.length >= LIMITS.frames) break;\n }\n return frames;\n}\n\nexport function isInApp(file: string): boolean {\n if (file.includes('/node_modules/') || file.includes('\\\\node_modules\\\\')) return false;\n if (file.startsWith('node:') || file.startsWith('internal/')) return false;\n return file.startsWith('/') || /^[A-Za-z]:[\\\\/]/.test(file);\n}\n\nexport function exceptionInfo(error: unknown, depth = 0): ExceptionInfo {\n if (error instanceof Error) {\n const info: ExceptionInfo = {\n type: errorType(error),\n message: truncate(error.message ?? '', LIMITS.messageLength),\n frames: parseStack(error.stack),\n };\n const cause = (error as Error & { cause?: unknown }).cause;\n if (cause !== undefined && cause !== null && depth < LIMITS.causeDepth) info.cause = exceptionInfo(cause, depth + 1);\n return info;\n }\n if (typeof error === 'object' && error !== null) {\n const record = error as Record<string, unknown>;\n const message = typeof record.message === 'string' ? record.message : safeStringify(error);\n return { type: typeof record.name === 'string' ? record.name : 'Object', message: truncate(message, LIMITS.messageLength), frames: [] };\n }\n return { type: 'Error', message: truncate(String(error), LIMITS.messageLength), frames: [] };\n}\n\nfunction toPath(location: string): string {\n if (!location.startsWith('file://')) return location;\n try {\n return fileURLToPath(location);\n } catch {\n return location;\n }\n}\n\nfunction errorType(error: Error): string {\n if (error.name && error.name !== 'Error') return error.name;\n const constructorName = error.constructor?.name;\n return constructorName && constructorName !== 'Object' ? constructorName : 'Error';\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n","import { performance } from 'node:perf_hooks';\n\nexport function describeError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function elapsedSince(startedAt: number): number {\n return Math.round(performance.now() - startedAt);\n}\n","import { currentContext } from './context.js';\nimport type { FetchTraceTarget, RedactMode } from './options.js';\nimport type { LogLevel } from './protocol/index.js';\nimport { looksLikeCredential, maskValue } from './redact.js';\nimport { describeError, elapsedSince } from './util.js';\n\nexport type FetchTraceConfig = {\n endpoint: string;\n propagateTo: FetchTraceTarget[];\n redact: RedactMode;\n record: (level: LogLevel, attrs: Record<string, unknown>) => void;\n};\n\ntype FetchInput = Parameters<typeof fetch>[0];\ntype FetchInit = Parameters<typeof fetch>[1];\n\nconst WRAPPED = Symbol.for('@oconde/radar.fetch');\nconst REQUEST_ID_HEADER = 'x-request-id';\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst TELEGRAM_BOT = /^bot\\d{5,}:[\\w-]{20,}$/;\nconst TOKEN_LIKE = /^[\\w\\-.~+=]{20,}$/;\n\nfunction secretSegment(segment: string): boolean {\n if (UUID.test(segment)) return false;\n if (TELEGRAM_BOT.test(segment) || looksLikeCredential(segment)) return true;\n return TOKEN_LIKE.test(segment) && /[A-Za-z]/.test(segment) && /\\d/.test(segment);\n}\n\nexport function outboundPath(pathname: string, mode: RedactMode): string {\n if (mode === 'none') return pathname;\n return pathname\n .split('/')\n .map((segment) => {\n let decoded = segment;\n try {\n decoded = decodeURIComponent(segment);\n } catch {\n decoded = segment;\n }\n return secretSegment(decoded) ? maskValue(decoded, false) : segment;\n })\n .join('/');\n}\n\nfunction failureOf(error: unknown): string {\n const message = describeError(error);\n const cause = error instanceof Error ? (error.cause as { code?: unknown; message?: unknown } | undefined) : undefined;\n const detail = typeof cause?.code === 'string' ? cause.code : typeof cause?.message === 'string' ? cause.message : '';\n return detail && !message.includes(detail) ? `${message} (${detail})` : message;\n}\n\nfunction urlOf(input: FetchInput): URL | null {\n try {\n if (typeof input === 'string') return new URL(input);\n if (input instanceof URL) return input;\n return new URL(input.url);\n } catch {\n return null;\n }\n}\n\nfunction originOf(value: string): string | null {\n try {\n return new URL(value).origin;\n } catch {\n return null;\n }\n}\n\nfunction targets(url: URL, target: FetchTraceTarget): boolean {\n if (target instanceof RegExp) return target.test(url.host);\n const wanted = target.trim().toLowerCase();\n if (wanted.startsWith('.')) return url.hostname.toLowerCase().endsWith(wanted);\n return url.host.toLowerCase() === wanted || url.hostname.toLowerCase() === wanted;\n}\n\nfunction isPlainObject(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction withRequestId(input: FetchInput, init: FetchInit, requestId: string): [FetchInput, FetchInit] {\n const headers = new Headers(init?.headers ?? (input instanceof Request ? input.headers : undefined));\n if (headers.has(REQUEST_ID_HEADER)) return [input, init];\n headers.set(REQUEST_ID_HEADER, requestId);\n if (init === undefined || isPlainObject(init)) return [input, { ...init, headers }];\n return [new Request(input, init), { headers }];\n}\n\nexport function traceFetch(config: FetchTraceConfig): () => void {\n const current = globalThis.fetch as (typeof fetch & { [WRAPPED]?: typeof fetch }) | undefined;\n if (typeof current !== 'function' || current[WRAPPED]) return () => undefined;\n const original = current;\n const radarOrigin = originOf(config.endpoint);\n const traced = async (input: FetchInput, init?: FetchInit): Promise<Response> => {\n const url = urlOf(input);\n if (!url || url.origin === radarOrigin || (url.protocol !== 'http:' && url.protocol !== 'https:')) return original(input, init);\n const method = (init?.method ?? (input instanceof Request ? input.method : 'GET')).toUpperCase();\n const context = currentContext();\n const [nextInput, nextInit] = context && config.propagateTo.some((target) => targets(url, target)) ? withRequestId(input, init, context.requestId) : [input, init];\n const attrs = { method, host: url.host, path: outboundPath(url.pathname, config.redact) };\n const started = performance.now();\n try {\n const response = await original(nextInput, nextInit);\n config.record(response.status >= 500 ? 'error' : response.status >= 400 ? 'warn' : 'info', { ...attrs, status: response.status, durationMs: elapsedSince(started) });\n return response;\n } catch (error) {\n config.record('error', { ...attrs, error: failureOf(error), durationMs: elapsedSince(started) });\n throw error;\n }\n };\n Object.defineProperty(traced, WRAPPED, { value: original });\n globalThis.fetch = traced as typeof fetch;\n return () => {\n if (globalThis.fetch === (traced as typeof fetch)) globalThis.fetch = original;\n };\n}\n","import { promisify } from 'node:util';\nimport { gzip } from 'node:zlib';\nimport { LIMITS, type CheckInPayload, type EventBatch, type RadarEvent } from './protocol/index.js';\nimport { describeError } from './util.js';\n\nconst gzipAsync = promisify(gzip);\n\nconst MAX_BATCH_BYTES = 900_000;\nconst GZIP_THRESHOLD_BYTES = 8192;\nconst MAX_BACKOFF_MS = 30_000;\nconst MAX_RETRY_AFTER_MS = 86_400_000;\nconst UNAUTHORIZED_PAUSE_MS = 10 * 60_000;\n\nexport type Pending = RadarEvent | (() => Promise<RadarEvent>);\n\nexport type TransportConfig = {\n url: string;\n key: string;\n sdk: { name: string; version: string };\n environment: string;\n release?: string;\n checkInBaseUrl?: string;\n onWarning?: (message: string, always: boolean) => void;\n flushIntervalMs?: number;\n maxQueue?: number;\n batchSize?: number;\n requestTimeoutMs?: number;\n};\n\ntype Outcome =\n | { kind: 'ok' }\n | { kind: 'retry'; retryAfterMs?: number }\n | { kind: 'unauthorized'; status: number }\n | { kind: 'rejected'; status: number };\n\nexport class Transport {\n private queue: Pending[] = [];\n private droppedCount = 0;\n private inFlight: Promise<boolean> | null = null;\n private nextAttemptAt = 0;\n private backoffMs = 0;\n private unauthorizedUntil = 0;\n private stopped = false;\n private readonly warned = new Set<string>();\n private readonly timer: ReturnType<typeof setInterval>;\n private readonly maxQueue: number;\n private readonly batchSize: number;\n\n constructor(private readonly config: TransportConfig) {\n this.maxQueue = config.maxQueue ?? 1000;\n this.batchSize = Math.min(config.batchSize ?? 100, LIMITS.batchEvents);\n this.timer = setInterval(() => {\n void this.send();\n }, config.flushIntervalMs ?? 2000);\n this.timer.unref();\n }\n\n get pending(): number {\n return this.queue.length;\n }\n\n get dropped(): number {\n return this.droppedCount;\n }\n\n enqueue(event: Pending): void {\n if (this.stopped) return;\n if (this.queue.length >= this.maxQueue) {\n this.droppedCount += 1;\n this.warn('queue_full', 'fila do Radar cheia; eventos estão sendo descartados', false);\n return;\n }\n this.queue.push(event);\n if (this.queue.length >= this.batchSize) void this.send();\n }\n\n send(): Promise<boolean> {\n if (this.inFlight) return this.inFlight;\n if (this.stopped || this.queue.length === 0 || Date.now() < this.nextAttemptAt) return Promise.resolve(false);\n const attempt = this.sendBatch().catch((error: unknown) => {\n this.warn('internal', `envio ao Radar falhou: ${describeError(error)}`, false);\n return false;\n });\n this.inFlight = attempt.finally(() => {\n this.inFlight = null;\n });\n return this.inFlight;\n }\n\n async flush(timeoutMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (this.queue.length > 0 || this.inFlight) {\n const remaining = deadline - Date.now();\n if (remaining <= 0) return;\n const progressed = await withTimeout(this.send(), remaining);\n if (progressed !== true && !this.inFlight) return;\n }\n }\n\n stop(): void {\n this.stopped = true;\n clearInterval(this.timer);\n }\n\n private async sendBatch(): Promise<boolean> {\n const items = this.queue.splice(0, this.batchSize);\n const resolved = await Promise.all(items.map((item) => Promise.resolve().then(() => (typeof item === 'function' ? item() : item)).then((event) => event, () => null)));\n const events: RadarEvent[] = [];\n const leftovers: RadarEvent[] = [];\n let bytes = 0;\n for (const event of resolved) {\n if (!event) {\n this.droppedCount += 1;\n continue;\n }\n const size = Buffer.byteLength(JSON.stringify(event));\n if (events.length > 0 && bytes + size > MAX_BATCH_BYTES) {\n leftovers.push(event);\n continue;\n }\n events.push(event);\n bytes += size;\n }\n if (leftovers.length > 0) this.queue.unshift(...leftovers);\n if (events.length === 0) return true;\n const dropped = this.droppedCount;\n const batch: EventBatch = {\n v: 1,\n sdk: this.config.sdk,\n environment: this.config.environment,\n ...(this.config.release ? { release: this.config.release } : {}),\n ...(dropped > 0 ? { dropped } : {}),\n events,\n };\n const outcome = await this.post(batch);\n switch (outcome.kind) {\n case 'ok':\n this.droppedCount -= dropped;\n this.backoffMs = 0;\n this.nextAttemptAt = 0;\n return true;\n case 'retry':\n this.requeue(events);\n this.backoffMs = Math.min(this.backoffMs > 0 ? this.backoffMs * 2 : 1000, MAX_BACKOFF_MS);\n this.nextAttemptAt = Date.now() + Math.max(this.backoffMs, outcome.retryAfterMs ?? 0);\n return false;\n case 'unauthorized':\n this.droppedCount += events.length;\n this.pauseUnauthorized(outcome.status);\n return false;\n case 'rejected':\n this.droppedCount += events.length;\n this.warn(`rejected_${outcome.status}`, `lote recusado pelo Radar (${outcome.status}); eventos descartados`, true);\n return true;\n }\n }\n\n async checkIn(slug: string, payload: CheckInPayload): Promise<void> {\n if (this.stopped || !this.config.checkInBaseUrl || Date.now() < this.unauthorizedUntil) return;\n let response: Response;\n try {\n response = await fetch(this.config.checkInBaseUrl + encodeURIComponent(slug), {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(payload),\n redirect: 'error',\n signal: AbortSignal.timeout(this.config.requestTimeoutMs ?? 5000),\n });\n } catch (error) {\n this.warn('checkin_network', `check-in no Radar falhou: ${describeError(error)}`, false);\n return;\n }\n await response.arrayBuffer().catch(() => undefined);\n if (response.ok) return;\n if (response.status === 401 || response.status === 403) {\n this.pauseUnauthorized(response.status);\n return;\n }\n if (response.status === 404) {\n this.warn(`checkin_unknown_${slug}`, `tarefa agendada \"${slug}\" não existe no projeto da chave; crie o monitor com esse slug no Radar`, true);\n return;\n }\n this.warn(`checkin_rejected_${response.status}`, `check-in recusado pelo Radar (${response.status})`, false);\n }\n\n private pauseUnauthorized(status: number): void {\n this.droppedCount += this.queue.length;\n this.queue = [];\n this.unauthorizedUntil = Date.now() + UNAUTHORIZED_PAUSE_MS;\n this.nextAttemptAt = Math.max(this.nextAttemptAt, this.unauthorizedUntil);\n this.warn('unauthorized', `chave do Radar recusada (${status}); envios pausados por 10 minutos`, true);\n }\n\n private headers(): Record<string, string> {\n return {\n 'content-type': 'application/json',\n authorization: `Bearer ${this.config.key}`,\n 'user-agent': `${this.config.sdk.name}/${this.config.sdk.version}`,\n };\n }\n\n private requeue(events: RadarEvent[]): void {\n this.queue.unshift(...events);\n const overflow = this.queue.length - this.maxQueue;\n if (overflow > 0) {\n this.queue.splice(this.maxQueue, overflow);\n this.droppedCount += overflow;\n }\n }\n\n private async post(batch: EventBatch): Promise<Outcome> {\n const json = JSON.stringify(batch);\n const compress = Buffer.byteLength(json) > GZIP_THRESHOLD_BYTES;\n const headers = this.headers();\n if (compress) headers['content-encoding'] = 'gzip';\n let response: Response;\n try {\n response = await fetch(this.config.url, {\n method: 'POST',\n headers,\n body: compress ? await gzipAsync(json) : json,\n redirect: 'error',\n signal: AbortSignal.timeout(this.config.requestTimeoutMs ?? 5000),\n });\n } catch (error) {\n this.warn('network', `Radar indisponível: ${describeError(error)}`, false);\n return { kind: 'retry' };\n }\n await response.arrayBuffer().catch(() => undefined);\n if (response.ok) return { kind: 'ok' };\n if (response.status === 401 || response.status === 403) return { kind: 'unauthorized', status: response.status };\n if (response.status === 429) return { kind: 'retry', retryAfterMs: retryAfterMs(response.headers.get('retry-after')) };\n if (response.status >= 500) return { kind: 'retry' };\n return { kind: 'rejected', status: response.status };\n }\n\n private warn(key: string, message: string, always: boolean): void {\n if (this.warned.has(key)) return;\n this.warned.add(key);\n this.config.onWarning?.(message, always);\n }\n}\n\nexport function retryAfterMs(header: string | null): number | undefined {\n if (!header) return undefined;\n const seconds = Number(header);\n if (Number.isFinite(seconds)) return Math.min(Math.max(0, seconds * 1000), MAX_RETRY_AFTER_MS);\n const date = Date.parse(header);\n return Number.isNaN(date) ? undefined : Math.min(Math.max(0, date - Date.now()), MAX_RETRY_AFTER_MS);\n}\n\nfunction withTimeout<T>(promise: Promise<T>, ms: number): Promise<T | undefined> {\n return new Promise((resolve) => {\n const timer = setTimeout(() => resolve(undefined), ms);\n timer.unref();\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n () => {\n clearTimeout(timer);\n resolve(undefined);\n },\n );\n });\n}\n","declare const __SDK_VERSION__: string | undefined;\n\nexport const SDK_NAME = '@oconde/radar';\nexport const SDK_VERSION: string = typeof __SDK_VERSION__ === 'string' ? __SDK_VERSION__ : '0.0.0-dev';\n","import { RadarClient } from './client.js';\nimport { globalState } from './context.js';\n\nconst state = globalState();\n\nexport const radar: RadarClient = (state.client as RadarClient | undefined) ?? (state.client = new RadarClient());\n","import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport { decodeMappings, encodeMappings, type Segment } from './vlq.js';\n\ntype SourceMapFile = { sources?: unknown; sourceRoot?: unknown };\ntype RawSourceMap = Record<string, unknown> & { sources?: unknown; sourcesContent?: unknown; names?: unknown; mappings?: unknown; sourceRoot?: unknown };\ntype ParsedSourceMap = { raw: RawSourceMap; lines: Segment[][]; sources: string[]; contents: (string | null)[]; names: string[]; baseDir: string };\n\nfunction filesUnder(directory: string): string[] {\n return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {\n const full = join(directory, entry.name);\n if (entry.isDirectory()) return filesUnder(full);\n return entry.isFile() ? [full] : [];\n });\n}\n\nfunction rebase(source: unknown, fromDir: string, root: string, toDir: string): unknown {\n if (typeof source !== 'string' || isAbsolute(source) || source.includes('://')) return source;\n return relative(toDir, resolve(fromDir, root, source)).split(sep).join('/');\n}\n\nfunction moveMap(file: string, target: string, originalDir: string): void {\n try {\n const map = JSON.parse(readFileSync(file, 'utf8')) as SourceMapFile;\n if (Array.isArray(map.sources)) {\n const root = typeof map.sourceRoot === 'string' ? map.sourceRoot : '';\n map.sources = map.sources.map((source) => rebase(source, originalDir, root, dirname(target)));\n delete map.sourceRoot;\n }\n writeFileSync(target, JSON.stringify(map));\n unlinkSync(file);\n } catch {\n renameSync(file, target);\n }\n}\n\nexport function moveClientSourceMaps(buildDir = 'build'): number {\n const clientDir = resolve(buildDir, 'client');\n const mapsDir = resolve(buildDir, 'client-maps');\n const generatedDir = resolve(buildDir, '..', '.svelte-kit/output/client');\n if (!existsSync(clientDir)) return -1;\n let moved = 0;\n for (const file of filesUnder(clientDir)) {\n if (file.endsWith('.map.gz') || file.endsWith('.map.br')) {\n unlinkSync(file);\n continue;\n }\n if (!file.endsWith('.map')) continue;\n const path = relative(clientDir, file);\n const target = join(mapsDir, path);\n mkdirSync(dirname(target), { recursive: true });\n const generated = join(generatedDir, path);\n moveMap(file, target, dirname(existsSync(generated) ? generated : file));\n moved += 1;\n }\n return moved;\n}\n\nfunction parseSourceMap(file: string): ParsedSourceMap | null {\n try {\n const raw = JSON.parse(readFileSync(file, 'utf8')) as RawSourceMap;\n if (typeof raw.mappings !== 'string' || !Array.isArray(raw.sources)) return null;\n const root = typeof raw.sourceRoot === 'string' ? raw.sourceRoot : '';\n return {\n raw,\n lines: decodeMappings(raw.mappings),\n sources: raw.sources.map((source) => (typeof source === 'string' ? source : '')),\n contents: Array.isArray(raw.sourcesContent) ? raw.sourcesContent.map((content) => (typeof content === 'string' ? content : null)) : [],\n names: Array.isArray(raw.names) ? raw.names.map(String) : [],\n baseDir: resolve(dirname(file), root),\n };\n } catch {\n return null;\n }\n}\n\nfunction isUrl(source: string): boolean {\n return source.includes('://');\n}\n\nfunction isInside(directory: string, path: string): boolean {\n const rel = relative(directory, path);\n return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);\n}\n\nfunction traceSegment(map: ParsedSourceMap, line: number, column: number): Segment | null {\n const segments = map.lines[line];\n if (!segments || segments.length === 0) return null;\n let low = 0;\n let high = segments.length - 1;\n let found = -1;\n while (low <= high) {\n const middle = (low + high) >> 1;\n if ((segments[middle]?.[0] ?? 0) <= column) {\n found = middle;\n low = middle + 1;\n } else {\n high = middle - 1;\n }\n }\n const segment = segments[Math.max(found, 0)];\n return segment && segment.length >= 4 ? segment : null;\n}\n\nclass ComposedTable {\n readonly sources: string[] = [];\n readonly contents: (string | null)[] = [];\n readonly names: string[] = [];\n private readonly sourceIndex = new Map<string, number>();\n private readonly nameIndex = new Map<string, number>();\n\n constructor(private readonly outputDir: string) {}\n\n source(baseDir: string, source: string, content: string | null): number {\n const key = isUrl(source) || isAbsolute(source) ? source : relative(this.outputDir, resolve(baseDir, source)).split(sep).join('/');\n const existing = this.sourceIndex.get(key);\n if (existing !== undefined) return existing;\n this.sourceIndex.set(key, this.sources.length);\n this.sources.push(key);\n this.contents.push(content);\n return this.sources.length - 1;\n }\n\n name(value: string): number {\n const existing = this.nameIndex.get(value);\n if (existing !== undefined) return existing;\n this.nameIndex.set(value, this.names.length);\n this.names.push(value);\n return this.names.length - 1;\n }\n}\n\nfunction composeMap(file: string, generatedDir: string, generatedMaps: Map<string, ParsedSourceMap | null>): boolean {\n const outer = parseSourceMap(file);\n if (!outer) return false;\n const inners = outer.sources.map((source) => {\n if (isUrl(source)) return null;\n const path = resolve(outer.baseDir, source);\n if (!isInside(generatedDir, path)) return null;\n if (!generatedMaps.has(path)) generatedMaps.set(path, parseSourceMap(`${path}.map`));\n return generatedMaps.get(path) ?? null;\n });\n if (inners.every((inner) => inner === null)) return false;\n const table = new ComposedTable(dirname(file));\n let traced = 0;\n const lines = outer.lines.map((segments) =>\n segments.map((segment): Segment => {\n const [column = 0, sourceIndex = 0, line = 0, originalColumn = 0, nameIndex] = segment;\n if (segment.length < 4) return [column];\n const inner = inners[sourceIndex];\n const original = inner ? traceSegment(inner, line, originalColumn) : null;\n if (inner && original) {\n traced += 1;\n const [, innerSource = 0, innerLine = 0, innerColumn = 0, innerName] = original;\n const source = table.source(inner.baseDir, inner.sources[innerSource] ?? '', inner.contents[innerSource] ?? null);\n const name = innerName !== undefined ? inner.names[innerName] : nameIndex !== undefined ? outer.names[nameIndex] : undefined;\n return name === undefined ? [column, source, innerLine, innerColumn] : [column, source, innerLine, innerColumn, table.name(name)];\n }\n const source = table.source(outer.baseDir, outer.sources[sourceIndex] ?? '', outer.contents[sourceIndex] ?? null);\n const name = nameIndex !== undefined ? outer.names[nameIndex] : undefined;\n return name === undefined ? [column, source, line, originalColumn] : [column, source, line, originalColumn, table.name(name)];\n }),\n );\n if (traced === 0) return false;\n const { sourceRoot: _root, ignoreList: _ignore, x_google_ignoreList: _googleIgnore, ...rest } = outer.raw;\n const composed = { ...rest, sources: table.sources, sourcesContent: table.contents, names: table.names, mappings: encodeMappings(lines) };\n writeFileSync(file, JSON.stringify(composed));\n return true;\n}\n\nexport function composeServerSourceMaps(buildDir = 'build'): number {\n const serverDir = resolve(buildDir, 'server');\n const generatedDir = resolve(buildDir, '..', '.svelte-kit/output/server');\n if (!existsSync(serverDir) || !existsSync(generatedDir)) return 0;\n const generatedMaps = new Map<string, ParsedSourceMap | null>();\n let composed = 0;\n for (const file of filesUnder(serverDir)) {\n if (file.endsWith('.map') && composeMap(file, generatedDir, generatedMaps)) composed += 1;\n }\n return composed;\n}\n","const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst DIGITS = new Map([...ALPHABET].map((char, index) => [char, index]));\nconst FIELDS = 5;\n\nexport type Segment = number[];\n\nfunction decodeGroup(group: string): number[] {\n const values: number[] = [];\n let value = 0;\n let factor = 1;\n for (const char of group) {\n const digit = DIGITS.get(char);\n if (digit === undefined) throw new Error(`invalid source map mapping: ${group}`);\n value += (digit % 32) * factor;\n if (digit >= 32) {\n factor *= 32;\n continue;\n }\n const magnitude = Math.floor(value / 2);\n values.push(value % 2 === 1 ? -magnitude : magnitude);\n value = 0;\n factor = 1;\n }\n return values;\n}\n\nfunction encodeValue(delta: number): string {\n let value = delta < 0 ? -delta * 2 + 1 : delta * 2;\n let encoded = '';\n do {\n const digit = value % 32;\n value = Math.floor(value / 32);\n encoded += ALPHABET[value > 0 ? digit + 32 : digit];\n } while (value > 0);\n return encoded;\n}\n\nexport function decodeMappings(mappings: string): Segment[][] {\n const state = new Array<number>(FIELDS).fill(0);\n return mappings.split(';').map((line) => {\n state[0] = 0;\n const segments: Segment[] = [];\n for (const group of line.split(',')) {\n if (!group) continue;\n const values = decodeGroup(group).slice(0, FIELDS);\n segments.push(values.map((delta, field) => (state[field] = (state[field] ?? 0) + delta)));\n }\n return segments;\n });\n}\n\nexport function encodeMappings(lines: Segment[][]): string {\n const state = new Array<number>(FIELDS).fill(0);\n return lines\n .map((segments) => {\n state[0] = 0;\n return segments\n .map((segment) =>\n segment\n .map((value, field) => {\n const delta = value - (state[field] ?? 0);\n state[field] = value;\n return encodeValue(delta);\n })\n .join(''),\n )\n .join(',');\n })\n .join(';');\n}\n"],"mappings":"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","names":["import_node_fs","import_node_path","import_node_perf_hooks","state","import_node_crypto","import_node_perf_hooks","import_node_crypto","targets","import_node_url","import_node_perf_hooks","import_node_util","resolve","line","import_node_path","state","source","name","contextFor","withRequestId"]}
|