@stainlessdev/xray-emitter 0.3.1-dev.3f4598d → 0.3.1-dev.4e1c929
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-FGXXKIF7.js → chunk-447Z3SDN.js} +4 -4
- package/dist/{chunk-GYXI3DWB.js → chunk-7EKBXVZE.js} +59 -12
- package/dist/chunk-7EKBXVZE.js.map +1 -0
- package/dist/{chunk-NTIUR3OC.js → chunk-AKPTTC2I.js} +2 -2
- package/dist/{chunk-7KT6EPVZ.js → chunk-BKJO3FLI.js} +1 -1
- package/dist/{chunk-7KT6EPVZ.js.map → chunk-BKJO3FLI.js.map} +1 -1
- package/dist/{chunk-DNBARLGB.cjs → chunk-EPQTFPT7.cjs} +1 -1
- package/dist/{chunk-DNBARLGB.cjs.map → chunk-EPQTFPT7.cjs.map} +1 -1
- package/dist/{chunk-SUVCVINA.cjs → chunk-FZH3IY6R.cjs} +47 -47
- package/dist/{chunk-SUVCVINA.cjs.map → chunk-FZH3IY6R.cjs.map} +1 -1
- package/dist/{chunk-UJWD5CFA.cjs → chunk-IEWCR3GT.cjs} +86 -39
- package/dist/chunk-IEWCR3GT.cjs.map +1 -0
- package/dist/{chunk-CPHFCOA5.cjs → chunk-M6G4PEGF.cjs} +9 -9
- package/dist/{chunk-CPHFCOA5.cjs.map → chunk-M6G4PEGF.cjs.map} +1 -1
- package/dist/{chunk-55YD27PV.cjs → chunk-PIY7CFHY.cjs} +28 -28
- package/dist/{chunk-55YD27PV.cjs.map → chunk-PIY7CFHY.cjs.map} +1 -1
- package/dist/{chunk-DV3MVQBB.js → chunk-W42SQZKN.js} +4 -4
- package/dist/effect.cjs +19 -19
- package/dist/effect.d.cts +3 -3
- package/dist/effect.d.ts +3 -3
- package/dist/effect.js +4 -4
- package/dist/{emitter-Bi_m_w5h.d.cts → emitter-DKki0zYl.d.cts} +1 -1
- package/dist/{emitter-Dy7bRGTq.d.ts → emitter-DT-EuB8s.d.ts} +1 -1
- package/dist/express.cjs +7 -7
- package/dist/express.d.cts +2 -2
- package/dist/express.d.ts +2 -2
- package/dist/express.js +4 -4
- package/dist/fastify.cjs +10 -10
- package/dist/fastify.d.cts +2 -2
- package/dist/fastify.d.ts +2 -2
- package/dist/fastify.js +4 -4
- package/dist/fetch.cjs +5 -5
- package/dist/fetch.d.cts +2 -2
- package/dist/fetch.d.ts +2 -2
- package/dist/fetch.js +4 -4
- package/dist/hono.cjs +9 -9
- package/dist/hono.d.cts +3 -3
- package/dist/hono.d.ts +3 -3
- package/dist/hono.js +4 -4
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/internal.cjs +3 -3
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +2 -2
- package/dist/next.cjs +42 -8
- package/dist/next.cjs.map +1 -1
- package/dist/next.d.cts +3 -3
- package/dist/next.d.ts +3 -3
- package/dist/next.js +39 -5
- package/dist/next.js.map +1 -1
- package/dist/node.cjs +5 -5
- package/dist/node.d.cts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +4 -4
- package/dist/remix.cjs +7 -7
- package/dist/remix.d.cts +3 -3
- package/dist/remix.d.ts +3 -3
- package/dist/remix.js +4 -4
- package/dist/stub.cjs +121 -0
- package/dist/stub.cjs.map +1 -0
- package/dist/stub.d.cts +12 -0
- package/dist/stub.d.ts +12 -0
- package/dist/stub.js +121 -0
- package/dist/stub.js.map +1 -0
- package/dist/{types-BrKvhHbn.d.cts → types-C44Eg-i_.d.cts} +6 -2
- package/dist/{types-BrKvhHbn.d.ts → types-C44Eg-i_.d.ts} +6 -2
- package/package.json +10 -3
- package/dist/chunk-GYXI3DWB.js.map +0 -1
- package/dist/chunk-UJWD5CFA.cjs.map +0 -1
- /package/dist/{chunk-FGXXKIF7.js.map → chunk-447Z3SDN.js.map} +0 -0
- /package/dist/{chunk-NTIUR3OC.js.map → chunk-AKPTTC2I.js.map} +0 -0
- /package/dist/{chunk-DV3MVQBB.js.map → chunk-W42SQZKN.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-DNBARLGB.cjs","../src/core/logger.ts","../src/core/encoding.ts","../src/core/request_log.ts","../src/core/uuid/base48.ts","../src/core/uuid/base62.ts","../src/core/uuid/index.ts","../src/core/state.ts"],"names":["maxChunkBytes"],"mappings":"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","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-DNBARLGB.cjs","sourcesContent":[null,"import type { Logger, LogLevel } from './types';\n\nconst logLevelOrder: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n};\n\nexport function logWithLevel(\n logger: Logger,\n level: LogLevel,\n threshold: LogLevel,\n message: string,\n fields?: Record<string, unknown>,\n): void {\n if (logLevelOrder[level] < logLevelOrder[threshold]) {\n return;\n }\n\n const fn =\n logger[level] ?? logger.warn ?? logger.info ?? logger.debug ?? logger.error ?? console.log;\n\n try {\n fn.call(logger, message, fields);\n } catch {\n // Logging should never disrupt instrumentation.\n }\n}\n","const utf8Decoder =\n typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { fatal: true }) : null;\nconst utf8DecoderLenient = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8') : null;\nconst maybeBuffer = (\n globalThis as typeof globalThis & {\n Buffer?: { from(data: Uint8Array): { toString(encoding?: string): string } };\n }\n).Buffer;\n\nexport function encodeBase64(bytes: Uint8Array): string {\n if (maybeBuffer) {\n return maybeBuffer.from(bytes).toString('base64');\n }\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n const byte = bytes[i];\n if (byte === undefined) {\n continue;\n }\n binary += String.fromCharCode(byte);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(binary);\n }\n return '';\n}\n\nexport function isValidUtf8(bytes: Uint8Array): boolean {\n if (!utf8Decoder) {\n return false;\n }\n try {\n utf8Decoder.decode(bytes);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function decodeUtf8(bytes: Uint8Array): string {\n if (utf8DecoderLenient) {\n return utf8DecoderLenient.decode(bytes);\n }\n if (maybeBuffer) {\n return maybeBuffer.from(bytes).toString('utf8');\n }\n return '';\n}\n","import type { CapturedBody } from './types';\nimport { decodeUtf8, encodeBase64, isValidUtf8 } from './encoding';\n\n// eslint-disable-next-line no-control-regex\nconst controlChars = /[\\x00-\\x1F\\x7F]/g;\n\nexport function sanitizeLogString(value: string): string {\n if (!value) {\n return value;\n }\n return value.replace(controlChars, '');\n}\n\nexport function sanitizeHeaderValues(\n headers: Record<string, string | string[]> | undefined,\n): Record<string, string | string[]> | undefined {\n if (!headers) {\n return undefined;\n }\n\n const sanitized: Record<string, string | string[]> = {};\n for (const [key, value] of Object.entries(headers)) {\n const name = sanitizeLogString(key);\n if (Array.isArray(value)) {\n sanitized[name] = value.map((entry) => sanitizeLogString(entry));\n } else {\n sanitized[name] = sanitizeLogString(value);\n }\n }\n return sanitized;\n}\n\nexport function makeCapturedBody(\n bytes: Uint8Array | undefined,\n totalBytes: number,\n truncated: boolean,\n mode: 'text' | 'base64',\n): CapturedBody | undefined {\n if (!bytes) {\n return undefined;\n }\n\n if (mode === 'base64') {\n return {\n bytes: totalBytes,\n encoding: 'base64',\n truncated,\n value: encodeBase64(bytes),\n };\n }\n\n if (isValidUtf8(bytes)) {\n return {\n bytes: totalBytes,\n encoding: 'utf8',\n truncated,\n value: decodeUtf8(bytes),\n };\n }\n\n return {\n bytes: totalBytes,\n encoding: 'base64',\n truncated,\n value: encodeBase64(bytes),\n };\n}\n","/**\n * Base48 encoding with a vowel-free alphabet to reduce the risk of generating\n * profanity-like substrings in time-ordered identifiers while staying compact.\n * Digits that are commonly read as vowels (0, 1, 3, 4) are excluded to avoid\n * leetspeak-style false positives. The alphabet is ordered by ASCII to preserve\n * lexicographic ordering of fixed-length encodings.\n */\nconst base48AlphabetLex = '256789BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz';\nconst base48Zero = base48AlphabetLex.charAt(0);\nconst base48Regex = /^[256789BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz]*$/;\n\nconst maxChunkBytes = 32;\nconst chunkToEncodedLength = new Map<number, number>();\nconst encodedLengthToChunk = new Map<number, number>();\n\nfor (let size = 1; size <= maxChunkBytes; size += 1) {\n const encodedLength = Math.ceil((size * 8) / Math.log2(48));\n chunkToEncodedLength.set(size, encodedLength);\n encodedLengthToChunk.set(encodedLength, size);\n}\n\nconst maxEncodedChunk = chunkToEncodedLength.get(maxChunkBytes)!;\n\nfunction encodeChunk(bytes: Uint8Array, size: number): string {\n let value = 0n;\n for (const byte of bytes) {\n value = (value << 8n) | BigInt(byte);\n }\n\n let encoded = '';\n if (value === 0n) {\n encoded = base48Zero;\n } else {\n while (value > 0n) {\n const mod = value % 48n;\n encoded = base48AlphabetLex[Number(mod)] + encoded;\n value /= 48n;\n }\n }\n\n const targetLength = chunkToEncodedLength.get(size);\n if (!targetLength) {\n throw new Error(`base48: unsupported chunk size ${size}`);\n }\n return encoded.padStart(targetLength, base48Zero);\n}\n\nfunction decodeChunk(value: string, size: number): Uint8Array {\n let n = 0n;\n for (const char of value) {\n const index = base48AlphabetLex.indexOf(char);\n if (index === -1) {\n throw new Error('base48: invalid character');\n }\n n = n * 48n + BigInt(index);\n }\n\n const maxValue = 2n ** BigInt(size * 8) - 1n;\n if (n > maxValue) {\n throw new Error('base48: invalid length');\n }\n\n const buffer = new Uint8Array(size);\n for (let i = size - 1; i >= 0; i -= 1) {\n buffer[i] = Number(n & 0xffn);\n n >>= 8n;\n }\n return buffer;\n}\n\nexport function encodeBase48Lex(buffer: Uint8Array): string {\n if (buffer.length === 0) {\n return '';\n }\n\n let result = '';\n for (let offset = 0; offset < buffer.length; ) {\n const remaining = buffer.length - offset;\n const size = remaining >= maxChunkBytes ? maxChunkBytes : remaining;\n result += encodeChunk(buffer.slice(offset, offset + size), size);\n offset += size;\n }\n return result;\n}\n\nexport function decodeBase48Lex(value: string): Uint8Array {\n if (!value) {\n return new Uint8Array();\n }\n if (!base48Regex.test(value)) {\n throw new Error('base48: invalid string');\n }\n\n let totalBytes = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base48: invalid length');\n }\n totalBytes += size;\n offset += chunkLength;\n }\n\n const result = new Uint8Array(totalBytes);\n let cursor = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base48: invalid length');\n }\n const chunk = decodeChunk(value.slice(offset, offset + chunkLength), size);\n result.set(chunk, cursor);\n cursor += size;\n offset += chunkLength;\n }\n return result;\n}\n","const base62AlphabetLex = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\nconst base62Zero = base62AlphabetLex.charAt(0);\nconst base62Regex = /^[0-9A-Za-z]*$/;\n\nconst maxChunkBytes = 32;\nconst chunkToEncodedLength = new Map<number, number>();\nconst encodedLengthToChunk = new Map<number, number>();\n\nfor (let size = 1; size <= maxChunkBytes; size += 1) {\n const encodedLength = Math.ceil((size * 8) / Math.log2(62));\n chunkToEncodedLength.set(size, encodedLength);\n encodedLengthToChunk.set(encodedLength, size);\n}\n\nconst maxEncodedChunk = chunkToEncodedLength.get(maxChunkBytes)!;\n\nfunction encodeChunk(bytes: Uint8Array, size: number): string {\n let value = 0n;\n for (const byte of bytes) {\n value = (value << 8n) | BigInt(byte);\n }\n\n let encoded = '';\n if (value === 0n) {\n encoded = base62Zero;\n } else {\n while (value > 0n) {\n const mod = value % 62n;\n encoded = base62AlphabetLex[Number(mod)] + encoded;\n value /= 62n;\n }\n }\n\n const targetLength = chunkToEncodedLength.get(size);\n if (!targetLength) {\n throw new Error(`base62: unsupported chunk size ${size}`);\n }\n return encoded.padStart(targetLength, base62Zero);\n}\n\nfunction decodeChunk(value: string, size: number): Uint8Array {\n let n = 0n;\n for (const char of value) {\n const index = base62AlphabetLex.indexOf(char);\n if (index === -1) {\n throw new Error('base62: invalid character');\n }\n n = n * 62n + BigInt(index);\n }\n\n const maxValue = 2n ** BigInt(size * 8) - 1n;\n if (n > maxValue) {\n throw new Error('base62: invalid length');\n }\n\n const buffer = new Uint8Array(size);\n for (let i = size - 1; i >= 0; i -= 1) {\n buffer[i] = Number(n & 0xffn);\n n >>= 8n;\n }\n return buffer;\n}\n\nexport function encodeBase62Lex(buffer: Uint8Array): string {\n if (buffer.length === 0) {\n return '';\n }\n\n let result = '';\n for (let offset = 0; offset < buffer.length; ) {\n const remaining = buffer.length - offset;\n const size = remaining >= maxChunkBytes ? maxChunkBytes : remaining;\n result += encodeChunk(buffer.slice(offset, offset + size), size);\n offset += size;\n }\n return result;\n}\n\nexport function decodeBase62Lex(value: string): Uint8Array {\n if (!value) {\n return new Uint8Array();\n }\n if (!base62Regex.test(value)) {\n throw new Error('base62: invalid string');\n }\n\n let totalBytes = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base62: invalid length');\n }\n totalBytes += size;\n offset += chunkLength;\n }\n\n const result = new Uint8Array(totalBytes);\n let cursor = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base62: invalid length');\n }\n const chunk = decodeChunk(value.slice(offset, offset + chunkLength), size);\n result.set(chunk, cursor);\n cursor += size;\n offset += chunkLength;\n }\n return result;\n}\n","import { encodeBase48Lex } from './base48';\nimport { encodeBase62Lex } from './base62';\n\nconst requestIdPrefix = 'req_';\n\nfunction uuidv7Bytes(): Uint8Array {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n\n // Encode timestamp in first 48 bits\n const timestamp = BigInt(Date.now());\n bytes[0] = Number((timestamp >> 40n) & 0xffn);\n bytes[1] = Number((timestamp >> 32n) & 0xffn);\n bytes[2] = Number((timestamp >> 24n) & 0xffn);\n bytes[3] = Number((timestamp >> 16n) & 0xffn);\n bytes[4] = Number((timestamp >> 8n) & 0xffn);\n bytes[5] = Number(timestamp & 0xffn);\n\n // Set version (7) and variant (RFC 4122)\n const byte6 = bytes[6] ?? 0;\n const byte8 = bytes[8] ?? 0;\n bytes[6] = (byte6 & 0x0f) | 0x70;\n bytes[8] = (byte8 & 0x3f) | 0x80;\n\n return bytes;\n}\n\n/**\n * Generates a UUIDv7 string.\n * Uses crypto.getRandomValues which is available in all modern JS runtimes\n * (browsers, Node.js 15+, Deno, Bun, Cloudflare Workers, Vercel Edge, etc.)\n */\nexport function uuidv7(): string {\n const bytes = uuidv7Bytes();\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10).join('')}`;\n}\n\nexport function uuidv7base62(): string {\n return encodeBase62Lex(uuidv7Bytes());\n}\n\nexport function uuidv7base48(): string {\n return encodeBase48Lex(uuidv7Bytes());\n}\n\nexport function generateRequestId(): string {\n return `${requestIdPrefix}${uuidv7base48()}`;\n}\n","import type { Span } from '@opentelemetry/api';\nimport type { AttributeValue, NormalizedRequest, XrayContext } from './types';\nimport type { CaptureConfig, RedactionConfig, ResolvedXrayConfig } from './config';\n\nexport type RequestState = {\n request: NormalizedRequest;\n config: ResolvedXrayConfig;\n span?: Span;\n context: XrayContext;\n attributes: Record<string, AttributeValue>;\n events: Array<{ name: string; attributes?: Record<string, AttributeValue> }>;\n tenantId?: string;\n userId?: string;\n sessionId?: string;\n error?: unknown;\n captureOverride?: Partial<CaptureConfig>;\n redactionOverride?: Partial<RedactionConfig>;\n};\n\nconst contextMap = new WeakMap<XrayContext, RequestState>();\nconst objectMap = new WeakMap<object, RequestState>();\n\nexport function bindContext(ctx: XrayContext, state: RequestState): void {\n contextMap.set(ctx, state);\n}\n\nexport function getContextState(ctx: XrayContext): RequestState | undefined {\n return contextMap.get(ctx);\n}\n\nexport function bindObject(target: object, state: RequestState): void {\n objectMap.set(target, state);\n}\n\nexport function getContextFromObject(target: unknown): XrayContext | undefined {\n const state = getStateFromObject(target);\n return state?.context;\n}\n\nexport function getStateFromObject(target: unknown): RequestState | undefined {\n if (!target || typeof target !== 'object') {\n return undefined;\n }\n if (objectMap.has(target)) {\n return objectMap.get(target);\n }\n\n const fallback = findNestedTarget(target as Record<string, unknown>);\n if (fallback && objectMap.has(fallback)) {\n return objectMap.get(fallback);\n }\n return undefined;\n}\n\nfunction findNestedTarget(obj: Record<string, unknown>): object | null {\n if (obj.raw && typeof obj.raw === 'object') {\n return obj.raw as object;\n }\n if (obj.req && typeof obj.req === 'object') {\n const req = obj.req as Record<string, unknown>;\n if (req.raw && typeof req.raw === 'object') {\n return req.raw as object;\n }\n return req as object;\n }\n if (obj.request && typeof obj.request === 'object') {\n const request = obj.request as Record<string, unknown>;\n if (request.raw && typeof request.raw === 'object') {\n return request.raw as object;\n }\n return request as object;\n }\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-EPQTFPT7.cjs","../src/core/logger.ts","../src/core/encoding.ts","../src/core/request_log.ts","../src/core/uuid/base48.ts","../src/core/uuid/base62.ts","../src/core/uuid/index.ts","../src/core/state.ts"],"names":["maxChunkBytes"],"mappings":"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","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-EPQTFPT7.cjs","sourcesContent":[null,"import type { Logger, LogLevel } from './types';\n\nconst logLevelOrder: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n};\n\nexport function logWithLevel(\n logger: Logger,\n level: LogLevel,\n threshold: LogLevel,\n message: string,\n fields?: Record<string, unknown>,\n): void {\n if (logLevelOrder[level] < logLevelOrder[threshold]) {\n return;\n }\n\n const fn =\n logger[level] ?? logger.warn ?? logger.info ?? logger.debug ?? logger.error ?? console.log;\n\n try {\n fn.call(logger, message, fields);\n } catch {\n // Logging should never disrupt instrumentation.\n }\n}\n","const utf8Decoder =\n typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { fatal: true }) : null;\nconst utf8DecoderLenient = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8') : null;\nconst maybeBuffer = (\n globalThis as typeof globalThis & {\n Buffer?: { from(data: Uint8Array): { toString(encoding?: string): string } };\n }\n).Buffer;\n\nexport function encodeBase64(bytes: Uint8Array): string {\n if (maybeBuffer) {\n return maybeBuffer.from(bytes).toString('base64');\n }\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n const byte = bytes[i];\n if (byte === undefined) {\n continue;\n }\n binary += String.fromCharCode(byte);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(binary);\n }\n return '';\n}\n\nexport function isValidUtf8(bytes: Uint8Array): boolean {\n if (!utf8Decoder) {\n return false;\n }\n try {\n utf8Decoder.decode(bytes);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function decodeUtf8(bytes: Uint8Array): string {\n if (utf8DecoderLenient) {\n return utf8DecoderLenient.decode(bytes);\n }\n if (maybeBuffer) {\n return maybeBuffer.from(bytes).toString('utf8');\n }\n return '';\n}\n","import type { CapturedBody } from './types';\nimport { decodeUtf8, encodeBase64, isValidUtf8 } from './encoding';\n\n// eslint-disable-next-line no-control-regex\nconst controlChars = /[\\x00-\\x1F\\x7F]/g;\n\nexport function sanitizeLogString(value: string): string {\n if (!value) {\n return value;\n }\n return value.replace(controlChars, '');\n}\n\nexport function sanitizeHeaderValues(\n headers: Record<string, string | string[]> | undefined,\n): Record<string, string | string[]> | undefined {\n if (!headers) {\n return undefined;\n }\n\n const sanitized: Record<string, string | string[]> = {};\n for (const [key, value] of Object.entries(headers)) {\n const name = sanitizeLogString(key);\n if (Array.isArray(value)) {\n sanitized[name] = value.map((entry) => sanitizeLogString(entry));\n } else {\n sanitized[name] = sanitizeLogString(value);\n }\n }\n return sanitized;\n}\n\nexport function makeCapturedBody(\n bytes: Uint8Array | undefined,\n totalBytes: number,\n truncated: boolean,\n mode: 'text' | 'base64',\n): CapturedBody | undefined {\n if (!bytes) {\n return undefined;\n }\n\n if (mode === 'base64') {\n return {\n bytes: totalBytes,\n encoding: 'base64',\n truncated,\n value: encodeBase64(bytes),\n };\n }\n\n if (isValidUtf8(bytes)) {\n return {\n bytes: totalBytes,\n encoding: 'utf8',\n truncated,\n value: decodeUtf8(bytes),\n };\n }\n\n return {\n bytes: totalBytes,\n encoding: 'base64',\n truncated,\n value: encodeBase64(bytes),\n };\n}\n","/**\n * Base48 encoding with a vowel-free alphabet to reduce the risk of generating\n * profanity-like substrings in time-ordered identifiers while staying compact.\n * Digits that are commonly read as vowels (0, 1, 3, 4) are excluded to avoid\n * leetspeak-style false positives. The alphabet is ordered by ASCII to preserve\n * lexicographic ordering of fixed-length encodings.\n */\nconst base48AlphabetLex = '256789BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz';\nconst base48Zero = base48AlphabetLex.charAt(0);\nconst base48Regex = /^[256789BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz]*$/;\n\nconst maxChunkBytes = 32;\nconst chunkToEncodedLength = new Map<number, number>();\nconst encodedLengthToChunk = new Map<number, number>();\n\nfor (let size = 1; size <= maxChunkBytes; size += 1) {\n const encodedLength = Math.ceil((size * 8) / Math.log2(48));\n chunkToEncodedLength.set(size, encodedLength);\n encodedLengthToChunk.set(encodedLength, size);\n}\n\nconst maxEncodedChunk = chunkToEncodedLength.get(maxChunkBytes)!;\n\nfunction encodeChunk(bytes: Uint8Array, size: number): string {\n let value = 0n;\n for (const byte of bytes) {\n value = (value << 8n) | BigInt(byte);\n }\n\n let encoded = '';\n if (value === 0n) {\n encoded = base48Zero;\n } else {\n while (value > 0n) {\n const mod = value % 48n;\n encoded = base48AlphabetLex[Number(mod)] + encoded;\n value /= 48n;\n }\n }\n\n const targetLength = chunkToEncodedLength.get(size);\n if (!targetLength) {\n throw new Error(`base48: unsupported chunk size ${size}`);\n }\n return encoded.padStart(targetLength, base48Zero);\n}\n\nfunction decodeChunk(value: string, size: number): Uint8Array {\n let n = 0n;\n for (const char of value) {\n const index = base48AlphabetLex.indexOf(char);\n if (index === -1) {\n throw new Error('base48: invalid character');\n }\n n = n * 48n + BigInt(index);\n }\n\n const maxValue = 2n ** BigInt(size * 8) - 1n;\n if (n > maxValue) {\n throw new Error('base48: invalid length');\n }\n\n const buffer = new Uint8Array(size);\n for (let i = size - 1; i >= 0; i -= 1) {\n buffer[i] = Number(n & 0xffn);\n n >>= 8n;\n }\n return buffer;\n}\n\nexport function encodeBase48Lex(buffer: Uint8Array): string {\n if (buffer.length === 0) {\n return '';\n }\n\n let result = '';\n for (let offset = 0; offset < buffer.length; ) {\n const remaining = buffer.length - offset;\n const size = remaining >= maxChunkBytes ? maxChunkBytes : remaining;\n result += encodeChunk(buffer.slice(offset, offset + size), size);\n offset += size;\n }\n return result;\n}\n\nexport function decodeBase48Lex(value: string): Uint8Array {\n if (!value) {\n return new Uint8Array();\n }\n if (!base48Regex.test(value)) {\n throw new Error('base48: invalid string');\n }\n\n let totalBytes = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base48: invalid length');\n }\n totalBytes += size;\n offset += chunkLength;\n }\n\n const result = new Uint8Array(totalBytes);\n let cursor = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base48: invalid length');\n }\n const chunk = decodeChunk(value.slice(offset, offset + chunkLength), size);\n result.set(chunk, cursor);\n cursor += size;\n offset += chunkLength;\n }\n return result;\n}\n","const base62AlphabetLex = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\nconst base62Zero = base62AlphabetLex.charAt(0);\nconst base62Regex = /^[0-9A-Za-z]*$/;\n\nconst maxChunkBytes = 32;\nconst chunkToEncodedLength = new Map<number, number>();\nconst encodedLengthToChunk = new Map<number, number>();\n\nfor (let size = 1; size <= maxChunkBytes; size += 1) {\n const encodedLength = Math.ceil((size * 8) / Math.log2(62));\n chunkToEncodedLength.set(size, encodedLength);\n encodedLengthToChunk.set(encodedLength, size);\n}\n\nconst maxEncodedChunk = chunkToEncodedLength.get(maxChunkBytes)!;\n\nfunction encodeChunk(bytes: Uint8Array, size: number): string {\n let value = 0n;\n for (const byte of bytes) {\n value = (value << 8n) | BigInt(byte);\n }\n\n let encoded = '';\n if (value === 0n) {\n encoded = base62Zero;\n } else {\n while (value > 0n) {\n const mod = value % 62n;\n encoded = base62AlphabetLex[Number(mod)] + encoded;\n value /= 62n;\n }\n }\n\n const targetLength = chunkToEncodedLength.get(size);\n if (!targetLength) {\n throw new Error(`base62: unsupported chunk size ${size}`);\n }\n return encoded.padStart(targetLength, base62Zero);\n}\n\nfunction decodeChunk(value: string, size: number): Uint8Array {\n let n = 0n;\n for (const char of value) {\n const index = base62AlphabetLex.indexOf(char);\n if (index === -1) {\n throw new Error('base62: invalid character');\n }\n n = n * 62n + BigInt(index);\n }\n\n const maxValue = 2n ** BigInt(size * 8) - 1n;\n if (n > maxValue) {\n throw new Error('base62: invalid length');\n }\n\n const buffer = new Uint8Array(size);\n for (let i = size - 1; i >= 0; i -= 1) {\n buffer[i] = Number(n & 0xffn);\n n >>= 8n;\n }\n return buffer;\n}\n\nexport function encodeBase62Lex(buffer: Uint8Array): string {\n if (buffer.length === 0) {\n return '';\n }\n\n let result = '';\n for (let offset = 0; offset < buffer.length; ) {\n const remaining = buffer.length - offset;\n const size = remaining >= maxChunkBytes ? maxChunkBytes : remaining;\n result += encodeChunk(buffer.slice(offset, offset + size), size);\n offset += size;\n }\n return result;\n}\n\nexport function decodeBase62Lex(value: string): Uint8Array {\n if (!value) {\n return new Uint8Array();\n }\n if (!base62Regex.test(value)) {\n throw new Error('base62: invalid string');\n }\n\n let totalBytes = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base62: invalid length');\n }\n totalBytes += size;\n offset += chunkLength;\n }\n\n const result = new Uint8Array(totalBytes);\n let cursor = 0;\n for (let offset = 0; offset < value.length; ) {\n const remaining = value.length - offset;\n const chunkLength = remaining >= maxEncodedChunk ? maxEncodedChunk : remaining;\n const size = encodedLengthToChunk.get(chunkLength);\n if (!size) {\n throw new Error('base62: invalid length');\n }\n const chunk = decodeChunk(value.slice(offset, offset + chunkLength), size);\n result.set(chunk, cursor);\n cursor += size;\n offset += chunkLength;\n }\n return result;\n}\n","import { encodeBase48Lex } from './base48';\nimport { encodeBase62Lex } from './base62';\n\nconst requestIdPrefix = 'req_';\n\nfunction uuidv7Bytes(): Uint8Array {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n\n // Encode timestamp in first 48 bits\n const timestamp = BigInt(Date.now());\n bytes[0] = Number((timestamp >> 40n) & 0xffn);\n bytes[1] = Number((timestamp >> 32n) & 0xffn);\n bytes[2] = Number((timestamp >> 24n) & 0xffn);\n bytes[3] = Number((timestamp >> 16n) & 0xffn);\n bytes[4] = Number((timestamp >> 8n) & 0xffn);\n bytes[5] = Number(timestamp & 0xffn);\n\n // Set version (7) and variant (RFC 4122)\n const byte6 = bytes[6] ?? 0;\n const byte8 = bytes[8] ?? 0;\n bytes[6] = (byte6 & 0x0f) | 0x70;\n bytes[8] = (byte8 & 0x3f) | 0x80;\n\n return bytes;\n}\n\n/**\n * Generates a UUIDv7 string.\n * Uses crypto.getRandomValues which is available in all modern JS runtimes\n * (browsers, Node.js 15+, Deno, Bun, Cloudflare Workers, Vercel Edge, etc.)\n */\nexport function uuidv7(): string {\n const bytes = uuidv7Bytes();\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10).join('')}`;\n}\n\nexport function uuidv7base62(): string {\n return encodeBase62Lex(uuidv7Bytes());\n}\n\nexport function uuidv7base48(): string {\n return encodeBase48Lex(uuidv7Bytes());\n}\n\nexport function generateRequestId(): string {\n return `${requestIdPrefix}${uuidv7base48()}`;\n}\n","import type { Span } from '@opentelemetry/api';\nimport type { AttributeValue, NormalizedRequest, XrayContext } from './types';\nimport type { CaptureConfig, RedactionConfig, ResolvedXrayConfig } from './config';\n\nexport type RequestState = {\n request: NormalizedRequest;\n config: ResolvedXrayConfig;\n span?: Span;\n context: XrayContext;\n attributes: Record<string, AttributeValue>;\n events: Array<{ name: string; attributes?: Record<string, AttributeValue> }>;\n tags: Record<string, AttributeValue>;\n tenantId?: string;\n userId?: string;\n sessionId?: string;\n error?: unknown;\n captureOverride?: Partial<CaptureConfig>;\n redactionOverride?: Partial<RedactionConfig>;\n};\n\nconst contextMap = new WeakMap<XrayContext, RequestState>();\nconst objectMap = new WeakMap<object, RequestState>();\n\nexport function bindContext(ctx: XrayContext, state: RequestState): void {\n contextMap.set(ctx, state);\n}\n\nexport function getContextState(ctx: XrayContext): RequestState | undefined {\n return contextMap.get(ctx);\n}\n\nexport function bindObject(target: object, state: RequestState): void {\n objectMap.set(target, state);\n}\n\nexport function getContextFromObject(target: unknown): XrayContext | undefined {\n const state = getStateFromObject(target);\n return state?.context;\n}\n\nexport function getStateFromObject(target: unknown): RequestState | undefined {\n if (!target || typeof target !== 'object') {\n return undefined;\n }\n if (objectMap.has(target)) {\n return objectMap.get(target);\n }\n\n const fallback = findNestedTarget(target as Record<string, unknown>);\n if (fallback && objectMap.has(fallback)) {\n return objectMap.get(fallback);\n }\n return undefined;\n}\n\nfunction findNestedTarget(obj: Record<string, unknown>): object | null {\n if (obj.raw && typeof obj.raw === 'object') {\n return obj.raw as object;\n }\n if (obj.req && typeof obj.req === 'object') {\n const req = obj.req as Record<string, unknown>;\n if (req.raw && typeof req.raw === 'object') {\n return req.raw as object;\n }\n return req as object;\n }\n if (obj.request && typeof obj.request === 'object') {\n const request = obj.request as Record<string, unknown>;\n if (request.raw && typeof request.raw === 'object') {\n return request.raw as object;\n }\n return request as object;\n }\n return null;\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkIEWCR3GTcjs = require('./chunk-IEWCR3GT.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
@@ -12,23 +12,23 @@ var _chunkUJWD5CFAcjs = require('./chunk-UJWD5CFA.cjs');
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkM6G4PEGFcjs = require('./chunk-M6G4PEGF.cjs');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunkEPQTFPT7cjs = require('./chunk-EPQTFPT7.cjs');
|
|
21
21
|
|
|
22
22
|
// src/fetch/emitter.ts
|
|
23
23
|
var _exportertraceotlpproto = require('@opentelemetry/exporter-trace-otlp-proto');
|
|
24
24
|
function createEmitter2(config) {
|
|
25
|
-
const resolved =
|
|
25
|
+
const resolved = _chunkIEWCR3GTcjs.normalizeConfig.call(void 0, config);
|
|
26
26
|
const exporter = _nullishCoalesce(_optionalChain([config, 'access', _ => _.exporter, 'optionalAccess', _2 => _2.instance]), () => ( new (0, _exportertraceotlpproto.OTLPTraceExporter)({
|
|
27
27
|
url: resolved.exporter.endpointUrl,
|
|
28
28
|
headers: _nullishCoalesce(resolved.exporter.headers, () => ( {})),
|
|
29
29
|
timeoutMillis: resolved.exporter.timeoutMs
|
|
30
30
|
})));
|
|
31
|
-
return
|
|
31
|
+
return _chunkIEWCR3GTcjs.createEmitter.call(void 0, config, exporter);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// src/fetch/adapter.ts
|
|
@@ -38,29 +38,29 @@ function wrapFetch(handler, xray, options) {
|
|
|
38
38
|
method: req.method,
|
|
39
39
|
url: req.url,
|
|
40
40
|
route: _optionalChain([options, 'optionalAccess', _3 => _3.route]),
|
|
41
|
-
headers:
|
|
41
|
+
headers: _chunkM6G4PEGFcjs.headerValuesFromFetchHeaders.call(void 0, req.headers),
|
|
42
42
|
requestId: _optionalChain([options, 'optionalAccess', _4 => _4.requestId]),
|
|
43
43
|
startTimeMs: Date.now()
|
|
44
44
|
};
|
|
45
45
|
const ctx = xray.startRequest(normalizedRequest);
|
|
46
|
-
|
|
46
|
+
_chunkM6G4PEGFcjs.bindContextToObject.call(void 0, req, ctx);
|
|
47
47
|
if (_optionalChain([options, 'optionalAccess', _5 => _5.requestId])) {
|
|
48
|
-
|
|
48
|
+
_chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, options.requestId);
|
|
49
49
|
}
|
|
50
50
|
if (_optionalChain([options, 'optionalAccess', _6 => _6.route])) {
|
|
51
|
-
|
|
51
|
+
_chunkM6G4PEGFcjs.setContextRoute.call(void 0, ctx, options.route);
|
|
52
52
|
}
|
|
53
53
|
if (_optionalChain([options, 'optionalAccess', _7 => _7.capture])) {
|
|
54
|
-
|
|
54
|
+
_chunkM6G4PEGFcjs.setCaptureOverride.call(void 0, ctx, options.capture);
|
|
55
55
|
}
|
|
56
56
|
if (_optionalChain([options, 'optionalAccess', _8 => _8.redaction])) {
|
|
57
|
-
|
|
57
|
+
_chunkM6G4PEGFcjs.setRedactionOverride.call(void 0, ctx, options.redaction);
|
|
58
58
|
}
|
|
59
59
|
if (_optionalChain([options, 'optionalAccess', _9 => _9.onRequest])) {
|
|
60
60
|
try {
|
|
61
61
|
options.onRequest(ctx);
|
|
62
62
|
} catch (err) {
|
|
63
|
-
|
|
63
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onRequest failed", {
|
|
64
64
|
error: err instanceof Error ? err.message : String(err)
|
|
65
65
|
});
|
|
66
66
|
}
|
|
@@ -69,7 +69,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
69
69
|
const requestCapture = capture.requestBody === "none" ? null : wrapRequestBody(req, capture.maxBodyBytes);
|
|
70
70
|
const requestForHandler = _nullishCoalesce(_optionalChain([requestCapture, 'optionalAccess', _11 => _11.request]), () => ( req));
|
|
71
71
|
if (requestForHandler !== req) {
|
|
72
|
-
|
|
72
|
+
_chunkM6G4PEGFcjs.bindContextToObject.call(void 0, requestForHandler, ctx);
|
|
73
73
|
}
|
|
74
74
|
let response;
|
|
75
75
|
try {
|
|
@@ -89,7 +89,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
89
89
|
try {
|
|
90
90
|
options.onError(ctx, err);
|
|
91
91
|
} catch (errInner) {
|
|
92
|
-
|
|
92
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
|
|
93
93
|
error: errInner instanceof Error ? errInner.message : String(errInner)
|
|
94
94
|
});
|
|
95
95
|
}
|
|
@@ -98,7 +98,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
98
98
|
try {
|
|
99
99
|
options.onResponse(ctx, log);
|
|
100
100
|
} catch (errInner) {
|
|
101
|
-
|
|
101
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
102
102
|
xray.config.logger,
|
|
103
103
|
"warn",
|
|
104
104
|
xray.config.logLevel,
|
|
@@ -122,7 +122,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
122
122
|
try {
|
|
123
123
|
options.onResponse(ctx, log);
|
|
124
124
|
} catch (err) {
|
|
125
|
-
|
|
125
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
126
126
|
xray.config.logger,
|
|
127
127
|
"warn",
|
|
128
128
|
xray.config.logLevel,
|
|
@@ -138,7 +138,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
138
138
|
const responseHeaders = new Headers(response.headers);
|
|
139
139
|
ensureResponseRequestIdHeaders(responseHeaders, ctx, xray);
|
|
140
140
|
const statusCode = response.status;
|
|
141
|
-
const isUpgrade =
|
|
141
|
+
const isUpgrade = _chunkM6G4PEGFcjs.isWebsocketUpgradeFetch.call(void 0, statusCode, req.headers, responseHeaders);
|
|
142
142
|
if (!response.body || isUpgrade || capture.responseBody === "none") {
|
|
143
143
|
const log = finalizeResponse(
|
|
144
144
|
ctx,
|
|
@@ -154,7 +154,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
154
154
|
try {
|
|
155
155
|
options.onResponse(ctx, log);
|
|
156
156
|
} catch (err) {
|
|
157
|
-
|
|
157
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
158
158
|
xray.config.logger,
|
|
159
159
|
"warn",
|
|
160
160
|
xray.config.logLevel,
|
|
@@ -171,7 +171,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
171
171
|
statusText: response.statusText
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
|
-
const responseCapture = new (0,
|
|
174
|
+
const responseCapture = new (0, _chunkM6G4PEGFcjs.LimitedBuffer)(capture.maxBodyBytes);
|
|
175
175
|
let finished = false;
|
|
176
176
|
const finalize = () => {
|
|
177
177
|
if (finished) {
|
|
@@ -192,7 +192,7 @@ function wrapFetch(handler, xray, options) {
|
|
|
192
192
|
try {
|
|
193
193
|
options.onResponse(ctx, log);
|
|
194
194
|
} catch (err) {
|
|
195
|
-
|
|
195
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
196
196
|
xray.config.logger,
|
|
197
197
|
"warn",
|
|
198
198
|
xray.config.logLevel,
|
|
@@ -220,29 +220,29 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
220
220
|
method: req.method,
|
|
221
221
|
url: req.url,
|
|
222
222
|
route: _optionalChain([options, 'optionalAccess', _19 => _19.route]),
|
|
223
|
-
headers:
|
|
223
|
+
headers: _chunkM6G4PEGFcjs.headerValuesFromFetchHeaders.call(void 0, req.headers),
|
|
224
224
|
requestId: _optionalChain([options, 'optionalAccess', _20 => _20.requestId]),
|
|
225
225
|
startTimeMs: Date.now()
|
|
226
226
|
};
|
|
227
227
|
const ctx = xray.startRequest(normalizedRequest);
|
|
228
|
-
|
|
228
|
+
_chunkM6G4PEGFcjs.bindContextToObject.call(void 0, req, ctx);
|
|
229
229
|
if (_optionalChain([options, 'optionalAccess', _21 => _21.requestId])) {
|
|
230
|
-
|
|
230
|
+
_chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, options.requestId);
|
|
231
231
|
}
|
|
232
232
|
if (_optionalChain([options, 'optionalAccess', _22 => _22.route])) {
|
|
233
|
-
|
|
233
|
+
_chunkM6G4PEGFcjs.setContextRoute.call(void 0, ctx, options.route);
|
|
234
234
|
}
|
|
235
235
|
if (_optionalChain([options, 'optionalAccess', _23 => _23.capture])) {
|
|
236
|
-
|
|
236
|
+
_chunkM6G4PEGFcjs.setCaptureOverride.call(void 0, ctx, options.capture);
|
|
237
237
|
}
|
|
238
238
|
if (_optionalChain([options, 'optionalAccess', _24 => _24.redaction])) {
|
|
239
|
-
|
|
239
|
+
_chunkM6G4PEGFcjs.setRedactionOverride.call(void 0, ctx, options.redaction);
|
|
240
240
|
}
|
|
241
241
|
if (_optionalChain([options, 'optionalAccess', _25 => _25.onRequest])) {
|
|
242
242
|
try {
|
|
243
243
|
options.onRequest(ctx);
|
|
244
244
|
} catch (err) {
|
|
245
|
-
|
|
245
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onRequest failed", {
|
|
246
246
|
error: err instanceof Error ? err.message : String(err)
|
|
247
247
|
});
|
|
248
248
|
}
|
|
@@ -267,7 +267,7 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
267
267
|
try {
|
|
268
268
|
options.onError(ctx, err);
|
|
269
269
|
} catch (errInner) {
|
|
270
|
-
|
|
270
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
|
|
271
271
|
error: errInner instanceof Error ? errInner.message : String(errInner)
|
|
272
272
|
});
|
|
273
273
|
}
|
|
@@ -276,7 +276,7 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
276
276
|
try {
|
|
277
277
|
options.onResponse(ctx, log);
|
|
278
278
|
} catch (errInner) {
|
|
279
|
-
|
|
279
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
280
280
|
xray.config.logger,
|
|
281
281
|
"warn",
|
|
282
282
|
xray.config.logLevel,
|
|
@@ -300,7 +300,7 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
300
300
|
try {
|
|
301
301
|
options.onResponse(ctx, log);
|
|
302
302
|
} catch (err) {
|
|
303
|
-
|
|
303
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
304
304
|
xray.config.logger,
|
|
305
305
|
"warn",
|
|
306
306
|
xray.config.logLevel,
|
|
@@ -328,7 +328,7 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
328
328
|
}
|
|
329
329
|
}
|
|
330
330
|
const statusCode = response.status;
|
|
331
|
-
const isUpgrade =
|
|
331
|
+
const isUpgrade = _chunkM6G4PEGFcjs.isWebsocketUpgradeFetch.call(void 0, statusCode, req.headers, responseHeaders);
|
|
332
332
|
const responseCapturePromise = !response.body || isUpgrade || capture.responseBody === "none" ? Promise.resolve(null) : captureResponseClone(response, capture.maxBodyBytes, xray);
|
|
333
333
|
void (async () => {
|
|
334
334
|
const [requestCapture, responseCapture] = await Promise.all([
|
|
@@ -349,7 +349,7 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
349
349
|
try {
|
|
350
350
|
options.onResponse(ctx, log);
|
|
351
351
|
} catch (err) {
|
|
352
|
-
|
|
352
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
353
353
|
xray.config.logger,
|
|
354
354
|
"warn",
|
|
355
355
|
xray.config.logLevel,
|
|
@@ -361,7 +361,7 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
361
361
|
}
|
|
362
362
|
}
|
|
363
363
|
})().catch((err) => {
|
|
364
|
-
|
|
364
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0,
|
|
365
365
|
xray.config.logger,
|
|
366
366
|
"warn",
|
|
367
367
|
xray.config.logLevel,
|
|
@@ -375,7 +375,7 @@ function wrapFetchPreserve(handler, xray, options) {
|
|
|
375
375
|
};
|
|
376
376
|
}
|
|
377
377
|
function getXrayContext(req) {
|
|
378
|
-
return
|
|
378
|
+
return _chunkM6G4PEGFcjs.getXrayContextFromObject.call(void 0, req);
|
|
379
379
|
}
|
|
380
380
|
function wrapRequestBody(request, limit) {
|
|
381
381
|
if (limit <= 0 || !request.body || request.bodyUsed) {
|
|
@@ -383,7 +383,7 @@ function wrapRequestBody(request, limit) {
|
|
|
383
383
|
}
|
|
384
384
|
const originalBody = request.body;
|
|
385
385
|
const capture = {
|
|
386
|
-
buffer: new (0,
|
|
386
|
+
buffer: new (0, _chunkM6G4PEGFcjs.LimitedBuffer)(limit),
|
|
387
387
|
read: false
|
|
388
388
|
};
|
|
389
389
|
let controller = null;
|
|
@@ -461,10 +461,10 @@ async function captureRequestClone(request, limit, xray) {
|
|
|
461
461
|
try {
|
|
462
462
|
clone = request.clone();
|
|
463
463
|
} catch (e2) {
|
|
464
|
-
|
|
464
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: request clone failed");
|
|
465
465
|
return null;
|
|
466
466
|
}
|
|
467
|
-
const buffer = new (0,
|
|
467
|
+
const buffer = new (0, _chunkM6G4PEGFcjs.LimitedBuffer)(limit);
|
|
468
468
|
await readStreamToBuffer(clone.body, buffer);
|
|
469
469
|
return buffer;
|
|
470
470
|
}
|
|
@@ -476,10 +476,10 @@ async function captureResponseClone(response, limit, xray) {
|
|
|
476
476
|
try {
|
|
477
477
|
clone = response.clone();
|
|
478
478
|
} catch (e3) {
|
|
479
|
-
|
|
479
|
+
_chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: response clone failed");
|
|
480
480
|
return null;
|
|
481
481
|
}
|
|
482
|
-
const buffer = new (0,
|
|
482
|
+
const buffer = new (0, _chunkM6G4PEGFcjs.LimitedBuffer)(limit);
|
|
483
483
|
await readStreamToBuffer(clone.body, buffer);
|
|
484
484
|
return buffer;
|
|
485
485
|
}
|
|
@@ -549,10 +549,10 @@ function wrapReadableStream(stream, capture, onFinish, onError) {
|
|
|
549
549
|
}
|
|
550
550
|
function finalizeResponse(ctx, xray, normalizedRequest, capture, requestCapture, responseHeaders, statusCode, responseCapture) {
|
|
551
551
|
if (requestCapture) {
|
|
552
|
-
const buffer = requestCapture instanceof
|
|
553
|
-
const read = requestCapture instanceof
|
|
552
|
+
const buffer = requestCapture instanceof _chunkM6G4PEGFcjs.LimitedBuffer ? requestCapture : requestCapture.buffer;
|
|
553
|
+
const read = requestCapture instanceof _chunkM6G4PEGFcjs.LimitedBuffer ? true : requestCapture.read;
|
|
554
554
|
if (read) {
|
|
555
|
-
normalizedRequest.body =
|
|
555
|
+
normalizedRequest.body = _chunkEPQTFPT7cjs.makeCapturedBody.call(void 0,
|
|
556
556
|
buffer.bytes(),
|
|
557
557
|
buffer.totalBytes(),
|
|
558
558
|
buffer.truncated(),
|
|
@@ -560,7 +560,7 @@ function finalizeResponse(ctx, xray, normalizedRequest, capture, requestCapture,
|
|
|
560
560
|
);
|
|
561
561
|
}
|
|
562
562
|
}
|
|
563
|
-
const responseBody = responseCapture ?
|
|
563
|
+
const responseBody = responseCapture ? _chunkEPQTFPT7cjs.makeCapturedBody.call(void 0,
|
|
564
564
|
responseCapture.bytes(),
|
|
565
565
|
responseCapture.totalBytes(),
|
|
566
566
|
responseCapture.truncated(),
|
|
@@ -568,7 +568,7 @@ function finalizeResponse(ctx, xray, normalizedRequest, capture, requestCapture,
|
|
|
568
568
|
) : void 0;
|
|
569
569
|
return xray.endRequest(ctx, {
|
|
570
570
|
statusCode,
|
|
571
|
-
headers:
|
|
571
|
+
headers: _chunkM6G4PEGFcjs.headerValuesFromFetchHeaders.call(void 0, responseHeaders),
|
|
572
572
|
body: responseBody,
|
|
573
573
|
endTimeMs: Date.now()
|
|
574
574
|
});
|
|
@@ -584,9 +584,9 @@ function ensureResponseRequestIdHeaders(headers, ctx, xray) {
|
|
|
584
584
|
headers.set(canonicalHeaderName(headerName), explicit);
|
|
585
585
|
return { value: explicit, set: true };
|
|
586
586
|
}
|
|
587
|
-
const generated =
|
|
587
|
+
const generated = _chunkEPQTFPT7cjs.generateRequestId.call(void 0, );
|
|
588
588
|
headers.set(canonicalHeaderName(headerName), generated);
|
|
589
|
-
|
|
589
|
+
_chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, generated);
|
|
590
590
|
return { value: generated, set: true };
|
|
591
591
|
}
|
|
592
592
|
function isNodeRuntime() {
|
|
@@ -610,4 +610,4 @@ function canonicalHeaderName(headerName) {
|
|
|
610
610
|
|
|
611
611
|
|
|
612
612
|
exports.createEmitter = createEmitter2; exports.wrapFetch = wrapFetch; exports.wrapFetchPreserve = wrapFetchPreserve; exports.getXrayContext = getXrayContext;
|
|
613
|
-
//# sourceMappingURL=chunk-
|
|
613
|
+
//# sourceMappingURL=chunk-FZH3IY6R.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-SUVCVINA.cjs","../src/fetch/emitter.ts","../src/fetch/adapter.ts"],"names":["createEmitter"],"mappings":"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","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-SUVCVINA.cjs","sourcesContent":[null,"// Use the bare package import so that Node.js resolves to the Node build (http\n// transport) while bundlers (webpack, vite, wrangler/esbuild) follow the\n// package.json \"browser\" field and resolve to the browser build automatically.\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport {\n createEmitter as createCoreEmitter,\n normalizeConfig,\n type XrayRuntimeConfig,\n} from '../core/index';\n\n/**\n * Create a fetch/edge runtime emitter using OTLP HTTP transport by default.\n *\n * Pass `config.exporter.instance` to provide a custom `SpanExporter`.\n */\nexport function createEmitter(config: XrayRuntimeConfig) {\n const resolved = normalizeConfig(config);\n const exporter =\n config.exporter?.instance ??\n new OTLPTraceExporter({\n url: resolved.exporter.endpointUrl,\n headers: resolved.exporter.headers ?? {},\n timeoutMillis: resolved.exporter.timeoutMs,\n });\n\n return createCoreEmitter(config, exporter);\n}\n","import type {\n CaptureConfig,\n NormalizedRequest,\n RedactionConfig,\n RequestLog,\n XrayContext,\n XrayEmitter,\n} from '../core/index';\nimport {\n LimitedBuffer,\n bindContextToObject,\n getXrayContextFromObject,\n headerValuesFromFetchHeaders,\n isWebsocketUpgradeFetch,\n logWithLevel,\n makeCapturedBody,\n setCaptureOverride,\n setContextRequestId,\n setContextRoute,\n setRedactionOverride,\n generateRequestId,\n} from '../core/internal';\n\nexport interface WrapOptions {\n /**\n * Explicit route pattern for this handler (for example `/users/:id`).\n */\n route?: string;\n /**\n * Explicit request ID. Skips header lookup/generation when provided.\n */\n requestId?: string;\n /**\n * Per-handler capture overrides.\n */\n capture?: Partial<CaptureConfig>;\n /**\n * Per-handler redaction overrides.\n */\n redaction?: Partial<RedactionConfig>;\n /**\n * Hook called after request context is created.\n */\n onRequest?: (ctx: XrayContext) => void;\n /**\n * Hook called after the request has been finalized and logged.\n */\n onResponse?: (ctx: XrayContext, log: RequestLog) => void;\n /**\n * Hook called when request handling fails.\n */\n onError?: (ctx: XrayContext, err: unknown) => void;\n}\n\n/**\n * Wrap a fetch-style handler with X-ray instrumentation.\n *\n * This variant may replace the request/response objects to safely capture\n * bodies and inject a request ID response header when needed.\n */\nexport function wrapFetch(\n handler: (req: Request) => Response | Promise<Response>,\n xray: XrayEmitter,\n options?: WrapOptions,\n): (req: Request) => Promise<Response> {\n return async (req: Request) => {\n const normalizedRequest: NormalizedRequest = {\n method: req.method,\n url: req.url,\n route: options?.route,\n headers: headerValuesFromFetchHeaders(req.headers),\n requestId: options?.requestId,\n startTimeMs: Date.now(),\n };\n\n const ctx = xray.startRequest(normalizedRequest);\n bindContextToObject(req, ctx);\n\n if (options?.requestId) {\n setContextRequestId(ctx, options.requestId);\n }\n if (options?.route) {\n setContextRoute(ctx, options.route);\n }\n if (options?.capture) {\n setCaptureOverride(ctx, options.capture);\n }\n if (options?.redaction) {\n setRedactionOverride(ctx, options.redaction);\n }\n\n if (options?.onRequest) {\n try {\n options.onRequest(ctx);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onRequest failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const capture = options?.capture\n ? { ...xray.config.capture, ...options.capture }\n : xray.config.capture;\n const requestCapture =\n capture.requestBody === 'none' ? null : wrapRequestBody(req, capture.maxBodyBytes);\n const requestForHandler = requestCapture?.request ?? req;\n if (requestForHandler !== req) {\n bindContextToObject(requestForHandler, ctx);\n }\n\n let response: Response;\n try {\n response = await handler(requestForHandler);\n } catch (err) {\n const log = xray.endRequest(\n ctx,\n {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n },\n err,\n );\n if (options?.onError) {\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n });\n }\n }\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (errInner) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n },\n );\n }\n }\n throw err;\n }\n\n if (!(response instanceof Response)) {\n const log = xray.endRequest(ctx, {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n });\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n return response;\n }\n\n const responseHeaders = new Headers(response.headers);\n ensureResponseRequestIdHeaders(responseHeaders, ctx, xray);\n const statusCode = response.status;\n const isUpgrade = isWebsocketUpgradeFetch(statusCode, req.headers, responseHeaders);\n\n if (!response.body || isUpgrade || capture.responseBody === 'none') {\n const log = finalizeResponse(\n ctx,\n xray,\n normalizedRequest,\n capture,\n requestCapture?.capture ?? null,\n responseHeaders,\n statusCode,\n null,\n );\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n return new Response(response.body, {\n headers: responseHeaders,\n status: response.status,\n statusText: response.statusText,\n });\n }\n\n const responseCapture = new LimitedBuffer(capture.maxBodyBytes);\n let finished = false;\n const finalize = () => {\n if (finished) {\n return;\n }\n finished = true;\n const log = finalizeResponse(\n ctx,\n xray,\n normalizedRequest,\n capture,\n requestCapture?.capture ?? null,\n responseHeaders,\n statusCode,\n responseCapture,\n );\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n };\n\n const wrappedBody = wrapReadableStream(response.body, responseCapture, finalize, () => {\n finalize();\n });\n\n return new Response(wrappedBody, {\n headers: responseHeaders,\n status: response.status,\n statusText: response.statusText,\n });\n };\n}\n\n/**\n * Wrap a fetch-style handler while preserving original request/response objects\n * whenever possible.\n *\n * If a missing request ID header must be injected and response headers are\n * immutable, this wrapper may still replace the response object.\n */\nexport function wrapFetchPreserve(\n handler: (req: Request) => Response | Promise<Response>,\n xray: XrayEmitter,\n options?: WrapOptions,\n): (req: Request) => Promise<Response> {\n return async (req: Request) => {\n const normalizedRequest: NormalizedRequest = {\n method: req.method,\n url: req.url,\n route: options?.route,\n headers: headerValuesFromFetchHeaders(req.headers),\n requestId: options?.requestId,\n startTimeMs: Date.now(),\n };\n\n const ctx = xray.startRequest(normalizedRequest);\n bindContextToObject(req, ctx);\n\n if (options?.requestId) {\n setContextRequestId(ctx, options.requestId);\n }\n if (options?.route) {\n setContextRoute(ctx, options.route);\n }\n if (options?.capture) {\n setCaptureOverride(ctx, options.capture);\n }\n if (options?.redaction) {\n setRedactionOverride(ctx, options.redaction);\n }\n\n if (options?.onRequest) {\n try {\n options.onRequest(ctx);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onRequest failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const capture = options?.capture\n ? { ...xray.config.capture, ...options.capture }\n : xray.config.capture;\n const requestCapturePromise =\n capture.requestBody === 'none'\n ? Promise.resolve(null)\n : captureRequestClone(req, capture.maxBodyBytes, xray);\n\n let response: Response;\n try {\n response = await handler(req);\n } catch (err) {\n const log = xray.endRequest(\n ctx,\n {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n },\n err,\n );\n if (options?.onError) {\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n });\n }\n }\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (errInner) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n },\n );\n }\n }\n throw err;\n }\n\n if (!(response instanceof Response)) {\n const log = xray.endRequest(ctx, {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n });\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n return response;\n }\n\n const responseHeaders = new Headers(response.headers);\n const ensured = ensureResponseRequestIdHeaders(responseHeaders, ctx, xray);\n if (ensured.set) {\n const headerName = canonicalHeaderName(xray.config.requestId.header);\n try {\n response.headers.set(headerName, ensured.value ?? '');\n } catch {\n response = new Response(response.body, {\n headers: responseHeaders,\n status: response.status,\n statusText: response.statusText,\n });\n }\n }\n const statusCode = response.status;\n const isUpgrade = isWebsocketUpgradeFetch(statusCode, req.headers, responseHeaders);\n const responseCapturePromise =\n !response.body || isUpgrade || capture.responseBody === 'none'\n ? Promise.resolve(null)\n : captureResponseClone(response, capture.maxBodyBytes, xray);\n\n void (async () => {\n const [requestCapture, responseCapture] = await Promise.all([\n requestCapturePromise,\n responseCapturePromise,\n ]);\n const log = finalizeResponse(\n ctx,\n xray,\n normalizedRequest,\n capture,\n requestCapture,\n responseHeaders,\n statusCode,\n responseCapture,\n );\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n })().catch((err) => {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: response capture failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n });\n\n return response;\n };\n}\n\n/**\n * Retrieve the `XrayContext` bound to a fetch `Request`.\n */\nexport function getXrayContext(req: Request): XrayContext | undefined {\n return getXrayContextFromObject(req);\n}\n\ntype RequestCapture = {\n buffer: LimitedBuffer;\n read: boolean;\n};\n\nfunction wrapRequestBody(\n request: Request,\n limit: number,\n): { capture: RequestCapture | null; request: Request } {\n if (limit <= 0 || !request.body || request.bodyUsed) {\n return { capture: null, request };\n }\n\n const originalBody = request.body;\n const capture: RequestCapture = {\n buffer: new LimitedBuffer(limit),\n read: false,\n };\n\n let controller: ReadableStreamDefaultController<Uint8Array> | null = null;\n let started = false;\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n\n const wrappedStream = new ReadableStream<Uint8Array>({\n start(c) {\n controller = c;\n },\n async cancel(reason) {\n if (!started) {\n return;\n }\n try {\n await reader?.cancel(reason);\n } finally {\n // Ignore cancellation.\n }\n },\n });\n\n const startPump = () => {\n if (started) {\n return;\n }\n started = true;\n reader = originalBody.getReader();\n void (async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n controller?.close();\n return;\n }\n if (value) {\n capture.read = true;\n capture.buffer.write(value);\n controller?.enqueue(value);\n }\n }\n } catch (err) {\n controller?.error(err);\n }\n })();\n };\n\n const originalGetReader = wrappedStream.getReader.bind(wrappedStream);\n (wrappedStream as unknown as { getReader: typeof wrappedStream.getReader }).getReader = (\n ...args: unknown[]\n ) => {\n startPump();\n // @ts-expect-error - preserve built-in `getReader` overloads\n return originalGetReader(...args);\n };\n\n const init: RequestInit & { duplex?: 'half' } = {\n body: wrappedStream,\n cache: request.cache,\n credentials: request.credentials,\n headers: request.headers,\n integrity: request.integrity,\n keepalive: request.keepalive,\n method: request.method,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n signal: request.signal,\n };\n if (isNodeRuntime()) {\n init.duplex = 'half';\n }\n\n const wrappedRequest = new Request(request.url, init);\n return { capture, request: wrappedRequest };\n}\n\nasync function captureRequestClone(\n request: Request,\n limit: number,\n xray: XrayEmitter,\n): Promise<LimitedBuffer | null> {\n if (limit <= 0 || !request.body || request.bodyUsed) {\n return null;\n }\n let clone: Request;\n try {\n clone = request.clone();\n } catch {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: request clone failed');\n return null;\n }\n\n const buffer = new LimitedBuffer(limit);\n await readStreamToBuffer(clone.body, buffer);\n return buffer;\n}\n\nasync function captureResponseClone(\n response: Response,\n limit: number,\n xray: XrayEmitter,\n): Promise<LimitedBuffer | null> {\n if (limit <= 0 || !response.body || response.bodyUsed) {\n return null;\n }\n let clone: Response;\n try {\n clone = response.clone();\n } catch {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: response clone failed');\n return null;\n }\n\n const buffer = new LimitedBuffer(limit);\n await readStreamToBuffer(clone.body, buffer);\n return buffer;\n}\n\nasync function readStreamToBuffer(\n stream: ReadableStream<Uint8Array> | null,\n buffer: LimitedBuffer,\n): Promise<void> {\n if (!stream) {\n return;\n }\n\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n if (value) {\n buffer.write(value);\n }\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n }\n}\n\nfunction wrapReadableStream(\n stream: ReadableStream<Uint8Array>,\n capture: LimitedBuffer,\n onFinish: () => void,\n onError?: (err: unknown) => void,\n): ReadableStream<Uint8Array> {\n const reader = stream.getReader();\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n onFinish();\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n return;\n }\n if (value) {\n capture.write(value);\n controller.enqueue(value);\n }\n } catch (err) {\n controller.error(err);\n onError?.(err);\n onFinish();\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n }\n },\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n onFinish();\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n }\n },\n });\n}\n\nfunction finalizeResponse(\n ctx: XrayContext,\n xray: XrayEmitter,\n normalizedRequest: NormalizedRequest,\n capture: CaptureConfig,\n requestCapture: RequestCapture | LimitedBuffer | null,\n responseHeaders: Headers,\n statusCode: number,\n responseCapture: LimitedBuffer | null,\n): RequestLog {\n if (requestCapture) {\n const buffer = requestCapture instanceof LimitedBuffer ? requestCapture : requestCapture.buffer;\n const read = requestCapture instanceof LimitedBuffer ? true : requestCapture.read;\n if (read) {\n normalizedRequest.body = makeCapturedBody(\n buffer.bytes(),\n buffer.totalBytes(),\n buffer.truncated(),\n capture.requestBody === 'text' ? 'text' : 'base64',\n );\n }\n }\n\n const responseBody = responseCapture\n ? makeCapturedBody(\n responseCapture.bytes(),\n responseCapture.totalBytes(),\n responseCapture.truncated(),\n capture.responseBody === 'text' ? 'text' : 'base64',\n )\n : undefined;\n\n return xray.endRequest(ctx, {\n statusCode,\n headers: headerValuesFromFetchHeaders(responseHeaders),\n body: responseBody,\n endTimeMs: Date.now(),\n });\n}\n\nfunction ensureResponseRequestIdHeaders(\n headers: Headers,\n ctx: XrayContext,\n xray: XrayEmitter,\n): { value?: string; set: boolean } {\n const headerName = xray.config.requestId.header;\n const existing = normalizeRequestIdCandidate(headers.get(headerName) ?? undefined);\n if (existing) {\n return { value: existing, set: false };\n }\n\n const explicit = normalizeRequestIdCandidate(ctx.requestId);\n if (explicit) {\n headers.set(canonicalHeaderName(headerName), explicit);\n return { value: explicit, set: true };\n }\n\n const generated = generateRequestId();\n headers.set(canonicalHeaderName(headerName), generated);\n setContextRequestId(ctx, generated);\n return { value: generated, set: true };\n}\n\nfunction isNodeRuntime(): boolean {\n const maybeProcess = (\n globalThis as typeof globalThis & {\n process?: { versions?: { node?: string } };\n }\n ).process;\n return !!maybeProcess?.versions?.node;\n}\n\nfunction normalizeRequestIdCandidate(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction canonicalHeaderName(headerName: string): string {\n return headerName\n .split('-')\n .filter(Boolean)\n .map((part) => (part ? part[0]!.toUpperCase() + part.slice(1) : part))\n .join('-');\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-FZH3IY6R.cjs","../src/fetch/emitter.ts","../src/fetch/adapter.ts"],"names":["createEmitter"],"mappings":"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","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-FZH3IY6R.cjs","sourcesContent":[null,"// Use the bare package import so that Node.js resolves to the Node build (http\n// transport) while bundlers (webpack, vite, wrangler/esbuild) follow the\n// package.json \"browser\" field and resolve to the browser build automatically.\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport {\n createEmitter as createCoreEmitter,\n normalizeConfig,\n type XrayRuntimeConfig,\n} from '../core/index';\n\n/**\n * Create a fetch/edge runtime emitter using OTLP HTTP transport by default.\n *\n * Pass `config.exporter.instance` to provide a custom `SpanExporter`.\n */\nexport function createEmitter(config: XrayRuntimeConfig) {\n const resolved = normalizeConfig(config);\n const exporter =\n config.exporter?.instance ??\n new OTLPTraceExporter({\n url: resolved.exporter.endpointUrl,\n headers: resolved.exporter.headers ?? {},\n timeoutMillis: resolved.exporter.timeoutMs,\n });\n\n return createCoreEmitter(config, exporter);\n}\n","import type {\n CaptureConfig,\n NormalizedRequest,\n RedactionConfig,\n RequestLog,\n XrayContext,\n XrayEmitter,\n} from '../core/index';\nimport {\n LimitedBuffer,\n bindContextToObject,\n getXrayContextFromObject,\n headerValuesFromFetchHeaders,\n isWebsocketUpgradeFetch,\n logWithLevel,\n makeCapturedBody,\n setCaptureOverride,\n setContextRequestId,\n setContextRoute,\n setRedactionOverride,\n generateRequestId,\n} from '../core/internal';\n\nexport interface WrapOptions {\n /**\n * Explicit route pattern for this handler (for example `/users/:id`).\n */\n route?: string;\n /**\n * Explicit request ID. Skips header lookup/generation when provided.\n */\n requestId?: string;\n /**\n * Per-handler capture overrides.\n */\n capture?: Partial<CaptureConfig>;\n /**\n * Per-handler redaction overrides.\n */\n redaction?: Partial<RedactionConfig>;\n /**\n * Hook called after request context is created.\n */\n onRequest?: (ctx: XrayContext) => void;\n /**\n * Hook called after the request has been finalized and logged.\n */\n onResponse?: (ctx: XrayContext, log: RequestLog) => void;\n /**\n * Hook called when request handling fails.\n */\n onError?: (ctx: XrayContext, err: unknown) => void;\n}\n\n/**\n * Wrap a fetch-style handler with X-ray instrumentation.\n *\n * This variant may replace the request/response objects to safely capture\n * bodies and inject a request ID response header when needed.\n */\nexport function wrapFetch(\n handler: (req: Request) => Response | Promise<Response>,\n xray: XrayEmitter,\n options?: WrapOptions,\n): (req: Request) => Promise<Response> {\n return async (req: Request) => {\n const normalizedRequest: NormalizedRequest = {\n method: req.method,\n url: req.url,\n route: options?.route,\n headers: headerValuesFromFetchHeaders(req.headers),\n requestId: options?.requestId,\n startTimeMs: Date.now(),\n };\n\n const ctx = xray.startRequest(normalizedRequest);\n bindContextToObject(req, ctx);\n\n if (options?.requestId) {\n setContextRequestId(ctx, options.requestId);\n }\n if (options?.route) {\n setContextRoute(ctx, options.route);\n }\n if (options?.capture) {\n setCaptureOverride(ctx, options.capture);\n }\n if (options?.redaction) {\n setRedactionOverride(ctx, options.redaction);\n }\n\n if (options?.onRequest) {\n try {\n options.onRequest(ctx);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onRequest failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const capture = options?.capture\n ? { ...xray.config.capture, ...options.capture }\n : xray.config.capture;\n const requestCapture =\n capture.requestBody === 'none' ? null : wrapRequestBody(req, capture.maxBodyBytes);\n const requestForHandler = requestCapture?.request ?? req;\n if (requestForHandler !== req) {\n bindContextToObject(requestForHandler, ctx);\n }\n\n let response: Response;\n try {\n response = await handler(requestForHandler);\n } catch (err) {\n const log = xray.endRequest(\n ctx,\n {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n },\n err,\n );\n if (options?.onError) {\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n });\n }\n }\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (errInner) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n },\n );\n }\n }\n throw err;\n }\n\n if (!(response instanceof Response)) {\n const log = xray.endRequest(ctx, {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n });\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n return response;\n }\n\n const responseHeaders = new Headers(response.headers);\n ensureResponseRequestIdHeaders(responseHeaders, ctx, xray);\n const statusCode = response.status;\n const isUpgrade = isWebsocketUpgradeFetch(statusCode, req.headers, responseHeaders);\n\n if (!response.body || isUpgrade || capture.responseBody === 'none') {\n const log = finalizeResponse(\n ctx,\n xray,\n normalizedRequest,\n capture,\n requestCapture?.capture ?? null,\n responseHeaders,\n statusCode,\n null,\n );\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n return new Response(response.body, {\n headers: responseHeaders,\n status: response.status,\n statusText: response.statusText,\n });\n }\n\n const responseCapture = new LimitedBuffer(capture.maxBodyBytes);\n let finished = false;\n const finalize = () => {\n if (finished) {\n return;\n }\n finished = true;\n const log = finalizeResponse(\n ctx,\n xray,\n normalizedRequest,\n capture,\n requestCapture?.capture ?? null,\n responseHeaders,\n statusCode,\n responseCapture,\n );\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n };\n\n const wrappedBody = wrapReadableStream(response.body, responseCapture, finalize, () => {\n finalize();\n });\n\n return new Response(wrappedBody, {\n headers: responseHeaders,\n status: response.status,\n statusText: response.statusText,\n });\n };\n}\n\n/**\n * Wrap a fetch-style handler while preserving original request/response objects\n * whenever possible.\n *\n * If a missing request ID header must be injected and response headers are\n * immutable, this wrapper may still replace the response object.\n */\nexport function wrapFetchPreserve(\n handler: (req: Request) => Response | Promise<Response>,\n xray: XrayEmitter,\n options?: WrapOptions,\n): (req: Request) => Promise<Response> {\n return async (req: Request) => {\n const normalizedRequest: NormalizedRequest = {\n method: req.method,\n url: req.url,\n route: options?.route,\n headers: headerValuesFromFetchHeaders(req.headers),\n requestId: options?.requestId,\n startTimeMs: Date.now(),\n };\n\n const ctx = xray.startRequest(normalizedRequest);\n bindContextToObject(req, ctx);\n\n if (options?.requestId) {\n setContextRequestId(ctx, options.requestId);\n }\n if (options?.route) {\n setContextRoute(ctx, options.route);\n }\n if (options?.capture) {\n setCaptureOverride(ctx, options.capture);\n }\n if (options?.redaction) {\n setRedactionOverride(ctx, options.redaction);\n }\n\n if (options?.onRequest) {\n try {\n options.onRequest(ctx);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onRequest failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const capture = options?.capture\n ? { ...xray.config.capture, ...options.capture }\n : xray.config.capture;\n const requestCapturePromise =\n capture.requestBody === 'none'\n ? Promise.resolve(null)\n : captureRequestClone(req, capture.maxBodyBytes, xray);\n\n let response: Response;\n try {\n response = await handler(req);\n } catch (err) {\n const log = xray.endRequest(\n ctx,\n {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n },\n err,\n );\n if (options?.onError) {\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n });\n }\n }\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (errInner) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n },\n );\n }\n }\n throw err;\n }\n\n if (!(response instanceof Response)) {\n const log = xray.endRequest(ctx, {\n statusCode: undefined,\n headers: undefined,\n body: undefined,\n endTimeMs: Date.now(),\n });\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n return response;\n }\n\n const responseHeaders = new Headers(response.headers);\n const ensured = ensureResponseRequestIdHeaders(responseHeaders, ctx, xray);\n if (ensured.set) {\n const headerName = canonicalHeaderName(xray.config.requestId.header);\n try {\n response.headers.set(headerName, ensured.value ?? '');\n } catch {\n response = new Response(response.body, {\n headers: responseHeaders,\n status: response.status,\n statusText: response.statusText,\n });\n }\n }\n const statusCode = response.status;\n const isUpgrade = isWebsocketUpgradeFetch(statusCode, req.headers, responseHeaders);\n const responseCapturePromise =\n !response.body || isUpgrade || capture.responseBody === 'none'\n ? Promise.resolve(null)\n : captureResponseClone(response, capture.maxBodyBytes, xray);\n\n void (async () => {\n const [requestCapture, responseCapture] = await Promise.all([\n requestCapturePromise,\n responseCapturePromise,\n ]);\n const log = finalizeResponse(\n ctx,\n xray,\n normalizedRequest,\n capture,\n requestCapture,\n responseHeaders,\n statusCode,\n responseCapture,\n );\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n })().catch((err) => {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: response capture failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n });\n\n return response;\n };\n}\n\n/**\n * Retrieve the `XrayContext` bound to a fetch `Request`.\n */\nexport function getXrayContext(req: Request): XrayContext | undefined {\n return getXrayContextFromObject(req);\n}\n\ntype RequestCapture = {\n buffer: LimitedBuffer;\n read: boolean;\n};\n\nfunction wrapRequestBody(\n request: Request,\n limit: number,\n): { capture: RequestCapture | null; request: Request } {\n if (limit <= 0 || !request.body || request.bodyUsed) {\n return { capture: null, request };\n }\n\n const originalBody = request.body;\n const capture: RequestCapture = {\n buffer: new LimitedBuffer(limit),\n read: false,\n };\n\n let controller: ReadableStreamDefaultController<Uint8Array> | null = null;\n let started = false;\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n\n const wrappedStream = new ReadableStream<Uint8Array>({\n start(c) {\n controller = c;\n },\n async cancel(reason) {\n if (!started) {\n return;\n }\n try {\n await reader?.cancel(reason);\n } finally {\n // Ignore cancellation.\n }\n },\n });\n\n const startPump = () => {\n if (started) {\n return;\n }\n started = true;\n reader = originalBody.getReader();\n void (async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n controller?.close();\n return;\n }\n if (value) {\n capture.read = true;\n capture.buffer.write(value);\n controller?.enqueue(value);\n }\n }\n } catch (err) {\n controller?.error(err);\n }\n })();\n };\n\n const originalGetReader = wrappedStream.getReader.bind(wrappedStream);\n (wrappedStream as unknown as { getReader: typeof wrappedStream.getReader }).getReader = (\n ...args: unknown[]\n ) => {\n startPump();\n // @ts-expect-error - preserve built-in `getReader` overloads\n return originalGetReader(...args);\n };\n\n const init: RequestInit & { duplex?: 'half' } = {\n body: wrappedStream,\n cache: request.cache,\n credentials: request.credentials,\n headers: request.headers,\n integrity: request.integrity,\n keepalive: request.keepalive,\n method: request.method,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n signal: request.signal,\n };\n if (isNodeRuntime()) {\n init.duplex = 'half';\n }\n\n const wrappedRequest = new Request(request.url, init);\n return { capture, request: wrappedRequest };\n}\n\nasync function captureRequestClone(\n request: Request,\n limit: number,\n xray: XrayEmitter,\n): Promise<LimitedBuffer | null> {\n if (limit <= 0 || !request.body || request.bodyUsed) {\n return null;\n }\n let clone: Request;\n try {\n clone = request.clone();\n } catch {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: request clone failed');\n return null;\n }\n\n const buffer = new LimitedBuffer(limit);\n await readStreamToBuffer(clone.body, buffer);\n return buffer;\n}\n\nasync function captureResponseClone(\n response: Response,\n limit: number,\n xray: XrayEmitter,\n): Promise<LimitedBuffer | null> {\n if (limit <= 0 || !response.body || response.bodyUsed) {\n return null;\n }\n let clone: Response;\n try {\n clone = response.clone();\n } catch {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: response clone failed');\n return null;\n }\n\n const buffer = new LimitedBuffer(limit);\n await readStreamToBuffer(clone.body, buffer);\n return buffer;\n}\n\nasync function readStreamToBuffer(\n stream: ReadableStream<Uint8Array> | null,\n buffer: LimitedBuffer,\n): Promise<void> {\n if (!stream) {\n return;\n }\n\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n if (value) {\n buffer.write(value);\n }\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n }\n}\n\nfunction wrapReadableStream(\n stream: ReadableStream<Uint8Array>,\n capture: LimitedBuffer,\n onFinish: () => void,\n onError?: (err: unknown) => void,\n): ReadableStream<Uint8Array> {\n const reader = stream.getReader();\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n onFinish();\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n return;\n }\n if (value) {\n capture.write(value);\n controller.enqueue(value);\n }\n } catch (err) {\n controller.error(err);\n onError?.(err);\n onFinish();\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n }\n },\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n onFinish();\n try {\n reader.releaseLock();\n } catch {\n // Ignore release failures; reader may already be closed.\n }\n }\n },\n });\n}\n\nfunction finalizeResponse(\n ctx: XrayContext,\n xray: XrayEmitter,\n normalizedRequest: NormalizedRequest,\n capture: CaptureConfig,\n requestCapture: RequestCapture | LimitedBuffer | null,\n responseHeaders: Headers,\n statusCode: number,\n responseCapture: LimitedBuffer | null,\n): RequestLog {\n if (requestCapture) {\n const buffer = requestCapture instanceof LimitedBuffer ? requestCapture : requestCapture.buffer;\n const read = requestCapture instanceof LimitedBuffer ? true : requestCapture.read;\n if (read) {\n normalizedRequest.body = makeCapturedBody(\n buffer.bytes(),\n buffer.totalBytes(),\n buffer.truncated(),\n capture.requestBody === 'text' ? 'text' : 'base64',\n );\n }\n }\n\n const responseBody = responseCapture\n ? makeCapturedBody(\n responseCapture.bytes(),\n responseCapture.totalBytes(),\n responseCapture.truncated(),\n capture.responseBody === 'text' ? 'text' : 'base64',\n )\n : undefined;\n\n return xray.endRequest(ctx, {\n statusCode,\n headers: headerValuesFromFetchHeaders(responseHeaders),\n body: responseBody,\n endTimeMs: Date.now(),\n });\n}\n\nfunction ensureResponseRequestIdHeaders(\n headers: Headers,\n ctx: XrayContext,\n xray: XrayEmitter,\n): { value?: string; set: boolean } {\n const headerName = xray.config.requestId.header;\n const existing = normalizeRequestIdCandidate(headers.get(headerName) ?? undefined);\n if (existing) {\n return { value: existing, set: false };\n }\n\n const explicit = normalizeRequestIdCandidate(ctx.requestId);\n if (explicit) {\n headers.set(canonicalHeaderName(headerName), explicit);\n return { value: explicit, set: true };\n }\n\n const generated = generateRequestId();\n headers.set(canonicalHeaderName(headerName), generated);\n setContextRequestId(ctx, generated);\n return { value: generated, set: true };\n}\n\nfunction isNodeRuntime(): boolean {\n const maybeProcess = (\n globalThis as typeof globalThis & {\n process?: { versions?: { node?: string } };\n }\n ).process;\n return !!maybeProcess?.versions?.node;\n}\n\nfunction normalizeRequestIdCandidate(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction canonicalHeaderName(headerName: string): string {\n return headerName\n .split('-')\n .filter(Boolean)\n .map((part) => (part ? part[0]!.toUpperCase() + part.slice(1) : part))\n .join('-');\n}\n"]}
|