api-tracer-kit 1.0.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 +32 -0
- package/LICENSE +21 -0
- package/README.md +466 -0
- package/cli/bin/api-tracer.mjs +266 -0
- package/cli/config.mjs +224 -0
- package/cli/import.mjs +231 -0
- package/cli/index.mjs +10 -0
- package/cli/presets.mjs +212 -0
- package/cli/report.mjs +346 -0
- package/cli/scan.mjs +142 -0
- package/cli/server.mjs +1576 -0
- package/cli/shape.mjs +90 -0
- package/cli/test.mjs +342 -0
- package/cli/web/app.css +1424 -0
- package/cli/web/app.js +2260 -0
- package/cli/web/favicon.svg +5 -0
- package/cli/web/index.html +159 -0
- package/cli/web/logo.svg +7 -0
- package/dist/axios.cjs +856 -0
- package/dist/axios.cjs.map +1 -0
- package/dist/axios.d.cts +27 -0
- package/dist/axios.d.ts +27 -0
- package/dist/axios.js +853 -0
- package/dist/axios.js.map +1 -0
- package/dist/index.cjs +872 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +74 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.js +857 -0
- package/dist/index.js.map +1 -0
- package/dist/react.cjs +896 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +22 -0
- package/dist/react.d.ts +22 -0
- package/dist/react.js +893 -0
- package/dist/react.js.map +1 -0
- package/dist/tracer-BUWdU2lG.d.ts +76 -0
- package/dist/tracer-DG2YUqK0.d.cts +76 -0
- package/dist/types-Bl2-K6_g.d.cts +111 -0
- package/dist/types-Bl2-K6_g.d.ts +111 -0
- package/dist/ui.cjs +1162 -0
- package/dist/ui.cjs.map +1 -0
- package/dist/ui.d.cts +16 -0
- package/dist/ui.d.ts +16 -0
- package/dist/ui.js +1157 -0
- package/dist/ui.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/memory.ts","../src/core/redact.ts","../src/core/url.ts","../src/core/envelope.ts","../src/core/env.ts","../src/core/global.ts","../src/core/body.ts","../src/adapters/fetch.ts","../src/adapters/suppress.ts","../src/adapters/xhr.ts","../src/adapters/axios.ts","../src/transport/report.ts","../src/core/tracer.ts","../src/axios.ts"],"names":["declared","PATCHED","traceId"],"mappings":"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","file":"axios.js","sourcesContent":["/**\n * The default store: a capped ring in memory.\n *\n * Capped rather than unbounded because a long-lived tab making a request a\n * second would otherwise grow without limit — a tracer that leaks is worse than\n * no tracer. Nothing is persisted; the original recorder kept nothing on the\n * client either.\n */\nimport type { ApiTrace, TraceStorage } from '../core/types.js';\n\nexport class MemoryTraceStorage implements TraceStorage {\n private order: string[] = [];\n private byId = new Map<string, ApiTrace>();\n\n constructor(private readonly max = 500) {}\n\n add(trace: ApiTrace): void {\n if (!this.byId.has(trace.id)) this.order.push(trace.id);\n this.byId.set(trace.id, trace);\n while (this.order.length > this.max) {\n const oldest = this.order.shift();\n if (oldest !== undefined) this.byId.delete(oldest);\n }\n }\n\n update(id: string, patch: Partial<ApiTrace>): ApiTrace | undefined {\n const current = this.byId.get(id);\n // dropped by the cap while in flight: not an error, just nothing to update\n if (!current) return undefined;\n const next = { ...current, ...patch } as ApiTrace;\n this.byId.set(id, next);\n return next;\n }\n\n get(id: string): ApiTrace | undefined {\n return this.byId.get(id);\n }\n\n getAll(): ApiTrace[] {\n return this.order.map((id) => this.byId.get(id)).filter((t): t is ApiTrace => Boolean(t));\n }\n\n remove(id: string): void {\n this.byId.delete(id);\n this.order = this.order.filter((x) => x !== id);\n }\n\n clear(): void {\n this.order = [];\n this.byId.clear();\n }\n}\n","/**\n * Credentials must never leave the process that saw them. Values are replaced;\n * the surrounding shape is kept, so a redacted sample is still useful for\n * seeing what an endpoint expects.\n */\n\nexport const REDACTED = '<redacted>';\n\n/** header names dropped by default */\nexport const DEFAULT_REDACT_HEADERS = [\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'proxy-authorization',\n 'x-api-key',\n 'api-key',\n 'auth_token',\n 'access_token',\n 'secret_token',\n 'x-auth-token',\n 'x-csrf-token',\n];\n\n/** body and query field names dropped by default */\nexport const DEFAULT_REDACT_FIELDS = /(token|password|passwd|secret|api[-_]?key|authorization|credential|otp|ssn)/i;\n\n/** guards against a cyclic object, which a request body can legitimately be */\nexport function redactValue(value: unknown, fields: RegExp, seen = new WeakSet<object>()): unknown {\n if (Array.isArray(value)) return value.map((v) => redactValue(v, fields, seen));\n if (value && typeof value === 'object') {\n if (seen.has(value)) return '[circular]';\n // only plain data is walked; a File, Date or Blob is left as it is\n const proto = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto !== null) return value;\n seen.add(value);\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([k, v]) => [\n k,\n fields.test(k) ? REDACTED : redactValue(v, fields, seen),\n ]),\n );\n }\n return value;\n}\n\nexport function redactHeaders(\n headers: Record<string, string>,\n names: string[],\n): Record<string, string> {\n const drop = new Set(names.map((n) => n.toLowerCase()));\n return Object.fromEntries(\n Object.entries(headers).map(([k, v]) => [k, drop.has(k.toLowerCase()) ? REDACTED : v]),\n );\n}\n","/**\n * URL and query-string handling, matching what axios puts on the wire by\n * default, so a trace reads the same as the request the app actually made.\n */\n\n/** `a=1&b[]=2&b[]=3&f[x]=9` -> `{ a: '1', b: ['2','3'], f: { x: '9' } }` */\nexport function parseQuery(search: string): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n const params = new URLSearchParams(search.startsWith('?') ? search.slice(1) : search);\n for (const [rawKey, value] of params) {\n const asArray = /^(.+)\\[\\]$/.exec(rawKey);\n const asNested = /^([^[]+)\\[([^\\]]+)\\]$/.exec(rawKey);\n if (asArray) {\n const key = asArray[1] as string;\n ((out[key] ??= []) as string[]).push(value);\n } else if (asNested) {\n const key = asNested[1] as string;\n ((out[key] ??= {}) as Record<string, string>)[asNested[2] as string] = value;\n } else {\n out[rawKey] = value;\n }\n }\n return out;\n}\n\n/**\n * Absolute form of a possibly-relative URL. Falls back to the input rather than\n * throwing, because a tracer must never be the reason a request fails.\n */\nexport function absoluteUrl(url: string, base?: string): string {\n try {\n const origin = base ?? (typeof location !== 'undefined' ? location.href : undefined);\n return origin ? new URL(url, origin).toString() : new URL(url).toString();\n } catch {\n return url;\n }\n}\n\n/** origin + pathname; the part worth grouping traces by */\nexport function pathOf(url: string): string {\n try {\n const u = new URL(url);\n return `${u.origin}${u.pathname}`;\n } catch {\n return url.split('?')[0] ?? url;\n }\n}\n\nexport function searchOf(url: string): string {\n try {\n return new URL(url).search;\n } catch {\n const at = url.indexOf('?');\n return at === -1 ? '' : url.slice(at);\n }\n}\n\n/** serializes params the way axios does, for a URL rebuilt from a trace */\nexport function appendParams(url: URL, params: Record<string, unknown>, prefix = ''): void {\n for (const [rawKey, v] of Object.entries(params)) {\n const key = prefix ? `${prefix}[${rawKey}]` : rawKey;\n if (v === undefined || v === null || v === '') continue;\n if (Array.isArray(v)) {\n for (const item of v) {\n if (item !== null && typeof item === 'object') appendParams(url, item as Record<string, unknown>, `${key}[]`);\n else url.searchParams.append(`${key}[]`, String(item));\n }\n } else if (typeof v === 'object') {\n appendParams(url, v as Record<string, unknown>, key);\n } else {\n url.searchParams.append(key, String(v));\n }\n }\n}\n\n/** matches a URL against the include/exclude patterns */\nexport function matches(url: string, patterns: (string | RegExp)[]): boolean {\n return patterns.some((p) => (typeof p === 'string' ? url.includes(p) : p.test(url)));\n}\n","/**\n * Some APIs answer HTTP 200 for everything and put the real verdict in the\n * body: `{ status: 801, success: false, message: \"...\" }`. A status check alone\n * calls that healthy, so the envelope is read too when one is configured.\n */\nimport type { EnvelopeOptions } from './types.js';\n\nexport const DEFAULT_ENVELOPE: Required<EnvelopeOptions> = {\n codeFields: ['status', 'code'],\n okField: 'success',\n failFrom: 400,\n};\n\nexport interface Verdict {\n envelopeOk?: boolean;\n envelopeCode?: number;\n}\n\nexport function readEnvelope(\n bodyText: string | undefined,\n options: EnvelopeOptions | false | undefined,\n): Verdict {\n if (options === false || !bodyText) return {};\n const cfg = { ...DEFAULT_ENVELOPE, ...(options ?? {}) };\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(bodyText);\n } catch {\n return {}; // not JSON, so there is no envelope to read\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return {};\n const body = parsed as Record<string, unknown>;\n\n let code: number | undefined;\n for (const field of cfg.codeFields) {\n if (typeof body[field] === 'number') {\n code = body[field] as number;\n break;\n }\n }\n const flag = body[cfg.okField];\n if (code === undefined && typeof flag !== 'boolean') return {};\n\n return {\n envelopeCode: code,\n envelopeOk: !(code !== undefined && code >= cfg.failFrom) && flag !== false,\n };\n}\n","/**\n * Runtime detection. Nothing here touches a global at module-evaluation time\n * beyond a `typeof` check, so importing this package is safe during SSR, in a\n * Node script, in a test runner, and at build time.\n */\n\nexport const hasWindow = (): boolean => typeof window !== 'undefined';\nexport const hasDocument = (): boolean => typeof document !== 'undefined';\nexport const hasFetch = (): boolean => typeof globalThis.fetch === 'function';\nexport const hasXhr = (): boolean => typeof globalThis.XMLHttpRequest === 'function';\nexport const hasFormData = (): boolean => typeof globalThis.FormData !== 'undefined';\nexport const hasBlob = (): boolean => typeof globalThis.Blob !== 'undefined';\n\n/** monotonic where available, wall clock otherwise */\nexport const now = (): number =>\n typeof globalThis.performance?.now === 'function' ? globalThis.performance.now() : Date.now();\n\n/**\n * `crypto.randomUUID` is only exposed on secure origins, and a dev tool has to\n * work on plain http too, so fall back rather than throw.\n */\nlet counter = 0;\nexport function traceId(): string {\n const c = globalThis.crypto as Crypto | undefined;\n if (typeof c?.randomUUID === 'function') {\n try {\n return c.randomUUID();\n } catch {\n /* insecure origin */\n }\n }\n counter += 1;\n return `t-${Date.now().toString(36)}-${counter.toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n}\n","/**\n * Anything that must be the same object no matter how many copies of this\n * package end up in a build.\n *\n * A package with several entry points is bundled once per entry, so\n * `api-tracer-kit` and `api-tracer-kit/axios` would otherwise each get their own\n * copy of the module graph — and with it their own shared tracer, which is not\n * shared at all. Two versions of the package in one dependency tree cause the\n * same thing. The symbol registry is the one place every copy can agree on.\n */\nconst REGISTRY = Symbol.for('api-tracer-kit.registry');\n\ninterface Registry {\n [key: string]: unknown;\n}\n\nconst registry = (): Registry => {\n const host = globalThis as typeof globalThis & { [REGISTRY]?: Registry };\n return (host[REGISTRY] ??= {});\n};\n\n/** the one instance of `key`, created on first use */\nexport function shared<T>(key: string, create: () => T): T {\n const store = registry();\n if (!(key in store)) store[key] = create();\n return store[key] as T;\n}\n\n/** a counter every copy of the package increments and reads */\nexport function sharedCounter(key: string): { value: number } {\n return shared(key, () => ({ value: 0 }));\n}\n","/**\n * Reading a body without changing what the application sees.\n *\n * The rules that matter:\n * - a request body that is a stream is never read; consuming it would empty it\n * - a response is only ever read through `clone()`, and only when it is small\n * enough and not a stream, so an upload, a download or an SSE endpoint is\n * left alone\n * - anything binary is described rather than captured\n */\nimport type { BodyType } from './types.js';\nimport { hasBlob, hasFormData } from './env.js';\n\nexport interface ReadBody {\n bodyType: BodyType;\n body?: unknown;\n omitted?: 'too-large' | 'stream' | 'binary' | 'unreadable';\n}\n\n/**\n * A FormData flattens to `{}` under JSON.stringify, so unpack it by hand or the\n * payload is lost. Files cannot be replayed and become a readable placeholder.\n */\nfunction fromFormData(fd: FormData): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of fd.entries()) {\n const isFile =\n typeof File !== 'undefined' && value instanceof File\n ? true\n : hasBlob() && value instanceof Blob;\n const item = isFile\n ? `<file: ${(value as File).name || 'unnamed'}, ${(value as Blob).size} bytes>`\n : value;\n if (key in out) out[key] = ([] as unknown[]).concat(out[key] as unknown[], item);\n else out[key] = item;\n }\n return out;\n}\n\nconst parseQueryString = (text: string): Record<string, string> =>\n Object.fromEntries(new URLSearchParams(text).entries());\n\n/** what a request body is, and what of it is safe to keep */\nexport function readRequestBody(value: unknown, maxBytes: number): ReadBody {\n if (value === undefined || value === null) return { bodyType: 'none' };\n\n if (hasFormData() && value instanceof FormData) {\n return { bodyType: 'formdata', body: fromFormData(value) };\n }\n if (typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams) {\n return { bodyType: 'urlencoded', body: Object.fromEntries(value.entries()) };\n }\n // a stream can only be read once, and the request needs it\n if (typeof ReadableStream !== 'undefined' && value instanceof ReadableStream) {\n return { bodyType: 'binary', omitted: 'stream' };\n }\n if (hasBlob() && value instanceof Blob) {\n return { bodyType: 'binary', body: `<blob: ${value.size} bytes, ${value.type || 'unknown'}>`, omitted: 'binary' };\n }\n if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n return { bodyType: 'binary', body: `<binary: ${value.byteLength} bytes>`, omitted: 'binary' };\n }\n\n if (typeof value === 'string') {\n if (value.length > maxBytes) return { bodyType: 'text', omitted: 'too-large' };\n const trimmed = value.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n return { bodyType: 'json', body: JSON.parse(value) };\n } catch {\n return { bodyType: 'text', body: value };\n }\n }\n // `a=1&b=2` from a urlencoded post\n if (/^[^=&\\s]+=[^&]*(&|$)/.test(trimmed)) {\n return { bodyType: 'urlencoded', body: parseQueryString(trimmed) };\n }\n return { bodyType: 'text', body: value };\n }\n\n if (typeof value === 'object') {\n // axios hands the interceptor the object before it serializes it\n try {\n const text = JSON.stringify(value);\n if (text && text.length > maxBytes) return { bodyType: 'json', omitted: 'too-large' };\n return { bodyType: 'json', body: value };\n } catch {\n return { bodyType: 'json', omitted: 'unreadable' };\n }\n }\n\n return { bodyType: 'text', body: String(value) };\n}\n\n/** content types worth keeping as text; everything else is described, not read */\nconst TEXTUAL = /^(application\\/(json|.*\\+json|xml|x-www-form-urlencoded|javascript)|text\\/)/i;\n/** a stream must never be buffered by a tracer */\nconst STREAMING = /^text\\/event-stream/i;\n\nexport interface ReadResponse {\n body?: string;\n omitted?: 'too-large' | 'stream' | 'binary' | 'unreadable';\n size?: number;\n}\n\n/**\n * Reads a response body from a clone, so the application's own copy is\n * untouched. Returns a description instead of the body when reading it would be\n * wasteful or wrong.\n */\nexport async function readResponseBody(\n response: Response,\n maxBytes: number,\n): Promise<ReadResponse> {\n const type = response.headers.get('content-type') ?? '';\n if (STREAMING.test(type)) return { omitted: 'stream' };\n if (type && !TEXTUAL.test(type)) {\n const declared = Number(response.headers.get('content-length'));\n return { omitted: 'binary', size: Number.isFinite(declared) ? declared : undefined };\n }\n\n const declared = Number(response.headers.get('content-length'));\n if (Number.isFinite(declared) && declared > maxBytes) {\n return { omitted: 'too-large', size: declared };\n }\n\n let clone: Response;\n try {\n // throws when the body is already disturbed, which is never true here\n clone = response.clone();\n } catch {\n return { omitted: 'unreadable' };\n }\n\n try {\n const text = await clone.text();\n if (text.length > maxBytes) return { omitted: 'too-large', size: text.length };\n return { body: text, size: text.length };\n } catch {\n return { omitted: 'unreadable' };\n }\n}\n\n/** turns a headers-like thing into a plain object without assuming its class */\nexport function headersToObject(input: unknown): Record<string, string> {\n if (!input) return {};\n const out: Record<string, string> = {};\n if (typeof Headers !== 'undefined' && input instanceof Headers) {\n input.forEach((value, key) => {\n out[key] = value;\n });\n return out;\n }\n if (Array.isArray(input)) {\n for (const pair of input as [string, string][]) if (pair?.[0]) out[pair[0]] = String(pair[1]);\n return out;\n }\n if (typeof input === 'object') {\n for (const [k, v] of Object.entries(input as Record<string, unknown>)) {\n if (v === undefined || v === null || typeof v === 'object') continue;\n out[k] = String(v);\n }\n }\n return out;\n}\n","/**\n * fetch interception.\n *\n * The whole adapter is built around one constraint: the caller's Response must\n * come back untouched and at the same time it would have. So the body is read\n * from a `clone()`, after the response has already been handed back, and any\n * failure to read it is swallowed.\n */\nimport type { ApiTracer, Uninstall } from '../core/tracer.js';\nimport type { TraceRequest } from '../core/types.js';\nimport { headersToObject, readRequestBody, readResponseBody } from '../core/body.js';\nimport { absoluteUrl, parseQuery, pathOf, searchOf } from '../core/url.js';\n\nconst PATCHED = Symbol.for('api-tracer-kit.fetch');\n\ntype PatchedFetch = typeof fetch & { [PATCHED]?: typeof fetch };\n\n/** what was asked for, without consuming a Request the caller still needs */\nfunction describe(input: RequestInfo | URL, init: RequestInit | undefined, maxBytes: number): TraceRequest {\n const isRequest = typeof Request !== 'undefined' && input instanceof Request;\n const raw = isRequest ? (input as Request).url : String(input);\n const url = absoluteUrl(raw);\n const method = (init?.method ?? (isRequest ? (input as Request).method : 'GET')).toUpperCase();\n\n const headers = headersToObject(init?.headers ?? (isRequest ? (input as Request).headers : undefined));\n\n /*\n * A Request's body is a stream that the fetch itself is about to consume.\n * Reading it here — even from a clone — risks a runtime that does not support\n * cloning a used request, so it is described rather than read.\n */\n const body =\n init?.body !== undefined\n ? readRequestBody(init.body, maxBytes)\n : isRequest && (input as Request).body\n ? ({ bodyType: 'binary', omitted: 'stream' } as const)\n : ({ bodyType: 'none' } as const);\n\n return {\n url,\n path: pathOf(url),\n method,\n headers,\n params: parseQuery(searchOf(url)),\n body: 'body' in body ? body.body : undefined,\n bodyType: body.bodyType,\n bodyOmitted: body.omitted,\n };\n}\n\nexport function installFetch(tracer: ApiTracer): Uninstall {\n const original = globalThis.fetch as PatchedFetch;\n // a second install would double-count every request\n if (original[PATCHED]) return () => {};\n\n const patched = function fetch(\n this: unknown,\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n let trace;\n try {\n const request = describe(input, init, tracer.options.maxBodyBytes);\n if (tracer.shouldTrace(request.url)) trace = tracer.start('fetch', request);\n } catch {\n /* describing a request must never stop it being sent */\n }\n\n const call = original.call(this ?? globalThis, input as RequestInfo, init);\n if (!trace) return call;\n const id = trace.id;\n\n return call.then(\n (response) => {\n // read after returning: the caller's copy is never waited on\n void (async () => {\n const read = await readResponseBody(response, tracer.options.maxBodyBytes);\n tracer.complete(id, {\n status: response.ok ? 'success' : 'error',\n response: {\n status: response.status,\n statusText: response.statusText,\n headers: headersToObject(response.headers),\n body: read.body,\n bodyOmitted: read.omitted,\n size: read.size,\n },\n });\n })().catch(() => {\n tracer.complete(id, { status: response.ok ? 'success' : 'error' });\n });\n return response;\n },\n (error: unknown) => {\n const name = (error as Error)?.name;\n tracer.complete(id, {\n // an aborted request is not a broken endpoint\n status: name === 'AbortError' ? 'cancelled' : 'network-error',\n error: {\n message: String((error as Error)?.message ?? error),\n name,\n stack: (error as Error)?.stack,\n },\n });\n // rethrown as-is, so the caller's own catch sees exactly what it would have\n throw error;\n },\n );\n } as PatchedFetch;\n\n patched[PATCHED] = original;\n globalThis.fetch = patched;\n\n return () => {\n // only restore if nothing else has patched fetch since\n if (globalThis.fetch === patched) globalThis.fetch = original;\n };\n}\n","/**\n * axios rides on XMLHttpRequest in the browser, so an axios call that is also\n * seen by the XHR adapter would be recorded twice.\n *\n * axios builds and opens its XHR synchronously inside its adapter, so a flag\n * raised around the adapter call is still up when `open` and `send` run, and\n * down again before anything else can start a request. That makes the\n * suppression exact rather than time-based.\n *\n * The counter is global, because the adapter that raises it and the one that\n * reads it can be in different bundles.\n */\nimport { sharedCounter } from '../core/global.js';\n\nconst depth = () => sharedCounter('xhr-suppression');\n\nexport const suppressXhr = <T>(fn: () => T): T => {\n const d = depth();\n d.value += 1;\n try {\n return fn();\n } finally {\n d.value -= 1;\n }\n};\n\nexport const xhrSuppressed = (): boolean => depth().value > 0;\n","/**\n * XMLHttpRequest interception.\n *\n * Everything is observed through `addEventListener`, never by assigning to\n * `onload` or `onreadystatechange` — those belong to the caller, and taking one\n * would silently break the page. `open` and `send` are wrapped only to record\n * what was asked for.\n */\nimport type { ApiTracer, Uninstall } from '../core/tracer.js';\nimport { readRequestBody } from '../core/body.js';\nimport { absoluteUrl, parseQuery, pathOf, searchOf } from '../core/url.js';\nimport { xhrSuppressed } from './suppress.js';\n\nconst STATE = Symbol.for('api-tracer-kit.xhr.state');\nconst PATCHED = Symbol.for('api-tracer-kit.xhr');\n\ninterface XhrState {\n method: string;\n url: string;\n headers: Record<string, string>;\n traceId?: string;\n}\n\ntype TracedXhr = XMLHttpRequest & { [STATE]?: XhrState };\n\n/** `a: 1\\r\\nb: 2` -> an object; the only form getAllResponseHeaders returns */\nfunction parseResponseHeaders(raw: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const line of raw.split(/\\r?\\n/)) {\n const at = line.indexOf(':');\n if (at === -1) continue;\n out[line.slice(0, at).trim().toLowerCase()] = line.slice(at + 1).trim();\n }\n return out;\n}\n\n/**\n * Only a text-ish responseType exposes `responseText`; touching it on an\n * arraybuffer or blob response throws, so those are described instead.\n */\nfunction readBody(xhr: XMLHttpRequest, maxBytes: number): { body?: string; omitted?: 'too-large' | 'binary' | 'unreadable'; size?: number } {\n if (xhr.responseType && xhr.responseType !== 'text' && xhr.responseType !== 'json') {\n return { omitted: 'binary' };\n }\n try {\n const text = xhr.responseType === 'json' ? JSON.stringify(xhr.response) : xhr.responseText;\n if (typeof text !== 'string') return { omitted: 'unreadable' };\n if (text.length > maxBytes) return { omitted: 'too-large', size: text.length };\n return { body: text, size: text.length };\n } catch {\n return { omitted: 'unreadable' };\n }\n}\n\nexport function installXhr(tracer: ApiTracer): Uninstall {\n const proto = globalThis.XMLHttpRequest.prototype as XMLHttpRequest & Record<symbol, unknown>;\n if (proto[PATCHED]) return () => {};\n\n const open = proto.open;\n const send = proto.send;\n const setRequestHeader = proto.setRequestHeader;\n\n proto.open = function (this: TracedXhr, method: string, url: string | URL, ...rest: unknown[]) {\n try {\n this[STATE] = { method: String(method).toUpperCase(), url: absoluteUrl(String(url)), headers: {} };\n } catch {\n /* recording must not stop the request */\n }\n // eslint-disable-next-line prefer-rest-params\n return (open as (...a: unknown[]) => void).call(this, method, url, ...rest);\n } as typeof proto.open;\n\n proto.setRequestHeader = function (this: TracedXhr, name: string, value: string) {\n const state = this[STATE];\n if (state) state.headers[name] = value;\n return setRequestHeader.call(this, name, value);\n };\n\n proto.send = function (this: TracedXhr, body?: Document | XMLHttpRequestBodyInit | null) {\n const state = this[STATE];\n try {\n // an axios call is already being traced by the axios adapter\n if (state && !xhrSuppressed() && tracer.shouldTrace(state.url)) {\n const read = readRequestBody(body ?? undefined, tracer.options.maxBodyBytes);\n const trace = tracer.start('xhr', {\n url: state.url,\n path: pathOf(state.url),\n method: state.method,\n headers: state.headers,\n params: parseQuery(searchOf(state.url)),\n body: read.body,\n bodyType: read.bodyType,\n bodyOmitted: read.omitted,\n });\n state.traceId = trace.id;\n\n const id = trace.id;\n // listeners, not handler properties: the caller's own handlers stay theirs\n this.addEventListener('load', () => {\n const read2 = readBody(this, tracer.options.maxBodyBytes);\n tracer.complete(id, {\n status: this.status >= 200 && this.status < 300 ? 'success' : 'error',\n response: {\n status: this.status,\n statusText: this.statusText,\n headers: parseResponseHeaders(this.getAllResponseHeaders?.() ?? ''),\n ...read2,\n },\n });\n });\n this.addEventListener('error', () => {\n tracer.complete(id, { status: 'network-error', error: { message: 'network error' } });\n });\n this.addEventListener('timeout', () => {\n tracer.complete(id, { status: 'network-error', error: { message: 'timeout', name: 'TimeoutError' } });\n });\n this.addEventListener('abort', () => {\n tracer.complete(id, { status: 'cancelled', error: { message: 'aborted', name: 'AbortError' } });\n });\n }\n } catch {\n /* as above: never block the send */\n }\n return send.call(this, body ?? null);\n };\n\n proto[PATCHED] = true;\n\n return () => {\n proto.open = open;\n proto.send = send;\n proto.setRequestHeader = setRequestHeader;\n delete proto[PATCHED];\n };\n}\n","/**\n * axios integration.\n *\n * `axios.create` is patched as well as the default instance. A codebase that\n * sends some calls through per-page instances and the rest through the default\n * object would otherwise have half its traffic missed — which is exactly the\n * shape the original recorder was written for.\n *\n * The instance's adapter is wrapped rather than only its interceptors, because\n * that is the one place both the request and the raw response are available,\n * and it is where the underlying XHR is created — so the XHR adapter can be\n * told to stand back and not record the same call twice.\n */\nimport type { ApiTracer, Uninstall } from '../core/tracer.js';\nimport type { BodyType } from '../core/types.js';\nimport { headersToObject, readRequestBody } from '../core/body.js';\nimport { absoluteUrl, appendParams, parseQuery, pathOf, searchOf } from '../core/url.js';\nimport { suppressXhr } from './suppress.js';\n\n/** the little of axios we need, so the core never imports axios itself */\ninterface AxiosLike {\n defaults?: { adapter?: unknown; baseURL?: string };\n create?: (config?: unknown) => AxiosLike;\n getUri?: (config: unknown) => string;\n interceptors?: unknown;\n}\n\ninterface AxiosConfig {\n url?: string;\n baseURL?: string;\n method?: string;\n headers?: unknown;\n params?: Record<string, unknown>;\n data?: unknown;\n adapter?: unknown;\n}\n\ninterface AxiosResponse {\n status: number;\n statusText?: string;\n headers?: unknown;\n data?: unknown;\n config?: AxiosConfig;\n}\n\nconst ATTACHED = Symbol.for('api-tracer-kit.axios');\n\n/** the URL axios will actually request, params included */\nfunction fullUrl(config: AxiosConfig): string {\n const base = config.baseURL ?? '';\n const path = config.url ?? '';\n const joined = /^https?:\\/\\//i.test(path)\n ? path\n : `${base.replace(/\\/+$/, '')}${path.startsWith('/') || !base ? '' : '/'}${path}`;\n const absolute = absoluteUrl(joined);\n if (!config.params || !Object.keys(config.params).length) return absolute;\n try {\n const url = new URL(absolute);\n appendParams(url, config.params);\n return url.toString();\n } catch {\n return absolute;\n }\n}\n\n/** the response body as text, without re-serializing something enormous */\nfunction responseBody(data: unknown, maxBytes: number): { body?: string; bodyOmitted?: 'too-large' | 'binary' | 'unreadable'; size?: number } {\n if (data === undefined || data === null) return {};\n if (typeof data === 'string') {\n return data.length > maxBytes ? { bodyOmitted: 'too-large', size: data.length } : { body: data, size: data.length };\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) return { bodyOmitted: 'binary', size: data.size };\n if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) return { bodyOmitted: 'binary', size: data.byteLength };\n try {\n const text = JSON.stringify(data);\n if (typeof text !== 'string') return { bodyOmitted: 'unreadable' };\n return text.length > maxBytes ? { bodyOmitted: 'too-large', size: text.length } : { body: text, size: text.length };\n } catch {\n return { bodyOmitted: 'unreadable' };\n }\n}\n\ntype Adapter = (config: AxiosConfig) => Promise<AxiosResponse>;\n\n/**\n * The wrappers this module has made, and how to read what each one wraps.\n *\n * `axios.create()` merges the parent's defaults into the new instance, which\n * copies the parent's adapter — our wrapper — across. Wrapping that again would\n * put two wrappers in the chain and record every call through the instance\n * twice, so an inherited wrapper is recognised and left alone.\n */\nconst ours = new WeakMap<object, () => unknown>();\n\n/**\n * Every instance we touched, so destroy() can put its adapter back. `current`\n * reads through to whatever the adapter is now, which is not necessarily the\n * one that was there when we attached — the application may have replaced it in\n * between, and that replacement is the one it wants back.\n */\nconst wrapped: { instance: AxiosLike; current: () => unknown }[] = [];\n\nfunction wrapInstance(instance: AxiosLike, tracer: ApiTracer): AxiosLike {\n const marked = instance as AxiosLike & { [ATTACHED]?: boolean };\n if (!instance || marked[ATTACHED]) return instance;\n marked[ATTACHED] = true;\n\n const inherited = instance.defaults?.adapter;\n if (typeof inherited === 'function' && ours.has(inherited as object)) {\n // already traced through the wrapper it inherited; only remember how to\n // put a plain adapter back when tracing stops\n wrapped.push({ instance, current: ours.get(inherited as object) as () => unknown });\n return instance;\n }\n\n const defaults = (instance.defaults ??= {});\n /*\n * `inner` rather than a fixed capture, because application code is allowed to\n * set `axios.defaults.adapter` at any point — a mock in a test, a retry\n * library, a custom transport. A plain assignment would replace the wrapper\n * and silently stop tracing, so the property below routes an assignment to\n * `inner` and keeps the wrapper in place.\n */\n let inner = defaults.adapter as Adapter | Adapter[] | string | undefined;\n\n const adapter: Adapter = (config) => {\n // axios resolves a string or array adapter itself; only a wrapped function is ours\n const run = (): Promise<AxiosResponse> =>\n suppressXhr(() =>\n typeof inner === 'function'\n ? inner(config)\n : // fall back to whatever axios would have used, by passing it through\n (instance as unknown as { request: (c: AxiosConfig) => Promise<AxiosResponse> }).request({\n ...config,\n adapter: inner,\n }),\n );\n\n let id: string | undefined;\n try {\n const url = fullUrl(config);\n if (tracer.shouldTrace(url)) {\n const read = readRequestBody(config.data, tracer.options.maxBodyBytes);\n id = tracer.start('axios', {\n url,\n path: pathOf(url),\n method: (config.method ?? 'get').toUpperCase(),\n headers: headersToObject(config.headers),\n params: config.params ? { ...config.params } : parseQuery(searchOf(url)),\n body: read.body,\n bodyType: read.bodyType as BodyType,\n bodyOmitted: read.omitted,\n }).id;\n }\n } catch {\n /* never block the call */\n }\n\n const promise = run();\n if (!id) return promise;\n const traceId = id;\n\n return promise.then(\n (response) => {\n tracer.complete(traceId, {\n status: response.status >= 200 && response.status < 300 ? 'success' : 'error',\n response: {\n status: response.status,\n statusText: response.statusText,\n headers: headersToObject(response.headers),\n ...responseBody(response.data, tracer.options.maxBodyBytes),\n },\n });\n return response;\n },\n (error: unknown) => {\n const err = error as { message?: string; name?: string; stack?: string; code?: string; response?: AxiosResponse };\n // axios reports a non-2xx as a rejection, but the endpoint did answer\n if (err?.response) {\n tracer.complete(traceId, {\n status: 'error',\n response: {\n status: err.response.status,\n statusText: err.response.statusText,\n headers: headersToObject(err.response.headers),\n ...responseBody(err.response.data, tracer.options.maxBodyBytes),\n },\n error: { message: String(err.message ?? error), name: err.name, stack: err.stack },\n });\n } else {\n const cancelled = err?.code === 'ERR_CANCELED' || err?.name === 'CanceledError' || err?.name === 'AbortError';\n tracer.complete(traceId, {\n status: cancelled ? 'cancelled' : 'network-error',\n error: { message: String(err?.message ?? error), name: err?.name, stack: err?.stack },\n });\n }\n throw error;\n },\n );\n };\n\n wrapped.push({ instance, current: () => inner });\n ours.set(adapter as object, () => inner);\n Object.defineProperty(defaults, 'adapter', {\n configurable: true,\n enumerable: true,\n get: () => adapter,\n set: (next: Adapter | Adapter[] | string | undefined) => {\n inner = next;\n },\n });\n return instance;\n}\n\n/**\n * Traces this axios object and everything `axios.create()` makes from it.\n * Pass the default export; per-instance calls are picked up automatically.\n */\nexport function installAxios(tracer: ApiTracer, axios: unknown): Uninstall {\n const instance = axios as AxiosLike;\n if (!instance) return () => {};\n\n wrapInstance(instance, tracer);\n\n const create = instance.create?.bind(instance);\n if (create) {\n instance.create = (config?: unknown) => wrapInstance(create(config), tracer);\n }\n\n return () => {\n if (create) instance.create = create;\n // every instance goes back to the adapter it had, including ones made\n // through the patched create()\n for (const entry of wrapped.splice(0)) {\n const marked = entry.instance as AxiosLike & { [ATTACHED]?: boolean };\n delete marked[ATTACHED];\n if (!entry.instance.defaults) continue;\n // back to a plain property holding whatever the app last set\n Object.defineProperty(entry.instance.defaults, 'adapter', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: entry.current(),\n });\n }\n };\n}\n","/**\n * Streams finished traces to an API console.\n *\n * Everything here fails silently. If the console is not running, the app must\n * be entirely unaffected — no retries, no error in the log every few seconds,\n * no unhandled rejection.\n */\nimport type { ApiTrace } from '../core/types.js';\nimport { hasFetch } from '../core/env.js';\n\nexport type Reporter = (trace: ApiTrace) => void;\n\n/** the wire shape the console's /api/record accepts */\nexport function toRecordPayload(trace: ApiTrace): Record<string, unknown> {\n return {\n method: trace.request.method,\n url: trace.request.url,\n params: trace.request.params,\n data: trace.request.body ?? {},\n bodyType: trace.request.bodyType === 'none' ? 'json' : trace.request.bodyType,\n status: trace.response?.status ?? null,\n ms: trace.timing.duration,\n body: trace.response?.body,\n error: trace.error?.message,\n };\n}\n\nexport function createReporter(baseUrl: string): Reporter {\n const endpoint = `${baseUrl.replace(/\\/+$/, '')}/api/record`;\n // a console that is not there should cost one failed request, not one per call\n let failures = 0;\n\n return (trace) => {\n if (!hasFetch() || trace.status === 'pending' || failures > 5) return;\n try {\n void globalThis\n .fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(toRecordPayload(trace)),\n // survives the page being closed mid-flight\n keepalive: true,\n mode: 'cors',\n })\n .then(\n () => {\n failures = 0;\n },\n () => {\n failures += 1;\n },\n );\n } catch {\n failures += 1;\n }\n };\n}\n","/**\n * The tracer itself: one instance, holding the options, the store, the\n * subscribers and the installed adapters.\n *\n * Two rules run through all of it. It must never change what the application\n * sees — not a response, not an error, not a timing — and it must never throw\n * out of a hook, because a tracer that can break the app it watches is not\n * worth having.\n */\nimport type {\n ApiTrace,\n TraceListener,\n TraceStorage,\n TracerOptions,\n Transport,\n TraceRequest,\n TraceResponse,\n TraceError,\n} from './types.js';\nimport { MemoryTraceStorage } from '../storage/memory.js';\nimport { DEFAULT_REDACT_FIELDS, DEFAULT_REDACT_HEADERS, redactHeaders, redactValue } from './redact.js';\nimport { matches } from './url.js';\nimport { readEnvelope } from './envelope.js';\nimport { hasFetch, hasXhr, now, traceId } from './env.js';\nimport { shared } from './global.js';\nimport { installFetch } from '../adapters/fetch.js';\nimport { installXhr } from '../adapters/xhr.js';\nimport { installAxios } from '../adapters/axios.js';\nimport { createReporter, type Reporter } from '../transport/report.js';\n\nexport interface ResolvedOptions {\n include: (string | RegExp)[];\n exclude: (string | RegExp)[];\n redactHeaderNames: string[];\n redactFields: RegExp;\n maxBodyBytes: number;\n maxTraces: number;\n envelope: TracerOptions['envelope'];\n debug: boolean;\n}\n\n/** an adapter returns the function that puts the runtime back as it was */\nexport type Uninstall = () => void;\n\nexport const DEFAULT_REPORT_URL = 'http://localhost:4400';\n\nexport class ApiTracer {\n private storage: TraceStorage = new MemoryTraceStorage();\n private listeners = new Set<TraceListener>();\n private uninstallers: Uninstall[] = [];\n private reporter?: Reporter;\n private started = false;\n\n options: ResolvedOptions = {\n include: [],\n exclude: [],\n redactHeaderNames: DEFAULT_REDACT_HEADERS,\n redactFields: DEFAULT_REDACT_FIELDS,\n maxBodyBytes: 200_000,\n maxTraces: 500,\n envelope: undefined,\n debug: false,\n };\n\n /**\n * Installs the interceptors. Calling it twice is a no-op rather than a second\n * set of hooks — a double-init in React StrictMode or a hot reload must not\n * double-count every request.\n */\n init(options: TracerOptions = {}): this {\n if (this.started) {\n if (options.onTrace) this.subscribe(options.onTrace);\n return this;\n }\n\n this.options = {\n include: options.include ?? [],\n exclude: options.exclude ?? [],\n redactHeaderNames: options.redactHeaders ?? DEFAULT_REDACT_HEADERS,\n redactFields: options.redactFields ?? DEFAULT_REDACT_FIELDS,\n maxBodyBytes: options.maxBodyBytes ?? 200_000,\n maxTraces: options.maxTraces ?? 500,\n envelope: options.envelope,\n debug: options.debug ?? false,\n };\n this.storage = options.storage ?? new MemoryTraceStorage(this.options.maxTraces);\n if (options.onTrace) this.subscribe(options.onTrace);\n\n if (options.reportTo) {\n const url = options.reportTo === true ? DEFAULT_REPORT_URL : options.reportTo;\n this.reporter = createReporter(url);\n // the tracer's own posts must not become traces of their own\n this.options.exclude = [...this.options.exclude, `${url.replace(/\\/+$/, '')}/api/record`];\n }\n\n const wanted: Transport[] = options.transports ?? ['fetch', 'xhr', 'axios'];\n // axios is patched through useAxios(); it cannot be reached from here\n if (wanted.includes('fetch') && hasFetch()) this.uninstallers.push(installFetch(this));\n if (wanted.includes('xhr') && hasXhr()) this.uninstallers.push(installXhr(this));\n\n this.started = true;\n if (this.options.debug) {\n // eslint-disable-next-line no-console\n console.info('[api-tracer] tracing', wanted.join(', '));\n }\n return this;\n }\n\n /**\n * Traces an axios instance and everything it creates. Needed because an axios\n * instance is an object the tracer has no way to reach on its own — there is\n * no global to patch. One call covers the default export and every instance\n * made from it afterwards.\n */\n useAxios(axios: unknown): this {\n if (!this.started) this.init();\n this.uninstallers.push(installAxios(this, axios));\n return this;\n }\n\n /** puts every patched global back, so the app behaves exactly as before */\n destroy(): void {\n for (const off of this.uninstallers.splice(0)) {\n try {\n off();\n } catch {\n /* a failed restore must not stop the others */\n }\n }\n this.listeners.clear();\n this.reporter = undefined;\n this.started = false;\n }\n\n get isActive(): boolean {\n return this.started;\n }\n\n /* ------------------------------------------------------------ read side */\n\n getTraces(): ApiTrace[] {\n return this.storage.getAll();\n }\n\n getTrace(id: string): ApiTrace | undefined {\n return this.storage.get(id);\n }\n\n clear(): void {\n this.storage.clear();\n }\n\n remove(id: string): void {\n this.storage.remove(id);\n }\n\n /** returns the unsubscribe function, so a component can clean up after itself */\n subscribe(listener: TraceListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /* ----------------------------------------------------------- write side */\n\n /** whether this URL is one we were asked to watch */\n shouldTrace(url: string): boolean {\n if (this.options.exclude.length && matches(url, this.options.exclude)) return false;\n if (this.options.include.length) return matches(url, this.options.include);\n return true;\n }\n\n /** opens a trace; the adapter completes it later with the same id */\n start(transport: Transport, request: TraceRequest): ApiTrace {\n const trace: ApiTrace = {\n id: traceId(),\n transport,\n status: 'pending',\n request: {\n ...request,\n headers: redactHeaders(request.headers, this.options.redactHeaderNames),\n params: redactValue(request.params, this.options.redactFields) as Record<string, unknown>,\n body: request.body === undefined ? undefined : redactValue(request.body, this.options.redactFields),\n },\n timing: { startedAt: now() },\n };\n this.storage.add(trace);\n return trace;\n }\n\n complete(\n id: string,\n outcome: {\n response?: TraceResponse;\n error?: TraceError;\n status: ApiTrace['status'];\n },\n ): void {\n const current = this.storage.get(id);\n if (!current) return;\n\n const completedAt = now();\n const response = outcome.response\n ? {\n ...outcome.response,\n headers: redactHeaders(outcome.response.headers, this.options.redactHeaderNames),\n }\n : undefined;\n const envelope = response ? readEnvelope(response.body, this.options.envelope) : {};\n\n const next = this.storage.update(id, {\n status: outcome.status,\n response,\n error: outcome.error,\n timing: {\n startedAt: current.timing.startedAt,\n completedAt,\n duration: Math.round(completedAt - current.timing.startedAt),\n },\n ...envelope,\n });\n if (next) this.emit(next);\n }\n\n private emit(trace: ApiTrace): void {\n for (const listener of this.listeners) {\n try {\n listener(trace);\n } catch (e) {\n // a broken subscriber is the subscriber's problem, not the app's\n if (this.options.debug) console.warn('[api-tracer] listener threw', e);\n }\n }\n this.reporter?.(trace);\n }\n}\n\n/**\n * The shared instance; `import { apiTracer }` and call `init()`.\n *\n * Held in the global registry so that `api-tracer-kit` and\n * `api-tracer-kit/axios` — separate bundles, separate module graphs — are\n * talking to the same tracer. Without this, `useAxios()` would attach to an\n * instance `getTraces()` never reads from.\n */\nexport const apiTracer: ApiTracer = shared('tracer', () => new ApiTracer());\n","/**\n * `api-tracer-kit/axios`\n *\n * A separate entry point so a project that does not use axios never pulls this\n * in. There is no axios import here either — the instance is passed in, and\n * only the parts of its shape that matter are touched.\n */\nimport { apiTracer } from './core/tracer.js';\n\nexport { installAxios } from './adapters/axios.js';\n\n/** `useAxios(axios)` — covers the default export and every axios.create() after it */\nexport const useAxios = (axios: unknown): void => {\n apiTracer.useAxios(axios);\n};\n"]}
|