@lmnr-ai/lmnr 0.8.4 → 0.8.5

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.
Files changed (39) hide show
  1. package/dist/cli/worker/build.mjs +2 -2
  2. package/dist/cli/worker/index.cjs +2 -2
  3. package/dist/cli/worker/index.mjs +3 -3
  4. package/dist/cli/worker/ts-parser.mjs +1 -1
  5. package/dist/cli-dev.cjs +13 -0
  6. package/dist/cli-dev.cjs.map +1 -0
  7. package/dist/cli-dev.d.cts +1 -0
  8. package/dist/cli-dev.d.mts +1 -0
  9. package/dist/cli-dev.mjs +14 -0
  10. package/dist/cli-dev.mjs.map +1 -0
  11. package/dist/cli.cjs +4 -3
  12. package/dist/cli.cjs.map +1 -1
  13. package/dist/cli.d.cts +1 -1
  14. package/dist/cli.d.mts +1 -1
  15. package/dist/cli.mjs +6 -5
  16. package/dist/cli.mjs.map +1 -1
  17. package/dist/{decorators-DZv72fOd.mjs → decorators-DdS12Dao.mjs} +4 -4
  18. package/dist/{decorators-DZv72fOd.mjs.map → decorators-DdS12Dao.mjs.map} +1 -1
  19. package/dist/{decorators-CaaHC7Sh.cjs → decorators-Tly_R476.cjs} +2 -2
  20. package/dist/{decorators-CaaHC7Sh.cjs.map → decorators-Tly_R476.cjs.map} +1 -1
  21. package/dist/{dist-NapkqWcd.mjs → dist-BvQF0Rrn.mjs} +3 -3
  22. package/dist/{dist-NapkqWcd.mjs.map → dist-BvQF0Rrn.mjs.map} +1 -1
  23. package/dist/{dist-C79FAAA-.cjs → dist-n5S7WL9i.cjs} +3 -3
  24. package/dist/{dist-C79FAAA-.cjs.map → dist-n5S7WL9i.cjs.map} +1 -1
  25. package/dist/{evaluations-jzDUHEJA.d.mts → evaluations-BZFho0vg.d.mts} +1 -1
  26. package/dist/{evaluations-CRsMHEec.d.cts → evaluations-CgpDgkBo.d.cts} +1 -1
  27. package/dist/{file-utils-DGbnyFSr.mjs → file-utils-CqmeTjIX.mjs} +1 -1
  28. package/dist/index.cjs +2 -2
  29. package/dist/index.d.cts +1 -1
  30. package/dist/index.d.mts +1 -1
  31. package/dist/index.mjs +4 -4
  32. package/dist/proxy-to-lmnr-cli-CJG5N8gb.cjs +43 -0
  33. package/dist/proxy-to-lmnr-cli-CJG5N8gb.cjs.map +1 -0
  34. package/dist/proxy-to-lmnr-cli-CdCqjYUJ.mjs +37 -0
  35. package/dist/proxy-to-lmnr-cli-CdCqjYUJ.mjs.map +1 -0
  36. package/dist/{utils-nkOGZxcV.mjs → utils-CWdehUXP.mjs} +1 -1
  37. package/dist/{utils-nkOGZxcV.mjs.map → utils-CWdehUXP.mjs.map} +1 -1
  38. package/package.json +6 -5
  39. /package/dist/{chunk-D9JhAFjk.mjs → chunk-Bxrnaw5U.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"decorators-DZv72fOd.mjs","names":["output: any","errors: any[]","promises: Promise<void>[]","chunks: T[]","error: any","resolveData!: (value: { chunks: T[]; error?: any }) => void","chunks: any[]","logger","chunks: unknown[]","partialOutput: any","serialize","logger","spanPath: string[]","spanIdsPath: StringUUID[]","metadata: Record<string, AttributeValue>","properties: Record<string, any>","metadata: Record<string, any>","context","contextApi","logger","ccProxyBaseUrl: string | null","ccProxyTargetUrl: string | null","ccProxyStartupPromise: Promise<string | null> | null","spanIdsPath: string[]","spanPath: string[]","e: any","logger","collected: any[]","SDK_VERSION","logger","port: number | undefined","spanProcessor","context","parentPath: string[] | undefined","parentIdsPath: string[] | undefined","parentMetadata: Record<string, any> | undefined","parentTraceType: TraceType | undefined","parentTracingLevel: TracingLevel | undefined","parentUserId: string | undefined","parentSessionId: string | undefined","contextApi","logger","injectSessionRecorder","key","modelToProviderMap: Record<string, string>","compressionWorker: Worker | null","workerSupported: boolean | null","keys: string[]","id","error","toDelete: string[]","buffer","logger","SDK_VERSION","browser: Browser","context","context: BrowserContext","laminarObserve","SDK_VERSION","laminarObserve","observe","agent","logger","SDK_VERSION","browser: Browser","context","context: BrowserContext","logger","url: string","context","SDK_VERSION","context","recorderState: V3RecorderState","laminarObserve","observe","agent","WRAPPED_BROWSER_METHODS: (keyof KernelSDK.Kernel.Browsers)[]","WRAPPED_COMPUTER_METHODS: (keyof KernelSDK.Kernel.Browsers.Computer)[]","WRAPPED_PROCESS_METHODS: (keyof KernelSDK.Kernel.Browsers.Process)[]","SDK_VERSION","context","client: LaminarClient | undefined","version","stagehandInstrumentation","StagehandV3Instrumentation","instrumentations: Instrumentation[]","playwrightInstrumentation: PlaywrightInstrumentation | undefined","getLangVersion: () => string | undefined","logger","headers: Record<string, string>","ExporterHttp","key","ExporterGrpc","SDK_VERSION","context","contextToUse: Context","fn","logger","spanProcessor: LaminarSpanProcessor","tracerProvider: TracerProvider | undefined","_baseHttpUrl: string","_apiKey: string | undefined","SDK_VERSION","_configuration: InitializeOptions | undefined","logger","res: ReturnType<F>","streamInfo","output: any","defaultValue: string | undefined","observeOptions","parentMetadata: Record<string, any> | undefined","parentTraceType: TraceType | undefined","parentTracingLevel: TracingLevel | undefined","parentUserId: string | undefined","parentSessionId: string | undefined","parentRolloutSessionId: string | undefined","contextProperties: {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n }","spanAttributes: Record<string, AttributeValue>","context","actualConfig: Partial<ObserveOptions>"],"sources":["../src/opentelemetry-lib/tracing/compat.ts","../src/opentelemetry-lib/instrumentation/aisdk/utils.ts","../src/opentelemetry-lib/tracing/stream-utils.ts","../../types/dist/index.mjs","../src/opentelemetry-lib/tracing/span.ts","../src/opentelemetry-lib/tracing/context.ts","../src/opentelemetry-lib/instrumentation/claude-agent-sdk/proxy.ts","../src/opentelemetry-lib/instrumentation/claude-agent-sdk/index.ts","../src/laminar.ts","../src/browser/recorder.ts","../src/browser/utils.ts","../src/browser/playwright.ts","../src/browser/stagehand/shared-llm-wrapper.ts","../src/browser/stagehand/v2.ts","../src/browser/puppeteer.ts","../src/browser/stagehand/v3/constants.ts","../src/browser/stagehand/v3/cdp-helpers.ts","../src/browser/stagehand/v3/event-handlers.ts","../src/browser/stagehand/v3/instrumentation.ts","../src/opentelemetry-lib/instrumentation/kernel.ts","../src/opentelemetry-lib/tracing/instrumentations.ts","../src/version.ts","../src/opentelemetry-lib/tracing/exporter.ts","../src/opentelemetry-lib/tracing/processor.ts","../src/opentelemetry-lib/tracing/tracer.ts","../src/opentelemetry-lib/tracing/utils.ts","../src/opentelemetry-lib/tracing/index.ts","../src/opentelemetry-lib/configuration/index.ts","../src/opentelemetry-lib/tracing/decorators.ts","../src/decorators.ts"],"sourcesContent":["// Forward-compatibility with OTel v2 / v0.200 SDKs\nimport { SpanContext } from \"@opentelemetry/api\";\nimport { ReadableSpan, Span as SdkSpan } from \"@opentelemetry/sdk-trace-base\";\n\n// Type definitions that cover both OTel SDK v1 and v2\n// In v1: spans have parentSpanId and instrumentationLibrary\n// In v2: spans have parentSpanContext and instrumentationScope\nexport type OTelSpanCompat = SdkSpan & ReadableSpan & {\n parentSpanId?: string;\n parentSpanContext?: SpanContext;\n instrumentationLibrary?: any;\n instrumentationScope?: any;\n};\n\ntype OTelReadableSpanCompat = ReadableSpan & {\n parentSpanId?: string;\n parentSpanContext?: SpanContext;\n instrumentationLibrary?: any;\n instrumentationScope?: any;\n};\n\n// In-place edits on span object for compatibility between OTel v1 and v2 SDKs\nexport const makeSpanOtelV2Compatible = (\n span: OTelSpanCompat | OTelReadableSpanCompat,\n) => {\n const spanAny = span as any;\n if (spanAny.instrumentationScope && !spanAny.instrumentationLibrary) {\n // Making the spans from V2 compatible with V1\n Object.assign(span, {\n instrumentationLibrary: spanAny.instrumentationScope,\n });\n } else if (spanAny.instrumentationLibrary && !spanAny.instrumentationScope) {\n // Making the spans from V1 compatible with V2\n Object.assign(span, {\n instrumentationScope: spanAny.instrumentationLibrary,\n });\n }\n\n // Handle parent span compatibility between SDK v1 and v2\n // SDK v1 uses parentSpanId (string), SDK v2 uses parentSpanContext (SpanContext)\n if (spanAny.parentSpanContext && !spanAny.parentSpanId) {\n // SDK v2 -> SDK v1: Extract spanId from parentSpanContext\n Object.defineProperty(span, 'parentSpanId', {\n value: spanAny.parentSpanContext.spanId,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else if (spanAny.parentSpanId && !spanAny.parentSpanContext) {\n // SDK v1 -> SDK v2: Create a proper SpanContext object\n // We need to get the traceId from the span's own spanContext\n const spanContext = span.spanContext();\n Object.defineProperty(span, 'parentSpanContext', {\n value: {\n traceId: spanContext.traceId,\n spanId: spanAny.parentSpanId,\n traceFlags: spanContext.traceFlags,\n traceState: spanContext.traceState,\n isRemote: spanContext.isRemote,\n },\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n};\n\nexport const getParentSpanId = (\n span: OTelSpanCompat | OTelReadableSpanCompat,\n): string | undefined => {\n const spanAny = span as any;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return spanAny.parentSpanContext?.spanId ?? spanAny.parentSpanId;\n};\n\n/**\n * Creates a Resource object compatible with both OTel v1 and v2.\n *\n * In v1, Resource is a class constructor: new Resource(attributes)\n * In v2, Resource class is not exported; use resourceFromAttributes(attributes) instead\n *\n * This function automatically detects which version is available and uses the appropriate API.\n */\nexport const createResource = (\n attributes: Record<string, string>,\n): any => { // type IResource from `@opentelemetry/resources`\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const resources = require(\"@opentelemetry/resources\");\n\n // v2 uses resourceFromAttributes (0.200+ SDK, 2.x API)\n if (resources.resourceFromAttributes) {\n return resources.resourceFromAttributes(attributes);\n }\n\n // v1 uses Resource constructor (0.57.x SDK, 1.x API)\n if (resources.Resource) {\n return new resources.Resource(attributes);\n }\n\n throw new Error(\"Unable to create Resource: neither v1 nor v2 API found\");\n } catch (error) {\n throw new Error(\n `Failed to create Resource: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n};\n","import { type LanguageModelV3Message, type LanguageModelV3Prompt } from \"@ai-sdk/provider\";\nimport { type LanguageModelV2Message, type LanguageModelV2Prompt } from \"@ai-sdk/provider-v2\";\nimport { type DataContent } from \"ai\";\n\n// Mirrors https://github.com/vercel/ai/blob/main/packages/ai/src/telemetry/stringify-for-telemetry.ts\n// This function is initially implemented by us, and is not exported from the ai sdk.\n// We copy it here for our own use.\nexport const stringifyPromptForTelemetry =\n (prompt: LanguageModelV2Prompt | LanguageModelV3Prompt): string =>\n JSON.stringify(\n prompt.map((message: LanguageModelV2Message | LanguageModelV3Message) => ({\n ...message,\n content:\n typeof message.content === 'string'\n ? message.content\n : message.content.map(part =>\n part.type === 'file'\n ? {\n ...part,\n data:\n part.data instanceof Uint8Array\n ? convertDataContentToBase64String(part.data)\n : part.data,\n }\n : part,\n ),\n })),\n );\n\n// https://github.com/vercel/ai/blob/main/packages/ai/src/prompt/data-content.ts\n/**\nConverts data content to a base64-encoded string.\n\n@param content - Data content to convert.\n@returns Base64-encoded string.\n*/\nconst convertDataContentToBase64String = (content: DataContent): string => {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return convertUint8ArrayToBase64(new Uint8Array(content));\n }\n\n return convertUint8ArrayToBase64(content);\n};\n\n// https://github.com/vercel/ai/blob/main/packages/provider-utils/src/uint8-utils.ts\nexport function convertUint8ArrayToBase64(array: Uint8Array): string {\n let latin1string = '';\n\n // Note: regular for loop to support older JavaScript versions that\n // do not support for..of on Uint8Array\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n\n return btoa(latin1string);\n}\n\n/**\n * Information about a detected stream\n */\nexport type StreamInfo =\n | { type: 'aisdk-result'; result: any }\n | { type: 'readable-stream'; stream: ReadableStream<unknown> }\n | { type: 'async-iterable'; iterable: AsyncIterable<unknown> }\n | { type: 'response'; response: Response }\n | { type: null };\n\n/**\n * This function checks if an object is stream or stream-like, and returns information\n * about the stream type and how to handle it.\n * @param response - The result of a function, either an AI SDK result, a raw stream, or any other\n * response.\n * @returns - StreamInfo object describing the stream type, or { type: null } if not a stream.\n */\nexport const getStream = (response: unknown): StreamInfo => {\n if (!response || typeof response !== 'object') {\n return { type: null };\n }\n\n // Check for AI SDK StreamTextResult (has textStream or fullStream property)\n if ('textStream' in response || 'fullStream' in response) {\n return { type: 'aisdk-result', result: response };\n }\n\n // Check for Response object (from createUIMessageStreamResponse, createTextStreamResponse, etc.)\n if (response instanceof Response) {\n return { type: 'response', response };\n }\n\n // Check for ReadableStream\n if (response instanceof ReadableStream) {\n return { type: 'readable-stream', stream: response };\n }\n\n // Check for AsyncIterable (but not ReadableStream, which also implements AsyncIterable)\n if (Symbol.asyncIterator in response && !(response instanceof ReadableStream)) {\n return { type: 'async-iterable', iterable: response as AsyncIterable<unknown> };\n }\n\n return { type: null };\n};\n\n/**\n * Consumes an AI SDK StreamTextResult and returns structured output\n * @param result - The AI SDK StreamTextResult object\n * @returns Promise that resolves to structured output with all relevant fields\n */\nexport const consumeAISDKResult = async (result: any): Promise<any> => {\n const output: any = {};\n const errors: any[] = [];\n\n // Helper to safely await a promise property\n const safeAwait = async (key: string, promise: PromiseLike<any>) => {\n try {\n output[key] = await promise;\n } catch (error) {\n errors.push({ field: key, error: error instanceof Error ? error.message : String(error) });\n }\n };\n\n // Collect all the promise properties in parallel\n const promises: Promise<void>[] = [];\n\n if ('text' in result) promises.push(safeAwait('text', result.text));\n if ('toolCalls' in result) promises.push(safeAwait('toolCalls', result.toolCalls));\n if ('reasoning' in result) promises.push(safeAwait('reasoning', result.reasoning));\n if ('finishReason' in result) promises.push(safeAwait('finishReason', result.finishReason));\n if ('usage' in result) promises.push(safeAwait('usage', result.usage));\n if ('files' in result) promises.push(safeAwait('files', result.files));\n if ('sources' in result) promises.push(safeAwait('sources', result.sources));\n\n await Promise.all(promises);\n\n if (errors.length > 0) {\n output._errors = errors;\n }\n\n return output;\n};\n\n/**\n * Consumes a ReadableStream while teeing it to pass through to the caller\n * @param stream - The ReadableStream to consume\n * @returns Object with the teed stream for the caller and a promise for the collected data\n */\nexport const consumeAndTeeReadableStream = <T>(\n stream: ReadableStream<T>,\n): { stream: ReadableStream<T>; dataPromise: Promise<{ chunks: T[]; error?: any }> } => {\n const [stream1, stream2] = stream.tee();\n\n const dataPromise = (async () => {\n const chunks: T[] = [];\n let error: any = undefined;\n\n try {\n const reader = stream2.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n } catch (err) {\n error = err;\n }\n\n return { chunks, error };\n })();\n\n return { stream: stream1, dataPromise };\n};\n\n/**\n * Consumes an AsyncIterable while yielding items to the caller\n * @param iterable - The AsyncIterable to consume\n * @returns Object with a wrapped iterable for the caller and a promise for the collected data\n */\nexport const consumeAndTeeAsyncIterable = <T>(\n iterable: AsyncIterable<T>,\n): { iterable: AsyncIterable<T>; dataPromise: Promise<{ chunks: T[]; error?: any }> } => {\n const chunks: T[] = [];\n let error: any = undefined;\n let resolveData!: (value: { chunks: T[]; error?: any }) => void;\n const dataPromise = new Promise<{ chunks: T[]; error?: any }>((resolve) => {\n resolveData = resolve;\n });\n\n const wrappedIterable = (async function* () {\n try {\n for await (const item of iterable) {\n chunks.push(item);\n yield item;\n }\n } catch (err) {\n error = err;\n throw err;\n } finally {\n resolveData({ chunks, error });\n }\n })();\n\n return { iterable: wrappedIterable, dataPromise };\n};\n\n/**\n * Consumes a Response object's body stream\n * @param response - The Response object to consume\n * @returns Promise that resolves to the consumed data\n */\nexport const consumeResponse = async (response: Response):\nPromise<{ chunks: any[]; error?: any }> => {\n const chunks: any[] = [];\n let error: any = undefined;\n\n if (!response.body) {\n return { chunks };\n }\n\n try {\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(decoder.decode(value, { stream: true }));\n }\n } finally {\n reader.releaseLock();\n }\n } catch (err) {\n error = err;\n }\n\n return { chunks, error };\n};\n","import type { Span } from \"@opentelemetry/api\";\n\nimport { initializeLogger } from \"../../utils\";\nimport {\n consumeAISDKResult,\n consumeAndTeeAsyncIterable,\n consumeAndTeeReadableStream,\n consumeResponse,\n getStream,\n} from \"../instrumentation/aisdk/utils\";\nimport { shouldSendTraces } from \".\";\nimport {\n SPAN_OUTPUT,\n} from \"./attributes\";\n\nconst logger = initializeLogger();\n\n// Track pending stream processing promises\nconst pendingStreamProcessing = new Set<Promise<void>>();\n\n/**\n * Wait for all pending stream processing to complete with a timeout\n * @param timeoutMs - Maximum time to wait in milliseconds (default: 5000)\n */\nexport const waitForPendingStreams = async (timeoutMs: number = 5000): Promise<void> => {\n if (pendingStreamProcessing.size === 0) {\n return;\n }\n logger.debug(`Waiting for ${pendingStreamProcessing.size} pending stream(s)`);\n\n const initialCount = pendingStreamProcessing.size;\n const pendingPromises = Array.from(pendingStreamProcessing);\n\n let timedOut = false;\n const timeoutPromise = new Promise<void>((resolve) => {\n setTimeout(() => {\n timedOut = true;\n resolve();\n }, timeoutMs);\n });\n\n await Promise.race([\n Promise.allSettled(pendingPromises),\n timeoutPromise,\n ]);\n\n if (timedOut && pendingStreamProcessing.size > 0) {\n logger.warn(\n `Timeout waiting for ${pendingStreamProcessing.size} pending stream(s) ` +\n `after ${timeoutMs}ms (started with ${initialCount})`,\n );\n }\n};\n\n/**\n * Consumes a stream result to ensure background processing completes.\n * This is useful in rollout mode where there's no caller to consume the stream.\n * @param result - The result that might be a stream\n * @returns The same result, or accumulated data if it was a stream\n */\nexport const consumeStreamResult = async (result: unknown): Promise<unknown> => {\n const streamInfo = getStream(result);\n\n if (streamInfo.type === null) {\n // Not a stream, return as-is\n logger.debug(\"Result is not a stream, returning as-is\");\n return result;\n }\n\n logger.debug(\"Result is a stream, consuming...\");\n\n if (streamInfo.type === 'aisdk-result') {\n // For AI SDK results, just await the text property to trigger consumption\n // The background task will handle collecting all data\n try {\n if ('text' in streamInfo.result) {\n await streamInfo.result.text;\n }\n } catch (error) {\n logger.warn(\"Error consuming AI SDK result stream: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return result;\n }\n\n if (streamInfo.type === 'readable-stream') {\n // Consume the ReadableStream\n const chunks: unknown[] = [];\n try {\n const reader = streamInfo.stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n } catch (error) {\n logger.warn(\"Error consuming ReadableStream: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return { type: 'stream', chunks };\n }\n\n if (streamInfo.type === 'async-iterable') {\n // Consume the AsyncIterable\n const chunks: unknown[] = [];\n try {\n for await (const chunk of streamInfo.iterable) {\n chunks.push(chunk);\n }\n } catch (error) {\n logger.warn(\"Error consuming AsyncIterable: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return { type: 'async-iterable', chunks };\n }\n\n if (streamInfo.type === 'response') {\n // Consume the Response body\n try {\n const { chunks, error } = await consumeResponse(streamInfo.response);\n if (error) {\n logger.warn(\"Error consuming Response: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return { type: 'response', chunks };\n } catch (error) {\n logger.warn(\"Error consuming Response: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n }\n\n return result;\n};\n\n/**\n * Track a background promise and ensure cleanup\n */\nconst trackStreamProcessing = (task: () => Promise<void>): void => {\n const processingPromise = task().finally(() => {\n pendingStreamProcessing.delete(processingPromise);\n });\n\n pendingStreamProcessing.add(processingPromise);\n};\n\n/**\n * Handles streaming results by consuming the stream in the background\n * while passing through the original result to the caller\n */\nexport const handleStreamResult = <T>(\n originalResult: T,\n streamInfo: ReturnType<typeof getStream>,\n span: Span,\n ignoreOutput: boolean | undefined,\n serialize: (payload: unknown) => string,\n): T | ReadableStream<unknown> | AsyncIterable<unknown> | Response => {\n logger.debug(`Handling stream result of type: ${streamInfo.type}`);\n\n if (streamInfo.type === 'aisdk-result') {\n // For AI SDK results, consume the promise properties in the background\n trackStreamProcessing(async () => {\n logger.debug('Starting background processing for AI SDK result');\n\n let partialOutput: any = {};\n try {\n partialOutput = await consumeAISDKResult(streamInfo.result);\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n span.setAttribute(SPAN_OUTPUT, serialize(partialOutput));\n } catch (error) {\n logger.warn(\"Failed to serialize AI SDK stream output: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n } catch (error) {\n // Record partial output if we have any\n if (Object.keys(partialOutput).length > 0 && shouldSendTraces() && !ignoreOutput) {\n try {\n span.setAttribute(SPAN_OUTPUT, serialize(partialOutput));\n } catch (serError) {\n logger.warn(\"Failed to serialize partial AI SDK output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n span.recordException(error as Error);\n } finally {\n logger.debug('Ending span for AI SDK result');\n span.end();\n }\n });\n\n return originalResult;\n }\n\n if (streamInfo.type === 'readable-stream') {\n logger.debug('Setting up background processing for ReadableStream');\n const { stream, dataPromise } = consumeAndTeeReadableStream(streamInfo.stream);\n\n // Consume in background\n trackStreamProcessing(async () => {\n try {\n const { chunks, error } = await dataPromise;\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n const output = { type: 'stream', chunks };\n span.setAttribute(SPAN_OUTPUT, serialize(output));\n } catch (serError) {\n logger.warn(\"Failed to serialize stream output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n\n if (error) {\n span.recordException(error as Error);\n }\n } finally {\n logger.debug('Ending span for ReadableStream');\n span.end();\n }\n });\n\n return stream;\n }\n\n if (streamInfo.type === 'async-iterable') {\n logger.debug('Setting up background processing for AsyncIterable');\n const { iterable, dataPromise } = consumeAndTeeAsyncIterable(streamInfo.iterable);\n\n // Consume in background\n trackStreamProcessing(async () => {\n try {\n const { chunks, error } = await dataPromise;\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n const output = { type: 'async-iterable', chunks };\n span.setAttribute(SPAN_OUTPUT, serialize(output));\n } catch (serError) {\n logger.warn(\"Failed to serialize async iterable output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n\n if (error) {\n span.recordException(error as Error);\n }\n } finally {\n logger.debug('Ending span for AsyncIterable');\n span.end();\n }\n });\n\n return iterable;\n }\n\n if (streamInfo.type === 'response') {\n logger.debug('Setting up background processing for Response');\n // For Response objects, extract the body stream and tee it\n const originalResponse = streamInfo.response;\n\n if (!originalResponse.body) {\n // No body, just return as-is and end span\n span.end();\n return originalResult;\n }\n\n const [stream1, stream2] = originalResponse.body.tee();\n\n // Create a new Response with the teed stream for the caller\n const newResponse = new Response(stream1, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: originalResponse.headers,\n });\n\n // Consume the other stream in background\n trackStreamProcessing(async () => {\n try {\n // Create a temporary Response to use consumeResponse helper\n const tempResponse = new Response(stream2);\n const { chunks, error } = await consumeResponse(tempResponse);\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n const output = { type: 'response', chunks };\n span.setAttribute(SPAN_OUTPUT, serialize(output));\n } catch (serError) {\n logger.warn(\"Failed to serialize response output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n\n if (error) {\n span.recordException(error as Error);\n }\n } catch (err) {\n span.recordException(err as Error);\n } finally {\n logger.debug('Ending span for Response');\n span.end();\n }\n });\n\n return newResponse;\n }\n\n // Should never reach here, but just in case\n logger.warn('Stream type not handled, ending span immediately');\n span.end();\n return originalResult;\n};\n","//#region src/tracing.ts\n/**\n* Tracing levels to conditionally disable tracing.\n*\n* OFF - No tracing is sent.\n* META_ONLY - Only metadata is sent (e.g. tokens, costs, etc.).\n* ALL - All data is sent.\n*/\nlet TracingLevel = /* @__PURE__ */ function(TracingLevel$1) {\n\tTracingLevel$1[\"OFF\"] = \"off\";\n\tTracingLevel$1[\"META_ONLY\"] = \"meta_only\";\n\tTracingLevel$1[\"ALL\"] = \"all\";\n\treturn TracingLevel$1;\n}({});\n\n//#endregion\n//#region src/worker-protocol.ts\n/**\n* Message prefix for protocol messages in stdout\n*/\nconst WORKER_MESSAGE_PREFIX = \"__LMNR_WORKER__:\";\n\n//#endregion\nexport { TracingLevel, WORKER_MESSAGE_PREFIX };\n//# sourceMappingURL=index.mjs.map","\nimport { LaminarSpanContext, TraceType, TracingLevel } from \"@lmnr-ai/types\";\nimport {\n Attributes,\n AttributeValue,\n Exception,\n HrTime,\n Link,\n type Span,\n SpanContext,\n SpanKind,\n SpanStatus,\n TimeInput,\n} from \"@opentelemetry/api\";\nimport { type InstrumentationScope } from \"@opentelemetry/core\";\nimport { ReadableSpan, type Span as SdkSpan, TimedEvent } from \"@opentelemetry/sdk-trace-base\";\n\nimport {\n initializeLogger,\n metadataToAttributes,\n otelSpanIdToUUID,\n otelTraceIdToUUID,\n StringUUID,\n} from \"../../utils\";\nimport {\n ASSOCIATION_PROPERTIES,\n ROLLOUT_SESSION_ID,\n SESSION_ID,\n SPAN_IDS_PATH,\n SPAN_INPUT,\n SPAN_OUTPUT,\n SPAN_PATH,\n TRACE_TYPE,\n USER_ID,\n} from \"./attributes\";\nimport { getParentSpanId, makeSpanOtelV2Compatible } from \"./compat\";\nimport { LaminarContextManager } from \"./context\";\n\nconst logger = initializeLogger();\n\n// We decided to implement raw otel Span interface and have _span: SdkSpan because SdkSpan\n// discourages use of its constructor directly in favour of Tracer.startSpan()\n// We are using constructor directly because we're implementing Tracer interface as well.\nexport class LaminarSpan implements Span, ReadableSpan {\n private _span: SdkSpan;\n // Whether the span is started by Laminar.startActiveSpan()\n private _activated: boolean;\n\n constructor(span: Span, activated?: boolean) {\n if (span instanceof LaminarSpan) {\n this._activated = span.isActivated;\n this._span = span._span;\n } else {\n this._activated = activated ?? false;\n\n // This line assumes that the span passed here is an SdkSpan. Reason:\n // When using default OpenTelemetry Node SDK, i.e. NodeTracerProvider.getTracer().startSpan(),\n // the span returned is an SdkSpan. SDK span implements ReadableSpan, so attributes\n // can be accessed. Span, i.e. OpenTelemetry API Span, does not require that, so custom\n // SDK implementations may not implement certain ReadableSpan methods, in particular\n // `attributes` that we need to access.\n this._span = span as SdkSpan;\n }\n\n this.name = (this._span as unknown as SdkSpan).name;\n this.kind = (this._span as unknown as SdkSpan).kind;\n this.startTime = (this._span as unknown as SdkSpan).startTime;\n this.endTime = (this._span as unknown as SdkSpan).endTime;\n this.status = (this._span as unknown as SdkSpan).status;\n this.attributes = (this._span as unknown as SdkSpan).attributes;\n this.links = (this._span as unknown as SdkSpan).links;\n this.events = (this._span as unknown as SdkSpan).events;\n this.duration = (this._span as unknown as SdkSpan).duration;\n this.ended = (this._span as unknown as SdkSpan).ended;\n this.resource = (this._span as unknown as SdkSpan).resource;\n this.instrumentationLibrary = (this._span as any).instrumentationLibrary;\n this.droppedAttributesCount = (this._span as unknown as SdkSpan).droppedAttributesCount;\n this.droppedEventsCount = (this._span as unknown as SdkSpan).droppedEventsCount;\n this.droppedLinksCount = (this._span as unknown as SdkSpan).droppedLinksCount;\n this.makeOtelV2Compatible();\n LaminarContextManager.addActiveSpan(this.spanContext().spanId);\n }\n\n name: string;\n kind: SpanKind;\n parentSpanId?: string | undefined;\n startTime: HrTime;\n endTime: HrTime;\n status: SpanStatus;\n attributes: Attributes;\n links: Link[];\n events: TimedEvent[];\n duration: HrTime;\n ended: boolean;\n resource: any; // type IResource from `@opentelemetry/resources`\n instrumentationLibrary: any; // type InstrumentationLibrary from `@opentelemetry/core`\n droppedAttributesCount: number;\n droppedEventsCount: number;\n droppedLinksCount: number;\n\n public spanContext(): SpanContext {\n return this._span.spanContext();\n }\n\n public setAttribute(key: string, value: AttributeValue): this {\n this._span.setAttribute(key, value);\n return this;\n }\n\n public setAttributes(attributes: Attributes): this {\n this._span.setAttributes(attributes);\n return this;\n }\n\n public addEvent(\n name: string,\n attributesOrStartTime?: Attributes | TimeInput,\n startTime?: TimeInput,\n ): this {\n this._span.addEvent(name, attributesOrStartTime, startTime);\n return this;\n }\n\n public addLink(link: Link): this {\n this._span.addLink(link);\n return this;\n }\n\n public addLinks(links: Link[]): this {\n this._span.addLinks(links);\n return this;\n }\n\n public setStatus(status: SpanStatus): this {\n this._span.setStatus(status);\n return this;\n }\n\n public updateName(name: string): this {\n this._span.updateName(name);\n return this;\n }\n\n public end(endTime?: TimeInput): void {\n if (!this._span.isRecording()) {\n // This will log a warning and do nothing.\n return this._span.end(endTime);\n }\n\n // Remove from global registry on end\n LaminarContextManager.removeActiveSpan(this.spanContext().spanId);\n\n if (this._activated) {\n LaminarContextManager.popContext();\n }\n return this._span.end(endTime);\n }\n\n public set activated(activated: boolean) {\n this._activated = activated;\n }\n\n public isRecording(): boolean {\n return this._span.isRecording();\n }\n\n public recordException(exception: Exception, time?: TimeInput): void {\n return this._span.recordException(exception, time);\n }\n\n // ================================\n // Laminar specific methods\n // ================================\n\n public setTraceSessionId(sessionId: string): void {\n this._span.setAttribute(SESSION_ID, sessionId);\n }\n\n public setTraceUserId(userId: string): void {\n this._span.setAttribute(USER_ID, userId);\n }\n\n public setTraceRolloutSessionId(rolloutSessionId: string): void {\n this._span.setAttribute(\"lmnr.rollout.session_id\", rolloutSessionId);\n }\n\n public setTraceMetadata(metadata: Record<string, any>): void {\n this._span.setAttributes(metadataToAttributes(metadata));\n }\n\n public setInput(input: any): void {\n const finalInput = typeof input === 'string' ? input : JSON.stringify(input);\n this._span.setAttribute(SPAN_INPUT, finalInput);\n }\n\n public setOutput(output: any): void {\n const finalOutput = typeof output === 'string' ? output : JSON.stringify(output);\n this._span.setAttribute(SPAN_OUTPUT, finalOutput);\n }\n\n public setTags(tags: string[]): void {\n this._span.setAttribute(`${ASSOCIATION_PROPERTIES}.tags`, Array.from(new Set(tags)));\n }\n\n public addTags(tags: string[]): void {\n const currentTags = this.tags;\n this.setTags(Array.from(new Set([...currentTags, ...tags])));\n }\n\n public getLaminarSpanContext(): LaminarSpanContext {\n let spanPath: string[] = [];\n let spanIdsPath: StringUUID[] = [];\n let userId;\n let sessionId;\n let rolloutSessionId;\n let traceType;\n let tracingLevel = TracingLevel.ALL;\n const metadata: Record<string, AttributeValue> = {};\n\n if (this._span.attributes) {\n spanPath = this._span.attributes[SPAN_PATH] as string[];\n spanIdsPath = this._span.attributes[SPAN_IDS_PATH] as StringUUID[];\n userId = this._span.attributes[USER_ID] as string;\n sessionId = this._span.attributes[SESSION_ID] as string;\n rolloutSessionId = this._span.attributes[ROLLOUT_SESSION_ID] as string;\n traceType = this._span.attributes[TRACE_TYPE] as TraceType;\n tracingLevel = this._span.attributes[\n `${ASSOCIATION_PROPERTIES}.tracing_level`\n ] as TracingLevel ?? TracingLevel.ALL;\n for (const [key, rawValue] of Object.entries(this._span.attributes)) {\n if (key.startsWith(`${ASSOCIATION_PROPERTIES}.metadata.`)) {\n let value = rawValue!;\n try {\n value = JSON.parse(value as string);\n } catch {\n // Ignore\n }\n metadata[key.replace(`${ASSOCIATION_PROPERTIES}.metadata.`, '')] = value;\n }\n }\n } else {\n logger.warn(\n \"Attributes object is not available. Most likely the span is not a LaminarSpan \" +\n \"and not an OpenTelemetry default SDK Span. Span path and ids path will be empty.\",\n );\n }\n\n return {\n spanId: otelSpanIdToUUID(this._span.spanContext().spanId) as StringUUID,\n traceId: otelTraceIdToUUID(this._span.spanContext().traceId),\n isRemote: this._span.spanContext().isRemote ?? false,\n spanPath,\n spanIdsPath,\n userId,\n sessionId,\n rolloutSessionId,\n metadata,\n traceType,\n tracingLevel,\n };\n }\n\n public spanId(\n format: 'otel' | 'uuid' = 'otel',\n ): string {\n const spanId = this._span.spanContext().spanId;\n if (format === 'otel') {\n return spanId;\n }\n return otelSpanIdToUUID(spanId);\n }\n\n public traceId(\n format: 'otel' | 'uuid' = 'otel',\n ): string {\n const traceId = this._span.spanContext().traceId;\n if (format === 'otel') {\n return traceId;\n }\n return otelTraceIdToUUID(traceId);\n }\n\n public get tags(): string[] {\n if (!this._span.attributes) {\n logger.warn(\n \"[LaminarSpan.tags] WARNING. Current span does not have attributes object. \" +\n \"Possibly, the span was created with a custom OTel SDK. Returning an empty list. \" +\n \"Help: OpenTelemetry API does not guarantee reading attributes from a span, but OTel \" +\n \"SDK allows it by default. Laminar SDK allows to read attributes too.\",\n );\n return [];\n }\n return this._span.attributes[`${ASSOCIATION_PROPERTIES}.tags`] as string[] ?? [];\n }\n\n public get laminarAssociationProperties(): {\n metadata?: Record<string, any>;\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n } {\n if (!this._span.attributes) {\n logger.warn(\n \"[LaminarSpan.laminarAssociationProperties] WARNING. Current span does not have \" +\n \"attributes object. Possibly, the span was created with a custom OTel SDK. Returning an \" +\n \"empty object. Help: OpenTelemetry API does not guarantee reading attributes from a \" +\n \"span, but OTel SDK allows it by default. Laminar SDK allows to read attributes too.\",\n );\n return {};\n }\n try {\n const properties: Record<string, any> = {};\n const metadata: Record<string, any> = {};\n for (const [key, rawValue] of Object.entries(this._span.attributes)) {\n if (!key.startsWith(`${ASSOCIATION_PROPERTIES}.`)) {\n continue;\n }\n let value = rawValue!;\n if (key.startsWith(`${ASSOCIATION_PROPERTIES}.metadata.`)) {\n const metaKey = key.replace(`${ASSOCIATION_PROPERTIES}.metadata.`, '');\n try {\n value = JSON.parse(value as string);\n } catch {\n // Ignore\n }\n metadata[metaKey] = value;\n }\n }\n properties.tracingLevel = this._span.attributes[\n `${ASSOCIATION_PROPERTIES}.tracing_level`\n ] as TracingLevel ?? TracingLevel.ALL;\n properties.userId = this._span.attributes[USER_ID] as string ?? undefined;\n properties.sessionId = this._span.attributes[SESSION_ID] as string ?? undefined;\n properties.rolloutSessionId = this._span.attributes[ROLLOUT_SESSION_ID] as string\n ?? undefined;\n properties.traceType = this._span.attributes[TRACE_TYPE] as TraceType ?? undefined;\n return {\n metadata,\n ...properties,\n };\n } catch {\n return {};\n }\n }\n\n // ================================\n // OTel V2 compatibility\n // ================================\n\n public makeOtelV2Compatible(): void {\n makeSpanOtelV2Compatible(this._span);\n }\n\n public get instrumentationScope(): InstrumentationScope {\n return (this._span as any).instrumentationLibrary as unknown as InstrumentationScope;\n }\n\n public get parentSpanContext(): SpanContext | undefined {\n const parentSpanId = getParentSpanId(this._span);\n if (!parentSpanId) {\n return undefined;\n }\n return {\n spanId: parentSpanId,\n traceId: this.spanContext().traceId,\n // TODO: somehow get the traceFlags from the parent span\n traceFlags: this.spanContext().traceFlags,\n };\n }\n\n public getParentSpanId(): string | undefined {\n return getParentSpanId(this._span as unknown as SdkSpan);\n }\n\n public get isActivated(): boolean {\n return this._activated;\n }\n}\n","import { TraceType, TracingLevel } from \"@lmnr-ai/types\";\nimport {\n Context, context as contextApi,\n createContextKey, ROOT_CONTEXT, trace } from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\n\nimport { LaminarSpan } from \"./span\";\n\nexport const CONTEXT_SPAN_PATH_KEY = createContextKey(\"span_path\");\nexport const ASSOCIATION_PROPERTIES_KEY = createContextKey(\n \"association_properties\",\n);\nexport const CONTEXT_GLOBAL_METADATA_KEY = createContextKey(\n \"global_metadata\",\n);\n\nexport class LaminarContextManager {\n private static _asyncLocalStorage = new AsyncLocalStorage<Context[]>();\n private static _globalMetadata: Record<string, any> = {};\n private static _inheritGlobalContext: boolean = false;\n // Static registry for cross-async span management\n // We're keeping track of spans have started (and running) here for the cases when span\n // is started in one async context and ended in another\n // We use this registry to ignore the context of spans that were already ended in\n // another async context.\n // LaminarSpan adds and removes itself to and from this registry in start()\n // and end() methods respectively.\n private static _activeSpans: Set<string> = new Set();\n\n private constructor() {\n throw new Error(\"LaminarContextManager is a static class and cannot be instantiated\");\n }\n\n public static getContext(): Context {\n const contexts = this.getContextStack();\n\n // Walk through contexts from most recent to oldest\n // We're doing it this way because we want to return the most recent context\n // that has an active span\n // This is primarily for the cases when span is started in one async context\n // and ended in another\n for (let i = contexts.length - 1; i >= 0; i--) {\n const context = contexts[i];\n const span = trace.getSpan(context);\n\n if (!span) {\n // No span in this context, it's valid\n return context;\n }\n\n if (!span.isRecording() && span.spanContext().isRemote) {\n // Span is remote and not recording, it's valid\n return context;\n }\n\n if (!(span instanceof LaminarSpan)) {\n // Span is not a Laminar span, it's valid\n return context;\n }\n\n if (!span.isActivated) {\n // Span is not activated by Laminar.startActiveSpan(), it's valid\n return context;\n }\n\n // Check if the span in this context has been ended\n try {\n const isActive = this._activeSpans.has(span.spanContext().spanId);\n if (isActive) {\n // Span is still active, use this context\n return context;\n }\n // Span has been ended, continue to parent context\n } catch {\n // If we can't check the span, assume it's valid\n return context;\n }\n }\n\n // No valid context found, return ROOT_CONTEXT\n return ROOT_CONTEXT;\n }\n\n public static pushContext(context: Context) {\n const contexts = this.getContextStack();\n const newContexts = [...contexts, context];\n this._asyncLocalStorage.enterWith(newContexts);\n }\n\n public static popContext() {\n const contexts = this.getContextStack();\n if (contexts.length > 0) {\n // Remove the last context and filter out any contexts with inactive spans\n const newContexts = contexts.slice(0, -1).filter(context => {\n const span = trace.getSpan(context);\n\n if (!span) {\n // No span in this context, it's valid\n return true;\n }\n\n // Check if the span in this context has been ended\n try {\n return this._activeSpans.has(span.spanContext().spanId);\n } catch {\n // If we can't check the span, assume it's valid\n return true;\n }\n });\n\n this._asyncLocalStorage.enterWith(newContexts);\n }\n }\n\n public static clearContexts() {\n this._asyncLocalStorage.enterWith([]);\n }\n\n public static clearActiveSpans() {\n this._activeSpans.clear();\n }\n\n public static getContextStack(): Context[] {\n return this._asyncLocalStorage.getStore()\n || (this._inheritGlobalContext ? [contextApi.active()] : []);\n }\n\n /**\n * Run a function with an isolated context stack.\n * This ensures that parallel executions don't interfere with each other.\n */\n public static runWithIsolatedContext<T>(initialStack: Context[], fn: () => T): T {\n return this._asyncLocalStorage.run(initialStack, fn);\n }\n\n public static addActiveSpan(spanId: string): void {\n this._activeSpans.add(spanId);\n }\n\n public static removeActiveSpan(spanId: string): void {\n this._activeSpans.delete(spanId);\n }\n\n public static setAssociationProperties(span: LaminarSpan, context: Context): Context {\n const properties = span.laminarAssociationProperties;\n\n return this.setRawAssociationProperties(properties, context);\n }\n\n public static setRawAssociationProperties(\n properties: Record<string, any>,\n context: Context,\n ): Context {\n let entityContext = context;\n const userId = properties.userId;\n const sessionId = properties.sessionId;\n const rolloutSessionId = properties.rolloutSessionId;\n const traceType = properties.traceType;\n const metadata = properties.metadata;\n const tracingLevel = properties.tracingLevel;\n entityContext = entityContext.setValue(ASSOCIATION_PROPERTIES_KEY, {\n userId,\n sessionId,\n traceType,\n metadata,\n tracingLevel,\n rolloutSessionId,\n });\n return entityContext;\n }\n\n public static setGlobalMetadata(globalMetadata: Record<string, any>) {\n this._globalMetadata = globalMetadata;\n }\n\n public static getGlobalMetadata(): Record<string, any> {\n return this._globalMetadata;\n }\n\n public static getAssociationProperties(): {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n } {\n const entityContext = this.getContext();\n return entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {};\n }\n\n public static set inheritGlobalContext(inheritGlobalContext: boolean) {\n this._inheritGlobalContext = inheritGlobalContext;\n }\n}\n","import { trace } from \"@opentelemetry/api\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport * as net from \"net\";\n\nimport { Laminar } from \"../../../laminar\";\nimport { initializeLogger } from \"../../../utils\";\nimport { SPAN_IDS_PATH, SPAN_PATH } from \"../../tracing/attributes\";\nimport { LaminarContextManager } from \"../../tracing/context\";\n\nconst logger = initializeLogger();\n\nconst DEFAULT_ANTHROPIC_BASE_URL = \"https://api.anthropic.com\";\nconst DEFAULT_CC_PROXY_PORT = 45667;\nconst CC_PROXY_PORT_ATTEMPTS = 5;\n\n// Module-level state for proxy management\nlet ccProxyBaseUrl: string | null = null;\nlet ccProxyTargetUrl: string | null = null;\nlet ccProxyShutdownRegistered = false;\nlet ccProxyRefCount = 0;\nlet ccProxyStartupPromise: Promise<string | null> | null = null;\n\n/**\n * Find an available port starting from the given port\n */\nfunction findAvailablePort(startPort: number, attempts: number): Promise<number | null> {\n return new Promise((resolve) => {\n let currentAttempt = 0;\n\n const tryPort = (port: number) => {\n const server = net.createServer();\n\n server.once('error', () => {\n server.close();\n currentAttempt++;\n if (currentAttempt < attempts) {\n tryPort(startPort + currentAttempt);\n } else {\n resolve(null);\n }\n });\n\n server.once('listening', () => {\n server.close(() => {\n resolve(port);\n });\n });\n\n server.listen(port, '127.0.0.1');\n };\n\n tryPort(startPort);\n });\n}\n\n/**\n * Wait for a port to be available\n */\nfunction waitForPort(port: number, timeoutMs: number = 5000): Promise<boolean> {\n return new Promise((resolve) => {\n const deadline = Date.now() + timeoutMs;\n\n const checkPort = () => {\n if (Date.now() >= deadline) {\n resolve(false);\n return;\n }\n\n const socket = new net.Socket();\n\n socket.setTimeout(200);\n\n socket.once('connect', () => {\n socket.destroy();\n resolve(true);\n });\n\n socket.once('timeout', () => {\n socket.destroy();\n setTimeout(checkPort, 100);\n });\n\n socket.once('error', () => {\n socket.destroy();\n setTimeout(checkPort, 100);\n });\n\n socket.connect(port, '127.0.0.1');\n };\n\n checkPort();\n });\n}\n\n/**\n * Stop the claude-code proxy server\n */\nfunction stopCcProxy() {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { stopServer } = require(\"@lmnr-ai/claude-code-proxy\");\n logger.debug('Stopping cc-proxy...');\n stopServer();\n } catch (e) {\n logger.debug(`Unable to stop cc-proxy: ${e instanceof Error ? e.message : String(e)}`);\n }\n\n if (ccProxyTargetUrl) {\n process.env.ANTHROPIC_BASE_URL = ccProxyTargetUrl;\n }\n\n ccProxyBaseUrl = null;\n ccProxyTargetUrl = null;\n ccProxyRefCount = 0;\n ccProxyStartupPromise = null;\n}\n\n/**\n * Register cleanup on process exit\n */\nfunction registerProxyShutdown() {\n if (!ccProxyShutdownRegistered) {\n process.on('exit', () => {\n logger.debug('process.on(\"exit\") called');\n stopCcProxy();\n });\n ccProxyShutdownRegistered = true;\n }\n}\n\n/**\n * Get the current proxy base URL if running\n */\nexport function getProxyBaseUrl(): string | null {\n return ccProxyBaseUrl;\n}\n\n/**\n * Start the claude-code proxy server with reference counting\n */\nexport async function startProxy({\n env,\n}: {\n env: Record<string, string | undefined>;\n}): Promise<string | null> {\n // If there's an ongoing startup, wait for it to complete\n\n if (ccProxyStartupPromise !== null) {\n logger.debug(\"Waiting for ongoing proxy startup to complete\");\n await ccProxyStartupPromise;\n }\n\n // After waiting (or if there was no ongoing startup), check if proxy is running\n if (ccProxyBaseUrl !== null) {\n ccProxyRefCount++;\n logger.debug(`Reusing existing proxy, ref count: ${ccProxyRefCount}`);\n return ccProxyBaseUrl;\n }\n\n // Start the proxy - create promise to prevent concurrent startups\n ccProxyStartupPromise = (async () => {\n try {\n const port = await findAvailablePort(DEFAULT_CC_PROXY_PORT, CC_PROXY_PORT_ATTEMPTS);\n if (port === null) {\n logger.warn(\"Unable to allocate port for cc-proxy.\");\n return null;\n }\n\n const targetUrl =\n ccProxyTargetUrl ||\n process.env.ANTHROPIC_ORIGINAL_BASE_URL ||\n env.ANTHROPIC_BASE_URL || process.env.ANTHROPIC_BASE_URL ||\n DEFAULT_ANTHROPIC_BASE_URL;\n\n logger.debug(`Using anthropic base url: ${targetUrl}`);\n\n ccProxyTargetUrl = targetUrl;\n process.env.ANTHROPIC_ORIGINAL_BASE_URL = targetUrl;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { runServer } = require(\"@lmnr-ai/claude-code-proxy\");\n logger.debug(`Running cc-proxy server on port ${port} with target url ${targetUrl}`);\n runServer(targetUrl, port);\n } catch (e) {\n logger.warn(`Unable to start cc-proxy: ${e instanceof Error ? e.message : String(e)}`);\n return null;\n }\n\n const isReady = await waitForPort(port);\n if (!isReady) {\n logger.warn(`cc-proxy failed to start on port ${port}`);\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { stopServer } = require(\"@lmnr-ai/claude-code-proxy\");\n stopServer();\n return null;\n }\n\n const proxyBaseUrl = `http://127.0.0.1:${port}`;\n ccProxyBaseUrl = proxyBaseUrl;\n ccProxyRefCount = 1;\n process.env.ANTHROPIC_BASE_URL = proxyBaseUrl;\n registerProxyShutdown();\n\n logger.info(`Started claude proxy server on: ${proxyBaseUrl}`);\n return proxyBaseUrl;\n } finally {\n // Clear the startup promise when done (success or failure)\n ccProxyStartupPromise = null;\n }\n })();\n\n return ccProxyStartupPromise;\n}\n\n/**\n * Release/stop the claude-code proxy server with reference counting\n */\nexport function releaseProxy(): void {\n if (ccProxyRefCount > 0) {\n ccProxyRefCount--;\n logger.debug(`Decremented proxy ref count to: ${ccProxyRefCount}`);\n }\n\n // Only stop the proxy when ref count reaches 0\n if (ccProxyRefCount === 0 && ccProxyBaseUrl !== null) {\n stopCcProxy();\n logger.debug(\"Stopped claude proxy server (ref count reached 0)\");\n }\n}\n\n/**\n * Force stop the claude-code proxy server, ignoring reference count\n * Used during shutdown to ensure cleanup\n */\nexport function forceReleaseProxy(): void {\n if (ccProxyBaseUrl !== null) {\n stopCcProxy();\n logger.debug(\"Force stopped claude proxy server\");\n }\n}\n\n/**\n * Get the current span context payload for proxy\n */\nfunction getSpanContextPayload(): {\n trace_id: string;\n span_id: string;\n project_api_key: string;\n span_ids_path: string[];\n span_path: string[];\n laminar_url: string;\n} | null {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext());\n if (!currentSpan || !currentSpan.spanContext().isRemote && !currentSpan.isRecording()) {\n return null;\n }\n\n const spanContext = currentSpan.spanContext();\n if (!spanContext || !spanContext.traceId) {\n return null;\n }\n\n let spanIdsPath: string[] = [];\n let spanPath: string[] = [];\n\n // Try to extract span path attributes from readable span\n try {\n const readableSpan = currentSpan as unknown as ReadableSpan;\n if (readableSpan.attributes) {\n const idsPath = readableSpan.attributes[SPAN_IDS_PATH];\n const path = readableSpan.attributes[SPAN_PATH];\n\n if (Array.isArray(idsPath)) {\n spanIdsPath = idsPath as string[];\n }\n if (Array.isArray(path)) {\n spanPath = path as string[];\n }\n }\n } catch {\n // If we can't access attributes, continue with empty arrays\n }\n\n const projectApiKey = Laminar.getProjectApiKey();\n const laminarUrl = Laminar.getHttpUrl();\n\n return {\n trace_id: spanContext.traceId,\n span_id: spanContext.spanId,\n project_api_key: projectApiKey || \"\",\n span_ids_path: spanIdsPath,\n span_path: spanPath,\n laminar_url: laminarUrl || \"https://api.lmnr.ai\",\n };\n}\n\n/**\n * Publish the current span context to the proxy server\n */\nexport function setTraceToProxy(): void {\n const payload = getSpanContextPayload();\n if (!payload) {\n return;\n }\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { setCurrentTrace } = require(\"@lmnr-ai/claude-code-proxy\");\n\n setCurrentTrace({\n traceId: payload.trace_id,\n spanId: payload.span_id,\n projectApiKey: payload.project_api_key,\n spanIdsPath: payload.span_ids_path,\n spanPath: payload.span_path,\n laminarUrl: payload.laminar_url,\n }).catch((error: any) => {\n logger.debug(\n \"Failed to set trace context to proxy: \" +\n (error instanceof Error ? error.message : String(error)),\n );\n }).finally(() => {\n logger.debug(\"Set trace context to proxy\");\n });\n }\n catch (e: any) {\n logger.debug(\n \"Unable to set trace context to proxy: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n}\n\n","import { diag } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { version as SDK_VERSION } from \"../../../../package.json\";\nimport { Laminar } from \"../../../laminar\";\nimport { initializeLogger } from \"../../../utils\";\nimport { SPAN_INPUT, SPAN_OUTPUT } from \"../../tracing/attributes\";\nimport {\n forceReleaseProxy,\n getProxyBaseUrl,\n releaseProxy,\n setTraceToProxy,\n startProxy,\n} from \"./proxy\";\n\n// Re-export forceReleaseProxy for cleanup in Laminar.shutdown()\nexport { forceReleaseProxy };\n\nconst logger = initializeLogger();\n\n/**\n * Create an instrumented version of the claude-agent-sdk query function.\n * This can be used when importing the query function before Laminar initialization.\n *\n * @param originalQuery - The original query function from claude-agent-sdk\n * @returns The instrumented query function\n */\nexport function instrumentClaudeAgentQuery(\n originalQuery: any, // typeof ClaudeAgentSDK.query\n): any { // typeof ClaudeAgentSDK.Query\n return (params: {\n prompt: string | AsyncIterable<any>, // AsyncIterable<ClaudeAgentSDK.SDKUserMessage>\n options?: any, // ClaudeAgentSDK.Options\n }) => {\n const span = Laminar.startSpan({\n name: 'query',\n spanType: 'DEFAULT',\n });\n\n span.setAttribute(\n SPAN_INPUT,\n JSON.stringify({ prompt: typeof params.prompt === 'string' ? params.prompt : '<stream>' }),\n );\n\n const generator = async function* () {\n const collected: any[] = []; // ClaudeAgentSDK.SDKMessage[]\n\n try {\n // Start proxy (uses reference counting for concurrent requests)\n await startProxy({\n env: params.options?.env ?? process.env,\n });\n\n // Publish span context\n const proxyBaseUrl = getProxyBaseUrl();\n logger.debug(`getProxyBaseUrl() result: ${proxyBaseUrl}`);\n if (proxyBaseUrl) {\n Laminar.withSpan(span, () => {\n logger.debug('Setting trace to proxy...');\n setTraceToProxy();\n });\n if (params.options?.env) {\n params.options.env.ANTHROPIC_BASE_URL = proxyBaseUrl;\n }\n } else {\n logger.debug(\"No claude proxy server found. Skipping span context publication.\");\n }\n\n // Call original and wrap the generator\n const originalGenerator = originalQuery(params);\n\n // Yield items and collect\n for await (const message of originalGenerator) {\n collected.push(message);\n yield message;\n }\n } catch (error) {\n Laminar.withSpan(span, () => {\n span.recordException(error as Error);\n });\n throw error;\n } finally {\n // Release proxy (decrements ref count, only stops when count reaches 0)\n releaseProxy();\n span.setAttribute(SPAN_OUTPUT, JSON.stringify(collected));\n span.end();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return generator() as any; // ClaudeAgentSDK.Query\n };\n}\n\n/* eslint-disable\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class ClaudeAgentSDKInstrumentation extends InstrumentationBase {\n constructor() {\n super(\n \"@lmnr/claude-agent-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@anthropic-ai/claude-agent-sdk\",\n ['>=0.1.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n // { query?: typeof ClaudeAgentSDK.query }\n public manuallyInstrument(claudeAgentModule: { query?: any }) {\n // Only instrument the query function if provided\n if (claudeAgentModule.query && typeof claudeAgentModule.query === 'function') {\n this._wrap(\n claudeAgentModule,\n 'query',\n this.patchQuery(),\n );\n } else {\n logger.debug(\n 'query function not found in claudeAgentSDK module, skipping instrumentation',\n );\n }\n }\n\n private patchQuery(): any {\n // casts to ClaudeAgentSDK.query\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (original: Function) => instrumentClaudeAgentQuery(original as any);\n }\n\n private patch(moduleExports: any): any { // typeof ClaudeAgentSDK\n diag.debug('Patching @anthropic-ai/claude-agent-sdk');\n\n // Wrap the query function for automatic instrumentation\n if (moduleExports.query && typeof moduleExports.query === 'function') {\n this._wrap(\n moduleExports,\n 'query',\n this.patchQuery(),\n );\n }\n\n return moduleExports;\n }\n\n private unpatch(moduleExports: any): void { // typeof ClaudeAgentSDK\n diag.debug('Unpatching @anthropic-ai/claude-agent-sdk');\n\n // Unwrap the query function\n this._unwrap(moduleExports, 'query');\n }\n}\n/* eslint-enable\n @typescript-eslint/no-unsafe-function-type\n*/\n\n","import {\n type LaminarSpanContext,\n type SessionRecordingOptions,\n type SpanType,\n type TraceType,\n TracingLevel,\n} from '@lmnr-ai/types';\nimport {\n AttributeValue,\n Context,\n context as contextApi,\n isSpanContextValid,\n type Span,\n TimeInput,\n trace,\n} from '@opentelemetry/api';\nimport { SpanProcessor } from '@opentelemetry/sdk-trace-base';\n\nimport { InitializeOptions, initializeTracing, LaminarSpanProcessor } from './opentelemetry-lib';\nimport { _resetConfiguration } from './opentelemetry-lib/configuration';\nimport {\n forceReleaseProxy as forceReleaseClaudeProxy,\n instrumentClaudeAgentQuery,\n} from './opentelemetry-lib/instrumentation/claude-agent-sdk';\nimport {\n forceFlush,\n getSpanProcessor,\n getTracer,\n patchModules,\n} from './opentelemetry-lib/tracing';\nimport {\n ASSOCIATION_PROPERTIES,\n LaminarAttributes,\n PARENT_SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n SESSION_ID,\n SPAN_TYPE,\n TRACE_TYPE,\n USER_ID,\n} from './opentelemetry-lib/tracing/attributes';\nimport { LaminarContextManager } from './opentelemetry-lib/tracing/context';\nimport { LaminarSpan } from './opentelemetry-lib/tracing/span';\nimport {\n deserializeLaminarSpanContext,\n initializeLogger,\n loadEnv,\n metadataToAttributes,\n type StringUUID,\n tryToOtelSpanContext,\n validateTracingConfig,\n} from './utils';\n\nloadEnv();\n\nconst logger = initializeLogger();\n\ninterface LaminarInitializeProps {\n projectApiKey?: string;\n baseUrl?: string;\n baseHttpUrl?: string;\n httpPort?: number;\n grpcPort?: number;\n instrumentModules?: InitializeOptions[\"instrumentModules\"];\n disableBatch?: boolean;\n traceExportTimeoutMillis?: number;\n logLevel?: \"debug\" | \"info\" | \"warn\" | \"error\";\n maxExportBatchSize?: number;\n forceHttp?: boolean;\n sessionRecordingOptions?: SessionRecordingOptions;\n metadata?: Record<string, any>;\n inheritGlobalContext?: boolean;\n spanProcessor?: SpanProcessor;\n}\n\ntype LaminarAttributesProp = Record<\n typeof LaminarAttributes[keyof typeof LaminarAttributes],\n AttributeValue\n>;\n\nexport class Laminar {\n private static baseHttpUrl: string;\n private static projectApiKey: string;\n private static isInitialized: boolean = false;\n private static globalMetadata: Record<string, any> = {};\n /**\n * Initialize Laminar context across the application.\n * This method must be called before using any other Laminar methods or decorators.\n *\n * @param {LaminarInitializeProps} props - Configuration object.\n * @param {string} props.projectApiKey - Laminar project api key. You can generate one by going\n * to the projects settings page on the Laminar dashboard.\n * If not specified, it will try to read from the LMNR_PROJECT_API_KEY environment variable.\n * @param {string} props.baseUrl - Laminar API url. Do not include the port, use\n * `httpPort` and `grpcPort` instead.\n * If not specified, defaults to https://api.lmnr.ai.\n * @param {string} props.baseHttpUrl - Laminar API http url. If not specified, defaults to\n * baseUrl. Only use this if you want to proxy HTTP requests through a different host.\n * @param {number} props.httpPort - Laminar API http port.\n * If not specified, defaults to 443.\n * @param {number} props.grpcPort - Laminar API grpc port.\n * If not specified, defaults to 8443.\n * @param {InitializeOptions[\"instrumentModules\"]} props.instrumentModules - Record\n * of modules to instrument.\n * If not specified, all auto-instrumentable modules will be instrumented, which include\n * LLM calls (OpenAI, Anthropic, etc), Langchain, VectorDB calls (Pinecone, Qdrant, etc).\n * Pass an empty object {} to disable any kind of automatic instrumentation.\n * If you only want to auto-instrument specific modules, then pass them in the object.\n * @param {boolean} props.disableBatch - Whether to disable batching of spans. Useful for debug\n * environments. If true, spans will be sent immediately using {@link SimpleSpanProcessor}\n * instead of {@link BatchSpanProcessor}.\n * @param {number} props.traceExportTimeoutMillis - Timeout for trace export.\n * Defaults to 30_000 (30 seconds),\n * which is over the default OTLP exporter timeout of 10_000 (10 seconds).\n * @param {string} props.logLevel - OTel log level. Defaults to \"error\".\n * @param {number} props.maxExportBatchSize - Maximum number of spans to export in a single batch.\n * Ignored when `disableBatch` is true.\n * @param {boolean} props.forceHttp - Whether to force HTTP export. Not recommended.\n * @param {SessionRecordingOptions} props.sessionRecordingOptions - Options for browser\n * session recording.\n * Currently supports 'maskInputOptions' to control whether input fields are masked during\n * recording. Defaults to undefined (uses default masking behavior).\n * @param {Record<string, any>} props.metadata - Global metadata to associate with all spans.\n * This metadata will be associated with all spans, and merged with any metadata passed to\n * each span. Must be JSON serializable.\n * @param {boolean} props.inheritGlobalContext - Whether to inherit the global OpenTelemetry\n * context. Defaults to false. This is useful if your library is instrumented with OpenTelemetry\n * and you want Laminar spans to be children of the existing spans.\n * @param {SpanProcessor} props.spanProcessor - The span processor to use. If passed, some of\n * the other options will be ignored.\n *\n * @example\n * import { Laminar } from '@lmnr-ai/lmnr';\n * import { OpenAI } from 'openai';\n * import * as ChainsModule from \"langchain/chains\";\n *\n * // Initialize Laminar while auto-instrumenting Langchain and OpenAI modules.\n * Laminar.initialize({\n * projectApiKey: \"<LMNR_PROJECT_API_KEY>\",\n * instrumentModules: {\n * langchain: {\n * chainsModule: ChainsModule\n * },\n * openAI: OpenAI\n * }\n * });\n *\n * @throws {Error} - If project API key is not set\n */\n public static initialize({\n projectApiKey,\n baseUrl,\n baseHttpUrl,\n httpPort,\n grpcPort,\n instrumentModules,\n disableBatch,\n traceExportTimeoutMillis,\n logLevel,\n maxExportBatchSize,\n forceHttp,\n sessionRecordingOptions,\n metadata,\n inheritGlobalContext,\n spanProcessor,\n }: LaminarInitializeProps = {}) {\n if (this.isInitialized) {\n logger.warn(\"Laminar has already been initialized. Skipping initialization.\");\n return;\n }\n const key = projectApiKey ?? process?.env?.LMNR_PROJECT_API_KEY;\n\n // Validate that either API key or OTEL configuration is present\n validateTracingConfig(key);\n\n this.projectApiKey = key ?? '';\n let url = baseUrl ?? process?.env?.LMNR_BASE_URL;\n\n // Only set default URL if we have an API key (traditional Laminar setup)\n if (key && !url) {\n url = 'https://api.lmnr.ai';\n }\n\n const httpUrl = baseHttpUrl ?? url;\n let port: number | undefined = httpPort;\n\n if (httpUrl) {\n if (!port) {\n const m = httpUrl.match(/:\\d{1,5}$/g);\n port = m\n ? parseInt(m[0].slice(1))\n : 443;\n }\n const httpUrlWithoutSlash = httpUrl.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n this.baseHttpUrl = `${httpUrlWithoutSlash}:${port}`;\n } else {\n this.baseHttpUrl = '';\n }\n\n this.globalMetadata = metadata ?? {};\n LaminarContextManager.setGlobalMetadata(this.globalMetadata);\n if (inheritGlobalContext) {\n LaminarContextManager.inheritGlobalContext = true;\n }\n if (spanProcessor && !(spanProcessor instanceof LaminarSpanProcessor)) {\n logger.warn(\n \"Span processor is not a LaminarSpanProcessor. Some functionality may be impaired.\",\n );\n }\n this.isInitialized = true;\n\n const urlWithoutSlash = url?.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n const httpUrlWithoutSlash = httpUrl?.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n\n initializeTracing({\n baseUrl: urlWithoutSlash,\n baseHttpUrl: httpUrlWithoutSlash,\n apiKey: key,\n port: grpcPort,\n forceHttp,\n httpPort,\n silenceInitializationMessage: true,\n instrumentModules,\n logLevel: logLevel ?? \"error\",\n disableBatch,\n maxExportBatchSize,\n traceExportTimeoutMillis,\n sessionRecordingOptions,\n spanProcessor,\n });\n\n this._initializeContextFromEnv();\n }\n\n /**\n * Initialize Laminar context from the LMNR_SPAN_CONTEXT environment variable.\n * This allows continuing traces across process boundaries.\n * @private\n */\n private static _initializeContextFromEnv(): void {\n const envContext = process?.env?.LMNR_SPAN_CONTEXT;\n if (!envContext) {\n return;\n }\n\n try {\n const laminarContext = deserializeLaminarSpanContext(envContext);\n\n // Convert to OpenTelemetry span context\n const otelSpanContext = tryToOtelSpanContext(laminarContext);\n // If we've parsed the context from the environment variable, it's remote\n otelSpanContext.isRemote = true;\n\n // Set parent path info in the span processor\n const processor = getSpanProcessor();\n if (processor\n && processor instanceof LaminarSpanProcessor\n && laminarContext.spanPath\n && laminarContext.spanIdsPath\n ) {\n processor.setParentPathInfo(\n otelSpanContext.spanId,\n laminarContext.spanPath,\n laminarContext.spanIdsPath,\n );\n }\n\n // Create a non-recording span and push the context\n const baseContext = trace.setSpan(\n LaminarContextManager.getContext(),\n trace.wrapSpanContext(otelSpanContext),\n );\n const ctx = LaminarContextManager.setRawAssociationProperties(laminarContext, baseContext);\n LaminarContextManager.pushContext(ctx);\n\n logger.debug(\"Initialized Laminar parent context from LMNR_SPAN_CONTEXT.\");\n } catch (e) {\n logger.warn(\n \"LMNR_SPAN_CONTEXT is set but could not be used: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n /**\n * Patch modules manually. Use this in setups where {@link Laminar.initialize()}\n * and in particular its `instrumentModules` option is not working, e.g. in\n * Next.js place Laminar initialize in `instrumentation.ts`, and then patch\n * the modules in server components or API routes.\n *\n * Make sure to call this after {@link Laminar.initialize()}.\n *\n * @param {InitializeOptions[\"instrumentModules\"]} modules - Record of modules to instrument.\n */\n public static patch(modules: InitializeOptions[\"instrumentModules\"]) {\n if (!this.isInitialized) {\n logger.warn(\"Laminar must be initialized before patching modules. Skipping patch.\");\n return;\n }\n if (!modules || Object.keys(modules).length === 0) {\n throw new Error(\"Pass at least one module to patch\");\n }\n patchModules(modules);\n }\n\n /**\n * Check if Laminar has been initialized. Utility to make sure other methods\n * are called after initialization.\n */\n public static initialized(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Associates an event with the current span. If the event is created outside\n * of a span context, a new span is created and the event is associated with it.\n *\n * @param {object} options\n * @param {string} options.name - The name of the event.\n * @param {Record<string, AttributeValue>} options.attributes - The attributes of the event.\n * Values must be of a supported type.\n * @param {TimeInput} options.timestamp - The timestamp of the event. If not specified, relies on\n * the underlying OpenTelemetry implementation.\n * If specified as an integer, it must be epoch nanoseconds.\n * @param {string} options.sessionId - The session ID to associate with the event.\n * If not specified, the session ID of the current trace is used.\n * @param {string} options.userId - The user ID to associate with the event. If not specified,\n * the user ID of the current trace is used.\n */\n public static event({\n name,\n attributes,\n timestamp,\n sessionId,\n userId,\n }: {\n name: string,\n attributes?: Record<string, AttributeValue>,\n timestamp?: TimeInput,\n sessionId?: string,\n userId?: string,\n }) {\n if (!Laminar.initialized()) {\n return;\n }\n\n const allAttributes = {\n ...(attributes ?? {}),\n ...(sessionId ? { \"lmnr.event.session_id\": sessionId } : {}),\n ...(userId ? { \"lmnr.event.user_id\": userId } : {}),\n } as Record<string, AttributeValue>;\n\n const currentSpan = Laminar.getCurrentSpan();\n\n if (currentSpan === undefined) {\n const newSpan = Laminar.startSpan({ name });\n newSpan?.addEvent(name, allAttributes, timestamp);\n newSpan?.end();\n return;\n }\n\n currentSpan.addEvent(name, allAttributes, timestamp);\n }\n\n public static getCurrentSpan(\n context?: Context,\n ): LaminarSpan | undefined {\n const currentSpan = trace.getSpan(context ?? LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n if (currentSpan === undefined || !isSpanContextValid(currentSpan.spanContext())) {\n return undefined;\n }\n if (currentSpan instanceof LaminarSpan) {\n return currentSpan;\n }\n return new LaminarSpan(currentSpan);\n }\n\n /**\n * Set attributes for the current span. Useful for manual\n * instrumentation.\n * @param {LaminarAttributesProp} attributes - The attributes to set for the current span.\n *\n * @example\n * import { Laminar as L, observe } from '@lmnr-ai/laminar';\n * await observe({ name: 'mySpanName', spanType: 'LLM' }, async (msg: string) => {\n * const response = await myCustomCallToOpenAI(msg);\n * L.setSpanAttributes({\n * [LaminarAttributes.PROVIDER]: 'openai',\n * [LaminarAttributes.REQUEST_MODEL]: \"requested_model\",\n * [LaminarAttributes.RESPONSE_MODEL]: response.model,\n * [LaminarAttributes.INPUT_TOKEN_COUNT]: response.usage.prompt_tokens,\n * [LaminarAttributes.OUTPUT_TOKEN_COUNT]: response.usage.completion_tokens,\n * })\n * }, userMessage);\n */\n public static setSpanAttributes(\n attributes: LaminarAttributesProp,\n ) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, value);\n }\n }\n }\n\n /**\n * Set the output of the current span. Useful for manual instrumentation.\n * @param output - Output of the span. Will be sent as an attribute, so must\n * be serializable to JSON.\n */\n public static setSpanOutput(output: any) {\n if (output == null) {\n return;\n }\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setOutput(output);\n }\n }\n\n public static setTraceMetadata(metadata: Record<string, any>) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setTraceMetadata(metadata);\n }\n }\n\n public static setTraceSessionId(sessionId: string) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setTraceSessionId(sessionId);\n }\n }\n\n public static setTraceUserId(userId: string) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setTraceUserId(userId);\n }\n }\n\n public static setSpanTags(tags: string[]) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan !== undefined && isSpanContextValid(currentSpan.spanContext())) {\n (currentSpan).setTags(tags);\n }\n }\n\n public static addSpanTags(tags: string[]) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan !== undefined && isSpanContextValid(currentSpan.spanContext())) {\n (currentSpan).addTags(tags);\n }\n }\n\n /**\n * Start a new span, but don't set it as active. Useful for\n * manual instrumentation. If span type is 'LLM', you should report usage\n * manually. See {@link setSpanAttributes} for more information.\n *\n * @param {Object} options\n * @param {string} options.name - name of the span\n * @param {any} options.input - input to the span. Will be sent as an attribute, so must\n * be JSON serializable\n * @param {string} options.spanType - type of the span. Defaults to 'DEFAULT'\n * @param {Context} options.context - raw OpenTelemetry context to bind the span to.\n * @param {string | LaminarSpanContext} options.parentSpanContext - parent span context\n * to bind the span to.\n * @param {string[]} options.tags - tags to associate with the span.\n * @param {string} options.userId - user ID to associate with the span.\n * @param {string} options.sessionId - session ID to associate with the span.\n * @param {Record<string, any>} options.metadata - metadata to associate with the span.\n * @returns The started span.\n *\n * @example\n * import { Laminar, observe } from '@lmnr-ai/lmnr';\n * const foo = async (span: Span) => {\n * await Laminar.withSpan(span, async () => {\n * await observe({ name: 'foo' }, async () => {\n * // Your code here\n * })\n * })\n * };\n * const bar = async (span: Span) => {\n * await Laminar.withSpan(span, async () => {\n * await openai_client.chat.completions.create();\n * })\n * };\n *\n * const parentSpan = Laminar.startSpan({name: \"outer\"});\n * foo(parentSpan);\n * await bar(parentSpan);\n * // IMPORTANT: Don't forget to end the span!\n * parentSpan.end();\n *\n * // Results in:\n * // | outer\n * // | | foo\n * // | | | ...\n * // | | openai.chat\n */\n public static startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n startTime,\n }: {\n name: string,\n input?: any,\n spanType?: SpanType,\n context?: Context,\n parentSpanContext?: string | LaminarSpanContext,\n tags?: string[],\n userId?: string,\n sessionId?: string,\n metadata?: Record<string, any>,\n startTime?: TimeInput,\n }): Span {\n return this._startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n activated: false,\n startTime,\n });\n }\n\n /**\n * Start a new span, and set it as active. It is the caller's responsibility\n * to end the span. It is important to end the span, to avoid context mixing up.\n * We suggest ending the span in a finally block.\n * This is useful for manual instrumentation.\n * If span type is 'LLM', you should report usage manually.\n * See {@link setSpanAttributes} for more information.\n *\n * @param {Object} options\n * @param {string} options.name - name of the span\n * @param {any} options.input - input to the span. Will be sent as an attribute, so must\n * be JSON serializable\n * @param {string} options.spanType - type of the span. Defaults to 'DEFAULT'\n * @param {Context} options.context - raw OpenTelemetry context to bind the span to.\n * @param {string | LaminarSpanContext} options.parentSpanContext - parent span context\n * to bind the span to.\n * @param {string[]} options.tags - tags to associate with the span.\n * @param {string} options.userId - user ID to associate with the span.\n * @param {string} options.sessionId - session ID to associate with the span.\n * @param {Record<string, any>} options.metadata - metadata to associate with the span.\n * @returns The started span.\n *\n * @example\n * import { Laminar, observe } from '@lmnr-ai/lmnr';\n * const foo = async () => {\n * await observe({ name: 'foo' }, async () => {\n * // Your code here\n * })\n * };\n * const bar = async (span: Span) => {\n * await observe({ name: 'bar' }, async () => {\n * await openai_client.chat.completions.create();\n * })\n * };\n *\n * try {\n * const parentSpan = Laminar.startActiveSpan({name: \"outer\"});\n * foo();\n * await bar();\n * } finally {\n * parentSpan.end();\n * }\n *\n * // Results in:\n * // | outer\n * // | | foo\n * // | | | ...\n * // | | bar\n * // | | | openai.chat\n */\n public static startActiveSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n startTime,\n }: {\n name: string,\n input?: any,\n spanType?: SpanType,\n context?: Context,\n parentSpanContext?: string | LaminarSpanContext,\n tags?: string[],\n userId?: string,\n sessionId?: string,\n metadata?: Record<string, any>,\n startTime?: TimeInput,\n }): Span {\n return this._startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n activated: true,\n startTime,\n });\n }\n\n private static _startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n activated,\n startTime,\n }: {\n name: string,\n input?: any,\n spanType?: SpanType,\n context?: Context,\n parentSpanContext?: string | LaminarSpanContext,\n tags?: string[],\n userId?: string,\n sessionId?: string,\n metadata?: Record<string, any>,\n activated?: boolean,\n startTime?: TimeInput,\n }): Span {\n let entityContext = context ?? LaminarContextManager.getContext();\n\n // Extract parent path information before converting to OpenTelemetry span context\n let parentPath: string[] | undefined;\n let parentIdsPath: string[] | undefined;\n let parentMetadata: Record<string, any> | undefined;\n let parentTraceType: TraceType | undefined;\n let parentTracingLevel: TracingLevel | undefined;\n let parentUserId: string | undefined;\n let parentSessionId: string | undefined;\n\n if (parentSpanContext) {\n try {\n const laminarContext = typeof parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(parentSpanContext)\n : parentSpanContext;\n\n parentPath = laminarContext.spanPath;\n parentIdsPath = laminarContext.spanIdsPath;\n parentMetadata = laminarContext.metadata;\n parentTraceType = laminarContext.traceType;\n parentTracingLevel = laminarContext.tracingLevel;\n parentUserId = laminarContext.userId;\n parentSessionId = laminarContext.sessionId;\n\n const spanContext = tryToOtelSpanContext(laminarContext);\n entityContext = trace.setSpan(entityContext, trace.wrapSpanContext(spanContext));\n LaminarContextManager.pushContext(entityContext);\n } catch (e) {\n logger.warn(\"Failed to parse parent span context: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n const tagProperties = tags\n ? { [`${ASSOCIATION_PROPERTIES}.tags`]: Array.from(new Set(tags)) }\n : {};\n const ctxAssociationProperties = LaminarContextManager.getAssociationProperties();\n const userIdValue = userId\n ?? parentUserId\n ?? ctxAssociationProperties.userId;\n const sessionIdValue = sessionId\n ?? parentSessionId\n ?? ctxAssociationProperties.sessionId;\n const traceTypeValue = parentTraceType\n ?? ((spanType as string) === 'EVALUATION' ? 'EVALUATION' : undefined)\n ?? ctxAssociationProperties.traceType;\n const tracingLevelValue = parentTracingLevel\n ?? ctxAssociationProperties.tracingLevel;\n const ctxMetadata = ctxAssociationProperties.metadata;\n\n const userIdProperties = userIdValue ? { [USER_ID]: userIdValue } : {};\n const sessionIdProperties = sessionIdValue ? { [SESSION_ID]: sessionIdValue } : {};\n const traceTypeProperties = traceTypeValue ? { [TRACE_TYPE]: traceTypeValue } : {};\n const tracingLevelProperties = tracingLevelValue\n ? { [`${ASSOCIATION_PROPERTIES}.tracing_level`]: tracingLevelValue }\n : {};\n\n const mergedMetadata = {\n ...this.globalMetadata,\n ...ctxMetadata,\n ...parentMetadata,\n ...metadata,\n };\n\n const metadataProperties = metadataToAttributes(mergedMetadata);\n const attributes = {\n [SPAN_TYPE]: spanType ?? 'DEFAULT',\n ...tagProperties,\n ...userIdProperties,\n ...sessionIdProperties,\n ...metadataProperties,\n ...traceTypeProperties,\n ...tracingLevelProperties,\n ...(parentPath ? { [PARENT_SPAN_PATH]: parentPath } : {}),\n ...(parentIdsPath ? { [PARENT_SPAN_IDS_PATH]: parentIdsPath } : {}),\n };\n\n const span = new LaminarSpan(\n getTracer().startSpan(name, { attributes, startTime }, entityContext),\n );\n span.activated = activated ?? false;\n\n if (input) {\n span.setInput(input);\n }\n if (activated) {\n entityContext = LaminarContextManager.setAssociationProperties(\n span,\n entityContext,\n );\n entityContext = trace.setSpan(entityContext, span);\n LaminarContextManager.pushContext(entityContext);\n }\n return span;\n }\n\n /**\n * A utility wrapper around OpenTelemetry's `context.with()`. Useful for\n * passing spans around in manual instrumentation:\n *\n * @param {Span} span - Parent span to bind the execution to.\n * @param {Function} fn - Function to execute within the span context.\n * @param {boolean} endOnExit - Whether to end the span after the function has\n * executed. Defaults to `false`. If `false`, you MUST manually call\n * `span.end()` at the end of the execution, so that spans are not lost.\n * @returns The result of the function execution.\n *\n * See {@link startSpan} docs for a usage example\n */\n public static withSpan<T>(span: Span, fn: () => T, endOnExit?: boolean): T {\n const ctx = LaminarContextManager.getContext();\n const laminarSpan = new LaminarSpan(span);\n const ctxWithAssociationProperties = LaminarContextManager.setAssociationProperties(\n laminarSpan,\n ctx,\n );\n const context = trace.setSpan(ctxWithAssociationProperties, span);\n return contextApi.with(context, () => LaminarContextManager.runWithIsolatedContext(\n [context],\n () => {\n try {\n const result = fn();\n if (result instanceof Promise) {\n return result.catch((err) => {\n span.recordException(err as Error);\n throw err;\n }).finally(() => {\n if (endOnExit !== undefined && endOnExit) {\n span.end();\n }\n }) as T;\n }\n if (endOnExit !== undefined && endOnExit) {\n span.end();\n }\n return result;\n }\n catch (error) {\n span.recordException(error as Error);\n if (endOnExit !== undefined && endOnExit) {\n span.end();\n }\n throw error;\n }\n },\n ));\n }\n\n public static serializeLaminarSpanContext(span?: Span): string | null {\n const laminarSpanContext = this.getLaminarSpanContext(span);\n if (laminarSpanContext === null) {\n return null;\n }\n return JSON.stringify(laminarSpanContext);\n };\n\n public static getLaminarSpanContext(span?: Span): LaminarSpanContext | null {\n let currentSpan = span ?? Laminar.getCurrentSpan();\n if (currentSpan === undefined || !isSpanContextValid(currentSpan.spanContext())) {\n return null;\n }\n if (!(currentSpan instanceof LaminarSpan)) {\n currentSpan = new LaminarSpan(currentSpan);\n }\n return (currentSpan as LaminarSpan).getLaminarSpanContext();\n }\n\n /**\n * Get the trace id of the current span. Returns null if there is no active span.\n * @returns {StringUUID | null} The trace id of the current span.\n */\n public static getTraceId(): StringUUID | null {\n return this.getLaminarSpanContext()?.traceId ?? null;\n }\n\n public static async flush() {\n if (this.isInitialized) {\n logger.debug(\"Flushing spans\");\n await forceFlush();\n }\n }\n\n public static async shutdown() {\n if (this.isInitialized) {\n logger.debug(\"Shutting down Laminar\");\n await forceFlush();\n // Unlike Python where asynchronous nature of `BatchSpanProcessor.forceFlush()`\n // forces us to actually use `SpanProcessor.shutdown()` and make any\n // further interactions with OTEL API impossible, here we call\n // SpanProcessor.forceFlush() (and safely await it). Thus, users can\n // call `shutdown()` and then `initialize()` again. This is why we\n // reset the keys, contexts, and configuration here.\n this.isInitialized = false;\n _resetConfiguration();\n LaminarContextManager.clearContexts();\n LaminarContextManager.clearActiveSpans();\n\n // Force release the claude-code proxy if it was started (ignores ref count)\n forceReleaseClaudeProxy();\n }\n }\n\n public static getHttpUrl(): string {\n return this.baseHttpUrl;\n }\n\n public static getProjectApiKey(): string {\n return this.projectApiKey;\n }\n\n /**\n * Instrument the claude-agent-sdk query function.\n * Use this when you need to import the query function before calling Laminar.initialize().\n *\n * @param originalQuery - The original query function from @anthropic-ai/claude-agent-sdk\n * @returns The instrumented query function\n *\n * @example\n * ```typescript\n * import { query as originalQuery } from \"@anthropic-ai/claude-agent-sdk\";\n * import { Laminar } from \"@lmnr-ai/lmnr\";\n *\n * Laminar.initialize({ projectApiKey: \"...\" });\n *\n * const query = Laminar.instrumentClaudeAgentQuery(originalQuery);\n *\n * // Now use the instrumented query function\n * const result = query({ prompt: \"Hello!\" });\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n public static wrapClaudeAgentQuery<T extends Function>(originalQuery: T): T {\n return instrumentClaudeAgentQuery(originalQuery as any) as unknown as T;\n }\n}\n","// If you want to update the content, make the following changes to minified source\n// 0. Make sure your editor is not formatting the file on save.\n// 1. Replace every \\ with \\\\ (important: this must come first)\n// 2. Replace every ` with a \\`\n// 3. Replace every ${ with a \\${\nexport const RECORDER = `(function (g, f) {\n if (\"object\" == typeof exports && \"object\" == typeof module) {\n module.exports = f();\n } else if (\"function\" == typeof define && define.amd) {\n define(\"lmnrRrweb\", [], f);\n } else if (\"object\" == typeof exports) {\n exports[\"lmnrRrweb\"] = f();\n } else {\n g[\"lmnrRrweb\"] = f();\n }\n }(this, () => {\nvar exports = {};\nvar module = { exports };\n\"use strict\";var Fo=Object.defineProperty,Uo=Object.defineProperties;var Bo=Object.getOwnPropertyDescriptors;var ft=Object.getOwnPropertySymbols;var zs=Object.prototype.hasOwnProperty,Ws=Object.prototype.propertyIsEnumerable;var Bs=(s,e,t)=>e in s?Fo(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,x=(s,e)=>{for(var t in e||(e={}))zs.call(e,t)&&Bs(s,t,e[t]);if(ft)for(var t of ft(e))Ws.call(e,t)&&Bs(s,t,e[t]);return s},ee=(s,e)=>Uo(s,Bo(e));var xe=(s,e)=>{var t={};for(var r in s)zs.call(s,r)&&e.indexOf(r)<0&&(t[r]=s[r]);if(s!=null&&ft)for(var r of ft(s))e.indexOf(r)<0&&Ws.call(s,r)&&(t[r]=s[r]);return t};Object.defineProperty(exports,Symbol.toStringTag,{value:\"Module\"});var zo=Object.defineProperty,Wo=(s,e,t)=>e in s?zo(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,w=(s,e,t)=>Wo(s,typeof e!=\"symbol\"?e+\"\":e,t),Gs,Go=Object.defineProperty,Vo=(s,e,t)=>e in s?Go(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,Vs=(s,e,t)=>Vo(s,typeof e!=\"symbol\"?e+\"\":e,t),j=(s=>(s[s.Document=0]=\"Document\",s[s.DocumentType=1]=\"DocumentType\",s[s.Element=2]=\"Element\",s[s.Text=3]=\"Text\",s[s.CDATA=4]=\"CDATA\",s[s.Comment=5]=\"Comment\",s))(j||{});const js={Node:[\"childNodes\",\"parentNode\",\"parentElement\",\"textContent\"],ShadowRoot:[\"host\",\"styleSheets\"],Element:[\"shadowRoot\",\"querySelector\",\"querySelectorAll\"],MutationObserver:[]},Hs={Node:[\"contains\",\"getRootNode\"],ShadowRoot:[\"getSelection\"],Element:[],MutationObserver:[\"constructor\"]},pt={},jo=()=>!!globalThis.Zone;function cs(s){if(pt[s])return pt[s];const e=globalThis[s],t=e.prototype,r=s in js?js[s]:void 0,i=!!(r&&r.every(l=>{var a,u;return!!((u=(a=Object.getOwnPropertyDescriptor(t,l))==null?void 0:a.get)!=null&&u.toString().includes(\"[native code]\"))})),n=s in Hs?Hs[s]:void 0,o=!!(n&&n.every(l=>{var a;return typeof t[l]==\"function\"&&((a=t[l])==null?void 0:a.toString().includes(\"[native code]\"))}));if(i&&o&&!jo())return pt[s]=e.prototype,e.prototype;try{const l=document.createElement(\"iframe\");document.body.appendChild(l);const a=l.contentWindow;if(!a)return e.prototype;const u=a[s].prototype;return document.body.removeChild(l),u?pt[s]=u:t}catch(l){return t}}const mr={};function me(s,e,t){var r;const i=\\`\\${s}.\\${String(t)}\\`;if(mr[i])return mr[i].call(e);const n=cs(s),o=(r=Object.getOwnPropertyDescriptor(n,t))==null?void 0:r.get;return o?(mr[i]=o,o.call(e)):e[t]}const gr={};function Wi(s,e,t){const r=\\`\\${s}.\\${String(t)}\\`;if(gr[r])return gr[r].bind(e);const n=cs(s)[t];return typeof n!=\"function\"?e[t]:(gr[r]=n,n.bind(e))}function Ho(s){return me(\"Node\",s,\"childNodes\")}function Yo(s){return me(\"Node\",s,\"parentNode\")}function Zo(s){return me(\"Node\",s,\"parentElement\")}function Jo(s){return me(\"Node\",s,\"textContent\")}function Xo(s,e){return Wi(\"Node\",s,\"contains\")(e)}function Ko(s){return Wi(\"Node\",s,\"getRootNode\")()}function Qo(s){return!s||!(\"host\"in s)?null:me(\"ShadowRoot\",s,\"host\")}function qo(s){return s.styleSheets}function ea(s){return!s||!(\"shadowRoot\"in s)?null:me(\"Element\",s,\"shadowRoot\")}function ta(s,e){return me(\"Element\",s,\"querySelector\")(e)}function ra(s,e){return me(\"Element\",s,\"querySelectorAll\")(e)}function sa(){return cs(\"MutationObserver\").constructor}const Z={childNodes:Ho,parentNode:Yo,parentElement:Zo,textContent:Jo,contains:Xo,getRootNode:Ko,host:Qo,styleSheets:qo,shadowRoot:ea,querySelector:ta,querySelectorAll:ra,mutationObserver:sa};function Gi(s){return s.nodeType===s.ELEMENT_NODE}function je(s){const e=s&&\"host\"in s&&\"mode\"in s&&Z.host(s)||null;return!!(e&&\"shadowRoot\"in e&&Z.shadowRoot(e)===s)}function He(s){return Object.prototype.toString.call(s)===\"[object ShadowRoot]\"}function ia(s){return s.includes(\" background-clip: text;\")&&!s.includes(\" -webkit-background-clip: text;\")&&(s=s.replace(/\\\\sbackground-clip:\\\\s*text;/g,\" -webkit-background-clip: text; background-clip: text;\")),s}function na(s){const{cssText:e}=s;if(e.split('\"').length<3)return e;const t=[\"@import\",\\`url(\\${JSON.stringify(s.href)})\\`];return s.layerName===\"\"?t.push(\"layer\"):s.layerName&&t.push(\\`layer(\\${s.layerName})\\`),s.supportsText&&t.push(\\`supports(\\${s.supportsText})\\`),s.media.length&&t.push(s.media.mediaText),t.join(\" \")+\";\"}function $r(s){try{const e=s.rules||s.cssRules;if(!e)return null;let t=s.href;!t&&s.ownerNode&&s.ownerNode.ownerDocument&&(t=s.ownerNode.ownerDocument.location.href);const r=Array.from(e,i=>Vi(i,t)).join(\"\");return ia(r)}catch(e){return null}}function Vi(s,e){if(aa(s)){let t;try{t=$r(s.styleSheet)||na(s)}catch(r){t=s.cssText}return s.styleSheet.href?Wt(t,s.styleSheet.href):t}else{let t=s.cssText;return la(s)&&s.selectorText.includes(\":\")&&(t=oa(t)),e?Wt(t,e):t}}function oa(s){const e=/(\\\\[(?:[\\\\w-]+)[^\\\\\\\\])(:(?:[\\\\w-]+)\\\\])/gm;return s.replace(e,\"$1\\\\\\\\$2\")}function aa(s){return\"styleSheet\"in s}function la(s){return\"selectorText\"in s}class ji{constructor(){Vs(this,\"idNodeMap\",new Map),Vs(this,\"nodeMetaMap\",new WeakMap)}getId(e){var t;if(!e)return-1;const r=(t=this.getMeta(e))==null?void 0:t.id;return r!=null?r:-1}getNode(e){return this.idNodeMap.get(e)||null}getIds(){return Array.from(this.idNodeMap.keys())}getMeta(e){return this.nodeMetaMap.get(e)||null}removeNodeFromMap(e){const t=this.getId(e);this.idNodeMap.delete(t),e.childNodes&&e.childNodes.forEach(r=>this.removeNodeFromMap(r))}has(e){return this.idNodeMap.has(e)}hasNode(e){return this.nodeMetaMap.has(e)}add(e,t){const r=t.id;this.idNodeMap.set(r,e),this.nodeMetaMap.set(e,t)}replace(e,t){const r=this.getNode(e);if(r){const i=this.nodeMetaMap.get(r);i&&this.nodeMetaMap.set(t,i)}this.idNodeMap.set(e,t)}reset(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap}}function ua(){return new ji}function hs({element:s,maskInputOptions:e,tagName:t,type:r,value:i,maskInputFn:n}){let o=i||\"\";const l=r&&Ce(r);return(e[t.toLowerCase()]||l&&e[l])&&(n?o=n(o,s):o=\"*\".repeat(o.length)),o}function Ce(s){return s.toLowerCase()}const Ys=\"__rrweb_original__\";function ca(s){const e=s.getContext(\"2d\");if(!e)return!0;const t=50;for(let r=0;r<s.width;r+=t)for(let i=0;i<s.height;i+=t){const n=e.getImageData,o=Ys in n?n[Ys]:n;if(new Uint32Array(o.call(e,r,i,Math.min(t,s.width-r),Math.min(t,s.height-i)).data.buffer).some(a=>a!==0))return!1}return!0}function fs(s){const e=s.type;return s.hasAttribute(\"data-rr-is-password\")?\"password\":e?Ce(e):null}function Hi(s,e){var n;let t;try{t=new URL(s,e!=null?e:window.location.href)}catch(o){return null}const r=/\\\\.([0-9a-z]+)(?:$)/i,i=t.pathname.match(r);return(n=i==null?void 0:i[1])!=null?n:null}function ha(s){let e=\"\";return s.indexOf(\"//\")>-1?e=s.split(\"/\").slice(0,3).join(\"/\"):e=s.split(\"/\")[0],e=e.split(\"?\")[0],e}const fa=/url\\\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\\\)/gm,pa=/^(?:[a-z+]+:)?\\\\/\\\\//i,da=/^www\\\\..*/i,ma=/^(data:)([^,]*),(.*)/i;function Wt(s,e){return(s||\"\").replace(fa,(t,r,i,n,o,l)=>{const a=i||o||l,u=r||n||\"\";if(!a)return t;if(pa.test(a)||da.test(a))return\\`url(\\${u}\\${a}\\${u})\\`;if(ma.test(a))return\\`url(\\${u}\\${a}\\${u})\\`;if(a[0]===\"/\")return\\`url(\\${u}\\${ha(e)+a}\\${u})\\`;const c=e.split(\"/\"),h=a.split(\"/\");c.pop();for(const d of h)d!==\".\"&&(d===\"..\"?c.pop():c.push(d));return\\`url(\\${u}\\${c.join(\"/\")}\\${u})\\`})}function yr(s){return s.replace(/(\\\\/\\\\*[^*]*\\\\*\\\\/)|[\\\\s;]/g,\"\")}function ga(s,e){const t=Array.from(e.childNodes),r=[];if(t.length>1&&s&&typeof s==\"string\"){const i=yr(s);for(let n=1;n<t.length;n++)if(t[n].textContent&&typeof t[n].textContent==\"string\"){const o=yr(t[n].textContent);for(let l=3;l<o.length;l++){const a=o.substring(0,l);if(i.split(a).length===2){const u=i.indexOf(a);for(let c=u;c<s.length;c++)if(yr(s.substring(0,c)).length===u){r.push(s.substring(0,c)),s=s.substring(c);break}break}}}}return r.push(s),r}function ya(s,e){return ga(s,e).join(\"/* rr_split */\")}let wa=1;const Sa=new RegExp(\"[^a-z0-9-_:]\"),Ze=-2;function Yi(){return wa++}function ba(s){if(s instanceof HTMLFormElement)return\"form\";const e=Ce(s.tagName);return Sa.test(e)?\"div\":e}let Oe,Zs;const Ca=/^[^ \\\\t\\\\n\\\\r\\\\u000c]+/,va=/^[, \\\\t\\\\n\\\\r\\\\u000c]+/;function Ia(s,e){if(e.trim()===\"\")return e;let t=0;function r(n){let o;const l=n.exec(e.substring(t));return l?(o=l[0],t+=o.length,o):\"\"}const i=[];for(;r(va),!(t>=e.length);){let n=r(Ca);if(n.slice(-1)===\",\")n=Me(s,n.substring(0,n.length-1)),i.push(n);else{let o=\"\";n=Me(s,n);let l=!1;for(;;){const a=e.charAt(t);if(a===\"\"){i.push((n+o).trim());break}else if(l)a===\")\"&&(l=!1);else if(a===\",\"){t+=1,i.push((n+o).trim());break}else a===\"(\"&&(l=!0);o+=a,t+=1}}}return i.join(\", \")}const Js=new WeakMap;function Me(s,e){return!e||e.trim()===\"\"?e:ps(s,e)}function xa(s){return!!(s.tagName===\"svg\"||s.ownerSVGElement)}function ps(s,e){let t=Js.get(s);if(t||(t=s.createElement(\"a\"),Js.set(s,t)),!e)e=\"\";else if(e.startsWith(\"blob:\")||e.startsWith(\"data:\"))return e;return t.setAttribute(\"href\",e),t.href}function Zi(s,e,t,r){return r&&(t===\"src\"||t===\"href\"&&!(e===\"use\"&&r[0]===\"#\")||t===\"xlink:href\"&&r[0]!==\"#\"||t===\"background\"&&(e===\"table\"||e===\"td\"||e===\"th\")?Me(s,r):t===\"srcset\"?Ia(s,r):t===\"style\"?Wt(r,ps(s)):e===\"object\"&&t===\"data\"?Me(s,r):r)}function Ji(s,e,t){return(s===\"video\"||s===\"audio\")&&e===\"autoplay\"}function Oa(s,e,t){try{if(typeof e==\"string\"){if(s.classList.contains(e))return!0}else for(let r=s.classList.length;r--;){const i=s.classList[r];if(e.test(i))return!0}if(t)return s.matches(t)}catch(r){}return!1}function Gt(s,e,t){if(!s)return!1;if(s.nodeType!==s.ELEMENT_NODE)return t?Gt(Z.parentNode(s),e,t):!1;for(let r=s.classList.length;r--;){const i=s.classList[r];if(e.test(i))return!0}return t?Gt(Z.parentNode(s),e,t):!1}function Xi(s,e,t,r){let i;if(Gi(s)){if(i=s,!Z.childNodes(i).length)return!1}else{if(Z.parentElement(s)===null)return!1;i=Z.parentElement(s)}try{if(typeof e==\"string\"){if(r){if(i.closest(\\`.\\${e}\\`))return!0}else if(i.classList.contains(e))return!0}else if(Gt(i,e,r))return!0;if(t){if(r){if(i.closest(t))return!0}else if(i.matches(t))return!0}}catch(n){}return!1}function Ra(s,e,t){const r=s.contentWindow;if(!r)return;let i=!1,n;try{n=r.document.readyState}catch(l){return}if(n!==\"complete\"){const l=setTimeout(()=>{i||(e(),i=!0)},t);s.addEventListener(\"load\",()=>{clearTimeout(l),i=!0,e()});return}const o=\"about:blank\";if(r.location.href!==o||s.src===o||s.src===\"\")return setTimeout(e,0),s.addEventListener(\"load\",e);s.addEventListener(\"load\",e)}function Aa(s,e,t){let r=!1,i;try{i=s.sheet}catch(o){return}if(i)return;const n=setTimeout(()=>{r||(e(),r=!0)},t);s.addEventListener(\"load\",()=>{clearTimeout(n),r=!0,e()})}function Ma(s,e){const{doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:o,inlineStylesheet:l,maskInputOptions:a={},maskTextFn:u,maskInputFn:c,dataURLOptions:h={},inlineImages:d,recordCanvas:m,keepIframeSrcFn:g,newlyAddedElement:p=!1,cssCaptured:f=!1}=e,S=Ea(t,r);switch(s.nodeType){case s.DOCUMENT_NODE:return s.compatMode!==\"CSS1Compat\"?{type:j.Document,childNodes:[],compatMode:s.compatMode}:{type:j.Document,childNodes:[]};case s.DOCUMENT_TYPE_NODE:return{type:j.DocumentType,name:s.name,publicId:s.publicId,systemId:s.systemId,rootId:S};case s.ELEMENT_NODE:return Na(s,{doc:t,blockClass:i,blockSelector:n,inlineStylesheet:l,maskInputOptions:a,maskInputFn:c,dataURLOptions:h,inlineImages:d,recordCanvas:m,keepIframeSrcFn:g,newlyAddedElement:p,rootId:S});case s.TEXT_NODE:return $a(s,{doc:t,needsMask:o,maskTextFn:u,rootId:S,cssCaptured:f});case s.CDATA_SECTION_NODE:return{type:j.CDATA,textContent:\"\",rootId:S};case s.COMMENT_NODE:return{type:j.Comment,textContent:Z.textContent(s)||\"\",rootId:S};default:return!1}}function Ea(s,e){if(!e.hasNode(s))return;const t=e.getId(s);return t===1?void 0:t}function $a(s,e){const{needsMask:t,maskTextFn:r,rootId:i,cssCaptured:n}=e,o=Z.parentNode(s),l=o&&o.tagName;let a=\"\";const u=l===\"STYLE\"?!0:void 0,c=l===\"SCRIPT\"?!0:void 0;return c?a=\"SCRIPT_PLACEHOLDER\":n||(a=Z.textContent(s),u&&a&&(a=Wt(a,ps(e.doc)))),!u&&!c&&a&&t&&(a=r?r(a,Z.parentElement(s)):a.replace(/[\\\\S]/g,\"*\")),{type:j.Text,textContent:a||\"\",rootId:i}}function Na(s,e){const{doc:t,blockClass:r,blockSelector:i,inlineStylesheet:n,maskInputOptions:o={},maskInputFn:l,dataURLOptions:a={},inlineImages:u,recordCanvas:c,keepIframeSrcFn:h,newlyAddedElement:d=!1,rootId:m}=e,g=Oa(s,r,i),p=ba(s);let f={};const S=s.attributes.length;for(let y=0;y<S;y++){const C=s.attributes[y];Ji(p,C.name,C.value)||(f[C.name]=Zi(t,p,Ce(C.name),C.value))}if(p===\"link\"&&n){const y=Array.from(t.styleSheets).find(N=>N.href===s.href);let C=null;y&&(C=$r(y)),C&&(delete f.rel,delete f.href,f._cssText=C)}if(p===\"style\"&&s.sheet){let y=$r(s.sheet);y&&(s.childNodes.length>1&&(y=ya(y,s)),f._cssText=y)}if(p===\"input\"||p===\"textarea\"||p===\"select\"){const y=s.value,C=s.checked;f.type!==\"radio\"&&f.type!==\"checkbox\"&&f.type!==\"submit\"&&f.type!==\"button\"&&y?f.value=hs({element:s,type:fs(s),tagName:p,value:y,maskInputOptions:o,maskInputFn:l}):C&&(f.checked=C)}if(p===\"option\"&&(s.selected&&!o.select?f.selected=!0:delete f.selected),p===\"dialog\"&&s.open&&(f.rr_open_mode=s.matches(\"dialog:modal\")?\"modal\":\"non-modal\"),p===\"canvas\"&&c){if(s.__context===\"2d\")ca(s)||(f.rr_dataURL=s.toDataURL(a.type,a.quality));else if(!(\"__context\"in s)){const y=s.toDataURL(a.type,a.quality),C=t.createElement(\"canvas\");C.width=s.width,C.height=s.height;const N=C.toDataURL(a.type,a.quality);y!==N&&(f.rr_dataURL=y)}}if(p===\"img\"&&u){Oe||(Oe=t.createElement(\"canvas\"),Zs=Oe.getContext(\"2d\"));const y=s,C=y.currentSrc||y.getAttribute(\"src\")||\"<unknown-src>\",N=y.crossOrigin,D=()=>{y.removeEventListener(\"load\",D);try{Oe.width=y.naturalWidth,Oe.height=y.naturalHeight,Zs.drawImage(y,0,0),f.rr_dataURL=Oe.toDataURL(a.type,a.quality)}catch(H){if(y.crossOrigin!==\"anonymous\"){y.crossOrigin=\"anonymous\",y.complete&&y.naturalWidth!==0?D():y.addEventListener(\"load\",D);return}else console.warn(\\`Cannot inline img src=\\${C}! Error: \\${H}\\`)}y.crossOrigin===\"anonymous\"&&(N?f.crossOrigin=N:y.removeAttribute(\"crossorigin\"))};y.complete&&y.naturalWidth!==0?D():y.addEventListener(\"load\",D)}if(p===\"audio\"||p===\"video\"){const y=f;y.rr_mediaState=s.paused?\"paused\":\"played\",y.rr_mediaCurrentTime=s.currentTime,y.rr_mediaPlaybackRate=s.playbackRate,y.rr_mediaMuted=s.muted,y.rr_mediaLoop=s.loop,y.rr_mediaVolume=s.volume}if(d||(s.scrollLeft&&(f.rr_scrollLeft=s.scrollLeft),s.scrollTop&&(f.rr_scrollTop=s.scrollTop)),g){const{width:y,height:C}=s.getBoundingClientRect();f={class:f.class,rr_width:\\`\\${y}px\\`,rr_height:\\`\\${C}px\\`}}p===\"iframe\"&&!h(f.src)&&(s.contentDocument||(f.rr_src=f.src),delete f.src);let b;try{customElements.get(p)&&(b=!0)}catch(y){}return{type:j.Element,tagName:p,attributes:f,childNodes:[],isSVG:xa(s)||void 0,needBlock:g,rootId:m,isCustom:b}}function P(s){return s==null?\"\":s.toLowerCase()}function ka(s,e){if(e.comment&&s.type===j.Comment)return!0;if(s.type===j.Element){if(e.script&&(s.tagName===\"script\"||s.tagName===\"link\"&&(s.attributes.rel===\"preload\"||s.attributes.rel===\"modulepreload\")&&s.attributes.as===\"script\"||s.tagName===\"link\"&&s.attributes.rel===\"prefetch\"&&typeof s.attributes.href==\"string\"&&Hi(s.attributes.href)===\"js\"))return!0;if(e.headFavicon&&(s.tagName===\"link\"&&s.attributes.rel===\"shortcut icon\"||s.tagName===\"meta\"&&(P(s.attributes.name).match(/^msapplication-tile(image|color)$/)||P(s.attributes.name)===\"application-name\"||P(s.attributes.rel)===\"icon\"||P(s.attributes.rel)===\"apple-touch-icon\"||P(s.attributes.rel)===\"shortcut icon\")))return!0;if(s.tagName===\"meta\"){if(e.headMetaDescKeywords&&P(s.attributes.name).match(/^description|keywords$/))return!0;if(e.headMetaSocial&&(P(s.attributes.property).match(/^(og|twitter|fb):/)||P(s.attributes.name).match(/^(og|twitter):/)||P(s.attributes.name)===\"pinterest\"))return!0;if(e.headMetaRobots&&(P(s.attributes.name)===\"robots\"||P(s.attributes.name)===\"googlebot\"||P(s.attributes.name)===\"bingbot\"))return!0;if(e.headMetaHttpEquiv&&s.attributes[\"http-equiv\"]!==void 0)return!0;if(e.headMetaAuthorship&&(P(s.attributes.name)===\"author\"||P(s.attributes.name)===\"generator\"||P(s.attributes.name)===\"framework\"||P(s.attributes.name)===\"publisher\"||P(s.attributes.name)===\"progid\"||P(s.attributes.property).match(/^article:/)||P(s.attributes.property).match(/^product:/)))return!0;if(e.headMetaVerification&&(P(s.attributes.name)===\"google-site-verification\"||P(s.attributes.name)===\"yandex-verification\"||P(s.attributes.name)===\"csrf-token\"||P(s.attributes.name)===\"p:domain_verify\"||P(s.attributes.name)===\"verify-v1\"||P(s.attributes.name)===\"verification\"||P(s.attributes.name)===\"shopify-checkout-api-token\"))return!0}}return!1}function Ee(s,e){const{doc:t,mirror:r,blockClass:i,blockSelector:n,maskTextClass:o,maskTextSelector:l,skipChild:a=!1,inlineStylesheet:u=!0,maskInputOptions:c={},maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g={},inlineImages:p=!1,recordCanvas:f=!1,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y=5e3,onStylesheetLoad:C,stylesheetLoadTimeout:N=5e3,keepIframeSrcFn:D=()=>!1,newlyAddedElement:H=!1,cssCaptured:_=!1}=e;let{needsMask:G}=e,{preserveWhiteSpace:Y=!0}=e;G||(G=Xi(s,o,l,G===void 0));const Q=Ma(s,{doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:G,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,dataURLOptions:g,inlineImages:p,recordCanvas:f,keepIframeSrcFn:D,newlyAddedElement:H,cssCaptured:_});if(!Q)return console.warn(s,\"not serialized\"),null;let oe;r.hasNode(s)?oe=r.getId(s):ka(Q,m)||!Y&&Q.type===j.Text&&!Q.textContent.replace(/^\\\\s+|\\\\s+$/gm,\"\").length?oe=Ze:oe=Yi();const A=Object.assign(Q,{id:oe});if(r.add(s,A),oe===Ze)return null;S&&S(s);let Ue=!a;if(A.type===j.Element){Ue=Ue&&!A.needBlock,delete A.needBlock;const V=Z.shadowRoot(s);V&&He(V)&&(A.isShadowHost=!0)}if((A.type===j.Document||A.type===j.Element)&&Ue){m.headWhitespace&&A.type===j.Element&&A.tagName===\"head\"&&(Y=!1);const V={doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:G,maskTextClass:o,maskTextSelector:l,skipChild:a,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g,inlineImages:p,recordCanvas:f,preserveWhiteSpace:Y,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y,onStylesheetLoad:C,stylesheetLoadTimeout:N,keepIframeSrcFn:D,cssCaptured:!1};if(!(A.type===j.Element&&A.tagName===\"textarea\"&&A.attributes.value!==void 0)){A.type===j.Element&&A.attributes._cssText!==void 0&&typeof A.attributes._cssText==\"string\"&&(V.cssCaptured=!0);for(const ye of Array.from(Z.childNodes(s))){const ae=Ee(ye,V);ae&&A.childNodes.push(ae)}}let q=null;if(Gi(s)&&(q=Z.shadowRoot(s)))for(const ye of Array.from(Z.childNodes(q))){const ae=Ee(ye,V);ae&&(He(q)&&(ae.isShadow=!0),A.childNodes.push(ae))}}const Be=Z.parentNode(s);return Be&&je(Be)&&He(Be)&&(A.isShadow=!0),A.type===j.Element&&A.tagName===\"iframe\"&&Ra(s,()=>{const V=s.contentDocument;if(V&&b){const q=Ee(V,{doc:V,mirror:r,blockClass:i,blockSelector:n,needsMask:G,maskTextClass:o,maskTextSelector:l,skipChild:!1,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g,inlineImages:p,recordCanvas:f,preserveWhiteSpace:Y,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y,onStylesheetLoad:C,stylesheetLoadTimeout:N,keepIframeSrcFn:D});q&&b(s,q)}},y),A.type===j.Element&&A.tagName===\"link\"&&typeof A.attributes.rel==\"string\"&&(A.attributes.rel===\"stylesheet\"||A.attributes.rel===\"preload\"&&typeof A.attributes.href==\"string\"&&Hi(A.attributes.href)===\"css\")&&Aa(s,()=>{if(C){const V=Ee(s,{doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:G,maskTextClass:o,maskTextSelector:l,skipChild:!1,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g,inlineImages:p,recordCanvas:f,preserveWhiteSpace:Y,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y,onStylesheetLoad:C,stylesheetLoadTimeout:N,keepIframeSrcFn:D});V&&C(s,V)}},N),A}function Pa(s,e){const{mirror:t=new ji,blockClass:r=\"rr-block\",blockSelector:i=null,maskTextClass:n=\"rr-mask\",maskTextSelector:o=null,inlineStylesheet:l=!0,inlineImages:a=!1,recordCanvas:u=!1,maskAllInputs:c=!1,maskTextFn:h,maskInputFn:d,slimDOM:m=!1,dataURLOptions:g,preserveWhiteSpace:p,onSerialize:f,onIframeLoad:S,iframeLoadTimeout:b,onStylesheetLoad:y,stylesheetLoadTimeout:C,keepIframeSrcFn:N=()=>!1}=e||{};return Ee(s,{doc:s,mirror:t,blockClass:r,blockSelector:i,maskTextClass:n,maskTextSelector:o,skipChild:!1,inlineStylesheet:l,maskInputOptions:c===!0?{color:!0,date:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0}:c===!1?{password:!0}:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m===!0||m===\"all\"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:m===\"all\",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:m===!1?{}:m,dataURLOptions:g,inlineImages:a,recordCanvas:u,preserveWhiteSpace:p,onSerialize:f,onIframeLoad:S,iframeLoadTimeout:b,onStylesheetLoad:y,stylesheetLoadTimeout:C,keepIframeSrcFn:N,newlyAddedElement:!1})}function Da(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,\"default\")?s.default:s}function La(s){if(s.__esModule)return s;var e=s.default;if(typeof e==\"function\"){var t=function r(){return this instanceof r?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,\"__esModule\",{value:!0}),Object.keys(s).forEach(function(r){var i=Object.getOwnPropertyDescriptor(s,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return s[r]}})}),t}var ds={exports:{}},L=String,Ki=function(){return{isColorSupported:!1,reset:L,bold:L,dim:L,italic:L,underline:L,inverse:L,hidden:L,strikethrough:L,black:L,red:L,green:L,yellow:L,blue:L,magenta:L,cyan:L,white:L,gray:L,bgBlack:L,bgRed:L,bgGreen:L,bgYellow:L,bgBlue:L,bgMagenta:L,bgCyan:L,bgWhite:L}};ds.exports=Ki();ds.exports.createColors=Ki;var Ta=ds.exports;const _a={},Fa=Object.freeze(Object.defineProperty({__proto__:null,default:_a},Symbol.toStringTag,{value:\"Module\"})),ie=La(Fa);let Xs=Ta,Ks=ie,Nr=class Qi extends Error{constructor(e,t,r,i,n,o){super(e),this.name=\"CssSyntaxError\",this.reason=e,n&&(this.file=n),i&&(this.source=i),o&&(this.plugin=o),typeof t!=\"undefined\"&&typeof r!=\"undefined\"&&(typeof t==\"number\"?(this.line=t,this.column=r):(this.line=t.line,this.column=t.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,Qi)}setMessage(){this.message=this.plugin?this.plugin+\": \":\"\",this.message+=this.file?this.file:\"<css input>\",typeof this.line!=\"undefined\"&&(this.message+=\":\"+this.line+\":\"+this.column),this.message+=\": \"+this.reason}showSourceCode(e){if(!this.source)return\"\";let t=this.source;e==null&&(e=Xs.isColorSupported),Ks&&e&&(t=Ks(t));let r=t.split(/\\\\r?\\\\n/),i=Math.max(this.line-3,0),n=Math.min(this.line+2,r.length),o=String(n).length,l,a;if(e){let{bold:u,gray:c,red:h}=Xs.createColors(!0);l=d=>u(h(d)),a=d=>c(d)}else l=a=u=>u;return r.slice(i,n).map((u,c)=>{let h=i+1+c,d=\" \"+(\" \"+h).slice(-o)+\" | \";if(h===this.line){let m=a(d.replace(/\\\\d/g,\" \"))+u.slice(0,this.column-1).replace(/[^\\\\t]/g,\" \");return l(\">\")+a(d)+u+\\`\n \\`+m+l(\"^\")}return\" \"+a(d)+u}).join(\\`\n\\`)}toString(){let e=this.showSourceCode();return e&&(e=\\`\n\n\\`+e+\\`\n\\`),this.name+\": \"+this.message+e}};var ms=Nr;Nr.default=Nr;var it={};it.isClean=Symbol(\"isClean\");it.my=Symbol(\"my\");const Qs={after:\\`\n\\`,beforeClose:\\`\n\\`,beforeComment:\\`\n\\`,beforeDecl:\\`\n\\`,beforeOpen:\" \",beforeRule:\\`\n\\`,colon:\": \",commentLeft:\" \",commentRight:\" \",emptyBody:\"\",indent:\" \",semicolon:!1};function Ua(s){return s[0].toUpperCase()+s.slice(1)}let kr=class{constructor(e){this.builder=e}atrule(e,t){let r=\"@\"+e.name,i=e.params?this.rawValue(e,\"params\"):\"\";if(typeof e.raws.afterName!=\"undefined\"?r+=e.raws.afterName:i&&(r+=\" \"),e.nodes)this.block(e,r+i);else{let n=(e.raws.between||\"\")+(t?\";\":\"\");this.builder(r+i+n,e)}}beforeAfter(e,t){let r;e.type===\"decl\"?r=this.raw(e,null,\"beforeDecl\"):e.type===\"comment\"?r=this.raw(e,null,\"beforeComment\"):t===\"before\"?r=this.raw(e,null,\"beforeRule\"):r=this.raw(e,null,\"beforeClose\");let i=e.parent,n=0;for(;i&&i.type!==\"root\";)n+=1,i=i.parent;if(r.includes(\\`\n\\`)){let o=this.raw(e,null,\"indent\");if(o.length)for(let l=0;l<n;l++)r+=o}return r}block(e,t){let r=this.raw(e,\"between\",\"beforeOpen\");this.builder(t+r+\"{\",e,\"start\");let i;e.nodes&&e.nodes.length?(this.body(e),i=this.raw(e,\"after\")):i=this.raw(e,\"after\",\"emptyBody\"),i&&this.builder(i),this.builder(\"}\",e,\"end\")}body(e){let t=e.nodes.length-1;for(;t>0&&e.nodes[t].type===\"comment\";)t-=1;let r=this.raw(e,\"semicolon\");for(let i=0;i<e.nodes.length;i++){let n=e.nodes[i],o=this.raw(n,\"before\");o&&this.builder(o),this.stringify(n,t!==i||r)}}comment(e){let t=this.raw(e,\"left\",\"commentLeft\"),r=this.raw(e,\"right\",\"commentRight\");this.builder(\"/*\"+t+e.text+r+\"*/\",e)}decl(e,t){let r=this.raw(e,\"between\",\"colon\"),i=e.prop+r+this.rawValue(e,\"value\");e.important&&(i+=e.raws.important||\" !important\"),t&&(i+=\";\"),this.builder(i,e)}document(e){this.body(e)}raw(e,t,r){let i;if(r||(r=t),t&&(i=e.raws[t],typeof i!=\"undefined\"))return i;let n=e.parent;if(r===\"before\"&&(!n||n.type===\"root\"&&n.first===e||n&&n.type===\"document\"))return\"\";if(!n)return Qs[r];let o=e.root();if(o.rawCache||(o.rawCache={}),typeof o.rawCache[r]!=\"undefined\")return o.rawCache[r];if(r===\"before\"||r===\"after\")return this.beforeAfter(e,r);{let l=\"raw\"+Ua(r);this[l]?i=this[l](o,e):o.walk(a=>{if(i=a.raws[t],typeof i!=\"undefined\")return!1})}return typeof i==\"undefined\"&&(i=Qs[r]),o.rawCache[r]=i,i}rawBeforeClose(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length>0&&typeof r.raws.after!=\"undefined\")return t=r.raws.after,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawBeforeComment(e,t){let r;return e.walkComments(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeDecl\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeDecl(e,t){let r;return e.walkDecls(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeRule\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeOpen(e){let t;return e.walk(r=>{if(r.type!==\"decl\"&&(t=r.raws.between,typeof t!=\"undefined\"))return!1}),t}rawBeforeRule(e){let t;return e.walk(r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&typeof r.raws.before!=\"undefined\")return t=r.raws.before,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawColon(e){let t;return e.walkDecls(r=>{if(typeof r.raws.between!=\"undefined\")return t=r.raws.between.replace(/[^\\\\s:]/g,\"\"),!1}),t}rawEmptyBody(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length===0&&(t=r.raws.after,typeof t!=\"undefined\"))return!1}),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk(r=>{let i=r.parent;if(i&&i!==e&&i.parent&&i.parent===e&&typeof r.raws.before!=\"undefined\"){let n=r.raws.before.split(\\`\n\\`);return t=n[n.length-1],t=t.replace(/\\\\S/g,\"\"),!1}}),t}rawSemicolon(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length&&r.last.type===\"decl\"&&(t=r.raws.semicolon,typeof t!=\"undefined\"))return!1}),t}rawValue(e,t){let r=e[t],i=e.raws[t];return i&&i.value===r?i.raw:r}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}rule(e){this.block(e,this.rawValue(e,\"selector\")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,\"end\")}stringify(e,t){if(!this[e.type])throw new Error(\"Unknown AST node type \"+e.type+\". Maybe you need to change PostCSS stringifier.\");this[e.type](e,t)}};var qi=kr;kr.default=kr;let Ba=qi;function Pr(s,e){new Ba(e).stringify(s)}var tr=Pr;Pr.default=Pr;let{isClean:dt,my:za}=it,Wa=ms,Ga=qi,Va=tr;function Dr(s,e){let t=new s.constructor;for(let r in s){if(!Object.prototype.hasOwnProperty.call(s,r)||r===\"proxyCache\")continue;let i=s[r],n=typeof i;r===\"parent\"&&n===\"object\"?e&&(t[r]=e):r===\"source\"?t[r]=i:Array.isArray(i)?t[r]=i.map(o=>Dr(o,t)):(n===\"object\"&&i!==null&&(i=Dr(i)),t[r]=i)}return t}let Lr=class{constructor(e={}){this.raws={},this[dt]=!1,this[za]=!0;for(let t in e)if(t===\"nodes\"){this.nodes=[];for(let r of e[t])typeof r.clone==\"function\"?this.append(r.clone()):this.append(r)}else this[t]=e[t]}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\\\\n\\\\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\\\\n\\\\s{4}at /,\\`$&\\${t.input.from}:\\${t.start.line}:\\${t.start.column}$&\\`)}return e}after(e){return this.parent.insertAfter(this,e),this}assign(e={}){for(let t in e)this[t]=e[t];return this}before(e){return this.parent.insertBefore(this,e),this}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}clone(e={}){let t=Dr(this);for(let r in e)t[r]=e[r];return t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}error(e,t={}){if(this.source){let{end:r,start:i}=this.rangeBy(t);return this.source.input.error(e,{column:i.column,line:i.line},{column:r.column,line:r.line},t)}return new Wa(e)}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:t===\"root\"?()=>e.root().toProxy():e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"prop\"||t===\"value\"||t===\"name\"||t===\"params\"||t===\"important\"||t===\"text\")&&e.markDirty()),!0}}}markDirty(){if(this[dt]){this[dt]=!1;let e=this;for(;e=e.parent;)e[dt]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e,t){let r=this.source.start;if(e.index)r=this.positionInside(e.index,t);else if(e.word){t=this.toString();let i=t.indexOf(e.word);i!==-1&&(r=this.positionInside(i,t))}return r}positionInside(e,t){let r=t||this.toString(),i=this.source.start.column,n=this.source.start.line;for(let o=0;o<e;o++)r[o]===\\`\n\\`?(i=1,n+=1):i+=1;return{column:i,line:n}}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}rangeBy(e){let t={column:this.source.start.column,line:this.source.start.line},r=this.source.end?{column:this.source.end.column+1,line:this.source.end.line}:{column:t.column+1,line:t.line};if(e.word){let i=this.toString(),n=i.indexOf(e.word);n!==-1&&(t=this.positionInside(n,i),r=this.positionInside(n+e.word.length,i))}else e.start?t={column:e.start.column,line:e.start.line}:e.index&&(t=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line}:typeof e.endIndex==\"number\"?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<t.line||r.line===t.line&&r.column<=t.column)&&(r={column:t.column+1,line:t.line}),{end:r,start:t}}raw(e,t){return new Ga().raw(this,e,t)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...e){if(this.parent){let t=this,r=!1;for(let i of e)i===this?r=!0:r?(this.parent.insertAfter(t,i),t=i):this.parent.insertBefore(t,i);r||this.remove()}return this}root(){let e=this;for(;e.parent&&e.parent.type!==\"document\";)e=e.parent;return e}toJSON(e,t){let r={},i=t==null;t=t||new Map;let n=0;for(let o in this){if(!Object.prototype.hasOwnProperty.call(this,o)||o===\"parent\"||o===\"proxyCache\")continue;let l=this[o];if(Array.isArray(l))r[o]=l.map(a=>typeof a==\"object\"&&a.toJSON?a.toJSON(null,t):a);else if(typeof l==\"object\"&&l.toJSON)r[o]=l.toJSON(null,t);else if(o===\"source\"){let a=t.get(l.input);a==null&&(a=n,t.set(l.input,n),n++),r[o]={end:l.end,inputId:a,start:l.start}}else r[o]=l}return i&&(r.inputs=[...t.keys()].map(o=>o.toJSON())),r}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=Va){e.stringify&&(e=e.stringify);let t=\"\";return e(this,r=>{t+=r}),t}warn(e,t,r){let i={node:this};for(let n in r)i[n]=r[n];return e.warn(t,i)}get proxyOf(){return this}};var rr=Lr;Lr.default=Lr;let ja=rr,Tr=class extends ja{constructor(e){e&&typeof e.value!=\"undefined\"&&typeof e.value!=\"string\"&&(e=ee(x({},e),{value:String(e.value)})),super(e),this.type=\"decl\"}get variable(){return this.prop.startsWith(\"--\")||this.prop[0]===\"$\"}};var sr=Tr;Tr.default=Tr;let Ha=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\",Ya=(s,e=21)=>(t=e)=>{let r=\"\",i=t;for(;i--;)r+=s[Math.random()*s.length|0];return r},Za=(s=21)=>{let e=\"\",t=s;for(;t--;)e+=Ha[Math.random()*64|0];return e};var Ja={nanoid:Za,customAlphabet:Ya};let{SourceMapConsumer:qs,SourceMapGenerator:ei}=ie,{existsSync:Xa,readFileSync:Ka}=ie,{dirname:wr,join:Qa}=ie;function qa(s){return Buffer?Buffer.from(s,\"base64\").toString():window.atob(s)}let _r=class{constructor(e,t){if(t.map===!1)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,\"data:\");let r=t.map?t.map.prev:void 0,i=this.loadMap(t.from,r);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=wr(this.mapFile)),i&&(this.text=i)}consumer(){return this.consumerCache||(this.consumerCache=new qs(this.text)),this.consumerCache}decodeInline(e){let t=/^data:application\\\\/json;charset=utf-?8;base64,/,r=/^data:application\\\\/json;base64,/,i=/^data:application\\\\/json;charset=utf-?8,/,n=/^data:application\\\\/json,/;if(i.test(e)||n.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(t.test(e)||r.test(e))return qa(e.substr(RegExp.lastMatch.length));let o=e.match(/data:application\\\\/json;([^,]+),/)[1];throw new Error(\"Unsupported source map encoding \"+o)}getAnnotationURL(e){return e.replace(/^\\\\/\\\\*\\\\s*# sourceMappingURL=/,\"\").trim()}isMap(e){return typeof e!=\"object\"?!1:typeof e.mappings==\"string\"||typeof e._mappings==\"string\"||Array.isArray(e.sections)}loadAnnotation(e){let t=e.match(/\\\\/\\\\*\\\\s*# sourceMappingURL=/gm);if(!t)return;let r=e.lastIndexOf(t.pop()),i=e.indexOf(\"*/\",r);r>-1&&i>-1&&(this.annotation=this.getAnnotationURL(e.substring(r,i)))}loadFile(e){if(this.root=wr(e),Xa(e))return this.mapFile=e,Ka(e,\"utf-8\").toString().trim()}loadMap(e,t){if(t===!1)return!1;if(t){if(typeof t==\"string\")return t;if(typeof t==\"function\"){let r=t(e);if(r){let i=this.loadFile(r);if(!i)throw new Error(\"Unable to load previous source map: \"+r.toString());return i}}else{if(t instanceof qs)return ei.fromSourceMap(t).toString();if(t instanceof ei)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error(\"Unsupported previous source map format: \"+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let r=this.annotation;return e&&(r=Qa(wr(e),r)),this.loadFile(r)}}}startWith(e,t){return e?e.substr(0,t.length)===t:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}};var en=_r;_r.default=_r;let{SourceMapConsumer:el,SourceMapGenerator:tl}=ie,{fileURLToPath:ti,pathToFileURL:mt}=ie,{isAbsolute:Fr,resolve:Ur}=ie,{nanoid:rl}=Ja,Sr=ie,ri=ms,sl=en,br=Symbol(\"fromOffsetCache\"),il=!!(el&&tl),si=!!(Ur&&Fr),Vt=class{constructor(e,t={}){if(e===null||typeof e==\"undefined\"||typeof e==\"object\"&&!e.toString)throw new Error(\\`PostCSS received \\${e} instead of CSS string\\`);if(this.css=e.toString(),this.css[0]===\"\\\\uFEFF\"||this.css[0]===\"\\\\uFFFE\"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!si||/^\\\\w+:\\\\/\\\\//.test(t.from)||Fr(t.from)?this.file=t.from:this.file=Ur(t.from)),si&&il){let r=new sl(this.css,t);if(r.text){this.map=r;let i=r.consumer().file;!this.file&&i&&(this.file=this.mapResolve(i))}}this.file||(this.id=\"<input css \"+rl(6)+\">\"),this.map&&(this.map.file=this.from)}error(e,t,r,i={}){let n,o,l;if(t&&typeof t==\"object\"){let u=t,c=r;if(typeof u.offset==\"number\"){let h=this.fromOffset(u.offset);t=h.line,r=h.col}else t=u.line,r=u.column;if(typeof c.offset==\"number\"){let h=this.fromOffset(c.offset);o=h.line,l=h.col}else o=c.line,l=c.column}else if(!r){let u=this.fromOffset(t);t=u.line,r=u.col}let a=this.origin(t,r,o,l);return a?n=new ri(e,a.endLine===void 0?a.line:{column:a.column,line:a.line},a.endLine===void 0?a.column:{column:a.endColumn,line:a.endLine},a.source,a.file,i.plugin):n=new ri(e,o===void 0?t:{column:r,line:t},o===void 0?r:{column:l,line:o},this.css,this.file,i.plugin),n.input={column:r,endColumn:l,endLine:o,line:t,source:this.css},this.file&&(mt&&(n.input.url=mt(this.file).toString()),n.input.file=this.file),n}fromOffset(e){let t,r;if(this[br])r=this[br];else{let n=this.css.split(\\`\n\\`);r=new Array(n.length);let o=0;for(let l=0,a=n.length;l<a;l++)r[l]=o,o+=n[l].length+1;this[br]=r}t=r[r.length-1];let i=0;if(e>=t)i=r.length-1;else{let n=r.length-2,o;for(;i<n;)if(o=i+(n-i>>1),e<r[o])n=o-1;else if(e>=r[o+1])i=o+1;else{i=o;break}}return{col:e-r[i]+1,line:i+1}}mapResolve(e){return/^\\\\w+:\\\\/\\\\//.test(e)?e:Ur(this.map.consumer().sourceRoot||this.map.root||\".\",e)}origin(e,t,r,i){if(!this.map)return!1;let n=this.map.consumer(),o=n.originalPositionFor({column:t,line:e});if(!o.source)return!1;let l;typeof r==\"number\"&&(l=n.originalPositionFor({column:i,line:r}));let a;Fr(o.source)?a=mt(o.source):a=new URL(o.source,this.map.consumer().sourceRoot||mt(this.map.mapFile));let u={column:o.column,endColumn:l&&l.column,endLine:l&&l.line,line:o.line,url:a.toString()};if(a.protocol===\"file:\")if(ti)u.file=ti(a);else throw new Error(\"file: protocol is not available in this PostCSS build\");let c=n.sourceContentFor(o.source);return c&&(u.source=c),u}toJSON(){let e={};for(let t of[\"hasBOM\",\"css\",\"file\",\"id\"])this[t]!=null&&(e[t]=this[t]);return this.map&&(e.map=x({},this.map),e.map.consumerCache&&(e.map.consumerCache=void 0)),e}get from(){return this.file||this.id}};var ir=Vt;Vt.default=Vt;Sr&&Sr.registerInput&&Sr.registerInput(Vt);let{SourceMapConsumer:tn,SourceMapGenerator:Tt}=ie,{dirname:_t,relative:rn,resolve:sn,sep:nn}=ie,{pathToFileURL:ii}=ie,nl=ir,ol=!!(tn&&Tt),al=!!(_t&&sn&&rn&&nn),ll=class{constructor(e,t,r,i){this.stringify=e,this.mapOpts=r.map||{},this.root=t,this.opts=r,this.css=i,this.originalCSS=i,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;this.isInline()?e=\"data:application/json;base64,\"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation==\"string\"?e=this.mapOpts.annotation:typeof this.mapOpts.annotation==\"function\"?e=this.mapOpts.annotation(this.opts.to,this.root):e=this.outputFile()+\".map\";let t=\\`\n\\`;this.css.includes(\\`\\\\r\n\\`)&&(t=\\`\\\\r\n\\`),this.css+=t+\"/*# sourceMappingURL=\"+e+\" */\"}applyPrevMaps(){for(let e of this.previous()){let t=this.toUrl(this.path(e.file)),r=e.root||_t(e.file),i;this.mapOpts.sourcesContent===!1?(i=new tn(e.text),i.sourcesContent&&(i.sourcesContent=null)):i=e.consumer(),this.map.applySourceMap(i,t,this.toUrl(this.path(r)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1)if(this.root){let e;for(let t=this.root.nodes.length-1;t>=0;t--)e=this.root.nodes[t],e.type===\"comment\"&&e.text.indexOf(\"# sourceMappingURL=\")===0&&this.root.removeChild(t)}else this.css&&(this.css=this.css.replace(/\\\\n*?\\\\/\\\\*#[\\\\S\\\\s]*?\\\\*\\\\/$/gm,\"\"))}generate(){if(this.clearAnnotation(),al&&ol&&this.isMap())return this.generateMap();{let e=\"\";return this.stringify(this.root,t=>{e+=t}),[e]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Tt.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Tt({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css=\"\",this.map=new Tt({file:this.outputFile(),ignoreInvalidMapping:!0});let e=1,t=1,r=\"<no source>\",i={generated:{column:0,line:0},original:{column:0,line:0},source:\"\"},n,o;this.stringify(this.root,(l,a,u)=>{if(this.css+=l,a&&u!==\"end\"&&(i.generated.line=e,i.generated.column=t-1,a.source&&a.source.start?(i.source=this.sourcePath(a),i.original.line=a.source.start.line,i.original.column=a.source.start.column-1,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,this.map.addMapping(i))),n=l.match(/\\\\n/g),n?(e+=n.length,o=l.lastIndexOf(\\`\n\\`),t=l.length-o):t+=l.length,a&&u!==\"start\"){let c=a.parent||{raws:{}};(!(a.type===\"decl\"||a.type===\"atrule\"&&!a.nodes)||a!==c.last||c.raws.semicolon)&&(a.source&&a.source.end?(i.source=this.sourcePath(a),i.original.line=a.source.end.line,i.original.column=a.source.end.column-1,i.generated.line=e,i.generated.column=t-2,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,i.generated.line=e,i.generated.column=t-1,this.map.addMapping(i)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation!=\"undefined\"?this.mapOpts.annotation:this.previous().length?this.previous().some(e=>e.annotation):!0}isInline(){if(typeof this.mapOpts.inline!=\"undefined\")return this.mapOpts.inline;let e=this.mapOpts.annotation;return typeof e!=\"undefined\"&&e!==!0?!1:this.previous().length?this.previous().some(t=>t.inline):!0}isMap(){return typeof this.opts.map!=\"undefined\"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent!=\"undefined\"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(e=>e.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):\"to.css\"}path(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\\\\w+:\\\\/\\\\//.test(e))return e;let t=this.memoizedPaths.get(e);if(t)return t;let r=this.opts.to?_t(this.opts.to):\".\";typeof this.mapOpts.annotation==\"string\"&&(r=_t(sn(r,this.mapOpts.annotation)));let i=rn(r,e);return this.memoizedPaths.set(e,i),i}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(e=>{if(e.source&&e.source.input.map){let t=e.source.input.map;this.previousMaps.includes(t)||this.previousMaps.push(t)}});else{let e=new nl(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk(t=>{if(t.source){let r=t.source.input.from;if(r&&!e[r]){e[r]=!0;let i=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(i,t.source.input.css)}}});else if(this.css){let t=this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\";this.map.setSourceContent(t,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString(\"base64\"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let t=this.memoizedFileURLs.get(e);if(t)return t;if(ii){let r=ii(e).toString();return this.memoizedFileURLs.set(e,r),r}else throw new Error(\"\\`map.absolute\\` option is not available in this PostCSS build\")}toUrl(e){let t=this.memoizedURLs.get(e);if(t)return t;nn===\"\\\\\\\\\"&&(e=e.replace(/\\\\\\\\/g,\"/\"));let r=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,r),r}};var on=ll;let ul=rr,Br=class extends ul{constructor(e){super(e),this.type=\"comment\"}};var nr=Br;Br.default=Br;let{isClean:an,my:ln}=it,un=sr,cn=nr,cl=rr,hn,gs,ys,fn;function pn(s){return s.map(e=>(e.nodes&&(e.nodes=pn(e.nodes)),delete e.source,e))}function dn(s){if(s[an]=!1,s.proxyOf.nodes)for(let e of s.proxyOf.nodes)dn(e)}let fe=class mn extends cl{append(...e){for(let t of e){let r=this.normalize(t,this.last);for(let i of r)this.proxyOf.nodes.push(i)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let t=this.getIterator(),r,i;for(;this.indexes[t]<this.proxyOf.nodes.length&&(r=this.indexes[t],i=e(this.proxyOf.nodes[r],r),i!==!1);)this.indexes[t]+=1;return delete this.indexes[t],i}every(e){return this.nodes.every(e)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:e[t]?t===\"each\"||typeof t==\"string\"&&t.startsWith(\"walk\")?(...r)=>e[t](...r.map(i=>typeof i==\"function\"?(n,o)=>i(n.toProxy(),o):i)):t===\"every\"||t===\"some\"?r=>e[t]((i,...n)=>r(i.toProxy(),...n)):t===\"root\"?()=>e.root().toProxy():t===\"nodes\"?e.nodes.map(r=>r.toProxy()):t===\"first\"||t===\"last\"?e[t].toProxy():e[t]:e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"name\"||t===\"params\"||t===\"selector\")&&e.markDirty()),!0}}}index(e){return typeof e==\"number\"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,t){let r=this.index(e),i=this.normalize(t,this.proxyOf.nodes[r]).reverse();r=this.index(e);for(let o of i)this.proxyOf.nodes.splice(r+1,0,o);let n;for(let o in this.indexes)n=this.indexes[o],r<n&&(this.indexes[o]=n+i.length);return this.markDirty(),this}insertBefore(e,t){let r=this.index(e),i=r===0?\"prepend\":!1,n=this.normalize(t,this.proxyOf.nodes[r],i).reverse();r=this.index(e);for(let l of n)this.proxyOf.nodes.splice(r,0,l);let o;for(let l in this.indexes)o=this.indexes[l],r<=o&&(this.indexes[l]=o+n.length);return this.markDirty(),this}normalize(e,t){if(typeof e==\"string\")e=pn(hn(e).nodes);else if(typeof e==\"undefined\")e=[];else if(Array.isArray(e)){e=e.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type===\"root\"&&this.type!==\"document\"){e=e.nodes.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value==\"undefined\")throw new Error(\"Value field is missed in node creation\");typeof e.value!=\"string\"&&(e.value=String(e.value)),e=[new un(e)]}else if(e.selector)e=[new gs(e)];else if(e.name)e=[new ys(e)];else if(e.text)e=[new cn(e)];else throw new Error(\"Unknown node type in node creation\");return e.map(i=>(i[ln]||mn.rebuild(i),i=i.proxyOf,i.parent&&i.parent.removeChild(i),i[an]&&dn(i),typeof i.raws.before==\"undefined\"&&t&&typeof t.raws.before!=\"undefined\"&&(i.raws.before=t.raws.before.replace(/\\\\S/g,\"\")),i.parent=this.proxyOf,i))}prepend(...e){e=e.reverse();for(let t of e){let r=this.normalize(t,this.first,\"prepend\").reverse();for(let i of r)this.proxyOf.nodes.unshift(i);for(let i in this.indexes)this.indexes[i]=this.indexes[i]+r.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let t;for(let r in this.indexes)t=this.indexes[r],t>=e&&(this.indexes[r]=t-1);return this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls(i=>{t.props&&!t.props.includes(i.prop)||t.fast&&!i.value.includes(t.fast)||(i.value=i.value.replace(e,r))}),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each((t,r)=>{let i;try{i=e(t,r)}catch(n){throw t.addToError(n)}return i!==!1&&t.walk&&(i=t.walk(e)),i})}walkAtRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"atrule\"&&e.test(r.name))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"atrule\"&&r.name===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"atrule\")return t(r,i)}))}walkComments(e){return this.walk((t,r)=>{if(t.type===\"comment\")return e(t,r)})}walkDecls(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"decl\"&&e.test(r.prop))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"decl\"&&r.prop===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"decl\")return t(r,i)}))}walkRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"rule\"&&e.test(r.selector))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"rule\"&&r.selector===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"rule\")return t(r,i)}))}get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}};fe.registerParse=s=>{hn=s};fe.registerRule=s=>{gs=s};fe.registerAtRule=s=>{ys=s};fe.registerRoot=s=>{fn=s};var ve=fe;fe.default=fe;fe.rebuild=s=>{s.type===\"atrule\"?Object.setPrototypeOf(s,ys.prototype):s.type===\"rule\"?Object.setPrototypeOf(s,gs.prototype):s.type===\"decl\"?Object.setPrototypeOf(s,un.prototype):s.type===\"comment\"?Object.setPrototypeOf(s,cn.prototype):s.type===\"root\"&&Object.setPrototypeOf(s,fn.prototype),s[ln]=!0,s.nodes&&s.nodes.forEach(e=>{fe.rebuild(e)})};let hl=ve,gn,yn,Je=class extends hl{constructor(e){super(x({type:\"document\"},e)),this.nodes||(this.nodes=[])}toResult(e={}){return new gn(new yn,this,e).stringify()}};Je.registerLazyResult=s=>{gn=s};Je.registerProcessor=s=>{yn=s};var ws=Je;Je.default=Je;let zr=class{constructor(e,t={}){if(this.type=\"warning\",this.text=e,t.node&&t.node.source){let r=t.node.rangeBy(t);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(let r in t)this[r]=t[r]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+\": \"+this.text:this.text}};var wn=zr;zr.default=zr;let fl=wn,Wr=class{constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new fl(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter(e=>e.type===\"warning\")}get content(){return this.css}};var Ss=Wr;Wr.default=Wr;const Cr=39,ni=34,gt=92,oi=47,yt=10,ze=32,wt=12,St=9,bt=13,pl=91,dl=93,ml=40,gl=41,yl=123,wl=125,Sl=59,bl=42,Cl=58,vl=64,Ct=/[\\\\t\\\\n\\\\f\\\\r \"#'()/;[\\\\\\\\\\\\]{}]/g,vt=/[\\\\t\\\\n\\\\f\\\\r !\"#'():;@[\\\\\\\\\\\\]{}]|\\\\/(?=\\\\*)/g,Il=/.[\\\\r\\\\n\"'(/\\\\\\\\]/,ai=/[\\\\da-f]/i;var xl=function(e,t={}){let r=e.css.valueOf(),i=t.ignoreErrors,n,o,l,a,u,c,h,d,m,g,p=r.length,f=0,S=[],b=[];function y(){return f}function C(_){throw e.error(\"Unclosed \"+_,f)}function N(){return b.length===0&&f>=p}function D(_){if(b.length)return b.pop();if(f>=p)return;let G=_?_.ignoreUnclosed:!1;switch(n=r.charCodeAt(f),n){case yt:case ze:case St:case bt:case wt:{o=f;do o+=1,n=r.charCodeAt(o);while(n===ze||n===yt||n===St||n===bt||n===wt);g=[\"space\",r.slice(f,o)],f=o-1;break}case pl:case dl:case yl:case wl:case Cl:case Sl:case gl:{let Y=String.fromCharCode(n);g=[Y,Y,f];break}case ml:{if(d=S.length?S.pop()[1]:\"\",m=r.charCodeAt(f+1),d===\"url\"&&m!==Cr&&m!==ni&&m!==ze&&m!==yt&&m!==St&&m!==wt&&m!==bt){o=f;do{if(c=!1,o=r.indexOf(\")\",o+1),o===-1)if(i||G){o=f;break}else C(\"bracket\");for(h=o;r.charCodeAt(h-1)===gt;)h-=1,c=!c}while(c);g=[\"brackets\",r.slice(f,o+1),f,o],f=o}else o=r.indexOf(\")\",f+1),a=r.slice(f,o+1),o===-1||Il.test(a)?g=[\"(\",\"(\",f]:(g=[\"brackets\",a,f,o],f=o);break}case Cr:case ni:{l=n===Cr?\"'\":'\"',o=f;do{if(c=!1,o=r.indexOf(l,o+1),o===-1)if(i||G){o=f+1;break}else C(\"string\");for(h=o;r.charCodeAt(h-1)===gt;)h-=1,c=!c}while(c);g=[\"string\",r.slice(f,o+1),f,o],f=o;break}case vl:{Ct.lastIndex=f+1,Ct.test(r),Ct.lastIndex===0?o=r.length-1:o=Ct.lastIndex-2,g=[\"at-word\",r.slice(f,o+1),f,o],f=o;break}case gt:{for(o=f,u=!0;r.charCodeAt(o+1)===gt;)o+=1,u=!u;if(n=r.charCodeAt(o+1),u&&n!==oi&&n!==ze&&n!==yt&&n!==St&&n!==bt&&n!==wt&&(o+=1,ai.test(r.charAt(o)))){for(;ai.test(r.charAt(o+1));)o+=1;r.charCodeAt(o+1)===ze&&(o+=1)}g=[\"word\",r.slice(f,o+1),f,o],f=o;break}default:{n===oi&&r.charCodeAt(f+1)===bl?(o=r.indexOf(\"*/\",f+2)+1,o===0&&(i||G?o=r.length:C(\"comment\")),g=[\"comment\",r.slice(f,o+1),f,o],f=o):(vt.lastIndex=f+1,vt.test(r),vt.lastIndex===0?o=r.length-1:o=vt.lastIndex-2,g=[\"word\",r.slice(f,o+1),f,o],S.push(g),f=o);break}}return f++,g}function H(_){b.push(_)}return{back:H,endOfFile:N,nextToken:D,position:y}};let Sn=ve,jt=class extends Sn{constructor(e){super(e),this.type=\"atrule\"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};var bs=jt;jt.default=jt;Sn.registerAtRule(jt);let bn=ve,Cn,vn,Ne=class extends bn{constructor(e){super(e),this.type=\"root\",this.nodes||(this.nodes=[])}normalize(e,t,r){let i=super.normalize(e);if(t){if(r===\"prepend\")this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let n of i)n.raws.before=t.raws.before}return i}removeChild(e,t){let r=this.index(e);return!t&&r===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}toResult(e={}){return new Cn(new vn,this,e).stringify()}};Ne.registerLazyResult=s=>{Cn=s};Ne.registerProcessor=s=>{vn=s};var nt=Ne;Ne.default=Ne;bn.registerRoot(Ne);let Xe={comma(s){return Xe.split(s,[\",\"],!0)},space(s){let e=[\" \",\\`\n\\`,\"\t\"];return Xe.split(s,e)},split(s,e,t){let r=[],i=\"\",n=!1,o=0,l=!1,a=\"\",u=!1;for(let c of s)u?u=!1:c===\"\\\\\\\\\"?u=!0:l?c===a&&(l=!1):c==='\"'||c===\"'\"?(l=!0,a=c):c===\"(\"?o+=1:c===\")\"?o>0&&(o-=1):o===0&&e.includes(c)&&(n=!0),n?(i!==\"\"&&r.push(i.trim()),i=\"\",n=!1):i+=c;return(t||i!==\"\")&&r.push(i.trim()),r}};var In=Xe;Xe.default=Xe;let xn=ve,Ol=In,Ht=class extends xn{constructor(e){super(e),this.type=\"rule\",this.nodes||(this.nodes=[])}get selectors(){return Ol.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\\\\s*/):null,r=t?t[0]:\",\"+this.raw(\"between\",\"beforeOpen\");this.selector=e.join(r)}};var Cs=Ht;Ht.default=Ht;xn.registerRule(Ht);let Rl=sr,Al=xl,Ml=nr,El=bs,$l=nt,li=Cs;const ui={empty:!0,space:!0};function Nl(s){for(let e=s.length-1;e>=0;e--){let t=s[e],r=t[3]||t[2];if(r)return r}}let kl=class{constructor(e){this.input=e,this.root=new $l,this.current=this.root,this.spaces=\"\",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let t=new El;t.name=e[1].slice(1),t.name===\"\"&&this.unnamedAtrule(t,e),this.init(t,e[2]);let r,i,n,o=!1,l=!1,a=[],u=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),r=e[0],r===\"(\"||r===\"[\"?u.push(r===\"(\"?\")\":\"]\"):r===\"{\"&&u.length>0?u.push(\"}\"):r===u[u.length-1]&&u.pop(),u.length===0)if(r===\";\"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(r===\"{\"){l=!0;break}else if(r===\"}\"){if(a.length>0){for(n=a.length-1,i=a[n];i&&i[0]===\"space\";)i=a[--n];i&&(t.source.end=this.getPosition(i[3]||i[2]),t.source.end.offset++)}this.end(e);break}else a.push(e);else a.push(e);if(this.tokenizer.endOfFile()){o=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(a),a.length?(t.raws.afterName=this.spacesAndCommentsFromStart(a),this.raw(t,\"params\",a),o&&(e=a[a.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between=\"\")):(t.raws.afterName=\"\",t.params=\"\"),l&&(t.nodes=[],this.current=t)}checkMissedSemicolon(e){let t=this.colon(e);if(t===!1)return;let r=0,i;for(let n=t-1;n>=0&&(i=e[n],!(i[0]!==\"space\"&&(r+=1,r===2)));n--);throw this.input.error(\"Missed semicolon\",i[0]===\"word\"?i[3]+1:i[2])}colon(e){let t=0,r,i,n;for(let[o,l]of e.entries()){if(r=l,i=r[0],i===\"(\"&&(t+=1),i===\")\"&&(t-=1),t===0&&i===\":\")if(!n)this.doubleColon(r);else{if(n[0]===\"word\"&&n[1]===\"progid\")continue;return o}n=r}return!1}comment(e){let t=new Ml;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;let r=e[1].slice(2,-2);if(/^\\\\s*$/.test(r))t.text=\"\",t.raws.left=r,t.raws.right=\"\";else{let i=r.match(/^(\\\\s*)([^]*\\\\S)(\\\\s*)$/);t.text=i[2],t.raws.left=i[1],t.raws.right=i[3]}}createTokenizer(){this.tokenizer=Al(this.input)}decl(e,t){let r=new Rl;this.init(r,e[0][2]);let i=e[e.length-1];for(i[0]===\";\"&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(i[3]||i[2]||Nl(e)),r.source.end.offset++;e[0][0]!==\"word\";)e.length===1&&this.unknownWord(e),r.raws.before+=e.shift()[1];for(r.source.start=this.getPosition(e[0][2]),r.prop=\"\";e.length;){let u=e[0][0];if(u===\":\"||u===\"space\"||u===\"comment\")break;r.prop+=e.shift()[1]}r.raws.between=\"\";let n;for(;e.length;)if(n=e.shift(),n[0]===\":\"){r.raws.between+=n[1];break}else n[0]===\"word\"&&/\\\\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1];(r.prop[0]===\"_\"||r.prop[0]===\"*\")&&(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let o=[],l;for(;e.length&&(l=e[0][0],!(l!==\"space\"&&l!==\"comment\"));)o.push(e.shift());this.precheckMissedSemicolon(e);for(let u=e.length-1;u>=0;u--){if(n=e[u],n[1].toLowerCase()===\"!important\"){r.important=!0;let c=this.stringFrom(e,u);c=this.spacesFromEnd(e)+c,c!==\" !important\"&&(r.raws.important=c);break}else if(n[1].toLowerCase()===\"important\"){let c=e.slice(0),h=\"\";for(let d=u;d>0;d--){let m=c[d][0];if(h.trim().indexOf(\"!\")===0&&m!==\"space\")break;h=c.pop()[1]+h}h.trim().indexOf(\"!\")===0&&(r.important=!0,r.raws.important=h,e=c)}if(n[0]!==\"space\"&&n[0]!==\"comment\")break}e.some(u=>u[0]!==\"space\"&&u[0]!==\"comment\")&&(r.raws.between+=o.map(u=>u[1]).join(\"\"),o=[]),this.raw(r,\"value\",o.concat(e),t),r.value.includes(\":\")&&!t&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error(\"Double colon\",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let t=new li;this.init(t,e[2]),t.selector=\"\",t.raws.between=\"\",this.current=t}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.spaces=\"\",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let t=this.current.nodes[this.current.nodes.length-1];t&&t.type===\"rule\"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces=\"\")}}getPosition(e){let t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}}init(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces=\"\",e.type!==\"comment\"&&(this.semicolon=!1)}other(e){let t=!1,r=null,i=!1,n=null,o=[],l=e[1].startsWith(\"--\"),a=[],u=e;for(;u;){if(r=u[0],a.push(u),r===\"(\"||r===\"[\")n||(n=u),o.push(r===\"(\"?\")\":\"]\");else if(l&&i&&r===\"{\")n||(n=u),o.push(\"}\");else if(o.length===0)if(r===\";\")if(i){this.decl(a,l);return}else break;else if(r===\"{\"){this.rule(a);return}else if(r===\"}\"){this.tokenizer.back(a.pop()),t=!0;break}else r===\":\"&&(i=!0);else r===o[o.length-1]&&(o.pop(),o.length===0&&(n=null));u=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),o.length>0&&this.unclosedBracket(n),t&&i){if(!l)for(;a.length&&(u=a[a.length-1][0],!(u!==\"space\"&&u!==\"comment\"));)this.tokenizer.back(a.pop());this.decl(a,l)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case\"space\":this.spaces+=e[1];break;case\";\":this.freeSemicolon(e);break;case\"}\":this.end(e);break;case\"comment\":this.comment(e);break;case\"at-word\":this.atrule(e);break;case\"{\":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}precheckMissedSemicolon(){}raw(e,t,r,i){let n,o,l=r.length,a=\"\",u=!0,c,h;for(let d=0;d<l;d+=1)n=r[d],o=n[0],o===\"space\"&&d===l-1&&!i?u=!1:o===\"comment\"?(h=r[d-1]?r[d-1][0]:\"empty\",c=r[d+1]?r[d+1][0]:\"empty\",!ui[h]&&!ui[c]?a.slice(-1)===\",\"?u=!1:a+=n[1]:u=!1):a+=n[1];if(!u){let d=r.reduce((m,g)=>m+g[1],\"\");e.raws[t]={raw:d,value:a}}e[t]=a}rule(e){e.pop();let t=new li;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,\"selector\",e),this.current=t}spacesAndCommentsFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],!(t!==\"space\"&&t!==\"comment\"));)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let t,r=\"\";for(;e.length&&(t=e[0][0],!(t!==\"space\"&&t!==\"comment\"));)r+=e.shift()[1];return r}spacesFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],t===\"space\");)r=e.pop()[1]+r;return r}stringFrom(e,t){let r=\"\";for(let i=t;i<e.length;i++)r+=e[i][1];return e.splice(t,e.length-t),r}unclosedBlock(){let e=this.current.source.start;throw this.input.error(\"Unclosed block\",e.line,e.column)}unclosedBracket(e){throw this.input.error(\"Unclosed bracket\",{offset:e[2]},{offset:e[2]+1})}unexpectedClose(e){throw this.input.error(\"Unexpected }\",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error(\"Unknown word\",{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unnamedAtrule(e,t){throw this.input.error(\"At-rule without name\",{offset:t[2]},{offset:t[2]+t[1].length})}};var Pl=kl;let Dl=ve,Ll=Pl,Tl=ir;function Yt(s,e){let t=new Tl(s,e),r=new Ll(t);try{r.parse()}catch(i){throw i}return r.root}var vs=Yt;Yt.default=Yt;Dl.registerParse(Yt);let{isClean:ue,my:_l}=it,Fl=on,Ul=tr,Bl=ve,zl=ws;let ci=Ss,Wl=vs,Gl=nt;const Vl={atrule:\"AtRule\",comment:\"Comment\",decl:\"Declaration\",document:\"Document\",root:\"Root\",rule:\"Rule\"},jl={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},Hl={Once:!0,postcssPlugin:!0,prepare:!0},ke=0;function We(s){return typeof s==\"object\"&&typeof s.then==\"function\"}function On(s){let e=!1,t=Vl[s.type];return s.type===\"decl\"?e=s.prop.toLowerCase():s.type===\"atrule\"&&(e=s.name.toLowerCase()),e&&s.append?[t,t+\"-\"+e,ke,t+\"Exit\",t+\"Exit-\"+e]:e?[t,t+\"-\"+e,t+\"Exit\",t+\"Exit-\"+e]:s.append?[t,ke,t+\"Exit\"]:[t,t+\"Exit\"]}function hi(s){let e;return s.type===\"document\"?e=[\"Document\",ke,\"DocumentExit\"]:s.type===\"root\"?e=[\"Root\",ke,\"RootExit\"]:e=On(s),{eventIndex:0,events:e,iterator:0,node:s,visitorIndex:0,visitors:[]}}function Gr(s){return s[ue]=!1,s.nodes&&s.nodes.forEach(e=>Gr(e)),s}let Vr={},Pe=class Rn{constructor(e,t,r){this.stringified=!1,this.processed=!1;let i;if(typeof t==\"object\"&&t!==null&&(t.type===\"root\"||t.type===\"document\"))i=Gr(t);else if(t instanceof Rn||t instanceof ci)i=Gr(t.root),t.map&&(typeof r.map==\"undefined\"&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let n=Wl;r.syntax&&(n=r.syntax.parse),r.parser&&(n=r.parser),n.parse&&(n=n.parse);try{i=n(t,r)}catch(o){this.processed=!0,this.error=o}i&&!i[_l]&&Bl.rebuild(i)}this.result=new ci(e,i,r),this.helpers=ee(x({},Vr),{postcss:Vr,result:this.result}),this.plugins=this.processor.plugins.map(n=>typeof n==\"object\"&&n.prepare?x(x({},n),n.prepare(this.result)):n)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error(\"Use process(css).then(cb) to work with async plugins\")}handleError(e,t){let r=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,e.name===\"CssSyntaxError\"&&!e.plugin?(e.plugin=r.postcssPlugin,e.setMessage()):r.postcssVersion}catch(i){console&&console.error&&console.error(i)}return e}prepareVisitors(){this.listeners={};let e=(t,r,i)=>{this.listeners[r]||(this.listeners[r]=[]),this.listeners[r].push([t,i])};for(let t of this.plugins)if(typeof t==\"object\")for(let r in t){if(!jl[r]&&/^[A-Z]/.test(r))throw new Error(\\`Unknown event \\${r} in \\${t.postcssPlugin}. Try to update PostCSS (\\${this.processor.version} now).\\`);if(!Hl[r])if(typeof t[r]==\"object\")for(let i in t[r])i===\"*\"?e(t,r,t[r][i]):e(t,r+\"-\"+i.toLowerCase(),t[r][i]);else typeof t[r]==\"function\"&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let t=this.plugins[e],r=this.runOnRoot(t);if(We(r))try{await r}catch(i){throw this.handleError(i)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ue];){e[ue]=!0;let t=[hi(e)];for(;t.length>0;){let r=this.visitTick(t);if(We(r))try{await r}catch(i){let n=t[t.length-1].node;throw this.handleError(i,n)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if(e.type===\"document\"){let i=e.nodes.map(n=>r(n,this.helpers));await Promise.all(i)}else await r(e,this.helpers)}catch(i){throw this.handleError(i)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e==\"object\"&&e.Once){if(this.result.root.type===\"document\"){let t=this.result.root.nodes.map(r=>e.Once(r,this.helpers));return We(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}else if(typeof e==\"function\")return e(this.result.root,this.result)}catch(t){throw this.handleError(t)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=Ul;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let i=new Fl(t,this.result.root,this.result.opts).generate();return this.result.css=i[0],this.result.map=i[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let t=this.runOnRoot(e);if(We(t))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ue];)e[ue]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type===\"document\")for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,t){return this.async().then(e,t)}toString(){return this.css}visitSync(e,t){for(let[r,i]of e){this.result.lastPlugin=r;let n;try{n=i(t,this.helpers)}catch(o){throw this.handleError(o,t.proxyOf)}if(t.type!==\"root\"&&t.type!==\"document\"&&!t.parent)return!0;if(We(n))throw this.getAsyncError()}}visitTick(e){let t=e[e.length-1],{node:r,visitors:i}=t;if(r.type!==\"root\"&&r.type!==\"document\"&&!r.parent){e.pop();return}if(i.length>0&&t.visitorIndex<i.length){let[o,l]=i[t.visitorIndex];t.visitorIndex+=1,t.visitorIndex===i.length&&(t.visitors=[],t.visitorIndex=0),this.result.lastPlugin=o;try{return l(r.toProxy(),this.helpers)}catch(a){throw this.handleError(a,r)}}if(t.iterator!==0){let o=t.iterator,l;for(;l=r.nodes[r.indexes[o]];)if(r.indexes[o]+=1,!l[ue]){l[ue]=!0,e.push(hi(l));return}t.iterator=0,delete r.indexes[o]}let n=t.events;for(;t.eventIndex<n.length;){let o=n[t.eventIndex];if(t.eventIndex+=1,o===ke){r.nodes&&r.nodes.length&&(r[ue]=!0,t.iterator=r.getIterator());return}else if(this.listeners[o]){t.visitors=this.listeners[o];return}}e.pop()}walkSync(e){e[ue]=!0;let t=On(e);for(let r of t)if(r===ke)e.nodes&&e.each(i=>{i[ue]||this.walkSync(i)});else{let i=this.listeners[r];if(i&&this.visitSync(i,e.toProxy()))return}}warnings(){return this.sync().warnings()}get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return\"LazyResult\"}};Pe.registerPostcss=s=>{Vr=s};var An=Pe;Pe.default=Pe;Gl.registerLazyResult(Pe);zl.registerLazyResult(Pe);let Yl=on,Zl=tr;let Jl=vs;const Xl=Ss;let jr=class{constructor(e,t,r){t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=r,this._map=void 0;let i,n=Zl;this.result=new Xl(this._processor,i,this._opts),this.result.css=t;let o=this;Object.defineProperty(this.result,\"root\",{get(){return o.root}});let l=new Yl(n,i,this._opts,t);if(l.isMap()){let[a,u]=l.generate();a&&(this.result.css=a),u&&(this.result.map=u)}else l.clearAnnotation(),this.result.css=l.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,t){return this.async().then(e,t)}toString(){return this._css}warnings(){return[]}get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,t=Jl;try{e=t(this._css,this._opts)}catch(r){this.error=r}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return\"NoWorkResult\"}};var Kl=jr;jr.default=jr;let Ql=Kl,ql=An,eu=ws,tu=nt,Ke=class{constructor(e=[]){this.version=\"8.4.38\",this.plugins=this.normalize(e)}normalize(e){let t=[];for(let r of e)if(r.postcss===!0?r=r():r.postcss&&(r=r.postcss),typeof r==\"object\"&&Array.isArray(r.plugins))t=t.concat(r.plugins);else if(typeof r==\"object\"&&r.postcssPlugin)t.push(r);else if(typeof r==\"function\")t.push(r);else if(!(typeof r==\"object\"&&(r.parse||r.stringify)))throw new Error(r+\" is not a PostCSS plugin\");return t}process(e,t={}){return!this.plugins.length&&!t.parser&&!t.stringifier&&!t.syntax?new Ql(this,e,t):new ql(this,e,t)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};var ru=Ke;Ke.default=Ke;tu.registerProcessor(Ke);eu.registerProcessor(Ke);let su=sr,iu=en,nu=nr,ou=bs,au=ir,lu=nt,uu=Cs;function Qe(s,e){if(Array.isArray(s))return s.map(o=>Qe(o));let i=s,{inputs:t}=i,r=xe(i,[\"inputs\"]);if(t){e=[];for(let o of t){let l=ee(x({},o),{__proto__:au.prototype});l.map&&(l.map=ee(x({},l.map),{__proto__:iu.prototype})),e.push(l)}}if(r.nodes&&(r.nodes=s.nodes.map(o=>Qe(o,e))),r.source){let n=r.source,{inputId:o}=n,l=xe(n,[\"inputId\"]);r.source=l,o!=null&&(r.source.input=e[o])}if(r.type===\"root\")return new lu(r);if(r.type===\"decl\")return new su(r);if(r.type===\"rule\")return new uu(r);if(r.type===\"comment\")return new nu(r);if(r.type===\"atrule\")return new ou(r);throw new Error(\"Unknown node type: \"+s.type)}var cu=Qe;Qe.default=Qe;let hu=ms,Mn=sr,fu=An,pu=ve,Is=ru,du=tr,mu=cu,En=ws,gu=wn,$n=nr,Nn=bs,yu=Ss,wu=ir,Su=vs,bu=In,kn=Cs,Pn=nt,Cu=rr;function E(...s){return s.length===1&&Array.isArray(s[0])&&(s=s[0]),new Is(s)}E.plugin=function(e,t){let r=!1;function i(...o){console&&console.warn&&!r&&(r=!0,console.warn(e+\\`: postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\\`),process.env.LANG&&process.env.LANG.startsWith(\"cn\")&&console.warn(e+\\`: \\\\u91CC\\\\u9762 postcss.plugin \\\\u88AB\\\\u5F03\\\\u7528. \\\\u8FC1\\\\u79FB\\\\u6307\\\\u5357:\nhttps://www.w3ctech.com/topic/2226\\`));let l=t(...o);return l.postcssPlugin=e,l.postcssVersion=new Is().version,l}let n;return Object.defineProperty(i,\"postcss\",{get(){return n||(n=i()),n}}),i.process=function(o,l,a){return E([i(a)]).process(o,l)},i};E.stringify=du;E.parse=Su;E.fromJSON=mu;E.list=bu;E.comment=s=>new $n(s);E.atRule=s=>new Nn(s);E.decl=s=>new Mn(s);E.rule=s=>new kn(s);E.root=s=>new Pn(s);E.document=s=>new En(s);E.CssSyntaxError=hu;E.Declaration=Mn;E.Container=pu;E.Processor=Is;E.Document=En;E.Comment=$n;E.Warning=gu;E.AtRule=Nn;E.Result=yu;E.Input=wu;E.Rule=kn;E.Root=Pn;E.Node=Cu;fu.registerPostcss(E);var vu=E;E.default=E;const F=Da(vu);F.stringify;F.fromJSON;F.plugin;F.parse;F.list;F.document;F.comment;F.atRule;F.rule;F.decl;F.root;F.CssSyntaxError;F.Declaration;F.Container;F.Processor;F.Document;F.Comment;F.Warning;F.AtRule;F.Result;F.Input;F.Rule;F.Root;F.Node;var Iu=Object.defineProperty,xu=(s,e,t)=>e in s?Iu(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,te=(s,e,t)=>xu(s,typeof e!=\"symbol\"?e+\"\":e,t);function Ou(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,\"default\")?s.default:s}function Ru(s){if(s.__esModule)return s;var e=s.default;if(typeof e==\"function\"){var t=function r(){return this instanceof r?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,\"__esModule\",{value:!0}),Object.keys(s).forEach(function(r){var i=Object.getOwnPropertyDescriptor(s,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return s[r]}})}),t}var xs={exports:{}},T=String,Dn=function(){return{isColorSupported:!1,reset:T,bold:T,dim:T,italic:T,underline:T,inverse:T,hidden:T,strikethrough:T,black:T,red:T,green:T,yellow:T,blue:T,magenta:T,cyan:T,white:T,gray:T,bgBlack:T,bgRed:T,bgGreen:T,bgYellow:T,bgBlue:T,bgMagenta:T,bgCyan:T,bgWhite:T}};xs.exports=Dn();xs.exports.createColors=Dn;var Au=xs.exports;const Mu={},Eu=Object.freeze(Object.defineProperty({__proto__:null,default:Mu},Symbol.toStringTag,{value:\"Module\"})),ne=Ru(Eu);let fi=Au,pi=ne,Hr=class Ln extends Error{constructor(e,t,r,i,n,o){super(e),this.name=\"CssSyntaxError\",this.reason=e,n&&(this.file=n),i&&(this.source=i),o&&(this.plugin=o),typeof t!=\"undefined\"&&typeof r!=\"undefined\"&&(typeof t==\"number\"?(this.line=t,this.column=r):(this.line=t.line,this.column=t.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,Ln)}setMessage(){this.message=this.plugin?this.plugin+\": \":\"\",this.message+=this.file?this.file:\"<css input>\",typeof this.line!=\"undefined\"&&(this.message+=\":\"+this.line+\":\"+this.column),this.message+=\": \"+this.reason}showSourceCode(e){if(!this.source)return\"\";let t=this.source;e==null&&(e=fi.isColorSupported),pi&&e&&(t=pi(t));let r=t.split(/\\\\r?\\\\n/),i=Math.max(this.line-3,0),n=Math.min(this.line+2,r.length),o=String(n).length,l,a;if(e){let{bold:u,gray:c,red:h}=fi.createColors(!0);l=d=>u(h(d)),a=d=>c(d)}else l=a=u=>u;return r.slice(i,n).map((u,c)=>{let h=i+1+c,d=\" \"+(\" \"+h).slice(-o)+\" | \";if(h===this.line){let m=a(d.replace(/\\\\d/g,\" \"))+u.slice(0,this.column-1).replace(/[^\\\\t]/g,\" \");return l(\">\")+a(d)+u+\\`\n \\`+m+l(\"^\")}return\" \"+a(d)+u}).join(\\`\n\\`)}toString(){let e=this.showSourceCode();return e&&(e=\\`\n\n\\`+e+\\`\n\\`),this.name+\": \"+this.message+e}};var Os=Hr;Hr.default=Hr;var ot={};ot.isClean=Symbol(\"isClean\");ot.my=Symbol(\"my\");const di={after:\\`\n\\`,beforeClose:\\`\n\\`,beforeComment:\\`\n\\`,beforeDecl:\\`\n\\`,beforeOpen:\" \",beforeRule:\\`\n\\`,colon:\": \",commentLeft:\" \",commentRight:\" \",emptyBody:\"\",indent:\" \",semicolon:!1};function $u(s){return s[0].toUpperCase()+s.slice(1)}let Yr=class{constructor(e){this.builder=e}atrule(e,t){let r=\"@\"+e.name,i=e.params?this.rawValue(e,\"params\"):\"\";if(typeof e.raws.afterName!=\"undefined\"?r+=e.raws.afterName:i&&(r+=\" \"),e.nodes)this.block(e,r+i);else{let n=(e.raws.between||\"\")+(t?\";\":\"\");this.builder(r+i+n,e)}}beforeAfter(e,t){let r;e.type===\"decl\"?r=this.raw(e,null,\"beforeDecl\"):e.type===\"comment\"?r=this.raw(e,null,\"beforeComment\"):t===\"before\"?r=this.raw(e,null,\"beforeRule\"):r=this.raw(e,null,\"beforeClose\");let i=e.parent,n=0;for(;i&&i.type!==\"root\";)n+=1,i=i.parent;if(r.includes(\\`\n\\`)){let o=this.raw(e,null,\"indent\");if(o.length)for(let l=0;l<n;l++)r+=o}return r}block(e,t){let r=this.raw(e,\"between\",\"beforeOpen\");this.builder(t+r+\"{\",e,\"start\");let i;e.nodes&&e.nodes.length?(this.body(e),i=this.raw(e,\"after\")):i=this.raw(e,\"after\",\"emptyBody\"),i&&this.builder(i),this.builder(\"}\",e,\"end\")}body(e){let t=e.nodes.length-1;for(;t>0&&e.nodes[t].type===\"comment\";)t-=1;let r=this.raw(e,\"semicolon\");for(let i=0;i<e.nodes.length;i++){let n=e.nodes[i],o=this.raw(n,\"before\");o&&this.builder(o),this.stringify(n,t!==i||r)}}comment(e){let t=this.raw(e,\"left\",\"commentLeft\"),r=this.raw(e,\"right\",\"commentRight\");this.builder(\"/*\"+t+e.text+r+\"*/\",e)}decl(e,t){let r=this.raw(e,\"between\",\"colon\"),i=e.prop+r+this.rawValue(e,\"value\");e.important&&(i+=e.raws.important||\" !important\"),t&&(i+=\";\"),this.builder(i,e)}document(e){this.body(e)}raw(e,t,r){let i;if(r||(r=t),t&&(i=e.raws[t],typeof i!=\"undefined\"))return i;let n=e.parent;if(r===\"before\"&&(!n||n.type===\"root\"&&n.first===e||n&&n.type===\"document\"))return\"\";if(!n)return di[r];let o=e.root();if(o.rawCache||(o.rawCache={}),typeof o.rawCache[r]!=\"undefined\")return o.rawCache[r];if(r===\"before\"||r===\"after\")return this.beforeAfter(e,r);{let l=\"raw\"+$u(r);this[l]?i=this[l](o,e):o.walk(a=>{if(i=a.raws[t],typeof i!=\"undefined\")return!1})}return typeof i==\"undefined\"&&(i=di[r]),o.rawCache[r]=i,i}rawBeforeClose(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length>0&&typeof r.raws.after!=\"undefined\")return t=r.raws.after,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawBeforeComment(e,t){let r;return e.walkComments(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeDecl\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeDecl(e,t){let r;return e.walkDecls(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeRule\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeOpen(e){let t;return e.walk(r=>{if(r.type!==\"decl\"&&(t=r.raws.between,typeof t!=\"undefined\"))return!1}),t}rawBeforeRule(e){let t;return e.walk(r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&typeof r.raws.before!=\"undefined\")return t=r.raws.before,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawColon(e){let t;return e.walkDecls(r=>{if(typeof r.raws.between!=\"undefined\")return t=r.raws.between.replace(/[^\\\\s:]/g,\"\"),!1}),t}rawEmptyBody(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length===0&&(t=r.raws.after,typeof t!=\"undefined\"))return!1}),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk(r=>{let i=r.parent;if(i&&i!==e&&i.parent&&i.parent===e&&typeof r.raws.before!=\"undefined\"){let n=r.raws.before.split(\\`\n\\`);return t=n[n.length-1],t=t.replace(/\\\\S/g,\"\"),!1}}),t}rawSemicolon(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length&&r.last.type===\"decl\"&&(t=r.raws.semicolon,typeof t!=\"undefined\"))return!1}),t}rawValue(e,t){let r=e[t],i=e.raws[t];return i&&i.value===r?i.raw:r}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}rule(e){this.block(e,this.rawValue(e,\"selector\")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,\"end\")}stringify(e,t){if(!this[e.type])throw new Error(\"Unknown AST node type \"+e.type+\". Maybe you need to change PostCSS stringifier.\");this[e.type](e,t)}};var Tn=Yr;Yr.default=Yr;let Nu=Tn;function Zr(s,e){new Nu(e).stringify(s)}var or=Zr;Zr.default=Zr;let{isClean:It,my:ku}=ot,Pu=Os,Du=Tn,Lu=or;function Jr(s,e){let t=new s.constructor;for(let r in s){if(!Object.prototype.hasOwnProperty.call(s,r)||r===\"proxyCache\")continue;let i=s[r],n=typeof i;r===\"parent\"&&n===\"object\"?e&&(t[r]=e):r===\"source\"?t[r]=i:Array.isArray(i)?t[r]=i.map(o=>Jr(o,t)):(n===\"object\"&&i!==null&&(i=Jr(i)),t[r]=i)}return t}let Xr=class{constructor(e={}){this.raws={},this[It]=!1,this[ku]=!0;for(let t in e)if(t===\"nodes\"){this.nodes=[];for(let r of e[t])typeof r.clone==\"function\"?this.append(r.clone()):this.append(r)}else this[t]=e[t]}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\\\\n\\\\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\\\\n\\\\s{4}at /,\\`$&\\${t.input.from}:\\${t.start.line}:\\${t.start.column}$&\\`)}return e}after(e){return this.parent.insertAfter(this,e),this}assign(e={}){for(let t in e)this[t]=e[t];return this}before(e){return this.parent.insertBefore(this,e),this}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}clone(e={}){let t=Jr(this);for(let r in e)t[r]=e[r];return t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}error(e,t={}){if(this.source){let{end:r,start:i}=this.rangeBy(t);return this.source.input.error(e,{column:i.column,line:i.line},{column:r.column,line:r.line},t)}return new Pu(e)}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:t===\"root\"?()=>e.root().toProxy():e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"prop\"||t===\"value\"||t===\"name\"||t===\"params\"||t===\"important\"||t===\"text\")&&e.markDirty()),!0}}}markDirty(){if(this[It]){this[It]=!1;let e=this;for(;e=e.parent;)e[It]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e,t){let r=this.source.start;if(e.index)r=this.positionInside(e.index,t);else if(e.word){t=this.toString();let i=t.indexOf(e.word);i!==-1&&(r=this.positionInside(i,t))}return r}positionInside(e,t){let r=t||this.toString(),i=this.source.start.column,n=this.source.start.line;for(let o=0;o<e;o++)r[o]===\\`\n\\`?(i=1,n+=1):i+=1;return{column:i,line:n}}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}rangeBy(e){let t={column:this.source.start.column,line:this.source.start.line},r=this.source.end?{column:this.source.end.column+1,line:this.source.end.line}:{column:t.column+1,line:t.line};if(e.word){let i=this.toString(),n=i.indexOf(e.word);n!==-1&&(t=this.positionInside(n,i),r=this.positionInside(n+e.word.length,i))}else e.start?t={column:e.start.column,line:e.start.line}:e.index&&(t=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line}:typeof e.endIndex==\"number\"?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<t.line||r.line===t.line&&r.column<=t.column)&&(r={column:t.column+1,line:t.line}),{end:r,start:t}}raw(e,t){return new Du().raw(this,e,t)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...e){if(this.parent){let t=this,r=!1;for(let i of e)i===this?r=!0:r?(this.parent.insertAfter(t,i),t=i):this.parent.insertBefore(t,i);r||this.remove()}return this}root(){let e=this;for(;e.parent&&e.parent.type!==\"document\";)e=e.parent;return e}toJSON(e,t){let r={},i=t==null;t=t||new Map;let n=0;for(let o in this){if(!Object.prototype.hasOwnProperty.call(this,o)||o===\"parent\"||o===\"proxyCache\")continue;let l=this[o];if(Array.isArray(l))r[o]=l.map(a=>typeof a==\"object\"&&a.toJSON?a.toJSON(null,t):a);else if(typeof l==\"object\"&&l.toJSON)r[o]=l.toJSON(null,t);else if(o===\"source\"){let a=t.get(l.input);a==null&&(a=n,t.set(l.input,n),n++),r[o]={end:l.end,inputId:a,start:l.start}}else r[o]=l}return i&&(r.inputs=[...t.keys()].map(o=>o.toJSON())),r}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=Lu){e.stringify&&(e=e.stringify);let t=\"\";return e(this,r=>{t+=r}),t}warn(e,t,r){let i={node:this};for(let n in r)i[n]=r[n];return e.warn(t,i)}get proxyOf(){return this}};var ar=Xr;Xr.default=Xr;let Tu=ar,Kr=class extends Tu{constructor(e){e&&typeof e.value!=\"undefined\"&&typeof e.value!=\"string\"&&(e=ee(x({},e),{value:String(e.value)})),super(e),this.type=\"decl\"}get variable(){return this.prop.startsWith(\"--\")||this.prop[0]===\"$\"}};var lr=Kr;Kr.default=Kr;let _u=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\",Fu=(s,e=21)=>(t=e)=>{let r=\"\",i=t;for(;i--;)r+=s[Math.random()*s.length|0];return r},Uu=(s=21)=>{let e=\"\",t=s;for(;t--;)e+=_u[Math.random()*64|0];return e};var Bu={nanoid:Uu,customAlphabet:Fu};let{SourceMapConsumer:mi,SourceMapGenerator:gi}=ne,{existsSync:zu,readFileSync:Wu}=ne,{dirname:vr,join:Gu}=ne;function Vu(s){return Buffer?Buffer.from(s,\"base64\").toString():window.atob(s)}let Qr=class{constructor(e,t){if(t.map===!1)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,\"data:\");let r=t.map?t.map.prev:void 0,i=this.loadMap(t.from,r);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=vr(this.mapFile)),i&&(this.text=i)}consumer(){return this.consumerCache||(this.consumerCache=new mi(this.text)),this.consumerCache}decodeInline(e){let t=/^data:application\\\\/json;charset=utf-?8;base64,/,r=/^data:application\\\\/json;base64,/,i=/^data:application\\\\/json;charset=utf-?8,/,n=/^data:application\\\\/json,/;if(i.test(e)||n.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(t.test(e)||r.test(e))return Vu(e.substr(RegExp.lastMatch.length));let o=e.match(/data:application\\\\/json;([^,]+),/)[1];throw new Error(\"Unsupported source map encoding \"+o)}getAnnotationURL(e){return e.replace(/^\\\\/\\\\*\\\\s*# sourceMappingURL=/,\"\").trim()}isMap(e){return typeof e!=\"object\"?!1:typeof e.mappings==\"string\"||typeof e._mappings==\"string\"||Array.isArray(e.sections)}loadAnnotation(e){let t=e.match(/\\\\/\\\\*\\\\s*# sourceMappingURL=/gm);if(!t)return;let r=e.lastIndexOf(t.pop()),i=e.indexOf(\"*/\",r);r>-1&&i>-1&&(this.annotation=this.getAnnotationURL(e.substring(r,i)))}loadFile(e){if(this.root=vr(e),zu(e))return this.mapFile=e,Wu(e,\"utf-8\").toString().trim()}loadMap(e,t){if(t===!1)return!1;if(t){if(typeof t==\"string\")return t;if(typeof t==\"function\"){let r=t(e);if(r){let i=this.loadFile(r);if(!i)throw new Error(\"Unable to load previous source map: \"+r.toString());return i}}else{if(t instanceof mi)return gi.fromSourceMap(t).toString();if(t instanceof gi)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error(\"Unsupported previous source map format: \"+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let r=this.annotation;return e&&(r=Gu(vr(e),r)),this.loadFile(r)}}}startWith(e,t){return e?e.substr(0,t.length)===t:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}};var _n=Qr;Qr.default=Qr;let{SourceMapConsumer:ju,SourceMapGenerator:Hu}=ne,{fileURLToPath:yi,pathToFileURL:xt}=ne,{isAbsolute:qr,resolve:es}=ne,{nanoid:Yu}=Bu,Ir=ne,wi=Os,Zu=_n,xr=Symbol(\"fromOffsetCache\"),Ju=!!(ju&&Hu),Si=!!(es&&qr),Zt=class{constructor(e,t={}){if(e===null||typeof e==\"undefined\"||typeof e==\"object\"&&!e.toString)throw new Error(\\`PostCSS received \\${e} instead of CSS string\\`);if(this.css=e.toString(),this.css[0]===\"\\\\uFEFF\"||this.css[0]===\"\\\\uFFFE\"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!Si||/^\\\\w+:\\\\/\\\\//.test(t.from)||qr(t.from)?this.file=t.from:this.file=es(t.from)),Si&&Ju){let r=new Zu(this.css,t);if(r.text){this.map=r;let i=r.consumer().file;!this.file&&i&&(this.file=this.mapResolve(i))}}this.file||(this.id=\"<input css \"+Yu(6)+\">\"),this.map&&(this.map.file=this.from)}error(e,t,r,i={}){let n,o,l;if(t&&typeof t==\"object\"){let u=t,c=r;if(typeof u.offset==\"number\"){let h=this.fromOffset(u.offset);t=h.line,r=h.col}else t=u.line,r=u.column;if(typeof c.offset==\"number\"){let h=this.fromOffset(c.offset);o=h.line,l=h.col}else o=c.line,l=c.column}else if(!r){let u=this.fromOffset(t);t=u.line,r=u.col}let a=this.origin(t,r,o,l);return a?n=new wi(e,a.endLine===void 0?a.line:{column:a.column,line:a.line},a.endLine===void 0?a.column:{column:a.endColumn,line:a.endLine},a.source,a.file,i.plugin):n=new wi(e,o===void 0?t:{column:r,line:t},o===void 0?r:{column:l,line:o},this.css,this.file,i.plugin),n.input={column:r,endColumn:l,endLine:o,line:t,source:this.css},this.file&&(xt&&(n.input.url=xt(this.file).toString()),n.input.file=this.file),n}fromOffset(e){let t,r;if(this[xr])r=this[xr];else{let n=this.css.split(\\`\n\\`);r=new Array(n.length);let o=0;for(let l=0,a=n.length;l<a;l++)r[l]=o,o+=n[l].length+1;this[xr]=r}t=r[r.length-1];let i=0;if(e>=t)i=r.length-1;else{let n=r.length-2,o;for(;i<n;)if(o=i+(n-i>>1),e<r[o])n=o-1;else if(e>=r[o+1])i=o+1;else{i=o;break}}return{col:e-r[i]+1,line:i+1}}mapResolve(e){return/^\\\\w+:\\\\/\\\\//.test(e)?e:es(this.map.consumer().sourceRoot||this.map.root||\".\",e)}origin(e,t,r,i){if(!this.map)return!1;let n=this.map.consumer(),o=n.originalPositionFor({column:t,line:e});if(!o.source)return!1;let l;typeof r==\"number\"&&(l=n.originalPositionFor({column:i,line:r}));let a;qr(o.source)?a=xt(o.source):a=new URL(o.source,this.map.consumer().sourceRoot||xt(this.map.mapFile));let u={column:o.column,endColumn:l&&l.column,endLine:l&&l.line,line:o.line,url:a.toString()};if(a.protocol===\"file:\")if(yi)u.file=yi(a);else throw new Error(\"file: protocol is not available in this PostCSS build\");let c=n.sourceContentFor(o.source);return c&&(u.source=c),u}toJSON(){let e={};for(let t of[\"hasBOM\",\"css\",\"file\",\"id\"])this[t]!=null&&(e[t]=this[t]);return this.map&&(e.map=x({},this.map),e.map.consumerCache&&(e.map.consumerCache=void 0)),e}get from(){return this.file||this.id}};var ur=Zt;Zt.default=Zt;Ir&&Ir.registerInput&&Ir.registerInput(Zt);let{SourceMapConsumer:Fn,SourceMapGenerator:Ft}=ne,{dirname:Ut,relative:Un,resolve:Bn,sep:zn}=ne,{pathToFileURL:bi}=ne,Xu=ur,Ku=!!(Fn&&Ft),Qu=!!(Ut&&Bn&&Un&&zn),qu=class{constructor(e,t,r,i){this.stringify=e,this.mapOpts=r.map||{},this.root=t,this.opts=r,this.css=i,this.originalCSS=i,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;this.isInline()?e=\"data:application/json;base64,\"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation==\"string\"?e=this.mapOpts.annotation:typeof this.mapOpts.annotation==\"function\"?e=this.mapOpts.annotation(this.opts.to,this.root):e=this.outputFile()+\".map\";let t=\\`\n\\`;this.css.includes(\\`\\\\r\n\\`)&&(t=\\`\\\\r\n\\`),this.css+=t+\"/*# sourceMappingURL=\"+e+\" */\"}applyPrevMaps(){for(let e of this.previous()){let t=this.toUrl(this.path(e.file)),r=e.root||Ut(e.file),i;this.mapOpts.sourcesContent===!1?(i=new Fn(e.text),i.sourcesContent&&(i.sourcesContent=null)):i=e.consumer(),this.map.applySourceMap(i,t,this.toUrl(this.path(r)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1)if(this.root){let e;for(let t=this.root.nodes.length-1;t>=0;t--)e=this.root.nodes[t],e.type===\"comment\"&&e.text.indexOf(\"# sourceMappingURL=\")===0&&this.root.removeChild(t)}else this.css&&(this.css=this.css.replace(/\\\\n*?\\\\/\\\\*#[\\\\S\\\\s]*?\\\\*\\\\/$/gm,\"\"))}generate(){if(this.clearAnnotation(),Qu&&Ku&&this.isMap())return this.generateMap();{let e=\"\";return this.stringify(this.root,t=>{e+=t}),[e]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Ft.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Ft({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css=\"\",this.map=new Ft({file:this.outputFile(),ignoreInvalidMapping:!0});let e=1,t=1,r=\"<no source>\",i={generated:{column:0,line:0},original:{column:0,line:0},source:\"\"},n,o;this.stringify(this.root,(l,a,u)=>{if(this.css+=l,a&&u!==\"end\"&&(i.generated.line=e,i.generated.column=t-1,a.source&&a.source.start?(i.source=this.sourcePath(a),i.original.line=a.source.start.line,i.original.column=a.source.start.column-1,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,this.map.addMapping(i))),n=l.match(/\\\\n/g),n?(e+=n.length,o=l.lastIndexOf(\\`\n\\`),t=l.length-o):t+=l.length,a&&u!==\"start\"){let c=a.parent||{raws:{}};(!(a.type===\"decl\"||a.type===\"atrule\"&&!a.nodes)||a!==c.last||c.raws.semicolon)&&(a.source&&a.source.end?(i.source=this.sourcePath(a),i.original.line=a.source.end.line,i.original.column=a.source.end.column-1,i.generated.line=e,i.generated.column=t-2,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,i.generated.line=e,i.generated.column=t-1,this.map.addMapping(i)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation!=\"undefined\"?this.mapOpts.annotation:this.previous().length?this.previous().some(e=>e.annotation):!0}isInline(){if(typeof this.mapOpts.inline!=\"undefined\")return this.mapOpts.inline;let e=this.mapOpts.annotation;return typeof e!=\"undefined\"&&e!==!0?!1:this.previous().length?this.previous().some(t=>t.inline):!0}isMap(){return typeof this.opts.map!=\"undefined\"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent!=\"undefined\"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(e=>e.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):\"to.css\"}path(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\\\\w+:\\\\/\\\\//.test(e))return e;let t=this.memoizedPaths.get(e);if(t)return t;let r=this.opts.to?Ut(this.opts.to):\".\";typeof this.mapOpts.annotation==\"string\"&&(r=Ut(Bn(r,this.mapOpts.annotation)));let i=Un(r,e);return this.memoizedPaths.set(e,i),i}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(e=>{if(e.source&&e.source.input.map){let t=e.source.input.map;this.previousMaps.includes(t)||this.previousMaps.push(t)}});else{let e=new Xu(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk(t=>{if(t.source){let r=t.source.input.from;if(r&&!e[r]){e[r]=!0;let i=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(i,t.source.input.css)}}});else if(this.css){let t=this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\";this.map.setSourceContent(t,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString(\"base64\"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let t=this.memoizedFileURLs.get(e);if(t)return t;if(bi){let r=bi(e).toString();return this.memoizedFileURLs.set(e,r),r}else throw new Error(\"\\`map.absolute\\` option is not available in this PostCSS build\")}toUrl(e){let t=this.memoizedURLs.get(e);if(t)return t;zn===\"\\\\\\\\\"&&(e=e.replace(/\\\\\\\\/g,\"/\"));let r=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,r),r}};var Wn=qu;let ec=ar,ts=class extends ec{constructor(e){super(e),this.type=\"comment\"}};var cr=ts;ts.default=ts;let{isClean:Gn,my:Vn}=ot,jn=lr,Hn=cr,tc=ar,Yn,Rs,As,Zn;function Jn(s){return s.map(e=>(e.nodes&&(e.nodes=Jn(e.nodes)),delete e.source,e))}function Xn(s){if(s[Gn]=!1,s.proxyOf.nodes)for(let e of s.proxyOf.nodes)Xn(e)}let pe=class Kn extends tc{append(...e){for(let t of e){let r=this.normalize(t,this.last);for(let i of r)this.proxyOf.nodes.push(i)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let t=this.getIterator(),r,i;for(;this.indexes[t]<this.proxyOf.nodes.length&&(r=this.indexes[t],i=e(this.proxyOf.nodes[r],r),i!==!1);)this.indexes[t]+=1;return delete this.indexes[t],i}every(e){return this.nodes.every(e)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:e[t]?t===\"each\"||typeof t==\"string\"&&t.startsWith(\"walk\")?(...r)=>e[t](...r.map(i=>typeof i==\"function\"?(n,o)=>i(n.toProxy(),o):i)):t===\"every\"||t===\"some\"?r=>e[t]((i,...n)=>r(i.toProxy(),...n)):t===\"root\"?()=>e.root().toProxy():t===\"nodes\"?e.nodes.map(r=>r.toProxy()):t===\"first\"||t===\"last\"?e[t].toProxy():e[t]:e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"name\"||t===\"params\"||t===\"selector\")&&e.markDirty()),!0}}}index(e){return typeof e==\"number\"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,t){let r=this.index(e),i=this.normalize(t,this.proxyOf.nodes[r]).reverse();r=this.index(e);for(let o of i)this.proxyOf.nodes.splice(r+1,0,o);let n;for(let o in this.indexes)n=this.indexes[o],r<n&&(this.indexes[o]=n+i.length);return this.markDirty(),this}insertBefore(e,t){let r=this.index(e),i=r===0?\"prepend\":!1,n=this.normalize(t,this.proxyOf.nodes[r],i).reverse();r=this.index(e);for(let l of n)this.proxyOf.nodes.splice(r,0,l);let o;for(let l in this.indexes)o=this.indexes[l],r<=o&&(this.indexes[l]=o+n.length);return this.markDirty(),this}normalize(e,t){if(typeof e==\"string\")e=Jn(Yn(e).nodes);else if(typeof e==\"undefined\")e=[];else if(Array.isArray(e)){e=e.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type===\"root\"&&this.type!==\"document\"){e=e.nodes.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value==\"undefined\")throw new Error(\"Value field is missed in node creation\");typeof e.value!=\"string\"&&(e.value=String(e.value)),e=[new jn(e)]}else if(e.selector)e=[new Rs(e)];else if(e.name)e=[new As(e)];else if(e.text)e=[new Hn(e)];else throw new Error(\"Unknown node type in node creation\");return e.map(i=>(i[Vn]||Kn.rebuild(i),i=i.proxyOf,i.parent&&i.parent.removeChild(i),i[Gn]&&Xn(i),typeof i.raws.before==\"undefined\"&&t&&typeof t.raws.before!=\"undefined\"&&(i.raws.before=t.raws.before.replace(/\\\\S/g,\"\")),i.parent=this.proxyOf,i))}prepend(...e){e=e.reverse();for(let t of e){let r=this.normalize(t,this.first,\"prepend\").reverse();for(let i of r)this.proxyOf.nodes.unshift(i);for(let i in this.indexes)this.indexes[i]=this.indexes[i]+r.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let t;for(let r in this.indexes)t=this.indexes[r],t>=e&&(this.indexes[r]=t-1);return this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls(i=>{t.props&&!t.props.includes(i.prop)||t.fast&&!i.value.includes(t.fast)||(i.value=i.value.replace(e,r))}),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each((t,r)=>{let i;try{i=e(t,r)}catch(n){throw t.addToError(n)}return i!==!1&&t.walk&&(i=t.walk(e)),i})}walkAtRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"atrule\"&&e.test(r.name))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"atrule\"&&r.name===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"atrule\")return t(r,i)}))}walkComments(e){return this.walk((t,r)=>{if(t.type===\"comment\")return e(t,r)})}walkDecls(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"decl\"&&e.test(r.prop))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"decl\"&&r.prop===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"decl\")return t(r,i)}))}walkRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"rule\"&&e.test(r.selector))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"rule\"&&r.selector===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"rule\")return t(r,i)}))}get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}};pe.registerParse=s=>{Yn=s};pe.registerRule=s=>{Rs=s};pe.registerAtRule=s=>{As=s};pe.registerRoot=s=>{Zn=s};var Ie=pe;pe.default=pe;pe.rebuild=s=>{s.type===\"atrule\"?Object.setPrototypeOf(s,As.prototype):s.type===\"rule\"?Object.setPrototypeOf(s,Rs.prototype):s.type===\"decl\"?Object.setPrototypeOf(s,jn.prototype):s.type===\"comment\"?Object.setPrototypeOf(s,Hn.prototype):s.type===\"root\"&&Object.setPrototypeOf(s,Zn.prototype),s[Vn]=!0,s.nodes&&s.nodes.forEach(e=>{pe.rebuild(e)})};let rc=Ie,Qn,qn,qe=class extends rc{constructor(e){super(x({type:\"document\"},e)),this.nodes||(this.nodes=[])}toResult(e={}){return new Qn(new qn,this,e).stringify()}};qe.registerLazyResult=s=>{Qn=s};qe.registerProcessor=s=>{qn=s};var Ms=qe;qe.default=qe;let rs=class{constructor(e,t={}){if(this.type=\"warning\",this.text=e,t.node&&t.node.source){let r=t.node.rangeBy(t);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(let r in t)this[r]=t[r]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+\": \"+this.text:this.text}};var eo=rs;rs.default=rs;let sc=eo,ss=class{constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new sc(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter(e=>e.type===\"warning\")}get content(){return this.css}};var Es=ss;ss.default=ss;const Or=39,Ci=34,Ot=92,vi=47,Rt=10,Ge=32,At=12,Mt=9,Et=13,ic=91,nc=93,oc=40,ac=41,lc=123,uc=125,cc=59,hc=42,fc=58,pc=64,$t=/[\\\\t\\\\n\\\\f\\\\r \"#'()/;[\\\\\\\\\\\\]{}]/g,Nt=/[\\\\t\\\\n\\\\f\\\\r !\"#'():;@[\\\\\\\\\\\\]{}]|\\\\/(?=\\\\*)/g,dc=/.[\\\\r\\\\n\"'(/\\\\\\\\]/,Ii=/[\\\\da-f]/i;var mc=function(e,t={}){let r=e.css.valueOf(),i=t.ignoreErrors,n,o,l,a,u,c,h,d,m,g,p=r.length,f=0,S=[],b=[];function y(){return f}function C(_){throw e.error(\"Unclosed \"+_,f)}function N(){return b.length===0&&f>=p}function D(_){if(b.length)return b.pop();if(f>=p)return;let G=_?_.ignoreUnclosed:!1;switch(n=r.charCodeAt(f),n){case Rt:case Ge:case Mt:case Et:case At:{o=f;do o+=1,n=r.charCodeAt(o);while(n===Ge||n===Rt||n===Mt||n===Et||n===At);g=[\"space\",r.slice(f,o)],f=o-1;break}case ic:case nc:case lc:case uc:case fc:case cc:case ac:{let Y=String.fromCharCode(n);g=[Y,Y,f];break}case oc:{if(d=S.length?S.pop()[1]:\"\",m=r.charCodeAt(f+1),d===\"url\"&&m!==Or&&m!==Ci&&m!==Ge&&m!==Rt&&m!==Mt&&m!==At&&m!==Et){o=f;do{if(c=!1,o=r.indexOf(\")\",o+1),o===-1)if(i||G){o=f;break}else C(\"bracket\");for(h=o;r.charCodeAt(h-1)===Ot;)h-=1,c=!c}while(c);g=[\"brackets\",r.slice(f,o+1),f,o],f=o}else o=r.indexOf(\")\",f+1),a=r.slice(f,o+1),o===-1||dc.test(a)?g=[\"(\",\"(\",f]:(g=[\"brackets\",a,f,o],f=o);break}case Or:case Ci:{l=n===Or?\"'\":'\"',o=f;do{if(c=!1,o=r.indexOf(l,o+1),o===-1)if(i||G){o=f+1;break}else C(\"string\");for(h=o;r.charCodeAt(h-1)===Ot;)h-=1,c=!c}while(c);g=[\"string\",r.slice(f,o+1),f,o],f=o;break}case pc:{$t.lastIndex=f+1,$t.test(r),$t.lastIndex===0?o=r.length-1:o=$t.lastIndex-2,g=[\"at-word\",r.slice(f,o+1),f,o],f=o;break}case Ot:{for(o=f,u=!0;r.charCodeAt(o+1)===Ot;)o+=1,u=!u;if(n=r.charCodeAt(o+1),u&&n!==vi&&n!==Ge&&n!==Rt&&n!==Mt&&n!==Et&&n!==At&&(o+=1,Ii.test(r.charAt(o)))){for(;Ii.test(r.charAt(o+1));)o+=1;r.charCodeAt(o+1)===Ge&&(o+=1)}g=[\"word\",r.slice(f,o+1),f,o],f=o;break}default:{n===vi&&r.charCodeAt(f+1)===hc?(o=r.indexOf(\"*/\",f+2)+1,o===0&&(i||G?o=r.length:C(\"comment\")),g=[\"comment\",r.slice(f,o+1),f,o],f=o):(Nt.lastIndex=f+1,Nt.test(r),Nt.lastIndex===0?o=r.length-1:o=Nt.lastIndex-2,g=[\"word\",r.slice(f,o+1),f,o],S.push(g),f=o);break}}return f++,g}function H(_){b.push(_)}return{back:H,endOfFile:N,nextToken:D,position:y}};let to=Ie,Jt=class extends to{constructor(e){super(e),this.type=\"atrule\"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};var $s=Jt;Jt.default=Jt;to.registerAtRule(Jt);let ro=Ie,so,io,De=class extends ro{constructor(e){super(e),this.type=\"root\",this.nodes||(this.nodes=[])}normalize(e,t,r){let i=super.normalize(e);if(t){if(r===\"prepend\")this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let n of i)n.raws.before=t.raws.before}return i}removeChild(e,t){let r=this.index(e);return!t&&r===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}toResult(e={}){return new so(new io,this,e).stringify()}};De.registerLazyResult=s=>{so=s};De.registerProcessor=s=>{io=s};var at=De;De.default=De;ro.registerRoot(De);let et={comma(s){return et.split(s,[\",\"],!0)},space(s){let e=[\" \",\\`\n\\`,\"\t\"];return et.split(s,e)},split(s,e,t){let r=[],i=\"\",n=!1,o=0,l=!1,a=\"\",u=!1;for(let c of s)u?u=!1:c===\"\\\\\\\\\"?u=!0:l?c===a&&(l=!1):c==='\"'||c===\"'\"?(l=!0,a=c):c===\"(\"?o+=1:c===\")\"?o>0&&(o-=1):o===0&&e.includes(c)&&(n=!0),n?(i!==\"\"&&r.push(i.trim()),i=\"\",n=!1):i+=c;return(t||i!==\"\")&&r.push(i.trim()),r}};var no=et;et.default=et;let oo=Ie,gc=no,Xt=class extends oo{constructor(e){super(e),this.type=\"rule\",this.nodes||(this.nodes=[])}get selectors(){return gc.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\\\\s*/):null,r=t?t[0]:\",\"+this.raw(\"between\",\"beforeOpen\");this.selector=e.join(r)}};var Ns=Xt;Xt.default=Xt;oo.registerRule(Xt);let yc=lr,wc=mc,Sc=cr,bc=$s,Cc=at,xi=Ns;const Oi={empty:!0,space:!0};function vc(s){for(let e=s.length-1;e>=0;e--){let t=s[e],r=t[3]||t[2];if(r)return r}}let Ic=class{constructor(e){this.input=e,this.root=new Cc,this.current=this.root,this.spaces=\"\",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let t=new bc;t.name=e[1].slice(1),t.name===\"\"&&this.unnamedAtrule(t,e),this.init(t,e[2]);let r,i,n,o=!1,l=!1,a=[],u=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),r=e[0],r===\"(\"||r===\"[\"?u.push(r===\"(\"?\")\":\"]\"):r===\"{\"&&u.length>0?u.push(\"}\"):r===u[u.length-1]&&u.pop(),u.length===0)if(r===\";\"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(r===\"{\"){l=!0;break}else if(r===\"}\"){if(a.length>0){for(n=a.length-1,i=a[n];i&&i[0]===\"space\";)i=a[--n];i&&(t.source.end=this.getPosition(i[3]||i[2]),t.source.end.offset++)}this.end(e);break}else a.push(e);else a.push(e);if(this.tokenizer.endOfFile()){o=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(a),a.length?(t.raws.afterName=this.spacesAndCommentsFromStart(a),this.raw(t,\"params\",a),o&&(e=a[a.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between=\"\")):(t.raws.afterName=\"\",t.params=\"\"),l&&(t.nodes=[],this.current=t)}checkMissedSemicolon(e){let t=this.colon(e);if(t===!1)return;let r=0,i;for(let n=t-1;n>=0&&(i=e[n],!(i[0]!==\"space\"&&(r+=1,r===2)));n--);throw this.input.error(\"Missed semicolon\",i[0]===\"word\"?i[3]+1:i[2])}colon(e){let t=0,r,i,n;for(let[o,l]of e.entries()){if(r=l,i=r[0],i===\"(\"&&(t+=1),i===\")\"&&(t-=1),t===0&&i===\":\")if(!n)this.doubleColon(r);else{if(n[0]===\"word\"&&n[1]===\"progid\")continue;return o}n=r}return!1}comment(e){let t=new Sc;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;let r=e[1].slice(2,-2);if(/^\\\\s*$/.test(r))t.text=\"\",t.raws.left=r,t.raws.right=\"\";else{let i=r.match(/^(\\\\s*)([^]*\\\\S)(\\\\s*)$/);t.text=i[2],t.raws.left=i[1],t.raws.right=i[3]}}createTokenizer(){this.tokenizer=wc(this.input)}decl(e,t){let r=new yc;this.init(r,e[0][2]);let i=e[e.length-1];for(i[0]===\";\"&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(i[3]||i[2]||vc(e)),r.source.end.offset++;e[0][0]!==\"word\";)e.length===1&&this.unknownWord(e),r.raws.before+=e.shift()[1];for(r.source.start=this.getPosition(e[0][2]),r.prop=\"\";e.length;){let u=e[0][0];if(u===\":\"||u===\"space\"||u===\"comment\")break;r.prop+=e.shift()[1]}r.raws.between=\"\";let n;for(;e.length;)if(n=e.shift(),n[0]===\":\"){r.raws.between+=n[1];break}else n[0]===\"word\"&&/\\\\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1];(r.prop[0]===\"_\"||r.prop[0]===\"*\")&&(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let o=[],l;for(;e.length&&(l=e[0][0],!(l!==\"space\"&&l!==\"comment\"));)o.push(e.shift());this.precheckMissedSemicolon(e);for(let u=e.length-1;u>=0;u--){if(n=e[u],n[1].toLowerCase()===\"!important\"){r.important=!0;let c=this.stringFrom(e,u);c=this.spacesFromEnd(e)+c,c!==\" !important\"&&(r.raws.important=c);break}else if(n[1].toLowerCase()===\"important\"){let c=e.slice(0),h=\"\";for(let d=u;d>0;d--){let m=c[d][0];if(h.trim().indexOf(\"!\")===0&&m!==\"space\")break;h=c.pop()[1]+h}h.trim().indexOf(\"!\")===0&&(r.important=!0,r.raws.important=h,e=c)}if(n[0]!==\"space\"&&n[0]!==\"comment\")break}e.some(u=>u[0]!==\"space\"&&u[0]!==\"comment\")&&(r.raws.between+=o.map(u=>u[1]).join(\"\"),o=[]),this.raw(r,\"value\",o.concat(e),t),r.value.includes(\":\")&&!t&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error(\"Double colon\",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let t=new xi;this.init(t,e[2]),t.selector=\"\",t.raws.between=\"\",this.current=t}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.spaces=\"\",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let t=this.current.nodes[this.current.nodes.length-1];t&&t.type===\"rule\"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces=\"\")}}getPosition(e){let t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}}init(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces=\"\",e.type!==\"comment\"&&(this.semicolon=!1)}other(e){let t=!1,r=null,i=!1,n=null,o=[],l=e[1].startsWith(\"--\"),a=[],u=e;for(;u;){if(r=u[0],a.push(u),r===\"(\"||r===\"[\")n||(n=u),o.push(r===\"(\"?\")\":\"]\");else if(l&&i&&r===\"{\")n||(n=u),o.push(\"}\");else if(o.length===0)if(r===\";\")if(i){this.decl(a,l);return}else break;else if(r===\"{\"){this.rule(a);return}else if(r===\"}\"){this.tokenizer.back(a.pop()),t=!0;break}else r===\":\"&&(i=!0);else r===o[o.length-1]&&(o.pop(),o.length===0&&(n=null));u=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),o.length>0&&this.unclosedBracket(n),t&&i){if(!l)for(;a.length&&(u=a[a.length-1][0],!(u!==\"space\"&&u!==\"comment\"));)this.tokenizer.back(a.pop());this.decl(a,l)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case\"space\":this.spaces+=e[1];break;case\";\":this.freeSemicolon(e);break;case\"}\":this.end(e);break;case\"comment\":this.comment(e);break;case\"at-word\":this.atrule(e);break;case\"{\":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}precheckMissedSemicolon(){}raw(e,t,r,i){let n,o,l=r.length,a=\"\",u=!0,c,h;for(let d=0;d<l;d+=1)n=r[d],o=n[0],o===\"space\"&&d===l-1&&!i?u=!1:o===\"comment\"?(h=r[d-1]?r[d-1][0]:\"empty\",c=r[d+1]?r[d+1][0]:\"empty\",!Oi[h]&&!Oi[c]?a.slice(-1)===\",\"?u=!1:a+=n[1]:u=!1):a+=n[1];if(!u){let d=r.reduce((m,g)=>m+g[1],\"\");e.raws[t]={raw:d,value:a}}e[t]=a}rule(e){e.pop();let t=new xi;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,\"selector\",e),this.current=t}spacesAndCommentsFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],!(t!==\"space\"&&t!==\"comment\"));)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let t,r=\"\";for(;e.length&&(t=e[0][0],!(t!==\"space\"&&t!==\"comment\"));)r+=e.shift()[1];return r}spacesFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],t===\"space\");)r=e.pop()[1]+r;return r}stringFrom(e,t){let r=\"\";for(let i=t;i<e.length;i++)r+=e[i][1];return e.splice(t,e.length-t),r}unclosedBlock(){let e=this.current.source.start;throw this.input.error(\"Unclosed block\",e.line,e.column)}unclosedBracket(e){throw this.input.error(\"Unclosed bracket\",{offset:e[2]},{offset:e[2]+1})}unexpectedClose(e){throw this.input.error(\"Unexpected }\",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error(\"Unknown word\",{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unnamedAtrule(e,t){throw this.input.error(\"At-rule without name\",{offset:t[2]},{offset:t[2]+t[1].length})}};var xc=Ic;let Oc=Ie,Rc=xc,Ac=ur;function Kt(s,e){let t=new Ac(s,e),r=new Rc(t);try{r.parse()}catch(i){throw i}return r.root}var ks=Kt;Kt.default=Kt;Oc.registerParse(Kt);let{isClean:ce,my:Mc}=ot,Ec=Wn,$c=or,Nc=Ie,kc=Ms;let Ri=Es,Pc=ks,Dc=at;const Lc={atrule:\"AtRule\",comment:\"Comment\",decl:\"Declaration\",document:\"Document\",root:\"Root\",rule:\"Rule\"},Tc={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},_c={Once:!0,postcssPlugin:!0,prepare:!0},Le=0;function Ve(s){return typeof s==\"object\"&&typeof s.then==\"function\"}function ao(s){let e=!1,t=Lc[s.type];return s.type===\"decl\"?e=s.prop.toLowerCase():s.type===\"atrule\"&&(e=s.name.toLowerCase()),e&&s.append?[t,t+\"-\"+e,Le,t+\"Exit\",t+\"Exit-\"+e]:e?[t,t+\"-\"+e,t+\"Exit\",t+\"Exit-\"+e]:s.append?[t,Le,t+\"Exit\"]:[t,t+\"Exit\"]}function Ai(s){let e;return s.type===\"document\"?e=[\"Document\",Le,\"DocumentExit\"]:s.type===\"root\"?e=[\"Root\",Le,\"RootExit\"]:e=ao(s),{eventIndex:0,events:e,iterator:0,node:s,visitorIndex:0,visitors:[]}}function is(s){return s[ce]=!1,s.nodes&&s.nodes.forEach(e=>is(e)),s}let ns={},Te=class lo{constructor(e,t,r){this.stringified=!1,this.processed=!1;let i;if(typeof t==\"object\"&&t!==null&&(t.type===\"root\"||t.type===\"document\"))i=is(t);else if(t instanceof lo||t instanceof Ri)i=is(t.root),t.map&&(typeof r.map==\"undefined\"&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let n=Pc;r.syntax&&(n=r.syntax.parse),r.parser&&(n=r.parser),n.parse&&(n=n.parse);try{i=n(t,r)}catch(o){this.processed=!0,this.error=o}i&&!i[Mc]&&Nc.rebuild(i)}this.result=new Ri(e,i,r),this.helpers=ee(x({},ns),{postcss:ns,result:this.result}),this.plugins=this.processor.plugins.map(n=>typeof n==\"object\"&&n.prepare?x(x({},n),n.prepare(this.result)):n)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error(\"Use process(css).then(cb) to work with async plugins\")}handleError(e,t){let r=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,e.name===\"CssSyntaxError\"&&!e.plugin?(e.plugin=r.postcssPlugin,e.setMessage()):r.postcssVersion}catch(i){console&&console.error&&console.error(i)}return e}prepareVisitors(){this.listeners={};let e=(t,r,i)=>{this.listeners[r]||(this.listeners[r]=[]),this.listeners[r].push([t,i])};for(let t of this.plugins)if(typeof t==\"object\")for(let r in t){if(!Tc[r]&&/^[A-Z]/.test(r))throw new Error(\\`Unknown event \\${r} in \\${t.postcssPlugin}. Try to update PostCSS (\\${this.processor.version} now).\\`);if(!_c[r])if(typeof t[r]==\"object\")for(let i in t[r])i===\"*\"?e(t,r,t[r][i]):e(t,r+\"-\"+i.toLowerCase(),t[r][i]);else typeof t[r]==\"function\"&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let t=this.plugins[e],r=this.runOnRoot(t);if(Ve(r))try{await r}catch(i){throw this.handleError(i)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ce];){e[ce]=!0;let t=[Ai(e)];for(;t.length>0;){let r=this.visitTick(t);if(Ve(r))try{await r}catch(i){let n=t[t.length-1].node;throw this.handleError(i,n)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if(e.type===\"document\"){let i=e.nodes.map(n=>r(n,this.helpers));await Promise.all(i)}else await r(e,this.helpers)}catch(i){throw this.handleError(i)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e==\"object\"&&e.Once){if(this.result.root.type===\"document\"){let t=this.result.root.nodes.map(r=>e.Once(r,this.helpers));return Ve(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}else if(typeof e==\"function\")return e(this.result.root,this.result)}catch(t){throw this.handleError(t)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=$c;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let i=new Ec(t,this.result.root,this.result.opts).generate();return this.result.css=i[0],this.result.map=i[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let t=this.runOnRoot(e);if(Ve(t))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ce];)e[ce]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type===\"document\")for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,t){return this.async().then(e,t)}toString(){return this.css}visitSync(e,t){for(let[r,i]of e){this.result.lastPlugin=r;let n;try{n=i(t,this.helpers)}catch(o){throw this.handleError(o,t.proxyOf)}if(t.type!==\"root\"&&t.type!==\"document\"&&!t.parent)return!0;if(Ve(n))throw this.getAsyncError()}}visitTick(e){let t=e[e.length-1],{node:r,visitors:i}=t;if(r.type!==\"root\"&&r.type!==\"document\"&&!r.parent){e.pop();return}if(i.length>0&&t.visitorIndex<i.length){let[o,l]=i[t.visitorIndex];t.visitorIndex+=1,t.visitorIndex===i.length&&(t.visitors=[],t.visitorIndex=0),this.result.lastPlugin=o;try{return l(r.toProxy(),this.helpers)}catch(a){throw this.handleError(a,r)}}if(t.iterator!==0){let o=t.iterator,l;for(;l=r.nodes[r.indexes[o]];)if(r.indexes[o]+=1,!l[ce]){l[ce]=!0,e.push(Ai(l));return}t.iterator=0,delete r.indexes[o]}let n=t.events;for(;t.eventIndex<n.length;){let o=n[t.eventIndex];if(t.eventIndex+=1,o===Le){r.nodes&&r.nodes.length&&(r[ce]=!0,t.iterator=r.getIterator());return}else if(this.listeners[o]){t.visitors=this.listeners[o];return}}e.pop()}walkSync(e){e[ce]=!0;let t=ao(e);for(let r of t)if(r===Le)e.nodes&&e.each(i=>{i[ce]||this.walkSync(i)});else{let i=this.listeners[r];if(i&&this.visitSync(i,e.toProxy()))return}}warnings(){return this.sync().warnings()}get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return\"LazyResult\"}};Te.registerPostcss=s=>{ns=s};var uo=Te;Te.default=Te;Dc.registerLazyResult(Te);kc.registerLazyResult(Te);let Fc=Wn,Uc=or;let Bc=ks;const zc=Es;let os=class{constructor(e,t,r){t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=r,this._map=void 0;let i,n=Uc;this.result=new zc(this._processor,i,this._opts),this.result.css=t;let o=this;Object.defineProperty(this.result,\"root\",{get(){return o.root}});let l=new Fc(n,i,this._opts,t);if(l.isMap()){let[a,u]=l.generate();a&&(this.result.css=a),u&&(this.result.map=u)}else l.clearAnnotation(),this.result.css=l.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,t){return this.async().then(e,t)}toString(){return this._css}warnings(){return[]}get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,t=Bc;try{e=t(this._css,this._opts)}catch(r){this.error=r}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return\"NoWorkResult\"}};var Wc=os;os.default=os;let Gc=Wc,Vc=uo,jc=Ms,Hc=at,tt=class{constructor(e=[]){this.version=\"8.4.38\",this.plugins=this.normalize(e)}normalize(e){let t=[];for(let r of e)if(r.postcss===!0?r=r():r.postcss&&(r=r.postcss),typeof r==\"object\"&&Array.isArray(r.plugins))t=t.concat(r.plugins);else if(typeof r==\"object\"&&r.postcssPlugin)t.push(r);else if(typeof r==\"function\")t.push(r);else if(!(typeof r==\"object\"&&(r.parse||r.stringify)))throw new Error(r+\" is not a PostCSS plugin\");return t}process(e,t={}){return!this.plugins.length&&!t.parser&&!t.stringifier&&!t.syntax?new Gc(this,e,t):new Vc(this,e,t)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};var Yc=tt;tt.default=tt;Hc.registerProcessor(tt);jc.registerProcessor(tt);let Zc=lr,Jc=_n,Xc=cr,Kc=$s,Qc=ur,qc=at,eh=Ns;function rt(s,e){if(Array.isArray(s))return s.map(o=>rt(o));let i=s,{inputs:t}=i,r=xe(i,[\"inputs\"]);if(t){e=[];for(let o of t){let l=ee(x({},o),{__proto__:Qc.prototype});l.map&&(l.map=ee(x({},l.map),{__proto__:Jc.prototype})),e.push(l)}}if(r.nodes&&(r.nodes=s.nodes.map(o=>rt(o,e))),r.source){let n=r.source,{inputId:o}=n,l=xe(n,[\"inputId\"]);r.source=l,o!=null&&(r.source.input=e[o])}if(r.type===\"root\")return new qc(r);if(r.type===\"decl\")return new Zc(r);if(r.type===\"rule\")return new eh(r);if(r.type===\"comment\")return new Xc(r);if(r.type===\"atrule\")return new Kc(r);throw new Error(\"Unknown node type: \"+s.type)}var th=rt;rt.default=rt;let rh=Os,co=lr,sh=uo,ih=Ie,Ps=Yc,nh=or,oh=th,ho=Ms,ah=eo,fo=cr,po=$s,lh=Es,uh=ur,ch=ks,hh=no,mo=Ns,go=at,fh=ar;function $(...s){return s.length===1&&Array.isArray(s[0])&&(s=s[0]),new Ps(s)}$.plugin=function(e,t){let r=!1;function i(...o){console&&console.warn&&!r&&(r=!0,console.warn(e+\\`: postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\\`),process.env.LANG&&process.env.LANG.startsWith(\"cn\")&&console.warn(e+\\`: \\\\u91CC\\\\u9762 postcss.plugin \\\\u88AB\\\\u5F03\\\\u7528. \\\\u8FC1\\\\u79FB\\\\u6307\\\\u5357:\nhttps://www.w3ctech.com/topic/2226\\`));let l=t(...o);return l.postcssPlugin=e,l.postcssVersion=new Ps().version,l}let n;return Object.defineProperty(i,\"postcss\",{get(){return n||(n=i()),n}}),i.process=function(o,l,a){return $([i(a)]).process(o,l)},i};$.stringify=nh;$.parse=ch;$.fromJSON=oh;$.list=hh;$.comment=s=>new fo(s);$.atRule=s=>new po(s);$.decl=s=>new co(s);$.rule=s=>new mo(s);$.root=s=>new go(s);$.document=s=>new ho(s);$.CssSyntaxError=rh;$.Declaration=co;$.Container=ih;$.Processor=Ps;$.Document=ho;$.Comment=fo;$.Warning=ah;$.AtRule=po;$.Result=lh;$.Input=uh;$.Rule=mo;$.Root=go;$.Node=fh;sh.registerPostcss($);var ph=$;$.default=$;const U=Ou(ph);U.stringify;U.fromJSON;U.plugin;U.parse;U.list;U.document;U.comment;U.atRule;U.rule;U.decl;U.root;U.CssSyntaxError;U.Declaration;U.Container;U.Processor;U.Document;U.Comment;U.Warning;U.AtRule;U.Result;U.Input;U.Rule;U.Root;U.Node;class Ds{constructor(...e){te(this,\"parentElement\",null),te(this,\"parentNode\",null),te(this,\"ownerDocument\"),te(this,\"firstChild\",null),te(this,\"lastChild\",null),te(this,\"previousSibling\",null),te(this,\"nextSibling\",null),te(this,\"ELEMENT_NODE\",1),te(this,\"TEXT_NODE\",3),te(this,\"nodeType\"),te(this,\"nodeName\"),te(this,\"RRNodeType\")}get childNodes(){const e=[];let t=this.firstChild;for(;t;)e.push(t),t=t.nextSibling;return e}contains(e){if(e instanceof Ds){if(e.ownerDocument!==this.ownerDocument)return!1;if(e===this)return!0}else return!1;for(;e.parentNode;){if(e.parentNode===this)return!0;e=e.parentNode}return!1}appendChild(e){throw new Error(\"RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.\")}insertBefore(e,t){throw new Error(\"RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.\")}removeChild(e){throw new Error(\"RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.\")}toString(){return\"RRNode\"}}const Mi={Node:[\"childNodes\",\"parentNode\",\"parentElement\",\"textContent\"],ShadowRoot:[\"host\",\"styleSheets\"],Element:[\"shadowRoot\",\"querySelector\",\"querySelectorAll\"],MutationObserver:[]},Ei={Node:[\"contains\",\"getRootNode\"],ShadowRoot:[\"getSelection\"],Element:[],MutationObserver:[\"constructor\"]},kt={},dh=()=>!!globalThis.Zone;function Ls(s){if(kt[s])return kt[s];const e=globalThis[s],t=e.prototype,r=s in Mi?Mi[s]:void 0,i=!!(r&&r.every(l=>{var a,u;return!!((u=(a=Object.getOwnPropertyDescriptor(t,l))==null?void 0:a.get)!=null&&u.toString().includes(\"[native code]\"))})),n=s in Ei?Ei[s]:void 0,o=!!(n&&n.every(l=>{var a;return typeof t[l]==\"function\"&&((a=t[l])==null?void 0:a.toString().includes(\"[native code]\"))}));if(i&&o&&!dh())return kt[s]=e.prototype,e.prototype;try{const l=document.createElement(\"iframe\");document.body.appendChild(l);const a=l.contentWindow;if(!a)return e.prototype;const u=a[s].prototype;return document.body.removeChild(l),u?kt[s]=u:t}catch(l){return t}}const Rr={};function ge(s,e,t){var r;const i=\\`\\${s}.\\${String(t)}\\`;if(Rr[i])return Rr[i].call(e);const n=Ls(s),o=(r=Object.getOwnPropertyDescriptor(n,t))==null?void 0:r.get;return o?(Rr[i]=o,o.call(e)):e[t]}const Ar={};function yo(s,e,t){const r=\\`\\${s}.\\${String(t)}\\`;if(Ar[r])return Ar[r].bind(e);const n=Ls(s)[t];return typeof n!=\"function\"?e[t]:(Ar[r]=n,n.bind(e))}function mh(s){return ge(\"Node\",s,\"childNodes\")}function gh(s){return ge(\"Node\",s,\"parentNode\")}function yh(s){return ge(\"Node\",s,\"parentElement\")}function wh(s){return ge(\"Node\",s,\"textContent\")}function Sh(s,e){return yo(\"Node\",s,\"contains\")(e)}function bh(s){return yo(\"Node\",s,\"getRootNode\")()}function Ch(s){return!s||!(\"host\"in s)?null:ge(\"ShadowRoot\",s,\"host\")}function vh(s){return s.styleSheets}function Ih(s){return!s||!(\"shadowRoot\"in s)?null:ge(\"Element\",s,\"shadowRoot\")}function xh(s,e){return ge(\"Element\",s,\"querySelector\")(e)}function Oh(s,e){return ge(\"Element\",s,\"querySelectorAll\")(e)}function wo(){return Ls(\"MutationObserver\").constructor}const v={childNodes:mh,parentNode:gh,parentElement:yh,textContent:wh,contains:Sh,getRootNode:bh,host:Ch,styleSheets:vh,shadowRoot:Ih,querySelector:xh,querySelectorAll:Oh,mutationObserver:wo};function J(s,e,t=document){const r={capture:!0,passive:!0};return t.addEventListener(s,e,r),()=>t.removeEventListener(s,e,r)}const Re=\\`Please stop import mirror directly. Instead of that,\\\\r\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\\\r\nor you can use record.mirror to access the mirror instance during recording.\\`;let $i={map:{},getId(){return console.error(Re),-1},getNode(){return console.error(Re),null},removeNodeFromMap(){console.error(Re)},has(){return console.error(Re),!1},reset(){console.error(Re)}};typeof window!=\"undefined\"&&window.Proxy&&window.Reflect&&($i=new Proxy($i,{get(s,e,t){return e===\"map\"&&console.error(Re),Reflect.get(s,e,t)}}));function st(s,e,t={}){let r=null,i=0;return function(...n){const o=Date.now();!i&&t.leading===!1&&(i=o);const l=e-(o-i),a=this;l<=0||l>e?(r&&(clearTimeout(r),r=null),i=o,s.apply(a,n)):!r&&t.trailing!==!1&&(r=setTimeout(()=>{i=t.leading===!1?0:Date.now(),r=null,s.apply(a,n)},l))}}function hr(s,e,t,r,i=window){const n=i.Object.getOwnPropertyDescriptor(s,e);return i.Object.defineProperty(s,e,r?t:{set(o){setTimeout(()=>{t.set.call(this,o)},0),n&&n.set&&n.set.call(this,o)}}),()=>hr(s,e,n||{},!0)}function Fe(s,e,t){try{if(!(e in s))return()=>{};const r=s[e],i=t(r);return typeof i==\"function\"&&(i.prototype=i.prototype||{},Object.defineProperties(i,{__rrweb_original__:{enumerable:!1,value:r}})),s[e]=i,()=>{s[e]=r}}catch(r){return()=>{}}}let Qt=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(Qt=()=>new Date().getTime());function So(s){var e,t,r,i;const n=s.document;return{left:n.scrollingElement?n.scrollingElement.scrollLeft:s.pageXOffset!==void 0?s.pageXOffset:n.documentElement.scrollLeft||(n==null?void 0:n.body)&&((e=v.parentElement(n.body))==null?void 0:e.scrollLeft)||((t=n==null?void 0:n.body)==null?void 0:t.scrollLeft)||0,top:n.scrollingElement?n.scrollingElement.scrollTop:s.pageYOffset!==void 0?s.pageYOffset:(n==null?void 0:n.documentElement.scrollTop)||(n==null?void 0:n.body)&&((r=v.parentElement(n.body))==null?void 0:r.scrollTop)||((i=n==null?void 0:n.body)==null?void 0:i.scrollTop)||0}}function bo(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function Co(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function vo(s){return s?s.nodeType===s.ELEMENT_NODE?s:v.parentElement(s):null}function X(s,e,t,r){if(!s)return!1;const i=vo(s);if(!i)return!1;try{if(typeof e==\"string\"){if(i.classList.contains(e)||r&&i.closest(\".\"+e)!==null)return!0}else if(Gt(i,e,r))return!0}catch(n){}return!!(t&&(i.matches(t)||r&&i.closest(t)!==null))}function Rh(s,e){return e.getId(s)!==-1}function Mr(s,e,t){return s.tagName===\"TITLE\"&&t.headTitleMutations?!0:e.getId(s)===Ze}function Io(s,e){if(je(s))return!1;const t=e.getId(s);if(!e.has(t))return!0;const r=v.parentNode(s);return r&&r.nodeType===s.DOCUMENT_NODE?!1:r?Io(r,e):!0}function as(s){return!!s.changedTouches}function Ah(s=window){\"NodeList\"in s&&!s.NodeList.prototype.forEach&&(s.NodeList.prototype.forEach=Array.prototype.forEach),\"DOMTokenList\"in s&&!s.DOMTokenList.prototype.forEach&&(s.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function xo(s,e){return!!(s.nodeName===\"IFRAME\"&&e.getMeta(s))}function Oo(s,e){return!!(s.nodeName===\"LINK\"&&s.nodeType===s.ELEMENT_NODE&&s.getAttribute&&s.getAttribute(\"rel\")===\"stylesheet\"&&e.getMeta(s))}function ls(s){return s?s instanceof Ds&&\"shadowRoot\"in s?!!s.shadowRoot:!!v.shadowRoot(s):!1}class Mh{constructor(){w(this,\"id\",1),w(this,\"styleIDMap\",new WeakMap),w(this,\"idStyleMap\",new Map)}getId(e){var t;return(t=this.styleIDMap.get(e))!=null?t:-1}has(e){return this.styleIDMap.has(e)}add(e,t){if(this.has(e))return this.getId(e);let r;return t===void 0?r=this.id++:r=t,this.styleIDMap.set(e,r),this.idStyleMap.set(r,e),r}getStyle(e){return this.idStyleMap.get(e)||null}reset(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1}generateId(){return this.id++}}function Ro(s){var e;let t=null;return\"getRootNode\"in s&&((e=v.getRootNode(s))==null?void 0:e.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&v.host(v.getRootNode(s))&&(t=v.host(v.getRootNode(s))),t}function Eh(s){let e=s,t;for(;t=Ro(e);)e=t;return e}function $h(s){const e=s.ownerDocument;if(!e)return!1;const t=Eh(s);return v.contains(e,t)}function Ao(s){const e=s.ownerDocument;return e?v.contains(e,s)||$h(s):!1}var R=(s=>(s[s.DomContentLoaded=0]=\"DomContentLoaded\",s[s.Load=1]=\"Load\",s[s.FullSnapshot=2]=\"FullSnapshot\",s[s.IncrementalSnapshot=3]=\"IncrementalSnapshot\",s[s.Meta=4]=\"Meta\",s[s.Custom=5]=\"Custom\",s[s.Plugin=6]=\"Plugin\",s))(R||{}),I=(s=>(s[s.Mutation=0]=\"Mutation\",s[s.MouseMove=1]=\"MouseMove\",s[s.MouseInteraction=2]=\"MouseInteraction\",s[s.Scroll=3]=\"Scroll\",s[s.ViewportResize=4]=\"ViewportResize\",s[s.Input=5]=\"Input\",s[s.TouchMove=6]=\"TouchMove\",s[s.MediaInteraction=7]=\"MediaInteraction\",s[s.StyleSheetRule=8]=\"StyleSheetRule\",s[s.CanvasMutation=9]=\"CanvasMutation\",s[s.Font=10]=\"Font\",s[s.Log=11]=\"Log\",s[s.Drag=12]=\"Drag\",s[s.StyleDeclaration=13]=\"StyleDeclaration\",s[s.Selection=14]=\"Selection\",s[s.AdoptedStyleSheet=15]=\"AdoptedStyleSheet\",s[s.CustomElement=16]=\"CustomElement\",s))(I||{}),K=(s=>(s[s.MouseUp=0]=\"MouseUp\",s[s.MouseDown=1]=\"MouseDown\",s[s.Click=2]=\"Click\",s[s.ContextMenu=3]=\"ContextMenu\",s[s.DblClick=4]=\"DblClick\",s[s.Focus=5]=\"Focus\",s[s.Blur=6]=\"Blur\",s[s.TouchStart=7]=\"TouchStart\",s[s.TouchMove_Departed=8]=\"TouchMove_Departed\",s[s.TouchEnd=9]=\"TouchEnd\",s[s.TouchCancel=10]=\"TouchCancel\",s))(K||{}),he=(s=>(s[s.Mouse=0]=\"Mouse\",s[s.Pen=1]=\"Pen\",s[s.Touch=2]=\"Touch\",s))(he||{}),_e=(s=>(s[s[\"2D\"]=0]=\"2D\",s[s.WebGL=1]=\"WebGL\",s[s.WebGL2=2]=\"WebGL2\",s))(_e||{}),Ae=(s=>(s[s.Play=0]=\"Play\",s[s.Pause=1]=\"Pause\",s[s.Seeked=2]=\"Seeked\",s[s.VolumeChange=3]=\"VolumeChange\",s[s.RateChange=4]=\"RateChange\",s))(Ae||{}),Mo=(s=>(s[s.Document=0]=\"Document\",s[s.DocumentType=1]=\"DocumentType\",s[s.Element=2]=\"Element\",s[s.Text=3]=\"Text\",s[s.CDATA=4]=\"CDATA\",s[s.Comment=5]=\"Comment\",s))(Mo||{});function Ni(s){return\"__ln\"in s}class Nh{constructor(){w(this,\"length\",0),w(this,\"head\",null),w(this,\"tail\",null)}get(e){if(e>=this.length)throw new Error(\"Position outside of list range\");let t=this.head;for(let r=0;r<e;r++)t=(t==null?void 0:t.next)||null;return t}addNode(e){const t={value:e,previous:null,next:null};if(e.__ln=t,e.previousSibling&&Ni(e.previousSibling)){const r=e.previousSibling.__ln.next;t.next=r,t.previous=e.previousSibling.__ln,e.previousSibling.__ln.next=t,r&&(r.previous=t)}else if(e.nextSibling&&Ni(e.nextSibling)&&e.nextSibling.__ln.previous){const r=e.nextSibling.__ln.previous;t.previous=r,t.next=e.nextSibling.__ln,e.nextSibling.__ln.previous=t,r&&(r.next=t)}else this.head&&(this.head.previous=t),t.next=this.head,this.head=t;t.next===null&&(this.tail=t),this.length++}removeNode(e){const t=e.__ln;this.head&&(t.previous?(t.previous.next=t.next,t.next?t.next.previous=t.previous:this.tail=t.previous):(this.head=t.next,this.head?this.head.previous=null:this.tail=null),e.__ln&&delete e.__ln,this.length--)}}const ki=(s,e)=>\\`\\${s}@\\${e}\\`;class kh{constructor(){w(this,\"frozen\",!1),w(this,\"locked\",!1),w(this,\"texts\",[]),w(this,\"attributes\",[]),w(this,\"attributeMap\",new WeakMap),w(this,\"removes\",[]),w(this,\"mapRemoves\",[]),w(this,\"movedMap\",{}),w(this,\"addedSet\",new Set),w(this,\"movedSet\",new Set),w(this,\"droppedSet\",new Set),w(this,\"removesSubTreeCache\",new Set),w(this,\"mutationCb\"),w(this,\"blockClass\"),w(this,\"blockSelector\"),w(this,\"maskTextClass\"),w(this,\"maskTextSelector\"),w(this,\"inlineStylesheet\"),w(this,\"maskInputOptions\"),w(this,\"maskTextFn\"),w(this,\"maskInputFn\"),w(this,\"keepIframeSrcFn\"),w(this,\"recordCanvas\"),w(this,\"inlineImages\"),w(this,\"slimDOMOptions\"),w(this,\"dataURLOptions\"),w(this,\"doc\"),w(this,\"mirror\"),w(this,\"iframeManager\"),w(this,\"stylesheetManager\"),w(this,\"shadowDomManager\"),w(this,\"canvasManager\"),w(this,\"processedNodeManager\"),w(this,\"unattachedDoc\"),w(this,\"processMutations\",e=>{e.forEach(this.processMutation),this.emit()}),w(this,\"emit\",()=>{if(this.frozen||this.locked)return;const e=[],t=new Set,r=new Nh,i=a=>{let u=a,c=Ze;for(;c===Ze;)u=u&&u.nextSibling,c=u&&this.mirror.getId(u);return c},n=a=>{const u=v.parentNode(a);if(!u||!Ao(a))return;let c=!1;if(a.nodeType===Node.TEXT_NODE){const g=u.tagName;if(g===\"TEXTAREA\")return;g===\"STYLE\"&&this.addedSet.has(u)&&(c=!0)}const h=je(u)?this.mirror.getId(Ro(a)):this.mirror.getId(u),d=i(a);if(h===-1||d===-1)return r.addNode(a);const m=Ee(a,{doc:this.doc,mirror:this.mirror,blockClass:this.blockClass,blockSelector:this.blockSelector,maskTextClass:this.maskTextClass,maskTextSelector:this.maskTextSelector,skipChild:!0,newlyAddedElement:!0,inlineStylesheet:this.inlineStylesheet,maskInputOptions:this.maskInputOptions,maskTextFn:this.maskTextFn,maskInputFn:this.maskInputFn,slimDOMOptions:this.slimDOMOptions,dataURLOptions:this.dataURLOptions,recordCanvas:this.recordCanvas,inlineImages:this.inlineImages,onSerialize:g=>{xo(g,this.mirror)&&this.iframeManager.addIframe(g),Oo(g,this.mirror)&&this.stylesheetManager.trackLinkElement(g),ls(a)&&this.shadowDomManager.addShadowRoot(v.shadowRoot(a),this.doc)},onIframeLoad:(g,p)=>{this.iframeManager.attachIframe(g,p),this.shadowDomManager.observeAttachShadow(g)},onStylesheetLoad:(g,p)=>{this.stylesheetManager.attachLinkElement(g,p)},cssCaptured:c});m&&(e.push({parentId:h,nextId:d,node:m}),t.add(m.id))};for(;this.mapRemoves.length;)this.mirror.removeNodeFromMap(this.mapRemoves.shift());for(const a of this.movedSet)Pi(this.removesSubTreeCache,a,this.mirror)&&!this.movedSet.has(v.parentNode(a))||n(a);for(const a of this.addedSet)!Di(this.droppedSet,a)&&!Pi(this.removesSubTreeCache,a,this.mirror)||Di(this.movedSet,a)?n(a):this.droppedSet.add(a);let o=null;for(;r.length;){let a=null;if(o){const u=this.mirror.getId(v.parentNode(o.value)),c=i(o.value);u!==-1&&c!==-1&&(a=o)}if(!a){let u=r.tail;for(;u;){const c=u;if(u=u.previous,c){const h=this.mirror.getId(v.parentNode(c.value));if(i(c.value)===-1)continue;if(h!==-1){a=c;break}else{const m=c.value,g=v.parentNode(m);if(g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE){const p=v.host(g);if(this.mirror.getId(p)!==-1){a=c;break}}}}}}if(!a){for(;r.head;)r.removeNode(r.head.value);break}o=a.previous,r.removeNode(a.value),n(a.value)}const l={texts:this.texts.map(a=>{const u=a.node,c=v.parentNode(u);return c&&c.tagName===\"TEXTAREA\"&&this.genTextAreaValueMutation(c),{id:this.mirror.getId(u),value:a.value}}).filter(a=>!t.has(a.id)).filter(a=>this.mirror.has(a.id)),attributes:this.attributes.map(a=>{const{attributes:u}=a;if(typeof u.style==\"string\"){const c=JSON.stringify(a.styleDiff),h=JSON.stringify(a._unchangedStyles);c.length<u.style.length&&(c+h).split(\"var(\").length===u.style.split(\"var(\").length&&(u.style=a.styleDiff)}return{id:this.mirror.getId(a.node),attributes:u}}).filter(a=>!t.has(a.id)).filter(a=>this.mirror.has(a.id)),removes:this.removes,adds:e};!l.texts.length&&!l.attributes.length&&!l.removes.length&&!l.adds.length||(this.texts=[],this.attributes=[],this.attributeMap=new WeakMap,this.removes=[],this.addedSet=new Set,this.movedSet=new Set,this.droppedSet=new Set,this.removesSubTreeCache=new Set,this.movedMap={},this.mutationCb(l))}),w(this,\"genTextAreaValueMutation\",e=>{let t=this.attributeMap.get(e);t||(t={node:e,attributes:{},styleDiff:{},_unchangedStyles:{}},this.attributes.push(t),this.attributeMap.set(e,t)),t.attributes.value=Array.from(v.childNodes(e),r=>v.textContent(r)||\"\").join(\"\")}),w(this,\"processMutation\",e=>{if(!Mr(e.target,this.mirror,this.slimDOMOptions))switch(e.type){case\"characterData\":{const t=v.textContent(e.target);!X(e.target,this.blockClass,this.blockSelector,!1)&&t!==e.oldValue&&this.texts.push({value:Xi(e.target,this.maskTextClass,this.maskTextSelector,!0)&&t?this.maskTextFn?this.maskTextFn(t,vo(e.target)):t.replace(/[\\\\S]/g,\"*\"):t,node:e.target});break}case\"attributes\":{const t=e.target;let r=e.attributeName,i=e.target.getAttribute(r);if(r===\"value\"){const o=fs(t);i=hs({element:t,maskInputOptions:this.maskInputOptions,tagName:t.tagName,type:o,value:i,maskInputFn:this.maskInputFn})}if(X(e.target,this.blockClass,this.blockSelector,!1)||i===e.oldValue)return;let n=this.attributeMap.get(e.target);if(t.tagName===\"IFRAME\"&&r===\"src\"&&!this.keepIframeSrcFn(i))if(!t.contentDocument)r=\"rr_src\";else return;if(n||(n={node:e.target,attributes:{},styleDiff:{},_unchangedStyles:{}},this.attributes.push(n),this.attributeMap.set(e.target,n)),r===\"type\"&&t.tagName===\"INPUT\"&&(e.oldValue||\"\").toLowerCase()===\"password\"&&t.setAttribute(\"data-rr-is-password\",\"true\"),!Ji(t.tagName,r))if(n.attributes[r]=Zi(this.doc,Ce(t.tagName),Ce(r),i),r===\"style\"){if(!this.unattachedDoc)try{this.unattachedDoc=document.implementation.createHTMLDocument()}catch(l){this.unattachedDoc=this.doc}const o=this.unattachedDoc.createElement(\"span\");e.oldValue&&o.setAttribute(\"style\",e.oldValue);for(const l of Array.from(t.style)){const a=t.style.getPropertyValue(l),u=t.style.getPropertyPriority(l);a!==o.style.getPropertyValue(l)||u!==o.style.getPropertyPriority(l)?u===\"\"?n.styleDiff[l]=a:n.styleDiff[l]=[a,u]:n._unchangedStyles[l]=[a,u]}for(const l of Array.from(o.style))t.style.getPropertyValue(l)===\"\"&&(n.styleDiff[l]=!1)}else r===\"open\"&&t.tagName===\"DIALOG\"&&(t.matches(\"dialog:modal\")?n.attributes.rr_open_mode=\"modal\":n.attributes.rr_open_mode=\"non-modal\");break}case\"childList\":{if(X(e.target,this.blockClass,this.blockSelector,!0))return;if(e.target.tagName===\"TEXTAREA\"){this.genTextAreaValueMutation(e.target);return}e.addedNodes.forEach(t=>this.genAdds(t,e.target)),e.removedNodes.forEach(t=>{const r=this.mirror.getId(t),i=je(e.target)?this.mirror.getId(v.host(e.target)):this.mirror.getId(e.target);X(e.target,this.blockClass,this.blockSelector,!1)||Mr(t,this.mirror,this.slimDOMOptions)||!Rh(t,this.mirror)||(this.addedSet.has(t)?(us(this.addedSet,t),this.droppedSet.add(t)):this.addedSet.has(e.target)&&r===-1||Io(e.target,this.mirror)||(this.movedSet.has(t)&&this.movedMap[ki(r,i)]?us(this.movedSet,t):(this.removes.push({parentId:i,id:r,isShadow:je(e.target)&&He(e.target)?!0:void 0}),Ph(t,this.removesSubTreeCache))),this.mapRemoves.push(t))});break}}}),w(this,\"genAdds\",(e,t)=>{if(!this.processedNodeManager.inOtherBuffer(e,this)&&!(this.addedSet.has(e)||this.movedSet.has(e))){if(this.mirror.hasNode(e)){if(Mr(e,this.mirror,this.slimDOMOptions))return;this.movedSet.add(e);let r=null;t&&this.mirror.hasNode(t)&&(r=this.mirror.getId(t)),r&&r!==-1&&(this.movedMap[ki(this.mirror.getId(e),r)]=!0)}else this.addedSet.add(e),this.droppedSet.delete(e);X(e,this.blockClass,this.blockSelector,!1)||(v.childNodes(e).forEach(r=>this.genAdds(r)),ls(e)&&v.childNodes(v.shadowRoot(e)).forEach(r=>{this.processedNodeManager.add(r,this),this.genAdds(r,e)}))}})}init(e){[\"mutationCb\",\"blockClass\",\"blockSelector\",\"maskTextClass\",\"maskTextSelector\",\"inlineStylesheet\",\"maskInputOptions\",\"maskTextFn\",\"maskInputFn\",\"keepIframeSrcFn\",\"recordCanvas\",\"inlineImages\",\"slimDOMOptions\",\"dataURLOptions\",\"doc\",\"mirror\",\"iframeManager\",\"stylesheetManager\",\"shadowDomManager\",\"canvasManager\",\"processedNodeManager\"].forEach(t=>{this[t]=e[t]})}freeze(){this.frozen=!0,this.canvasManager.freeze()}unfreeze(){this.frozen=!1,this.canvasManager.unfreeze(),this.emit()}isFrozen(){return this.frozen}lock(){this.locked=!0,this.canvasManager.lock()}unlock(){this.locked=!1,this.canvasManager.unlock(),this.emit()}reset(){this.shadowDomManager.reset(),this.canvasManager.reset()}}function us(s,e){s.delete(e),v.childNodes(e).forEach(t=>us(s,t))}function Ph(s,e){const t=[s];for(;t.length;){const r=t.pop();e.has(r)||(e.add(r),v.childNodes(r).forEach(i=>t.push(i)))}}function Pi(s,e,t){return s.size===0?!1:Dh(s,e)}function Dh(s,e,t){const r=v.parentNode(e);return r?s.has(r):!1}function Di(s,e){return s.size===0?!1:Eo(s,e)}function Eo(s,e){const t=v.parentNode(e);return t?s.has(t)?!0:Eo(s,t):!1}let Ye;function Lh(s){Ye=s}function Th(){Ye=void 0}const O=s=>Ye?(...t)=>{try{return s(...t)}catch(r){if(Ye&&Ye(r)===!0)return;throw r}}:s,be=[];function lt(s){try{if(\"composedPath\"in s){const e=s.composedPath();if(e.length)return e[0]}else if(\"path\"in s&&s.path.length)return s.path[0]}catch(e){}return s&&s.target}function $o(s,e){const t=new kh;be.push(t),t.init(s);const r=new(wo())(O(t.processMutations.bind(t)));return r.observe(e,{attributes:!0,attributeOldValue:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0}),r}function _h({mousemoveCb:s,sampling:e,doc:t,mirror:r}){if(e.mousemove===!1)return()=>{};const i=typeof e.mousemove==\"number\"?e.mousemove:50,n=typeof e.mousemoveCallback==\"number\"?e.mousemoveCallback:500;let o=[],l;const a=st(O(h=>{const d=Date.now()-l;s(o.map(m=>(m.timeOffset-=d,m)),h),o=[],l=null}),n),u=O(st(O(h=>{const d=lt(h),{clientX:m,clientY:g}=as(h)?h.changedTouches[0]:h;l||(l=Qt()),o.push({x:m,y:g,id:r.getId(d),timeOffset:Qt()-l}),a(typeof DragEvent!=\"undefined\"&&h instanceof DragEvent?I.Drag:h instanceof MouseEvent?I.MouseMove:I.TouchMove)}),i,{trailing:!1})),c=[J(\"mousemove\",u,t),J(\"touchmove\",u,t),J(\"drag\",u,t)];return O(()=>{c.forEach(h=>h())})}function Fh({mouseInteractionCb:s,doc:e,mirror:t,blockClass:r,blockSelector:i,sampling:n}){if(n.mouseInteraction===!1)return()=>{};const o=n.mouseInteraction===!0||n.mouseInteraction===void 0?{}:n.mouseInteraction,l=[];let a=null;const u=c=>h=>{const d=lt(h);if(X(d,r,i,!0))return;let m=null,g=c;if(\"pointerType\"in h){switch(h.pointerType){case\"mouse\":m=he.Mouse;break;case\"touch\":m=he.Touch;break;case\"pen\":m=he.Pen;break}m===he.Touch?K[c]===K.MouseDown?g=\"TouchStart\":K[c]===K.MouseUp&&(g=\"TouchEnd\"):he.Pen}else as(h)&&(m=he.Touch);m!==null?(a=m,(g.startsWith(\"Touch\")&&m===he.Touch||g.startsWith(\"Mouse\")&&m===he.Mouse)&&(m=null)):K[c]===K.Click&&(m=a,a=null);const p=as(h)?h.changedTouches[0]:h;if(!p)return;const f=t.getId(d),{clientX:S,clientY:b}=p;O(s)(x({type:K[g],id:f,x:S,y:b},m!==null&&{pointerType:m}))};return Object.keys(K).filter(c=>Number.isNaN(Number(c))&&!c.endsWith(\"_Departed\")&&o[c]!==!1).forEach(c=>{let h=Ce(c);const d=u(c);if(window.PointerEvent)switch(K[c]){case K.MouseDown:case K.MouseUp:h=h.replace(\"mouse\",\"pointer\");break;case K.TouchStart:case K.TouchEnd:return}l.push(J(h,d,e))}),O(()=>{l.forEach(c=>c())})}function No({scrollCb:s,doc:e,mirror:t,blockClass:r,blockSelector:i,sampling:n}){const o=O(st(O(l=>{const a=lt(l);if(!a||X(a,r,i,!0))return;const u=t.getId(a);if(a===e&&e.defaultView){const c=So(e.defaultView);s({id:u,x:c.left,y:c.top})}else s({id:u,x:a.scrollLeft,y:a.scrollTop})}),n.scroll||100));return J(\"scroll\",o,e)}function Uh({viewportResizeCb:s},{win:e}){let t=-1,r=-1;const i=O(st(O(()=>{const n=bo(),o=Co();(t!==n||r!==o)&&(s({width:Number(o),height:Number(n)}),t=n,r=o)}),200));return J(\"resize\",i,e)}const Bh=[\"INPUT\",\"TEXTAREA\",\"SELECT\"],Li=new WeakMap;function zh({inputCb:s,doc:e,mirror:t,blockClass:r,blockSelector:i,ignoreClass:n,ignoreSelector:o,maskInputOptions:l,maskInputFn:a,sampling:u,userTriggeredOnInput:c}){function h(b){let y=lt(b);const C=b.isTrusted,N=y&&y.tagName;if(y&&N===\"OPTION\"&&(y=v.parentElement(y)),!y||!N||Bh.indexOf(N)<0||X(y,r,i,!0)||y.classList.contains(n)||o&&y.matches(o))return;let D=y.value,H=!1;const _=fs(y)||\"\";_===\"radio\"||_===\"checkbox\"?H=y.checked:(l[N.toLowerCase()]||l[_])&&(D=hs({element:y,maskInputOptions:l,tagName:N,type:_,value:D,maskInputFn:a})),d(y,c?{text:D,isChecked:H,userTriggered:C}:{text:D,isChecked:H});const G=y.name;_===\"radio\"&&G&&H&&e.querySelectorAll(\\`input[type=\"radio\"][name=\"\\${G}\"]\\`).forEach(Y=>{if(Y!==y){const Q=Y.value;d(Y,c?{text:Q,isChecked:!H,userTriggered:!1}:{text:Q,isChecked:!H})}})}function d(b,y){const C=Li.get(b);if(!C||C.text!==y.text||C.isChecked!==y.isChecked){Li.set(b,y);const N=t.getId(b);O(s)(ee(x({},y),{id:N}))}}const g=(u.input===\"last\"?[\"change\"]:[\"input\",\"change\"]).map(b=>J(b,O(h),e)),p=e.defaultView;if(!p)return()=>{g.forEach(b=>b())};const f=p.Object.getOwnPropertyDescriptor(p.HTMLInputElement.prototype,\"value\"),S=[[p.HTMLInputElement.prototype,\"value\"],[p.HTMLInputElement.prototype,\"checked\"],[p.HTMLSelectElement.prototype,\"value\"],[p.HTMLTextAreaElement.prototype,\"value\"],[p.HTMLSelectElement.prototype,\"selectedIndex\"],[p.HTMLOptionElement.prototype,\"selected\"]];return f&&f.set&&g.push(...S.map(b=>hr(b[0],b[1],{set(){O(h)({target:this,isTrusted:!1})}},!1,p))),O(()=>{g.forEach(b=>b())})}function qt(s){const e=[];function t(r,i){if(Pt(\"CSSGroupingRule\")&&r.parentRule instanceof CSSGroupingRule||Pt(\"CSSMediaRule\")&&r.parentRule instanceof CSSMediaRule||Pt(\"CSSSupportsRule\")&&r.parentRule instanceof CSSSupportsRule||Pt(\"CSSConditionRule\")&&r.parentRule instanceof CSSConditionRule){const o=Array.from(r.parentRule.cssRules).indexOf(r);i.unshift(o)}else if(r.parentStyleSheet){const o=Array.from(r.parentStyleSheet.cssRules).indexOf(r);i.unshift(o)}return i}return t(s,e)}function de(s,e,t){let r,i;return s?(s.ownerNode?r=e.getId(s.ownerNode):i=t.getId(s),{styleId:i,id:r}):{}}function Wh({styleSheetRuleCb:s,mirror:e,stylesheetManager:t},{win:r}){if(!r.CSSStyleSheet||!r.CSSStyleSheet.prototype)return()=>{};const i=r.CSSStyleSheet.prototype.insertRule;r.CSSStyleSheet.prototype.insertRule=new Proxy(i,{apply:O((c,h,d)=>{const[m,g]=d,{id:p,styleId:f}=de(h,e,t.styleMirror);return(p&&p!==-1||f&&f!==-1)&&s({id:p,styleId:f,adds:[{rule:m,index:g}]}),c.apply(h,d)})}),r.CSSStyleSheet.prototype.addRule=function(c,h,d=this.cssRules.length){const m=\\`\\${c} { \\${h} }\\`;return r.CSSStyleSheet.prototype.insertRule.apply(this,[m,d])};const n=r.CSSStyleSheet.prototype.deleteRule;r.CSSStyleSheet.prototype.deleteRule=new Proxy(n,{apply:O((c,h,d)=>{const[m]=d,{id:g,styleId:p}=de(h,e,t.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,removes:[{index:m}]}),c.apply(h,d)})}),r.CSSStyleSheet.prototype.removeRule=function(c){return r.CSSStyleSheet.prototype.deleteRule.apply(this,[c])};let o;r.CSSStyleSheet.prototype.replace&&(o=r.CSSStyleSheet.prototype.replace,r.CSSStyleSheet.prototype.replace=new Proxy(o,{apply:O((c,h,d)=>{const[m]=d,{id:g,styleId:p}=de(h,e,t.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,replace:m}),c.apply(h,d)})}));let l;r.CSSStyleSheet.prototype.replaceSync&&(l=r.CSSStyleSheet.prototype.replaceSync,r.CSSStyleSheet.prototype.replaceSync=new Proxy(l,{apply:O((c,h,d)=>{const[m]=d,{id:g,styleId:p}=de(h,e,t.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,replaceSync:m}),c.apply(h,d)})}));const a={};Dt(\"CSSGroupingRule\")?a.CSSGroupingRule=r.CSSGroupingRule:(Dt(\"CSSMediaRule\")&&(a.CSSMediaRule=r.CSSMediaRule),Dt(\"CSSConditionRule\")&&(a.CSSConditionRule=r.CSSConditionRule),Dt(\"CSSSupportsRule\")&&(a.CSSSupportsRule=r.CSSSupportsRule));const u={};return Object.entries(a).forEach(([c,h])=>{u[c]={insertRule:h.prototype.insertRule,deleteRule:h.prototype.deleteRule},h.prototype.insertRule=new Proxy(u[c].insertRule,{apply:O((d,m,g)=>{const[p,f]=g,{id:S,styleId:b}=de(m.parentStyleSheet,e,t.styleMirror);return(S&&S!==-1||b&&b!==-1)&&s({id:S,styleId:b,adds:[{rule:p,index:[...qt(m),f||0]}]}),d.apply(m,g)})}),h.prototype.deleteRule=new Proxy(u[c].deleteRule,{apply:O((d,m,g)=>{const[p]=g,{id:f,styleId:S}=de(m.parentStyleSheet,e,t.styleMirror);return(f&&f!==-1||S&&S!==-1)&&s({id:f,styleId:S,removes:[{index:[...qt(m),p]}]}),d.apply(m,g)})})}),O(()=>{r.CSSStyleSheet.prototype.insertRule=i,r.CSSStyleSheet.prototype.deleteRule=n,o&&(r.CSSStyleSheet.prototype.replace=o),l&&(r.CSSStyleSheet.prototype.replaceSync=l),Object.entries(a).forEach(([c,h])=>{h.prototype.insertRule=u[c].insertRule,h.prototype.deleteRule=u[c].deleteRule})})}function ko({mirror:s,stylesheetManager:e},t){var r,i,n;let o=null;t.nodeName===\"#document\"?o=s.getId(t):o=s.getId(v.host(t));const l=t.nodeName===\"#document\"?(r=t.defaultView)==null?void 0:r.Document:(n=(i=t.ownerDocument)==null?void 0:i.defaultView)==null?void 0:n.ShadowRoot,a=l!=null&&l.prototype?Object.getOwnPropertyDescriptor(l==null?void 0:l.prototype,\"adoptedStyleSheets\"):void 0;return o===null||o===-1||!l||!a?()=>{}:(Object.defineProperty(t,\"adoptedStyleSheets\",{configurable:a.configurable,enumerable:a.enumerable,get(){var u;return(u=a.get)==null?void 0:u.call(this)},set(u){var c;const h=(c=a.set)==null?void 0:c.call(this,u);if(o!==null&&o!==-1)try{e.adoptStyleSheets(u,o)}catch(d){}return h}}),O(()=>{Object.defineProperty(t,\"adoptedStyleSheets\",{configurable:a.configurable,enumerable:a.enumerable,get:a.get,set:a.set})}))}function Gh({styleDeclarationCb:s,mirror:e,ignoreCSSAttributes:t,stylesheetManager:r},{win:i}){const n=i.CSSStyleDeclaration.prototype.setProperty;i.CSSStyleDeclaration.prototype.setProperty=new Proxy(n,{apply:O((l,a,u)=>{var c;const[h,d,m]=u;if(t.has(h))return n.apply(a,[h,d,m]);const{id:g,styleId:p}=de((c=a.parentRule)==null?void 0:c.parentStyleSheet,e,r.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,set:{property:h,value:d,priority:m},index:qt(a.parentRule)}),l.apply(a,u)})});const o=i.CSSStyleDeclaration.prototype.removeProperty;return i.CSSStyleDeclaration.prototype.removeProperty=new Proxy(o,{apply:O((l,a,u)=>{var c;const[h]=u;if(t.has(h))return o.apply(a,[h]);const{id:d,styleId:m}=de((c=a.parentRule)==null?void 0:c.parentStyleSheet,e,r.styleMirror);return(d&&d!==-1||m&&m!==-1)&&s({id:d,styleId:m,remove:{property:h},index:qt(a.parentRule)}),l.apply(a,u)})}),O(()=>{i.CSSStyleDeclaration.prototype.setProperty=n,i.CSSStyleDeclaration.prototype.removeProperty=o})}function Vh({mediaInteractionCb:s,blockClass:e,blockSelector:t,mirror:r,sampling:i,doc:n}){const o=O(a=>st(O(u=>{const c=lt(u);if(!c||X(c,e,t,!0))return;const{currentTime:h,volume:d,muted:m,playbackRate:g,loop:p}=c;s({type:a,id:r.getId(c),currentTime:h,volume:d,muted:m,playbackRate:g,loop:p})}),i.media||500)),l=[J(\"play\",o(Ae.Play),n),J(\"pause\",o(Ae.Pause),n),J(\"seeked\",o(Ae.Seeked),n),J(\"volumechange\",o(Ae.VolumeChange),n),J(\"ratechange\",o(Ae.RateChange),n)];return O(()=>{l.forEach(a=>a())})}function jh({fontCb:s,doc:e}){const t=e.defaultView;if(!t)return()=>{};const r=[],i=new WeakMap,n=t.FontFace;t.FontFace=function(a,u,c){const h=new n(a,u,c);return i.set(h,{family:a,buffer:typeof u!=\"string\",descriptors:c,fontSource:typeof u==\"string\"?u:JSON.stringify(Array.from(new Uint8Array(u)))}),h};const o=Fe(e.fonts,\"add\",function(l){return function(a){return setTimeout(O(()=>{const u=i.get(a);u&&(s(u),i.delete(a))}),0),l.apply(this,[a])}});return r.push(()=>{t.FontFace=n}),r.push(o),O(()=>{r.forEach(l=>l())})}function Hh(s){const{doc:e,mirror:t,blockClass:r,blockSelector:i,selectionCb:n}=s;let o=!0;const l=O(()=>{const a=e.getSelection();if(!a||o&&(a!=null&&a.isCollapsed))return;o=a.isCollapsed||!1;const u=[],c=a.rangeCount||0;for(let h=0;h<c;h++){const d=a.getRangeAt(h),{startContainer:m,startOffset:g,endContainer:p,endOffset:f}=d;X(m,r,i,!0)||X(p,r,i,!0)||u.push({start:t.getId(m),startOffset:g,end:t.getId(p),endOffset:f})}n({ranges:u})});return l(),J(\"selectionchange\",l)}function Yh({doc:s,customElementCb:e}){const t=s.defaultView;return!t||!t.customElements?()=>{}:Fe(t.customElements,\"define\",function(i){return function(n,o,l){try{e({define:{name:n}})}catch(a){console.warn(\\`Custom element callback failed for \\${n}\\`)}return i.apply(this,[n,o,l])}})}function Zh(s,e){const{mutationCb:t,mousemoveCb:r,mouseInteractionCb:i,scrollCb:n,viewportResizeCb:o,inputCb:l,mediaInteractionCb:a,styleSheetRuleCb:u,styleDeclarationCb:c,canvasMutationCb:h,fontCb:d,selectionCb:m,customElementCb:g}=s;s.mutationCb=(...p)=>{e.mutation&&e.mutation(...p),t(...p)},s.mousemoveCb=(...p)=>{e.mousemove&&e.mousemove(...p),r(...p)},s.mouseInteractionCb=(...p)=>{e.mouseInteraction&&e.mouseInteraction(...p),i(...p)},s.scrollCb=(...p)=>{e.scroll&&e.scroll(...p),n(...p)},s.viewportResizeCb=(...p)=>{e.viewportResize&&e.viewportResize(...p),o(...p)},s.inputCb=(...p)=>{e.input&&e.input(...p),l(...p)},s.mediaInteractionCb=(...p)=>{e.mediaInteaction&&e.mediaInteaction(...p),a(...p)},s.styleSheetRuleCb=(...p)=>{e.styleSheetRule&&e.styleSheetRule(...p),u(...p)},s.styleDeclarationCb=(...p)=>{e.styleDeclaration&&e.styleDeclaration(...p),c(...p)},s.canvasMutationCb=(...p)=>{e.canvasMutation&&e.canvasMutation(...p),h(...p)},s.fontCb=(...p)=>{e.font&&e.font(...p),d(...p)},s.selectionCb=(...p)=>{e.selection&&e.selection(...p),m(...p)},s.customElementCb=(...p)=>{e.customElement&&e.customElement(...p),g(...p)}}function Jh(s,e={}){const t=s.doc.defaultView;if(!t)return()=>{};Zh(s,e);let r;s.recordDOM&&(r=$o(s,s.doc));const i=_h(s),n=Fh(s),o=No(s),l=Uh(s,{win:t}),a=zh(s),u=Vh(s);let c=()=>{},h=()=>{},d=()=>{},m=()=>{};s.recordDOM&&(c=Wh(s,{win:t}),h=ko(s,s.doc),d=Gh(s,{win:t}),s.collectFonts&&(m=jh(s)));const g=Hh(s),p=Yh(s),f=[];for(const S of s.plugins)f.push(S.observer(S.callback,t,S.options));return O(()=>{be.forEach(S=>S.reset()),r==null||r.disconnect(),i(),n(),o(),l(),a(),u(),c(),h(),d(),m(),g(),p(),f.forEach(S=>S())})}function Pt(s){return typeof window[s]!=\"undefined\"}function Dt(s){return!!(typeof window[s]!=\"undefined\"&&window[s].prototype&&\"insertRule\"in window[s].prototype&&\"deleteRule\"in window[s].prototype)}class Ti{constructor(e){w(this,\"iframeIdToRemoteIdMap\",new WeakMap),w(this,\"iframeRemoteIdToIdMap\",new WeakMap),this.generateIdFn=e}getId(e,t,r,i){const n=r||this.getIdToRemoteIdMap(e),o=i||this.getRemoteIdToIdMap(e);let l=n.get(t);return l||(l=this.generateIdFn(),n.set(t,l),o.set(l,t)),l}getIds(e,t){const r=this.getIdToRemoteIdMap(e),i=this.getRemoteIdToIdMap(e);return t.map(n=>this.getId(e,n,r,i))}getRemoteId(e,t,r){const i=r||this.getRemoteIdToIdMap(e);if(typeof t!=\"number\")return t;const n=i.get(t);return n||-1}getRemoteIds(e,t){const r=this.getRemoteIdToIdMap(e);return t.map(i=>this.getRemoteId(e,i,r))}reset(e){if(!e){this.iframeIdToRemoteIdMap=new WeakMap,this.iframeRemoteIdToIdMap=new WeakMap;return}this.iframeIdToRemoteIdMap.delete(e),this.iframeRemoteIdToIdMap.delete(e)}getIdToRemoteIdMap(e){let t=this.iframeIdToRemoteIdMap.get(e);return t||(t=new Map,this.iframeIdToRemoteIdMap.set(e,t)),t}getRemoteIdToIdMap(e){let t=this.iframeRemoteIdToIdMap.get(e);return t||(t=new Map,this.iframeRemoteIdToIdMap.set(e,t)),t}}class Xh{constructor(e){w(this,\"iframes\",new WeakMap),w(this,\"crossOriginIframeMap\",new WeakMap),w(this,\"crossOriginIframeMirror\",new Ti(Yi)),w(this,\"crossOriginIframeStyleMirror\"),w(this,\"crossOriginIframeRootIdMap\",new WeakMap),w(this,\"mirror\"),w(this,\"mutationCb\"),w(this,\"wrappedEmit\"),w(this,\"loadListener\"),w(this,\"stylesheetManager\"),w(this,\"recordCrossOriginIframes\"),this.mutationCb=e.mutationCb,this.wrappedEmit=e.wrappedEmit,this.stylesheetManager=e.stylesheetManager,this.recordCrossOriginIframes=e.recordCrossOriginIframes,this.crossOriginIframeStyleMirror=new Ti(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror)),this.mirror=e.mirror,this.recordCrossOriginIframes&&window.addEventListener(\"message\",this.handleMessage.bind(this))}addIframe(e){this.iframes.set(e,!0),e.contentWindow&&this.crossOriginIframeMap.set(e.contentWindow,e)}addLoadListener(e){this.loadListener=e}attachIframe(e,t){var r,i;this.mutationCb({adds:[{parentId:this.mirror.getId(e),nextId:null,node:t}],removes:[],texts:[],attributes:[],isAttachIframe:!0}),this.recordCrossOriginIframes&&((r=e.contentWindow)==null||r.addEventListener(\"message\",this.handleMessage.bind(this))),(i=this.loadListener)==null||i.call(this,e),e.contentDocument&&e.contentDocument.adoptedStyleSheets&&e.contentDocument.adoptedStyleSheets.length>0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))}handleMessage(e){const t=e;if(t.data.type!==\"rrweb\"||t.origin!==t.data.origin||!e.source)return;const i=this.crossOriginIframeMap.get(e.source);if(!i)return;const n=this.transformCrossOriginEvent(i,t.data.event);n&&this.wrappedEmit(n,t.data.isCheckout)}transformCrossOriginEvent(e,t){var r;switch(t.type){case R.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(t.data.node,e);const i=t.data.node.id;return this.crossOriginIframeRootIdMap.set(e,i),this.patchRootIdOnNode(t.data.node,i),{timestamp:t.timestamp,type:R.IncrementalSnapshot,data:{source:I.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:t.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case R.Meta:case R.Load:case R.DomContentLoaded:return!1;case R.Plugin:return t;case R.Custom:return this.replaceIds(t.data.payload,e,[\"id\",\"parentId\",\"previousId\",\"nextId\"]),t;case R.IncrementalSnapshot:switch(t.data.source){case I.Mutation:return t.data.adds.forEach(i=>{this.replaceIds(i,e,[\"parentId\",\"nextId\",\"previousId\"]),this.replaceIdOnNode(i.node,e);const n=this.crossOriginIframeRootIdMap.get(e);n&&this.patchRootIdOnNode(i.node,n)}),t.data.removes.forEach(i=>{this.replaceIds(i,e,[\"parentId\",\"id\"])}),t.data.attributes.forEach(i=>{this.replaceIds(i,e,[\"id\"])}),t.data.texts.forEach(i=>{this.replaceIds(i,e,[\"id\"])}),t;case I.Drag:case I.TouchMove:case I.MouseMove:return t.data.positions.forEach(i=>{this.replaceIds(i,e,[\"id\"])}),t;case I.ViewportResize:return!1;case I.MediaInteraction:case I.MouseInteraction:case I.Scroll:case I.CanvasMutation:case I.Input:return this.replaceIds(t.data,e,[\"id\"]),t;case I.StyleSheetRule:case I.StyleDeclaration:return this.replaceIds(t.data,e,[\"id\"]),this.replaceStyleIds(t.data,e,[\"styleId\"]),t;case I.Font:return t;case I.Selection:return t.data.ranges.forEach(i=>{this.replaceIds(i,e,[\"start\",\"end\"])}),t;case I.AdoptedStyleSheet:return this.replaceIds(t.data,e,[\"id\"]),this.replaceStyleIds(t.data,e,[\"styleIds\"]),(r=t.data.styles)==null||r.forEach(i=>{this.replaceStyleIds(i,e,[\"styleId\"])}),t}}return!1}replace(e,t,r,i){for(const n of i)!Array.isArray(t[n])&&typeof t[n]!=\"number\"||(Array.isArray(t[n])?t[n]=e.getIds(r,t[n]):t[n]=e.getId(r,t[n]));return t}replaceIds(e,t,r){return this.replace(this.crossOriginIframeMirror,e,t,r)}replaceStyleIds(e,t,r){return this.replace(this.crossOriginIframeStyleMirror,e,t,r)}replaceIdOnNode(e,t){this.replaceIds(e,t,[\"id\",\"rootId\"]),\"childNodes\"in e&&e.childNodes.forEach(r=>{this.replaceIdOnNode(r,t)})}patchRootIdOnNode(e,t){e.type!==Mo.Document&&!e.rootId&&(e.rootId=t),\"childNodes\"in e&&e.childNodes.forEach(r=>{this.patchRootIdOnNode(r,t)})}}class Kh{constructor(e){w(this,\"shadowDoms\",new WeakSet),w(this,\"mutationCb\"),w(this,\"scrollCb\"),w(this,\"bypassOptions\"),w(this,\"mirror\"),w(this,\"restoreHandlers\",[]),this.mutationCb=e.mutationCb,this.scrollCb=e.scrollCb,this.bypassOptions=e.bypassOptions,this.mirror=e.mirror,this.init()}init(){this.reset(),this.patchAttachShadow(Element,document)}addShadowRoot(e,t){if(!He(e)||this.shadowDoms.has(e))return;this.shadowDoms.add(e);const r=$o(ee(x({},this.bypassOptions),{doc:t,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(()=>r.disconnect()),this.restoreHandlers.push(No(ee(x({},this.bypassOptions),{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(()=>{e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&this.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,this.mirror.getId(v.host(e))),this.restoreHandlers.push(ko({mirror:this.mirror,stylesheetManager:this.bypassOptions.stylesheetManager},e))},0)}observeAttachShadow(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)}patchAttachShadow(e,t){const r=this;this.restoreHandlers.push(Fe(e.prototype,\"attachShadow\",function(i){return function(n){const o=i.call(this,n),l=v.shadowRoot(this);return l&&Ao(this)&&r.addShadowRoot(l,t),o}}))}reset(){this.restoreHandlers.forEach(e=>{try{e()}catch(t){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet}}var $e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",Qh=typeof Uint8Array==\"undefined\"?[]:new Uint8Array(256);for(var Lt=0;Lt<$e.length;Lt++)Qh[$e.charCodeAt(Lt)]=Lt;var qh=function(s){var e=new Uint8Array(s),t,r=e.length,i=\"\";for(t=0;t<r;t+=3)i+=$e[e[t]>>2],i+=$e[(e[t]&3)<<4|e[t+1]>>4],i+=$e[(e[t+1]&15)<<2|e[t+2]>>6],i+=$e[e[t+2]&63];return r%3===2?i=i.substring(0,i.length-1)+\"=\":r%3===1&&(i=i.substring(0,i.length-2)+\"==\"),i};const _i=new Map;function ef(s,e){let t=_i.get(s);return t||(t=new Map,_i.set(s,t)),t.has(e)||t.set(e,[]),t.get(e)}const Po=(s,e,t)=>{if(!s||!(Lo(s,e)||typeof s==\"object\"))return;const r=s.constructor.name,i=ef(t,r);let n=i.indexOf(s);return n===-1&&(n=i.length,i.push(s)),n};function Bt(s,e,t){if(s instanceof Array)return s.map(r=>Bt(r,e,t));if(s===null)return s;if(s instanceof Float32Array||s instanceof Float64Array||s instanceof Int32Array||s instanceof Uint32Array||s instanceof Uint8Array||s instanceof Uint16Array||s instanceof Int16Array||s instanceof Int8Array||s instanceof Uint8ClampedArray)return{rr_type:s.constructor.name,args:[Object.values(s)]};if(s instanceof ArrayBuffer){const r=s.constructor.name,i=qh(s);return{rr_type:r,base64:i}}else{if(s instanceof DataView)return{rr_type:s.constructor.name,args:[Bt(s.buffer,e,t),s.byteOffset,s.byteLength]};if(s instanceof HTMLImageElement){const r=s.constructor.name,{src:i}=s;return{rr_type:r,src:i}}else if(s instanceof HTMLCanvasElement){const r=\"HTMLImageElement\",i=s.toDataURL();return{rr_type:r,src:i}}else{if(s instanceof ImageData)return{rr_type:s.constructor.name,args:[Bt(s.data,e,t),s.width,s.height]};if(Lo(s,e)||typeof s==\"object\"){const r=s.constructor.name,i=Po(s,e,t);return{rr_type:r,index:i}}}}return s}const Do=(s,e,t)=>s.map(r=>Bt(r,e,t)),Lo=(s,e)=>!![\"WebGLActiveInfo\",\"WebGLBuffer\",\"WebGLFramebuffer\",\"WebGLProgram\",\"WebGLRenderbuffer\",\"WebGLShader\",\"WebGLShaderPrecisionFormat\",\"WebGLTexture\",\"WebGLUniformLocation\",\"WebGLVertexArrayObject\",\"WebGLVertexArrayObjectOES\"].filter(i=>typeof e[i]==\"function\").find(i=>s instanceof e[i]);function tf(s,e,t,r){const i=[],n=Object.getOwnPropertyNames(e.CanvasRenderingContext2D.prototype);for(const o of n)try{if(typeof e.CanvasRenderingContext2D.prototype[o]!=\"function\")continue;const l=Fe(e.CanvasRenderingContext2D.prototype,o,function(a){return function(...u){return X(this.canvas,t,r,!0)||setTimeout(()=>{const c=Do(u,e,this);s(this.canvas,{type:_e[\"2D\"],property:o,args:c})},0),a.apply(this,u)}});i.push(l)}catch(l){const a=hr(e.CanvasRenderingContext2D.prototype,o,{set(u){s(this.canvas,{type:_e[\"2D\"],property:o,args:[u],setter:!0})}});i.push(a)}return()=>{i.forEach(o=>o())}}function rf(s){return s===\"experimental-webgl\"?\"webgl\":s}function Fi(s,e,t,r){const i=[];try{const n=Fe(s.HTMLCanvasElement.prototype,\"getContext\",function(o){return function(l,...a){if(!X(this,e,t,!0)){const u=rf(l);if(\"__context\"in this||(this.__context=u),r&&[\"webgl\",\"webgl2\"].includes(u))if(a[0]&&typeof a[0]==\"object\"){const c=a[0];c.preserveDrawingBuffer||(c.preserveDrawingBuffer=!0)}else a.splice(0,1,{preserveDrawingBuffer:!0})}return o.apply(this,[l,...a])}});i.push(n)}catch(n){console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\")}return()=>{i.forEach(n=>n())}}function Ui(s,e,t,r,i,n){const o=[],l=Object.getOwnPropertyNames(s);for(const a of l)if(![\"isContextLost\",\"canvas\",\"drawingBufferWidth\",\"drawingBufferHeight\"].includes(a))try{if(typeof s[a]!=\"function\")continue;const u=Fe(s,a,function(c){return function(...h){const d=c.apply(this,h);if(Po(d,n,this),\"tagName\"in this.canvas&&!X(this.canvas,r,i,!0)){const m=Do(h,n,this),g={type:e,property:a,args:m};t(this.canvas,g)}return d}});o.push(u)}catch(u){const c=hr(s,a,{set(h){t(this.canvas,{type:e,property:a,args:[h],setter:!0})}});o.push(c)}return o}function sf(s,e,t,r){const i=[];return i.push(...Ui(e.WebGLRenderingContext.prototype,_e.WebGL,s,t,r,e)),typeof e.WebGL2RenderingContext!=\"undefined\"&&i.push(...Ui(e.WebGL2RenderingContext.prototype,_e.WebGL2,s,t,r,e)),()=>{i.forEach(n=>n())}}const To=\"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\",nf=s=>Uint8Array.from(atob(s),e=>e.charCodeAt(0)),Bi=typeof window!=\"undefined\"&&window.Blob&&new Blob([nf(To)],{type:\"text/javascript;charset=utf-8\"});function of(s){let e;try{if(e=Bi&&(window.URL||window.webkitURL).createObjectURL(Bi),!e)throw\"\";const t=new Worker(e,{name:s==null?void 0:s.name});return t.addEventListener(\"error\",()=>{(window.URL||window.webkitURL).revokeObjectURL(e)}),t}catch(t){return new Worker(\"data:text/javascript;base64,\"+To,{name:s==null?void 0:s.name})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}class af{constructor(e){w(this,\"pendingCanvasMutations\",new Map),w(this,\"rafStamps\",{latestId:0,invokeId:null}),w(this,\"mirror\"),w(this,\"mutationCb\"),w(this,\"resetObservers\"),w(this,\"frozen\",!1),w(this,\"locked\",!1),w(this,\"processMutation\",(a,u)=>{(this.rafStamps.invokeId&&this.rafStamps.latestId!==this.rafStamps.invokeId||!this.rafStamps.invokeId)&&(this.rafStamps.invokeId=this.rafStamps.latestId),this.pendingCanvasMutations.has(a)||this.pendingCanvasMutations.set(a,[]),this.pendingCanvasMutations.get(a).push(u)});const{sampling:t=\"all\",win:r,blockClass:i,blockSelector:n,recordCanvas:o,dataURLOptions:l}=e;this.mutationCb=e.mutationCb,this.mirror=e.mirror,o&&t===\"all\"&&this.initCanvasMutationObserver(r,i,n),o&&typeof t==\"number\"&&this.initCanvasFPSObserver(t,r,i,n,{dataURLOptions:l})}reset(){this.pendingCanvasMutations.clear(),this.resetObservers&&this.resetObservers()}freeze(){this.frozen=!0}unfreeze(){this.frozen=!1}lock(){this.locked=!0}unlock(){this.locked=!1}initCanvasFPSObserver(e,t,r,i,n){const o=Fi(t,r,i,!0),l=new Map,a=new of;a.onmessage=g=>{const{id:p}=g.data;if(l.set(p,!1),!(\"base64\"in g.data))return;const{base64:f,type:S,width:b,height:y}=g.data;this.mutationCb({id:p,type:_e[\"2D\"],commands:[{property:\"clearRect\",args:[0,0,b,y]},{property:\"drawImage\",args:[{rr_type:\"ImageBitmap\",args:[{rr_type:\"Blob\",data:[{rr_type:\"ArrayBuffer\",base64:f}],type:S}]},0,0]}]})};const u=1e3/e;let c=0,h;const d=()=>{const g=[];return t.document.querySelectorAll(\"canvas\").forEach(p=>{X(p,r,i,!0)||g.push(p)}),g},m=g=>{if(c&&g-c<u){h=requestAnimationFrame(m);return}c=g,d().forEach(async p=>{var f;const S=this.mirror.getId(p);if(l.get(S)||p.width===0||p.height===0)return;if(l.set(S,!0),[\"webgl\",\"webgl2\"].includes(p.__context)){const y=p.getContext(p.__context);((f=y==null?void 0:y.getContextAttributes())==null?void 0:f.preserveDrawingBuffer)===!1&&y.clear(y.COLOR_BUFFER_BIT)}const b=await createImageBitmap(p);a.postMessage({id:S,bitmap:b,width:p.width,height:p.height,dataURLOptions:n.dataURLOptions},[b])}),h=requestAnimationFrame(m)};h=requestAnimationFrame(m),this.resetObservers=()=>{o(),cancelAnimationFrame(h)}}initCanvasMutationObserver(e,t,r){this.startRAFTimestamping(),this.startPendingCanvasMutationFlusher();const i=Fi(e,t,r,!1),n=tf(this.processMutation.bind(this),e,t,r),o=sf(this.processMutation.bind(this),e,t,r);this.resetObservers=()=>{i(),n(),o()}}startPendingCanvasMutationFlusher(){requestAnimationFrame(()=>this.flushPendingCanvasMutations())}startRAFTimestamping(){const e=t=>{this.rafStamps.latestId=t,requestAnimationFrame(e)};requestAnimationFrame(e)}flushPendingCanvasMutations(){this.pendingCanvasMutations.forEach((e,t)=>{const r=this.mirror.getId(t);this.flushPendingCanvasMutationFor(t,r)}),requestAnimationFrame(()=>this.flushPendingCanvasMutations())}flushPendingCanvasMutationFor(e,t){if(this.frozen||this.locked)return;const r=this.pendingCanvasMutations.get(e);if(!r||t===-1)return;const i=r.map(o=>{const u=o,{type:l}=u;return xe(u,[\"type\"])}),{type:n}=r[0];this.mutationCb({id:t,type:n,commands:i}),this.pendingCanvasMutations.delete(e)}}class lf{constructor(e){w(this,\"trackedLinkElements\",new WeakSet),w(this,\"mutationCb\"),w(this,\"adoptedStyleSheetCb\"),w(this,\"styleMirror\",new Mh),this.mutationCb=e.mutationCb,this.adoptedStyleSheetCb=e.adoptedStyleSheetCb}attachLinkElement(e,t){\"_cssText\"in t.attributes&&this.mutationCb({adds:[],removes:[],texts:[],attributes:[{id:t.id,attributes:t.attributes}]}),this.trackLinkElement(e)}trackLinkElement(e){this.trackedLinkElements.has(e)||(this.trackedLinkElements.add(e),this.trackStylesheetInLinkElement(e))}adoptStyleSheets(e,t){if(e.length===0)return;const r={id:t,styleIds:[]},i=[];for(const n of e){let o;this.styleMirror.has(n)?o=this.styleMirror.getId(n):(o=this.styleMirror.add(n),i.push({styleId:o,rules:Array.from(n.rules||CSSRule,(l,a)=>({rule:Vi(l,n.href),index:a}))})),r.styleIds.push(o)}i.length>0&&(r.styles=i),this.adoptedStyleSheetCb(r)}reset(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet}trackStylesheetInLinkElement(e){}}class uf{constructor(){w(this,\"nodeMap\",new WeakMap),w(this,\"active\",!1)}inOtherBuffer(e,t){const r=this.nodeMap.get(e);return r&&Array.from(r).some(i=>i!==t)}add(e,t){this.active||(this.active=!0,requestAnimationFrame(()=>{this.nodeMap=new WeakMap,this.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(t))}destroy(){}}let W,zt,Er,er=!1;try{if(Array.from([1],s=>s*2)[0]!==2){const s=document.createElement(\"iframe\");document.body.appendChild(s),Array.from=((Gs=s.contentWindow)==null?void 0:Gs.Array.from)||Array.from,document.body.removeChild(s)}}catch(s){console.debug(\"Unable to override Array.from\",s)}const se=ua();function ut(s={}){const{emit:e,checkoutEveryNms:t,checkoutEveryNth:r,blockClass:i=\"rr-block\",blockSelector:n=null,ignoreClass:o=\"rr-ignore\",ignoreSelector:l=null,maskTextClass:a=\"rr-mask\",maskTextSelector:u=null,inlineStylesheet:c=!0,maskAllInputs:h,maskInputOptions:d,slimDOMOptions:m,maskInputFn:g,maskTextFn:p,hooks:f,packFn:S,sampling:b={},dataURLOptions:y={},mousemoveWait:C,recordDOM:N=!0,recordCanvas:D=!1,recordCrossOriginIframes:H=!1,recordAfter:_=s.recordAfter===\"DOMContentLoaded\"?s.recordAfter:\"load\",userTriggeredOnInput:G=!1,collectFonts:Y=!1,inlineImages:Q=!1,plugins:oe,keepIframeSrcFn:A=()=>!1,ignoreCSSAttributes:Ue=new Set([]),errorHandler:Be}=s;Lh(Be);const V=H?window.parent===window:!0;let q=!1;if(!V)try{window.parent.document&&(q=!1)}catch(M){q=!0}if(V&&!e)throw new Error(\"emit function is required\");if(!V&&!q)return()=>{};C!==void 0&&b.mousemove===void 0&&(b.mousemove=C),se.reset();const ye=h===!0?{color:!0,date:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0}:d!==void 0?d:{password:!0},ae=m===!0||m===\"all\"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:m===\"all\",headMetaDescKeywords:m===\"all\",headTitleMutations:m===\"all\"}:m||{};Ah();let Ts,fr=0;const _s=M=>{for(const re of oe||[])re.eventProcessor&&(M=re.eventProcessor(M));return S&&!q&&(M=S(M)),M};W=(M,re)=>{var B;const z=M;if(z.timestamp=Qt(),(B=be[0])!=null&&B.isFrozen()&&z.type!==R.FullSnapshot&&!(z.type===R.IncrementalSnapshot&&z.data.source===I.Mutation)&&be.forEach(le=>le.unfreeze()),V)e==null||e(_s(z),re);else if(q){const le={type:\"rrweb\",event:_s(z),origin:window.location.origin,isCheckout:re};window.parent.postMessage(le,\"*\")}if(z.type===R.FullSnapshot)Ts=z,fr=0;else if(z.type===R.IncrementalSnapshot){if(z.data.source===I.Mutation&&z.data.isAttachIframe)return;fr++;const le=r&&fr>=r,k=t&&z.timestamp-Ts.timestamp>t;(le||k)&&zt(!0)}};const ct=M=>{W({type:R.IncrementalSnapshot,data:x({source:I.Mutation},M)})},Fs=M=>W({type:R.IncrementalSnapshot,data:x({source:I.Scroll},M)}),Us=M=>W({type:R.IncrementalSnapshot,data:x({source:I.CanvasMutation},M)}),_o=M=>W({type:R.IncrementalSnapshot,data:x({source:I.AdoptedStyleSheet},M)}),we=new lf({mutationCb:ct,adoptedStyleSheetCb:_o}),Se=new Xh({mirror:se,mutationCb:ct,stylesheetManager:we,recordCrossOriginIframes:H,wrappedEmit:W});for(const M of oe||[])M.getMirror&&M.getMirror({nodeMirror:se,crossOriginIframeMirror:Se.crossOriginIframeMirror,crossOriginIframeStyleMirror:Se.crossOriginIframeStyleMirror});const pr=new uf;Er=new af({recordCanvas:D,mutationCb:Us,win:window,blockClass:i,blockSelector:n,mirror:se,sampling:b.canvas,dataURLOptions:y});const ht=new Kh({mutationCb:ct,scrollCb:Fs,bypassOptions:{blockClass:i,blockSelector:n,maskTextClass:a,maskTextSelector:u,inlineStylesheet:c,maskInputOptions:ye,dataURLOptions:y,maskTextFn:p,maskInputFn:g,recordCanvas:D,inlineImages:Q,sampling:b,slimDOMOptions:ae,iframeManager:Se,stylesheetManager:we,canvasManager:Er,keepIframeSrcFn:A,processedNodeManager:pr},mirror:se});zt=(M=!1)=>{if(!N)return;W({type:R.Meta,data:{href:window.location.href,width:Co(),height:bo()}},M),we.reset(),ht.init(),be.forEach(B=>B.lock());const re=Pa(document,{mirror:se,blockClass:i,blockSelector:n,maskTextClass:a,maskTextSelector:u,inlineStylesheet:c,maskAllInputs:ye,maskTextFn:p,maskInputFn:g,slimDOM:ae,dataURLOptions:y,recordCanvas:D,inlineImages:Q,onSerialize:B=>{xo(B,se)&&Se.addIframe(B),Oo(B,se)&&we.trackLinkElement(B),ls(B)&&ht.addShadowRoot(v.shadowRoot(B),document)},onIframeLoad:(B,z)=>{Se.attachIframe(B,z),ht.observeAttachShadow(B)},onStylesheetLoad:(B,z)=>{we.attachLinkElement(B,z)},keepIframeSrcFn:A});if(!re)return console.warn(\"Failed to snapshot the document\");W({type:R.FullSnapshot,data:{node:re,initialOffset:So(window)}},M),be.forEach(B=>B.unlock()),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&we.adoptStyleSheets(document.adoptedStyleSheets,se.getId(document))};try{const M=[],re=z=>{var le;return O(Jh)({mutationCb:ct,mousemoveCb:(k,dr)=>W({type:R.IncrementalSnapshot,data:{source:dr,positions:k}}),mouseInteractionCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.MouseInteraction},k)}),scrollCb:Fs,viewportResizeCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.ViewportResize},k)}),inputCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.Input},k)}),mediaInteractionCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.MediaInteraction},k)}),styleSheetRuleCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.StyleSheetRule},k)}),styleDeclarationCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.StyleDeclaration},k)}),canvasMutationCb:Us,fontCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.Font},k)}),selectionCb:k=>{W({type:R.IncrementalSnapshot,data:x({source:I.Selection},k)})},customElementCb:k=>{W({type:R.IncrementalSnapshot,data:x({source:I.CustomElement},k)})},blockClass:i,ignoreClass:o,ignoreSelector:l,maskTextClass:a,maskTextSelector:u,maskInputOptions:ye,inlineStylesheet:c,sampling:b,recordDOM:N,recordCanvas:D,inlineImages:Q,userTriggeredOnInput:G,collectFonts:Y,doc:z,maskInputFn:g,maskTextFn:p,keepIframeSrcFn:A,blockSelector:n,slimDOMOptions:ae,dataURLOptions:y,mirror:se,iframeManager:Se,stylesheetManager:we,shadowDomManager:ht,processedNodeManager:pr,canvasManager:Er,ignoreCSSAttributes:Ue,plugins:((le=oe==null?void 0:oe.filter(k=>k.observer))==null?void 0:le.map(k=>({observer:k.observer,options:k.options,callback:dr=>W({type:R.Plugin,data:{plugin:k.name,payload:dr}})})))||[]},f)};Se.addLoadListener(z=>{try{M.push(re(z.contentDocument))}catch(le){console.warn(le)}});const B=()=>{zt(),M.push(re(document)),er=!0};return document.readyState===\"interactive\"||document.readyState===\"complete\"?B():(M.push(J(\"DOMContentLoaded\",()=>{W({type:R.DomContentLoaded,data:{}}),_===\"DOMContentLoaded\"&&B()})),M.push(J(\"load\",()=>{W({type:R.Load,data:{}}),_===\"load\"&&B()},window))),()=>{M.forEach(z=>z()),pr.destroy(),er=!1,Th()}}catch(M){console.warn(M)}}ut.addCustomEvent=(s,e)=>{if(!er)throw new Error(\"please add custom event after start recording\");W({type:R.Custom,data:{tag:s,payload:e}})};ut.freezePage=()=>{be.forEach(s=>s.freeze())};ut.takeFullSnapshot=s=>{if(!er)throw new Error(\"please take full snapshot after start recording\");zt(s)};ut.mirror=se;var zi;(function(s){s[s.NotStarted=0]=\"NotStarted\",s[s.Running=1]=\"Running\",s[s.Stopped=2]=\"Stopped\"})(zi||(zi={}));exports.record=ut;\nif (typeof module.exports == \"object\" && typeof exports == \"object\") {\n var __cp = (to, from, except, desc) => {\n if ((from && typeof from === \"object\") || typeof from === \"function\") {\n for (let key of Object.getOwnPropertyNames(from)) {\n if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)\n Object.defineProperty(to, key, {\n get: () => from[key],\n enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,\n });\n }\n }\n return to;\n };\n module.exports = __cp(module.exports, exports);\n}\nreturn module.exports;\n}))\n//# sourceMappingURL=record.umd.min.cjs.map`;\n","import { type SessionRecordingOptions, type StringUUID } from \"@lmnr-ai/types\";\nimport { Page as PlaywrightPage } from \"playwright\";\nimport { Page as PuppeteerPage } from \"puppeteer\";\n\nimport { LaminarClient } from \"..\";\nimport { initializeLogger } from \"../utils\";\nimport { RECORDER } from \"./recorder\";\n\nexport const LMNR_SEND_EVENTS_FUNCTION_NAME = 'lmnrSendEvents';\n\nconst logger = initializeLogger();\n\n/**\n * If the first argument is a string, return an object with the name of the method\n * and the argument as the value.\n * Otherwise, return the shallow copy of the arguments.\n *\n * This is useful for Stagehand, where the first argument is often a string, but is named\n * 'instruction', so we add a name to it on the spans.\n *\n * @param args - Args of a function.\n * @param name - The name to add on the first argument if it is a string.\n * @returns The arguments as an object with the name of the method and the argument\n * as the value, or the arguments as is.\n */\nexport const nameArgsOrCopy = (args: any[], name: string = \"instruction\") => {\n if (args.length === 1 && typeof args[0] === 'string') {\n return { [name]: args[0] };\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [...args];\n};\n\n\nexport interface EventChunk {\n batchId: string;\n chunkIndex: number;\n totalChunks: number;\n data: string;\n isFinal: boolean;\n}\n\nexport const sendPageEvents = async (\n client: LaminarClient,\n page: PlaywrightPage | PuppeteerPage,\n sessionId: StringUUID,\n traceId: StringUUID,\n) => {\n try {\n // Puppeteer pages have the same evaluate method, but TypeScript\n // isn't liking that the signature is different.\n\n /* eslint-disable @typescript-eslint/no-unsafe-return */\n const events = await (page as PlaywrightPage).evaluate(\n async () => {\n if (typeof (window as any).lmnrGetAndClearEvents !== 'function') {\n return [];\n }\n return await (window as any).lmnrGetAndClearEvents();\n },\n );\n /* eslint-enable @typescript-eslint/no-unsafe-return */\n if (events == null || events.length === 0) {\n return;\n }\n\n await client.browserEvents.send({\n sessionId,\n traceId,\n events,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(\"Execution context was destroyed\")\n || message.includes(\"Target page, context or browser has been closed\")) {\n logger.debug(`Tried to flush events from a closed page. Continuing...`);\n }\n }\n};\n\nexport const takeFullSnapshot = async (\n page: PlaywrightPage | PuppeteerPage,\n): Promise<boolean> => await (page as PlaywrightPage).evaluate(() => {\n if ((window as any).lmnrRrweb) {\n try {\n (window as any).lmnrRrweb.record.takeFullSnapshot();\n return true;\n } catch (error) {\n logger.error(\"Error taking full snapshot: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n }\n return false;\n});\n\nexport const injectSessionRecorder = async (\n page: PlaywrightPage | PuppeteerPage,\n sessionRecordingOptions?: SessionRecordingOptions,\n) => {\n const tryRunScript = async <R>(\n script: (...args: any[]) => Promise<R>,\n maxAttempts: number = 5,\n ): Promise<R | undefined> => {\n for (let i = 0; i < maxAttempts; i++) {\n try {\n return await script();\n } catch (error) {\n logger.error(\"Operation \" + script.name + \" failed: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n };\n\n // Both Puppeteer and Playwright have a evaluate method, but the types are different\n // and TypeScript is not liking that the signature is different.\n\n const castedPage = page as PlaywrightPage;\n\n let isRrwebPresent = false;\n try {\n isRrwebPresent = await castedPage.evaluate(() =>\n typeof (window as any).lmnrRrweb !== 'undefined',\n );\n } catch (error) {\n logger.debug(\"ailed to check if session recorder is loaded: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n\n // Load rrweb and set up recording\n if (!isRrwebPresent) {\n const result = await tryRunScript(async function injectSessionRecorder() {\n await castedPage.evaluate(RECORDER);\n return true;\n });\n if (!result) {\n logger.error(\"Failed to load session recorder\");\n return;\n }\n try {\n await castedPage.evaluate(injectScript, sessionRecordingOptions);\n } catch (error) {\n logger.debug(\"Failed to inject session recorder: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n};\n\n\n// Removes the heavy client prop and the apiKey to avoid security issues\nexport const cleanStagehandLLMClient = (llmClient: object): object =>\n Object.fromEntries(\n Object.entries(llmClient)\n .filter(([key]) => key !== \"client\")\n .map(([key, value]) =>\n key === \"clientOptions\"\n ? [\n key,\n Object.fromEntries(\n Object.entries(value).filter(([key]) => key !== \"apiKey\"),\n ),\n ]\n : [key, value],\n ),\n );\n\n\n// Stagehand uses zod 3.x or 4.x, so we need to support both versions via duck-typing\nexport const prettyPrintZodSchema = (schema: any, indent = 2): string => {\n // Use duck-typing instead of instanceof to support both Zod v3 and v4\n const def = schema?._def;\n if (!def || def.typeName !== 'ZodObject') {\n throw new Error('Not a Zod object schema');\n }\n\n const indentString = ' '.repeat(indent);\n\n const shape = schema.shape;\n const entries = Object.entries(shape);\n\n const reconstructed: string[] = entries.map(([key, value]) => {\n // Base type detection function using duck-typing\n const getBaseType = (val: any): string => {\n const valDef = val?._def;\n if (!valDef) return 'z.unknown()';\n\n const typeName = valDef.typeName;\n\n if (typeName === 'ZodString') {\n return 'z.string()';\n }\n if (typeName === 'ZodNumber') {\n return 'z.number()';\n }\n if (typeName === 'ZodBoolean') {\n return 'z.boolean()';\n }\n if (typeName === 'ZodArray') {\n const elementType = valDef.type;\n if (elementType?._def?.typeName === 'ZodObject') {\n return `z.array(${prettyPrintZodSchema(elementType)})`;\n } else {\n return `z.array(${getBaseType(elementType)})`;\n }\n }\n if (typeName === 'ZodObject') {\n return prettyPrintZodSchema(val);\n }\n if (typeName === 'ZodEnum') {\n const enumValues = valDef.values;\n if (Array.isArray(enumValues)) {\n return `z.enum([${enumValues.map(v => `'${v}'`).join(', ')}])`;\n }\n return 'z.enum([...])';\n }\n if (typeName === 'ZodLiteral') {\n const literalValue = valDef.value;\n if (typeof literalValue === 'string') {\n return `z.literal('${literalValue}')`;\n }\n return `z.literal(${literalValue})`;\n }\n if (typeName === 'ZodUnion') {\n const options = valDef.options;\n if (Array.isArray(options)) {\n return `z.union([${options.map(getBaseType).join(', ')}])`;\n }\n return 'z.union([...])';\n }\n if (typeName === 'ZodDate') {\n return 'z.date()';\n }\n if (typeName === 'ZodRecord') {\n const keyType = valDef.keyType;\n const valueType = valDef.valueType;\n\n let keyTypeStr = 'z.string()';\n if (keyType && keyType._def?.typeName !== 'ZodString') {\n keyTypeStr = getBaseType(keyType);\n }\n\n let valueTypeStr = 'z.any()';\n if (valueType) {\n valueTypeStr = getBaseType(valueType);\n }\n\n return `z.record(${keyTypeStr}, ${valueTypeStr})`;\n }\n if (typeName === 'ZodMap') {\n const keyType = valDef.keyType;\n const valueType = valDef.valueType;\n\n let keyTypeStr = 'z.any()';\n if (keyType) {\n keyTypeStr = getBaseType(keyType);\n }\n\n let valueTypeStr = 'z.any()';\n if (valueType) {\n valueTypeStr = getBaseType(valueType);\n }\n\n return `z.map(${keyTypeStr}, ${valueTypeStr})`;\n }\n if (typeName === 'ZodTuple') {\n const items = valDef.items;\n\n if (Array.isArray(items)) {\n const itemsTypeStr = items.map(item => getBaseType(item)).join(', ');\n return `z.tuple([${itemsTypeStr}])`;\n }\n return 'z.tuple([])';\n }\n if (typeName === 'ZodNullable') {\n return `${getBaseType(valDef.innerType)}.nullable()`;\n }\n if (typeName === 'ZodOptional') {\n return `${getBaseType(valDef.innerType)}.optional()`;\n }\n // Add more type checks as needed\n return 'z.any()';\n };\n\n // Check for modifiers and description\n const applyModifiers = (val: any, baseType: string): string => {\n let result = baseType;\n let currentVal = val;\n\n // Check for .nullable() modifier using duck-typing\n if (currentVal?._def?.typeName === 'ZodNullable') {\n result = `${getBaseType(currentVal._def.innerType)}.nullable()`;\n currentVal = currentVal._def.innerType;\n }\n\n // Check for .optional() modifier using duck-typing\n if (currentVal?._def?.typeName === 'ZodOptional') {\n if (!result.endsWith('.nullable()')) {\n result = `${getBaseType(currentVal._def.innerType)}.optional()`;\n }\n currentVal = currentVal._def.innerType;\n }\n\n // Check for description\n const description = val?._def?.description;\n if (typeof description === 'string') {\n result += `.describe('${description.replace(/'/g, \"\\\\'\")}')`;\n }\n\n return result;\n };\n\n const baseType = getBaseType(value);\n const finalType = applyModifiers(value, baseType);\n\n return `${indentString}${key}: ${finalType},`;\n });\n\n return `z.object({\\n${reconstructed.join('\\n')}\\n})`;\n};\n\n\n// copied from https://github.com/browserbase/stagehand/blob/main/lib/llm/LLMProvider.ts#L62\nconst modelToProviderMap: Record<string, string> = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"claude-3-5-sonnet-latest\": \"anthropic\",\n \"claude-3-5-sonnet-20240620\": \"anthropic\",\n \"claude-3-5-sonnet-20241022\": \"anthropic\",\n \"claude-3-7-sonnet-20250219\": \"anthropic\",\n \"claude-3-7-sonnet-latest\": \"anthropic\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n};\n\nexport const modelToProvider = (model: string): string | undefined => {\n const clean = model.toLowerCase().trim();\n if (clean.startsWith(\"gpt-\") || clean.match(/^o\\d-/)) {\n return \"openai\";\n }\n if (clean.startsWith(\"claude-\")) {\n return \"anthropic\";\n }\n if (clean.startsWith(\"gemini-\")) {\n return \"google\";\n }\n if (clean.startsWith(\"cerebras-\")) {\n return \"cerebras\";\n }\n if (clean.startsWith(\"groq-\")) {\n return \"groq\";\n }\n return modelToProviderMap[clean];\n};\n\n/**\n * The session recording inject script function.\n * This function runs in the browser context and sets up rrweb recording.\n * Exported so it can be converted to a string for CDP Runtime.evaluate.\n * @param sessionRecordingOptions - Optional recording options\n * @param stringifyCallbackArgs - If true, stringify arguments when calling\n * lmnrSendEvents (for raw CDP bindings)\n */\nexport const injectScript = (\n sessionRecordingOptions?: SessionRecordingOptions,\n stringifyCallbackArgs?: boolean,\n) => {\n const BATCH_TIMEOUT = 2000; // Send events after 2 seconds\n const MAX_WORKER_PROMISES = 50; // Max concurrent worker promises\n const HEARTBEAT_INTERVAL = 2000;\n const CHUNK_SIZE = 256 * 1024; // 256KB chunks\n const CHUNK_SEND_DELAY = 100; // 100ms delay between chunks\n\n (window as any).lmnrRrwebEventsBatch = [];\n (window as any).lmnrChunkQueue = [];\n (window as any).lmnrChunkSequence = 0;\n (window as any).lmnrCurrentBatchId = null;\n\n // Create a Web Worker for heavy JSON processing with chunked processing\n const createCompressionWorker = (): Worker => {\n const workerCode = `\n self.onmessage = async (e) => {\n const { jsonString, buffer, id, useBuffer } = e.data;\n try {\n let dataBytes;\n if (useBuffer && buffer) {\n // Use transferred ArrayBuffer (no copying needed!)\n dataBytes = new Uint8Array(buffer);\n } else {\n // Convert JSON string to bytes\n const textEncoder = new TextEncoder();\n dataBytes = textEncoder.encode(jsonString);\n }\n\n const compressionStream = new CompressionStream('gzip');\n const writer = compressionStream.writable.getWriter();\n const reader = compressionStream.readable.getReader();\n\n // TODO: investigate why the events are not sent if we await the \n // write and close\n writer.write(dataBytes);\n writer.close();\n\n const chunks = [];\n let totalLength = 0;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n totalLength += value.length;\n }\n\n const compressedData = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n compressedData.set(chunk, offset);\n offset += chunk.length;\n }\n\n self.postMessage({ id, success: true, data: compressedData });\n } catch (error) {\n self.postMessage({ id, success: false, error: error.message });\n }\n };\n `;\n\n const blob = new Blob([workerCode], { type: 'application/javascript' });\n return new Worker(URL.createObjectURL(blob));\n };\n\n let compressionWorker: Worker | null = null;\n const workerPromises = new Map();\n let workerId = 0;\n // null = unknown, true = supported, false = blocked by CSP\n let workerSupported: boolean | null = null;\n\n // Test if workers are supported (not blocked by CSP)\n const testWorkerSupport = () => {\n if (workerSupported !== null) {\n return workerSupported;\n }\n\n try {\n const testWorker = createCompressionWorker();\n testWorker.terminate();\n workerSupported = true;\n return true;\n } catch (error) {\n console.warn('Web Workers blocked by CSP, will use main thread compression:', error);\n workerSupported = false;\n return false;\n }\n };\n\n // Cleanup function for worker\n const cleanupWorker = () => {\n if (compressionWorker) {\n compressionWorker.terminate();\n compressionWorker = null;\n }\n workerPromises.clear();\n workerId = 0;\n };\n\n // Clean up stale promises to prevent memory leaks\n const cleanupStalePromises = () => {\n if (workerPromises.size > MAX_WORKER_PROMISES) {\n const toDelete = [];\n for (const [id, promise] of workerPromises) {\n if (toDelete.length >= workerPromises.size - MAX_WORKER_PROMISES) {\n break;\n }\n toDelete.push(id);\n promise.reject(new Error('Promise cleaned up due to memory pressure'));\n }\n toDelete.forEach(id => workerPromises.delete(id));\n }\n };\n\n // Non-blocking JSON.stringify using chunked processing\n const stringifyNonBlocking = (\n obj: unknown,\n chunkSize = 10000,\n ): Promise<string> => new Promise((resolve, reject) => {\n try {\n // For very large objects, we need to be more careful\n // Use requestIdleCallback if available, otherwise setTimeout\n const scheduleWork = window.requestIdleCallback ||\n ((cb) => setTimeout(cb, 0));\n\n let result = '';\n let keys: string[] = [];\n let keyIndex = 0;\n\n // Pre-process to get all keys if it's an object\n if (typeof obj === 'object' && obj !== null && !Array.isArray(obj)) {\n keys = Object.keys(obj);\n }\n\n const processChunk = () => {\n try {\n if (Array.isArray(obj) || typeof obj !== 'object' || obj === null) {\n // For arrays and primitives, just stringify directly\n result = JSON.stringify(obj);\n resolve(result);\n return;\n }\n\n // For objects, process in chunks\n const endIndex = Math.min(keyIndex + chunkSize, keys.length);\n\n if (keyIndex === 0) {\n result = '{';\n }\n\n for (let i = keyIndex; i < endIndex; i++) {\n const key = keys[i];\n const value = (obj as Record<string, unknown>)[key];\n\n if (i > 0) result += ',';\n result += JSON.stringify(key) + ':' + JSON.stringify(value);\n }\n\n keyIndex = endIndex;\n\n if (keyIndex >= keys.length) {\n result += '}';\n resolve(result);\n } else {\n // Schedule next chunk\n scheduleWork(processChunk);\n }\n } catch (error) {\n reject(error as Error);\n }\n };\n\n processChunk();\n } catch (error) {\n reject(error as Error);\n }\n });\n\n // Fast compression for small objects (main thread)\n const compressSmallObject = async (data: unknown) => {\n const jsonString = JSON.stringify(data);\n const textEncoder = new TextEncoder();\n const bytes = textEncoder.encode(jsonString);\n\n const compressionStream = new CompressionStream('gzip');\n const writer = compressionStream.writable.getWriter();\n const reader = compressionStream.readable.getReader();\n\n // TODO: investigate why the events are not sent if we await the write and close\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n writer.write(bytes);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n writer.close();\n\n const chunks = [];\n let totalLength = 0;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n totalLength += value.length;\n }\n\n const compressedData = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n compressedData.set(chunk, offset);\n offset += chunk.length;\n }\n\n return compressedData;\n };\n\n // Alternative: Use transferable objects for maximum efficiency\n const compressLargeObjectTransferable = async (data: unknown): Promise<Uint8Array> => {\n try {\n if (!testWorkerSupport()) {\n return compressSmallObject(data);\n }\n\n // Clean up stale promises first\n cleanupStalePromises();\n\n // Stringify on main thread but non-blocking\n const jsonString = await stringifyNonBlocking(data);\n\n // Convert to ArrayBuffer (transferable)\n const encoder = new TextEncoder();\n const uint8Array = encoder.encode(jsonString);\n const buffer = uint8Array.buffer; // Use the original buffer for transfer\n\n return new Promise((resolve, reject) => {\n if (!compressionWorker) {\n compressionWorker = createCompressionWorker();\n compressionWorker.onmessage = (e) => {\n const { id, success, data: result, error } = e.data;\n const promise = workerPromises.get(id);\n if (promise) {\n workerPromises.delete(id);\n if (success) {\n promise.resolve(result);\n } else {\n promise.reject(new Error(error));\n }\n }\n };\n\n compressionWorker.onerror = (error) => {\n console.error('Compression worker error:', error);\n cleanupWorker();\n compressSmallObject(data).then(resolve, reject);\n };\n }\n\n const id = ++workerId;\n workerPromises.set(id, { resolve, reject });\n\n // Set timeout to prevent hanging promises\n setTimeout(() => {\n if (workerPromises.has(id)) {\n workerPromises.delete(id);\n reject(new Error('Compression timeout'));\n }\n }, 10000);\n\n // Transfer the ArrayBuffer (no copying!)\n compressionWorker.postMessage({\n buffer,\n id,\n useBuffer: true,\n }, [buffer]);\n });\n } catch {\n // Silently fall back to main thread compression\n return compressSmallObject(data);\n }\n };\n\n // Worker-based compression for large objects\n const compressLargeObject = async (data: unknown): Promise<Uint8Array> => {\n try {\n // Use transferable objects for better performance\n return await compressLargeObjectTransferable(data);\n } catch (error) {\n console.warn('Transferable failed, falling back to string method:', error);\n try {\n // Fallback to string method\n const jsonString = await stringifyNonBlocking(data);\n\n return new Promise((resolve, reject) => {\n if (!compressionWorker) {\n compressionWorker = createCompressionWorker();\n compressionWorker.onmessage = (e) => {\n const { id, success, data: result, error } = e.data;\n const promise = workerPromises.get(id);\n if (promise) {\n workerPromises.delete(id);\n if (success) {\n promise.resolve(result);\n } else {\n promise.reject(new Error(error));\n }\n }\n };\n\n compressionWorker.onerror = (error) => {\n console.error('Compression worker error:', error);\n cleanupWorker();\n };\n }\n\n const id = ++workerId;\n workerPromises.set(id, { resolve, reject });\n\n // Set timeout to prevent hanging promises\n setTimeout(() => {\n if (workerPromises.has(id)) {\n workerPromises.delete(id);\n reject(new Error('Compression timeout'));\n }\n }, 10000);\n\n compressionWorker.postMessage({ jsonString, id });\n });\n } catch (workerError) {\n logger.warn(\"Worker creation failed, falling back to main thread compression: \" +\n `${workerError instanceof Error ? workerError.message : String(workerError)}`);\n // Final fallback: compress on main thread (may block UI but will work)\n return await compressSmallObject(data);\n }\n }\n };\n\n\n setInterval(cleanupWorker, 5000);\n\n const isLargeEvent = (type: number) => {\n const LARGE_EVENT_TYPES: number[] = [\n 2, // FullSnapshot\n ];\n\n if (LARGE_EVENT_TYPES.includes(type)) {\n return true;\n }\n\n return false;\n };\n\n // Create chunks from a string with metadata\n const createChunks = (str: string, batchId: string) => {\n const chunks = [];\n const totalChunks = Math.ceil(str.length / CHUNK_SIZE);\n\n for (let i = 0; i < str.length; i += CHUNK_SIZE) {\n const chunk = str.slice(i, i + CHUNK_SIZE);\n chunks.push({\n batchId: batchId,\n chunkIndex: chunks.length,\n totalChunks: totalChunks,\n data: chunk,\n isFinal: chunks.length === totalChunks - 1,\n });\n }\n\n return chunks;\n };\n\n // Send chunks with flow control\n const sendChunks = async (chunks: any[]) => {\n if (typeof (window as any).lmnrSendEvents !== 'function') {\n return;\n }\n\n (window as any).lmnrChunkQueue.push(...chunks);\n\n // Process queue\n while ((window as any).lmnrChunkQueue.length > 0) {\n const chunk = (window as any).lmnrChunkQueue.shift();\n try {\n // CDP bindings require stringified arguments, Playwright/Puppeteer auto-serialize\n const arg = stringifyCallbackArgs ? JSON.stringify(chunk) : chunk;\n await (window as any).lmnrSendEvents(arg);\n // Small delay between chunks to avoid overwhelming CDP\n await new Promise(resolve => setTimeout(resolve, CHUNK_SEND_DELAY));\n } catch (error) {\n console.error('Failed to send chunk:', error);\n // On error, clear failed chunk batch from queue\n (window as any).lmnrChunkQueue = (window as any).lmnrChunkQueue.filter(\n (c: any) => c.batchId !== chunk.batchId,\n );\n break;\n }\n }\n };\n\n const sendBatchIfReady = async () => {\n if ((window as any).lmnrRrwebEventsBatch.length > 0\n && typeof (window as any).lmnrSendEvents === 'function') {\n const events = (window as any).lmnrRrwebEventsBatch;\n (window as any).lmnrRrwebEventsBatch = [];\n\n try {\n // Generate unique batch ID\n const batchId = `${Date.now()}_${(window as any).lmnrChunkSequence++}`;\n (window as any).lmnrCurrentBatchId = batchId;\n\n // Stringify the entire batch\n const batchString = JSON.stringify(events);\n\n // Check size and chunk if necessary\n if (batchString.length <= CHUNK_SIZE) {\n // Small enough to send as single chunk\n const chunk = {\n batchId: batchId,\n chunkIndex: 0,\n totalChunks: 1,\n data: batchString,\n isFinal: true,\n };\n // CDP bindings require stringified arguments, Playwright/Puppeteer auto-serialize\n const arg = stringifyCallbackArgs ? JSON.stringify(chunk) : chunk;\n await (window as any).lmnrSendEvents(arg);\n } else {\n // Need to chunk\n const chunks = createChunks(batchString, batchId);\n await sendChunks(chunks);\n }\n } catch (error) {\n console.error('Failed to send events:', error);\n // Clear batch to prevent memory buildup\n (window as any).lmnrRrwebEventsBatch = [];\n }\n }\n };\n\n const bufferToBase64 = async (buffer: Uint8Array) => {\n const base64url = await new Promise<string>(resolve => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.readAsDataURL(new Blob([buffer.slice()]));\n });\n\n return base64url.slice(base64url.indexOf(',') + 1);\n };\n\n if (!(window as any).lmnrStartedRecordingEvents) {\n // It's fine to retrigger the interval even if the original function\n // is async and still running.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n setInterval(sendBatchIfReady, BATCH_TIMEOUT);\n\n (window as any).lmnrRrweb.record({\n async emit(event: any) {\n try {\n const isLarge = isLargeEvent(event.type);\n const compressedResult = isLarge ?\n await compressLargeObject(event.data) :\n await compressSmallObject(event.data);\n\n const base64Data = await bufferToBase64(compressedResult);\n const eventToSend = {\n ...event,\n data: base64Data,\n };\n (window as any).lmnrRrwebEventsBatch.push(eventToSend);\n } catch (error) {\n console.warn('Failed to push event to batch', error);\n }\n },\n recordCanvas: true,\n collectFonts: true,\n recordCrossOriginIframes: true,\n maskInputOptions: {\n password: true,\n textarea: sessionRecordingOptions?.maskInputOptions?.textarea || false,\n text: sessionRecordingOptions?.maskInputOptions?.text || false,\n number: sessionRecordingOptions?.maskInputOptions?.number || false,\n select: sessionRecordingOptions?.maskInputOptions?.select || false,\n email: sessionRecordingOptions?.maskInputOptions?.email || false,\n tel: sessionRecordingOptions?.maskInputOptions?.tel || false,\n },\n });\n\n function heartbeat() {\n // Add heartbeat events\n setInterval(\n () => {\n (window as any).lmnrRrweb.record.addCustomEvent('heartbeat', {\n title: document.title,\n url: document.URL,\n });\n },\n HEARTBEAT_INTERVAL,\n );\n }\n\n heartbeat();\n (window as any).lmnrStartedRecordingEvents = true;\n }\n};\n\n// Buffer for storing incomplete chunk batches\nexport interface ChunkBuffer {\n chunks: Map<number, string>;\n total: number;\n timestamp: number;\n}\n\nconst OLD_BUFFER_TIMEOUT = 60000; // 60 seconds in milliseconds\n\nexport async function sendEvents(\n chunk: EventChunk,\n client: LaminarClient,\n chunkBuffers: Map<string, ChunkBuffer>,\n sessionId: StringUUID,\n traceId: StringUUID,\n): Promise<void> {\n try {\n // Handle chunked data\n const { batchId, chunkIndex, totalChunks, data } = chunk;\n\n // Validate required fields\n if (!sessionId || !traceId) {\n logger.debug(\"Missing sessionId or traceId in chunk\");\n return;\n }\n\n // Initialize buffer for this batch if needed\n if (!chunkBuffers.has(batchId)) {\n chunkBuffers.set(batchId, {\n chunks: new Map(),\n total: totalChunks,\n timestamp: Date.now(),\n });\n }\n\n const buffer = chunkBuffers.get(batchId)!;\n\n // Store chunk\n buffer.chunks.set(chunkIndex, data);\n\n // Check if we have all chunks\n if (buffer.chunks.size === totalChunks) {\n // Reassemble the full message\n let fullData = \"\";\n for (let i = 0; i < totalChunks; i++) {\n fullData += buffer.chunks.get(i);\n }\n\n // Parse the JSON\n const events = JSON.parse(fullData) as Record<string, any>[];\n\n // Send to server\n if (events && events.length > 0) {\n // Fire and forget - don't await to avoid blocking\n await client.browserEvents.send({ sessionId, traceId, events }).catch((error) => {\n logger.debug(\"Failed to send events: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n\n // Clean up buffer\n chunkBuffers.delete(batchId);\n }\n\n // Clean up old incomplete buffers\n const currentTime = Date.now();\n const toDelete: string[] = [];\n\n for (const [bid, buffer] of chunkBuffers.entries()) {\n if (currentTime - buffer.timestamp > OLD_BUFFER_TIMEOUT) {\n toDelete.push(bid);\n }\n }\n\n for (const bid of toDelete) {\n logger.debug(`Cleaning up incomplete chunk buffer: ${bid}`);\n chunkBuffers.delete(bid);\n }\n } catch (error) {\n logger.debug(\"Could not send events: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","import { LaminarClient } from '@lmnr-ai/client';\nimport { SessionRecordingOptions } from '@lmnr-ai/types';\nimport { diag, type Span, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\nimport type * as PlaywrightLib from \"playwright\";\nimport type { Browser, BrowserContext, Page } from 'playwright';\n\nimport { version as SDK_VERSION } from \"../../package.json\";\nimport { observe } from '../decorators';\nimport { Laminar } from '../laminar';\nimport { TRACE_HAS_BROWSER_SESSION } from '../opentelemetry-lib/tracing/attributes';\nimport { LaminarContextManager } from '../opentelemetry-lib/tracing/context';\nimport { initializeLogger, newUUID, NIL_UUID, otelTraceIdToUUID, StringUUID } from '../utils';\nimport {\n ChunkBuffer,\n EventChunk,\n injectSessionRecorder,\n LMNR_SEND_EVENTS_FUNCTION_NAME,\n sendEvents,\n sendPageEvents,\n takeFullSnapshot,\n} from \"./utils\";\n\nconst logger = initializeLogger();\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class PlaywrightInstrumentation extends InstrumentationBase {\n private _patchedBrowsers: Set<Browser> = new Set();\n private _parentSpans: Map<StringUUID, Span> = new Map();\n private _client: LaminarClient;\n private _sessionRecordingOptions?: SessionRecordingOptions;\n\n constructor(client: LaminarClient, sessionRecordingOptions?: SessionRecordingOptions) {\n super(\n \"@lmnr/playwright-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this._client = client;\n this._sessionRecordingOptions = sessionRecordingOptions;\n }\n\n // It's the caller's responsibility to ensure the span is ended\n public setParentSpanForSession(sessionId: StringUUID, span: Span) {\n this._parentSpans.set(sessionId, span);\n }\n\n public removeAndEndParentSpanForSession(sessionId: StringUUID) {\n const span = this._parentSpans.get(sessionId);\n if (span && span.isRecording()) {\n span.end();\n }\n this._parentSpans.delete(sessionId);\n }\n\n public getParentSpanForSession(sessionId: StringUUID): Span | undefined {\n return this._parentSpans.get(sessionId);\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"playwright\",\n // TODO: test if the older versions work\n ['>=1.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(pwModule: {\n chromium?: typeof PlaywrightLib.chromium,\n firefox?: typeof PlaywrightLib.firefox,\n webkit?: typeof PlaywrightLib.webkit,\n }) {\n const browsers = [pwModule.chromium, pwModule.firefox, pwModule.webkit] as const;\n\n for (const browserType of browsers) {\n if (browserType) {\n this._wrap(\n browserType,\n 'launch',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n browserType,\n 'connect',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n browserType,\n 'connectOverCDP',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n browserType,\n 'launchPersistentContext',\n this.patchBrowserNewContext(),\n );\n }\n }\n\n return pwModule;\n }\n\n private patch(moduleExports: typeof PlaywrightLib, moduleVersion?: string) {\n diag.debug(`patching playwright ${moduleVersion}`);\n const browsers = ['chromium', 'firefox', 'webkit'] as const;\n\n for (const browserType of browsers) {\n if (moduleExports[browserType]) {\n // First we need to patch the browser launch to get access to the Page class\n this._wrap(\n moduleExports[browserType],\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports[browserType],\n `connect`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports[browserType],\n 'connectOverCDP',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports[browserType],\n 'launchPersistentContext',\n this.patchBrowserNewContext(),\n );\n }\n }\n\n return moduleExports;\n }\n\n private unpatch(moduleExports: typeof PlaywrightLib, moduleVersion?: string) {\n diag.debug(`unpatching playwright ${moduleVersion}`);\n const browsers = ['chromium', 'firefox', 'webkit'] as const;\n\n for (const browserType of browsers) {\n if (moduleExports[browserType]) {\n // First we need to patch the browser launch to get access to the Page class\n this._wrap(\n moduleExports[browserType],\n `launch`,\n this.patchNewBrowser(),\n );\n }\n }\n\n for (const browser of this._patchedBrowsers) {\n this._unwrap(browser, 'newContext');\n }\n }\n\n private patchNewBrowser() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: any[]) {\n const browser: Browser = await original.call(this, ...args);\n const sessionId = newUUID();\n\n for (const context of browser.contexts()) {\n context.on('page', (page: Page) => plugin.patchPage(page, sessionId));\n for (const page of context.pages()) {\n await plugin.patchPage(page, sessionId);\n }\n }\n\n plugin._wrap(\n browser,\n 'newContext',\n plugin.patchBrowserNewContext(),\n );\n\n plugin._patchedBrowsers.add(browser);\n return browser;\n };\n }\n\n private patchBrowserNewContext() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: unknown[]) {\n const context: BrowserContext = await original.bind(this).apply(this, args);\n const sessionId = newUUID();\n // Patch pages created by browser, e.g. new tab\n context.on('page', async (page) => plugin.patchPage(page, sessionId));\n\n // Patch pages that are already created\n for (const page of context.pages()) {\n await plugin.patchPage(page, sessionId);\n }\n\n return context;\n };\n }\n\n public async patchPage(page: Page, sessionId: StringUUID) {\n const wrapped = async () => {\n // Note: be careful with await here, if the await is removed,\n // this creates a race condition, and playwright fails.\n await observe({ name: 'playwright.page' }, async () => {\n await this._patchPage(page, sessionId);\n });\n };\n\n const parentSpan = this.getParentSpanForSession(sessionId);\n if (parentSpan) {\n return await Laminar.withSpan(\n parentSpan,\n wrapped,\n );\n }\n\n return await wrapped();\n }\n\n private async _patchPage(page: Page, sessionId: StringUUID) {\n const originalBringToFront = page.bringToFront.bind(page);\n page.bringToFront = async () => {\n await originalBringToFront();\n await takeFullSnapshot(page);\n };\n\n const currentSpan = trace.getSpan(LaminarContextManager.getContext()) ?? trace.getActiveSpan();\n currentSpan?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n const otelTraceId = currentSpan?.spanContext().traceId;\n const traceId = otelTraceId ? otelTraceIdToUUID(otelTraceId) : NIL_UUID;\n\n page.on('domcontentloaded', async () => {\n try {\n await injectSessionRecorder(page, this._sessionRecordingOptions);\n } catch (error) {\n logger.error(\"Error in onLoad handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n });\n\n page.on('close', async () => {\n try {\n // Send any remaining events before closing\n await sendPageEvents(this._client, page, sessionId, traceId);\n } catch (error) {\n logger.error(\"Error in onClose handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n });\n\n const chunkBuffers = new Map<string, ChunkBuffer>();\n\n await injectSessionRecorder(page, this._sessionRecordingOptions);\n try {\n await page.exposeFunction(LMNR_SEND_EVENTS_FUNCTION_NAME, async (chunk: EventChunk) => {\n await sendEvents(chunk, this._client, chunkBuffers, sessionId, traceId);\n });\n } catch (error) {\n logger.debug(\"Could not expose function \" + LMNR_SEND_EVENTS_FUNCTION_NAME + \": \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\n","import { trace } from \"@opentelemetry/api\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nimport { observe as laminarObserve } from \"../../decorators\";\nimport { SPAN_TYPE } from \"../../opentelemetry-lib/tracing/attributes\";\nimport { LaminarContextManager } from \"../../opentelemetry-lib/tracing/context\";\nimport { modelToProvider } from \"../utils\";\n\nexport interface GlobalLLMClientOptions {\n provider: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {})\n model: string\n}\n\ninterface CreateChatCompletionOptions {\n options: {\n messages?: any[];\n temperature?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n maxTokens?: number;\n maxOutputTokens?: number;\n response_model?: {\n name: string;\n schema: any;\n };\n tools?: any[];\n };\n logger?: (message: any) => void;\n retries?: number;\n}\n\ninterface LLMResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices?: {\n index: number;\n message: {\n role: string;\n content: string | null;\n tool_calls?: {\n id: string;\n type: string;\n function: {\n name: string;\n arguments: string;\n };\n }[];\n };\n finish_reason: string;\n }[];\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * Creates a wrapper function for LLM client's createChatCompletion method\n * that adds OpenTelemetry tracing with detailed span attributes.\n *\n * This wrapper is shared between Stagehand v2 and v3 instrumentations.\n *\n * @param globalLLMClientOptions - WeakMap to track LLM client options (provider and model)\n * @returns A wrapper function compatible with OpenTelemetry's _wrap method\n */\nexport const createLLMClientCreateChatCompletionWrapper = (\n globalLLMClientOptions: WeakMap<any, GlobalLLMClientOptions | undefined>,\n) => (original: (...args: any[]) => Promise<any>) =>\n async function createChatCompletion(this: any, ...args: any[]) {\n const options = args[0] as CreateChatCompletionOptions;\n return await laminarObserve({\n name: \"createChatCompletion\",\n // input and output are set as gen_ai.prompt and gen_ai.completion\n ignoreInput: true,\n ignoreOutput: true,\n }, async () => {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n const span = currentSpan!;\n const innerOptions = options.options;\n const recordedProvider = globalLLMClientOptions.get(this)?.provider;\n const provider = (\n recordedProvider === \"aisdk\"\n && globalLLMClientOptions.get(this)?.model\n )\n ? (\n modelToProvider(globalLLMClientOptions.get(this)!.model)\n ?? \"aisdk\"\n )\n : recordedProvider;\n\n // Set request attributes\n span.setAttributes({\n [SPAN_TYPE]: \"LLM\",\n ...(innerOptions.temperature ? {\n \"gen_ai.request.temperature\": innerOptions.temperature,\n } : {}),\n ...(innerOptions.top_p ? {\n \"gen_ai.request.top_p\": innerOptions.top_p,\n } : {}),\n ...(innerOptions.frequency_penalty ? {\n \"gen_ai.request.frequency_penalty\": innerOptions.frequency_penalty,\n } : {}),\n ...(innerOptions.presence_penalty ? {\n \"gen_ai.request.presence_penalty\": innerOptions.presence_penalty,\n } : {}),\n ...((innerOptions.maxTokens !== undefined || innerOptions.maxOutputTokens !== undefined) ? {\n \"gen_ai.request.max_tokens\": innerOptions.maxTokens ?? innerOptions.maxOutputTokens,\n } : {}),\n ...(globalLLMClientOptions.get(this) ? {\n \"gen_ai.request.model\": globalLLMClientOptions.get(this)?.model,\n \"gen_ai.system\": provider,\n } : {}),\n });\n\n // Set message attributes\n innerOptions.messages?.forEach((message, index) => {\n span.setAttributes({\n [`gen_ai.prompt.${index}.role`]: message.role,\n [`gen_ai.prompt.${index}.content`]: JSON.stringify(message.content),\n });\n });\n\n // Set tool/function attributes\n innerOptions.tools?.forEach((tool, index) => {\n span.setAttributes({\n [`llm.request.functions.${index}.name`]: tool.name,\n [`llm.request.functions.${index}.description`]: tool.description,\n [`llm.request.functions.${index}.parameters`]: JSON.stringify(tool.parameters),\n });\n });\n\n // Set structured output schema if present\n if (innerOptions.response_model?.schema) {\n const schema = zodToJsonSchema(innerOptions.response_model.schema);\n if (schema) {\n span.setAttributes({\n [`gen_ai.request.structured_output_schema`]: JSON.stringify(schema),\n });\n }\n }\n\n // Execute the original method\n const result = await original.bind(this).apply(this, args) as LLMResponse;\n\n // Set response attributes\n span.setAttributes({\n \"gen_ai.response.model\": result.model,\n \"gen_ai.usage.input_tokens\": result.usage?.prompt_tokens ?? 0,\n \"gen_ai.usage.output_tokens\": result.usage?.completion_tokens ?? 0,\n \"llm.usage.total_tokens\": result.usage?.total_tokens ?? 0,\n });\n\n // Set completion attributes\n result.choices?.forEach(choice => {\n const index = choice.index;\n span.setAttributes({\n [`gen_ai.completion.${index}.finish_reason`]: choice.finish_reason,\n [`gen_ai.completion.${index}.role`]: choice.message.role,\n });\n if (choice.message.content) {\n span.setAttribute(\n `gen_ai.completion.${index}.content`,\n JSON.stringify(choice.message.content),\n );\n }\n choice.message.tool_calls?.forEach((toolCall, toolCallIndex) => {\n span.setAttributes({\n [`gen_ai.completion.${index}.message.tool_calls.${toolCallIndex}.id`]: toolCall.id,\n [`gen_ai.completion.${index}.message.tool_calls.${toolCallIndex}.name`]:\n toolCall.function.name,\n [`gen_ai.completion.${index}.message.tool_calls.${toolCallIndex}.arguments`]:\n JSON.stringify(toolCall.function.arguments),\n });\n });\n });\n\n // Handle special case when choices is empty (structured output mode)\n if (!result.choices || result.choices.length === 0) {\n const data = (result as any).data;\n if (data) {\n span.setAttributes({\n \"gen_ai.completion.0.role\": \"assistant\",\n \"gen_ai.completion.0.content\": typeof data === \"string\"\n ? data\n : JSON.stringify(data),\n });\n }\n }\n\n return result;\n });\n };\n","import { diag, trace } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\nimport { z } from \"zod/v3\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { observe as laminarObserve } from \"../../decorators\";\nimport { Laminar } from \"../../laminar\";\nimport { LaminarContextManager } from \"../../opentelemetry-lib/tracing/context\";\nimport { newUUID, StringUUID } from \"../../utils\";\nimport { PlaywrightInstrumentation } from \"../playwright\";\nimport {\n cleanStagehandLLMClient,\n nameArgsOrCopy,\n prettyPrintZodSchema,\n} from \"../utils\";\nimport { createLLMClientCreateChatCompletionWrapper } from \"./shared-llm-wrapper\";\n\n// Stagehand interfaces:\ntype AvailableModel = string;\n\ninterface ActOptions {\n action: string;\n modelName?: AvailableModel;\n modelClientOptions?: any; // ClientOptions\n variables?: Record<string, string>;\n domSettleTimeoutMs?: number;\n timeoutMs?: number;\n iframes?: boolean;\n frameId?: string;\n}\ntype LLMResponse = {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: {\n index: number;\n message: {\n role: string;\n content: string | null;\n tool_calls: {\n id: string;\n type: string;\n function: {\n name: string;\n arguments: string;\n };\n }[];\n };\n finish_reason: string;\n }[];\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n};\n\ninterface ChatCompletionInnerOptions {\n messages: any[]; // ChatMessage[]\n temperature?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n image?: {\n buffer: Buffer;\n description?: string;\n };\n response_model?: {\n name: string;\n schema: any; // ZodType\n };\n tools?: any[]; // LLMTool[]\n tool_choice?: \"auto\" | \"none\" | \"required\";\n maxTokens?: number;\n requestId?: string;\n};\n\ninterface CreateChatCompletionOptions {\n options: ChatCompletionInnerOptions;\n logger: (message: any) => void;\n retries?: number;\n}\n\ndeclare abstract class LLMClient {\n type: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {});\n modelName: AvailableModel | (string & {});\n hasVision: boolean;\n clientOptions: any; // ClientOptions\n userProvidedInstructions?: string;\n constructor(modelName: AvailableModel, userProvidedInstructions?: string);\n abstract createChatCompletion<T = LLMResponse>(\n options: CreateChatCompletionOptions\n ): Promise<T>;\n generateText: (args: any) => Promise<any>;\n streamText: (args: any) => any;\n streamObject: (args: any) => any;\n generateImage: (args: any) => Promise<any>;\n embed: (args: any) => Promise<any>;\n embedMany: (args: any) => Promise<any>;\n transcribe: (args: any) => Promise<any>;\n generateSpeech: (args: any) => Promise<any>;\n};\n\ninterface StagehandPage {\n act: (args: any) => Promise<any>;\n extract: (args: any) => Promise<any>;\n observe: (args: any) => Promise<any>;\n on: (args: any) => any;\n}\n// ================================\n\n\ninterface GlobalLLMClientOptions {\n // named `type` in Stagehand\n provider: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {})\n model: string\n}\n\ntype AgentClient = {\n execute: (\n instructionOrOptions: string | object,\n ) => Promise<object>;\n};\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return\n*/\nexport class StagehandV2Instrumentation extends InstrumentationBase {\n private playwrightInstrumentation: PlaywrightInstrumentation;\n private globalLLMClientOptions: WeakMap<\n LLMClient,\n GlobalLLMClientOptions | undefined\n > = new WeakMap();\n private globalAgentOptions: WeakMap<\n object,\n Record<string, any> | undefined\n > = new WeakMap();\n private stagehandInstanceToSessionId: WeakMap<object, StringUUID> = new WeakMap();\n\n constructor(playwrightInstrumentation: PlaywrightInstrumentation) {\n super(\n \"@lmnr/browserbase-stagehand-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this.playwrightInstrumentation = playwrightInstrumentation;\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@browserbasehq/stagehand\",\n ['>=1.0.0 <3.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n private patch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`patching stagehand ${moduleVersion}`);\n // Check if Stagehand is non-configurable\n const descriptor = Object.getOwnPropertyDescriptor(moduleExports, 'Stagehand');\n if (descriptor && !descriptor.configurable) {\n // Create a proxy for the entire module exports\n const originalStagehand = moduleExports.Stagehand;\n const patchedConstructor = this.patchStagehandConstructor()(originalStagehand);\n\n // Create a proxy for the module exports\n return new Proxy(moduleExports, {\n get: (target, prop) => {\n if (prop === 'Stagehand') {\n return patchedConstructor;\n }\n return target[prop as keyof typeof target];\n },\n });\n } else {\n // If it's configurable, use the standard _wrap method\n this._wrap(\n moduleExports,\n 'Stagehand',\n this.patchStagehandConstructor(),\n );\n\n return moduleExports;\n }\n }\n\n public manuallyInstrument(Stagehand: any) {\n diag.debug('manually instrumenting stagehand');\n\n // Since we can't replace the Stagehand constructor directly due to non-configurable property,\n // we'll patch the prototype methods of the existing constructor\n\n // First, patch the init method on the prototype\n if (Stagehand && Stagehand.prototype) {\n this._wrap(\n Stagehand.prototype,\n 'init',\n this.patchStagehandInit(),\n );\n this._wrap(\n Stagehand.prototype,\n 'close',\n this.patchStagehandClose(),\n );\n }\n }\n\n private unpatch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`unpatching stagehand ${moduleVersion}`);\n this._unwrap(moduleExports, 'Stagehand');\n\n if (moduleExports.Stagehand) {\n this._unwrap(moduleExports.Stagehand.prototype, 'init');\n this._unwrap(moduleExports.Stagehand.prototype, 'close');\n if (moduleExports.Stagehand.prototype?.page) {\n this._unwrap(moduleExports.Stagehand.prototype.page, 'act');\n this._unwrap(moduleExports.Stagehand.prototype.page, 'extract');\n this._unwrap(moduleExports.Stagehand.prototype.page, 'observe');\n const observeHandler = (moduleExports.Stagehand.prototype.page).observeHandler;\n if (observeHandler) {\n this._unwrap(observeHandler, 'observe');\n }\n const extractHandler = (moduleExports.Stagehand.prototype.page).extractHandler;\n if (extractHandler) {\n this._unwrap(extractHandler, 'textExtract');\n this._unwrap(extractHandler, 'domExtract');\n }\n const actHandler = (moduleExports.Stagehand.prototype.page).actHandler;\n if (actHandler) {\n this._unwrap(actHandler, 'act');\n }\n }\n }\n\n return moduleExports;\n }\n\n private patchStagehandConstructor() {\n const instrumentation = this;\n\n return (Original: any) => {\n // Create a constructor function that maintains the same signature\n const Stagehand = function (this: InstanceType<typeof Original>, ...args: any[]) {\n // Only apply if this is a new instance\n if (!(this instanceof Stagehand)) {\n return new (Stagehand)(...args);\n }\n\n const instance = new Original(args.length > 0 ? args[0] : undefined);\n Object.assign(this, instance);\n\n instrumentation._wrap(\n this,\n 'init',\n instrumentation.patchStagehandInit(),\n );\n\n instrumentation._wrap(\n this,\n 'close',\n instrumentation.patchStagehandClose(),\n );\n\n return this;\n } as unknown as typeof Original;\n\n // Copy static properties\n Object.setPrototypeOf(Stagehand, Original);\n // Copy prototype properties\n Stagehand.prototype = Object.create(Original.prototype);\n Stagehand.prototype.constructor = Stagehand;\n\n return Stagehand;\n };\n }\n\n private patchStagehandInit() {\n const instrumentation = this;\n\n return (original: any) => async function method(this: any) {\n const sessionId = newUUID();\n\n // Make sure the parent span is set before calling the original init method\n // so that playwright instrumentation does not set its default parent span\n const parentSpan = Laminar.startSpan({\n name: 'Stagehand',\n });\n instrumentation.playwrightInstrumentation.setParentSpanForSession(sessionId, parentSpan);\n\n const result = await original.bind(this).apply(this);\n for (const page of this.context.pages()) {\n await instrumentation.playwrightInstrumentation.patchPage(page, sessionId);\n }\n await instrumentation.playwrightInstrumentation.patchPage(this.page, sessionId);\n\n instrumentation._wrap(\n this,\n 'agent',\n instrumentation.patchStagehandAgentInitializer(sessionId),\n );\n\n // when new playwright page opens, we need to add playwright instrumentation\n // to it and instrument the stagehand page stored on the stagehand instance\n this.context.on('page', async (page: any) => {\n await instrumentation.playwrightInstrumentation.patchPage(page, sessionId);\n instrumentation.patchStagehandPage(this.stagehandPage, sessionId);\n });\n\n instrumentation.patchStagehandPage(this.stagehandPage, sessionId);\n if (this.llmClient) {\n instrumentation.globalLLMClientOptions.set(this.llmClient, {\n provider: this.llmClient.type,\n model: this.llmClient.modelName,\n });\n instrumentation._wrap(\n this.llmClient,\n 'createChatCompletion',\n instrumentation.patchStagehandLLMClientCreateChatCompletion(),\n );\n }\n\n instrumentation.stagehandInstanceToSessionId.set(this, sessionId);\n return result;\n };\n }\n\n private patchStagehandClose() {\n const instrumentation = this;\n return (original: Function) => async function method(this: any, ...args: any[]) {\n // Clean up the session from the registry\n const sessionId = instrumentation.stagehandInstanceToSessionId.get(this);\n if (sessionId) {\n instrumentation.playwrightInstrumentation.removeAndEndParentSpanForSession(sessionId);\n instrumentation.stagehandInstanceToSessionId.delete(this);\n }\n\n await original.bind(this).apply(this, args);\n };\n }\n\n private patchStagehandPage(page: StagehandPage, sessionId: StringUUID) {\n const actHandler = (page as any).actHandler;\n if (actHandler) {\n if (actHandler.act) {\n this._wrap(\n actHandler,\n 'act',\n this.patchStagehandV1ActHandlerAct(),\n );\n }\n if (actHandler.actFromObserveResult) {\n this._wrap(\n actHandler,\n 'actFromObserveResult',\n this.patchStagehandV2ActHandlerActFromObserveResult(),\n );\n }\n if (actHandler.observeAct) {\n this._wrap(\n actHandler,\n 'observeAct',\n this.patchStagehandV2ActHandlerObserveAct(),\n );\n }\n }\n\n const observeHandler = (page as any).observeHandler;\n if (observeHandler) {\n this._wrap(\n observeHandler,\n 'observe',\n this.patchStagehandObserveHandler(),\n );\n }\n\n const extractHandler = (page as any).extractHandler;\n if (extractHandler) {\n if (extractHandler.textExtract) {\n this._wrap(\n extractHandler,\n 'textExtract',\n this.patchStagehandExtractHandlerTextExtract(),\n );\n }\n\n if (extractHandler.domExtract) {\n this._wrap(\n extractHandler,\n 'domExtract',\n this.patchStagehandExtractHandlerDomExtract(),\n );\n }\n }\n\n this._wrap(\n page,\n 'act',\n this.patchStagehandGlobalMethod('act', sessionId),\n );\n\n this._wrap(\n page,\n 'extract',\n this.patchStagehandGlobalMethod('extract', sessionId),\n );\n\n this._wrap(\n page,\n 'observe',\n this.patchStagehandGlobalMethod('observe', sessionId),\n );\n }\n\n private patchStagehandGlobalMethod(methodName: string, sessionId: StringUUID) {\n const instrumentation = this;\n return (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n if (methodName === \"extract\"\n && Array.isArray(input)\n && input.length > 0 && (input[0])?.schema\n ) {\n // We need to clone the input object to avoid mutating the original object\n // because the original object is passed to the LLM client\n const { schema, ...rest } = input[0];\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n input[0] = { ...rest, schema: prettySchema };\n }\n return await Laminar.withSpan(\n instrumentation.playwrightInstrumentation.getParentSpanForSession(sessionId)!,\n async () => await laminarObserve(\n {\n name: `stagehand.${methodName}`,\n input,\n },\n async (thisArg: any, rest: any[]) => await original.apply(thisArg, rest),\n this, args,\n ),\n );\n };\n }\n\n private patchStagehandV1ActHandlerAct() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.act',\n input: {\n action: args[0].action,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n chunksSeen: args[0].chunksSeen,\n steps: args[0].steps,\n requestId: args[0].requestId,\n schema: args[0].schema,\n retries: args[0].retries,\n variables: args[0].variables,\n previousSelectors: args[0].previousSelectors,\n skipActionCacheForThisStep: args[0].skipActionCacheForThisStep,\n domSettleTimeoutMs: args[0].domSettleTimeoutMs,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandV2ActHandlerActFromObserveResult() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.actFromObserveResult',\n input: {\n observe: args?.[0] ?? null,\n domSettleTimeoutMs: args?.[1] ?? null,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandV2ActHandlerObserveAct() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n const actOptions = args?.[0] as ActOptions | undefined;\n const llmClient = args.filter((arg) =>\n Object.keys(arg).includes('modelName'),\n )[0] as LLMClient | undefined;\n const requestId = typeof args?.[3] === 'string' ? args?.[3] : null;\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.observeAct',\n input: {\n action: actOptions?.action,\n modelName: actOptions?.modelName,\n variables: actOptions?.variables,\n domSettleTimeoutMs: actOptions?.domSettleTimeoutMs,\n timeoutMs: actOptions?.timeoutMs,\n llmClient: cleanStagehandLLMClient(llmClient ?? {}),\n requestId: requestId,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n // Stagehand uses zod 3.x, so we need to use the v3 version of zod\n private patchStagehandExtractHandlerTextExtract() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function textExtract(this: any, ...args: any[]) {\n const schema = (args[0].schema as z.AnyZodObject);\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n return await laminarObserve(\n {\n name: 'stagehand.extractHandler.textExtract',\n input: {\n instruction: args[0].instruction,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n requestId: args[0].requestId,\n schema: prettySchema,\n content: args[0].content,\n domSettleTimeoutMs: args[0].domSettleTimeoutMs,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandExtractHandlerDomExtract() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function domExtract(this: any, ...args: any[]) {\n const schema = (args[0].schema as z.AnyZodObject);\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n\n return await laminarObserve(\n {\n name: 'stagehand.extractHandler.domExtract',\n input: {\n instruction: args[0].instruction,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n requestId: args[0].requestId,\n schema: prettySchema,\n content: args[0].content,\n chunksSeen: args[0].chunksSeen,\n domSettleTimeoutMs: args[0].domSettleTimeoutMs,\n },\n },\n async () => await original.apply(this, args),\n );\n };\n }\n\n private patchStagehandObserveHandler() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function observe(this: any, ...args: any[]) {\n\n return await laminarObserve(\n {\n name: 'stagehand.observeHandler.observe',\n input: {\n instruction: args[0].instruction,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n requestId: args[0].requestId,\n returnAction: args[0].returnAction,\n onlyVisible: args[0].onlyVisible,\n drawOverlay: args[0].drawOverlay,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandLLMClientCreateChatCompletion() {\n return createLLMClientCreateChatCompletionWrapper(this.globalLLMClientOptions);\n }\n\n private patchStagehandAgentInitializer(sessionId: StringUUID) {\n const instrumentation = this;\n return (original: (...args: any[]) => any) =>\n function agent(this: any, ...args: any[]) {\n if (args.length > 0 && typeof args[0] === 'object') {\n instrumentation.globalAgentOptions.set(this, args[0]);\n }\n const agent = original.bind(this).apply(this, args);\n instrumentation.patchStagehandAgent(agent, sessionId);\n return agent;\n };\n }\n\n private patchStagehandAgent(agent: AgentClient, sessionId: StringUUID) {\n this._wrap(\n agent,\n 'execute',\n this.patchStagehandAgentExecute(sessionId),\n );\n }\n\n private patchStagehandAgentExecute(sessionId: StringUUID) {\n const instrumentation = this;\n return (original: (this: any, ...args: any[]) => Promise<any>) =>\n async function execute(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n\n return await Laminar.withSpan(\n instrumentation.playwrightInstrumentation.getParentSpanForSession(sessionId)!,\n async () => await laminarObserve(\n {\n name: 'stagehand.agent.execute',\n input,\n },\n async () => await laminarObserve(\n {\n name: 'execute',\n // input and output are set as gen_ai.prompt and gen_ai.completion\n ignoreInput: true,\n ignoreOutput: true,\n spanType: \"LLM\",\n },\n async () => {\n const span = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n\n const provider = instrumentation.globalAgentOptions.get(this)?.provider\n ?? instrumentation.globalLLMClientOptions.get(this)?.provider;\n const model = instrumentation.globalAgentOptions.get(this)?.model\n ?? instrumentation.globalLLMClientOptions.get(this)?.model;\n span?.setAttributes({\n ...(provider ? { \"gen_ai.system\": provider } : {}),\n ...(model ? { \"gen_ai.request.model\": model } : {}),\n });\n\n let promptIndex = 0;\n if (instrumentation.globalAgentOptions.get(this)?.instructions) {\n span?.setAttributes({\n \"gen_ai.prompt.0.content\":\n instrumentation.globalAgentOptions.get(this)?.instructions,\n \"gen_ai.prompt.0.role\": \"system\",\n });\n promptIndex++;\n }\n\n const instruction = typeof input === 'string' ? input : (input as any).instruction;\n if (instruction) {\n span?.setAttributes({\n [`gen_ai.prompt.${promptIndex}.content`]: instruction,\n [`gen_ai.prompt.${promptIndex}.role`]: \"user\",\n });\n }\n\n const result = await original\n .bind(this)\n .apply(this, args);\n\n if (result.completed && result.success && result.message) {\n const content = [{ type: \"text\", text: result.message }];\n if (result.actions && result.actions.length > 0) {\n content.push({\n type: \"text\",\n text: JSON.stringify({ actions: result.actions }),\n });\n }\n span?.setAttributes({\n \"gen_ai.completion.0.content\": JSON.stringify(content),\n \"gen_ai.completion.0.role\": \"assistant\",\n });\n } else if (result.completed && !result.success) {\n span?.recordException(new Error(result.message));\n }\n if (result.usage) {\n span?.setAttributes({\n \"gen_ai.usage.input_tokens\": result.usage.input_tokens,\n \"gen_ai.usage.output_tokens\": result.usage.output_tokens,\n \"llm.usage.total_tokens\":\n result.usage.input_tokens + result.usage.output_tokens,\n });\n }\n return result;\n },\n ),\n ),\n );\n };\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return\n*/\n","import { LaminarClient } from '@lmnr-ai/client';\nimport { SessionRecordingOptions } from '@lmnr-ai/types';\nimport { diag, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\nimport type * as PuppeteerLib from \"puppeteer\";\nimport type { Browser, BrowserContext, Page } from 'puppeteer';\nimport type * as PuppeteerCoreLib from \"puppeteer-core\";\n\nimport { version as SDK_VERSION } from \"../../package.json\";\nimport { observe } from '../decorators';\nimport { TRACE_HAS_BROWSER_SESSION } from '../opentelemetry-lib/tracing/attributes';\nimport { LaminarContextManager } from '../opentelemetry-lib/tracing/context';\nimport { initializeLogger, newUUID, NIL_UUID, otelTraceIdToUUID, StringUUID } from '../utils';\nimport {\n ChunkBuffer,\n EventChunk,\n injectSessionRecorder,\n LMNR_SEND_EVENTS_FUNCTION_NAME,\n sendEvents,\n sendPageEvents,\n takeFullSnapshot,\n} from \"./utils\";\n\nconst logger = initializeLogger();\n\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class PuppeteerInstrumentation extends InstrumentationBase {\n private _patchedBrowsers: Set<Browser> = new Set();\n private _client: LaminarClient;\n private _sessionRecordingOptions?: SessionRecordingOptions;\n\n constructor(client: LaminarClient, sessionRecordingOptions?: SessionRecordingOptions) {\n super(\n \"@lmnr/puppeteer-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this._client = client;\n this._sessionRecordingOptions = sessionRecordingOptions;\n }\n\n protected init(): InstrumentationModuleDefinition[] {\n const puppeteerInstrumentation = new InstrumentationNodeModuleDefinition(\n \"puppeteer\",\n // About two years before first writing this instrumentation\n // and apparently no big breaking changes afterwards\n // https://github.com/puppeteer/puppeteer/releases\n ['>=19.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n const puppeteerCoreInstrumentation = new InstrumentationNodeModuleDefinition(\n \"puppeteer-core\",\n ['>=19.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return [puppeteerInstrumentation, puppeteerCoreInstrumentation];\n }\n\n public manuallyInstrument(puppeteerModule: typeof PuppeteerLib | typeof PuppeteerCoreLib) {\n this._wrap(\n puppeteerModule,\n 'launch',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n puppeteerModule,\n 'connect',\n this.patchNewBrowser(),\n );\n\n return puppeteerModule;\n }\n\n private patch(\n moduleExports: typeof PuppeteerLib | typeof PuppeteerCoreLib,\n moduleVersion?: string,\n ) {\n diag.debug(`patching puppeteer ${moduleVersion}`);\n this._wrap(\n moduleExports,\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.PuppeteerNode.prototype,\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports,\n `connect`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.Puppeteer.prototype,\n `connect`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.default,\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.default,\n `connect`,\n this.patchNewBrowser(),\n );\n\n return moduleExports;\n }\n\n private unpatch(moduleExports: typeof PuppeteerLib, moduleVersion?: string) {\n diag.debug(`unpatching puppeteer ${moduleVersion}`);\n this._unwrap(\n moduleExports,\n `launch`,\n );\n\n this._unwrap(\n moduleExports,\n `connect`,\n );\n\n this._unwrap(\n moduleExports.PuppeteerNode.prototype,\n `launch`,\n );\n\n this._unwrap(\n moduleExports.Puppeteer.prototype,\n `connect`,\n );\n\n this._unwrap(\n moduleExports.default,\n `connect`,\n );\n\n this._unwrap(\n moduleExports.default,\n `launch`,\n );\n\n for (const browser of this._patchedBrowsers) {\n this._unwrap(browser, 'createBrowserContext');\n }\n }\n\n private patchNewBrowser() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: any[]) {\n const browser: Browser = await original.call(this, ...args);\n const sessionId = newUUID();\n\n for (const context of browser.browserContexts()) {\n context.on('targetcreated', (target) => {\n target.page().then(page => {\n if (page) {\n plugin.patchPage(page, sessionId).catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n })\n .catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n await Promise.all((await context.pages()).map(page => plugin.patchPage(page, sessionId)));\n }\n\n plugin._wrap(\n browser,\n 'createBrowserContext',\n plugin.patchBrowserNewContext(),\n );\n\n plugin._patchedBrowsers.add(browser);\n return browser;\n };\n }\n\n private patchBrowserNewContext() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: unknown[]) {\n const context: BrowserContext = await original.bind(this).apply(this, args);\n const sessionId = newUUID();\n // Patch pages created by browser, e.g. new tab\n context.on('targetcreated', (target) => {\n target.page().then(page => {\n if (page) {\n plugin.patchPage(page, sessionId).catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n })\n .catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n context.on('targetchanged', (target) => {\n target.page().then(page => {\n if (page) {\n plugin.patchPage(page, sessionId).catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n })\n .catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n\n // Patch pages that are already created\n for (const page of await context.pages()) {\n await plugin.patchPage(page, sessionId);\n }\n\n return context;\n };\n }\n\n public async patchPage(page: Page, sessionId: StringUUID) {\n return await observe({ name: 'puppeteer.page' }, async () => {\n await this._patchPage(page, sessionId);\n });\n }\n\n private async _patchPage(page: Page, sessionId: StringUUID) {\n const originalBringToFront = page.bringToFront.bind(page);\n\n page.bringToFront = async () => {\n await originalBringToFront();\n await takeFullSnapshot(page);\n };\n\n const currentSpan = trace.getSpan(LaminarContextManager.getContext()) ?? trace.getActiveSpan();\n currentSpan?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n const otelTraceId = currentSpan?.spanContext().traceId;\n const traceId = otelTraceId ? otelTraceIdToUUID(otelTraceId) : NIL_UUID;\n\n page.on('domcontentloaded', () => {\n injectSessionRecorder(page, this._sessionRecordingOptions).catch(error => {\n logger.error(\"Error in onLoad handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n\n page.on('close', () => {\n sendPageEvents(this._client, page, sessionId, traceId).catch(error => {\n logger.error(\"Error in onClose handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n\n await injectSessionRecorder(page, this._sessionRecordingOptions);\n\n const chunkBuffers = new Map<string, ChunkBuffer>();\n\n try {\n await page.exposeFunction(LMNR_SEND_EVENTS_FUNCTION_NAME, async (chunk: EventChunk) => {\n await sendEvents(chunk, this._client, chunkBuffers, sessionId, traceId);\n });\n } catch (error) {\n logger.debug(\"Could not expose function \" + LMNR_SEND_EVENTS_FUNCTION_NAME + \": \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\n","import { initializeLogger } from \"../../../utils\";\n\nexport const logger = initializeLogger();\n\n// CDP timeout for operations\nexport const CDP_OPERATION_TIMEOUT_MS = 10000;\n\n// URLs that should be skipped for recording\nexport const SKIP_URL_PATTERNS = [\n \"about:blank\",\n \"chrome-error://\",\n \"chrome://\",\n \"edge-error://\",\n \"edge://\",\n \"about:neterror\",\n \"about:certerror\",\n \"devtools://\",\n];\n","import { SessionRecordingOptions } from \"@lmnr-ai/types\";\n\nimport { RECORDER } from \"../../recorder\";\nimport { injectScript } from \"../../utils\";\nimport {\n CDP_OPERATION_TIMEOUT_MS,\n logger,\n SKIP_URL_PATTERNS,\n} from \"./constants\";\nimport {\n type FrameTree,\n type RuntimeBindingCalledEvent,\n type RuntimeEvaluateResult,\n type StagehandCdpConnection,\n type StagehandV3Page,\n type V3RecorderState,\n} from \"./types\";\n\n/**\n * Check if a URL should be skipped for recording (error pages, blank pages, etc.)\n */\nexport function shouldSkipUrl(url: string): boolean {\n if (!url) return true;\n return SKIP_URL_PATTERNS.some(pattern => url.startsWith(pattern));\n}\n\n/**\n * Create an isolated world for a page and return the execution context ID\n */\nexport async function getOrCreateIsolatedWorld(\n page: StagehandV3Page,\n): Promise<{ contextId: number; frameId: string } | null> {\n try {\n // Get the frame tree to find the main frame\n const frameTreeResult = await Promise.race([\n page.sendCDP<{ frameTree: FrameTree }>(\"Page.getFrameTree\"),\n new Promise<null>((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout getting frame tree\")), CDP_OPERATION_TIMEOUT_MS),\n ),\n ]);\n\n if (!frameTreeResult) return null;\n\n const frameId = frameTreeResult.frameTree.frame.id;\n\n // Create isolated world\n const isolatedWorldResult = await Promise.race([\n page.sendCDP<{ executionContextId: number }>(\"Page.createIsolatedWorld\", {\n frameId,\n worldName: \"laminar-recorder\",\n }),\n new Promise<null>((_, reject) =>\n setTimeout(() => reject(\n new Error(\"Timeout creating isolated world\")), CDP_OPERATION_TIMEOUT_MS,\n ),\n ),\n ]);\n\n if (!isolatedWorldResult) return null;\n\n return {\n contextId: isolatedWorldResult.executionContextId,\n frameId,\n };\n } catch (error) {\n logger.debug(\"Failed to create isolated world: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Check if the session recorder is already present in the page\n */\nexport async function isRecorderPresent(\n page: StagehandV3Page,\n contextId: number,\n): Promise<boolean> {\n try {\n const result = await Promise.race([\n page.sendCDP<RuntimeEvaluateResult>(\"Runtime.evaluate\", {\n expression: \"typeof window.lmnrRrweb !== 'undefined'\",\n contextId,\n returnByValue: true,\n }),\n new Promise<null>((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout checking recorder\")), CDP_OPERATION_TIMEOUT_MS),\n ),\n ]);\n\n if (!result) return true; // On timeout, assume present to avoid double injection\n return result.result?.value === true;\n } catch (error) {\n logger.debug(\"Failed to check if recorder is present: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return true; // On error, assume present to be safe\n }\n}\n\n/**\n * Inject the session recorder into a page using CDP\n */\nexport async function injectRecorderViaCDP(\n page: StagehandV3Page,\n state: V3RecorderState,\n conn: StagehandCdpConnection,\n sessionRecordingOptions?: SessionRecordingOptions,\n bindingHandler?: (event: RuntimeBindingCalledEvent) => void,\n): Promise<number | null> {\n try {\n // Check if we should skip this page\n let url: string;\n try {\n url = page.url();\n } catch (error) {\n logger.debug(\"Failed to get page URL, page might be closed: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n\n if (shouldSkipUrl(url)) {\n logger.debug(`Skipping recorder injection for URL: ${url}`);\n return null;\n }\n\n // Get or create isolated world\n const worldResult = await getOrCreateIsolatedWorld(page);\n if (!worldResult) {\n logger.debug(\"Failed to get isolated world for page\");\n return null;\n }\n\n const { contextId, frameId } = worldResult;\n\n // Check if already injected\n if (await isRecorderPresent(page, contextId)) {\n logger.debug(\"Recorder already present, skipping injection\");\n // Still register the context mapping\n state.contextIdToSession.set(contextId, {\n sessionId: state.sessionId,\n traceId: state.traceId,\n });\n return contextId;\n }\n\n // Inject rrweb base\n try {\n await page.sendCDP(\"Runtime.evaluate\", {\n expression: RECORDER,\n contextId,\n });\n } catch (error) {\n logger.debug(\"Failed to inject rrweb: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n\n // Inject recording setup script using the existing injectScript function\n // Convert function to string and create an IIFE with options\n // Pass true for stringifyCallbackArgs since CDP bindings require stringified arguments\n const optionsJson = JSON.stringify(sessionRecordingOptions ?? {});\n const injectExpression = `(${injectScript.toString()})(${optionsJson}, true);`;\n try {\n await page.sendCDP(\"Runtime.evaluate\", {\n expression: injectExpression,\n contextId,\n });\n } catch (error) {\n logger.debug(\"Failed to inject recording setup: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n\n // Add binding globally (not scoped to execution context)\n // The Runtime.bindingCalled event will include the executionContextId\n try {\n await page.sendCDP(\"Runtime.addBinding\", {\n name: \"lmnrSendEvents\",\n });\n logger.debug(`Added binding 'lmnrSendEvents' for page ${frameId}, context ${contextId}`);\n } catch (error) {\n // Binding might already exist, that's ok\n logger.debug(\"Binding may already exist: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n\n // Set up binding handler on this page using the internal Stagehand CDP session\n // The page.sendCDP method goes through the page's mainSession, so we need to listen there\n // We can access the session through the connection's internal structure\n if (bindingHandler) {\n try {\n const pageTargetId = page.targetId();\n if (!state.pageSessionHandlers.has(pageTargetId)) {\n // Access the connection's sessions map to find the session for this page\n const connInternal = conn as unknown as {\n getSession(sessionId: string): {\n on<P>(event: string, handler: (params: P) => void): void\n } | undefined;\n sessions: Map<string, unknown>;\n };\n\n // In Stagehand v3, each page has a corresponding session\n // We need to find the session that owns this page/target\n // The session for a page target is tracked in the context\n // We can iterate sessions and try to set up the listener\n if (connInternal.sessions) {\n for (const [sessionId, session] of connInternal.sessions.entries()) {\n try {\n // Set up the handler on each session (the correct one will receive the events)\n const sessionTyped = session as {\n on<P>(event: string, handler: (params: P) => void): void\n };\n if (sessionTyped.on) {\n sessionTyped.on<RuntimeBindingCalledEvent>(\n \"Runtime.bindingCalled\",\n bindingHandler,\n );\n logger.debug(`Set up binding handler on session ${sessionId}`);\n }\n } catch (error) {\n // Session might be closed, continue with next session\n logger.debug(`Failed to set up binding handler on session ${sessionId}: ` +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n state.pageSessionHandlers.set(pageTargetId, bindingHandler);\n }\n } catch (error) {\n logger.debug(\"Failed to set up binding handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Register context mapping\n state.contextIdToSession.set(contextId, {\n sessionId: state.sessionId,\n traceId: state.traceId,\n });\n logger.debug(\n `Registered context mapping: contextId=${contextId}, sessionId=${state.sessionId}`,\n );\n\n // Mark page as instrumented\n state.instrumentedPageIds.add(frameId);\n\n logger.debug(`Successfully injected recorder into page ${frameId}`);\n return contextId;\n } catch (error) {\n logger.debug(\"Error injecting recorder: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n","import { type SessionRecordingOptions, type StringUUID } from \"@lmnr-ai/types\";\n\nimport { EventChunk, sendEvents } from \"../../utils\";\nimport { injectRecorderViaCDP, shouldSkipUrl } from \"./cdp-helpers\";\nimport { logger } from \"./constants\";\nimport {\n RuntimeBindingCalledEvent,\n StagehandV3Context,\n TargetCreatedEvent,\n TargetInfoChangedEvent,\n V3RecorderState,\n} from \"./types\";\n\n/**\n * Handle Runtime.bindingCalled events\n */\nexport function createBindingHandler(\n state: V3RecorderState,\n): (event: RuntimeBindingCalledEvent) => void {\n return (event: RuntimeBindingCalledEvent) => {\n if (event.name !== \"lmnrSendEvents\") return;\n const sessionInfo = state.contextIdToSession.get(event.executionContextId);\n if (!sessionInfo) {\n // Try to find any matching session (for cases where context ID changed)\n // This is a fallback - normally the context should be mapped\n if (state.contextIdToSession.size > 0) {\n // Use the first available session info as fallback\n const [, fallbackInfo] = state.contextIdToSession.entries().next().value as\n [number, { sessionId: StringUUID; traceId: StringUUID }];\n if (fallbackInfo) {\n try {\n const chunk = JSON.parse(event.payload) as EventChunk;\n void sendEvents(\n chunk,\n state.client,\n state.chunkBuffers,\n fallbackInfo.sessionId,\n fallbackInfo.traceId,\n );\n } catch (error) {\n logger.debug(\"Failed to parse binding payload: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n return;\n }\n\n try {\n const chunk = JSON.parse(event.payload) as EventChunk;\n void sendEvents(\n chunk,\n state.client,\n state.chunkBuffers,\n sessionInfo.sessionId,\n sessionInfo.traceId,\n );\n } catch (error) {\n logger.debug(\"Failed to handle binding event: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n };\n}\n\n/**\n * Handle Target.targetCreated events for new pages\n */\nexport function createTargetCreatedHandler(\n context: StagehandV3Context,\n state: V3RecorderState,\n sessionRecordingOptions?: SessionRecordingOptions,\n): (event: TargetCreatedEvent) => Promise<void> {\n return async (event: TargetCreatedEvent) => {\n try {\n if (event.targetInfo.type !== \"page\") return;\n\n // Wait a bit for the page to be available in the context\n await new Promise(resolve => setTimeout(resolve, 200));\n // Try to inject into all uninstrumented pages\n for (const page of context.pages()) {\n try {\n const pageId = page.mainFrameId();\n if (!state.instrumentedPageIds.has(pageId)) {\n await injectRecorderViaCDP(\n page,\n state,\n context.conn,\n sessionRecordingOptions,\n state.bindingHandler ?? undefined,\n );\n }\n } catch (error) {\n // Page might have been closed or CDP session lost, continue with next page\n logger.debug(\"Error injecting recorder into new page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n } catch (error) {\n logger.debug(\"Error handling target created event: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n };\n}\n\n/**\n * Handle Target.targetInfoChanged events for URL changes/navigation\n */\nexport function createTargetInfoChangedHandler(\n context: StagehandV3Context,\n state: V3RecorderState,\n sessionRecordingOptions?: SessionRecordingOptions,\n): (event: TargetInfoChangedEvent) => Promise<void> {\n return async (event: TargetInfoChangedEvent) => {\n // Only handle page targets\n if (event.targetInfo.type !== \"page\") return;\n\n const url = event.targetInfo.url;\n\n if (shouldSkipUrl(url)) return;\n\n logger.debug(`Target URL changed to ${url}, checking if recorder injection needed`);\n\n await new Promise(resolve => setTimeout(resolve, 150));\n\n try {\n for (const page of context.pages()) {\n // Try to match by target ID\n const targetId = page.targetId();\n if (targetId === event.targetInfo.targetId) {\n await injectRecorderViaCDP(\n page, state, context.conn, sessionRecordingOptions, state.bindingHandler ?? undefined,\n );\n break;\n }\n }\n } catch (error) {\n logger.debug(\"Error handling target info change: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n };\n}\n","import { LaminarClient } from \"@lmnr-ai/client\";\nimport { type SessionRecordingOptions } from \"@lmnr-ai/types\";\nimport { diag, type Span, trace } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { version as SDK_VERSION } from \"../../../../package.json\";\nimport { observe as laminarObserve } from \"../../../decorators\";\nimport { Laminar } from \"../../../laminar\";\nimport { TRACE_HAS_BROWSER_SESSION } from \"../../../opentelemetry-lib/tracing/attributes\";\nimport { LaminarContextManager } from \"../../../opentelemetry-lib/tracing/context\";\nimport { newUUID, NIL_UUID, otelTraceIdToUUID, StringUUID } from \"../../../utils\";\nimport { nameArgsOrCopy, prettyPrintZodSchema } from \"../../utils\";\nimport {\n createLLMClientCreateChatCompletionWrapper,\n GlobalLLMClientOptions,\n} from \"../shared-llm-wrapper\";\nimport { injectRecorderViaCDP } from \"./cdp-helpers\";\nimport { logger } from \"./constants\";\nimport {\n createBindingHandler,\n createTargetCreatedHandler,\n createTargetInfoChangedHandler,\n} from \"./event-handlers\";\nimport {\n StagehandV3Context,\n TargetCreatedEvent,\n TargetInfoChangedEvent,\n V3RecorderState,\n} from \"./types\";\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return,\n @typescript-eslint/no-misused-promises\n*/\nexport class StagehandInstrumentation extends InstrumentationBase {\n private stagehandInstanceToSessionId: WeakMap<object, StringUUID> = new WeakMap();\n private globalLLMClientOptions: WeakMap<\n any,\n GlobalLLMClientOptions | undefined\n > = new WeakMap();\n private globalAgentOptions: WeakMap<\n object,\n Record<string, any> | undefined\n > = new WeakMap();\n private sessionIdToParentSpan: Map<StringUUID, Span> = new Map();\n\n // Session recording state per Stagehand instance\n private stagehandInstanceToRecorderState: WeakMap<object, V3RecorderState> = new WeakMap();\n\n // LaminarClient for sending events (set externally)\n private _client: LaminarClient | null = null;\n\n // Session recording options\n private _sessionRecordingOptions?: SessionRecordingOptions;\n\n constructor(sessionRecordingOptions?: SessionRecordingOptions) {\n super(\n \"@lmnr/browserbase-stagehand-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this._sessionRecordingOptions = sessionRecordingOptions;\n }\n\n /**\n * Set the LaminarClient to use for sending browser events.\n * This must be called before Stagehand.init() to enable session recording.\n */\n public setClient(client: LaminarClient): void {\n this._client = client;\n }\n\n /**\n * Get the LaminarClient instance\n */\n public get client(): LaminarClient | null {\n return this._client;\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@browserbasehq/stagehand\",\n ['>=3.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n private patch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`patching stagehand ${moduleVersion}`);\n\n // Check if Stagehand is non-configurable\n const descriptor = Object.getOwnPropertyDescriptor(moduleExports, 'Stagehand');\n if (descriptor && !descriptor.configurable) {\n // Create a proxy for the entire module exports\n const originalStagehand = moduleExports.Stagehand;\n const patchedConstructor = this.patchStagehandConstructor()(originalStagehand);\n\n // Create a proxy for the module exports\n return new Proxy(moduleExports, {\n get: (target, prop) => {\n if (prop === 'Stagehand') {\n return patchedConstructor;\n }\n return target[prop as keyof typeof target];\n },\n });\n } else {\n // If it's configurable, use the standard _wrap method\n this._wrap(\n moduleExports,\n 'Stagehand',\n this.patchStagehandConstructor(),\n );\n\n return moduleExports;\n }\n }\n\n public manuallyInstrument(Stagehand: any) {\n diag.debug('manually instrumenting stagehand');\n\n // Patch the prototype methods of the existing constructor\n if (Stagehand && Stagehand.prototype) {\n this._wrap(\n Stagehand.prototype,\n 'init',\n this.patchStagehandInit(),\n );\n this._wrap(\n Stagehand.prototype,\n 'close',\n this.patchStagehandClose(),\n );\n }\n }\n\n private unpatch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`unpatching stagehand ${moduleVersion}`);\n this._unwrap(moduleExports, 'Stagehand');\n\n if (moduleExports.Stagehand && moduleExports.Stagehand.prototype) {\n this._unwrap(moduleExports.Stagehand.prototype, 'init');\n this._unwrap(moduleExports.Stagehand.prototype, 'close');\n this._unwrap(moduleExports.Stagehand.prototype, 'act');\n this._unwrap(moduleExports.Stagehand.prototype, 'extract');\n this._unwrap(moduleExports.Stagehand.prototype, 'observe');\n\n // Try to unwrap handler methods if they exist on the prototype\n const prototype = moduleExports.Stagehand.prototype;\n if (prototype.actHandler) {\n this._unwrap(prototype.actHandler, 'act');\n this._unwrap(prototype.actHandler, 'actFromObserveResult');\n }\n if (prototype.extractHandler) {\n this._unwrap(prototype.extractHandler, 'extract');\n }\n if (prototype.observeHandler) {\n this._unwrap(prototype.observeHandler, 'observe');\n }\n // Try to unwrap LLM client if it exists\n if (prototype.llmClient) {\n this._unwrap(prototype.llmClient, 'createChatCompletion');\n }\n }\n\n return moduleExports;\n }\n\n private patchStagehandConstructor() {\n const instrumentation = this;\n\n return (Original: any) => {\n // Create a constructor function that maintains the same signature\n const Stagehand = function (this: InstanceType<typeof Original>, ...args: any[]) {\n // Only apply if this is a new instance\n if (!(this instanceof Stagehand)) {\n return new (Stagehand)(...args);\n }\n\n const instance = new Original(args.length > 0 ? args[0] : undefined);\n Object.assign(this, instance);\n\n instrumentation._wrap(\n this,\n 'init',\n instrumentation.patchStagehandInit(),\n );\n\n instrumentation._wrap(\n this,\n 'close',\n instrumentation.patchStagehandClose(),\n );\n\n return this;\n } as unknown as typeof Original;\n\n // Copy static properties\n Object.setPrototypeOf(Stagehand, Original);\n // Copy prototype properties\n Stagehand.prototype = Object.create(Original.prototype);\n Stagehand.prototype.constructor = Stagehand;\n\n return Stagehand;\n };\n }\n\n private patchStagehandInit() {\n const instrumentation = this;\n\n return (original: any) => async function method(this: any) {\n const sessionId = newUUID();\n\n // Create parent span for this Stagehand session\n const parentSpan = Laminar.startSpan({\n name: 'Stagehand',\n });\n instrumentation.sessionIdToParentSpan.set(sessionId, parentSpan);\n\n instrumentation.stagehandInstanceToSessionId.set(this, sessionId);\n\n // Get trace ID from current span context\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n currentSpan?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n const otelTraceId = currentSpan?.spanContext().traceId;\n const traceId = otelTraceId ? otelTraceIdToUUID(otelTraceId) : NIL_UUID;\n\n // Call the original init method first\n const result = await original.bind(this).apply(this);\n\n // After init, wrap the global methods on the stagehand instance\n instrumentation._wrap(\n this,\n 'act',\n instrumentation.patchStagehandGlobalMethod('act', sessionId, parentSpan),\n );\n\n instrumentation._wrap(\n this,\n 'extract',\n instrumentation.patchStagehandGlobalMethod('extract', sessionId, parentSpan),\n );\n\n instrumentation._wrap(\n this,\n 'observe',\n instrumentation.patchStagehandGlobalMethod('observe', sessionId, parentSpan),\n );\n\n // Wrap handler methods if they exist\n if (this.actHandler) {\n instrumentation.patchActHandler(this.actHandler);\n }\n\n if (this.extractHandler) {\n instrumentation.patchExtractHandler(this.extractHandler);\n }\n\n if (this.observeHandler) {\n instrumentation.patchObserveHandler(this.observeHandler);\n }\n\n // Wrap LLM client if it exists\n if (this.llmClient) {\n instrumentation.globalLLMClientOptions.set(this.llmClient, {\n provider: this.llmClient.type,\n model: this.llmClient.modelName,\n });\n instrumentation._wrap(\n this.llmClient,\n 'createChatCompletion',\n instrumentation.patchStagehandLLMClientCreateChatCompletion(),\n );\n }\n\n // Wrap agent method if it exists\n instrumentation._wrap(\n this,\n 'agent',\n instrumentation.patchStagehandAgentInitializer(sessionId, parentSpan),\n );\n\n // Set up session recording if client is available\n if (instrumentation._client) {\n await instrumentation.setupSessionRecording(this, sessionId, traceId);\n }\n\n // Patch all existing pages\n if (this.context && this.context.pages) {\n for (const page of this.context.pages()) {\n instrumentation.patchStagehandPage(page, parentSpan);\n }\n }\n\n // Set up listener for new pages\n if (this.context && this.context.on) {\n this.context.on('page', (page: any) => {\n instrumentation.patchStagehandPage(page, parentSpan);\n });\n }\n\n return result;\n };\n }\n\n /**\n * Set up session recording for a Stagehand instance\n */\n private async setupSessionRecording(\n stagehandInstance: any,\n sessionId: StringUUID,\n traceId: StringUUID,\n ): Promise<void> {\n if (!this._client) {\n logger.debug(\"No Laminar client available, skipping session recording setup\");\n return;\n }\n\n // Get the context from the Stagehand instance\n const context = stagehandInstance.context as StagehandV3Context | undefined;\n if (!context || !context.conn) {\n logger.debug(\"No context or connection available, skipping session recording setup\");\n return;\n }\n // Create recorder state\n const recorderState: V3RecorderState = {\n sessionId,\n traceId,\n client: this._client,\n chunkBuffers: new Map(),\n contextIdToSession: new Map(),\n instrumentedPageIds: new Set(),\n bindingHandler: null,\n targetCreatedHandler: null,\n targetInfoChangedHandler: null,\n pageSessionHandlers: new Map(),\n };\n\n // Store recorder state\n this.stagehandInstanceToRecorderState.set(stagehandInstance, recorderState);\n\n // Set up binding event handler\n // (will be registered on individual page sessions during injection)\n const bindingHandler = createBindingHandler(recorderState);\n recorderState.bindingHandler = bindingHandler;\n\n // Set up target created handler for new pages\n const targetCreatedHandler = createTargetCreatedHandler(\n context,\n recorderState,\n this._sessionRecordingOptions,\n );\n recorderState.targetCreatedHandler = targetCreatedHandler;\n context.conn.on<TargetCreatedEvent>(\"Target.targetCreated\", targetCreatedHandler);\n\n // Set up target info changed handler for re-injection after navigation\n const targetInfoChangedHandler = createTargetInfoChangedHandler(\n context,\n recorderState,\n this._sessionRecordingOptions,\n );\n recorderState.targetInfoChangedHandler = targetInfoChangedHandler;\n context.conn.on<TargetInfoChangedEvent>(\"Target.targetInfoChanged\", targetInfoChangedHandler);\n\n // Inject recorder into all existing pages\n try {\n const pages = context.pages();\n let injectedCount = 0;\n for (const page of pages) {\n try {\n const result = await injectRecorderViaCDP(\n page,\n recorderState,\n context.conn,\n this._sessionRecordingOptions,\n bindingHandler,\n );\n if (result !== null) {\n injectedCount++;\n }\n } catch (error) {\n // Page might have been closed or CDP session lost, continue with next page\n logger.debug(\"Error injecting recorder into page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n logger.debug(\n `Injected session recorder into ${injectedCount} of ${pages.length} existing page(s)`,\n );\n } catch (error) {\n logger.debug(\"Error accessing pages for recorder injection: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n private patchStagehandClose() {\n const instrumentation = this;\n return (original: Function) => async function method(this: any, ...args: any[]) {\n // Clean up session recording before closing\n instrumentation.cleanupSessionRecording(this);\n\n // Clean up the session from the registry\n const sessionId = instrumentation.stagehandInstanceToSessionId.get(this);\n if (sessionId) {\n instrumentation.stagehandInstanceToSessionId.delete(this);\n }\n\n await original.bind(this).apply(this, args);\n\n // Clean up the parent span from the registry\n if (sessionId) {\n const parentSpan = instrumentation.sessionIdToParentSpan.get(sessionId);\n if (parentSpan) {\n parentSpan.end();\n instrumentation.sessionIdToParentSpan.delete(sessionId);\n }\n }\n };\n }\n\n /**\n * Clean up session recording resources for a Stagehand instance\n */\n private cleanupSessionRecording(stagehandInstance: any): void {\n const recorderState = this.stagehandInstanceToRecorderState.get(stagehandInstance);\n if (!recorderState) return;\n\n // Get the context to remove event listeners\n const context = stagehandInstance.context as StagehandV3Context | undefined;\n if (context && context.conn) {\n // Remove target created handler\n if (recorderState.targetCreatedHandler) {\n try {\n context.conn.off(\"Target.targetCreated\", recorderState.targetCreatedHandler);\n } catch (error) {\n logger.debug(\"Error removing target created handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Remove target info changed handler\n if (recorderState.targetInfoChangedHandler) {\n try {\n context.conn.off(\"Target.targetInfoChanged\", recorderState.targetInfoChangedHandler);\n } catch (error) {\n logger.debug(\"Error removing target info changed handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n\n // Clear state\n recorderState.contextIdToSession.clear();\n recorderState.instrumentedPageIds.clear();\n recorderState.chunkBuffers.clear();\n recorderState.pageSessionHandlers.clear();\n recorderState.bindingHandler = null;\n recorderState.targetCreatedHandler = null;\n recorderState.targetInfoChangedHandler = null;\n\n // Remove from WeakMap\n this.stagehandInstanceToRecorderState.delete(stagehandInstance);\n\n logger.debug(\"Cleaned up session recording for Stagehand instance\");\n }\n\n private patchStagehandGlobalMethod(methodName: string, sessionId: StringUUID, parentSpan: any) {\n return (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n\n // Handle extract schema pretty-printing\n if (methodName === \"extract\"\n && Array.isArray(input)\n && input.length > 1 && (input[1])?.shape\n ) {\n // We need to clone the input object to avoid mutating the original object\n // because the original object is passed to the LLM client\n const schema = input[1];\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n input[1] = prettySchema;\n }\n\n // Also handle extract when options contain schema\n if (methodName === \"extract\"\n && Array.isArray(input)\n && input.length > 0\n && typeof input[0] === 'string'\n && input.length > 1\n && (input[1])?.shape\n ) {\n const schema = input[1];\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n input[1] = prettySchema;\n }\n\n return await Laminar.withSpan(\n currentSpan ?? parentSpan,\n async () => await laminarObserve(\n {\n name: `stagehand.${methodName}`,\n input,\n },\n async (thisArg: any, rest: any[]) => {\n const span = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n span?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n return await original.apply(thisArg, rest);\n },\n this, args,\n ),\n );\n };\n }\n\n private patchActHandler(actHandler: any) {\n // Patch the main act method on the handler\n this._wrap(\n actHandler,\n 'act',\n this.patchActHandlerAct(),\n );\n\n // Patch actFromObserveResult\n this._wrap(\n actHandler,\n 'actFromObserveResult',\n this.patchActHandlerActFromObserveResult(),\n );\n }\n\n private patchActHandlerAct() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n const params = args[0];\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.act',\n input: {\n instruction: params?.instruction,\n variables: params?.variables,\n timeout: params?.timeout,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchActHandlerActFromObserveResult() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function actFromObserveResult(this: any, ...args: any[]) {\n const action = args[0];\n const domSettleTimeoutMs = args[2];\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.actFromObserveResult',\n input: {\n action: action,\n domSettleTimeoutMs: domSettleTimeoutMs,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchExtractHandler(extractHandler: any) {\n // Patch the main extract method on the handler\n this._wrap(\n extractHandler,\n 'extract',\n this.patchExtractHandlerExtract(),\n );\n }\n\n private patchExtractHandlerExtract() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function extract(this: any, ...args: any[]) {\n const params = args[0];\n const schema = params?.schema;\n let prettySchema = schema?.shape;\n\n if (schema) {\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n }\n\n return await laminarObserve(\n {\n name: 'stagehand.extractHandler.extract',\n input: {\n instruction: params?.instruction,\n schema: prettySchema,\n timeout: params?.timeout,\n selector: params?.selector,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchObserveHandler(observeHandler: any) {\n // Patch the main observe method on the handler\n this._wrap(\n observeHandler,\n 'observe',\n this.patchObserveHandlerObserve(),\n );\n }\n\n private patchObserveHandlerObserve() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function observe(this: any, ...args: any[]) {\n const params = args[0];\n return await laminarObserve(\n {\n name: 'stagehand.observeHandler.observe',\n input: {\n instruction: params?.instruction,\n timeout: params?.timeout,\n selector: params?.selector,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandLLMClientCreateChatCompletion() {\n return createLLMClientCreateChatCompletionWrapper(this.globalLLMClientOptions);\n }\n\n private patchStagehandAgentInitializer(sessionId: StringUUID, parentSpan: Span) {\n const instrumentation = this;\n return (original: (...args: any[]) => any) =>\n function agent(this: any, ...args: any[]) {\n if (args.length > 0 && typeof args[0] === 'object') {\n instrumentation.globalAgentOptions.set(this, args[0]);\n }\n const agent = original.bind(this).apply(this, args);\n instrumentation.patchStagehandAgent(agent, sessionId, parentSpan);\n return agent;\n };\n }\n\n private patchStagehandAgent(agent: any, sessionId: StringUUID, parentSpan: Span) {\n this._wrap(\n agent,\n 'execute',\n this.patchStagehandAgentExecute(sessionId, parentSpan),\n );\n\n // Wrap additional agent methods\n this.wrapAgentMethod(\n agent, 'captureScreenshot', parentSpan, { spanType: \"TOOL\", ignoreOutput: true },\n );\n this.wrapAgentMethod(agent, 'setViewport', parentSpan);\n this.wrapAgentMethod(agent, 'setCurrentUrl', parentSpan);\n }\n\n private patchStagehandAgentExecute(sessionId: StringUUID, parentSpan: Span) {\n const instrumentation = this;\n return (original: (this: any, ...args: any[]) => Promise<any>) =>\n async function execute(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n\n return await Laminar.withSpan(\n parentSpan,\n async () => await laminarObserve(\n {\n name: 'stagehand.agent.execute',\n input,\n },\n async () => await laminarObserve(\n {\n name: 'execute',\n // input and output are set as gen_ai.prompt and gen_ai.completion\n ignoreInput: true,\n ignoreOutput: true,\n spanType: \"LLM\",\n },\n async () => {\n const span = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n\n const agentOptions = instrumentation.globalAgentOptions.get(this);\n const provider = agentOptions?.model?.provider\n ?? (\n (agentOptions?.model as string | undefined)?.includes(\"/\") ?\n (agentOptions?.model as string | undefined)?.split(\"/\")[0] :\n instrumentation.globalLLMClientOptions.get(this)?.provider);\n const model = agentOptions?.model?.modelName\n ?? instrumentation.globalLLMClientOptions.get(this)?.model;\n span?.setAttributes({\n ...(provider ? { \"gen_ai.system\": provider } : {}),\n ...(model ? { \"gen_ai.request.model\": model } : {}),\n });\n\n let promptIndex = 0;\n if (agentOptions?.systemPrompt) {\n span?.setAttributes({\n \"gen_ai.prompt.0.content\": agentOptions.systemPrompt,\n \"gen_ai.prompt.0.role\": \"system\",\n });\n promptIndex++;\n }\n\n const instruction = typeof input === 'string' ? input : (input as any).instruction;\n if (instruction) {\n span?.setAttributes({\n [`gen_ai.prompt.${promptIndex}.content`]: instruction,\n [`gen_ai.prompt.${promptIndex}.role`]: \"user\",\n });\n }\n\n const result = await original\n .bind(this)\n .apply(this, args);\n\n if (result.completed && result.success && result.message) {\n const content = [{ type: \"text\", text: result.message }];\n if (result.actions && result.actions.length > 0) {\n content.push({\n type: \"text\",\n text: JSON.stringify({ actions: result.actions }),\n });\n }\n span?.setAttributes({\n \"gen_ai.completion.0.content\": JSON.stringify(content),\n \"gen_ai.completion.0.role\": \"assistant\",\n });\n } else if (result.completed && !result.success) {\n span?.recordException(new Error(result.message));\n }\n if (result.usage) {\n span?.setAttributes({\n \"gen_ai.usage.input_tokens\": result.usage.input_tokens,\n \"gen_ai.usage.output_tokens\": result.usage.output_tokens,\n \"llm.usage.total_tokens\":\n result.usage.input_tokens + result.usage.output_tokens,\n });\n }\n return result;\n },\n ),\n ),\n );\n };\n }\n\n private wrapAgentMethod(\n agent: any,\n methodName: string,\n parentSpan: Span,\n options?: {\n spanType?: \"TOOL\" | \"LLM\" | \"DEFAULT\" | \"EVALUATOR\" | \"EVALUATION\" | \"EXECUTOR\";\n ignoreOutput?: boolean;\n },\n ) {\n if (typeof agent[methodName] !== 'function') return;\n\n this._wrap(\n agent,\n methodName,\n (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n return await Laminar.withSpan(\n currentSpan ?? parentSpan,\n async () => await laminarObserve(\n {\n name: `stagehand.agent.${methodName}`,\n ...(options?.spanType ? { spanType: options.spanType } : {}),\n ...(options?.ignoreOutput ? { ignoreOutput: true } : {}),\n },\n async (argVals: any[]) => await original.bind(this).apply(this, argVals),\n args,\n ),\n );\n },\n );\n }\n\n private patchStagehandPage(page: any, parentSpan: Span) {\n const pageMethods = [\n 'goto',\n 'reload',\n 'goBack',\n 'goForward',\n 'click',\n 'scroll',\n 'dragAndDrop',\n 'type',\n 'keyPress',\n 'keyDown',\n 'keyUp',\n ];\n\n for (const methodName of pageMethods) {\n if (typeof page[methodName] !== 'function') continue;\n\n this._wrap(\n page,\n methodName,\n (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n return await Laminar.withSpan(\n currentSpan ?? parentSpan,\n async () => await laminarObserve(\n {\n name: `stagehand.page.${methodName}`,\n },\n async (argVals: any[]) => await original.bind(this).apply(this, argVals),\n args,\n ),\n );\n },\n );\n }\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return,\n @typescript-eslint/no-misused-promises\n*/\n","import type * as KernelSDK from \"@onkernel/sdk\";\nimport { diag } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { observe } from \"../../decorators\";\nimport { Laminar } from \"../../laminar\";\n\nconst WRAPPED_BROWSER_METHODS: (keyof KernelSDK.Kernel.Browsers)[] = [\n 'create',\n 'retrieve',\n 'list',\n 'delete',\n 'deleteByID',\n 'loadExtensions',\n];\n\nconst WRAPPED_COMPUTER_METHODS: (keyof KernelSDK.Kernel.Browsers.Computer)[] = [\n \"captureScreenshot\",\n \"clickMouse\",\n \"dragMouse\",\n \"moveMouse\",\n \"pressKey\",\n \"scroll\",\n \"typeText\",\n];\n\nconst WRAPPED_PROCESS_METHODS: (keyof KernelSDK.Kernel.Browsers.Process)[] = [\n \"exec\",\n \"kill\",\n \"spawn\",\n \"status\",\n \"stdin\",\n \"stdoutStream\",\n];\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class KernelInstrumentation extends InstrumentationBase {\n constructor() {\n super(\n \"@lmnr/kernel-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@onkernel/sdk\",\n ['>=0.7.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(kernelModule: typeof KernelSDK) {\n // Instrument resource classes\n for (const wrappedMethod of WRAPPED_BROWSER_METHODS) {\n this._wrap(\n kernelModule.Kernel.Browsers.prototype,\n wrappedMethod,\n this.patchMethod('Browser', wrappedMethod, 'DEFAULT'),\n );\n }\n for (const wrappedMethod of WRAPPED_COMPUTER_METHODS) {\n if (wrappedMethod === 'captureScreenshot') {\n this._wrap(\n kernelModule.Kernel.Browsers.Computer.prototype,\n wrappedMethod,\n this.patchTakeScreenshot(),\n );\n } else {\n this._wrap(\n kernelModule.Kernel.Browsers.Computer.prototype,\n wrappedMethod,\n this.patchMethod('Computer', wrappedMethod, 'TOOL'),\n );\n }\n }\n for (const wrappedMethod of WRAPPED_PROCESS_METHODS) {\n this._wrap(\n kernelModule.Kernel.Browsers.Process.prototype,\n wrappedMethod,\n this.patchProcessMethod(wrappedMethod),\n );\n }\n\n // Wrap the Kernel.app() factory method to patch KernelApp.action()\n this._wrap(\n kernelModule.Kernel.prototype,\n 'app',\n this.patchAppFactory(),\n );\n }\n\n private patchMethod(className: string, method: string, spanType: 'DEFAULT' | 'TOOL'): any {\n const plugin = this;\n return (original: (...args: any[]) => KernelSDK.APIPromise<unknown>) =>\n async function (this: any, ...args: any[]) {\n // Use observe() to automatically handle span lifecycle, input/output capture, and errors\n return await observe(\n {\n name: `${className}.${method}`,\n spanType,\n input: plugin.formatInput(args),\n },\n async (innerArgs: any[]) =>\n await (original.bind(this).apply(this, innerArgs)),\n args,\n );\n };\n }\n\n private patchTakeScreenshot(): any {\n const plugin = this;\n return (original: (...args: any[]) => KernelSDK.APIPromise<unknown>) =>\n async function (this: any, ...args: any[]) {\n // Use observe() to automatically handle span lifecycle, input/output capture, and errors\n const span = Laminar.startSpan({\n name: `Computer.captureScreenshot`,\n spanType: 'TOOL',\n input: plugin.formatInput(args),\n });\n try {\n const res = await original.bind(this).apply(this, args) as KernelSDK.APIPromise<unknown>;\n // We could actually parse binary and decode here, but we would need to consume\n // the api response byte stream, which may break the subsequent operations\n // on the response.\n span.setAttribute('lmnr.span.output', '<BASE64_ENCODED_IMAGE>');\n return res;\n } finally {\n span.end();\n }\n };\n }\n\n private patchProcessMethod(method: string): any {\n const plugin = this;\n return (original: (...args: any[]) => KernelSDK.APIPromise<unknown>) =>\n async function (this: any, ...args: any[]) {\n // First parameter of spawn and exec is the session ID, for others its PID (string)\n const input = ['spawn', 'exec'].includes(method)\n ? plugin.formatInput(args)\n : plugin.formatProcessInput(args);\n const span = Laminar.startSpan({\n name: `Process.${method}`,\n spanType: 'TOOL',\n input,\n });\n try {\n const result = await (original.bind(this).apply(this, args) as KernelSDK.APIPromise<{\n stderr_b64?: string,\n stdout_b64?: string,\n }>);\n const output = {\n ...(\n result?.stderr_b64\n ? { stderr: Buffer.from(result.stderr_b64, 'base64').toString('utf-8') }\n : {}\n ),\n ...(\n result?.stdout_b64\n ? { stdout: Buffer.from(result.stdout_b64, 'base64').toString('utf-8') }\n : {}),\n ...result,\n };\n span.setAttribute('lmnr.span.output', JSON.stringify(output));\n return result;\n } finally {\n span.end();\n }\n };\n }\n\n\n private patchAppFactory() {\n const plugin = this;\n return (original: Function) => function (this: any, name: string): any {\n // Call the original app() method to get the KernelApp instance\n const kernelApp = original.call(this, name);\n\n // Patch the action method on the returned KernelApp instance\n plugin._wrap(\n kernelApp,\n 'action',\n plugin.patchKernelAppAction(),\n );\n\n return kernelApp;\n };\n }\n\n private patchKernelAppAction() {\n return (original: any) => function (this: any, name: string, handler: Function): any {\n // Wrap the handler with observe\n const wrappedHandler = async (context: any, payload?: any) => {\n const result = await observe(\n {\n name: `action.${name}`,\n spanType: 'DEFAULT',\n },\n async (innerCtx: any, innerPayload: any) => {\n const result = await handler(innerCtx, innerPayload);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n },\n context,\n payload,\n );\n await Laminar.flush();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n };\n\n // Register the wrapped handler with the original action method\n return original.call(this, name, wrappedHandler);\n };\n }\n\n private formatInput(args: unknown[]): unknown[] {\n if (args.length === 0) {\n return [];\n }\n if (typeof args[0] === \"string\") {\n return [{ session_id: args[0] }, ...args.slice(1)];\n }\n return args;\n }\n\n private formatProcessInput(args: unknown[]): unknown[] {\n if (args.length === 0) {\n return [];\n }\n if (typeof args[0] === \"string\") {\n if (args.length === 1) {\n return [{ processID: args[0] }];\n }\n const requestParams = args[1] as { id?: string };\n if (requestParams.id) {\n return [{ processID: args[0], session_id: requestParams.id }, ...args.slice(1)];\n }\n return [{ processID: args[0] }, ...args.slice(1)];\n }\n return args;\n }\n\n private patch(moduleExports: typeof KernelSDK): any {\n diag.debug('Patching @onkernel/sdk');\n this.manuallyInstrument(moduleExports);\n return moduleExports;\n }\n\n private unpatch(moduleExports: typeof KernelSDK): void {\n diag.debug('Unpatching @onkernel/sdk');\n\n // Unwrap resource classes\n for (const wrappedMethod of WRAPPED_BROWSER_METHODS) {\n this._unwrap(moduleExports.Kernel.Browsers.prototype, wrappedMethod);\n }\n for (const wrappedMethod of WRAPPED_COMPUTER_METHODS) {\n this._unwrap(moduleExports.Kernel.Browsers.Computer.prototype, wrappedMethod);\n }\n for (const wrappedMethod of WRAPPED_PROCESS_METHODS) {\n this._unwrap(moduleExports.Kernel.Browsers.Process.prototype, wrappedMethod);\n }\n\n // Unwrap Kernel.app\n this._unwrap(moduleExports.Kernel.prototype, 'app');\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\n","import { LaminarClient } from \"@lmnr-ai/client\";\nimport { SessionRecordingOptions } from \"@lmnr-ai/types\";\nimport { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport { AnthropicInstrumentation } from \"@traceloop/instrumentation-anthropic\";\nimport { AzureOpenAIInstrumentation } from \"@traceloop/instrumentation-azure\";\nimport { BedrockInstrumentation } from \"@traceloop/instrumentation-bedrock\";\nimport { ChromaDBInstrumentation } from \"@traceloop/instrumentation-chromadb\";\nimport { CohereInstrumentation } from \"@traceloop/instrumentation-cohere\";\nimport { LangChainInstrumentation } from \"@traceloop/instrumentation-langchain\";\nimport { LlamaIndexInstrumentation } from \"@traceloop/instrumentation-llamaindex\";\nimport { OpenAIInstrumentation } from \"@traceloop/instrumentation-openai\";\nimport { PineconeInstrumentation } from \"@traceloop/instrumentation-pinecone\";\nimport { QdrantInstrumentation } from \"@traceloop/instrumentation-qdrant\";\nimport { TogetherInstrumentation } from \"@traceloop/instrumentation-together\";\nimport {\n AIPlatformInstrumentation,\n VertexAIInstrumentation,\n} from \"@traceloop/instrumentation-vertexai\";\n\nimport { PlaywrightInstrumentation } from \"../../browser\";\nimport { PuppeteerInstrumentation } from \"../../browser/puppeteer\";\nimport { StagehandV2Instrumentation } from \"../../browser/stagehand/v2\";\nimport { StagehandInstrumentation as StagehandV3Instrumentation } from \"../../browser/stagehand/v3\";\nimport { ClaudeAgentSDKInstrumentation } from \"../instrumentation/claude-agent-sdk\";\nimport { KernelInstrumentation } from \"../instrumentation/kernel\";\nimport { InitializeOptions } from \"../interfaces\";\n\n/**\n * Initialize and return Laminar instrumentations.\n * Useful to use with libraries that initialize tracing and can register passed\n * instrumentations.\n *\n * @param options\n * @param {string} options.baseUrl - Base URL of the Laminar API.\n * @param {string} options.apiKey - Laminar project API key. If not provided, will use\n * the LMNR_PROJECT_API_KEY environment variable.\n * @param {number} options.httpPort - Laminar API http port. If not provided, will use\n * the port from the baseUrl or defaults to 443. Only required for Playwright/Puppeteer\n * instrumentations for sending browser sessions.\n * @param {boolean} options.suppressContentTracing - Whether to suppress content tracing.\n * @param {InitializeOptions[\"instrumentModules\"]} options.instrumentModules - Record of modules\n * to instrument.\n * If not provided, all auto-instrumentable modules will be instrumented, which include\n * LLM calls (OpenAI, Anthropic, etc), Langchain, VectorDB calls (Pinecone, Qdrant, etc).\n * Pass an empty object {} to disable any kind of automatic instrumentation.\n * If you only want to auto-instrument specific modules, then pass them in the object.\n *\n * @returns {Instrumentation[]} Array of enabled instrumentations. It is your responsibility\n * to enable them and register them with the OpenTelemetry SDK. For example, you could use\n * registerInstrumentations from the opentelemetry-api to register them.\n */\nexport const initializeLaminarInstrumentations = (\n options: {\n baseUrl?: string,\n apiKey?: string,\n httpPort?: number,\n suppressContentTracing?: boolean,\n instrumentModules?: InitializeOptions[\"instrumentModules\"],\n sessionRecordingOptions?: SessionRecordingOptions,\n } = {},\n) => {\n const apiKey = options.apiKey ?? process.env.LMNR_PROJECT_API_KEY;\n\n // Only create client if we have an API key. That is, only send browser\n // session events to Laminar backend, but not other OTEL backends.\n let client: LaminarClient | undefined;\n if (apiKey) {\n const url = options.baseUrl ?? process?.env?.LMNR_BASE_URL ?? 'https://api.lmnr.ai';\n const port = options.httpPort ?? (\n url.match(/:\\d{1,5}$/g)\n ? parseInt(url.match(/:\\d{1,5}$/g)![0].slice(1))\n : 443);\n const urlWithoutSlash = url.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n client = new LaminarClient({\n baseUrl: `${urlWithoutSlash}:${port}`,\n projectApiKey: apiKey,\n });\n }\n\n return options?.instrumentModules !== undefined\n ? manuallyInitInstrumentations(\n client,\n options.instrumentModules,\n options.suppressContentTracing,\n options.sessionRecordingOptions,\n )\n : initInstrumentations(\n client,\n options.suppressContentTracing,\n options.sessionRecordingOptions,\n );\n};\n\n/**\n * Get the appropriate Stagehand instrumentation based on the installed version.\n * Returns v3 instrumentation for stagehand >= 3.0.0, otherwise v2.\n */\nconst getStagehandInstrumentation = (\n playwrightInstrumentation: PlaywrightInstrumentation,\n client: LaminarClient,\n sessionRecordingOptions?: SessionRecordingOptions,\n): StagehandV2Instrumentation | StagehandV3Instrumentation => {\n try {\n // Try to require the stagehand package to get its version\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const stagehandPkg = require(\"@browserbasehq/stagehand/package.json\");\n const version = stagehandPkg.version;\n const majorVersion = parseInt(version.split('.')[0], 10);\n\n if (majorVersion >= 3) {\n const stagehandInstrumentation = new StagehandV3Instrumentation(sessionRecordingOptions);\n stagehandInstrumentation.setClient(client);\n return stagehandInstrumentation;\n }\n else {\n return new StagehandV2Instrumentation(playwrightInstrumentation);\n }\n } catch {\n // If we can't find the package, default to v3\n }\n\n const stagehandInstrumentation = new StagehandV3Instrumentation(sessionRecordingOptions);\n stagehandInstrumentation.setClient(client);\n return stagehandInstrumentation;\n};\n\nconst initInstrumentations = (\n client: LaminarClient | undefined,\n suppressContentTracing?: boolean,\n sessionRecordingOptions?: SessionRecordingOptions,\n): Instrumentation[] => {\n const enrichTokens = false;\n const instrumentations: Instrumentation[] = [];\n\n instrumentations.push(new OpenAIInstrumentation({\n enrichTokens,\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new AnthropicInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new AzureOpenAIInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new CohereInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new VertexAIInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new AIPlatformInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new BedrockInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new PineconeInstrumentation());\n\n instrumentations.push(new LangChainInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new LlamaIndexInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new TogetherInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new ChromaDBInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new QdrantInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n // Browser instrumentations require a client (API key)\n if (client) {\n const playwrightInstrumentation = new PlaywrightInstrumentation(\n client,\n sessionRecordingOptions,\n );\n instrumentations.push(playwrightInstrumentation);\n\n instrumentations.push(getStagehandInstrumentation(\n playwrightInstrumentation,\n client,\n sessionRecordingOptions,\n ));\n\n instrumentations.push(new PuppeteerInstrumentation(client, sessionRecordingOptions));\n }\n\n instrumentations.push(new KernelInstrumentation());\n\n instrumentations.push(new ClaudeAgentSDKInstrumentation());\n\n return instrumentations;\n};\n\nconst manuallyInitInstrumentations = (\n client: LaminarClient | undefined,\n instrumentModules: InitializeOptions[\"instrumentModules\"],\n suppressContentTracing?: boolean,\n sessionRecordingOptions?: SessionRecordingOptions,\n): Instrumentation[] => {\n const enrichTokens = false;\n const instrumentations: Instrumentation[] = [];\n let playwrightInstrumentation: PlaywrightInstrumentation | undefined;\n\n if (instrumentModules?.OpenAI && instrumentModules?.openAI) {\n throw new Error(\n \"`openAI` is deprecated, but both `OpenAI` and `openAI` are provided. \" +\n \"Please use `OpenAI` only.\",\n );\n }\n\n if (instrumentModules?.openAI) {\n const openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(openAIInstrumentation);\n openAIInstrumentation.manuallyInstrument(instrumentModules.openAI);\n }\n\n if (instrumentModules?.OpenAI) {\n const openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(openAIInstrumentation);\n openAIInstrumentation.manuallyInstrument(instrumentModules.OpenAI);\n }\n\n if (instrumentModules?.anthropic) {\n const anthropicInstrumentation = new AnthropicInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(anthropicInstrumentation);\n anthropicInstrumentation.manuallyInstrument(instrumentModules.anthropic as any);\n }\n\n if (instrumentModules?.azureOpenAI) {\n const azureOpenAIInstrumentation = new AzureOpenAIInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(azureOpenAIInstrumentation as Instrumentation);\n azureOpenAIInstrumentation.manuallyInstrument(instrumentModules.azureOpenAI);\n }\n\n if (instrumentModules?.cohere) {\n const cohereInstrumentation = new CohereInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(cohereInstrumentation);\n cohereInstrumentation.manuallyInstrument(instrumentModules.cohere);\n }\n\n if (instrumentModules?.google_vertexai) {\n const vertexaiInstrumentation = new VertexAIInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(vertexaiInstrumentation);\n vertexaiInstrumentation.manuallyInstrument(\n instrumentModules.google_vertexai,\n );\n }\n\n if (instrumentModules?.google_aiplatform) {\n const aiplatformInstrumentation = new AIPlatformInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(aiplatformInstrumentation);\n aiplatformInstrumentation.manuallyInstrument(\n instrumentModules.google_aiplatform,\n );\n }\n\n if (instrumentModules?.bedrock) {\n const bedrockInstrumentation = new BedrockInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(bedrockInstrumentation);\n bedrockInstrumentation.manuallyInstrument(instrumentModules.bedrock);\n }\n\n if (instrumentModules?.pinecone) {\n const instrumentation = new PineconeInstrumentation();\n instrumentations.push(instrumentation as Instrumentation);\n instrumentation.manuallyInstrument(instrumentModules.pinecone);\n }\n\n if (instrumentModules?.langchain) {\n const langchainInstrumentation = new LangChainInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(langchainInstrumentation);\n langchainInstrumentation.manuallyInstrument(instrumentModules.langchain);\n }\n\n if (instrumentModules?.llamaIndex) {\n const llamaIndexInstrumentation = new LlamaIndexInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(llamaIndexInstrumentation);\n llamaIndexInstrumentation.manuallyInstrument(instrumentModules.llamaIndex);\n }\n\n if (instrumentModules?.chromadb) {\n const chromadbInstrumentation = new ChromaDBInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(chromadbInstrumentation);\n chromadbInstrumentation.manuallyInstrument(instrumentModules.chromadb);\n }\n\n if (instrumentModules?.qdrant) {\n const qdrantInstrumentation = new QdrantInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(qdrantInstrumentation);\n qdrantInstrumentation.manuallyInstrument(instrumentModules.qdrant);\n }\n\n if (instrumentModules?.together) {\n const togetherInstrumentation = new TogetherInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(togetherInstrumentation);\n togetherInstrumentation.manuallyInstrument(instrumentModules.together as any);\n }\n\n if (instrumentModules?.playwright && client) {\n playwrightInstrumentation = new PlaywrightInstrumentation(client, sessionRecordingOptions);\n instrumentations.push(playwrightInstrumentation);\n playwrightInstrumentation.manuallyInstrument(instrumentModules.playwright);\n }\n\n if (instrumentModules?.puppeteer && client) {\n const puppeteerInstrumentation = new PuppeteerInstrumentation(client, sessionRecordingOptions);\n instrumentations.push(puppeteerInstrumentation);\n puppeteerInstrumentation.manuallyInstrument(instrumentModules.puppeteer);\n }\n\n if (instrumentModules?.stagehand && client) {\n if (!playwrightInstrumentation) {\n playwrightInstrumentation = new PlaywrightInstrumentation(client, sessionRecordingOptions);\n instrumentations.push(playwrightInstrumentation);\n }\n const stagehandInstrumentation = getStagehandInstrumentation(\n playwrightInstrumentation,\n client,\n sessionRecordingOptions,\n );\n instrumentations.push(stagehandInstrumentation);\n stagehandInstrumentation.manuallyInstrument(instrumentModules.stagehand);\n }\n\n if (instrumentModules?.kernel) {\n const kernelInstrumentation = new KernelInstrumentation();\n instrumentations.push(kernelInstrumentation);\n kernelInstrumentation.manuallyInstrument(instrumentModules.kernel);\n }\n\n if (instrumentModules?.claudeAgentSDK) {\n const claudeAgentInstrumentation = new ClaudeAgentSDKInstrumentation();\n instrumentations.push(claudeAgentInstrumentation);\n claudeAgentInstrumentation.manuallyInstrument(instrumentModules.claudeAgentSDK);\n }\n\n return instrumentations;\n};\n","export const getLangVersion: () => string | undefined = () => {\n if (process?.versions?.node) {\n return `node@${process.versions.node}`;\n }\n// else if (Deno?.version) {\n// return `deno@${Deno?.version?.deno}`;\n// }\n};\n","// This class could be just an initialization of the OTLP exporter,\n// but OTel v2 has some breaking changes, so we're applying\n// a small backward-compatibility fix here.\n\nimport { Metadata } from \"@grpc/grpc-js\";\nimport { ExportResult } from \"@opentelemetry/core\";\nimport {\n OTLPTraceExporter as ExporterGrpc,\n} from \"@opentelemetry/exporter-trace-otlp-grpc\";\nimport {\n OTLPTraceExporter as ExporterHttp,\n} from \"@opentelemetry/exporter-trace-otlp-proto\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\nimport { getOtelEnvVar, initializeLogger, parseOtelHeaders } from \"../../utils\";\nimport { makeSpanOtelV2Compatible } from \"./compat\";\n\nconst logger = initializeLogger();\n\nexport class LaminarSpanExporter implements SpanExporter {\n private exporter: SpanExporter;\n\n constructor(options: {\n baseUrl?: string;\n port?: number;\n apiKey?: string;\n forceHttp?: boolean;\n timeoutMillis?: number;\n } = {}) {\n let url = options.baseUrl ?? process?.env?.LMNR_BASE_URL;\n let port = options.port;\n let forceHttp = options.forceHttp ?? false;\n const key = options.apiKey ?? process?.env?.LMNR_PROJECT_API_KEY;\n\n // Determine headers - either from API key or OTEL env vars\n let headers: Record<string, string> = {};\n if (key) {\n headers = forceHttp\n ? { 'Authorization': `Bearer ${key}` }\n : { 'authorization': `Bearer ${key}` };\n if (!url) {\n url = 'https://api.lmnr.ai';\n }\n } else {\n const otelHeaders = getOtelEnvVar('HEADERS');\n if (otelHeaders) {\n headers = parseOtelHeaders(otelHeaders);\n }\n // Check for OTEL endpoint configuration\n const otelEndpoint = getOtelEnvVar('ENDPOINT');\n if (otelEndpoint && !url) {\n url = otelEndpoint;\n\n // Determine protocol from OTEL env vars\n const otelProtocol = getOtelEnvVar('PROTOCOL') || 'grpc/protobuf';\n const otelExporter = process?.env?.OTEL_EXPORTER;\n forceHttp = otelProtocol === 'http/protobuf'\n || otelProtocol === 'http/json'\n || otelExporter === 'otlp_http';\n } else if (otelEndpoint && url) {\n logger.warn(\n 'OTEL_ENDPOINT is set, but Laminar base URL is also set. Ignoring OTEL_ENDPOINT.',\n );\n }\n }\n\n if (!url) {\n throw new Error(\n 'Laminar base URL is not set and OTEL_ENDPOINT is not set. Please either\\n' +\n '- set the LMNR_BASE_URL environment variable\\n' +\n '- set the OTEL_ENDPOINT environment variable (if you are not using a Laminar API key)\\n' +\n '- pass the baseUrl parameter to Laminar.initialize',\n );\n }\n\n // Calculate port\n if (!port) {\n port = url.match(/:\\d{1,5}$/g)\n ? parseInt(url.match(/:\\d{1,5}$/g)![0].slice(1))\n : (forceHttp ? 443 : 8443);\n }\n\n const urlWithoutSlash = url.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n\n if (forceHttp) {\n this.exporter = new ExporterHttp({\n url: `${urlWithoutSlash}:${port}/v1/traces`,\n headers,\n timeoutMillis: options.timeoutMillis ?? 30000,\n });\n } else {\n const metadata = new Metadata();\n Object.entries(headers).forEach(([key, value]) => {\n metadata.set(key, value);\n });\n this.exporter = new ExporterGrpc({\n url: `${urlWithoutSlash}:${port}`,\n metadata,\n timeoutMillis: options.timeoutMillis ?? 30000,\n });\n }\n }\n\n export(\n items: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ) {\n // ==== //\n // OTel v2 has renamed the instrumentationLibrary field to instrumentationScope,\n // but spans may be created by older versions of the SDK that don't have that change.\n // This is a small hack to support those older spans.\n items.forEach(makeSpanOtelV2Compatible);\n // ==== //\n\n return this.exporter.export(items, resultCallback);\n }\n\n async shutdown(): Promise<void> {\n return this.exporter.shutdown();\n }\n\n async forceFlush(): Promise<void> {\n return this.exporter.forceFlush?.();\n }\n}\n\n","import { LaminarClient } from \"@lmnr-ai/client\";\nimport { SpanType } from \"@lmnr-ai/types\";\nimport { AttributeValue, Context, context } from \"@opentelemetry/api\";\nimport {\n BatchSpanProcessor,\n SimpleSpanProcessor,\n type Span,\n SpanExporter,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"pino\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { initializeLogger, metadataToAttributes, otelSpanIdToUUID, StringUUID } from \"../../utils\";\nimport { getLangVersion } from \"../../version\";\nimport {\n ASSOCIATION_PROPERTIES,\n ASSOCIATION_PROPERTIES_OVERRIDES,\n PARENT_SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n ROLLOUT_SESSION_ID,\n SESSION_ID,\n SPAN_IDS_PATH,\n SPAN_INSTRUMENTATION_SOURCE,\n SPAN_LANGUAGE_VERSION,\n SPAN_PATH,\n SPAN_SDK_VERSION,\n SPAN_TYPE,\n TRACE_TYPE,\n USER_ID,\n} from \"./attributes\";\nimport {\n getParentSpanId,\n makeSpanOtelV2Compatible,\n OTelSpanCompat,\n} from \"./compat\";\nimport {\n ASSOCIATION_PROPERTIES_KEY,\n CONTEXT_SPAN_PATH_KEY,\n} from \"./context\";\nimport { LaminarSpanExporter } from \"./exporter\";\n\ninterface LaminarSpanProcessorOptions {\n /**\n * The base URL of the Laminar API. Optional.\n * Defaults to https://api.lmnr.ai.\n */\n baseUrl?: string;\n /**\n * The port of the Laminar API. Optional.\n * Defaults to 8443.\n */\n port?: number;\n /**\n * Laminar project API key. Optional.\n * If not provided, the LMNR_PROJECT_API_KEY environment variable will be used.\n */\n apiKey?: string;\n /**\n * The maximum number of spans to export at a time. Optional.\n * Defaults to 512.\n */\n maxExportBatchSize?: number;\n /**\n * Whether to disable batching. Optional.\n * Defaults to false.\n */\n disableBatch?: boolean;\n /**\n * Whether to force HTTP and use OpenTelemetry HTTP/protobuf exporter.\n * Not recommended with Laminar backends.\n * Optional.\n * Defaults to false.\n */\n forceHttp?: boolean;\n /**\n * The timeout for sending traces data. Optional.\n * Defaults to 30 seconds.\n */\n traceExportTimeoutMillis?: number;\n\n /**\n * The exporter to use. Optional. If specified, some of the other options will be ignored.\n * Defaults to a new LaminarSpanExporter.\n */\n exporter?: SpanExporter;\n\n /**\n * The span processor to use. If passed, some of the other options will be ignored.\n * If passed, wraps the underlying span processor.\n */\n spanProcessor?: SpanProcessor;\n\n /**\n * The HTTP port to use. Optional.\n * If not provided, the `port` option will be used.\n */\n httpPort?: number;\n}\n\nexport class LaminarSpanProcessor implements SpanProcessor {\n private instance: BatchSpanProcessor | SimpleSpanProcessor;\n private client: LaminarClient | undefined;\n private logger: Logger;\n private readonly _spanIdToPath: Map<string, string[]> = new Map();\n private readonly _spanIdLists: Map<string, string[]> = new Map();\n\n /**\n * @param {object} options - The options for the Laminar span processor.\n * @param {string} options.baseUrl - The base URL of the Laminar API.\n * @param {number} options.port - The port of the Laminar API.\n * @param {string} options.apiKey - Laminar project API key or any other\n * authorization set as bearer token.\n * @param {boolean} options.disableBatch - Whether to disable batching (uses SimpleSpanProcessor).\n * @param {number} options.maxExportBatchSize - The maximum number of spans to export at a time\n * if disableBatch is false.\n * @param {number} options.traceExportTimeoutMillis - The timeout for sending traces data.\n * Defaults to 30 seconds.\n * @param {boolean} options.forceHttp - Whether to force HTTP and use OpenTelemetry\n * HTTP/protobuf exporter.\n * Not recommended with Laminar backends.\n */\n constructor(options: LaminarSpanProcessorOptions = {}) {\n this.logger = initializeLogger();\n if (options.spanProcessor && options.spanProcessor instanceof LaminarSpanProcessor) {\n this.instance = options.spanProcessor.instance;\n // Set by reference, so that updates from the inside are reflected here.\n this._spanIdToPath = options.spanProcessor._spanIdToPath;\n this._spanIdLists = options.spanProcessor._spanIdLists;\n } else if (options.spanProcessor) {\n this.instance = options.spanProcessor as BatchSpanProcessor | SimpleSpanProcessor;\n } else {\n const exporter = options.exporter ?? new LaminarSpanExporter(options);\n this.instance = options.disableBatch\n ? new SimpleSpanProcessor(exporter)\n : new BatchSpanProcessor(exporter, {\n maxExportBatchSize: options.maxExportBatchSize ?? 512,\n exportTimeoutMillis: options.traceExportTimeoutMillis ?? 30000,\n });\n }\n\n if (process.env.LMNR_ROLLOUT_SESSION_ID) {\n this.client = new LaminarClient({\n baseUrl: options.baseUrl,\n projectApiKey: options.apiKey,\n port: options.httpPort ?? options.port,\n });\n }\n }\n\n forceFlush(): Promise<void> {\n return this.instance.forceFlush();\n }\n\n shutdown(): Promise<void> {\n return this.instance.shutdown();\n }\n\n onStart(spanArg: any, parentContext: Context): void {\n const span = spanArg as OTelSpanCompat;\n // Check for parent path attributes first (from serialized span context)\n const parentPathFromAttribute = span.attributes?.[PARENT_SPAN_PATH] as string[] | undefined;\n const parentIdsPathFromAttribute =\n span.attributes?.[PARENT_SPAN_IDS_PATH] as StringUUID[] | undefined;\n\n const parentSpanId = getParentSpanId(span);\n\n // Use parent path from attributes if available, otherwise fall back to cached paths\n const parentSpanPath = parentPathFromAttribute\n ?? (parentSpanId !== undefined\n ? this._spanIdToPath.get(parentSpanId)\n : undefined);\n\n const spanId = span.spanContext().spanId;\n const parentSpanIdsPath = parentIdsPathFromAttribute\n ?? (parentSpanId\n ? this._spanIdLists.get(parentSpanId)\n : []);\n const spanPath = parentSpanPath ? [...parentSpanPath, span.name] : [span.name];\n\n const spanIdUuid = otelSpanIdToUUID(spanId);\n const spanIdsPath = parentSpanIdsPath ? [...parentSpanIdsPath, spanIdUuid] : [spanIdUuid];\n\n span.setAttribute(SPAN_IDS_PATH, spanIdsPath);\n this._spanIdLists.set(spanId, spanIdsPath);\n\n span.setAttribute(SPAN_PATH, spanPath);\n context.active().setValue(CONTEXT_SPAN_PATH_KEY, spanPath);\n this._spanIdToPath.set(spanId, spanPath);\n\n span.setAttribute(SPAN_INSTRUMENTATION_SOURCE, \"javascript\");\n span.setAttribute(SPAN_SDK_VERSION, SDK_VERSION);\n const langVersion = getLangVersion();\n if (langVersion) {\n span.setAttribute(SPAN_LANGUAGE_VERSION, langVersion);\n }\n\n // This sets the properties only if the context has them\n const associationProperties = context\n .active()\n .getValue(ASSOCIATION_PROPERTIES_KEY);\n if (associationProperties) {\n for (const [key, value] of Object.entries(associationProperties)) {\n if (Object.keys(ASSOCIATION_PROPERTIES_OVERRIDES).includes(key)) {\n span.setAttribute(ASSOCIATION_PROPERTIES_OVERRIDES[key], value);\n } else if (key === \"tracing_level\") {\n span.setAttribute(\"lmnr.internal.tracing_level\", value);\n } else if (key === \"rolloutSessionId\") {\n span.setAttribute(ROLLOUT_SESSION_ID, value);\n span.setAttribute(\"lmnr.rollout.session_id\", value);\n } else if (key === \"metadata\" && typeof value === \"object\" && value !== null) {\n // Flatten metadata into individual attributes\n const metadataAttrs = metadataToAttributes(value as Record<string, unknown>);\n span.setAttributes(metadataAttrs);\n } else if (key === \"userId\") {\n span.setAttribute(USER_ID, value);\n } else if (key === \"sessionId\") {\n span.setAttribute(SESSION_ID, value);\n } else if (key === \"traceType\") {\n span.setAttribute(TRACE_TYPE, value);\n } else if (key === \"tracingLevel\") {\n span.setAttribute(\"lmnr.internal.tracing_level\", value);\n } else {\n span.setAttribute(`${ASSOCIATION_PROPERTIES}.${key}`, value);\n }\n }\n }\n\n makeSpanOtelV2Compatible(span);\n\n if (process.env.LMNR_ROLLOUT_SESSION_ID && this.client) {\n this.client.rolloutSessions.sendSpanUpdate({\n sessionId: process.env.LMNR_ROLLOUT_SESSION_ID,\n span: {\n name: span.name,\n startTime: new Date(span.startTime[0] * 1000 + span.startTime[1] / 1e6).toISOString(),\n spanId: span.spanContext().spanId,\n traceId: span.spanContext().traceId,\n parentSpanId: getParentSpanId(span),\n attributes: attributesForStartEvent(span.name, span.attributes),\n spanType: inferSpanType(span.name, span.attributes),\n },\n }).catch((error: any) => {\n this.logger.debug(\n `Failed to send span update: ${error instanceof Error ? error.message : String(error)}`,\n );\n });\n }\n this.instance.onStart((span), parentContext);\n }\n\n // type ReadableSpan\n onEnd(span: any): void {\n // By default, we call the original onEnd.\n makeSpanOtelV2Compatible(span);\n this.instance.onEnd(span as Span);\n }\n\n /**\n * Set parent path information for a given span ID.\n * Used when initializing context from environment variables.\n *\n * @param parentSpanId - The span ID to set path information for\n * @param spanPath - The span path (array of span names)\n * @param spanIdsPath - The span IDs path (array of span ID UUIDs)\n */\n setParentPathInfo(\n parentSpanId: string,\n spanPath: string[],\n spanIdsPath: StringUUID[],\n ): void {\n this._spanIdToPath.set(parentSpanId, spanPath);\n this._spanIdLists.set(parentSpanId, spanIdsPath);\n }\n\n clear() {\n this._spanIdToPath.clear();\n this._spanIdLists.clear();\n }\n}\n\nconst inferSpanType = (\n name: string,\n attributes: Record<string, AttributeValue | undefined>,\n): SpanType => {\n if (attributes[SPAN_TYPE]) {\n return attributes[SPAN_TYPE] as SpanType;\n }\n if (attributes['gen_ai.system']) {\n return 'LLM';\n }\n if (Object.keys(attributes).some((k) => k.startsWith('gen_ai.') || k.startsWith('llm.'))) {\n return 'LLM';\n }\n if (name === 'ai.toolCall' || attributes['ai.toolCall.id'] || attributes['ai.toolCall.name']) {\n return 'TOOL';\n }\n return 'DEFAULT';\n};\n\nconst attributesForStartEvent = (\n name: string,\n attributes: Record<string, AttributeValue | undefined>,\n): Record<string, AttributeValue> => {\n const keysToKeep = [\n SPAN_PATH,\n SPAN_TYPE,\n SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n PARENT_SPAN_IDS_PATH,\n SPAN_INSTRUMENTATION_SOURCE,\n SPAN_SDK_VERSION,\n SPAN_LANGUAGE_VERSION,\n \"gen_ai.request.model\",\n \"gen_ai.response.model\",\n \"gen_ai.system\",\n \"lmnr.span.original_type\",\n \"ai.model.id\",\n ];\n const newAttributes = Object.fromEntries(\n Object.entries(attributes).filter(([key]) => keysToKeep.includes(key)),\n );\n\n // Common scenario, because we don't have the response model in the start event.\n // Atrificially set the response model to the request model, just so frontend\n // can show the model in the UI.\n if (attributes[\"gen_ai.request.model\"] && !attributes[\"gen_ai.response.model\"]) {\n newAttributes[\"gen_ai.response.model\"] = attributes[\"gen_ai.request.model\"];\n }\n return {\n [SPAN_TYPE]: inferSpanType(name, attributes),\n ...newAttributes,\n };\n};\n","import { Context, type Span, type SpanOptions, trace, type Tracer } from \"@opentelemetry/api\";\n\nimport { LaminarContextManager } from \"./context\";\nimport { LaminarSpan } from \"./span\";\n\n\nexport class LaminarTracer implements Tracer {\n private _tracer: Tracer;\n constructor(tracer: Tracer) {\n this._tracer = tracer;\n }\n\n public startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n return new LaminarSpan(\n this._tracer.startSpan(name, options, context || LaminarContextManager.getContext()),\n );\n }\n\n public startActiveSpan<F extends (span: Span) => unknown>(name: string, fn: F): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n optionsOrFn?: SpanOptions | F,\n contextOrFn?: Context | F,\n fn?: F,\n ): ReturnType<F> {\n let contextToUse: Context;\n if (typeof contextOrFn !== \"function\" && contextOrFn !== undefined) {\n contextToUse = contextOrFn;\n } else {\n contextToUse = LaminarContextManager.getContext();\n }\n\n const wrapped = (fn: F) => (span: Span): ReturnType<F> => {\n const laminarSpan = new LaminarSpan(span);\n const ctxWithAssociationProperties = LaminarContextManager.setAssociationProperties(\n laminarSpan,\n contextToUse,\n );\n const newContext = trace.setSpan(ctxWithAssociationProperties, laminarSpan);\n const currentStack = LaminarContextManager.getContextStack();\n const res = LaminarContextManager.runWithIsolatedContext(\n [...currentStack, newContext],\n () => fn(laminarSpan) as ReturnType<F>,\n );\n // We don't pop the context here, because it is the caller's responsibility to\n // end the span. LaminarSpan.end() will pop the context.\n return res;\n };\n if (typeof optionsOrFn === \"function\") {\n return this._tracer.startActiveSpan(name, {}, contextToUse, wrapped(optionsOrFn));\n }\n if (typeof contextOrFn === \"function\") {\n return this._tracer.startActiveSpan(\n name,\n optionsOrFn as SpanOptions,\n contextToUse,\n wrapped(contextOrFn),\n );\n }\n\n // Use the provided context or the current Laminar context\n return this._tracer.startActiveSpan(\n name,\n optionsOrFn as SpanOptions,\n contextToUse,\n wrapped(fn as F),\n );\n }\n}\n\n","import {\n Context,\n context,\n createContextKey,\n ROOT_CONTEXT,\n} from \"@opentelemetry/api\";\n\nimport { CONTEXT_SPAN_PATH_KEY } from \"./context\";\n\n// Function to check if a global context manager is already configured\nexport const isGlobalContextManagerConfigured = () => {\n // Create a temporary context key for testing\n const testKey = createContextKey('lmnr-test-context-manager-check');\n\n // Create a context with this key\n const testContext = ROOT_CONTEXT.setValue(testKey, 'lmnr-test-value');\n\n // Try to make this context active\n let isContextManagerWorking = false;\n\n context.with(testContext, () => {\n // If the context manager is configured and enabled,\n // active() should return our test context\n const activeContext = context.active();\n isContextManagerWorking = activeContext.getValue(testKey) === 'lmnr-test-value';\n });\n\n return isContextManagerWorking;\n};\n\nexport const getSpanPath = (entityContext: Context): string | undefined => {\n const path = entityContext.getValue(CONTEXT_SPAN_PATH_KEY) as string | undefined;\n return path ? `${path}` : undefined;\n};\n","import { context, trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { registerInstrumentations } from \"@opentelemetry/instrumentation\";\nimport { AlwaysOnSampler } from \"@opentelemetry/sdk-trace-base\";\nimport {\n NodeTracerProvider,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from \"@opentelemetry/semantic-conventions\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { initializeLogger } from \"../../utils\";\nimport { _configuration } from \"../configuration\";\nimport { InitializeOptions } from \"../interfaces\";\nimport { createResource } from \"./compat\";\nimport { consumeStreamResult,waitForPendingStreams } from \"./stream-utils\";\n\nexport { consumeStreamResult,waitForPendingStreams };\nimport { initializeLaminarInstrumentations } from \"./instrumentations\";\nimport { LaminarSpanProcessor } from \"./processor\";\nimport { LaminarTracer } from \"./tracer\";\nimport { isGlobalContextManagerConfigured } from \"./utils\";\n\nconst logger = initializeLogger();\n\nlet spanProcessor: LaminarSpanProcessor;\nlet tracerProvider: TracerProvider | undefined;\nlet _baseHttpUrl: string = \"https://api.lmnr.ai:443\";\nlet _apiKey: string | undefined;\n\n/**\n * Initializes the Tracing SDK.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions}\n * for details.\n */\nexport const startTracing = (options: InitializeOptions) => {\n _baseHttpUrl = `${options.baseHttpUrl ?? options.baseUrl}:${options.httpPort ?? 443}`;\n _apiKey = options.apiKey;\n\n const instrumentations = initializeLaminarInstrumentations({\n baseUrl: _baseHttpUrl,\n apiKey: _apiKey,\n suppressContentTracing: !shouldSendTraces(),\n instrumentModules: options.instrumentModules,\n sessionRecordingOptions: options.sessionRecordingOptions,\n });\n\n const port = options.forceHttp ? options.httpPort : options.port;\n\n spanProcessor = new LaminarSpanProcessor({\n spanProcessor: options.spanProcessor,\n baseUrl: options.baseUrl,\n port,\n httpPort: options.httpPort,\n apiKey: options.apiKey,\n forceHttp: options.forceHttp,\n traceExportTimeoutMillis: options.traceExportTimeoutMillis,\n maxExportBatchSize: options.maxExportBatchSize,\n exporter: options.exporter,\n disableBatch: options.disableBatch,\n });\n\n const newProvider = new NodeTracerProvider({\n spanProcessors: [spanProcessor],\n sampler: new AlwaysOnSampler(),\n resource: createResource(\n {\n [ATTR_SERVICE_NAME]: \"laminar-tracer-resource\",\n [ATTR_SERVICE_VERSION]: SDK_VERSION,\n },\n ),\n });\n\n tracerProvider = newProvider;\n\n // Usually, we would do `tracerProvider.register()`, which does three things:\n // 1. Sets the global tracer provider\n // 2. Sets the global context manager to a default one, unless we specify a custom one\n // 3. Sets the global propagator to a default one, unless we specify a custom one\n // We don't do that, because Opentelemetry only allows setting these global\n // OTel API instances once.\n //\n // Instead, we do the following:\n // 1. Carry the global tracer provider around without globally registering it.\n // - Set this tracer provider in the auto-instrumentations from OpenLLMetry\n // - expose the `getTracer` function, which will return a tracer from our\n // tracer provider.\n // 2. Set a context manager globally, only if we are the first ones to do so.\n // - If we are not the first ones, we don't set the global context manager.\n // - If an existing context manager is not broken, it suffices for our purposes\n // for carrying the parent span context.\n // - If any library tries to do so afterwards (and they will, e.g. @vercel/otel\n // or @sentry/node do tracerProvider.register() internally), there will be\n // an error message at their initialization.\n // - We recommend to initialize Laminar after other tracing libraries to avoid that\n // 3. We don't do anything about the propagator, because no Laminar functionality\n // depends on it. We might want to revisit this in the future w.r.t. `LaminarSpanContext`.\n\n // This is a small hack to only set the global context manager if there is none.\n if (!isGlobalContextManagerConfigured()) {\n const contextManager = new AsyncLocalStorageContextManager();\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n logger.debug('Laminar set global OTel Context Manager');\n }\n logger.debug('Global OTel Context Manager exists');\n\n\n logger.debug(`Laminar registering ${instrumentations.length} instrumentations`);\n // Similarly, we carry our global tracer provider around without globally\n // registering it.\n registerInstrumentations({\n instrumentations,\n tracerProvider: newProvider,\n });\n};\n\nexport const patchModules = (modules: InitializeOptions[\"instrumentModules\"]) => {\n const instrumentations = initializeLaminarInstrumentations({\n baseUrl: _baseHttpUrl,\n apiKey: _apiKey,\n instrumentModules: modules,\n suppressContentTracing: !shouldSendTraces(),\n sessionRecordingOptions: _configuration?.sessionRecordingOptions,\n });\n registerInstrumentations({\n instrumentations,\n tracerProvider: tracerProvider,\n });\n};\n\n\nexport const shouldSendTraces = () => {\n if (!_configuration) {\n /**\n * We've only seen this happen in Next.js where apparently\n * the initialization in `instrumentation.ts` somehow does not\n * respect `Object.freeze`. Unlike original OpenLLMetry/Traceloop,\n * we return true here, because we have other mechanisms\n * {@link withTracingLevel} to disable tracing inputs and outputs.\n */\n return true;\n }\n\n if (\n _configuration.traceContent === false ||\n (process.env.TRACELOOP_TRACE_CONTENT || \"true\").toLowerCase() === \"false\"\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Get the tracer provider. Returns Laminar's tracer provider if Laminar is initialized,\n * otherwise returns the global tracer provider.\n * @returns The tracer provider.\n */\nexport const getTracerProvider = (): TracerProvider => tracerProvider ?? trace.getTracerProvider();\n\n/**\n * Get the tracer.\n * @returns Laminar's tracer if Laminar is initialized,\n * otherwise returns Laminar's tracer from the global tracer provider\n *\n * @example\n * // instrumentation.ts\n * import { Laminar } from '@lmnr-ai/lmnr';\n * Laminar.initialize()\n *\n * // File that calls AI SDK.\n * import { getTracer } from '@lmnr-ai/lmnr';\n * import { openai } from \"@ai-sdk/openai\";\n * import { generateText } from \"ai\";\n *\n * const response = await generateText({\n * model: openai(\"gpt-4.1-nano\"),\n * prompt: \"What is the capital of France?\",\n * experimental_telemetry: {\n * isEnabled: true,\n * tracer: getTracer(),\n * }\n * })\n */\nexport const getTracer = (): Tracer => {\n const TRACER_NAME = \"lmnr.tracer\";\n const TRACER_VERSION = \"0.0.1\";\n const provider = getTracerProvider();\n return new LaminarTracer(provider.getTracer(TRACER_NAME, TRACER_VERSION));\n};\n\n/**\n * Get the span processor.\n * Used internally for setting parent path information when initializing from environment.\n * @returns The span processor, or undefined if not initialized.\n */\nexport const getSpanProcessor = (): LaminarSpanProcessor | undefined => spanProcessor;\n\nexport const forceFlush = async () => {\n // Wait for pending stream processing with 5 second timeout\n await waitForPendingStreams(5000);\n await spanProcessor.forceFlush();\n};\n\nexport const clearSpanProcessor = () => {\n spanProcessor.clear();\n};\n","import { diag, DiagConsoleLogger, DiagLogLevel } from \"@opentelemetry/api\";\n\nimport { type InitializeOptions } from \"../interfaces\";\nimport { startTracing } from \"../tracing\";\n\nexport let _configuration: InitializeOptions | undefined;\n\n/**\n * Initializes the SDK.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions}\n * for details.\n * @throws {InitializationError} if the configuration is invalid or if failed to fetch\n * feature data.\n */\nexport const initializeTracing = (options: InitializeOptions) => {\n if (_configuration) {\n return;\n }\n\n // Only set defaults if not already provided and if we have an API key\n // (when using OTEL env vars, we don't need a baseUrl or API key)\n const apiKey = options.apiKey ?? process.env.LMNR_PROJECT_API_KEY;\n if (!options.baseUrl && apiKey) {\n options.baseUrl = process.env.LMNR_BASE_URL || \"https://api.lmnr.ai:8443\";\n }\n if (!options.apiKey) {\n options.apiKey = apiKey;\n }\n\n _configuration = Object.freeze(options);\n\n if (options.logLevel) {\n diag.setLogger(\n new DiagConsoleLogger(),\n {\n logLevel: logLevelToOtelLogLevel(options.logLevel),\n suppressOverrideMessage: true,\n },\n );\n }\n\n startTracing(_configuration);\n};\n\nconst logLevelToOtelLogLevel = (\n logLevel: \"debug\" | \"info\" | \"warn\" | \"error\",\n) => {\n switch (logLevel) {\n case \"debug\":\n return DiagLogLevel.DEBUG;\n case \"info\":\n return DiagLogLevel.INFO;\n case \"warn\":\n return DiagLogLevel.WARN;\n case \"error\":\n return DiagLogLevel.ERROR;\n }\n};\n\nexport const _resetConfiguration = () => {\n _configuration = undefined;\n};\n","import { LaminarSpanContext, TraceType, TracingLevel } from \"@lmnr-ai/types\";\nimport { AttributeValue, context, type Span, trace } from \"@opentelemetry/api\";\nimport { suppressTracing } from \"@opentelemetry/core\";\n\nimport {\n deserializeLaminarSpanContext,\n initializeLogger,\n tryToOtelSpanContext,\n} from \"../../utils\";\nimport { getStream } from \"../instrumentation/aisdk/utils\";\nimport { getTracer, shouldSendTraces } from \".\";\nimport {\n SPAN_INPUT,\n SPAN_OUTPUT,\n} from \"./attributes\";\nimport {\n ASSOCIATION_PROPERTIES_KEY,\n LaminarContextManager,\n} from \"./context\";\nimport { handleStreamResult } from \"./stream-utils\";\n\nconst logger = initializeLogger();\n\nexport { consumeStreamResult, waitForPendingStreams } from \"./stream-utils\";\n\nexport type DecoratorConfig = {\n name: string;\n contextProperties?: {\n userId?: string;\n sessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n };\n spanAttributes?: Record<string, AttributeValue>;\n input?: unknown;\n ignoreInput?: boolean;\n ignoreOutput?: boolean;\n inputParameters?: unknown[];\n suppressTracing?: boolean;\n parentSpanContext?: string | LaminarSpanContext;\n};\n\n// Overload for when thisArg is provided (method call)\nexport function observeBase<\n A extends unknown[],\n This,\n F extends (this: This, ...args: A) => ReturnType<F>,\n>(\n config: DecoratorConfig,\n fn: F,\n thisArg: This,\n ...args: A\n): ReturnType<F>;\n\n// Overload for when thisArg is not provided (standalone function)\nexport function observeBase<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(\n config: DecoratorConfig,\n fn: F,\n thisArg: undefined,\n ...args: A\n): ReturnType<F>;\n\n// Implementation signature (more permissive to handle both cases)\nexport function observeBase<\n A extends unknown[],\n F extends (this: ThisParameterType<F>, ...args: A) => ReturnType<F>,\n>(\n {\n name,\n contextProperties,\n spanAttributes,\n input,\n ignoreInput,\n ignoreOutput,\n inputParameters,\n suppressTracing: shouldSuppressTracing,\n parentSpanContext,\n }: DecoratorConfig,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n): ReturnType<F> {\n let entityContext = LaminarContextManager.getContext();\n\n if (shouldSuppressTracing) {\n entityContext = suppressTracing(entityContext);\n }\n\n if (parentSpanContext) {\n try {\n const laminarContext = typeof parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(parentSpanContext)\n : parentSpanContext;\n\n const spanContext = tryToOtelSpanContext(laminarContext);\n entityContext = trace.setSpan(entityContext, trace.wrapSpanContext(spanContext));\n } catch (e) {\n logger.warn(\"Failed to parse parent span context: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n // Set context properties for propagation to child spans\n if (contextProperties && Object.keys(contextProperties).length > 0) {\n const currentAssociationProperties = entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {};\n entityContext = entityContext.setValue(\n ASSOCIATION_PROPERTIES_KEY,\n { ...currentAssociationProperties, ...contextProperties },\n );\n }\n\n return context.with(entityContext, () =>\n getTracer().startActiveSpan(\n name,\n {\n attributes: spanAttributes,\n },\n entityContext,\n (span: Span) => {\n if (shouldSendTraces() && !ignoreInput) {\n try {\n const spanInput = inputParameters ?? args;\n if (input !== undefined) {\n span.setAttribute(\n SPAN_INPUT,\n typeof input === 'string' ? input : serialize(input),\n );\n } else if (\n spanInput.length === 1 &&\n typeof spanInput[0] === \"object\" &&\n !(spanInput[0] instanceof Map)\n ) {\n span.setAttribute(\n SPAN_INPUT,\n typeof spanInput[0] === 'string' ? spanInput[0] : serialize(spanInput[0]),\n );\n } else {\n // pass an array of the arguments without names\n // Need to convert it to map from argument name to value,\n // if we figure out how to do it elegantly\n span.setAttribute(\n SPAN_INPUT,\n serialize(spanInput.length > 0 ? spanInput : {}),\n );\n }\n } catch (error) {\n logger.warn(\"Failed to serialize input: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n let res: ReturnType<F>;\n try {\n res = fn.apply(thisArg as ThisParameterType<F>, args);\n } catch (error) {\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n // Check if the resolved result is a stream\n const streamInfo = getStream(resolvedRes);\n if (streamInfo.type !== null) {\n return handleStreamResult(\n resolvedRes,\n streamInfo,\n span,\n ignoreOutput,\n serialize,\n ) as ReturnType<F>;\n }\n\n // Not a stream, handle normally\n try {\n if (shouldSendTraces() && !ignoreOutput) {\n span.setAttribute(\n SPAN_OUTPUT,\n serialize(resolvedRes),\n );\n }\n } catch (error) {\n logger.warn(\"Failed to serialize async output: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n } finally {\n span.end();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return resolvedRes;\n })\n .catch((error) => {\n span.recordException(error as Error);\n span.end();\n throw error;\n }) as ReturnType<F>;\n }\n\n // Check if the result is a stream\n const streamInfo = getStream(res);\n if (streamInfo.type !== null) {\n return handleStreamResult(\n res, streamInfo, span, ignoreOutput, serialize) as ReturnType<F>;\n }\n\n try {\n if (shouldSendTraces() && !ignoreOutput) {\n span.setAttribute(\n SPAN_OUTPUT,\n typeof res === 'string' ? res : serialize(res),\n );\n }\n } catch (error) {\n logger.warn(\"Failed to serialize output: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n } finally {\n span.end();\n }\n\n return res;\n },\n ),\n );\n}\n\nconst normalizePayload = (payload: unknown, seen: WeakSet<any>): unknown => {\n if (payload instanceof Map) {\n return Array.from(payload.entries());\n } else if (Array.isArray(payload)) {\n return payload.map((value) => normalizePayload(value, seen));\n } else if (!payload) {\n return payload;\n } else if (typeof payload === \"object\") {\n if (seen.has(payload)) {\n return \"[Circular reference]\";\n }\n seen.add(payload);\n\n // serialize object one by one\n const output: any = {};\n Object.entries(payload as any).forEach(([key, value]) => {\n\n output[key] = normalizePayload(value, seen);\n });\n return output;\n }\n\n return payload;\n};\n\nconst serialize = (payload: unknown): string =>\n JSON.stringify(normalizePayload(payload, new WeakSet()));\n","import { LaminarSpanContext, RolloutParam, TraceType, TracingLevel } from '@lmnr-ai/types';\nimport { AttributeValue } from \"@opentelemetry/api\";\n\nimport { observeBase } from './opentelemetry-lib';\nimport {\n ASSOCIATION_PROPERTIES,\n PARENT_SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n SPAN_TYPE,\n} from \"./opentelemetry-lib/tracing/attributes\";\nimport {\n ASSOCIATION_PROPERTIES_KEY,\n LaminarContextManager,\n} from \"./opentelemetry-lib/tracing/context\";\nimport { deserializeLaminarSpanContext, initializeLogger } from \"./utils\";\n\nconst logger = initializeLogger();\n\ndeclare global {\n var _rolloutFunctions: Map<string, {\n fn: (...args: any[]) => any;\n params: RolloutParam[];\n name: string;\n }> | undefined;\n var _set_rollout_global: boolean;\n var _currentExportName: string | undefined;\n}\n\ninterface ObserveOptions {\n name?: string;\n sessionId?: string;\n userId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n spanType?: 'DEFAULT' | 'LLM' | 'TOOL' | 'EVALUATOR' | 'EVALUATION' | 'EXECUTOR';\n input?: unknown;\n ignoreInput?: boolean;\n ignoreOutput?: boolean;\n parentSpanContext?: string | LaminarSpanContext;\n metadata?: Record<string, any>;\n tags?: string[];\n rolloutEntrypoint?: boolean;\n}\n\n/**\n * Extracts parameter names from a function using regex (fallback for runtime parsing)\n * Note: This is a best-effort fallback. For TypeScript files, use ts-parser.ts instead.\n */\nconst extractParamNames = (fn: (...args: any[]) => any): RolloutParam[] => {\n const fnStr = fn.toString();\n\n // Match function parameters - handles regular functions, arrow functions, async functions\n const paramMatch = fnStr.match(\n /(?:async\\s+)?(?:function\\s*)?\\(([^)]*)\\)|(?:async\\s*)?([^=\\s(]+)\\s*=>/,\n );\n\n if (!paramMatch) {\n return [];\n }\n\n const paramsStr = paramMatch[1] || paramMatch[2] || '';\n\n if (!paramsStr.trim()) {\n return [];\n }\n\n // Split by comma and extract parameter names with metadata\n const params = paramsStr.split(',').map(param => {\n const trimmed = param.trim();\n\n // Check if it's destructured (starts with { or [)\n if (trimmed.startsWith('{')) {\n return {\n name: '_destructured',\n required: !trimmed.includes('='), // Has default if includes =\n };\n }\n\n if (trimmed.startsWith('[')) {\n return {\n name: '_arrayDestructured',\n required: !trimmed.includes('='),\n };\n }\n\n // Extract default value if present\n const hasDefault = trimmed.includes('=');\n let defaultValue: string | undefined;\n let nameWithoutDefault = trimmed;\n\n if (hasDefault) {\n const parts = trimmed.split('=');\n nameWithoutDefault = parts[0].trim();\n defaultValue = parts.slice(1).join('=').trim();\n }\n\n // Check for optional marker (?)\n const isOptional = nameWithoutDefault.includes('?');\n\n // Remove type annotations and whitespace\n const name = nameWithoutDefault\n .replace(/:.+$/, '') // Remove type annotations\n .replace(/\\?/g, '') // Remove optional marker\n .replace(/\\s+/g, ''); // Remove whitespace\n\n // Extract just the parameter name\n const simpleNameMatch = name.match(/^[a-zA-Z_$][a-zA-Z0-9_$]*/);\n const paramName = simpleNameMatch ? simpleNameMatch[0] : name;\n\n return {\n name: paramName,\n required: !hasDefault && !isOptional,\n default: defaultValue,\n };\n });\n\n return params.filter(p => p.name && p.name.length > 0);\n};\n\n/**\n * The main decorator entrypoint for Laminar. This is used to wrap\n * functions and methods to create spans.\n *\n * When `rolloutEntrypoint: true` is set, returns a wrapped function that can be\n * used for rollout debugging sessions with `npx lmnr serve`.\n *\n * @param options - Configuration options for the span\n * @param options.name - Name of the span. Function name is used if not specified.\n * @param options.sessionId - Session ID to associate with the span and the following context.\n * @param options.userId - User ID to associate with the span and the following context.\n * This is different from the id of a Laminar user.\n * @param options.traceType - Type of the trace. Unless it is within evaluation, it should be\n * 'DEFAULT'.\n * @param options.spanType - Type of the span. 'DEFAULT' is used if not specified. If the type\n * is 'LLM', you must manually specify some attributes. See `Laminar.setSpanAttributes`\n * for more information.\n * @param options.input - Force override the input for the span. If not specified, the\n * input will be the arguments passed to the function.\n * @param options.ignoreInput - Whether to ignore the input altogether.\n * @param options.ignoreOutput - Whether to ignore the output altogether.\n * @param options.parentSpanContext - Parent span context to associate with this span.\n * @param options.metadata - Metadata to add to a trace for further filtering. Must be\n * JSON serializable.\n * @param options.tags - Tags to associate with the span.\n * @param options.rolloutEntrypoint - When true, returns a wrapped function for\n * rollout debugging. When false/undefined, executes the function immediately.\n * @param fn - The function to wrap\n * @param args - Arguments to pass to the function (only when rolloutEntrypoint is\n * false/undefined)\n * @returns Wrapped function (when rolloutEntrypoint: true) or Promise with result\n * @throws Exception - Re-throws the exception if the wrapped function throws an exception.\n *\n * @example\n * ```typescript\n * // Regular usage (immediate execution)\n * await observe({ name: 'my_function' }, async (x: string) => {\n * // Your code here\n * return x.toUpperCase();\n * }, 'hello');\n *\n * // Rollout entrypoint (returns wrapped function)\n * export const myAgent = observe(\n * { name: 'agent', rolloutEntrypoint: true },\n * async (input: string) => {\n * // Your agent code here\n * return processInput(input);\n * }\n * );\n * // Then call: await myAgent('hello');\n * ```\n */\n// Overload: when rolloutEntrypoint is true, return wrapped function\nexport function observe<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n options: ObserveOptions & { rolloutEntrypoint: true },\n fn: F,\n ...args: A\n): F;\n\nexport function observe<F extends (...args: any[]) => ReturnType<F>>(\n options: ObserveOptions & { rolloutEntrypoint: true },\n fn: F,\n): F;\n\n// Overload: when rolloutEntrypoint is false/undefined, execute immediately\nexport function observe<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n options: ObserveOptions,\n fn: F,\n ...args: A\n): ReturnType<F>;\n\n// Implementation\nexport function observe<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n options: ObserveOptions,\n fn: F,\n ...args: A\n): F | ReturnType<F> {\n if (fn === undefined || typeof fn !== \"function\") {\n throw new Error(\"Invalid `observe` usage. Second argument `fn` must be a function.\");\n }\n\n const {\n name,\n sessionId,\n userId,\n traceType,\n spanType,\n input,\n ignoreInput,\n ignoreOutput,\n parentSpanContext,\n metadata,\n tags,\n rolloutEntrypoint,\n } = options;\n const spanName = name ?? fn.name;\n\n // If rolloutEntrypoint is true, return a wrapped function\n if (rolloutEntrypoint) {\n // Extract parameter names for rollout\n const params = extractParamNames(fn);\n // Get rollout session ID from env var if in rollout mode\n const envRolloutSessionId = process.env.LMNR_ROLLOUT_SESSION_ID;\n\n // Create wrapped function\n const wrappedFn = ((...fnArgs: Parameters<F>): ReturnType<F> => {\n const observeOptions = {\n sessionId,\n traceType,\n spanType,\n userId,\n rolloutSessionId: envRolloutSessionId,\n tags,\n metadata,\n };\n\n const contextProperties = buildContextProperties(observeOptions);\n const spanAttributes = buildSpanAttributes(observeOptions);\n\n const argsToPass = (args && args.length > 0) ? args : fnArgs;\n\n return observeBase<A, F>({\n name: spanName,\n contextProperties,\n spanAttributes,\n input: input ?? argsToPass,\n ignoreInput,\n ignoreOutput,\n parentSpanContext,\n }, fn, undefined, ...argsToPass);\n }) as F;\n\n // If in registration mode, register this function\n if (globalThis._set_rollout_global) {\n if (!globalThis._rolloutFunctions) {\n globalThis._rolloutFunctions = new Map();\n }\n\n // Use current export name if available, otherwise use function name\n const exportName = globalThis._currentExportName || spanName || 'unknown';\n\n globalThis._rolloutFunctions.set(exportName, {\n fn: wrappedFn as (...args: any[]) => any,\n params,\n name: spanName,\n });\n }\n\n return wrappedFn;\n }\n\n // Regular execution mode (backward compatible)\n const observeOptions = {\n sessionId,\n traceType,\n spanType,\n userId,\n tags,\n metadata,\n parentSpanContext,\n };\n\n const contextProperties = buildContextProperties(observeOptions);\n const spanAttributes = buildSpanAttributes(observeOptions);\n\n return observeBase<A, F>({\n name: spanName,\n contextProperties,\n spanAttributes,\n input,\n ignoreInput,\n ignoreOutput,\n parentSpanContext,\n }, fn, undefined, ...args);\n}\n\n/**\n * Sets the tracing level for any spans inside the function. This is useful for\n * conditionally disabling the tracing for certain functions.\n * Tracing level must be one of the values in {@link TracingLevel}. Returns the\n * result of the wrapped function, so you can use it in an `await` statement if\n * needed.\n *\n * @param tracingLevel - The tracing level to set.\n * @returns The result of the wrapped function.\n *\n * @example\n * ```typescript\n * import { withTracingLevel, TracingLevel } from '@lmnr-ai/lmnr';\n *\n * const result = await withTracingLevel(TracingLevel.META_ONLY, () => {\n * openai.chat.completions.create({});\n * });\n * ```\n */\nexport function withTracingLevel<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n tracingLevel: TracingLevel,\n fn: F,\n ...args: A\n): ReturnType<F> {\n let entityContext = LaminarContextManager.getContext();\n const currentAssociationProperties = entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {};\n\n entityContext = entityContext.setValue(\n ASSOCIATION_PROPERTIES_KEY,\n { ...currentAssociationProperties, \"tracing_level\": tracingLevel },\n );\n\n const result = LaminarContextManager.runWithIsolatedContext(\n [entityContext],\n () => fn(...args),\n );\n\n const newAssociationProperties = (\n entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {}\n ) as Record<string, any>;\n delete newAssociationProperties[\"tracing_level\"];\n\n entityContext = entityContext.setValue(\n ASSOCIATION_PROPERTIES_KEY,\n newAssociationProperties,\n );\n\n return result;\n}\n\n/**\n * Builds context-level association properties that propagate to child spans.\n * These properties flow through the OpenTelemetry context and are inherited by\n * any child spans created with startActiveSpan.\n */\nconst buildContextProperties = (\n options: Partial<ObserveOptions>,\n): {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n} => {\n const parentSpanContext = options.parentSpanContext;\n const globalMetadata = LaminarContextManager.getGlobalMetadata();\n const ctxAssociationProperties = LaminarContextManager.getAssociationProperties();\n\n let parentMetadata: Record<string, any> | undefined;\n let parentTraceType: TraceType | undefined;\n let parentTracingLevel: TracingLevel | undefined;\n let parentUserId: string | undefined;\n let parentSessionId: string | undefined;\n let parentRolloutSessionId: string | undefined;\n\n if (parentSpanContext) {\n try {\n const laminarContext = typeof parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(parentSpanContext)\n : parentSpanContext;\n\n parentMetadata = laminarContext.metadata;\n parentTraceType = laminarContext.traceType;\n parentTracingLevel = laminarContext.tracingLevel;\n parentUserId = laminarContext.userId;\n parentSessionId = laminarContext.sessionId;\n parentRolloutSessionId = laminarContext.rolloutSessionId;\n } catch (e) {\n logger.warn(\"Failed to parse parent span context: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n const contextProperties: {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n } = {};\n\n const sessionIdValue = options.sessionId ?? parentSessionId ?? ctxAssociationProperties.sessionId;\n if (sessionIdValue) {\n contextProperties.sessionId = sessionIdValue;\n }\n\n const userIdValue = options.userId ?? parentUserId ?? ctxAssociationProperties.userId;\n if (userIdValue) {\n contextProperties.userId = userIdValue;\n }\n\n const rolloutSessionIdValue = options.rolloutSessionId ?? parentRolloutSessionId\n ?? ctxAssociationProperties.rolloutSessionId;\n if (rolloutSessionIdValue) {\n contextProperties.rolloutSessionId = rolloutSessionIdValue;\n }\n\n const traceTypeValue = options.traceType ?? parentTraceType\n ?? ([\"EVALUATION\", \"EXECUTOR\", \"EVALUATOR\"].includes(options.spanType ?? \"DEFAULT\")\n ? \"EVALUATION\"\n : undefined\n )\n ?? ctxAssociationProperties.traceType\n ?? \"DEFAULT\";\n if (traceTypeValue) {\n contextProperties.traceType = traceTypeValue;\n }\n\n const tracingLevelValue = parentTracingLevel ?? ctxAssociationProperties.tracingLevel;\n if (tracingLevelValue) {\n contextProperties.tracingLevel = tracingLevelValue;\n }\n\n const mergedMetadata = {\n ...globalMetadata,\n ...ctxAssociationProperties.metadata,\n ...parentMetadata,\n ...options.metadata,\n ...(rolloutSessionIdValue ? { 'rollout.session_id': rolloutSessionIdValue } : {}),\n };\n\n if (Object.keys(mergedMetadata).length > 0) {\n contextProperties.metadata = mergedMetadata;\n }\n\n return contextProperties;\n};\n\n/**\n * Builds span-specific attributes that do NOT propagate to child spans.\n * These include spanType, tags, and parent span path information.\n */\nconst buildSpanAttributes = (\n options: Partial<ObserveOptions>,\n): Record<string, AttributeValue> => {\n const spanAttributes: Record<string, AttributeValue> = {};\n\n if (options.spanType) {\n spanAttributes[SPAN_TYPE] = options.spanType;\n }\n\n if (options.tags) {\n spanAttributes[`${ASSOCIATION_PROPERTIES}.tags`] = Array.from(new Set(options.tags));\n }\n\n if (options.parentSpanContext) {\n try {\n const laminarContext = typeof options.parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(options.parentSpanContext)\n : options.parentSpanContext;\n\n if (laminarContext.spanPath) {\n spanAttributes[PARENT_SPAN_PATH] = laminarContext.spanPath;\n }\n if (laminarContext.spanIdsPath) {\n spanAttributes[PARENT_SPAN_IDS_PATH] = laminarContext.spanIdsPath;\n }\n } catch (e) {\n logger.warn(\"Failed to parse parent span context for span attributes: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n return spanAttributes;\n};\n\n/**\n * Decorator that wraps a method to automatically observe it with Laminar tracing.\n * This decorator uses the TypeScript 5.0+ standard decorator syntax.\n *\n * **Important**: Use this decorator only if your `tsconfig.json` does NOT have\n * `experimentalDecorators: true`. If you're using experimental decorators, use\n * {@link observeExperimentalDecorator} instead.\n *\n * This decorator can be used on class methods to automatically create spans.\n *\n * @param config - Configuration for the observe decorator, can be static or a function\n * @returns A method decorator\n *\n * @example\n * ```typescript\n * // In your tsconfig.json, ensure experimentalDecorators is NOT enabled:\n * // {\n * // \"compilerOptions\": {\n * // \"experimentalDecorators\": false // or omit this line\n * // }\n * // }\n *\n * import { observeDecorator } from '@lmnr-ai/lmnr';\n *\n * class MyService {\n * @observeDecorator({ name: 'processData', spanType: 'DEFAULT' })\n * async processData(input: string) {\n * // Your code here\n * return `processed: ${input}`;\n * }\n *\n * @observeDecorator((thisArg, ...args) => ({\n * name: `dynamicMethod_${args[0]}`,\n * sessionId: thisArg.sessionId\n * }))\n * async dynamicMethod(id: string) {\n * // Your code here\n * }\n * }\n * ```\n */\nexport function observeDecorator<This, Args extends unknown[], Return>(\n config:\n | Partial<ObserveOptions>\n | ((thisArg: This, ...funcArgs: Args) => Partial<ObserveOptions>),\n) {\n return function (\n originalMethod: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n ) {\n if (context.kind !== 'method') {\n throw new Error(\n `observeDecorator can only be applied to methods. Applied to: ${String(context.name)}`,\n );\n }\n\n const methodName = String(context.name);\n\n return function (this: This, ...args: Args): Return {\n let actualConfig: Partial<ObserveOptions>;\n\n if (typeof config === \"function\") {\n actualConfig = config(this, ...args);\n } else {\n actualConfig = config;\n }\n\n const observeName = actualConfig.name ?? methodName;\n const contextProperties = buildContextProperties(actualConfig);\n const spanAttributes = buildSpanAttributes(actualConfig);\n\n return observeBase(\n {\n name: observeName,\n contextProperties,\n spanAttributes,\n input: actualConfig.input,\n ignoreInput: actualConfig.ignoreInput,\n ignoreOutput: actualConfig.ignoreOutput,\n parentSpanContext: actualConfig.parentSpanContext,\n },\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n\n/**\n * Decorator that wraps a method to automatically observe it with Laminar tracing.\n * This decorator uses the legacy experimental decorator syntax\n * (requires `--experimentalDecorators` flag).\n *\n * **Important**: Use this decorator only if your `tsconfig.json` has\n * `experimentalDecorators: true` in the `compilerOptions` section\n * (or if you compile with the `--experimentalDecorators` flag).\n * For TypeScript 5.0+ projects without experimental decorators, use\n * {@link observeDecorator} instead.\n *\n * This decorator can be used on class methods to automatically create spans.\n *\n * Use this only if you need the legacy experimental decorator syntax.\n * @param config - Configuration for the observe decorator, can be static or a function\n * @returns A method decorator\n *\n * @example\n * ```typescript\n * // In your tsconfig.json, ensure experimentalDecorators is enabled:\n * // {\n * // \"compilerOptions\": {\n * // \"experimentalDecorators\": true\n * // }\n * // }\n *\n * import { observeExperimentalDecorator } from '@lmnr-ai/lmnr';\n *\n * class MyService {\n * @observeExperimentalDecorator({ name: 'processData', spanType: 'DEFAULT' })\n * async processData(input: string) {\n * // Your code here\n * return `processed: ${input}`;\n * }\n *\n * @observeExperimentalDecorator((thisArg, ...args) => ({\n * name: `dynamicMethod_${args[0]}`,\n * sessionId: thisArg.sessionId\n * }))\n * async dynamicMethod(id: string) {\n * // Your code here\n * }\n * }\n * ```\n */\nexport function observeExperimentalDecorator(\n config:\n | Partial<ObserveOptions>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<ObserveOptions>),\n) {\n return function (\n _target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error(\n \"observeExperimentalDecorator can only be applied to methods. \" +\n `Applied to: ${String(propertyKey)}`,\n );\n }\n\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: unknown[]) {\n let actualConfig: Partial<ObserveOptions>;\n\n if (typeof config === \"function\") {\n actualConfig = config(this, ...args);\n } else {\n actualConfig = config;\n }\n\n const observeName = actualConfig.name ?? originalMethod.name;\n const contextProperties = buildContextProperties(actualConfig);\n const spanAttributes = buildSpanAttributes(actualConfig);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return observeBase(\n {\n name: observeName,\n contextProperties,\n spanAttributes,\n input: actualConfig.input,\n ignoreInput: actualConfig.ignoreInput,\n ignoreOutput: actualConfig.ignoreOutput,\n parentSpanContext: actualConfig.parentSpanContext,\n },\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"decorators-DdS12Dao.mjs","names":["output: any","errors: any[]","promises: Promise<void>[]","chunks: T[]","error: any","resolveData!: (value: { chunks: T[]; error?: any }) => void","chunks: any[]","logger","chunks: unknown[]","partialOutput: any","serialize","logger","spanPath: string[]","spanIdsPath: StringUUID[]","metadata: Record<string, AttributeValue>","properties: Record<string, any>","metadata: Record<string, any>","context","contextApi","logger","ccProxyBaseUrl: string | null","ccProxyTargetUrl: string | null","ccProxyStartupPromise: Promise<string | null> | null","spanIdsPath: string[]","spanPath: string[]","e: any","logger","collected: any[]","SDK_VERSION","logger","port: number | undefined","spanProcessor","context","parentPath: string[] | undefined","parentIdsPath: string[] | undefined","parentMetadata: Record<string, any> | undefined","parentTraceType: TraceType | undefined","parentTracingLevel: TracingLevel | undefined","parentUserId: string | undefined","parentSessionId: string | undefined","contextApi","logger","injectSessionRecorder","key","modelToProviderMap: Record<string, string>","compressionWorker: Worker | null","workerSupported: boolean | null","keys: string[]","id","error","toDelete: string[]","buffer","logger","SDK_VERSION","browser: Browser","context","context: BrowserContext","laminarObserve","SDK_VERSION","laminarObserve","observe","agent","logger","SDK_VERSION","browser: Browser","context","context: BrowserContext","logger","url: string","context","SDK_VERSION","context","recorderState: V3RecorderState","laminarObserve","observe","agent","WRAPPED_BROWSER_METHODS: (keyof KernelSDK.Kernel.Browsers)[]","WRAPPED_COMPUTER_METHODS: (keyof KernelSDK.Kernel.Browsers.Computer)[]","WRAPPED_PROCESS_METHODS: (keyof KernelSDK.Kernel.Browsers.Process)[]","SDK_VERSION","context","client: LaminarClient | undefined","version","stagehandInstrumentation","StagehandV3Instrumentation","instrumentations: Instrumentation[]","playwrightInstrumentation: PlaywrightInstrumentation | undefined","getLangVersion: () => string | undefined","logger","headers: Record<string, string>","ExporterHttp","key","ExporterGrpc","SDK_VERSION","context","contextToUse: Context","fn","logger","spanProcessor: LaminarSpanProcessor","tracerProvider: TracerProvider | undefined","_baseHttpUrl: string","_apiKey: string | undefined","SDK_VERSION","_configuration: InitializeOptions | undefined","logger","res: ReturnType<F>","streamInfo","output: any","defaultValue: string | undefined","observeOptions","parentMetadata: Record<string, any> | undefined","parentTraceType: TraceType | undefined","parentTracingLevel: TracingLevel | undefined","parentUserId: string | undefined","parentSessionId: string | undefined","parentRolloutSessionId: string | undefined","contextProperties: {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n }","spanAttributes: Record<string, AttributeValue>","context","actualConfig: Partial<ObserveOptions>"],"sources":["../src/opentelemetry-lib/tracing/compat.ts","../src/opentelemetry-lib/instrumentation/aisdk/utils.ts","../src/opentelemetry-lib/tracing/stream-utils.ts","../../types/dist/index.mjs","../src/opentelemetry-lib/tracing/span.ts","../src/opentelemetry-lib/tracing/context.ts","../src/opentelemetry-lib/instrumentation/claude-agent-sdk/proxy.ts","../src/opentelemetry-lib/instrumentation/claude-agent-sdk/index.ts","../src/laminar.ts","../src/browser/recorder.ts","../src/browser/utils.ts","../src/browser/playwright.ts","../src/browser/stagehand/shared-llm-wrapper.ts","../src/browser/stagehand/v2.ts","../src/browser/puppeteer.ts","../src/browser/stagehand/v3/constants.ts","../src/browser/stagehand/v3/cdp-helpers.ts","../src/browser/stagehand/v3/event-handlers.ts","../src/browser/stagehand/v3/instrumentation.ts","../src/opentelemetry-lib/instrumentation/kernel.ts","../src/opentelemetry-lib/tracing/instrumentations.ts","../src/version.ts","../src/opentelemetry-lib/tracing/exporter.ts","../src/opentelemetry-lib/tracing/processor.ts","../src/opentelemetry-lib/tracing/tracer.ts","../src/opentelemetry-lib/tracing/utils.ts","../src/opentelemetry-lib/tracing/index.ts","../src/opentelemetry-lib/configuration/index.ts","../src/opentelemetry-lib/tracing/decorators.ts","../src/decorators.ts"],"sourcesContent":["// Forward-compatibility with OTel v2 / v0.200 SDKs\nimport { SpanContext } from \"@opentelemetry/api\";\nimport { ReadableSpan, Span as SdkSpan } from \"@opentelemetry/sdk-trace-base\";\n\n// Type definitions that cover both OTel SDK v1 and v2\n// In v1: spans have parentSpanId and instrumentationLibrary\n// In v2: spans have parentSpanContext and instrumentationScope\nexport type OTelSpanCompat = SdkSpan & ReadableSpan & {\n parentSpanId?: string;\n parentSpanContext?: SpanContext;\n instrumentationLibrary?: any;\n instrumentationScope?: any;\n};\n\ntype OTelReadableSpanCompat = ReadableSpan & {\n parentSpanId?: string;\n parentSpanContext?: SpanContext;\n instrumentationLibrary?: any;\n instrumentationScope?: any;\n};\n\n// In-place edits on span object for compatibility between OTel v1 and v2 SDKs\nexport const makeSpanOtelV2Compatible = (\n span: OTelSpanCompat | OTelReadableSpanCompat,\n) => {\n const spanAny = span as any;\n if (spanAny.instrumentationScope && !spanAny.instrumentationLibrary) {\n // Making the spans from V2 compatible with V1\n Object.assign(span, {\n instrumentationLibrary: spanAny.instrumentationScope,\n });\n } else if (spanAny.instrumentationLibrary && !spanAny.instrumentationScope) {\n // Making the spans from V1 compatible with V2\n Object.assign(span, {\n instrumentationScope: spanAny.instrumentationLibrary,\n });\n }\n\n // Handle parent span compatibility between SDK v1 and v2\n // SDK v1 uses parentSpanId (string), SDK v2 uses parentSpanContext (SpanContext)\n if (spanAny.parentSpanContext && !spanAny.parentSpanId) {\n // SDK v2 -> SDK v1: Extract spanId from parentSpanContext\n Object.defineProperty(span, 'parentSpanId', {\n value: spanAny.parentSpanContext.spanId,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else if (spanAny.parentSpanId && !spanAny.parentSpanContext) {\n // SDK v1 -> SDK v2: Create a proper SpanContext object\n // We need to get the traceId from the span's own spanContext\n const spanContext = span.spanContext();\n Object.defineProperty(span, 'parentSpanContext', {\n value: {\n traceId: spanContext.traceId,\n spanId: spanAny.parentSpanId,\n traceFlags: spanContext.traceFlags,\n traceState: spanContext.traceState,\n isRemote: spanContext.isRemote,\n },\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n};\n\nexport const getParentSpanId = (\n span: OTelSpanCompat | OTelReadableSpanCompat,\n): string | undefined => {\n const spanAny = span as any;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return spanAny.parentSpanContext?.spanId ?? spanAny.parentSpanId;\n};\n\n/**\n * Creates a Resource object compatible with both OTel v1 and v2.\n *\n * In v1, Resource is a class constructor: new Resource(attributes)\n * In v2, Resource class is not exported; use resourceFromAttributes(attributes) instead\n *\n * This function automatically detects which version is available and uses the appropriate API.\n */\nexport const createResource = (\n attributes: Record<string, string>,\n): any => { // type IResource from `@opentelemetry/resources`\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const resources = require(\"@opentelemetry/resources\");\n\n // v2 uses resourceFromAttributes (0.200+ SDK, 2.x API)\n if (resources.resourceFromAttributes) {\n return resources.resourceFromAttributes(attributes);\n }\n\n // v1 uses Resource constructor (0.57.x SDK, 1.x API)\n if (resources.Resource) {\n return new resources.Resource(attributes);\n }\n\n throw new Error(\"Unable to create Resource: neither v1 nor v2 API found\");\n } catch (error) {\n throw new Error(\n `Failed to create Resource: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n};\n","import { type LanguageModelV3Message, type LanguageModelV3Prompt } from \"@ai-sdk/provider\";\nimport { type LanguageModelV2Message, type LanguageModelV2Prompt } from \"@ai-sdk/provider-v2\";\nimport { type DataContent } from \"ai\";\n\n// Mirrors https://github.com/vercel/ai/blob/main/packages/ai/src/telemetry/stringify-for-telemetry.ts\n// This function is initially implemented by us, and is not exported from the ai sdk.\n// We copy it here for our own use.\nexport const stringifyPromptForTelemetry =\n (prompt: LanguageModelV2Prompt | LanguageModelV3Prompt): string =>\n JSON.stringify(\n prompt.map((message: LanguageModelV2Message | LanguageModelV3Message) => ({\n ...message,\n content:\n typeof message.content === 'string'\n ? message.content\n : message.content.map(part =>\n part.type === 'file'\n ? {\n ...part,\n data:\n part.data instanceof Uint8Array\n ? convertDataContentToBase64String(part.data)\n : part.data,\n }\n : part,\n ),\n })),\n );\n\n// https://github.com/vercel/ai/blob/main/packages/ai/src/prompt/data-content.ts\n/**\nConverts data content to a base64-encoded string.\n\n@param content - Data content to convert.\n@returns Base64-encoded string.\n*/\nconst convertDataContentToBase64String = (content: DataContent): string => {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return convertUint8ArrayToBase64(new Uint8Array(content));\n }\n\n return convertUint8ArrayToBase64(content);\n};\n\n// https://github.com/vercel/ai/blob/main/packages/provider-utils/src/uint8-utils.ts\nexport function convertUint8ArrayToBase64(array: Uint8Array): string {\n let latin1string = '';\n\n // Note: regular for loop to support older JavaScript versions that\n // do not support for..of on Uint8Array\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n\n return btoa(latin1string);\n}\n\n/**\n * Information about a detected stream\n */\nexport type StreamInfo =\n | { type: 'aisdk-result'; result: any }\n | { type: 'readable-stream'; stream: ReadableStream<unknown> }\n | { type: 'async-iterable'; iterable: AsyncIterable<unknown> }\n | { type: 'response'; response: Response }\n | { type: null };\n\n/**\n * This function checks if an object is stream or stream-like, and returns information\n * about the stream type and how to handle it.\n * @param response - The result of a function, either an AI SDK result, a raw stream, or any other\n * response.\n * @returns - StreamInfo object describing the stream type, or { type: null } if not a stream.\n */\nexport const getStream = (response: unknown): StreamInfo => {\n if (!response || typeof response !== 'object') {\n return { type: null };\n }\n\n // Check for AI SDK StreamTextResult (has textStream or fullStream property)\n if ('textStream' in response || 'fullStream' in response) {\n return { type: 'aisdk-result', result: response };\n }\n\n // Check for Response object (from createUIMessageStreamResponse, createTextStreamResponse, etc.)\n if (response instanceof Response) {\n return { type: 'response', response };\n }\n\n // Check for ReadableStream\n if (response instanceof ReadableStream) {\n return { type: 'readable-stream', stream: response };\n }\n\n // Check for AsyncIterable (but not ReadableStream, which also implements AsyncIterable)\n if (Symbol.asyncIterator in response && !(response instanceof ReadableStream)) {\n return { type: 'async-iterable', iterable: response as AsyncIterable<unknown> };\n }\n\n return { type: null };\n};\n\n/**\n * Consumes an AI SDK StreamTextResult and returns structured output\n * @param result - The AI SDK StreamTextResult object\n * @returns Promise that resolves to structured output with all relevant fields\n */\nexport const consumeAISDKResult = async (result: any): Promise<any> => {\n const output: any = {};\n const errors: any[] = [];\n\n // Helper to safely await a promise property\n const safeAwait = async (key: string, promise: PromiseLike<any>) => {\n try {\n output[key] = await promise;\n } catch (error) {\n errors.push({ field: key, error: error instanceof Error ? error.message : String(error) });\n }\n };\n\n // Collect all the promise properties in parallel\n const promises: Promise<void>[] = [];\n\n if ('text' in result) promises.push(safeAwait('text', result.text));\n if ('toolCalls' in result) promises.push(safeAwait('toolCalls', result.toolCalls));\n if ('reasoning' in result) promises.push(safeAwait('reasoning', result.reasoning));\n if ('finishReason' in result) promises.push(safeAwait('finishReason', result.finishReason));\n if ('usage' in result) promises.push(safeAwait('usage', result.usage));\n if ('files' in result) promises.push(safeAwait('files', result.files));\n if ('sources' in result) promises.push(safeAwait('sources', result.sources));\n\n await Promise.all(promises);\n\n if (errors.length > 0) {\n output._errors = errors;\n }\n\n return output;\n};\n\n/**\n * Consumes a ReadableStream while teeing it to pass through to the caller\n * @param stream - The ReadableStream to consume\n * @returns Object with the teed stream for the caller and a promise for the collected data\n */\nexport const consumeAndTeeReadableStream = <T>(\n stream: ReadableStream<T>,\n): { stream: ReadableStream<T>; dataPromise: Promise<{ chunks: T[]; error?: any }> } => {\n const [stream1, stream2] = stream.tee();\n\n const dataPromise = (async () => {\n const chunks: T[] = [];\n let error: any = undefined;\n\n try {\n const reader = stream2.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n } catch (err) {\n error = err;\n }\n\n return { chunks, error };\n })();\n\n return { stream: stream1, dataPromise };\n};\n\n/**\n * Consumes an AsyncIterable while yielding items to the caller\n * @param iterable - The AsyncIterable to consume\n * @returns Object with a wrapped iterable for the caller and a promise for the collected data\n */\nexport const consumeAndTeeAsyncIterable = <T>(\n iterable: AsyncIterable<T>,\n): { iterable: AsyncIterable<T>; dataPromise: Promise<{ chunks: T[]; error?: any }> } => {\n const chunks: T[] = [];\n let error: any = undefined;\n let resolveData!: (value: { chunks: T[]; error?: any }) => void;\n const dataPromise = new Promise<{ chunks: T[]; error?: any }>((resolve) => {\n resolveData = resolve;\n });\n\n const wrappedIterable = (async function* () {\n try {\n for await (const item of iterable) {\n chunks.push(item);\n yield item;\n }\n } catch (err) {\n error = err;\n throw err;\n } finally {\n resolveData({ chunks, error });\n }\n })();\n\n return { iterable: wrappedIterable, dataPromise };\n};\n\n/**\n * Consumes a Response object's body stream\n * @param response - The Response object to consume\n * @returns Promise that resolves to the consumed data\n */\nexport const consumeResponse = async (response: Response):\nPromise<{ chunks: any[]; error?: any }> => {\n const chunks: any[] = [];\n let error: any = undefined;\n\n if (!response.body) {\n return { chunks };\n }\n\n try {\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(decoder.decode(value, { stream: true }));\n }\n } finally {\n reader.releaseLock();\n }\n } catch (err) {\n error = err;\n }\n\n return { chunks, error };\n};\n","import type { Span } from \"@opentelemetry/api\";\n\nimport { initializeLogger } from \"../../utils\";\nimport {\n consumeAISDKResult,\n consumeAndTeeAsyncIterable,\n consumeAndTeeReadableStream,\n consumeResponse,\n getStream,\n} from \"../instrumentation/aisdk/utils\";\nimport { shouldSendTraces } from \".\";\nimport {\n SPAN_OUTPUT,\n} from \"./attributes\";\n\nconst logger = initializeLogger();\n\n// Track pending stream processing promises\nconst pendingStreamProcessing = new Set<Promise<void>>();\n\n/**\n * Wait for all pending stream processing to complete with a timeout\n * @param timeoutMs - Maximum time to wait in milliseconds (default: 5000)\n */\nexport const waitForPendingStreams = async (timeoutMs: number = 5000): Promise<void> => {\n if (pendingStreamProcessing.size === 0) {\n return;\n }\n logger.debug(`Waiting for ${pendingStreamProcessing.size} pending stream(s)`);\n\n const initialCount = pendingStreamProcessing.size;\n const pendingPromises = Array.from(pendingStreamProcessing);\n\n let timedOut = false;\n const timeoutPromise = new Promise<void>((resolve) => {\n setTimeout(() => {\n timedOut = true;\n resolve();\n }, timeoutMs);\n });\n\n await Promise.race([\n Promise.allSettled(pendingPromises),\n timeoutPromise,\n ]);\n\n if (timedOut && pendingStreamProcessing.size > 0) {\n logger.warn(\n `Timeout waiting for ${pendingStreamProcessing.size} pending stream(s) ` +\n `after ${timeoutMs}ms (started with ${initialCount})`,\n );\n }\n};\n\n/**\n * Consumes a stream result to ensure background processing completes.\n * This is useful in rollout mode where there's no caller to consume the stream.\n * @param result - The result that might be a stream\n * @returns The same result, or accumulated data if it was a stream\n */\nexport const consumeStreamResult = async (result: unknown): Promise<unknown> => {\n const streamInfo = getStream(result);\n\n if (streamInfo.type === null) {\n // Not a stream, return as-is\n logger.debug(\"Result is not a stream, returning as-is\");\n return result;\n }\n\n logger.debug(\"Result is a stream, consuming...\");\n\n if (streamInfo.type === 'aisdk-result') {\n // For AI SDK results, just await the text property to trigger consumption\n // The background task will handle collecting all data\n try {\n if ('text' in streamInfo.result) {\n await streamInfo.result.text;\n }\n } catch (error) {\n logger.warn(\"Error consuming AI SDK result stream: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return result;\n }\n\n if (streamInfo.type === 'readable-stream') {\n // Consume the ReadableStream\n const chunks: unknown[] = [];\n try {\n const reader = streamInfo.stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n } catch (error) {\n logger.warn(\"Error consuming ReadableStream: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return { type: 'stream', chunks };\n }\n\n if (streamInfo.type === 'async-iterable') {\n // Consume the AsyncIterable\n const chunks: unknown[] = [];\n try {\n for await (const chunk of streamInfo.iterable) {\n chunks.push(chunk);\n }\n } catch (error) {\n logger.warn(\"Error consuming AsyncIterable: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return { type: 'async-iterable', chunks };\n }\n\n if (streamInfo.type === 'response') {\n // Consume the Response body\n try {\n const { chunks, error } = await consumeResponse(streamInfo.response);\n if (error) {\n logger.warn(\"Error consuming Response: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n return { type: 'response', chunks };\n } catch (error) {\n logger.warn(\"Error consuming Response: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n }\n\n return result;\n};\n\n/**\n * Track a background promise and ensure cleanup\n */\nconst trackStreamProcessing = (task: () => Promise<void>): void => {\n const processingPromise = task().finally(() => {\n pendingStreamProcessing.delete(processingPromise);\n });\n\n pendingStreamProcessing.add(processingPromise);\n};\n\n/**\n * Handles streaming results by consuming the stream in the background\n * while passing through the original result to the caller\n */\nexport const handleStreamResult = <T>(\n originalResult: T,\n streamInfo: ReturnType<typeof getStream>,\n span: Span,\n ignoreOutput: boolean | undefined,\n serialize: (payload: unknown) => string,\n): T | ReadableStream<unknown> | AsyncIterable<unknown> | Response => {\n logger.debug(`Handling stream result of type: ${streamInfo.type}`);\n\n if (streamInfo.type === 'aisdk-result') {\n // For AI SDK results, consume the promise properties in the background\n trackStreamProcessing(async () => {\n logger.debug('Starting background processing for AI SDK result');\n\n let partialOutput: any = {};\n try {\n partialOutput = await consumeAISDKResult(streamInfo.result);\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n span.setAttribute(SPAN_OUTPUT, serialize(partialOutput));\n } catch (error) {\n logger.warn(\"Failed to serialize AI SDK stream output: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n } catch (error) {\n // Record partial output if we have any\n if (Object.keys(partialOutput).length > 0 && shouldSendTraces() && !ignoreOutput) {\n try {\n span.setAttribute(SPAN_OUTPUT, serialize(partialOutput));\n } catch (serError) {\n logger.warn(\"Failed to serialize partial AI SDK output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n span.recordException(error as Error);\n } finally {\n logger.debug('Ending span for AI SDK result');\n span.end();\n }\n });\n\n return originalResult;\n }\n\n if (streamInfo.type === 'readable-stream') {\n logger.debug('Setting up background processing for ReadableStream');\n const { stream, dataPromise } = consumeAndTeeReadableStream(streamInfo.stream);\n\n // Consume in background\n trackStreamProcessing(async () => {\n try {\n const { chunks, error } = await dataPromise;\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n const output = { type: 'stream', chunks };\n span.setAttribute(SPAN_OUTPUT, serialize(output));\n } catch (serError) {\n logger.warn(\"Failed to serialize stream output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n\n if (error) {\n span.recordException(error as Error);\n }\n } finally {\n logger.debug('Ending span for ReadableStream');\n span.end();\n }\n });\n\n return stream;\n }\n\n if (streamInfo.type === 'async-iterable') {\n logger.debug('Setting up background processing for AsyncIterable');\n const { iterable, dataPromise } = consumeAndTeeAsyncIterable(streamInfo.iterable);\n\n // Consume in background\n trackStreamProcessing(async () => {\n try {\n const { chunks, error } = await dataPromise;\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n const output = { type: 'async-iterable', chunks };\n span.setAttribute(SPAN_OUTPUT, serialize(output));\n } catch (serError) {\n logger.warn(\"Failed to serialize async iterable output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n\n if (error) {\n span.recordException(error as Error);\n }\n } finally {\n logger.debug('Ending span for AsyncIterable');\n span.end();\n }\n });\n\n return iterable;\n }\n\n if (streamInfo.type === 'response') {\n logger.debug('Setting up background processing for Response');\n // For Response objects, extract the body stream and tee it\n const originalResponse = streamInfo.response;\n\n if (!originalResponse.body) {\n // No body, just return as-is and end span\n span.end();\n return originalResult;\n }\n\n const [stream1, stream2] = originalResponse.body.tee();\n\n // Create a new Response with the teed stream for the caller\n const newResponse = new Response(stream1, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: originalResponse.headers,\n });\n\n // Consume the other stream in background\n trackStreamProcessing(async () => {\n try {\n // Create a temporary Response to use consumeResponse helper\n const tempResponse = new Response(stream2);\n const { chunks, error } = await consumeResponse(tempResponse);\n\n if (shouldSendTraces() && !ignoreOutput) {\n try {\n const output = { type: 'response', chunks };\n span.setAttribute(SPAN_OUTPUT, serialize(output));\n } catch (serError) {\n logger.warn(\"Failed to serialize response output: \" +\n `${serError instanceof Error ? serError.message : String(serError)}`);\n }\n }\n\n if (error) {\n span.recordException(error as Error);\n }\n } catch (err) {\n span.recordException(err as Error);\n } finally {\n logger.debug('Ending span for Response');\n span.end();\n }\n });\n\n return newResponse;\n }\n\n // Should never reach here, but just in case\n logger.warn('Stream type not handled, ending span immediately');\n span.end();\n return originalResult;\n};\n","//#region src/tracing.ts\n/**\n* Tracing levels to conditionally disable tracing.\n*\n* OFF - No tracing is sent.\n* META_ONLY - Only metadata is sent (e.g. tokens, costs, etc.).\n* ALL - All data is sent.\n*/\nlet TracingLevel = /* @__PURE__ */ function(TracingLevel$1) {\n\tTracingLevel$1[\"OFF\"] = \"off\";\n\tTracingLevel$1[\"META_ONLY\"] = \"meta_only\";\n\tTracingLevel$1[\"ALL\"] = \"all\";\n\treturn TracingLevel$1;\n}({});\n\n//#endregion\n//#region src/worker-protocol.ts\n/**\n* Message prefix for protocol messages in stdout\n*/\nconst WORKER_MESSAGE_PREFIX = \"__LMNR_WORKER__:\";\n\n//#endregion\nexport { TracingLevel, WORKER_MESSAGE_PREFIX };\n//# sourceMappingURL=index.mjs.map","\nimport { LaminarSpanContext, TraceType, TracingLevel } from \"@lmnr-ai/types\";\nimport {\n Attributes,\n AttributeValue,\n Exception,\n HrTime,\n Link,\n type Span,\n SpanContext,\n SpanKind,\n SpanStatus,\n TimeInput,\n} from \"@opentelemetry/api\";\nimport { type InstrumentationScope } from \"@opentelemetry/core\";\nimport { ReadableSpan, type Span as SdkSpan, TimedEvent } from \"@opentelemetry/sdk-trace-base\";\n\nimport {\n initializeLogger,\n metadataToAttributes,\n otelSpanIdToUUID,\n otelTraceIdToUUID,\n StringUUID,\n} from \"../../utils\";\nimport {\n ASSOCIATION_PROPERTIES,\n ROLLOUT_SESSION_ID,\n SESSION_ID,\n SPAN_IDS_PATH,\n SPAN_INPUT,\n SPAN_OUTPUT,\n SPAN_PATH,\n TRACE_TYPE,\n USER_ID,\n} from \"./attributes\";\nimport { getParentSpanId, makeSpanOtelV2Compatible } from \"./compat\";\nimport { LaminarContextManager } from \"./context\";\n\nconst logger = initializeLogger();\n\n// We decided to implement raw otel Span interface and have _span: SdkSpan because SdkSpan\n// discourages use of its constructor directly in favour of Tracer.startSpan()\n// We are using constructor directly because we're implementing Tracer interface as well.\nexport class LaminarSpan implements Span, ReadableSpan {\n private _span: SdkSpan;\n // Whether the span is started by Laminar.startActiveSpan()\n private _activated: boolean;\n\n constructor(span: Span, activated?: boolean) {\n if (span instanceof LaminarSpan) {\n this._activated = span.isActivated;\n this._span = span._span;\n } else {\n this._activated = activated ?? false;\n\n // This line assumes that the span passed here is an SdkSpan. Reason:\n // When using default OpenTelemetry Node SDK, i.e. NodeTracerProvider.getTracer().startSpan(),\n // the span returned is an SdkSpan. SDK span implements ReadableSpan, so attributes\n // can be accessed. Span, i.e. OpenTelemetry API Span, does not require that, so custom\n // SDK implementations may not implement certain ReadableSpan methods, in particular\n // `attributes` that we need to access.\n this._span = span as SdkSpan;\n }\n\n this.name = (this._span as unknown as SdkSpan).name;\n this.kind = (this._span as unknown as SdkSpan).kind;\n this.startTime = (this._span as unknown as SdkSpan).startTime;\n this.endTime = (this._span as unknown as SdkSpan).endTime;\n this.status = (this._span as unknown as SdkSpan).status;\n this.attributes = (this._span as unknown as SdkSpan).attributes;\n this.links = (this._span as unknown as SdkSpan).links;\n this.events = (this._span as unknown as SdkSpan).events;\n this.duration = (this._span as unknown as SdkSpan).duration;\n this.ended = (this._span as unknown as SdkSpan).ended;\n this.resource = (this._span as unknown as SdkSpan).resource;\n this.instrumentationLibrary = (this._span as any).instrumentationLibrary;\n this.droppedAttributesCount = (this._span as unknown as SdkSpan).droppedAttributesCount;\n this.droppedEventsCount = (this._span as unknown as SdkSpan).droppedEventsCount;\n this.droppedLinksCount = (this._span as unknown as SdkSpan).droppedLinksCount;\n this.makeOtelV2Compatible();\n LaminarContextManager.addActiveSpan(this.spanContext().spanId);\n }\n\n name: string;\n kind: SpanKind;\n parentSpanId?: string | undefined;\n startTime: HrTime;\n endTime: HrTime;\n status: SpanStatus;\n attributes: Attributes;\n links: Link[];\n events: TimedEvent[];\n duration: HrTime;\n ended: boolean;\n resource: any; // type IResource from `@opentelemetry/resources`\n instrumentationLibrary: any; // type InstrumentationLibrary from `@opentelemetry/core`\n droppedAttributesCount: number;\n droppedEventsCount: number;\n droppedLinksCount: number;\n\n public spanContext(): SpanContext {\n return this._span.spanContext();\n }\n\n public setAttribute(key: string, value: AttributeValue): this {\n this._span.setAttribute(key, value);\n return this;\n }\n\n public setAttributes(attributes: Attributes): this {\n this._span.setAttributes(attributes);\n return this;\n }\n\n public addEvent(\n name: string,\n attributesOrStartTime?: Attributes | TimeInput,\n startTime?: TimeInput,\n ): this {\n this._span.addEvent(name, attributesOrStartTime, startTime);\n return this;\n }\n\n public addLink(link: Link): this {\n this._span.addLink(link);\n return this;\n }\n\n public addLinks(links: Link[]): this {\n this._span.addLinks(links);\n return this;\n }\n\n public setStatus(status: SpanStatus): this {\n this._span.setStatus(status);\n return this;\n }\n\n public updateName(name: string): this {\n this._span.updateName(name);\n return this;\n }\n\n public end(endTime?: TimeInput): void {\n if (!this._span.isRecording()) {\n // This will log a warning and do nothing.\n return this._span.end(endTime);\n }\n\n // Remove from global registry on end\n LaminarContextManager.removeActiveSpan(this.spanContext().spanId);\n\n if (this._activated) {\n LaminarContextManager.popContext();\n }\n return this._span.end(endTime);\n }\n\n public set activated(activated: boolean) {\n this._activated = activated;\n }\n\n public isRecording(): boolean {\n return this._span.isRecording();\n }\n\n public recordException(exception: Exception, time?: TimeInput): void {\n return this._span.recordException(exception, time);\n }\n\n // ================================\n // Laminar specific methods\n // ================================\n\n public setTraceSessionId(sessionId: string): void {\n this._span.setAttribute(SESSION_ID, sessionId);\n }\n\n public setTraceUserId(userId: string): void {\n this._span.setAttribute(USER_ID, userId);\n }\n\n public setTraceRolloutSessionId(rolloutSessionId: string): void {\n this._span.setAttribute(\"lmnr.rollout.session_id\", rolloutSessionId);\n }\n\n public setTraceMetadata(metadata: Record<string, any>): void {\n this._span.setAttributes(metadataToAttributes(metadata));\n }\n\n public setInput(input: any): void {\n const finalInput = typeof input === 'string' ? input : JSON.stringify(input);\n this._span.setAttribute(SPAN_INPUT, finalInput);\n }\n\n public setOutput(output: any): void {\n const finalOutput = typeof output === 'string' ? output : JSON.stringify(output);\n this._span.setAttribute(SPAN_OUTPUT, finalOutput);\n }\n\n public setTags(tags: string[]): void {\n this._span.setAttribute(`${ASSOCIATION_PROPERTIES}.tags`, Array.from(new Set(tags)));\n }\n\n public addTags(tags: string[]): void {\n const currentTags = this.tags;\n this.setTags(Array.from(new Set([...currentTags, ...tags])));\n }\n\n public getLaminarSpanContext(): LaminarSpanContext {\n let spanPath: string[] = [];\n let spanIdsPath: StringUUID[] = [];\n let userId;\n let sessionId;\n let rolloutSessionId;\n let traceType;\n let tracingLevel = TracingLevel.ALL;\n const metadata: Record<string, AttributeValue> = {};\n\n if (this._span.attributes) {\n spanPath = this._span.attributes[SPAN_PATH] as string[];\n spanIdsPath = this._span.attributes[SPAN_IDS_PATH] as StringUUID[];\n userId = this._span.attributes[USER_ID] as string;\n sessionId = this._span.attributes[SESSION_ID] as string;\n rolloutSessionId = this._span.attributes[ROLLOUT_SESSION_ID] as string;\n traceType = this._span.attributes[TRACE_TYPE] as TraceType;\n tracingLevel = this._span.attributes[\n `${ASSOCIATION_PROPERTIES}.tracing_level`\n ] as TracingLevel ?? TracingLevel.ALL;\n for (const [key, rawValue] of Object.entries(this._span.attributes)) {\n if (key.startsWith(`${ASSOCIATION_PROPERTIES}.metadata.`)) {\n let value = rawValue!;\n try {\n value = JSON.parse(value as string);\n } catch {\n // Ignore\n }\n metadata[key.replace(`${ASSOCIATION_PROPERTIES}.metadata.`, '')] = value;\n }\n }\n } else {\n logger.warn(\n \"Attributes object is not available. Most likely the span is not a LaminarSpan \" +\n \"and not an OpenTelemetry default SDK Span. Span path and ids path will be empty.\",\n );\n }\n\n return {\n spanId: otelSpanIdToUUID(this._span.spanContext().spanId) as StringUUID,\n traceId: otelTraceIdToUUID(this._span.spanContext().traceId),\n isRemote: this._span.spanContext().isRemote ?? false,\n spanPath,\n spanIdsPath,\n userId,\n sessionId,\n rolloutSessionId,\n metadata,\n traceType,\n tracingLevel,\n };\n }\n\n public spanId(\n format: 'otel' | 'uuid' = 'otel',\n ): string {\n const spanId = this._span.spanContext().spanId;\n if (format === 'otel') {\n return spanId;\n }\n return otelSpanIdToUUID(spanId);\n }\n\n public traceId(\n format: 'otel' | 'uuid' = 'otel',\n ): string {\n const traceId = this._span.spanContext().traceId;\n if (format === 'otel') {\n return traceId;\n }\n return otelTraceIdToUUID(traceId);\n }\n\n public get tags(): string[] {\n if (!this._span.attributes) {\n logger.warn(\n \"[LaminarSpan.tags] WARNING. Current span does not have attributes object. \" +\n \"Possibly, the span was created with a custom OTel SDK. Returning an empty list. \" +\n \"Help: OpenTelemetry API does not guarantee reading attributes from a span, but OTel \" +\n \"SDK allows it by default. Laminar SDK allows to read attributes too.\",\n );\n return [];\n }\n return this._span.attributes[`${ASSOCIATION_PROPERTIES}.tags`] as string[] ?? [];\n }\n\n public get laminarAssociationProperties(): {\n metadata?: Record<string, any>;\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n } {\n if (!this._span.attributes) {\n logger.warn(\n \"[LaminarSpan.laminarAssociationProperties] WARNING. Current span does not have \" +\n \"attributes object. Possibly, the span was created with a custom OTel SDK. Returning an \" +\n \"empty object. Help: OpenTelemetry API does not guarantee reading attributes from a \" +\n \"span, but OTel SDK allows it by default. Laminar SDK allows to read attributes too.\",\n );\n return {};\n }\n try {\n const properties: Record<string, any> = {};\n const metadata: Record<string, any> = {};\n for (const [key, rawValue] of Object.entries(this._span.attributes)) {\n if (!key.startsWith(`${ASSOCIATION_PROPERTIES}.`)) {\n continue;\n }\n let value = rawValue!;\n if (key.startsWith(`${ASSOCIATION_PROPERTIES}.metadata.`)) {\n const metaKey = key.replace(`${ASSOCIATION_PROPERTIES}.metadata.`, '');\n try {\n value = JSON.parse(value as string);\n } catch {\n // Ignore\n }\n metadata[metaKey] = value;\n }\n }\n properties.tracingLevel = this._span.attributes[\n `${ASSOCIATION_PROPERTIES}.tracing_level`\n ] as TracingLevel ?? TracingLevel.ALL;\n properties.userId = this._span.attributes[USER_ID] as string ?? undefined;\n properties.sessionId = this._span.attributes[SESSION_ID] as string ?? undefined;\n properties.rolloutSessionId = this._span.attributes[ROLLOUT_SESSION_ID] as string\n ?? undefined;\n properties.traceType = this._span.attributes[TRACE_TYPE] as TraceType ?? undefined;\n return {\n metadata,\n ...properties,\n };\n } catch {\n return {};\n }\n }\n\n // ================================\n // OTel V2 compatibility\n // ================================\n\n public makeOtelV2Compatible(): void {\n makeSpanOtelV2Compatible(this._span);\n }\n\n public get instrumentationScope(): InstrumentationScope {\n return (this._span as any).instrumentationLibrary as unknown as InstrumentationScope;\n }\n\n public get parentSpanContext(): SpanContext | undefined {\n const parentSpanId = getParentSpanId(this._span);\n if (!parentSpanId) {\n return undefined;\n }\n return {\n spanId: parentSpanId,\n traceId: this.spanContext().traceId,\n // TODO: somehow get the traceFlags from the parent span\n traceFlags: this.spanContext().traceFlags,\n };\n }\n\n public getParentSpanId(): string | undefined {\n return getParentSpanId(this._span as unknown as SdkSpan);\n }\n\n public get isActivated(): boolean {\n return this._activated;\n }\n}\n","import { TraceType, TracingLevel } from \"@lmnr-ai/types\";\nimport {\n Context, context as contextApi,\n createContextKey, ROOT_CONTEXT, trace } from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\n\nimport { LaminarSpan } from \"./span\";\n\nexport const CONTEXT_SPAN_PATH_KEY = createContextKey(\"span_path\");\nexport const ASSOCIATION_PROPERTIES_KEY = createContextKey(\n \"association_properties\",\n);\nexport const CONTEXT_GLOBAL_METADATA_KEY = createContextKey(\n \"global_metadata\",\n);\n\nexport class LaminarContextManager {\n private static _asyncLocalStorage = new AsyncLocalStorage<Context[]>();\n private static _globalMetadata: Record<string, any> = {};\n private static _inheritGlobalContext: boolean = false;\n // Static registry for cross-async span management\n // We're keeping track of spans have started (and running) here for the cases when span\n // is started in one async context and ended in another\n // We use this registry to ignore the context of spans that were already ended in\n // another async context.\n // LaminarSpan adds and removes itself to and from this registry in start()\n // and end() methods respectively.\n private static _activeSpans: Set<string> = new Set();\n\n private constructor() {\n throw new Error(\"LaminarContextManager is a static class and cannot be instantiated\");\n }\n\n public static getContext(): Context {\n const contexts = this.getContextStack();\n\n // Walk through contexts from most recent to oldest\n // We're doing it this way because we want to return the most recent context\n // that has an active span\n // This is primarily for the cases when span is started in one async context\n // and ended in another\n for (let i = contexts.length - 1; i >= 0; i--) {\n const context = contexts[i];\n const span = trace.getSpan(context);\n\n if (!span) {\n // No span in this context, it's valid\n return context;\n }\n\n if (!span.isRecording() && span.spanContext().isRemote) {\n // Span is remote and not recording, it's valid\n return context;\n }\n\n if (!(span instanceof LaminarSpan)) {\n // Span is not a Laminar span, it's valid\n return context;\n }\n\n if (!span.isActivated) {\n // Span is not activated by Laminar.startActiveSpan(), it's valid\n return context;\n }\n\n // Check if the span in this context has been ended\n try {\n const isActive = this._activeSpans.has(span.spanContext().spanId);\n if (isActive) {\n // Span is still active, use this context\n return context;\n }\n // Span has been ended, continue to parent context\n } catch {\n // If we can't check the span, assume it's valid\n return context;\n }\n }\n\n // No valid context found, return ROOT_CONTEXT\n return ROOT_CONTEXT;\n }\n\n public static pushContext(context: Context) {\n const contexts = this.getContextStack();\n const newContexts = [...contexts, context];\n this._asyncLocalStorage.enterWith(newContexts);\n }\n\n public static popContext() {\n const contexts = this.getContextStack();\n if (contexts.length > 0) {\n // Remove the last context and filter out any contexts with inactive spans\n const newContexts = contexts.slice(0, -1).filter(context => {\n const span = trace.getSpan(context);\n\n if (!span) {\n // No span in this context, it's valid\n return true;\n }\n\n // Check if the span in this context has been ended\n try {\n return this._activeSpans.has(span.spanContext().spanId);\n } catch {\n // If we can't check the span, assume it's valid\n return true;\n }\n });\n\n this._asyncLocalStorage.enterWith(newContexts);\n }\n }\n\n public static clearContexts() {\n this._asyncLocalStorage.enterWith([]);\n }\n\n public static clearActiveSpans() {\n this._activeSpans.clear();\n }\n\n public static getContextStack(): Context[] {\n return this._asyncLocalStorage.getStore()\n || (this._inheritGlobalContext ? [contextApi.active()] : []);\n }\n\n /**\n * Run a function with an isolated context stack.\n * This ensures that parallel executions don't interfere with each other.\n */\n public static runWithIsolatedContext<T>(initialStack: Context[], fn: () => T): T {\n return this._asyncLocalStorage.run(initialStack, fn);\n }\n\n public static addActiveSpan(spanId: string): void {\n this._activeSpans.add(spanId);\n }\n\n public static removeActiveSpan(spanId: string): void {\n this._activeSpans.delete(spanId);\n }\n\n public static setAssociationProperties(span: LaminarSpan, context: Context): Context {\n const properties = span.laminarAssociationProperties;\n\n return this.setRawAssociationProperties(properties, context);\n }\n\n public static setRawAssociationProperties(\n properties: Record<string, any>,\n context: Context,\n ): Context {\n let entityContext = context;\n const userId = properties.userId;\n const sessionId = properties.sessionId;\n const rolloutSessionId = properties.rolloutSessionId;\n const traceType = properties.traceType;\n const metadata = properties.metadata;\n const tracingLevel = properties.tracingLevel;\n entityContext = entityContext.setValue(ASSOCIATION_PROPERTIES_KEY, {\n userId,\n sessionId,\n traceType,\n metadata,\n tracingLevel,\n rolloutSessionId,\n });\n return entityContext;\n }\n\n public static setGlobalMetadata(globalMetadata: Record<string, any>) {\n this._globalMetadata = globalMetadata;\n }\n\n public static getGlobalMetadata(): Record<string, any> {\n return this._globalMetadata;\n }\n\n public static getAssociationProperties(): {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n } {\n const entityContext = this.getContext();\n return entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {};\n }\n\n public static set inheritGlobalContext(inheritGlobalContext: boolean) {\n this._inheritGlobalContext = inheritGlobalContext;\n }\n}\n","import { trace } from \"@opentelemetry/api\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport * as net from \"net\";\n\nimport { Laminar } from \"../../../laminar\";\nimport { initializeLogger } from \"../../../utils\";\nimport { SPAN_IDS_PATH, SPAN_PATH } from \"../../tracing/attributes\";\nimport { LaminarContextManager } from \"../../tracing/context\";\n\nconst logger = initializeLogger();\n\nconst DEFAULT_ANTHROPIC_BASE_URL = \"https://api.anthropic.com\";\nconst DEFAULT_CC_PROXY_PORT = 45667;\nconst CC_PROXY_PORT_ATTEMPTS = 5;\n\n// Module-level state for proxy management\nlet ccProxyBaseUrl: string | null = null;\nlet ccProxyTargetUrl: string | null = null;\nlet ccProxyShutdownRegistered = false;\nlet ccProxyRefCount = 0;\nlet ccProxyStartupPromise: Promise<string | null> | null = null;\n\n/**\n * Find an available port starting from the given port\n */\nfunction findAvailablePort(startPort: number, attempts: number): Promise<number | null> {\n return new Promise((resolve) => {\n let currentAttempt = 0;\n\n const tryPort = (port: number) => {\n const server = net.createServer();\n\n server.once('error', () => {\n server.close();\n currentAttempt++;\n if (currentAttempt < attempts) {\n tryPort(startPort + currentAttempt);\n } else {\n resolve(null);\n }\n });\n\n server.once('listening', () => {\n server.close(() => {\n resolve(port);\n });\n });\n\n server.listen(port, '127.0.0.1');\n };\n\n tryPort(startPort);\n });\n}\n\n/**\n * Wait for a port to be available\n */\nfunction waitForPort(port: number, timeoutMs: number = 5000): Promise<boolean> {\n return new Promise((resolve) => {\n const deadline = Date.now() + timeoutMs;\n\n const checkPort = () => {\n if (Date.now() >= deadline) {\n resolve(false);\n return;\n }\n\n const socket = new net.Socket();\n\n socket.setTimeout(200);\n\n socket.once('connect', () => {\n socket.destroy();\n resolve(true);\n });\n\n socket.once('timeout', () => {\n socket.destroy();\n setTimeout(checkPort, 100);\n });\n\n socket.once('error', () => {\n socket.destroy();\n setTimeout(checkPort, 100);\n });\n\n socket.connect(port, '127.0.0.1');\n };\n\n checkPort();\n });\n}\n\n/**\n * Stop the claude-code proxy server\n */\nfunction stopCcProxy() {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { stopServer } = require(\"@lmnr-ai/claude-code-proxy\");\n logger.debug('Stopping cc-proxy...');\n stopServer();\n } catch (e) {\n logger.debug(`Unable to stop cc-proxy: ${e instanceof Error ? e.message : String(e)}`);\n }\n\n if (ccProxyTargetUrl) {\n process.env.ANTHROPIC_BASE_URL = ccProxyTargetUrl;\n }\n\n ccProxyBaseUrl = null;\n ccProxyTargetUrl = null;\n ccProxyRefCount = 0;\n ccProxyStartupPromise = null;\n}\n\n/**\n * Register cleanup on process exit\n */\nfunction registerProxyShutdown() {\n if (!ccProxyShutdownRegistered) {\n process.on('exit', () => {\n logger.debug('process.on(\"exit\") called');\n stopCcProxy();\n });\n ccProxyShutdownRegistered = true;\n }\n}\n\n/**\n * Get the current proxy base URL if running\n */\nexport function getProxyBaseUrl(): string | null {\n return ccProxyBaseUrl;\n}\n\n/**\n * Start the claude-code proxy server with reference counting\n */\nexport async function startProxy({\n env,\n}: {\n env: Record<string, string | undefined>;\n}): Promise<string | null> {\n // If there's an ongoing startup, wait for it to complete\n\n if (ccProxyStartupPromise !== null) {\n logger.debug(\"Waiting for ongoing proxy startup to complete\");\n await ccProxyStartupPromise;\n }\n\n // After waiting (or if there was no ongoing startup), check if proxy is running\n if (ccProxyBaseUrl !== null) {\n ccProxyRefCount++;\n logger.debug(`Reusing existing proxy, ref count: ${ccProxyRefCount}`);\n return ccProxyBaseUrl;\n }\n\n // Start the proxy - create promise to prevent concurrent startups\n ccProxyStartupPromise = (async () => {\n try {\n const port = await findAvailablePort(DEFAULT_CC_PROXY_PORT, CC_PROXY_PORT_ATTEMPTS);\n if (port === null) {\n logger.warn(\"Unable to allocate port for cc-proxy.\");\n return null;\n }\n\n const targetUrl =\n ccProxyTargetUrl ||\n process.env.ANTHROPIC_ORIGINAL_BASE_URL ||\n env.ANTHROPIC_BASE_URL || process.env.ANTHROPIC_BASE_URL ||\n DEFAULT_ANTHROPIC_BASE_URL;\n\n logger.debug(`Using anthropic base url: ${targetUrl}`);\n\n ccProxyTargetUrl = targetUrl;\n process.env.ANTHROPIC_ORIGINAL_BASE_URL = targetUrl;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { runServer } = require(\"@lmnr-ai/claude-code-proxy\");\n logger.debug(`Running cc-proxy server on port ${port} with target url ${targetUrl}`);\n runServer(targetUrl, port);\n } catch (e) {\n logger.warn(`Unable to start cc-proxy: ${e instanceof Error ? e.message : String(e)}`);\n return null;\n }\n\n const isReady = await waitForPort(port);\n if (!isReady) {\n logger.warn(`cc-proxy failed to start on port ${port}`);\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { stopServer } = require(\"@lmnr-ai/claude-code-proxy\");\n stopServer();\n return null;\n }\n\n const proxyBaseUrl = `http://127.0.0.1:${port}`;\n ccProxyBaseUrl = proxyBaseUrl;\n ccProxyRefCount = 1;\n process.env.ANTHROPIC_BASE_URL = proxyBaseUrl;\n registerProxyShutdown();\n\n logger.info(`Started claude proxy server on: ${proxyBaseUrl}`);\n return proxyBaseUrl;\n } finally {\n // Clear the startup promise when done (success or failure)\n ccProxyStartupPromise = null;\n }\n })();\n\n return ccProxyStartupPromise;\n}\n\n/**\n * Release/stop the claude-code proxy server with reference counting\n */\nexport function releaseProxy(): void {\n if (ccProxyRefCount > 0) {\n ccProxyRefCount--;\n logger.debug(`Decremented proxy ref count to: ${ccProxyRefCount}`);\n }\n\n // Only stop the proxy when ref count reaches 0\n if (ccProxyRefCount === 0 && ccProxyBaseUrl !== null) {\n stopCcProxy();\n logger.debug(\"Stopped claude proxy server (ref count reached 0)\");\n }\n}\n\n/**\n * Force stop the claude-code proxy server, ignoring reference count\n * Used during shutdown to ensure cleanup\n */\nexport function forceReleaseProxy(): void {\n if (ccProxyBaseUrl !== null) {\n stopCcProxy();\n logger.debug(\"Force stopped claude proxy server\");\n }\n}\n\n/**\n * Get the current span context payload for proxy\n */\nfunction getSpanContextPayload(): {\n trace_id: string;\n span_id: string;\n project_api_key: string;\n span_ids_path: string[];\n span_path: string[];\n laminar_url: string;\n} | null {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext());\n if (!currentSpan || !currentSpan.spanContext().isRemote && !currentSpan.isRecording()) {\n return null;\n }\n\n const spanContext = currentSpan.spanContext();\n if (!spanContext || !spanContext.traceId) {\n return null;\n }\n\n let spanIdsPath: string[] = [];\n let spanPath: string[] = [];\n\n // Try to extract span path attributes from readable span\n try {\n const readableSpan = currentSpan as unknown as ReadableSpan;\n if (readableSpan.attributes) {\n const idsPath = readableSpan.attributes[SPAN_IDS_PATH];\n const path = readableSpan.attributes[SPAN_PATH];\n\n if (Array.isArray(idsPath)) {\n spanIdsPath = idsPath as string[];\n }\n if (Array.isArray(path)) {\n spanPath = path as string[];\n }\n }\n } catch {\n // If we can't access attributes, continue with empty arrays\n }\n\n const projectApiKey = Laminar.getProjectApiKey();\n const laminarUrl = Laminar.getHttpUrl();\n\n return {\n trace_id: spanContext.traceId,\n span_id: spanContext.spanId,\n project_api_key: projectApiKey || \"\",\n span_ids_path: spanIdsPath,\n span_path: spanPath,\n laminar_url: laminarUrl || \"https://api.lmnr.ai\",\n };\n}\n\n/**\n * Publish the current span context to the proxy server\n */\nexport function setTraceToProxy(): void {\n const payload = getSpanContextPayload();\n if (!payload) {\n return;\n }\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { setCurrentTrace } = require(\"@lmnr-ai/claude-code-proxy\");\n\n setCurrentTrace({\n traceId: payload.trace_id,\n spanId: payload.span_id,\n projectApiKey: payload.project_api_key,\n spanIdsPath: payload.span_ids_path,\n spanPath: payload.span_path,\n laminarUrl: payload.laminar_url,\n }).catch((error: any) => {\n logger.debug(\n \"Failed to set trace context to proxy: \" +\n (error instanceof Error ? error.message : String(error)),\n );\n }).finally(() => {\n logger.debug(\"Set trace context to proxy\");\n });\n }\n catch (e: any) {\n logger.debug(\n \"Unable to set trace context to proxy: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n}\n\n","import { diag } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { version as SDK_VERSION } from \"../../../../package.json\";\nimport { Laminar } from \"../../../laminar\";\nimport { initializeLogger } from \"../../../utils\";\nimport { SPAN_INPUT, SPAN_OUTPUT } from \"../../tracing/attributes\";\nimport {\n forceReleaseProxy,\n getProxyBaseUrl,\n releaseProxy,\n setTraceToProxy,\n startProxy,\n} from \"./proxy\";\n\n// Re-export forceReleaseProxy for cleanup in Laminar.shutdown()\nexport { forceReleaseProxy };\n\nconst logger = initializeLogger();\n\n/**\n * Create an instrumented version of the claude-agent-sdk query function.\n * This can be used when importing the query function before Laminar initialization.\n *\n * @param originalQuery - The original query function from claude-agent-sdk\n * @returns The instrumented query function\n */\nexport function instrumentClaudeAgentQuery(\n originalQuery: any, // typeof ClaudeAgentSDK.query\n): any { // typeof ClaudeAgentSDK.Query\n return (params: {\n prompt: string | AsyncIterable<any>, // AsyncIterable<ClaudeAgentSDK.SDKUserMessage>\n options?: any, // ClaudeAgentSDK.Options\n }) => {\n const span = Laminar.startSpan({\n name: 'query',\n spanType: 'DEFAULT',\n });\n\n span.setAttribute(\n SPAN_INPUT,\n JSON.stringify({ prompt: typeof params.prompt === 'string' ? params.prompt : '<stream>' }),\n );\n\n const generator = async function* () {\n const collected: any[] = []; // ClaudeAgentSDK.SDKMessage[]\n\n try {\n // Start proxy (uses reference counting for concurrent requests)\n await startProxy({\n env: params.options?.env ?? process.env,\n });\n\n // Publish span context\n const proxyBaseUrl = getProxyBaseUrl();\n logger.debug(`getProxyBaseUrl() result: ${proxyBaseUrl}`);\n if (proxyBaseUrl) {\n Laminar.withSpan(span, () => {\n logger.debug('Setting trace to proxy...');\n setTraceToProxy();\n });\n if (params.options?.env) {\n params.options.env.ANTHROPIC_BASE_URL = proxyBaseUrl;\n }\n } else {\n logger.debug(\"No claude proxy server found. Skipping span context publication.\");\n }\n\n // Call original and wrap the generator\n const originalGenerator = originalQuery(params);\n\n // Yield items and collect\n for await (const message of originalGenerator) {\n collected.push(message);\n yield message;\n }\n } catch (error) {\n Laminar.withSpan(span, () => {\n span.recordException(error as Error);\n });\n throw error;\n } finally {\n // Release proxy (decrements ref count, only stops when count reaches 0)\n releaseProxy();\n span.setAttribute(SPAN_OUTPUT, JSON.stringify(collected));\n span.end();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return generator() as any; // ClaudeAgentSDK.Query\n };\n}\n\n/* eslint-disable\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class ClaudeAgentSDKInstrumentation extends InstrumentationBase {\n constructor() {\n super(\n \"@lmnr/claude-agent-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@anthropic-ai/claude-agent-sdk\",\n ['>=0.1.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n // { query?: typeof ClaudeAgentSDK.query }\n public manuallyInstrument(claudeAgentModule: { query?: any }) {\n // Only instrument the query function if provided\n if (claudeAgentModule.query && typeof claudeAgentModule.query === 'function') {\n this._wrap(\n claudeAgentModule,\n 'query',\n this.patchQuery(),\n );\n } else {\n logger.debug(\n 'query function not found in claudeAgentSDK module, skipping instrumentation',\n );\n }\n }\n\n private patchQuery(): any {\n // casts to ClaudeAgentSDK.query\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (original: Function) => instrumentClaudeAgentQuery(original as any);\n }\n\n private patch(moduleExports: any): any { // typeof ClaudeAgentSDK\n diag.debug('Patching @anthropic-ai/claude-agent-sdk');\n\n // Wrap the query function for automatic instrumentation\n if (moduleExports.query && typeof moduleExports.query === 'function') {\n this._wrap(\n moduleExports,\n 'query',\n this.patchQuery(),\n );\n }\n\n return moduleExports;\n }\n\n private unpatch(moduleExports: any): void { // typeof ClaudeAgentSDK\n diag.debug('Unpatching @anthropic-ai/claude-agent-sdk');\n\n // Unwrap the query function\n this._unwrap(moduleExports, 'query');\n }\n}\n/* eslint-enable\n @typescript-eslint/no-unsafe-function-type\n*/\n\n","import {\n type LaminarSpanContext,\n type SessionRecordingOptions,\n type SpanType,\n type TraceType,\n TracingLevel,\n} from '@lmnr-ai/types';\nimport {\n AttributeValue,\n Context,\n context as contextApi,\n isSpanContextValid,\n type Span,\n TimeInput,\n trace,\n} from '@opentelemetry/api';\nimport { SpanProcessor } from '@opentelemetry/sdk-trace-base';\n\nimport { InitializeOptions, initializeTracing, LaminarSpanProcessor } from './opentelemetry-lib';\nimport { _resetConfiguration } from './opentelemetry-lib/configuration';\nimport {\n forceReleaseProxy as forceReleaseClaudeProxy,\n instrumentClaudeAgentQuery,\n} from './opentelemetry-lib/instrumentation/claude-agent-sdk';\nimport {\n forceFlush,\n getSpanProcessor,\n getTracer,\n patchModules,\n} from './opentelemetry-lib/tracing';\nimport {\n ASSOCIATION_PROPERTIES,\n LaminarAttributes,\n PARENT_SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n SESSION_ID,\n SPAN_TYPE,\n TRACE_TYPE,\n USER_ID,\n} from './opentelemetry-lib/tracing/attributes';\nimport { LaminarContextManager } from './opentelemetry-lib/tracing/context';\nimport { LaminarSpan } from './opentelemetry-lib/tracing/span';\nimport {\n deserializeLaminarSpanContext,\n initializeLogger,\n loadEnv,\n metadataToAttributes,\n type StringUUID,\n tryToOtelSpanContext,\n validateTracingConfig,\n} from './utils';\n\nloadEnv();\n\nconst logger = initializeLogger();\n\ninterface LaminarInitializeProps {\n projectApiKey?: string;\n baseUrl?: string;\n baseHttpUrl?: string;\n httpPort?: number;\n grpcPort?: number;\n instrumentModules?: InitializeOptions[\"instrumentModules\"];\n disableBatch?: boolean;\n traceExportTimeoutMillis?: number;\n logLevel?: \"debug\" | \"info\" | \"warn\" | \"error\";\n maxExportBatchSize?: number;\n forceHttp?: boolean;\n sessionRecordingOptions?: SessionRecordingOptions;\n metadata?: Record<string, any>;\n inheritGlobalContext?: boolean;\n spanProcessor?: SpanProcessor;\n}\n\ntype LaminarAttributesProp = Record<\n typeof LaminarAttributes[keyof typeof LaminarAttributes],\n AttributeValue\n>;\n\nexport class Laminar {\n private static baseHttpUrl: string;\n private static projectApiKey: string;\n private static isInitialized: boolean = false;\n private static globalMetadata: Record<string, any> = {};\n /**\n * Initialize Laminar context across the application.\n * This method must be called before using any other Laminar methods or decorators.\n *\n * @param {LaminarInitializeProps} props - Configuration object.\n * @param {string} props.projectApiKey - Laminar project api key. You can generate one by going\n * to the projects settings page on the Laminar dashboard.\n * If not specified, it will try to read from the LMNR_PROJECT_API_KEY environment variable.\n * @param {string} props.baseUrl - Laminar API url. Do not include the port, use\n * `httpPort` and `grpcPort` instead.\n * If not specified, defaults to https://api.lmnr.ai.\n * @param {string} props.baseHttpUrl - Laminar API http url. If not specified, defaults to\n * baseUrl. Only use this if you want to proxy HTTP requests through a different host.\n * @param {number} props.httpPort - Laminar API http port.\n * If not specified, defaults to 443.\n * @param {number} props.grpcPort - Laminar API grpc port.\n * If not specified, defaults to 8443.\n * @param {InitializeOptions[\"instrumentModules\"]} props.instrumentModules - Record\n * of modules to instrument.\n * If not specified, all auto-instrumentable modules will be instrumented, which include\n * LLM calls (OpenAI, Anthropic, etc), Langchain, VectorDB calls (Pinecone, Qdrant, etc).\n * Pass an empty object {} to disable any kind of automatic instrumentation.\n * If you only want to auto-instrument specific modules, then pass them in the object.\n * @param {boolean} props.disableBatch - Whether to disable batching of spans. Useful for debug\n * environments. If true, spans will be sent immediately using {@link SimpleSpanProcessor}\n * instead of {@link BatchSpanProcessor}.\n * @param {number} props.traceExportTimeoutMillis - Timeout for trace export.\n * Defaults to 30_000 (30 seconds),\n * which is over the default OTLP exporter timeout of 10_000 (10 seconds).\n * @param {string} props.logLevel - OTel log level. Defaults to \"error\".\n * @param {number} props.maxExportBatchSize - Maximum number of spans to export in a single batch.\n * Ignored when `disableBatch` is true.\n * @param {boolean} props.forceHttp - Whether to force HTTP export. Not recommended.\n * @param {SessionRecordingOptions} props.sessionRecordingOptions - Options for browser\n * session recording.\n * Currently supports 'maskInputOptions' to control whether input fields are masked during\n * recording. Defaults to undefined (uses default masking behavior).\n * @param {Record<string, any>} props.metadata - Global metadata to associate with all spans.\n * This metadata will be associated with all spans, and merged with any metadata passed to\n * each span. Must be JSON serializable.\n * @param {boolean} props.inheritGlobalContext - Whether to inherit the global OpenTelemetry\n * context. Defaults to false. This is useful if your library is instrumented with OpenTelemetry\n * and you want Laminar spans to be children of the existing spans.\n * @param {SpanProcessor} props.spanProcessor - The span processor to use. If passed, some of\n * the other options will be ignored.\n *\n * @example\n * import { Laminar } from '@lmnr-ai/lmnr';\n * import { OpenAI } from 'openai';\n * import * as ChainsModule from \"langchain/chains\";\n *\n * // Initialize Laminar while auto-instrumenting Langchain and OpenAI modules.\n * Laminar.initialize({\n * projectApiKey: \"<LMNR_PROJECT_API_KEY>\",\n * instrumentModules: {\n * langchain: {\n * chainsModule: ChainsModule\n * },\n * openAI: OpenAI\n * }\n * });\n *\n * @throws {Error} - If project API key is not set\n */\n public static initialize({\n projectApiKey,\n baseUrl,\n baseHttpUrl,\n httpPort,\n grpcPort,\n instrumentModules,\n disableBatch,\n traceExportTimeoutMillis,\n logLevel,\n maxExportBatchSize,\n forceHttp,\n sessionRecordingOptions,\n metadata,\n inheritGlobalContext,\n spanProcessor,\n }: LaminarInitializeProps = {}) {\n if (this.isInitialized) {\n logger.warn(\"Laminar has already been initialized. Skipping initialization.\");\n return;\n }\n const key = projectApiKey ?? process?.env?.LMNR_PROJECT_API_KEY;\n\n // Validate that either API key or OTEL configuration is present\n validateTracingConfig(key);\n\n this.projectApiKey = key ?? '';\n let url = baseUrl ?? process?.env?.LMNR_BASE_URL;\n\n // Only set default URL if we have an API key (traditional Laminar setup)\n if (key && !url) {\n url = 'https://api.lmnr.ai';\n }\n\n const httpUrl = baseHttpUrl ?? url;\n let port: number | undefined = httpPort;\n\n if (httpUrl) {\n if (!port) {\n const m = httpUrl.match(/:\\d{1,5}$/g);\n port = m\n ? parseInt(m[0].slice(1))\n : 443;\n }\n const httpUrlWithoutSlash = httpUrl.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n this.baseHttpUrl = `${httpUrlWithoutSlash}:${port}`;\n } else {\n this.baseHttpUrl = '';\n }\n\n this.globalMetadata = metadata ?? {};\n LaminarContextManager.setGlobalMetadata(this.globalMetadata);\n if (inheritGlobalContext) {\n LaminarContextManager.inheritGlobalContext = true;\n }\n if (spanProcessor && !(spanProcessor instanceof LaminarSpanProcessor)) {\n logger.warn(\n \"Span processor is not a LaminarSpanProcessor. Some functionality may be impaired.\",\n );\n }\n this.isInitialized = true;\n\n const urlWithoutSlash = url?.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n const httpUrlWithoutSlash = httpUrl?.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n\n initializeTracing({\n baseUrl: urlWithoutSlash,\n baseHttpUrl: httpUrlWithoutSlash,\n apiKey: key,\n port: grpcPort,\n forceHttp,\n httpPort,\n silenceInitializationMessage: true,\n instrumentModules,\n logLevel: logLevel ?? \"error\",\n disableBatch,\n maxExportBatchSize,\n traceExportTimeoutMillis,\n sessionRecordingOptions,\n spanProcessor,\n });\n\n this._initializeContextFromEnv();\n }\n\n /**\n * Initialize Laminar context from the LMNR_SPAN_CONTEXT environment variable.\n * This allows continuing traces across process boundaries.\n * @private\n */\n private static _initializeContextFromEnv(): void {\n const envContext = process?.env?.LMNR_SPAN_CONTEXT;\n if (!envContext) {\n return;\n }\n\n try {\n const laminarContext = deserializeLaminarSpanContext(envContext);\n\n // Convert to OpenTelemetry span context\n const otelSpanContext = tryToOtelSpanContext(laminarContext);\n // If we've parsed the context from the environment variable, it's remote\n otelSpanContext.isRemote = true;\n\n // Set parent path info in the span processor\n const processor = getSpanProcessor();\n if (processor\n && processor instanceof LaminarSpanProcessor\n && laminarContext.spanPath\n && laminarContext.spanIdsPath\n ) {\n processor.setParentPathInfo(\n otelSpanContext.spanId,\n laminarContext.spanPath,\n laminarContext.spanIdsPath,\n );\n }\n\n // Create a non-recording span and push the context\n const baseContext = trace.setSpan(\n LaminarContextManager.getContext(),\n trace.wrapSpanContext(otelSpanContext),\n );\n const ctx = LaminarContextManager.setRawAssociationProperties(laminarContext, baseContext);\n LaminarContextManager.pushContext(ctx);\n\n logger.debug(\"Initialized Laminar parent context from LMNR_SPAN_CONTEXT.\");\n } catch (e) {\n logger.warn(\n \"LMNR_SPAN_CONTEXT is set but could not be used: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n /**\n * Patch modules manually. Use this in setups where {@link Laminar.initialize()}\n * and in particular its `instrumentModules` option is not working, e.g. in\n * Next.js place Laminar initialize in `instrumentation.ts`, and then patch\n * the modules in server components or API routes.\n *\n * Make sure to call this after {@link Laminar.initialize()}.\n *\n * @param {InitializeOptions[\"instrumentModules\"]} modules - Record of modules to instrument.\n */\n public static patch(modules: InitializeOptions[\"instrumentModules\"]) {\n if (!this.isInitialized) {\n logger.warn(\"Laminar must be initialized before patching modules. Skipping patch.\");\n return;\n }\n if (!modules || Object.keys(modules).length === 0) {\n throw new Error(\"Pass at least one module to patch\");\n }\n patchModules(modules);\n }\n\n /**\n * Check if Laminar has been initialized. Utility to make sure other methods\n * are called after initialization.\n */\n public static initialized(): boolean {\n return this.isInitialized;\n }\n\n /**\n * Associates an event with the current span. If the event is created outside\n * of a span context, a new span is created and the event is associated with it.\n *\n * @param {object} options\n * @param {string} options.name - The name of the event.\n * @param {Record<string, AttributeValue>} options.attributes - The attributes of the event.\n * Values must be of a supported type.\n * @param {TimeInput} options.timestamp - The timestamp of the event. If not specified, relies on\n * the underlying OpenTelemetry implementation.\n * If specified as an integer, it must be epoch nanoseconds.\n * @param {string} options.sessionId - The session ID to associate with the event.\n * If not specified, the session ID of the current trace is used.\n * @param {string} options.userId - The user ID to associate with the event. If not specified,\n * the user ID of the current trace is used.\n */\n public static event({\n name,\n attributes,\n timestamp,\n sessionId,\n userId,\n }: {\n name: string,\n attributes?: Record<string, AttributeValue>,\n timestamp?: TimeInput,\n sessionId?: string,\n userId?: string,\n }) {\n if (!Laminar.initialized()) {\n return;\n }\n\n const allAttributes = {\n ...(attributes ?? {}),\n ...(sessionId ? { \"lmnr.event.session_id\": sessionId } : {}),\n ...(userId ? { \"lmnr.event.user_id\": userId } : {}),\n } as Record<string, AttributeValue>;\n\n const currentSpan = Laminar.getCurrentSpan();\n\n if (currentSpan === undefined) {\n const newSpan = Laminar.startSpan({ name });\n newSpan?.addEvent(name, allAttributes, timestamp);\n newSpan?.end();\n return;\n }\n\n currentSpan.addEvent(name, allAttributes, timestamp);\n }\n\n public static getCurrentSpan(\n context?: Context,\n ): LaminarSpan | undefined {\n const currentSpan = trace.getSpan(context ?? LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n if (currentSpan === undefined || !isSpanContextValid(currentSpan.spanContext())) {\n return undefined;\n }\n if (currentSpan instanceof LaminarSpan) {\n return currentSpan;\n }\n return new LaminarSpan(currentSpan);\n }\n\n /**\n * Set attributes for the current span. Useful for manual\n * instrumentation.\n * @param {LaminarAttributesProp} attributes - The attributes to set for the current span.\n *\n * @example\n * import { Laminar as L, observe } from '@lmnr-ai/laminar';\n * await observe({ name: 'mySpanName', spanType: 'LLM' }, async (msg: string) => {\n * const response = await myCustomCallToOpenAI(msg);\n * L.setSpanAttributes({\n * [LaminarAttributes.PROVIDER]: 'openai',\n * [LaminarAttributes.REQUEST_MODEL]: \"requested_model\",\n * [LaminarAttributes.RESPONSE_MODEL]: response.model,\n * [LaminarAttributes.INPUT_TOKEN_COUNT]: response.usage.prompt_tokens,\n * [LaminarAttributes.OUTPUT_TOKEN_COUNT]: response.usage.completion_tokens,\n * })\n * }, userMessage);\n */\n public static setSpanAttributes(\n attributes: LaminarAttributesProp,\n ) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, value);\n }\n }\n }\n\n /**\n * Set the output of the current span. Useful for manual instrumentation.\n * @param output - Output of the span. Will be sent as an attribute, so must\n * be serializable to JSON.\n */\n public static setSpanOutput(output: any) {\n if (output == null) {\n return;\n }\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setOutput(output);\n }\n }\n\n public static setTraceMetadata(metadata: Record<string, any>) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setTraceMetadata(metadata);\n }\n }\n\n public static setTraceSessionId(sessionId: string) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setTraceSessionId(sessionId);\n }\n }\n\n public static setTraceUserId(userId: string) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan) {\n (currentSpan).setTraceUserId(userId);\n }\n }\n\n public static setSpanTags(tags: string[]) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan !== undefined && isSpanContextValid(currentSpan.spanContext())) {\n (currentSpan).setTags(tags);\n }\n }\n\n public static addSpanTags(tags: string[]) {\n const currentSpan = Laminar.getCurrentSpan();\n if (currentSpan !== undefined && isSpanContextValid(currentSpan.spanContext())) {\n (currentSpan).addTags(tags);\n }\n }\n\n /**\n * Start a new span, but don't set it as active. Useful for\n * manual instrumentation. If span type is 'LLM', you should report usage\n * manually. See {@link setSpanAttributes} for more information.\n *\n * @param {Object} options\n * @param {string} options.name - name of the span\n * @param {any} options.input - input to the span. Will be sent as an attribute, so must\n * be JSON serializable\n * @param {string} options.spanType - type of the span. Defaults to 'DEFAULT'\n * @param {Context} options.context - raw OpenTelemetry context to bind the span to.\n * @param {string | LaminarSpanContext} options.parentSpanContext - parent span context\n * to bind the span to.\n * @param {string[]} options.tags - tags to associate with the span.\n * @param {string} options.userId - user ID to associate with the span.\n * @param {string} options.sessionId - session ID to associate with the span.\n * @param {Record<string, any>} options.metadata - metadata to associate with the span.\n * @returns The started span.\n *\n * @example\n * import { Laminar, observe } from '@lmnr-ai/lmnr';\n * const foo = async (span: Span) => {\n * await Laminar.withSpan(span, async () => {\n * await observe({ name: 'foo' }, async () => {\n * // Your code here\n * })\n * })\n * };\n * const bar = async (span: Span) => {\n * await Laminar.withSpan(span, async () => {\n * await openai_client.chat.completions.create();\n * })\n * };\n *\n * const parentSpan = Laminar.startSpan({name: \"outer\"});\n * foo(parentSpan);\n * await bar(parentSpan);\n * // IMPORTANT: Don't forget to end the span!\n * parentSpan.end();\n *\n * // Results in:\n * // | outer\n * // | | foo\n * // | | | ...\n * // | | openai.chat\n */\n public static startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n startTime,\n }: {\n name: string,\n input?: any,\n spanType?: SpanType,\n context?: Context,\n parentSpanContext?: string | LaminarSpanContext,\n tags?: string[],\n userId?: string,\n sessionId?: string,\n metadata?: Record<string, any>,\n startTime?: TimeInput,\n }): Span {\n return this._startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n activated: false,\n startTime,\n });\n }\n\n /**\n * Start a new span, and set it as active. It is the caller's responsibility\n * to end the span. It is important to end the span, to avoid context mixing up.\n * We suggest ending the span in a finally block.\n * This is useful for manual instrumentation.\n * If span type is 'LLM', you should report usage manually.\n * See {@link setSpanAttributes} for more information.\n *\n * @param {Object} options\n * @param {string} options.name - name of the span\n * @param {any} options.input - input to the span. Will be sent as an attribute, so must\n * be JSON serializable\n * @param {string} options.spanType - type of the span. Defaults to 'DEFAULT'\n * @param {Context} options.context - raw OpenTelemetry context to bind the span to.\n * @param {string | LaminarSpanContext} options.parentSpanContext - parent span context\n * to bind the span to.\n * @param {string[]} options.tags - tags to associate with the span.\n * @param {string} options.userId - user ID to associate with the span.\n * @param {string} options.sessionId - session ID to associate with the span.\n * @param {Record<string, any>} options.metadata - metadata to associate with the span.\n * @returns The started span.\n *\n * @example\n * import { Laminar, observe } from '@lmnr-ai/lmnr';\n * const foo = async () => {\n * await observe({ name: 'foo' }, async () => {\n * // Your code here\n * })\n * };\n * const bar = async (span: Span) => {\n * await observe({ name: 'bar' }, async () => {\n * await openai_client.chat.completions.create();\n * })\n * };\n *\n * try {\n * const parentSpan = Laminar.startActiveSpan({name: \"outer\"});\n * foo();\n * await bar();\n * } finally {\n * parentSpan.end();\n * }\n *\n * // Results in:\n * // | outer\n * // | | foo\n * // | | | ...\n * // | | bar\n * // | | | openai.chat\n */\n public static startActiveSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n startTime,\n }: {\n name: string,\n input?: any,\n spanType?: SpanType,\n context?: Context,\n parentSpanContext?: string | LaminarSpanContext,\n tags?: string[],\n userId?: string,\n sessionId?: string,\n metadata?: Record<string, any>,\n startTime?: TimeInput,\n }): Span {\n return this._startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n activated: true,\n startTime,\n });\n }\n\n private static _startSpan({\n name,\n input,\n spanType,\n context,\n parentSpanContext,\n tags,\n userId,\n sessionId,\n metadata,\n activated,\n startTime,\n }: {\n name: string,\n input?: any,\n spanType?: SpanType,\n context?: Context,\n parentSpanContext?: string | LaminarSpanContext,\n tags?: string[],\n userId?: string,\n sessionId?: string,\n metadata?: Record<string, any>,\n activated?: boolean,\n startTime?: TimeInput,\n }): Span {\n let entityContext = context ?? LaminarContextManager.getContext();\n\n // Extract parent path information before converting to OpenTelemetry span context\n let parentPath: string[] | undefined;\n let parentIdsPath: string[] | undefined;\n let parentMetadata: Record<string, any> | undefined;\n let parentTraceType: TraceType | undefined;\n let parentTracingLevel: TracingLevel | undefined;\n let parentUserId: string | undefined;\n let parentSessionId: string | undefined;\n\n if (parentSpanContext) {\n try {\n const laminarContext = typeof parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(parentSpanContext)\n : parentSpanContext;\n\n parentPath = laminarContext.spanPath;\n parentIdsPath = laminarContext.spanIdsPath;\n parentMetadata = laminarContext.metadata;\n parentTraceType = laminarContext.traceType;\n parentTracingLevel = laminarContext.tracingLevel;\n parentUserId = laminarContext.userId;\n parentSessionId = laminarContext.sessionId;\n\n const spanContext = tryToOtelSpanContext(laminarContext);\n entityContext = trace.setSpan(entityContext, trace.wrapSpanContext(spanContext));\n LaminarContextManager.pushContext(entityContext);\n } catch (e) {\n logger.warn(\"Failed to parse parent span context: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n const tagProperties = tags\n ? { [`${ASSOCIATION_PROPERTIES}.tags`]: Array.from(new Set(tags)) }\n : {};\n const ctxAssociationProperties = LaminarContextManager.getAssociationProperties();\n const userIdValue = userId\n ?? parentUserId\n ?? ctxAssociationProperties.userId;\n const sessionIdValue = sessionId\n ?? parentSessionId\n ?? ctxAssociationProperties.sessionId;\n const traceTypeValue = parentTraceType\n ?? ((spanType as string) === 'EVALUATION' ? 'EVALUATION' : undefined)\n ?? ctxAssociationProperties.traceType;\n const tracingLevelValue = parentTracingLevel\n ?? ctxAssociationProperties.tracingLevel;\n const ctxMetadata = ctxAssociationProperties.metadata;\n\n const userIdProperties = userIdValue ? { [USER_ID]: userIdValue } : {};\n const sessionIdProperties = sessionIdValue ? { [SESSION_ID]: sessionIdValue } : {};\n const traceTypeProperties = traceTypeValue ? { [TRACE_TYPE]: traceTypeValue } : {};\n const tracingLevelProperties = tracingLevelValue\n ? { [`${ASSOCIATION_PROPERTIES}.tracing_level`]: tracingLevelValue }\n : {};\n\n const mergedMetadata = {\n ...this.globalMetadata,\n ...ctxMetadata,\n ...parentMetadata,\n ...metadata,\n };\n\n const metadataProperties = metadataToAttributes(mergedMetadata);\n const attributes = {\n [SPAN_TYPE]: spanType ?? 'DEFAULT',\n ...tagProperties,\n ...userIdProperties,\n ...sessionIdProperties,\n ...metadataProperties,\n ...traceTypeProperties,\n ...tracingLevelProperties,\n ...(parentPath ? { [PARENT_SPAN_PATH]: parentPath } : {}),\n ...(parentIdsPath ? { [PARENT_SPAN_IDS_PATH]: parentIdsPath } : {}),\n };\n\n const span = new LaminarSpan(\n getTracer().startSpan(name, { attributes, startTime }, entityContext),\n );\n span.activated = activated ?? false;\n\n if (input) {\n span.setInput(input);\n }\n if (activated) {\n entityContext = LaminarContextManager.setAssociationProperties(\n span,\n entityContext,\n );\n entityContext = trace.setSpan(entityContext, span);\n LaminarContextManager.pushContext(entityContext);\n }\n return span;\n }\n\n /**\n * A utility wrapper around OpenTelemetry's `context.with()`. Useful for\n * passing spans around in manual instrumentation:\n *\n * @param {Span} span - Parent span to bind the execution to.\n * @param {Function} fn - Function to execute within the span context.\n * @param {boolean} endOnExit - Whether to end the span after the function has\n * executed. Defaults to `false`. If `false`, you MUST manually call\n * `span.end()` at the end of the execution, so that spans are not lost.\n * @returns The result of the function execution.\n *\n * See {@link startSpan} docs for a usage example\n */\n public static withSpan<T>(span: Span, fn: () => T, endOnExit?: boolean): T {\n const ctx = LaminarContextManager.getContext();\n const laminarSpan = new LaminarSpan(span);\n const ctxWithAssociationProperties = LaminarContextManager.setAssociationProperties(\n laminarSpan,\n ctx,\n );\n const context = trace.setSpan(ctxWithAssociationProperties, span);\n return contextApi.with(context, () => LaminarContextManager.runWithIsolatedContext(\n [context],\n () => {\n try {\n const result = fn();\n if (result instanceof Promise) {\n return result.catch((err) => {\n span.recordException(err as Error);\n throw err;\n }).finally(() => {\n if (endOnExit !== undefined && endOnExit) {\n span.end();\n }\n }) as T;\n }\n if (endOnExit !== undefined && endOnExit) {\n span.end();\n }\n return result;\n }\n catch (error) {\n span.recordException(error as Error);\n if (endOnExit !== undefined && endOnExit) {\n span.end();\n }\n throw error;\n }\n },\n ));\n }\n\n public static serializeLaminarSpanContext(span?: Span): string | null {\n const laminarSpanContext = this.getLaminarSpanContext(span);\n if (laminarSpanContext === null) {\n return null;\n }\n return JSON.stringify(laminarSpanContext);\n };\n\n public static getLaminarSpanContext(span?: Span): LaminarSpanContext | null {\n let currentSpan = span ?? Laminar.getCurrentSpan();\n if (currentSpan === undefined || !isSpanContextValid(currentSpan.spanContext())) {\n return null;\n }\n if (!(currentSpan instanceof LaminarSpan)) {\n currentSpan = new LaminarSpan(currentSpan);\n }\n return (currentSpan as LaminarSpan).getLaminarSpanContext();\n }\n\n /**\n * Get the trace id of the current span. Returns null if there is no active span.\n * @returns {StringUUID | null} The trace id of the current span.\n */\n public static getTraceId(): StringUUID | null {\n return this.getLaminarSpanContext()?.traceId ?? null;\n }\n\n public static async flush() {\n if (this.isInitialized) {\n logger.debug(\"Flushing spans\");\n await forceFlush();\n }\n }\n\n public static async shutdown() {\n if (this.isInitialized) {\n logger.debug(\"Shutting down Laminar\");\n await forceFlush();\n // Unlike Python where asynchronous nature of `BatchSpanProcessor.forceFlush()`\n // forces us to actually use `SpanProcessor.shutdown()` and make any\n // further interactions with OTEL API impossible, here we call\n // SpanProcessor.forceFlush() (and safely await it). Thus, users can\n // call `shutdown()` and then `initialize()` again. This is why we\n // reset the keys, contexts, and configuration here.\n this.isInitialized = false;\n _resetConfiguration();\n LaminarContextManager.clearContexts();\n LaminarContextManager.clearActiveSpans();\n\n // Force release the claude-code proxy if it was started (ignores ref count)\n forceReleaseClaudeProxy();\n }\n }\n\n public static getHttpUrl(): string {\n return this.baseHttpUrl;\n }\n\n public static getProjectApiKey(): string {\n return this.projectApiKey;\n }\n\n /**\n * Instrument the claude-agent-sdk query function.\n * Use this when you need to import the query function before calling Laminar.initialize().\n *\n * @param originalQuery - The original query function from @anthropic-ai/claude-agent-sdk\n * @returns The instrumented query function\n *\n * @example\n * ```typescript\n * import { query as originalQuery } from \"@anthropic-ai/claude-agent-sdk\";\n * import { Laminar } from \"@lmnr-ai/lmnr\";\n *\n * Laminar.initialize({ projectApiKey: \"...\" });\n *\n * const query = Laminar.instrumentClaudeAgentQuery(originalQuery);\n *\n * // Now use the instrumented query function\n * const result = query({ prompt: \"Hello!\" });\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n public static wrapClaudeAgentQuery<T extends Function>(originalQuery: T): T {\n return instrumentClaudeAgentQuery(originalQuery as any) as unknown as T;\n }\n}\n","// If you want to update the content, make the following changes to minified source\n// 0. Make sure your editor is not formatting the file on save.\n// 1. Replace every \\ with \\\\ (important: this must come first)\n// 2. Replace every ` with a \\`\n// 3. Replace every ${ with a \\${\nexport const RECORDER = `(function (g, f) {\n if (\"object\" == typeof exports && \"object\" == typeof module) {\n module.exports = f();\n } else if (\"function\" == typeof define && define.amd) {\n define(\"lmnrRrweb\", [], f);\n } else if (\"object\" == typeof exports) {\n exports[\"lmnrRrweb\"] = f();\n } else {\n g[\"lmnrRrweb\"] = f();\n }\n }(this, () => {\nvar exports = {};\nvar module = { exports };\n\"use strict\";var Fo=Object.defineProperty,Uo=Object.defineProperties;var Bo=Object.getOwnPropertyDescriptors;var ft=Object.getOwnPropertySymbols;var zs=Object.prototype.hasOwnProperty,Ws=Object.prototype.propertyIsEnumerable;var Bs=(s,e,t)=>e in s?Fo(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,x=(s,e)=>{for(var t in e||(e={}))zs.call(e,t)&&Bs(s,t,e[t]);if(ft)for(var t of ft(e))Ws.call(e,t)&&Bs(s,t,e[t]);return s},ee=(s,e)=>Uo(s,Bo(e));var xe=(s,e)=>{var t={};for(var r in s)zs.call(s,r)&&e.indexOf(r)<0&&(t[r]=s[r]);if(s!=null&&ft)for(var r of ft(s))e.indexOf(r)<0&&Ws.call(s,r)&&(t[r]=s[r]);return t};Object.defineProperty(exports,Symbol.toStringTag,{value:\"Module\"});var zo=Object.defineProperty,Wo=(s,e,t)=>e in s?zo(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,w=(s,e,t)=>Wo(s,typeof e!=\"symbol\"?e+\"\":e,t),Gs,Go=Object.defineProperty,Vo=(s,e,t)=>e in s?Go(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,Vs=(s,e,t)=>Vo(s,typeof e!=\"symbol\"?e+\"\":e,t),j=(s=>(s[s.Document=0]=\"Document\",s[s.DocumentType=1]=\"DocumentType\",s[s.Element=2]=\"Element\",s[s.Text=3]=\"Text\",s[s.CDATA=4]=\"CDATA\",s[s.Comment=5]=\"Comment\",s))(j||{});const js={Node:[\"childNodes\",\"parentNode\",\"parentElement\",\"textContent\"],ShadowRoot:[\"host\",\"styleSheets\"],Element:[\"shadowRoot\",\"querySelector\",\"querySelectorAll\"],MutationObserver:[]},Hs={Node:[\"contains\",\"getRootNode\"],ShadowRoot:[\"getSelection\"],Element:[],MutationObserver:[\"constructor\"]},pt={},jo=()=>!!globalThis.Zone;function cs(s){if(pt[s])return pt[s];const e=globalThis[s],t=e.prototype,r=s in js?js[s]:void 0,i=!!(r&&r.every(l=>{var a,u;return!!((u=(a=Object.getOwnPropertyDescriptor(t,l))==null?void 0:a.get)!=null&&u.toString().includes(\"[native code]\"))})),n=s in Hs?Hs[s]:void 0,o=!!(n&&n.every(l=>{var a;return typeof t[l]==\"function\"&&((a=t[l])==null?void 0:a.toString().includes(\"[native code]\"))}));if(i&&o&&!jo())return pt[s]=e.prototype,e.prototype;try{const l=document.createElement(\"iframe\");document.body.appendChild(l);const a=l.contentWindow;if(!a)return e.prototype;const u=a[s].prototype;return document.body.removeChild(l),u?pt[s]=u:t}catch(l){return t}}const mr={};function me(s,e,t){var r;const i=\\`\\${s}.\\${String(t)}\\`;if(mr[i])return mr[i].call(e);const n=cs(s),o=(r=Object.getOwnPropertyDescriptor(n,t))==null?void 0:r.get;return o?(mr[i]=o,o.call(e)):e[t]}const gr={};function Wi(s,e,t){const r=\\`\\${s}.\\${String(t)}\\`;if(gr[r])return gr[r].bind(e);const n=cs(s)[t];return typeof n!=\"function\"?e[t]:(gr[r]=n,n.bind(e))}function Ho(s){return me(\"Node\",s,\"childNodes\")}function Yo(s){return me(\"Node\",s,\"parentNode\")}function Zo(s){return me(\"Node\",s,\"parentElement\")}function Jo(s){return me(\"Node\",s,\"textContent\")}function Xo(s,e){return Wi(\"Node\",s,\"contains\")(e)}function Ko(s){return Wi(\"Node\",s,\"getRootNode\")()}function Qo(s){return!s||!(\"host\"in s)?null:me(\"ShadowRoot\",s,\"host\")}function qo(s){return s.styleSheets}function ea(s){return!s||!(\"shadowRoot\"in s)?null:me(\"Element\",s,\"shadowRoot\")}function ta(s,e){return me(\"Element\",s,\"querySelector\")(e)}function ra(s,e){return me(\"Element\",s,\"querySelectorAll\")(e)}function sa(){return cs(\"MutationObserver\").constructor}const Z={childNodes:Ho,parentNode:Yo,parentElement:Zo,textContent:Jo,contains:Xo,getRootNode:Ko,host:Qo,styleSheets:qo,shadowRoot:ea,querySelector:ta,querySelectorAll:ra,mutationObserver:sa};function Gi(s){return s.nodeType===s.ELEMENT_NODE}function je(s){const e=s&&\"host\"in s&&\"mode\"in s&&Z.host(s)||null;return!!(e&&\"shadowRoot\"in e&&Z.shadowRoot(e)===s)}function He(s){return Object.prototype.toString.call(s)===\"[object ShadowRoot]\"}function ia(s){return s.includes(\" background-clip: text;\")&&!s.includes(\" -webkit-background-clip: text;\")&&(s=s.replace(/\\\\sbackground-clip:\\\\s*text;/g,\" -webkit-background-clip: text; background-clip: text;\")),s}function na(s){const{cssText:e}=s;if(e.split('\"').length<3)return e;const t=[\"@import\",\\`url(\\${JSON.stringify(s.href)})\\`];return s.layerName===\"\"?t.push(\"layer\"):s.layerName&&t.push(\\`layer(\\${s.layerName})\\`),s.supportsText&&t.push(\\`supports(\\${s.supportsText})\\`),s.media.length&&t.push(s.media.mediaText),t.join(\" \")+\";\"}function $r(s){try{const e=s.rules||s.cssRules;if(!e)return null;let t=s.href;!t&&s.ownerNode&&s.ownerNode.ownerDocument&&(t=s.ownerNode.ownerDocument.location.href);const r=Array.from(e,i=>Vi(i,t)).join(\"\");return ia(r)}catch(e){return null}}function Vi(s,e){if(aa(s)){let t;try{t=$r(s.styleSheet)||na(s)}catch(r){t=s.cssText}return s.styleSheet.href?Wt(t,s.styleSheet.href):t}else{let t=s.cssText;return la(s)&&s.selectorText.includes(\":\")&&(t=oa(t)),e?Wt(t,e):t}}function oa(s){const e=/(\\\\[(?:[\\\\w-]+)[^\\\\\\\\])(:(?:[\\\\w-]+)\\\\])/gm;return s.replace(e,\"$1\\\\\\\\$2\")}function aa(s){return\"styleSheet\"in s}function la(s){return\"selectorText\"in s}class ji{constructor(){Vs(this,\"idNodeMap\",new Map),Vs(this,\"nodeMetaMap\",new WeakMap)}getId(e){var t;if(!e)return-1;const r=(t=this.getMeta(e))==null?void 0:t.id;return r!=null?r:-1}getNode(e){return this.idNodeMap.get(e)||null}getIds(){return Array.from(this.idNodeMap.keys())}getMeta(e){return this.nodeMetaMap.get(e)||null}removeNodeFromMap(e){const t=this.getId(e);this.idNodeMap.delete(t),e.childNodes&&e.childNodes.forEach(r=>this.removeNodeFromMap(r))}has(e){return this.idNodeMap.has(e)}hasNode(e){return this.nodeMetaMap.has(e)}add(e,t){const r=t.id;this.idNodeMap.set(r,e),this.nodeMetaMap.set(e,t)}replace(e,t){const r=this.getNode(e);if(r){const i=this.nodeMetaMap.get(r);i&&this.nodeMetaMap.set(t,i)}this.idNodeMap.set(e,t)}reset(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap}}function ua(){return new ji}function hs({element:s,maskInputOptions:e,tagName:t,type:r,value:i,maskInputFn:n}){let o=i||\"\";const l=r&&Ce(r);return(e[t.toLowerCase()]||l&&e[l])&&(n?o=n(o,s):o=\"*\".repeat(o.length)),o}function Ce(s){return s.toLowerCase()}const Ys=\"__rrweb_original__\";function ca(s){const e=s.getContext(\"2d\");if(!e)return!0;const t=50;for(let r=0;r<s.width;r+=t)for(let i=0;i<s.height;i+=t){const n=e.getImageData,o=Ys in n?n[Ys]:n;if(new Uint32Array(o.call(e,r,i,Math.min(t,s.width-r),Math.min(t,s.height-i)).data.buffer).some(a=>a!==0))return!1}return!0}function fs(s){const e=s.type;return s.hasAttribute(\"data-rr-is-password\")?\"password\":e?Ce(e):null}function Hi(s,e){var n;let t;try{t=new URL(s,e!=null?e:window.location.href)}catch(o){return null}const r=/\\\\.([0-9a-z]+)(?:$)/i,i=t.pathname.match(r);return(n=i==null?void 0:i[1])!=null?n:null}function ha(s){let e=\"\";return s.indexOf(\"//\")>-1?e=s.split(\"/\").slice(0,3).join(\"/\"):e=s.split(\"/\")[0],e=e.split(\"?\")[0],e}const fa=/url\\\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\\\)/gm,pa=/^(?:[a-z+]+:)?\\\\/\\\\//i,da=/^www\\\\..*/i,ma=/^(data:)([^,]*),(.*)/i;function Wt(s,e){return(s||\"\").replace(fa,(t,r,i,n,o,l)=>{const a=i||o||l,u=r||n||\"\";if(!a)return t;if(pa.test(a)||da.test(a))return\\`url(\\${u}\\${a}\\${u})\\`;if(ma.test(a))return\\`url(\\${u}\\${a}\\${u})\\`;if(a[0]===\"/\")return\\`url(\\${u}\\${ha(e)+a}\\${u})\\`;const c=e.split(\"/\"),h=a.split(\"/\");c.pop();for(const d of h)d!==\".\"&&(d===\"..\"?c.pop():c.push(d));return\\`url(\\${u}\\${c.join(\"/\")}\\${u})\\`})}function yr(s){return s.replace(/(\\\\/\\\\*[^*]*\\\\*\\\\/)|[\\\\s;]/g,\"\")}function ga(s,e){const t=Array.from(e.childNodes),r=[];if(t.length>1&&s&&typeof s==\"string\"){const i=yr(s);for(let n=1;n<t.length;n++)if(t[n].textContent&&typeof t[n].textContent==\"string\"){const o=yr(t[n].textContent);for(let l=3;l<o.length;l++){const a=o.substring(0,l);if(i.split(a).length===2){const u=i.indexOf(a);for(let c=u;c<s.length;c++)if(yr(s.substring(0,c)).length===u){r.push(s.substring(0,c)),s=s.substring(c);break}break}}}}return r.push(s),r}function ya(s,e){return ga(s,e).join(\"/* rr_split */\")}let wa=1;const Sa=new RegExp(\"[^a-z0-9-_:]\"),Ze=-2;function Yi(){return wa++}function ba(s){if(s instanceof HTMLFormElement)return\"form\";const e=Ce(s.tagName);return Sa.test(e)?\"div\":e}let Oe,Zs;const Ca=/^[^ \\\\t\\\\n\\\\r\\\\u000c]+/,va=/^[, \\\\t\\\\n\\\\r\\\\u000c]+/;function Ia(s,e){if(e.trim()===\"\")return e;let t=0;function r(n){let o;const l=n.exec(e.substring(t));return l?(o=l[0],t+=o.length,o):\"\"}const i=[];for(;r(va),!(t>=e.length);){let n=r(Ca);if(n.slice(-1)===\",\")n=Me(s,n.substring(0,n.length-1)),i.push(n);else{let o=\"\";n=Me(s,n);let l=!1;for(;;){const a=e.charAt(t);if(a===\"\"){i.push((n+o).trim());break}else if(l)a===\")\"&&(l=!1);else if(a===\",\"){t+=1,i.push((n+o).trim());break}else a===\"(\"&&(l=!0);o+=a,t+=1}}}return i.join(\", \")}const Js=new WeakMap;function Me(s,e){return!e||e.trim()===\"\"?e:ps(s,e)}function xa(s){return!!(s.tagName===\"svg\"||s.ownerSVGElement)}function ps(s,e){let t=Js.get(s);if(t||(t=s.createElement(\"a\"),Js.set(s,t)),!e)e=\"\";else if(e.startsWith(\"blob:\")||e.startsWith(\"data:\"))return e;return t.setAttribute(\"href\",e),t.href}function Zi(s,e,t,r){return r&&(t===\"src\"||t===\"href\"&&!(e===\"use\"&&r[0]===\"#\")||t===\"xlink:href\"&&r[0]!==\"#\"||t===\"background\"&&(e===\"table\"||e===\"td\"||e===\"th\")?Me(s,r):t===\"srcset\"?Ia(s,r):t===\"style\"?Wt(r,ps(s)):e===\"object\"&&t===\"data\"?Me(s,r):r)}function Ji(s,e,t){return(s===\"video\"||s===\"audio\")&&e===\"autoplay\"}function Oa(s,e,t){try{if(typeof e==\"string\"){if(s.classList.contains(e))return!0}else for(let r=s.classList.length;r--;){const i=s.classList[r];if(e.test(i))return!0}if(t)return s.matches(t)}catch(r){}return!1}function Gt(s,e,t){if(!s)return!1;if(s.nodeType!==s.ELEMENT_NODE)return t?Gt(Z.parentNode(s),e,t):!1;for(let r=s.classList.length;r--;){const i=s.classList[r];if(e.test(i))return!0}return t?Gt(Z.parentNode(s),e,t):!1}function Xi(s,e,t,r){let i;if(Gi(s)){if(i=s,!Z.childNodes(i).length)return!1}else{if(Z.parentElement(s)===null)return!1;i=Z.parentElement(s)}try{if(typeof e==\"string\"){if(r){if(i.closest(\\`.\\${e}\\`))return!0}else if(i.classList.contains(e))return!0}else if(Gt(i,e,r))return!0;if(t){if(r){if(i.closest(t))return!0}else if(i.matches(t))return!0}}catch(n){}return!1}function Ra(s,e,t){const r=s.contentWindow;if(!r)return;let i=!1,n;try{n=r.document.readyState}catch(l){return}if(n!==\"complete\"){const l=setTimeout(()=>{i||(e(),i=!0)},t);s.addEventListener(\"load\",()=>{clearTimeout(l),i=!0,e()});return}const o=\"about:blank\";if(r.location.href!==o||s.src===o||s.src===\"\")return setTimeout(e,0),s.addEventListener(\"load\",e);s.addEventListener(\"load\",e)}function Aa(s,e,t){let r=!1,i;try{i=s.sheet}catch(o){return}if(i)return;const n=setTimeout(()=>{r||(e(),r=!0)},t);s.addEventListener(\"load\",()=>{clearTimeout(n),r=!0,e()})}function Ma(s,e){const{doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:o,inlineStylesheet:l,maskInputOptions:a={},maskTextFn:u,maskInputFn:c,dataURLOptions:h={},inlineImages:d,recordCanvas:m,keepIframeSrcFn:g,newlyAddedElement:p=!1,cssCaptured:f=!1}=e,S=Ea(t,r);switch(s.nodeType){case s.DOCUMENT_NODE:return s.compatMode!==\"CSS1Compat\"?{type:j.Document,childNodes:[],compatMode:s.compatMode}:{type:j.Document,childNodes:[]};case s.DOCUMENT_TYPE_NODE:return{type:j.DocumentType,name:s.name,publicId:s.publicId,systemId:s.systemId,rootId:S};case s.ELEMENT_NODE:return Na(s,{doc:t,blockClass:i,blockSelector:n,inlineStylesheet:l,maskInputOptions:a,maskInputFn:c,dataURLOptions:h,inlineImages:d,recordCanvas:m,keepIframeSrcFn:g,newlyAddedElement:p,rootId:S});case s.TEXT_NODE:return $a(s,{doc:t,needsMask:o,maskTextFn:u,rootId:S,cssCaptured:f});case s.CDATA_SECTION_NODE:return{type:j.CDATA,textContent:\"\",rootId:S};case s.COMMENT_NODE:return{type:j.Comment,textContent:Z.textContent(s)||\"\",rootId:S};default:return!1}}function Ea(s,e){if(!e.hasNode(s))return;const t=e.getId(s);return t===1?void 0:t}function $a(s,e){const{needsMask:t,maskTextFn:r,rootId:i,cssCaptured:n}=e,o=Z.parentNode(s),l=o&&o.tagName;let a=\"\";const u=l===\"STYLE\"?!0:void 0,c=l===\"SCRIPT\"?!0:void 0;return c?a=\"SCRIPT_PLACEHOLDER\":n||(a=Z.textContent(s),u&&a&&(a=Wt(a,ps(e.doc)))),!u&&!c&&a&&t&&(a=r?r(a,Z.parentElement(s)):a.replace(/[\\\\S]/g,\"*\")),{type:j.Text,textContent:a||\"\",rootId:i}}function Na(s,e){const{doc:t,blockClass:r,blockSelector:i,inlineStylesheet:n,maskInputOptions:o={},maskInputFn:l,dataURLOptions:a={},inlineImages:u,recordCanvas:c,keepIframeSrcFn:h,newlyAddedElement:d=!1,rootId:m}=e,g=Oa(s,r,i),p=ba(s);let f={};const S=s.attributes.length;for(let y=0;y<S;y++){const C=s.attributes[y];Ji(p,C.name,C.value)||(f[C.name]=Zi(t,p,Ce(C.name),C.value))}if(p===\"link\"&&n){const y=Array.from(t.styleSheets).find(N=>N.href===s.href);let C=null;y&&(C=$r(y)),C&&(delete f.rel,delete f.href,f._cssText=C)}if(p===\"style\"&&s.sheet){let y=$r(s.sheet);y&&(s.childNodes.length>1&&(y=ya(y,s)),f._cssText=y)}if(p===\"input\"||p===\"textarea\"||p===\"select\"){const y=s.value,C=s.checked;f.type!==\"radio\"&&f.type!==\"checkbox\"&&f.type!==\"submit\"&&f.type!==\"button\"&&y?f.value=hs({element:s,type:fs(s),tagName:p,value:y,maskInputOptions:o,maskInputFn:l}):C&&(f.checked=C)}if(p===\"option\"&&(s.selected&&!o.select?f.selected=!0:delete f.selected),p===\"dialog\"&&s.open&&(f.rr_open_mode=s.matches(\"dialog:modal\")?\"modal\":\"non-modal\"),p===\"canvas\"&&c){if(s.__context===\"2d\")ca(s)||(f.rr_dataURL=s.toDataURL(a.type,a.quality));else if(!(\"__context\"in s)){const y=s.toDataURL(a.type,a.quality),C=t.createElement(\"canvas\");C.width=s.width,C.height=s.height;const N=C.toDataURL(a.type,a.quality);y!==N&&(f.rr_dataURL=y)}}if(p===\"img\"&&u){Oe||(Oe=t.createElement(\"canvas\"),Zs=Oe.getContext(\"2d\"));const y=s,C=y.currentSrc||y.getAttribute(\"src\")||\"<unknown-src>\",N=y.crossOrigin,D=()=>{y.removeEventListener(\"load\",D);try{Oe.width=y.naturalWidth,Oe.height=y.naturalHeight,Zs.drawImage(y,0,0),f.rr_dataURL=Oe.toDataURL(a.type,a.quality)}catch(H){if(y.crossOrigin!==\"anonymous\"){y.crossOrigin=\"anonymous\",y.complete&&y.naturalWidth!==0?D():y.addEventListener(\"load\",D);return}else console.warn(\\`Cannot inline img src=\\${C}! Error: \\${H}\\`)}y.crossOrigin===\"anonymous\"&&(N?f.crossOrigin=N:y.removeAttribute(\"crossorigin\"))};y.complete&&y.naturalWidth!==0?D():y.addEventListener(\"load\",D)}if(p===\"audio\"||p===\"video\"){const y=f;y.rr_mediaState=s.paused?\"paused\":\"played\",y.rr_mediaCurrentTime=s.currentTime,y.rr_mediaPlaybackRate=s.playbackRate,y.rr_mediaMuted=s.muted,y.rr_mediaLoop=s.loop,y.rr_mediaVolume=s.volume}if(d||(s.scrollLeft&&(f.rr_scrollLeft=s.scrollLeft),s.scrollTop&&(f.rr_scrollTop=s.scrollTop)),g){const{width:y,height:C}=s.getBoundingClientRect();f={class:f.class,rr_width:\\`\\${y}px\\`,rr_height:\\`\\${C}px\\`}}p===\"iframe\"&&!h(f.src)&&(s.contentDocument||(f.rr_src=f.src),delete f.src);let b;try{customElements.get(p)&&(b=!0)}catch(y){}return{type:j.Element,tagName:p,attributes:f,childNodes:[],isSVG:xa(s)||void 0,needBlock:g,rootId:m,isCustom:b}}function P(s){return s==null?\"\":s.toLowerCase()}function ka(s,e){if(e.comment&&s.type===j.Comment)return!0;if(s.type===j.Element){if(e.script&&(s.tagName===\"script\"||s.tagName===\"link\"&&(s.attributes.rel===\"preload\"||s.attributes.rel===\"modulepreload\")&&s.attributes.as===\"script\"||s.tagName===\"link\"&&s.attributes.rel===\"prefetch\"&&typeof s.attributes.href==\"string\"&&Hi(s.attributes.href)===\"js\"))return!0;if(e.headFavicon&&(s.tagName===\"link\"&&s.attributes.rel===\"shortcut icon\"||s.tagName===\"meta\"&&(P(s.attributes.name).match(/^msapplication-tile(image|color)$/)||P(s.attributes.name)===\"application-name\"||P(s.attributes.rel)===\"icon\"||P(s.attributes.rel)===\"apple-touch-icon\"||P(s.attributes.rel)===\"shortcut icon\")))return!0;if(s.tagName===\"meta\"){if(e.headMetaDescKeywords&&P(s.attributes.name).match(/^description|keywords$/))return!0;if(e.headMetaSocial&&(P(s.attributes.property).match(/^(og|twitter|fb):/)||P(s.attributes.name).match(/^(og|twitter):/)||P(s.attributes.name)===\"pinterest\"))return!0;if(e.headMetaRobots&&(P(s.attributes.name)===\"robots\"||P(s.attributes.name)===\"googlebot\"||P(s.attributes.name)===\"bingbot\"))return!0;if(e.headMetaHttpEquiv&&s.attributes[\"http-equiv\"]!==void 0)return!0;if(e.headMetaAuthorship&&(P(s.attributes.name)===\"author\"||P(s.attributes.name)===\"generator\"||P(s.attributes.name)===\"framework\"||P(s.attributes.name)===\"publisher\"||P(s.attributes.name)===\"progid\"||P(s.attributes.property).match(/^article:/)||P(s.attributes.property).match(/^product:/)))return!0;if(e.headMetaVerification&&(P(s.attributes.name)===\"google-site-verification\"||P(s.attributes.name)===\"yandex-verification\"||P(s.attributes.name)===\"csrf-token\"||P(s.attributes.name)===\"p:domain_verify\"||P(s.attributes.name)===\"verify-v1\"||P(s.attributes.name)===\"verification\"||P(s.attributes.name)===\"shopify-checkout-api-token\"))return!0}}return!1}function Ee(s,e){const{doc:t,mirror:r,blockClass:i,blockSelector:n,maskTextClass:o,maskTextSelector:l,skipChild:a=!1,inlineStylesheet:u=!0,maskInputOptions:c={},maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g={},inlineImages:p=!1,recordCanvas:f=!1,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y=5e3,onStylesheetLoad:C,stylesheetLoadTimeout:N=5e3,keepIframeSrcFn:D=()=>!1,newlyAddedElement:H=!1,cssCaptured:_=!1}=e;let{needsMask:G}=e,{preserveWhiteSpace:Y=!0}=e;G||(G=Xi(s,o,l,G===void 0));const Q=Ma(s,{doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:G,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,dataURLOptions:g,inlineImages:p,recordCanvas:f,keepIframeSrcFn:D,newlyAddedElement:H,cssCaptured:_});if(!Q)return console.warn(s,\"not serialized\"),null;let oe;r.hasNode(s)?oe=r.getId(s):ka(Q,m)||!Y&&Q.type===j.Text&&!Q.textContent.replace(/^\\\\s+|\\\\s+$/gm,\"\").length?oe=Ze:oe=Yi();const A=Object.assign(Q,{id:oe});if(r.add(s,A),oe===Ze)return null;S&&S(s);let Ue=!a;if(A.type===j.Element){Ue=Ue&&!A.needBlock,delete A.needBlock;const V=Z.shadowRoot(s);V&&He(V)&&(A.isShadowHost=!0)}if((A.type===j.Document||A.type===j.Element)&&Ue){m.headWhitespace&&A.type===j.Element&&A.tagName===\"head\"&&(Y=!1);const V={doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:G,maskTextClass:o,maskTextSelector:l,skipChild:a,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g,inlineImages:p,recordCanvas:f,preserveWhiteSpace:Y,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y,onStylesheetLoad:C,stylesheetLoadTimeout:N,keepIframeSrcFn:D,cssCaptured:!1};if(!(A.type===j.Element&&A.tagName===\"textarea\"&&A.attributes.value!==void 0)){A.type===j.Element&&A.attributes._cssText!==void 0&&typeof A.attributes._cssText==\"string\"&&(V.cssCaptured=!0);for(const ye of Array.from(Z.childNodes(s))){const ae=Ee(ye,V);ae&&A.childNodes.push(ae)}}let q=null;if(Gi(s)&&(q=Z.shadowRoot(s)))for(const ye of Array.from(Z.childNodes(q))){const ae=Ee(ye,V);ae&&(He(q)&&(ae.isShadow=!0),A.childNodes.push(ae))}}const Be=Z.parentNode(s);return Be&&je(Be)&&He(Be)&&(A.isShadow=!0),A.type===j.Element&&A.tagName===\"iframe\"&&Ra(s,()=>{const V=s.contentDocument;if(V&&b){const q=Ee(V,{doc:V,mirror:r,blockClass:i,blockSelector:n,needsMask:G,maskTextClass:o,maskTextSelector:l,skipChild:!1,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g,inlineImages:p,recordCanvas:f,preserveWhiteSpace:Y,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y,onStylesheetLoad:C,stylesheetLoadTimeout:N,keepIframeSrcFn:D});q&&b(s,q)}},y),A.type===j.Element&&A.tagName===\"link\"&&typeof A.attributes.rel==\"string\"&&(A.attributes.rel===\"stylesheet\"||A.attributes.rel===\"preload\"&&typeof A.attributes.href==\"string\"&&Hi(A.attributes.href)===\"css\")&&Aa(s,()=>{if(C){const V=Ee(s,{doc:t,mirror:r,blockClass:i,blockSelector:n,needsMask:G,maskTextClass:o,maskTextSelector:l,skipChild:!1,inlineStylesheet:u,maskInputOptions:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m,dataURLOptions:g,inlineImages:p,recordCanvas:f,preserveWhiteSpace:Y,onSerialize:S,onIframeLoad:b,iframeLoadTimeout:y,onStylesheetLoad:C,stylesheetLoadTimeout:N,keepIframeSrcFn:D});V&&C(s,V)}},N),A}function Pa(s,e){const{mirror:t=new ji,blockClass:r=\"rr-block\",blockSelector:i=null,maskTextClass:n=\"rr-mask\",maskTextSelector:o=null,inlineStylesheet:l=!0,inlineImages:a=!1,recordCanvas:u=!1,maskAllInputs:c=!1,maskTextFn:h,maskInputFn:d,slimDOM:m=!1,dataURLOptions:g,preserveWhiteSpace:p,onSerialize:f,onIframeLoad:S,iframeLoadTimeout:b,onStylesheetLoad:y,stylesheetLoadTimeout:C,keepIframeSrcFn:N=()=>!1}=e||{};return Ee(s,{doc:s,mirror:t,blockClass:r,blockSelector:i,maskTextClass:n,maskTextSelector:o,skipChild:!1,inlineStylesheet:l,maskInputOptions:c===!0?{color:!0,date:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0}:c===!1?{password:!0}:c,maskTextFn:h,maskInputFn:d,slimDOMOptions:m===!0||m===\"all\"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:m===\"all\",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:m===!1?{}:m,dataURLOptions:g,inlineImages:a,recordCanvas:u,preserveWhiteSpace:p,onSerialize:f,onIframeLoad:S,iframeLoadTimeout:b,onStylesheetLoad:y,stylesheetLoadTimeout:C,keepIframeSrcFn:N,newlyAddedElement:!1})}function Da(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,\"default\")?s.default:s}function La(s){if(s.__esModule)return s;var e=s.default;if(typeof e==\"function\"){var t=function r(){return this instanceof r?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,\"__esModule\",{value:!0}),Object.keys(s).forEach(function(r){var i=Object.getOwnPropertyDescriptor(s,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return s[r]}})}),t}var ds={exports:{}},L=String,Ki=function(){return{isColorSupported:!1,reset:L,bold:L,dim:L,italic:L,underline:L,inverse:L,hidden:L,strikethrough:L,black:L,red:L,green:L,yellow:L,blue:L,magenta:L,cyan:L,white:L,gray:L,bgBlack:L,bgRed:L,bgGreen:L,bgYellow:L,bgBlue:L,bgMagenta:L,bgCyan:L,bgWhite:L}};ds.exports=Ki();ds.exports.createColors=Ki;var Ta=ds.exports;const _a={},Fa=Object.freeze(Object.defineProperty({__proto__:null,default:_a},Symbol.toStringTag,{value:\"Module\"})),ie=La(Fa);let Xs=Ta,Ks=ie,Nr=class Qi extends Error{constructor(e,t,r,i,n,o){super(e),this.name=\"CssSyntaxError\",this.reason=e,n&&(this.file=n),i&&(this.source=i),o&&(this.plugin=o),typeof t!=\"undefined\"&&typeof r!=\"undefined\"&&(typeof t==\"number\"?(this.line=t,this.column=r):(this.line=t.line,this.column=t.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,Qi)}setMessage(){this.message=this.plugin?this.plugin+\": \":\"\",this.message+=this.file?this.file:\"<css input>\",typeof this.line!=\"undefined\"&&(this.message+=\":\"+this.line+\":\"+this.column),this.message+=\": \"+this.reason}showSourceCode(e){if(!this.source)return\"\";let t=this.source;e==null&&(e=Xs.isColorSupported),Ks&&e&&(t=Ks(t));let r=t.split(/\\\\r?\\\\n/),i=Math.max(this.line-3,0),n=Math.min(this.line+2,r.length),o=String(n).length,l,a;if(e){let{bold:u,gray:c,red:h}=Xs.createColors(!0);l=d=>u(h(d)),a=d=>c(d)}else l=a=u=>u;return r.slice(i,n).map((u,c)=>{let h=i+1+c,d=\" \"+(\" \"+h).slice(-o)+\" | \";if(h===this.line){let m=a(d.replace(/\\\\d/g,\" \"))+u.slice(0,this.column-1).replace(/[^\\\\t]/g,\" \");return l(\">\")+a(d)+u+\\`\n \\`+m+l(\"^\")}return\" \"+a(d)+u}).join(\\`\n\\`)}toString(){let e=this.showSourceCode();return e&&(e=\\`\n\n\\`+e+\\`\n\\`),this.name+\": \"+this.message+e}};var ms=Nr;Nr.default=Nr;var it={};it.isClean=Symbol(\"isClean\");it.my=Symbol(\"my\");const Qs={after:\\`\n\\`,beforeClose:\\`\n\\`,beforeComment:\\`\n\\`,beforeDecl:\\`\n\\`,beforeOpen:\" \",beforeRule:\\`\n\\`,colon:\": \",commentLeft:\" \",commentRight:\" \",emptyBody:\"\",indent:\" \",semicolon:!1};function Ua(s){return s[0].toUpperCase()+s.slice(1)}let kr=class{constructor(e){this.builder=e}atrule(e,t){let r=\"@\"+e.name,i=e.params?this.rawValue(e,\"params\"):\"\";if(typeof e.raws.afterName!=\"undefined\"?r+=e.raws.afterName:i&&(r+=\" \"),e.nodes)this.block(e,r+i);else{let n=(e.raws.between||\"\")+(t?\";\":\"\");this.builder(r+i+n,e)}}beforeAfter(e,t){let r;e.type===\"decl\"?r=this.raw(e,null,\"beforeDecl\"):e.type===\"comment\"?r=this.raw(e,null,\"beforeComment\"):t===\"before\"?r=this.raw(e,null,\"beforeRule\"):r=this.raw(e,null,\"beforeClose\");let i=e.parent,n=0;for(;i&&i.type!==\"root\";)n+=1,i=i.parent;if(r.includes(\\`\n\\`)){let o=this.raw(e,null,\"indent\");if(o.length)for(let l=0;l<n;l++)r+=o}return r}block(e,t){let r=this.raw(e,\"between\",\"beforeOpen\");this.builder(t+r+\"{\",e,\"start\");let i;e.nodes&&e.nodes.length?(this.body(e),i=this.raw(e,\"after\")):i=this.raw(e,\"after\",\"emptyBody\"),i&&this.builder(i),this.builder(\"}\",e,\"end\")}body(e){let t=e.nodes.length-1;for(;t>0&&e.nodes[t].type===\"comment\";)t-=1;let r=this.raw(e,\"semicolon\");for(let i=0;i<e.nodes.length;i++){let n=e.nodes[i],o=this.raw(n,\"before\");o&&this.builder(o),this.stringify(n,t!==i||r)}}comment(e){let t=this.raw(e,\"left\",\"commentLeft\"),r=this.raw(e,\"right\",\"commentRight\");this.builder(\"/*\"+t+e.text+r+\"*/\",e)}decl(e,t){let r=this.raw(e,\"between\",\"colon\"),i=e.prop+r+this.rawValue(e,\"value\");e.important&&(i+=e.raws.important||\" !important\"),t&&(i+=\";\"),this.builder(i,e)}document(e){this.body(e)}raw(e,t,r){let i;if(r||(r=t),t&&(i=e.raws[t],typeof i!=\"undefined\"))return i;let n=e.parent;if(r===\"before\"&&(!n||n.type===\"root\"&&n.first===e||n&&n.type===\"document\"))return\"\";if(!n)return Qs[r];let o=e.root();if(o.rawCache||(o.rawCache={}),typeof o.rawCache[r]!=\"undefined\")return o.rawCache[r];if(r===\"before\"||r===\"after\")return this.beforeAfter(e,r);{let l=\"raw\"+Ua(r);this[l]?i=this[l](o,e):o.walk(a=>{if(i=a.raws[t],typeof i!=\"undefined\")return!1})}return typeof i==\"undefined\"&&(i=Qs[r]),o.rawCache[r]=i,i}rawBeforeClose(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length>0&&typeof r.raws.after!=\"undefined\")return t=r.raws.after,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawBeforeComment(e,t){let r;return e.walkComments(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeDecl\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeDecl(e,t){let r;return e.walkDecls(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeRule\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeOpen(e){let t;return e.walk(r=>{if(r.type!==\"decl\"&&(t=r.raws.between,typeof t!=\"undefined\"))return!1}),t}rawBeforeRule(e){let t;return e.walk(r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&typeof r.raws.before!=\"undefined\")return t=r.raws.before,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawColon(e){let t;return e.walkDecls(r=>{if(typeof r.raws.between!=\"undefined\")return t=r.raws.between.replace(/[^\\\\s:]/g,\"\"),!1}),t}rawEmptyBody(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length===0&&(t=r.raws.after,typeof t!=\"undefined\"))return!1}),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk(r=>{let i=r.parent;if(i&&i!==e&&i.parent&&i.parent===e&&typeof r.raws.before!=\"undefined\"){let n=r.raws.before.split(\\`\n\\`);return t=n[n.length-1],t=t.replace(/\\\\S/g,\"\"),!1}}),t}rawSemicolon(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length&&r.last.type===\"decl\"&&(t=r.raws.semicolon,typeof t!=\"undefined\"))return!1}),t}rawValue(e,t){let r=e[t],i=e.raws[t];return i&&i.value===r?i.raw:r}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}rule(e){this.block(e,this.rawValue(e,\"selector\")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,\"end\")}stringify(e,t){if(!this[e.type])throw new Error(\"Unknown AST node type \"+e.type+\". Maybe you need to change PostCSS stringifier.\");this[e.type](e,t)}};var qi=kr;kr.default=kr;let Ba=qi;function Pr(s,e){new Ba(e).stringify(s)}var tr=Pr;Pr.default=Pr;let{isClean:dt,my:za}=it,Wa=ms,Ga=qi,Va=tr;function Dr(s,e){let t=new s.constructor;for(let r in s){if(!Object.prototype.hasOwnProperty.call(s,r)||r===\"proxyCache\")continue;let i=s[r],n=typeof i;r===\"parent\"&&n===\"object\"?e&&(t[r]=e):r===\"source\"?t[r]=i:Array.isArray(i)?t[r]=i.map(o=>Dr(o,t)):(n===\"object\"&&i!==null&&(i=Dr(i)),t[r]=i)}return t}let Lr=class{constructor(e={}){this.raws={},this[dt]=!1,this[za]=!0;for(let t in e)if(t===\"nodes\"){this.nodes=[];for(let r of e[t])typeof r.clone==\"function\"?this.append(r.clone()):this.append(r)}else this[t]=e[t]}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\\\\n\\\\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\\\\n\\\\s{4}at /,\\`$&\\${t.input.from}:\\${t.start.line}:\\${t.start.column}$&\\`)}return e}after(e){return this.parent.insertAfter(this,e),this}assign(e={}){for(let t in e)this[t]=e[t];return this}before(e){return this.parent.insertBefore(this,e),this}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}clone(e={}){let t=Dr(this);for(let r in e)t[r]=e[r];return t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}error(e,t={}){if(this.source){let{end:r,start:i}=this.rangeBy(t);return this.source.input.error(e,{column:i.column,line:i.line},{column:r.column,line:r.line},t)}return new Wa(e)}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:t===\"root\"?()=>e.root().toProxy():e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"prop\"||t===\"value\"||t===\"name\"||t===\"params\"||t===\"important\"||t===\"text\")&&e.markDirty()),!0}}}markDirty(){if(this[dt]){this[dt]=!1;let e=this;for(;e=e.parent;)e[dt]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e,t){let r=this.source.start;if(e.index)r=this.positionInside(e.index,t);else if(e.word){t=this.toString();let i=t.indexOf(e.word);i!==-1&&(r=this.positionInside(i,t))}return r}positionInside(e,t){let r=t||this.toString(),i=this.source.start.column,n=this.source.start.line;for(let o=0;o<e;o++)r[o]===\\`\n\\`?(i=1,n+=1):i+=1;return{column:i,line:n}}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}rangeBy(e){let t={column:this.source.start.column,line:this.source.start.line},r=this.source.end?{column:this.source.end.column+1,line:this.source.end.line}:{column:t.column+1,line:t.line};if(e.word){let i=this.toString(),n=i.indexOf(e.word);n!==-1&&(t=this.positionInside(n,i),r=this.positionInside(n+e.word.length,i))}else e.start?t={column:e.start.column,line:e.start.line}:e.index&&(t=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line}:typeof e.endIndex==\"number\"?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<t.line||r.line===t.line&&r.column<=t.column)&&(r={column:t.column+1,line:t.line}),{end:r,start:t}}raw(e,t){return new Ga().raw(this,e,t)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...e){if(this.parent){let t=this,r=!1;for(let i of e)i===this?r=!0:r?(this.parent.insertAfter(t,i),t=i):this.parent.insertBefore(t,i);r||this.remove()}return this}root(){let e=this;for(;e.parent&&e.parent.type!==\"document\";)e=e.parent;return e}toJSON(e,t){let r={},i=t==null;t=t||new Map;let n=0;for(let o in this){if(!Object.prototype.hasOwnProperty.call(this,o)||o===\"parent\"||o===\"proxyCache\")continue;let l=this[o];if(Array.isArray(l))r[o]=l.map(a=>typeof a==\"object\"&&a.toJSON?a.toJSON(null,t):a);else if(typeof l==\"object\"&&l.toJSON)r[o]=l.toJSON(null,t);else if(o===\"source\"){let a=t.get(l.input);a==null&&(a=n,t.set(l.input,n),n++),r[o]={end:l.end,inputId:a,start:l.start}}else r[o]=l}return i&&(r.inputs=[...t.keys()].map(o=>o.toJSON())),r}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=Va){e.stringify&&(e=e.stringify);let t=\"\";return e(this,r=>{t+=r}),t}warn(e,t,r){let i={node:this};for(let n in r)i[n]=r[n];return e.warn(t,i)}get proxyOf(){return this}};var rr=Lr;Lr.default=Lr;let ja=rr,Tr=class extends ja{constructor(e){e&&typeof e.value!=\"undefined\"&&typeof e.value!=\"string\"&&(e=ee(x({},e),{value:String(e.value)})),super(e),this.type=\"decl\"}get variable(){return this.prop.startsWith(\"--\")||this.prop[0]===\"$\"}};var sr=Tr;Tr.default=Tr;let Ha=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\",Ya=(s,e=21)=>(t=e)=>{let r=\"\",i=t;for(;i--;)r+=s[Math.random()*s.length|0];return r},Za=(s=21)=>{let e=\"\",t=s;for(;t--;)e+=Ha[Math.random()*64|0];return e};var Ja={nanoid:Za,customAlphabet:Ya};let{SourceMapConsumer:qs,SourceMapGenerator:ei}=ie,{existsSync:Xa,readFileSync:Ka}=ie,{dirname:wr,join:Qa}=ie;function qa(s){return Buffer?Buffer.from(s,\"base64\").toString():window.atob(s)}let _r=class{constructor(e,t){if(t.map===!1)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,\"data:\");let r=t.map?t.map.prev:void 0,i=this.loadMap(t.from,r);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=wr(this.mapFile)),i&&(this.text=i)}consumer(){return this.consumerCache||(this.consumerCache=new qs(this.text)),this.consumerCache}decodeInline(e){let t=/^data:application\\\\/json;charset=utf-?8;base64,/,r=/^data:application\\\\/json;base64,/,i=/^data:application\\\\/json;charset=utf-?8,/,n=/^data:application\\\\/json,/;if(i.test(e)||n.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(t.test(e)||r.test(e))return qa(e.substr(RegExp.lastMatch.length));let o=e.match(/data:application\\\\/json;([^,]+),/)[1];throw new Error(\"Unsupported source map encoding \"+o)}getAnnotationURL(e){return e.replace(/^\\\\/\\\\*\\\\s*# sourceMappingURL=/,\"\").trim()}isMap(e){return typeof e!=\"object\"?!1:typeof e.mappings==\"string\"||typeof e._mappings==\"string\"||Array.isArray(e.sections)}loadAnnotation(e){let t=e.match(/\\\\/\\\\*\\\\s*# sourceMappingURL=/gm);if(!t)return;let r=e.lastIndexOf(t.pop()),i=e.indexOf(\"*/\",r);r>-1&&i>-1&&(this.annotation=this.getAnnotationURL(e.substring(r,i)))}loadFile(e){if(this.root=wr(e),Xa(e))return this.mapFile=e,Ka(e,\"utf-8\").toString().trim()}loadMap(e,t){if(t===!1)return!1;if(t){if(typeof t==\"string\")return t;if(typeof t==\"function\"){let r=t(e);if(r){let i=this.loadFile(r);if(!i)throw new Error(\"Unable to load previous source map: \"+r.toString());return i}}else{if(t instanceof qs)return ei.fromSourceMap(t).toString();if(t instanceof ei)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error(\"Unsupported previous source map format: \"+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let r=this.annotation;return e&&(r=Qa(wr(e),r)),this.loadFile(r)}}}startWith(e,t){return e?e.substr(0,t.length)===t:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}};var en=_r;_r.default=_r;let{SourceMapConsumer:el,SourceMapGenerator:tl}=ie,{fileURLToPath:ti,pathToFileURL:mt}=ie,{isAbsolute:Fr,resolve:Ur}=ie,{nanoid:rl}=Ja,Sr=ie,ri=ms,sl=en,br=Symbol(\"fromOffsetCache\"),il=!!(el&&tl),si=!!(Ur&&Fr),Vt=class{constructor(e,t={}){if(e===null||typeof e==\"undefined\"||typeof e==\"object\"&&!e.toString)throw new Error(\\`PostCSS received \\${e} instead of CSS string\\`);if(this.css=e.toString(),this.css[0]===\"\\\\uFEFF\"||this.css[0]===\"\\\\uFFFE\"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!si||/^\\\\w+:\\\\/\\\\//.test(t.from)||Fr(t.from)?this.file=t.from:this.file=Ur(t.from)),si&&il){let r=new sl(this.css,t);if(r.text){this.map=r;let i=r.consumer().file;!this.file&&i&&(this.file=this.mapResolve(i))}}this.file||(this.id=\"<input css \"+rl(6)+\">\"),this.map&&(this.map.file=this.from)}error(e,t,r,i={}){let n,o,l;if(t&&typeof t==\"object\"){let u=t,c=r;if(typeof u.offset==\"number\"){let h=this.fromOffset(u.offset);t=h.line,r=h.col}else t=u.line,r=u.column;if(typeof c.offset==\"number\"){let h=this.fromOffset(c.offset);o=h.line,l=h.col}else o=c.line,l=c.column}else if(!r){let u=this.fromOffset(t);t=u.line,r=u.col}let a=this.origin(t,r,o,l);return a?n=new ri(e,a.endLine===void 0?a.line:{column:a.column,line:a.line},a.endLine===void 0?a.column:{column:a.endColumn,line:a.endLine},a.source,a.file,i.plugin):n=new ri(e,o===void 0?t:{column:r,line:t},o===void 0?r:{column:l,line:o},this.css,this.file,i.plugin),n.input={column:r,endColumn:l,endLine:o,line:t,source:this.css},this.file&&(mt&&(n.input.url=mt(this.file).toString()),n.input.file=this.file),n}fromOffset(e){let t,r;if(this[br])r=this[br];else{let n=this.css.split(\\`\n\\`);r=new Array(n.length);let o=0;for(let l=0,a=n.length;l<a;l++)r[l]=o,o+=n[l].length+1;this[br]=r}t=r[r.length-1];let i=0;if(e>=t)i=r.length-1;else{let n=r.length-2,o;for(;i<n;)if(o=i+(n-i>>1),e<r[o])n=o-1;else if(e>=r[o+1])i=o+1;else{i=o;break}}return{col:e-r[i]+1,line:i+1}}mapResolve(e){return/^\\\\w+:\\\\/\\\\//.test(e)?e:Ur(this.map.consumer().sourceRoot||this.map.root||\".\",e)}origin(e,t,r,i){if(!this.map)return!1;let n=this.map.consumer(),o=n.originalPositionFor({column:t,line:e});if(!o.source)return!1;let l;typeof r==\"number\"&&(l=n.originalPositionFor({column:i,line:r}));let a;Fr(o.source)?a=mt(o.source):a=new URL(o.source,this.map.consumer().sourceRoot||mt(this.map.mapFile));let u={column:o.column,endColumn:l&&l.column,endLine:l&&l.line,line:o.line,url:a.toString()};if(a.protocol===\"file:\")if(ti)u.file=ti(a);else throw new Error(\"file: protocol is not available in this PostCSS build\");let c=n.sourceContentFor(o.source);return c&&(u.source=c),u}toJSON(){let e={};for(let t of[\"hasBOM\",\"css\",\"file\",\"id\"])this[t]!=null&&(e[t]=this[t]);return this.map&&(e.map=x({},this.map),e.map.consumerCache&&(e.map.consumerCache=void 0)),e}get from(){return this.file||this.id}};var ir=Vt;Vt.default=Vt;Sr&&Sr.registerInput&&Sr.registerInput(Vt);let{SourceMapConsumer:tn,SourceMapGenerator:Tt}=ie,{dirname:_t,relative:rn,resolve:sn,sep:nn}=ie,{pathToFileURL:ii}=ie,nl=ir,ol=!!(tn&&Tt),al=!!(_t&&sn&&rn&&nn),ll=class{constructor(e,t,r,i){this.stringify=e,this.mapOpts=r.map||{},this.root=t,this.opts=r,this.css=i,this.originalCSS=i,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;this.isInline()?e=\"data:application/json;base64,\"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation==\"string\"?e=this.mapOpts.annotation:typeof this.mapOpts.annotation==\"function\"?e=this.mapOpts.annotation(this.opts.to,this.root):e=this.outputFile()+\".map\";let t=\\`\n\\`;this.css.includes(\\`\\\\r\n\\`)&&(t=\\`\\\\r\n\\`),this.css+=t+\"/*# sourceMappingURL=\"+e+\" */\"}applyPrevMaps(){for(let e of this.previous()){let t=this.toUrl(this.path(e.file)),r=e.root||_t(e.file),i;this.mapOpts.sourcesContent===!1?(i=new tn(e.text),i.sourcesContent&&(i.sourcesContent=null)):i=e.consumer(),this.map.applySourceMap(i,t,this.toUrl(this.path(r)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1)if(this.root){let e;for(let t=this.root.nodes.length-1;t>=0;t--)e=this.root.nodes[t],e.type===\"comment\"&&e.text.indexOf(\"# sourceMappingURL=\")===0&&this.root.removeChild(t)}else this.css&&(this.css=this.css.replace(/\\\\n*?\\\\/\\\\*#[\\\\S\\\\s]*?\\\\*\\\\/$/gm,\"\"))}generate(){if(this.clearAnnotation(),al&&ol&&this.isMap())return this.generateMap();{let e=\"\";return this.stringify(this.root,t=>{e+=t}),[e]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Tt.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Tt({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css=\"\",this.map=new Tt({file:this.outputFile(),ignoreInvalidMapping:!0});let e=1,t=1,r=\"<no source>\",i={generated:{column:0,line:0},original:{column:0,line:0},source:\"\"},n,o;this.stringify(this.root,(l,a,u)=>{if(this.css+=l,a&&u!==\"end\"&&(i.generated.line=e,i.generated.column=t-1,a.source&&a.source.start?(i.source=this.sourcePath(a),i.original.line=a.source.start.line,i.original.column=a.source.start.column-1,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,this.map.addMapping(i))),n=l.match(/\\\\n/g),n?(e+=n.length,o=l.lastIndexOf(\\`\n\\`),t=l.length-o):t+=l.length,a&&u!==\"start\"){let c=a.parent||{raws:{}};(!(a.type===\"decl\"||a.type===\"atrule\"&&!a.nodes)||a!==c.last||c.raws.semicolon)&&(a.source&&a.source.end?(i.source=this.sourcePath(a),i.original.line=a.source.end.line,i.original.column=a.source.end.column-1,i.generated.line=e,i.generated.column=t-2,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,i.generated.line=e,i.generated.column=t-1,this.map.addMapping(i)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation!=\"undefined\"?this.mapOpts.annotation:this.previous().length?this.previous().some(e=>e.annotation):!0}isInline(){if(typeof this.mapOpts.inline!=\"undefined\")return this.mapOpts.inline;let e=this.mapOpts.annotation;return typeof e!=\"undefined\"&&e!==!0?!1:this.previous().length?this.previous().some(t=>t.inline):!0}isMap(){return typeof this.opts.map!=\"undefined\"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent!=\"undefined\"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(e=>e.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):\"to.css\"}path(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\\\\w+:\\\\/\\\\//.test(e))return e;let t=this.memoizedPaths.get(e);if(t)return t;let r=this.opts.to?_t(this.opts.to):\".\";typeof this.mapOpts.annotation==\"string\"&&(r=_t(sn(r,this.mapOpts.annotation)));let i=rn(r,e);return this.memoizedPaths.set(e,i),i}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(e=>{if(e.source&&e.source.input.map){let t=e.source.input.map;this.previousMaps.includes(t)||this.previousMaps.push(t)}});else{let e=new nl(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk(t=>{if(t.source){let r=t.source.input.from;if(r&&!e[r]){e[r]=!0;let i=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(i,t.source.input.css)}}});else if(this.css){let t=this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\";this.map.setSourceContent(t,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString(\"base64\"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let t=this.memoizedFileURLs.get(e);if(t)return t;if(ii){let r=ii(e).toString();return this.memoizedFileURLs.set(e,r),r}else throw new Error(\"\\`map.absolute\\` option is not available in this PostCSS build\")}toUrl(e){let t=this.memoizedURLs.get(e);if(t)return t;nn===\"\\\\\\\\\"&&(e=e.replace(/\\\\\\\\/g,\"/\"));let r=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,r),r}};var on=ll;let ul=rr,Br=class extends ul{constructor(e){super(e),this.type=\"comment\"}};var nr=Br;Br.default=Br;let{isClean:an,my:ln}=it,un=sr,cn=nr,cl=rr,hn,gs,ys,fn;function pn(s){return s.map(e=>(e.nodes&&(e.nodes=pn(e.nodes)),delete e.source,e))}function dn(s){if(s[an]=!1,s.proxyOf.nodes)for(let e of s.proxyOf.nodes)dn(e)}let fe=class mn extends cl{append(...e){for(let t of e){let r=this.normalize(t,this.last);for(let i of r)this.proxyOf.nodes.push(i)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let t=this.getIterator(),r,i;for(;this.indexes[t]<this.proxyOf.nodes.length&&(r=this.indexes[t],i=e(this.proxyOf.nodes[r],r),i!==!1);)this.indexes[t]+=1;return delete this.indexes[t],i}every(e){return this.nodes.every(e)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:e[t]?t===\"each\"||typeof t==\"string\"&&t.startsWith(\"walk\")?(...r)=>e[t](...r.map(i=>typeof i==\"function\"?(n,o)=>i(n.toProxy(),o):i)):t===\"every\"||t===\"some\"?r=>e[t]((i,...n)=>r(i.toProxy(),...n)):t===\"root\"?()=>e.root().toProxy():t===\"nodes\"?e.nodes.map(r=>r.toProxy()):t===\"first\"||t===\"last\"?e[t].toProxy():e[t]:e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"name\"||t===\"params\"||t===\"selector\")&&e.markDirty()),!0}}}index(e){return typeof e==\"number\"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,t){let r=this.index(e),i=this.normalize(t,this.proxyOf.nodes[r]).reverse();r=this.index(e);for(let o of i)this.proxyOf.nodes.splice(r+1,0,o);let n;for(let o in this.indexes)n=this.indexes[o],r<n&&(this.indexes[o]=n+i.length);return this.markDirty(),this}insertBefore(e,t){let r=this.index(e),i=r===0?\"prepend\":!1,n=this.normalize(t,this.proxyOf.nodes[r],i).reverse();r=this.index(e);for(let l of n)this.proxyOf.nodes.splice(r,0,l);let o;for(let l in this.indexes)o=this.indexes[l],r<=o&&(this.indexes[l]=o+n.length);return this.markDirty(),this}normalize(e,t){if(typeof e==\"string\")e=pn(hn(e).nodes);else if(typeof e==\"undefined\")e=[];else if(Array.isArray(e)){e=e.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type===\"root\"&&this.type!==\"document\"){e=e.nodes.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value==\"undefined\")throw new Error(\"Value field is missed in node creation\");typeof e.value!=\"string\"&&(e.value=String(e.value)),e=[new un(e)]}else if(e.selector)e=[new gs(e)];else if(e.name)e=[new ys(e)];else if(e.text)e=[new cn(e)];else throw new Error(\"Unknown node type in node creation\");return e.map(i=>(i[ln]||mn.rebuild(i),i=i.proxyOf,i.parent&&i.parent.removeChild(i),i[an]&&dn(i),typeof i.raws.before==\"undefined\"&&t&&typeof t.raws.before!=\"undefined\"&&(i.raws.before=t.raws.before.replace(/\\\\S/g,\"\")),i.parent=this.proxyOf,i))}prepend(...e){e=e.reverse();for(let t of e){let r=this.normalize(t,this.first,\"prepend\").reverse();for(let i of r)this.proxyOf.nodes.unshift(i);for(let i in this.indexes)this.indexes[i]=this.indexes[i]+r.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let t;for(let r in this.indexes)t=this.indexes[r],t>=e&&(this.indexes[r]=t-1);return this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls(i=>{t.props&&!t.props.includes(i.prop)||t.fast&&!i.value.includes(t.fast)||(i.value=i.value.replace(e,r))}),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each((t,r)=>{let i;try{i=e(t,r)}catch(n){throw t.addToError(n)}return i!==!1&&t.walk&&(i=t.walk(e)),i})}walkAtRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"atrule\"&&e.test(r.name))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"atrule\"&&r.name===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"atrule\")return t(r,i)}))}walkComments(e){return this.walk((t,r)=>{if(t.type===\"comment\")return e(t,r)})}walkDecls(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"decl\"&&e.test(r.prop))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"decl\"&&r.prop===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"decl\")return t(r,i)}))}walkRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"rule\"&&e.test(r.selector))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"rule\"&&r.selector===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"rule\")return t(r,i)}))}get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}};fe.registerParse=s=>{hn=s};fe.registerRule=s=>{gs=s};fe.registerAtRule=s=>{ys=s};fe.registerRoot=s=>{fn=s};var ve=fe;fe.default=fe;fe.rebuild=s=>{s.type===\"atrule\"?Object.setPrototypeOf(s,ys.prototype):s.type===\"rule\"?Object.setPrototypeOf(s,gs.prototype):s.type===\"decl\"?Object.setPrototypeOf(s,un.prototype):s.type===\"comment\"?Object.setPrototypeOf(s,cn.prototype):s.type===\"root\"&&Object.setPrototypeOf(s,fn.prototype),s[ln]=!0,s.nodes&&s.nodes.forEach(e=>{fe.rebuild(e)})};let hl=ve,gn,yn,Je=class extends hl{constructor(e){super(x({type:\"document\"},e)),this.nodes||(this.nodes=[])}toResult(e={}){return new gn(new yn,this,e).stringify()}};Je.registerLazyResult=s=>{gn=s};Je.registerProcessor=s=>{yn=s};var ws=Je;Je.default=Je;let zr=class{constructor(e,t={}){if(this.type=\"warning\",this.text=e,t.node&&t.node.source){let r=t.node.rangeBy(t);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(let r in t)this[r]=t[r]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+\": \"+this.text:this.text}};var wn=zr;zr.default=zr;let fl=wn,Wr=class{constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new fl(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter(e=>e.type===\"warning\")}get content(){return this.css}};var Ss=Wr;Wr.default=Wr;const Cr=39,ni=34,gt=92,oi=47,yt=10,ze=32,wt=12,St=9,bt=13,pl=91,dl=93,ml=40,gl=41,yl=123,wl=125,Sl=59,bl=42,Cl=58,vl=64,Ct=/[\\\\t\\\\n\\\\f\\\\r \"#'()/;[\\\\\\\\\\\\]{}]/g,vt=/[\\\\t\\\\n\\\\f\\\\r !\"#'():;@[\\\\\\\\\\\\]{}]|\\\\/(?=\\\\*)/g,Il=/.[\\\\r\\\\n\"'(/\\\\\\\\]/,ai=/[\\\\da-f]/i;var xl=function(e,t={}){let r=e.css.valueOf(),i=t.ignoreErrors,n,o,l,a,u,c,h,d,m,g,p=r.length,f=0,S=[],b=[];function y(){return f}function C(_){throw e.error(\"Unclosed \"+_,f)}function N(){return b.length===0&&f>=p}function D(_){if(b.length)return b.pop();if(f>=p)return;let G=_?_.ignoreUnclosed:!1;switch(n=r.charCodeAt(f),n){case yt:case ze:case St:case bt:case wt:{o=f;do o+=1,n=r.charCodeAt(o);while(n===ze||n===yt||n===St||n===bt||n===wt);g=[\"space\",r.slice(f,o)],f=o-1;break}case pl:case dl:case yl:case wl:case Cl:case Sl:case gl:{let Y=String.fromCharCode(n);g=[Y,Y,f];break}case ml:{if(d=S.length?S.pop()[1]:\"\",m=r.charCodeAt(f+1),d===\"url\"&&m!==Cr&&m!==ni&&m!==ze&&m!==yt&&m!==St&&m!==wt&&m!==bt){o=f;do{if(c=!1,o=r.indexOf(\")\",o+1),o===-1)if(i||G){o=f;break}else C(\"bracket\");for(h=o;r.charCodeAt(h-1)===gt;)h-=1,c=!c}while(c);g=[\"brackets\",r.slice(f,o+1),f,o],f=o}else o=r.indexOf(\")\",f+1),a=r.slice(f,o+1),o===-1||Il.test(a)?g=[\"(\",\"(\",f]:(g=[\"brackets\",a,f,o],f=o);break}case Cr:case ni:{l=n===Cr?\"'\":'\"',o=f;do{if(c=!1,o=r.indexOf(l,o+1),o===-1)if(i||G){o=f+1;break}else C(\"string\");for(h=o;r.charCodeAt(h-1)===gt;)h-=1,c=!c}while(c);g=[\"string\",r.slice(f,o+1),f,o],f=o;break}case vl:{Ct.lastIndex=f+1,Ct.test(r),Ct.lastIndex===0?o=r.length-1:o=Ct.lastIndex-2,g=[\"at-word\",r.slice(f,o+1),f,o],f=o;break}case gt:{for(o=f,u=!0;r.charCodeAt(o+1)===gt;)o+=1,u=!u;if(n=r.charCodeAt(o+1),u&&n!==oi&&n!==ze&&n!==yt&&n!==St&&n!==bt&&n!==wt&&(o+=1,ai.test(r.charAt(o)))){for(;ai.test(r.charAt(o+1));)o+=1;r.charCodeAt(o+1)===ze&&(o+=1)}g=[\"word\",r.slice(f,o+1),f,o],f=o;break}default:{n===oi&&r.charCodeAt(f+1)===bl?(o=r.indexOf(\"*/\",f+2)+1,o===0&&(i||G?o=r.length:C(\"comment\")),g=[\"comment\",r.slice(f,o+1),f,o],f=o):(vt.lastIndex=f+1,vt.test(r),vt.lastIndex===0?o=r.length-1:o=vt.lastIndex-2,g=[\"word\",r.slice(f,o+1),f,o],S.push(g),f=o);break}}return f++,g}function H(_){b.push(_)}return{back:H,endOfFile:N,nextToken:D,position:y}};let Sn=ve,jt=class extends Sn{constructor(e){super(e),this.type=\"atrule\"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};var bs=jt;jt.default=jt;Sn.registerAtRule(jt);let bn=ve,Cn,vn,Ne=class extends bn{constructor(e){super(e),this.type=\"root\",this.nodes||(this.nodes=[])}normalize(e,t,r){let i=super.normalize(e);if(t){if(r===\"prepend\")this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let n of i)n.raws.before=t.raws.before}return i}removeChild(e,t){let r=this.index(e);return!t&&r===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}toResult(e={}){return new Cn(new vn,this,e).stringify()}};Ne.registerLazyResult=s=>{Cn=s};Ne.registerProcessor=s=>{vn=s};var nt=Ne;Ne.default=Ne;bn.registerRoot(Ne);let Xe={comma(s){return Xe.split(s,[\",\"],!0)},space(s){let e=[\" \",\\`\n\\`,\"\t\"];return Xe.split(s,e)},split(s,e,t){let r=[],i=\"\",n=!1,o=0,l=!1,a=\"\",u=!1;for(let c of s)u?u=!1:c===\"\\\\\\\\\"?u=!0:l?c===a&&(l=!1):c==='\"'||c===\"'\"?(l=!0,a=c):c===\"(\"?o+=1:c===\")\"?o>0&&(o-=1):o===0&&e.includes(c)&&(n=!0),n?(i!==\"\"&&r.push(i.trim()),i=\"\",n=!1):i+=c;return(t||i!==\"\")&&r.push(i.trim()),r}};var In=Xe;Xe.default=Xe;let xn=ve,Ol=In,Ht=class extends xn{constructor(e){super(e),this.type=\"rule\",this.nodes||(this.nodes=[])}get selectors(){return Ol.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\\\\s*/):null,r=t?t[0]:\",\"+this.raw(\"between\",\"beforeOpen\");this.selector=e.join(r)}};var Cs=Ht;Ht.default=Ht;xn.registerRule(Ht);let Rl=sr,Al=xl,Ml=nr,El=bs,$l=nt,li=Cs;const ui={empty:!0,space:!0};function Nl(s){for(let e=s.length-1;e>=0;e--){let t=s[e],r=t[3]||t[2];if(r)return r}}let kl=class{constructor(e){this.input=e,this.root=new $l,this.current=this.root,this.spaces=\"\",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let t=new El;t.name=e[1].slice(1),t.name===\"\"&&this.unnamedAtrule(t,e),this.init(t,e[2]);let r,i,n,o=!1,l=!1,a=[],u=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),r=e[0],r===\"(\"||r===\"[\"?u.push(r===\"(\"?\")\":\"]\"):r===\"{\"&&u.length>0?u.push(\"}\"):r===u[u.length-1]&&u.pop(),u.length===0)if(r===\";\"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(r===\"{\"){l=!0;break}else if(r===\"}\"){if(a.length>0){for(n=a.length-1,i=a[n];i&&i[0]===\"space\";)i=a[--n];i&&(t.source.end=this.getPosition(i[3]||i[2]),t.source.end.offset++)}this.end(e);break}else a.push(e);else a.push(e);if(this.tokenizer.endOfFile()){o=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(a),a.length?(t.raws.afterName=this.spacesAndCommentsFromStart(a),this.raw(t,\"params\",a),o&&(e=a[a.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between=\"\")):(t.raws.afterName=\"\",t.params=\"\"),l&&(t.nodes=[],this.current=t)}checkMissedSemicolon(e){let t=this.colon(e);if(t===!1)return;let r=0,i;for(let n=t-1;n>=0&&(i=e[n],!(i[0]!==\"space\"&&(r+=1,r===2)));n--);throw this.input.error(\"Missed semicolon\",i[0]===\"word\"?i[3]+1:i[2])}colon(e){let t=0,r,i,n;for(let[o,l]of e.entries()){if(r=l,i=r[0],i===\"(\"&&(t+=1),i===\")\"&&(t-=1),t===0&&i===\":\")if(!n)this.doubleColon(r);else{if(n[0]===\"word\"&&n[1]===\"progid\")continue;return o}n=r}return!1}comment(e){let t=new Ml;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;let r=e[1].slice(2,-2);if(/^\\\\s*$/.test(r))t.text=\"\",t.raws.left=r,t.raws.right=\"\";else{let i=r.match(/^(\\\\s*)([^]*\\\\S)(\\\\s*)$/);t.text=i[2],t.raws.left=i[1],t.raws.right=i[3]}}createTokenizer(){this.tokenizer=Al(this.input)}decl(e,t){let r=new Rl;this.init(r,e[0][2]);let i=e[e.length-1];for(i[0]===\";\"&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(i[3]||i[2]||Nl(e)),r.source.end.offset++;e[0][0]!==\"word\";)e.length===1&&this.unknownWord(e),r.raws.before+=e.shift()[1];for(r.source.start=this.getPosition(e[0][2]),r.prop=\"\";e.length;){let u=e[0][0];if(u===\":\"||u===\"space\"||u===\"comment\")break;r.prop+=e.shift()[1]}r.raws.between=\"\";let n;for(;e.length;)if(n=e.shift(),n[0]===\":\"){r.raws.between+=n[1];break}else n[0]===\"word\"&&/\\\\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1];(r.prop[0]===\"_\"||r.prop[0]===\"*\")&&(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let o=[],l;for(;e.length&&(l=e[0][0],!(l!==\"space\"&&l!==\"comment\"));)o.push(e.shift());this.precheckMissedSemicolon(e);for(let u=e.length-1;u>=0;u--){if(n=e[u],n[1].toLowerCase()===\"!important\"){r.important=!0;let c=this.stringFrom(e,u);c=this.spacesFromEnd(e)+c,c!==\" !important\"&&(r.raws.important=c);break}else if(n[1].toLowerCase()===\"important\"){let c=e.slice(0),h=\"\";for(let d=u;d>0;d--){let m=c[d][0];if(h.trim().indexOf(\"!\")===0&&m!==\"space\")break;h=c.pop()[1]+h}h.trim().indexOf(\"!\")===0&&(r.important=!0,r.raws.important=h,e=c)}if(n[0]!==\"space\"&&n[0]!==\"comment\")break}e.some(u=>u[0]!==\"space\"&&u[0]!==\"comment\")&&(r.raws.between+=o.map(u=>u[1]).join(\"\"),o=[]),this.raw(r,\"value\",o.concat(e),t),r.value.includes(\":\")&&!t&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error(\"Double colon\",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let t=new li;this.init(t,e[2]),t.selector=\"\",t.raws.between=\"\",this.current=t}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.spaces=\"\",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let t=this.current.nodes[this.current.nodes.length-1];t&&t.type===\"rule\"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces=\"\")}}getPosition(e){let t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}}init(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces=\"\",e.type!==\"comment\"&&(this.semicolon=!1)}other(e){let t=!1,r=null,i=!1,n=null,o=[],l=e[1].startsWith(\"--\"),a=[],u=e;for(;u;){if(r=u[0],a.push(u),r===\"(\"||r===\"[\")n||(n=u),o.push(r===\"(\"?\")\":\"]\");else if(l&&i&&r===\"{\")n||(n=u),o.push(\"}\");else if(o.length===0)if(r===\";\")if(i){this.decl(a,l);return}else break;else if(r===\"{\"){this.rule(a);return}else if(r===\"}\"){this.tokenizer.back(a.pop()),t=!0;break}else r===\":\"&&(i=!0);else r===o[o.length-1]&&(o.pop(),o.length===0&&(n=null));u=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),o.length>0&&this.unclosedBracket(n),t&&i){if(!l)for(;a.length&&(u=a[a.length-1][0],!(u!==\"space\"&&u!==\"comment\"));)this.tokenizer.back(a.pop());this.decl(a,l)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case\"space\":this.spaces+=e[1];break;case\";\":this.freeSemicolon(e);break;case\"}\":this.end(e);break;case\"comment\":this.comment(e);break;case\"at-word\":this.atrule(e);break;case\"{\":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}precheckMissedSemicolon(){}raw(e,t,r,i){let n,o,l=r.length,a=\"\",u=!0,c,h;for(let d=0;d<l;d+=1)n=r[d],o=n[0],o===\"space\"&&d===l-1&&!i?u=!1:o===\"comment\"?(h=r[d-1]?r[d-1][0]:\"empty\",c=r[d+1]?r[d+1][0]:\"empty\",!ui[h]&&!ui[c]?a.slice(-1)===\",\"?u=!1:a+=n[1]:u=!1):a+=n[1];if(!u){let d=r.reduce((m,g)=>m+g[1],\"\");e.raws[t]={raw:d,value:a}}e[t]=a}rule(e){e.pop();let t=new li;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,\"selector\",e),this.current=t}spacesAndCommentsFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],!(t!==\"space\"&&t!==\"comment\"));)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let t,r=\"\";for(;e.length&&(t=e[0][0],!(t!==\"space\"&&t!==\"comment\"));)r+=e.shift()[1];return r}spacesFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],t===\"space\");)r=e.pop()[1]+r;return r}stringFrom(e,t){let r=\"\";for(let i=t;i<e.length;i++)r+=e[i][1];return e.splice(t,e.length-t),r}unclosedBlock(){let e=this.current.source.start;throw this.input.error(\"Unclosed block\",e.line,e.column)}unclosedBracket(e){throw this.input.error(\"Unclosed bracket\",{offset:e[2]},{offset:e[2]+1})}unexpectedClose(e){throw this.input.error(\"Unexpected }\",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error(\"Unknown word\",{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unnamedAtrule(e,t){throw this.input.error(\"At-rule without name\",{offset:t[2]},{offset:t[2]+t[1].length})}};var Pl=kl;let Dl=ve,Ll=Pl,Tl=ir;function Yt(s,e){let t=new Tl(s,e),r=new Ll(t);try{r.parse()}catch(i){throw i}return r.root}var vs=Yt;Yt.default=Yt;Dl.registerParse(Yt);let{isClean:ue,my:_l}=it,Fl=on,Ul=tr,Bl=ve,zl=ws;let ci=Ss,Wl=vs,Gl=nt;const Vl={atrule:\"AtRule\",comment:\"Comment\",decl:\"Declaration\",document:\"Document\",root:\"Root\",rule:\"Rule\"},jl={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},Hl={Once:!0,postcssPlugin:!0,prepare:!0},ke=0;function We(s){return typeof s==\"object\"&&typeof s.then==\"function\"}function On(s){let e=!1,t=Vl[s.type];return s.type===\"decl\"?e=s.prop.toLowerCase():s.type===\"atrule\"&&(e=s.name.toLowerCase()),e&&s.append?[t,t+\"-\"+e,ke,t+\"Exit\",t+\"Exit-\"+e]:e?[t,t+\"-\"+e,t+\"Exit\",t+\"Exit-\"+e]:s.append?[t,ke,t+\"Exit\"]:[t,t+\"Exit\"]}function hi(s){let e;return s.type===\"document\"?e=[\"Document\",ke,\"DocumentExit\"]:s.type===\"root\"?e=[\"Root\",ke,\"RootExit\"]:e=On(s),{eventIndex:0,events:e,iterator:0,node:s,visitorIndex:0,visitors:[]}}function Gr(s){return s[ue]=!1,s.nodes&&s.nodes.forEach(e=>Gr(e)),s}let Vr={},Pe=class Rn{constructor(e,t,r){this.stringified=!1,this.processed=!1;let i;if(typeof t==\"object\"&&t!==null&&(t.type===\"root\"||t.type===\"document\"))i=Gr(t);else if(t instanceof Rn||t instanceof ci)i=Gr(t.root),t.map&&(typeof r.map==\"undefined\"&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let n=Wl;r.syntax&&(n=r.syntax.parse),r.parser&&(n=r.parser),n.parse&&(n=n.parse);try{i=n(t,r)}catch(o){this.processed=!0,this.error=o}i&&!i[_l]&&Bl.rebuild(i)}this.result=new ci(e,i,r),this.helpers=ee(x({},Vr),{postcss:Vr,result:this.result}),this.plugins=this.processor.plugins.map(n=>typeof n==\"object\"&&n.prepare?x(x({},n),n.prepare(this.result)):n)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error(\"Use process(css).then(cb) to work with async plugins\")}handleError(e,t){let r=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,e.name===\"CssSyntaxError\"&&!e.plugin?(e.plugin=r.postcssPlugin,e.setMessage()):r.postcssVersion}catch(i){console&&console.error&&console.error(i)}return e}prepareVisitors(){this.listeners={};let e=(t,r,i)=>{this.listeners[r]||(this.listeners[r]=[]),this.listeners[r].push([t,i])};for(let t of this.plugins)if(typeof t==\"object\")for(let r in t){if(!jl[r]&&/^[A-Z]/.test(r))throw new Error(\\`Unknown event \\${r} in \\${t.postcssPlugin}. Try to update PostCSS (\\${this.processor.version} now).\\`);if(!Hl[r])if(typeof t[r]==\"object\")for(let i in t[r])i===\"*\"?e(t,r,t[r][i]):e(t,r+\"-\"+i.toLowerCase(),t[r][i]);else typeof t[r]==\"function\"&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let t=this.plugins[e],r=this.runOnRoot(t);if(We(r))try{await r}catch(i){throw this.handleError(i)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ue];){e[ue]=!0;let t=[hi(e)];for(;t.length>0;){let r=this.visitTick(t);if(We(r))try{await r}catch(i){let n=t[t.length-1].node;throw this.handleError(i,n)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if(e.type===\"document\"){let i=e.nodes.map(n=>r(n,this.helpers));await Promise.all(i)}else await r(e,this.helpers)}catch(i){throw this.handleError(i)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e==\"object\"&&e.Once){if(this.result.root.type===\"document\"){let t=this.result.root.nodes.map(r=>e.Once(r,this.helpers));return We(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}else if(typeof e==\"function\")return e(this.result.root,this.result)}catch(t){throw this.handleError(t)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=Ul;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let i=new Fl(t,this.result.root,this.result.opts).generate();return this.result.css=i[0],this.result.map=i[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let t=this.runOnRoot(e);if(We(t))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ue];)e[ue]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type===\"document\")for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,t){return this.async().then(e,t)}toString(){return this.css}visitSync(e,t){for(let[r,i]of e){this.result.lastPlugin=r;let n;try{n=i(t,this.helpers)}catch(o){throw this.handleError(o,t.proxyOf)}if(t.type!==\"root\"&&t.type!==\"document\"&&!t.parent)return!0;if(We(n))throw this.getAsyncError()}}visitTick(e){let t=e[e.length-1],{node:r,visitors:i}=t;if(r.type!==\"root\"&&r.type!==\"document\"&&!r.parent){e.pop();return}if(i.length>0&&t.visitorIndex<i.length){let[o,l]=i[t.visitorIndex];t.visitorIndex+=1,t.visitorIndex===i.length&&(t.visitors=[],t.visitorIndex=0),this.result.lastPlugin=o;try{return l(r.toProxy(),this.helpers)}catch(a){throw this.handleError(a,r)}}if(t.iterator!==0){let o=t.iterator,l;for(;l=r.nodes[r.indexes[o]];)if(r.indexes[o]+=1,!l[ue]){l[ue]=!0,e.push(hi(l));return}t.iterator=0,delete r.indexes[o]}let n=t.events;for(;t.eventIndex<n.length;){let o=n[t.eventIndex];if(t.eventIndex+=1,o===ke){r.nodes&&r.nodes.length&&(r[ue]=!0,t.iterator=r.getIterator());return}else if(this.listeners[o]){t.visitors=this.listeners[o];return}}e.pop()}walkSync(e){e[ue]=!0;let t=On(e);for(let r of t)if(r===ke)e.nodes&&e.each(i=>{i[ue]||this.walkSync(i)});else{let i=this.listeners[r];if(i&&this.visitSync(i,e.toProxy()))return}}warnings(){return this.sync().warnings()}get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return\"LazyResult\"}};Pe.registerPostcss=s=>{Vr=s};var An=Pe;Pe.default=Pe;Gl.registerLazyResult(Pe);zl.registerLazyResult(Pe);let Yl=on,Zl=tr;let Jl=vs;const Xl=Ss;let jr=class{constructor(e,t,r){t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=r,this._map=void 0;let i,n=Zl;this.result=new Xl(this._processor,i,this._opts),this.result.css=t;let o=this;Object.defineProperty(this.result,\"root\",{get(){return o.root}});let l=new Yl(n,i,this._opts,t);if(l.isMap()){let[a,u]=l.generate();a&&(this.result.css=a),u&&(this.result.map=u)}else l.clearAnnotation(),this.result.css=l.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,t){return this.async().then(e,t)}toString(){return this._css}warnings(){return[]}get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,t=Jl;try{e=t(this._css,this._opts)}catch(r){this.error=r}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return\"NoWorkResult\"}};var Kl=jr;jr.default=jr;let Ql=Kl,ql=An,eu=ws,tu=nt,Ke=class{constructor(e=[]){this.version=\"8.4.38\",this.plugins=this.normalize(e)}normalize(e){let t=[];for(let r of e)if(r.postcss===!0?r=r():r.postcss&&(r=r.postcss),typeof r==\"object\"&&Array.isArray(r.plugins))t=t.concat(r.plugins);else if(typeof r==\"object\"&&r.postcssPlugin)t.push(r);else if(typeof r==\"function\")t.push(r);else if(!(typeof r==\"object\"&&(r.parse||r.stringify)))throw new Error(r+\" is not a PostCSS plugin\");return t}process(e,t={}){return!this.plugins.length&&!t.parser&&!t.stringifier&&!t.syntax?new Ql(this,e,t):new ql(this,e,t)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};var ru=Ke;Ke.default=Ke;tu.registerProcessor(Ke);eu.registerProcessor(Ke);let su=sr,iu=en,nu=nr,ou=bs,au=ir,lu=nt,uu=Cs;function Qe(s,e){if(Array.isArray(s))return s.map(o=>Qe(o));let i=s,{inputs:t}=i,r=xe(i,[\"inputs\"]);if(t){e=[];for(let o of t){let l=ee(x({},o),{__proto__:au.prototype});l.map&&(l.map=ee(x({},l.map),{__proto__:iu.prototype})),e.push(l)}}if(r.nodes&&(r.nodes=s.nodes.map(o=>Qe(o,e))),r.source){let n=r.source,{inputId:o}=n,l=xe(n,[\"inputId\"]);r.source=l,o!=null&&(r.source.input=e[o])}if(r.type===\"root\")return new lu(r);if(r.type===\"decl\")return new su(r);if(r.type===\"rule\")return new uu(r);if(r.type===\"comment\")return new nu(r);if(r.type===\"atrule\")return new ou(r);throw new Error(\"Unknown node type: \"+s.type)}var cu=Qe;Qe.default=Qe;let hu=ms,Mn=sr,fu=An,pu=ve,Is=ru,du=tr,mu=cu,En=ws,gu=wn,$n=nr,Nn=bs,yu=Ss,wu=ir,Su=vs,bu=In,kn=Cs,Pn=nt,Cu=rr;function E(...s){return s.length===1&&Array.isArray(s[0])&&(s=s[0]),new Is(s)}E.plugin=function(e,t){let r=!1;function i(...o){console&&console.warn&&!r&&(r=!0,console.warn(e+\\`: postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\\`),process.env.LANG&&process.env.LANG.startsWith(\"cn\")&&console.warn(e+\\`: \\\\u91CC\\\\u9762 postcss.plugin \\\\u88AB\\\\u5F03\\\\u7528. \\\\u8FC1\\\\u79FB\\\\u6307\\\\u5357:\nhttps://www.w3ctech.com/topic/2226\\`));let l=t(...o);return l.postcssPlugin=e,l.postcssVersion=new Is().version,l}let n;return Object.defineProperty(i,\"postcss\",{get(){return n||(n=i()),n}}),i.process=function(o,l,a){return E([i(a)]).process(o,l)},i};E.stringify=du;E.parse=Su;E.fromJSON=mu;E.list=bu;E.comment=s=>new $n(s);E.atRule=s=>new Nn(s);E.decl=s=>new Mn(s);E.rule=s=>new kn(s);E.root=s=>new Pn(s);E.document=s=>new En(s);E.CssSyntaxError=hu;E.Declaration=Mn;E.Container=pu;E.Processor=Is;E.Document=En;E.Comment=$n;E.Warning=gu;E.AtRule=Nn;E.Result=yu;E.Input=wu;E.Rule=kn;E.Root=Pn;E.Node=Cu;fu.registerPostcss(E);var vu=E;E.default=E;const F=Da(vu);F.stringify;F.fromJSON;F.plugin;F.parse;F.list;F.document;F.comment;F.atRule;F.rule;F.decl;F.root;F.CssSyntaxError;F.Declaration;F.Container;F.Processor;F.Document;F.Comment;F.Warning;F.AtRule;F.Result;F.Input;F.Rule;F.Root;F.Node;var Iu=Object.defineProperty,xu=(s,e,t)=>e in s?Iu(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,te=(s,e,t)=>xu(s,typeof e!=\"symbol\"?e+\"\":e,t);function Ou(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,\"default\")?s.default:s}function Ru(s){if(s.__esModule)return s;var e=s.default;if(typeof e==\"function\"){var t=function r(){return this instanceof r?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,\"__esModule\",{value:!0}),Object.keys(s).forEach(function(r){var i=Object.getOwnPropertyDescriptor(s,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return s[r]}})}),t}var xs={exports:{}},T=String,Dn=function(){return{isColorSupported:!1,reset:T,bold:T,dim:T,italic:T,underline:T,inverse:T,hidden:T,strikethrough:T,black:T,red:T,green:T,yellow:T,blue:T,magenta:T,cyan:T,white:T,gray:T,bgBlack:T,bgRed:T,bgGreen:T,bgYellow:T,bgBlue:T,bgMagenta:T,bgCyan:T,bgWhite:T}};xs.exports=Dn();xs.exports.createColors=Dn;var Au=xs.exports;const Mu={},Eu=Object.freeze(Object.defineProperty({__proto__:null,default:Mu},Symbol.toStringTag,{value:\"Module\"})),ne=Ru(Eu);let fi=Au,pi=ne,Hr=class Ln extends Error{constructor(e,t,r,i,n,o){super(e),this.name=\"CssSyntaxError\",this.reason=e,n&&(this.file=n),i&&(this.source=i),o&&(this.plugin=o),typeof t!=\"undefined\"&&typeof r!=\"undefined\"&&(typeof t==\"number\"?(this.line=t,this.column=r):(this.line=t.line,this.column=t.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,Ln)}setMessage(){this.message=this.plugin?this.plugin+\": \":\"\",this.message+=this.file?this.file:\"<css input>\",typeof this.line!=\"undefined\"&&(this.message+=\":\"+this.line+\":\"+this.column),this.message+=\": \"+this.reason}showSourceCode(e){if(!this.source)return\"\";let t=this.source;e==null&&(e=fi.isColorSupported),pi&&e&&(t=pi(t));let r=t.split(/\\\\r?\\\\n/),i=Math.max(this.line-3,0),n=Math.min(this.line+2,r.length),o=String(n).length,l,a;if(e){let{bold:u,gray:c,red:h}=fi.createColors(!0);l=d=>u(h(d)),a=d=>c(d)}else l=a=u=>u;return r.slice(i,n).map((u,c)=>{let h=i+1+c,d=\" \"+(\" \"+h).slice(-o)+\" | \";if(h===this.line){let m=a(d.replace(/\\\\d/g,\" \"))+u.slice(0,this.column-1).replace(/[^\\\\t]/g,\" \");return l(\">\")+a(d)+u+\\`\n \\`+m+l(\"^\")}return\" \"+a(d)+u}).join(\\`\n\\`)}toString(){let e=this.showSourceCode();return e&&(e=\\`\n\n\\`+e+\\`\n\\`),this.name+\": \"+this.message+e}};var Os=Hr;Hr.default=Hr;var ot={};ot.isClean=Symbol(\"isClean\");ot.my=Symbol(\"my\");const di={after:\\`\n\\`,beforeClose:\\`\n\\`,beforeComment:\\`\n\\`,beforeDecl:\\`\n\\`,beforeOpen:\" \",beforeRule:\\`\n\\`,colon:\": \",commentLeft:\" \",commentRight:\" \",emptyBody:\"\",indent:\" \",semicolon:!1};function $u(s){return s[0].toUpperCase()+s.slice(1)}let Yr=class{constructor(e){this.builder=e}atrule(e,t){let r=\"@\"+e.name,i=e.params?this.rawValue(e,\"params\"):\"\";if(typeof e.raws.afterName!=\"undefined\"?r+=e.raws.afterName:i&&(r+=\" \"),e.nodes)this.block(e,r+i);else{let n=(e.raws.between||\"\")+(t?\";\":\"\");this.builder(r+i+n,e)}}beforeAfter(e,t){let r;e.type===\"decl\"?r=this.raw(e,null,\"beforeDecl\"):e.type===\"comment\"?r=this.raw(e,null,\"beforeComment\"):t===\"before\"?r=this.raw(e,null,\"beforeRule\"):r=this.raw(e,null,\"beforeClose\");let i=e.parent,n=0;for(;i&&i.type!==\"root\";)n+=1,i=i.parent;if(r.includes(\\`\n\\`)){let o=this.raw(e,null,\"indent\");if(o.length)for(let l=0;l<n;l++)r+=o}return r}block(e,t){let r=this.raw(e,\"between\",\"beforeOpen\");this.builder(t+r+\"{\",e,\"start\");let i;e.nodes&&e.nodes.length?(this.body(e),i=this.raw(e,\"after\")):i=this.raw(e,\"after\",\"emptyBody\"),i&&this.builder(i),this.builder(\"}\",e,\"end\")}body(e){let t=e.nodes.length-1;for(;t>0&&e.nodes[t].type===\"comment\";)t-=1;let r=this.raw(e,\"semicolon\");for(let i=0;i<e.nodes.length;i++){let n=e.nodes[i],o=this.raw(n,\"before\");o&&this.builder(o),this.stringify(n,t!==i||r)}}comment(e){let t=this.raw(e,\"left\",\"commentLeft\"),r=this.raw(e,\"right\",\"commentRight\");this.builder(\"/*\"+t+e.text+r+\"*/\",e)}decl(e,t){let r=this.raw(e,\"between\",\"colon\"),i=e.prop+r+this.rawValue(e,\"value\");e.important&&(i+=e.raws.important||\" !important\"),t&&(i+=\";\"),this.builder(i,e)}document(e){this.body(e)}raw(e,t,r){let i;if(r||(r=t),t&&(i=e.raws[t],typeof i!=\"undefined\"))return i;let n=e.parent;if(r===\"before\"&&(!n||n.type===\"root\"&&n.first===e||n&&n.type===\"document\"))return\"\";if(!n)return di[r];let o=e.root();if(o.rawCache||(o.rawCache={}),typeof o.rawCache[r]!=\"undefined\")return o.rawCache[r];if(r===\"before\"||r===\"after\")return this.beforeAfter(e,r);{let l=\"raw\"+$u(r);this[l]?i=this[l](o,e):o.walk(a=>{if(i=a.raws[t],typeof i!=\"undefined\")return!1})}return typeof i==\"undefined\"&&(i=di[r]),o.rawCache[r]=i,i}rawBeforeClose(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length>0&&typeof r.raws.after!=\"undefined\")return t=r.raws.after,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawBeforeComment(e,t){let r;return e.walkComments(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeDecl\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeDecl(e,t){let r;return e.walkDecls(i=>{if(typeof i.raws.before!=\"undefined\")return r=i.raws.before,r.includes(\\`\n\\`)&&(r=r.replace(/[^\\\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeRule\"):r&&(r=r.replace(/\\\\S/g,\"\")),r}rawBeforeOpen(e){let t;return e.walk(r=>{if(r.type!==\"decl\"&&(t=r.raws.between,typeof t!=\"undefined\"))return!1}),t}rawBeforeRule(e){let t;return e.walk(r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&typeof r.raws.before!=\"undefined\")return t=r.raws.before,t.includes(\\`\n\\`)&&(t=t.replace(/[^\\\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\\\S/g,\"\")),t}rawColon(e){let t;return e.walkDecls(r=>{if(typeof r.raws.between!=\"undefined\")return t=r.raws.between.replace(/[^\\\\s:]/g,\"\"),!1}),t}rawEmptyBody(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length===0&&(t=r.raws.after,typeof t!=\"undefined\"))return!1}),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk(r=>{let i=r.parent;if(i&&i!==e&&i.parent&&i.parent===e&&typeof r.raws.before!=\"undefined\"){let n=r.raws.before.split(\\`\n\\`);return t=n[n.length-1],t=t.replace(/\\\\S/g,\"\"),!1}}),t}rawSemicolon(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length&&r.last.type===\"decl\"&&(t=r.raws.semicolon,typeof t!=\"undefined\"))return!1}),t}rawValue(e,t){let r=e[t],i=e.raws[t];return i&&i.value===r?i.raw:r}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}rule(e){this.block(e,this.rawValue(e,\"selector\")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,\"end\")}stringify(e,t){if(!this[e.type])throw new Error(\"Unknown AST node type \"+e.type+\". Maybe you need to change PostCSS stringifier.\");this[e.type](e,t)}};var Tn=Yr;Yr.default=Yr;let Nu=Tn;function Zr(s,e){new Nu(e).stringify(s)}var or=Zr;Zr.default=Zr;let{isClean:It,my:ku}=ot,Pu=Os,Du=Tn,Lu=or;function Jr(s,e){let t=new s.constructor;for(let r in s){if(!Object.prototype.hasOwnProperty.call(s,r)||r===\"proxyCache\")continue;let i=s[r],n=typeof i;r===\"parent\"&&n===\"object\"?e&&(t[r]=e):r===\"source\"?t[r]=i:Array.isArray(i)?t[r]=i.map(o=>Jr(o,t)):(n===\"object\"&&i!==null&&(i=Jr(i)),t[r]=i)}return t}let Xr=class{constructor(e={}){this.raws={},this[It]=!1,this[ku]=!0;for(let t in e)if(t===\"nodes\"){this.nodes=[];for(let r of e[t])typeof r.clone==\"function\"?this.append(r.clone()):this.append(r)}else this[t]=e[t]}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\\\\n\\\\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\\\\n\\\\s{4}at /,\\`$&\\${t.input.from}:\\${t.start.line}:\\${t.start.column}$&\\`)}return e}after(e){return this.parent.insertAfter(this,e),this}assign(e={}){for(let t in e)this[t]=e[t];return this}before(e){return this.parent.insertBefore(this,e),this}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}clone(e={}){let t=Jr(this);for(let r in e)t[r]=e[r];return t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}error(e,t={}){if(this.source){let{end:r,start:i}=this.rangeBy(t);return this.source.input.error(e,{column:i.column,line:i.line},{column:r.column,line:r.line},t)}return new Pu(e)}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:t===\"root\"?()=>e.root().toProxy():e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"prop\"||t===\"value\"||t===\"name\"||t===\"params\"||t===\"important\"||t===\"text\")&&e.markDirty()),!0}}}markDirty(){if(this[It]){this[It]=!1;let e=this;for(;e=e.parent;)e[It]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e,t){let r=this.source.start;if(e.index)r=this.positionInside(e.index,t);else if(e.word){t=this.toString();let i=t.indexOf(e.word);i!==-1&&(r=this.positionInside(i,t))}return r}positionInside(e,t){let r=t||this.toString(),i=this.source.start.column,n=this.source.start.line;for(let o=0;o<e;o++)r[o]===\\`\n\\`?(i=1,n+=1):i+=1;return{column:i,line:n}}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}rangeBy(e){let t={column:this.source.start.column,line:this.source.start.line},r=this.source.end?{column:this.source.end.column+1,line:this.source.end.line}:{column:t.column+1,line:t.line};if(e.word){let i=this.toString(),n=i.indexOf(e.word);n!==-1&&(t=this.positionInside(n,i),r=this.positionInside(n+e.word.length,i))}else e.start?t={column:e.start.column,line:e.start.line}:e.index&&(t=this.positionInside(e.index)),e.end?r={column:e.end.column,line:e.end.line}:typeof e.endIndex==\"number\"?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<t.line||r.line===t.line&&r.column<=t.column)&&(r={column:t.column+1,line:t.line}),{end:r,start:t}}raw(e,t){return new Du().raw(this,e,t)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...e){if(this.parent){let t=this,r=!1;for(let i of e)i===this?r=!0:r?(this.parent.insertAfter(t,i),t=i):this.parent.insertBefore(t,i);r||this.remove()}return this}root(){let e=this;for(;e.parent&&e.parent.type!==\"document\";)e=e.parent;return e}toJSON(e,t){let r={},i=t==null;t=t||new Map;let n=0;for(let o in this){if(!Object.prototype.hasOwnProperty.call(this,o)||o===\"parent\"||o===\"proxyCache\")continue;let l=this[o];if(Array.isArray(l))r[o]=l.map(a=>typeof a==\"object\"&&a.toJSON?a.toJSON(null,t):a);else if(typeof l==\"object\"&&l.toJSON)r[o]=l.toJSON(null,t);else if(o===\"source\"){let a=t.get(l.input);a==null&&(a=n,t.set(l.input,n),n++),r[o]={end:l.end,inputId:a,start:l.start}}else r[o]=l}return i&&(r.inputs=[...t.keys()].map(o=>o.toJSON())),r}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=Lu){e.stringify&&(e=e.stringify);let t=\"\";return e(this,r=>{t+=r}),t}warn(e,t,r){let i={node:this};for(let n in r)i[n]=r[n];return e.warn(t,i)}get proxyOf(){return this}};var ar=Xr;Xr.default=Xr;let Tu=ar,Kr=class extends Tu{constructor(e){e&&typeof e.value!=\"undefined\"&&typeof e.value!=\"string\"&&(e=ee(x({},e),{value:String(e.value)})),super(e),this.type=\"decl\"}get variable(){return this.prop.startsWith(\"--\")||this.prop[0]===\"$\"}};var lr=Kr;Kr.default=Kr;let _u=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\",Fu=(s,e=21)=>(t=e)=>{let r=\"\",i=t;for(;i--;)r+=s[Math.random()*s.length|0];return r},Uu=(s=21)=>{let e=\"\",t=s;for(;t--;)e+=_u[Math.random()*64|0];return e};var Bu={nanoid:Uu,customAlphabet:Fu};let{SourceMapConsumer:mi,SourceMapGenerator:gi}=ne,{existsSync:zu,readFileSync:Wu}=ne,{dirname:vr,join:Gu}=ne;function Vu(s){return Buffer?Buffer.from(s,\"base64\").toString():window.atob(s)}let Qr=class{constructor(e,t){if(t.map===!1)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,\"data:\");let r=t.map?t.map.prev:void 0,i=this.loadMap(t.from,r);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=vr(this.mapFile)),i&&(this.text=i)}consumer(){return this.consumerCache||(this.consumerCache=new mi(this.text)),this.consumerCache}decodeInline(e){let t=/^data:application\\\\/json;charset=utf-?8;base64,/,r=/^data:application\\\\/json;base64,/,i=/^data:application\\\\/json;charset=utf-?8,/,n=/^data:application\\\\/json,/;if(i.test(e)||n.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(t.test(e)||r.test(e))return Vu(e.substr(RegExp.lastMatch.length));let o=e.match(/data:application\\\\/json;([^,]+),/)[1];throw new Error(\"Unsupported source map encoding \"+o)}getAnnotationURL(e){return e.replace(/^\\\\/\\\\*\\\\s*# sourceMappingURL=/,\"\").trim()}isMap(e){return typeof e!=\"object\"?!1:typeof e.mappings==\"string\"||typeof e._mappings==\"string\"||Array.isArray(e.sections)}loadAnnotation(e){let t=e.match(/\\\\/\\\\*\\\\s*# sourceMappingURL=/gm);if(!t)return;let r=e.lastIndexOf(t.pop()),i=e.indexOf(\"*/\",r);r>-1&&i>-1&&(this.annotation=this.getAnnotationURL(e.substring(r,i)))}loadFile(e){if(this.root=vr(e),zu(e))return this.mapFile=e,Wu(e,\"utf-8\").toString().trim()}loadMap(e,t){if(t===!1)return!1;if(t){if(typeof t==\"string\")return t;if(typeof t==\"function\"){let r=t(e);if(r){let i=this.loadFile(r);if(!i)throw new Error(\"Unable to load previous source map: \"+r.toString());return i}}else{if(t instanceof mi)return gi.fromSourceMap(t).toString();if(t instanceof gi)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error(\"Unsupported previous source map format: \"+t.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let r=this.annotation;return e&&(r=Gu(vr(e),r)),this.loadFile(r)}}}startWith(e,t){return e?e.substr(0,t.length)===t:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}};var _n=Qr;Qr.default=Qr;let{SourceMapConsumer:ju,SourceMapGenerator:Hu}=ne,{fileURLToPath:yi,pathToFileURL:xt}=ne,{isAbsolute:qr,resolve:es}=ne,{nanoid:Yu}=Bu,Ir=ne,wi=Os,Zu=_n,xr=Symbol(\"fromOffsetCache\"),Ju=!!(ju&&Hu),Si=!!(es&&qr),Zt=class{constructor(e,t={}){if(e===null||typeof e==\"undefined\"||typeof e==\"object\"&&!e.toString)throw new Error(\\`PostCSS received \\${e} instead of CSS string\\`);if(this.css=e.toString(),this.css[0]===\"\\\\uFEFF\"||this.css[0]===\"\\\\uFFFE\"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!Si||/^\\\\w+:\\\\/\\\\//.test(t.from)||qr(t.from)?this.file=t.from:this.file=es(t.from)),Si&&Ju){let r=new Zu(this.css,t);if(r.text){this.map=r;let i=r.consumer().file;!this.file&&i&&(this.file=this.mapResolve(i))}}this.file||(this.id=\"<input css \"+Yu(6)+\">\"),this.map&&(this.map.file=this.from)}error(e,t,r,i={}){let n,o,l;if(t&&typeof t==\"object\"){let u=t,c=r;if(typeof u.offset==\"number\"){let h=this.fromOffset(u.offset);t=h.line,r=h.col}else t=u.line,r=u.column;if(typeof c.offset==\"number\"){let h=this.fromOffset(c.offset);o=h.line,l=h.col}else o=c.line,l=c.column}else if(!r){let u=this.fromOffset(t);t=u.line,r=u.col}let a=this.origin(t,r,o,l);return a?n=new wi(e,a.endLine===void 0?a.line:{column:a.column,line:a.line},a.endLine===void 0?a.column:{column:a.endColumn,line:a.endLine},a.source,a.file,i.plugin):n=new wi(e,o===void 0?t:{column:r,line:t},o===void 0?r:{column:l,line:o},this.css,this.file,i.plugin),n.input={column:r,endColumn:l,endLine:o,line:t,source:this.css},this.file&&(xt&&(n.input.url=xt(this.file).toString()),n.input.file=this.file),n}fromOffset(e){let t,r;if(this[xr])r=this[xr];else{let n=this.css.split(\\`\n\\`);r=new Array(n.length);let o=0;for(let l=0,a=n.length;l<a;l++)r[l]=o,o+=n[l].length+1;this[xr]=r}t=r[r.length-1];let i=0;if(e>=t)i=r.length-1;else{let n=r.length-2,o;for(;i<n;)if(o=i+(n-i>>1),e<r[o])n=o-1;else if(e>=r[o+1])i=o+1;else{i=o;break}}return{col:e-r[i]+1,line:i+1}}mapResolve(e){return/^\\\\w+:\\\\/\\\\//.test(e)?e:es(this.map.consumer().sourceRoot||this.map.root||\".\",e)}origin(e,t,r,i){if(!this.map)return!1;let n=this.map.consumer(),o=n.originalPositionFor({column:t,line:e});if(!o.source)return!1;let l;typeof r==\"number\"&&(l=n.originalPositionFor({column:i,line:r}));let a;qr(o.source)?a=xt(o.source):a=new URL(o.source,this.map.consumer().sourceRoot||xt(this.map.mapFile));let u={column:o.column,endColumn:l&&l.column,endLine:l&&l.line,line:o.line,url:a.toString()};if(a.protocol===\"file:\")if(yi)u.file=yi(a);else throw new Error(\"file: protocol is not available in this PostCSS build\");let c=n.sourceContentFor(o.source);return c&&(u.source=c),u}toJSON(){let e={};for(let t of[\"hasBOM\",\"css\",\"file\",\"id\"])this[t]!=null&&(e[t]=this[t]);return this.map&&(e.map=x({},this.map),e.map.consumerCache&&(e.map.consumerCache=void 0)),e}get from(){return this.file||this.id}};var ur=Zt;Zt.default=Zt;Ir&&Ir.registerInput&&Ir.registerInput(Zt);let{SourceMapConsumer:Fn,SourceMapGenerator:Ft}=ne,{dirname:Ut,relative:Un,resolve:Bn,sep:zn}=ne,{pathToFileURL:bi}=ne,Xu=ur,Ku=!!(Fn&&Ft),Qu=!!(Ut&&Bn&&Un&&zn),qu=class{constructor(e,t,r,i){this.stringify=e,this.mapOpts=r.map||{},this.root=t,this.opts=r,this.css=i,this.originalCSS=i,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;this.isInline()?e=\"data:application/json;base64,\"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation==\"string\"?e=this.mapOpts.annotation:typeof this.mapOpts.annotation==\"function\"?e=this.mapOpts.annotation(this.opts.to,this.root):e=this.outputFile()+\".map\";let t=\\`\n\\`;this.css.includes(\\`\\\\r\n\\`)&&(t=\\`\\\\r\n\\`),this.css+=t+\"/*# sourceMappingURL=\"+e+\" */\"}applyPrevMaps(){for(let e of this.previous()){let t=this.toUrl(this.path(e.file)),r=e.root||Ut(e.file),i;this.mapOpts.sourcesContent===!1?(i=new Fn(e.text),i.sourcesContent&&(i.sourcesContent=null)):i=e.consumer(),this.map.applySourceMap(i,t,this.toUrl(this.path(r)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1)if(this.root){let e;for(let t=this.root.nodes.length-1;t>=0;t--)e=this.root.nodes[t],e.type===\"comment\"&&e.text.indexOf(\"# sourceMappingURL=\")===0&&this.root.removeChild(t)}else this.css&&(this.css=this.css.replace(/\\\\n*?\\\\/\\\\*#[\\\\S\\\\s]*?\\\\*\\\\/$/gm,\"\"))}generate(){if(this.clearAnnotation(),Qu&&Ku&&this.isMap())return this.generateMap();{let e=\"\";return this.stringify(this.root,t=>{e+=t}),[e]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Ft.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Ft({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css=\"\",this.map=new Ft({file:this.outputFile(),ignoreInvalidMapping:!0});let e=1,t=1,r=\"<no source>\",i={generated:{column:0,line:0},original:{column:0,line:0},source:\"\"},n,o;this.stringify(this.root,(l,a,u)=>{if(this.css+=l,a&&u!==\"end\"&&(i.generated.line=e,i.generated.column=t-1,a.source&&a.source.start?(i.source=this.sourcePath(a),i.original.line=a.source.start.line,i.original.column=a.source.start.column-1,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,this.map.addMapping(i))),n=l.match(/\\\\n/g),n?(e+=n.length,o=l.lastIndexOf(\\`\n\\`),t=l.length-o):t+=l.length,a&&u!==\"start\"){let c=a.parent||{raws:{}};(!(a.type===\"decl\"||a.type===\"atrule\"&&!a.nodes)||a!==c.last||c.raws.semicolon)&&(a.source&&a.source.end?(i.source=this.sourcePath(a),i.original.line=a.source.end.line,i.original.column=a.source.end.column-1,i.generated.line=e,i.generated.column=t-2,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,i.generated.line=e,i.generated.column=t-1,this.map.addMapping(i)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation!=\"undefined\"?this.mapOpts.annotation:this.previous().length?this.previous().some(e=>e.annotation):!0}isInline(){if(typeof this.mapOpts.inline!=\"undefined\")return this.mapOpts.inline;let e=this.mapOpts.annotation;return typeof e!=\"undefined\"&&e!==!0?!1:this.previous().length?this.previous().some(t=>t.inline):!0}isMap(){return typeof this.opts.map!=\"undefined\"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent!=\"undefined\"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(e=>e.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):\"to.css\"}path(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\\\\w+:\\\\/\\\\//.test(e))return e;let t=this.memoizedPaths.get(e);if(t)return t;let r=this.opts.to?Ut(this.opts.to):\".\";typeof this.mapOpts.annotation==\"string\"&&(r=Ut(Bn(r,this.mapOpts.annotation)));let i=Un(r,e);return this.memoizedPaths.set(e,i),i}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(e=>{if(e.source&&e.source.input.map){let t=e.source.input.map;this.previousMaps.includes(t)||this.previousMaps.push(t)}});else{let e=new Xu(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk(t=>{if(t.source){let r=t.source.input.from;if(r&&!e[r]){e[r]=!0;let i=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(i,t.source.input.css)}}});else if(this.css){let t=this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\";this.map.setSourceContent(t,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString(\"base64\"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let t=this.memoizedFileURLs.get(e);if(t)return t;if(bi){let r=bi(e).toString();return this.memoizedFileURLs.set(e,r),r}else throw new Error(\"\\`map.absolute\\` option is not available in this PostCSS build\")}toUrl(e){let t=this.memoizedURLs.get(e);if(t)return t;zn===\"\\\\\\\\\"&&(e=e.replace(/\\\\\\\\/g,\"/\"));let r=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,r),r}};var Wn=qu;let ec=ar,ts=class extends ec{constructor(e){super(e),this.type=\"comment\"}};var cr=ts;ts.default=ts;let{isClean:Gn,my:Vn}=ot,jn=lr,Hn=cr,tc=ar,Yn,Rs,As,Zn;function Jn(s){return s.map(e=>(e.nodes&&(e.nodes=Jn(e.nodes)),delete e.source,e))}function Xn(s){if(s[Gn]=!1,s.proxyOf.nodes)for(let e of s.proxyOf.nodes)Xn(e)}let pe=class Kn extends tc{append(...e){for(let t of e){let r=this.normalize(t,this.last);for(let i of r)this.proxyOf.nodes.push(i)}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}each(e){if(!this.proxyOf.nodes)return;let t=this.getIterator(),r,i;for(;this.indexes[t]<this.proxyOf.nodes.length&&(r=this.indexes[t],i=e(this.proxyOf.nodes[r],r),i!==!1);)this.indexes[t]+=1;return delete this.indexes[t],i}every(e){return this.nodes.every(e)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}getProxyProcessor(){return{get(e,t){return t===\"proxyOf\"?e:e[t]?t===\"each\"||typeof t==\"string\"&&t.startsWith(\"walk\")?(...r)=>e[t](...r.map(i=>typeof i==\"function\"?(n,o)=>i(n.toProxy(),o):i)):t===\"every\"||t===\"some\"?r=>e[t]((i,...n)=>r(i.toProxy(),...n)):t===\"root\"?()=>e.root().toProxy():t===\"nodes\"?e.nodes.map(r=>r.toProxy()):t===\"first\"||t===\"last\"?e[t].toProxy():e[t]:e[t]},set(e,t,r){return e[t]===r||(e[t]=r,(t===\"name\"||t===\"params\"||t===\"selector\")&&e.markDirty()),!0}}}index(e){return typeof e==\"number\"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,t){let r=this.index(e),i=this.normalize(t,this.proxyOf.nodes[r]).reverse();r=this.index(e);for(let o of i)this.proxyOf.nodes.splice(r+1,0,o);let n;for(let o in this.indexes)n=this.indexes[o],r<n&&(this.indexes[o]=n+i.length);return this.markDirty(),this}insertBefore(e,t){let r=this.index(e),i=r===0?\"prepend\":!1,n=this.normalize(t,this.proxyOf.nodes[r],i).reverse();r=this.index(e);for(let l of n)this.proxyOf.nodes.splice(r,0,l);let o;for(let l in this.indexes)o=this.indexes[l],r<=o&&(this.indexes[l]=o+n.length);return this.markDirty(),this}normalize(e,t){if(typeof e==\"string\")e=Jn(Yn(e).nodes);else if(typeof e==\"undefined\")e=[];else if(Array.isArray(e)){e=e.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type===\"root\"&&this.type!==\"document\"){e=e.nodes.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,\"ignore\")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value==\"undefined\")throw new Error(\"Value field is missed in node creation\");typeof e.value!=\"string\"&&(e.value=String(e.value)),e=[new jn(e)]}else if(e.selector)e=[new Rs(e)];else if(e.name)e=[new As(e)];else if(e.text)e=[new Hn(e)];else throw new Error(\"Unknown node type in node creation\");return e.map(i=>(i[Vn]||Kn.rebuild(i),i=i.proxyOf,i.parent&&i.parent.removeChild(i),i[Gn]&&Xn(i),typeof i.raws.before==\"undefined\"&&t&&typeof t.raws.before!=\"undefined\"&&(i.raws.before=t.raws.before.replace(/\\\\S/g,\"\")),i.parent=this.proxyOf,i))}prepend(...e){e=e.reverse();for(let t of e){let r=this.normalize(t,this.first,\"prepend\").reverse();for(let i of r)this.proxyOf.nodes.unshift(i);for(let i in this.indexes)this.indexes[i]=this.indexes[i]+r.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let t;for(let r in this.indexes)t=this.indexes[r],t>=e&&(this.indexes[r]=t-1);return this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls(i=>{t.props&&!t.props.includes(i.prop)||t.fast&&!i.value.includes(t.fast)||(i.value=i.value.replace(e,r))}),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){return this.each((t,r)=>{let i;try{i=e(t,r)}catch(n){throw t.addToError(n)}return i!==!1&&t.walk&&(i=t.walk(e)),i})}walkAtRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"atrule\"&&e.test(r.name))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"atrule\"&&r.name===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"atrule\")return t(r,i)}))}walkComments(e){return this.walk((t,r)=>{if(t.type===\"comment\")return e(t,r)})}walkDecls(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"decl\"&&e.test(r.prop))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"decl\"&&r.prop===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"decl\")return t(r,i)}))}walkRules(e,t){return t?e instanceof RegExp?this.walk((r,i)=>{if(r.type===\"rule\"&&e.test(r.selector))return t(r,i)}):this.walk((r,i)=>{if(r.type===\"rule\"&&r.selector===e)return t(r,i)}):(t=e,this.walk((r,i)=>{if(r.type===\"rule\")return t(r,i)}))}get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}};pe.registerParse=s=>{Yn=s};pe.registerRule=s=>{Rs=s};pe.registerAtRule=s=>{As=s};pe.registerRoot=s=>{Zn=s};var Ie=pe;pe.default=pe;pe.rebuild=s=>{s.type===\"atrule\"?Object.setPrototypeOf(s,As.prototype):s.type===\"rule\"?Object.setPrototypeOf(s,Rs.prototype):s.type===\"decl\"?Object.setPrototypeOf(s,jn.prototype):s.type===\"comment\"?Object.setPrototypeOf(s,Hn.prototype):s.type===\"root\"&&Object.setPrototypeOf(s,Zn.prototype),s[Vn]=!0,s.nodes&&s.nodes.forEach(e=>{pe.rebuild(e)})};let rc=Ie,Qn,qn,qe=class extends rc{constructor(e){super(x({type:\"document\"},e)),this.nodes||(this.nodes=[])}toResult(e={}){return new Qn(new qn,this,e).stringify()}};qe.registerLazyResult=s=>{Qn=s};qe.registerProcessor=s=>{qn=s};var Ms=qe;qe.default=qe;let rs=class{constructor(e,t={}){if(this.type=\"warning\",this.text=e,t.node&&t.node.source){let r=t.node.rangeBy(t);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(let r in t)this[r]=t[r]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+\": \"+this.text:this.text}};var eo=rs;rs.default=rs;let sc=eo,ss=class{constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new sc(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter(e=>e.type===\"warning\")}get content(){return this.css}};var Es=ss;ss.default=ss;const Or=39,Ci=34,Ot=92,vi=47,Rt=10,Ge=32,At=12,Mt=9,Et=13,ic=91,nc=93,oc=40,ac=41,lc=123,uc=125,cc=59,hc=42,fc=58,pc=64,$t=/[\\\\t\\\\n\\\\f\\\\r \"#'()/;[\\\\\\\\\\\\]{}]/g,Nt=/[\\\\t\\\\n\\\\f\\\\r !\"#'():;@[\\\\\\\\\\\\]{}]|\\\\/(?=\\\\*)/g,dc=/.[\\\\r\\\\n\"'(/\\\\\\\\]/,Ii=/[\\\\da-f]/i;var mc=function(e,t={}){let r=e.css.valueOf(),i=t.ignoreErrors,n,o,l,a,u,c,h,d,m,g,p=r.length,f=0,S=[],b=[];function y(){return f}function C(_){throw e.error(\"Unclosed \"+_,f)}function N(){return b.length===0&&f>=p}function D(_){if(b.length)return b.pop();if(f>=p)return;let G=_?_.ignoreUnclosed:!1;switch(n=r.charCodeAt(f),n){case Rt:case Ge:case Mt:case Et:case At:{o=f;do o+=1,n=r.charCodeAt(o);while(n===Ge||n===Rt||n===Mt||n===Et||n===At);g=[\"space\",r.slice(f,o)],f=o-1;break}case ic:case nc:case lc:case uc:case fc:case cc:case ac:{let Y=String.fromCharCode(n);g=[Y,Y,f];break}case oc:{if(d=S.length?S.pop()[1]:\"\",m=r.charCodeAt(f+1),d===\"url\"&&m!==Or&&m!==Ci&&m!==Ge&&m!==Rt&&m!==Mt&&m!==At&&m!==Et){o=f;do{if(c=!1,o=r.indexOf(\")\",o+1),o===-1)if(i||G){o=f;break}else C(\"bracket\");for(h=o;r.charCodeAt(h-1)===Ot;)h-=1,c=!c}while(c);g=[\"brackets\",r.slice(f,o+1),f,o],f=o}else o=r.indexOf(\")\",f+1),a=r.slice(f,o+1),o===-1||dc.test(a)?g=[\"(\",\"(\",f]:(g=[\"brackets\",a,f,o],f=o);break}case Or:case Ci:{l=n===Or?\"'\":'\"',o=f;do{if(c=!1,o=r.indexOf(l,o+1),o===-1)if(i||G){o=f+1;break}else C(\"string\");for(h=o;r.charCodeAt(h-1)===Ot;)h-=1,c=!c}while(c);g=[\"string\",r.slice(f,o+1),f,o],f=o;break}case pc:{$t.lastIndex=f+1,$t.test(r),$t.lastIndex===0?o=r.length-1:o=$t.lastIndex-2,g=[\"at-word\",r.slice(f,o+1),f,o],f=o;break}case Ot:{for(o=f,u=!0;r.charCodeAt(o+1)===Ot;)o+=1,u=!u;if(n=r.charCodeAt(o+1),u&&n!==vi&&n!==Ge&&n!==Rt&&n!==Mt&&n!==Et&&n!==At&&(o+=1,Ii.test(r.charAt(o)))){for(;Ii.test(r.charAt(o+1));)o+=1;r.charCodeAt(o+1)===Ge&&(o+=1)}g=[\"word\",r.slice(f,o+1),f,o],f=o;break}default:{n===vi&&r.charCodeAt(f+1)===hc?(o=r.indexOf(\"*/\",f+2)+1,o===0&&(i||G?o=r.length:C(\"comment\")),g=[\"comment\",r.slice(f,o+1),f,o],f=o):(Nt.lastIndex=f+1,Nt.test(r),Nt.lastIndex===0?o=r.length-1:o=Nt.lastIndex-2,g=[\"word\",r.slice(f,o+1),f,o],S.push(g),f=o);break}}return f++,g}function H(_){b.push(_)}return{back:H,endOfFile:N,nextToken:D,position:y}};let to=Ie,Jt=class extends to{constructor(e){super(e),this.type=\"atrule\"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};var $s=Jt;Jt.default=Jt;to.registerAtRule(Jt);let ro=Ie,so,io,De=class extends ro{constructor(e){super(e),this.type=\"root\",this.nodes||(this.nodes=[])}normalize(e,t,r){let i=super.normalize(e);if(t){if(r===\"prepend\")this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let n of i)n.raws.before=t.raws.before}return i}removeChild(e,t){let r=this.index(e);return!t&&r===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}toResult(e={}){return new so(new io,this,e).stringify()}};De.registerLazyResult=s=>{so=s};De.registerProcessor=s=>{io=s};var at=De;De.default=De;ro.registerRoot(De);let et={comma(s){return et.split(s,[\",\"],!0)},space(s){let e=[\" \",\\`\n\\`,\"\t\"];return et.split(s,e)},split(s,e,t){let r=[],i=\"\",n=!1,o=0,l=!1,a=\"\",u=!1;for(let c of s)u?u=!1:c===\"\\\\\\\\\"?u=!0:l?c===a&&(l=!1):c==='\"'||c===\"'\"?(l=!0,a=c):c===\"(\"?o+=1:c===\")\"?o>0&&(o-=1):o===0&&e.includes(c)&&(n=!0),n?(i!==\"\"&&r.push(i.trim()),i=\"\",n=!1):i+=c;return(t||i!==\"\")&&r.push(i.trim()),r}};var no=et;et.default=et;let oo=Ie,gc=no,Xt=class extends oo{constructor(e){super(e),this.type=\"rule\",this.nodes||(this.nodes=[])}get selectors(){return gc.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\\\\s*/):null,r=t?t[0]:\",\"+this.raw(\"between\",\"beforeOpen\");this.selector=e.join(r)}};var Ns=Xt;Xt.default=Xt;oo.registerRule(Xt);let yc=lr,wc=mc,Sc=cr,bc=$s,Cc=at,xi=Ns;const Oi={empty:!0,space:!0};function vc(s){for(let e=s.length-1;e>=0;e--){let t=s[e],r=t[3]||t[2];if(r)return r}}let Ic=class{constructor(e){this.input=e,this.root=new Cc,this.current=this.root,this.spaces=\"\",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{column:1,line:1,offset:0}}}atrule(e){let t=new bc;t.name=e[1].slice(1),t.name===\"\"&&this.unnamedAtrule(t,e),this.init(t,e[2]);let r,i,n,o=!1,l=!1,a=[],u=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),r=e[0],r===\"(\"||r===\"[\"?u.push(r===\"(\"?\")\":\"]\"):r===\"{\"&&u.length>0?u.push(\"}\"):r===u[u.length-1]&&u.pop(),u.length===0)if(r===\";\"){t.source.end=this.getPosition(e[2]),t.source.end.offset++,this.semicolon=!0;break}else if(r===\"{\"){l=!0;break}else if(r===\"}\"){if(a.length>0){for(n=a.length-1,i=a[n];i&&i[0]===\"space\";)i=a[--n];i&&(t.source.end=this.getPosition(i[3]||i[2]),t.source.end.offset++)}this.end(e);break}else a.push(e);else a.push(e);if(this.tokenizer.endOfFile()){o=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(a),a.length?(t.raws.afterName=this.spacesAndCommentsFromStart(a),this.raw(t,\"params\",a),o&&(e=a[a.length-1],t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++,this.spaces=t.raws.between,t.raws.between=\"\")):(t.raws.afterName=\"\",t.params=\"\"),l&&(t.nodes=[],this.current=t)}checkMissedSemicolon(e){let t=this.colon(e);if(t===!1)return;let r=0,i;for(let n=t-1;n>=0&&(i=e[n],!(i[0]!==\"space\"&&(r+=1,r===2)));n--);throw this.input.error(\"Missed semicolon\",i[0]===\"word\"?i[3]+1:i[2])}colon(e){let t=0,r,i,n;for(let[o,l]of e.entries()){if(r=l,i=r[0],i===\"(\"&&(t+=1),i===\")\"&&(t-=1),t===0&&i===\":\")if(!n)this.doubleColon(r);else{if(n[0]===\"word\"&&n[1]===\"progid\")continue;return o}n=r}return!1}comment(e){let t=new Sc;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]),t.source.end.offset++;let r=e[1].slice(2,-2);if(/^\\\\s*$/.test(r))t.text=\"\",t.raws.left=r,t.raws.right=\"\";else{let i=r.match(/^(\\\\s*)([^]*\\\\S)(\\\\s*)$/);t.text=i[2],t.raws.left=i[1],t.raws.right=i[3]}}createTokenizer(){this.tokenizer=wc(this.input)}decl(e,t){let r=new yc;this.init(r,e[0][2]);let i=e[e.length-1];for(i[0]===\";\"&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(i[3]||i[2]||vc(e)),r.source.end.offset++;e[0][0]!==\"word\";)e.length===1&&this.unknownWord(e),r.raws.before+=e.shift()[1];for(r.source.start=this.getPosition(e[0][2]),r.prop=\"\";e.length;){let u=e[0][0];if(u===\":\"||u===\"space\"||u===\"comment\")break;r.prop+=e.shift()[1]}r.raws.between=\"\";let n;for(;e.length;)if(n=e.shift(),n[0]===\":\"){r.raws.between+=n[1];break}else n[0]===\"word\"&&/\\\\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1];(r.prop[0]===\"_\"||r.prop[0]===\"*\")&&(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let o=[],l;for(;e.length&&(l=e[0][0],!(l!==\"space\"&&l!==\"comment\"));)o.push(e.shift());this.precheckMissedSemicolon(e);for(let u=e.length-1;u>=0;u--){if(n=e[u],n[1].toLowerCase()===\"!important\"){r.important=!0;let c=this.stringFrom(e,u);c=this.spacesFromEnd(e)+c,c!==\" !important\"&&(r.raws.important=c);break}else if(n[1].toLowerCase()===\"important\"){let c=e.slice(0),h=\"\";for(let d=u;d>0;d--){let m=c[d][0];if(h.trim().indexOf(\"!\")===0&&m!==\"space\")break;h=c.pop()[1]+h}h.trim().indexOf(\"!\")===0&&(r.important=!0,r.raws.important=h,e=c)}if(n[0]!==\"space\"&&n[0]!==\"comment\")break}e.some(u=>u[0]!==\"space\"&&u[0]!==\"comment\")&&(r.raws.between+=o.map(u=>u[1]).join(\"\"),o=[]),this.raw(r,\"value\",o.concat(e),t),r.value.includes(\":\")&&!t&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error(\"Double colon\",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let t=new xi;this.init(t,e[2]),t.selector=\"\",t.raws.between=\"\",this.current=t}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.spaces=\"\",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let t=this.current.nodes[this.current.nodes.length-1];t&&t.type===\"rule\"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces=\"\")}}getPosition(e){let t=this.input.fromOffset(e);return{column:t.col,line:t.line,offset:e}}init(e,t){this.current.push(e),e.source={input:this.input,start:this.getPosition(t)},e.raws.before=this.spaces,this.spaces=\"\",e.type!==\"comment\"&&(this.semicolon=!1)}other(e){let t=!1,r=null,i=!1,n=null,o=[],l=e[1].startsWith(\"--\"),a=[],u=e;for(;u;){if(r=u[0],a.push(u),r===\"(\"||r===\"[\")n||(n=u),o.push(r===\"(\"?\")\":\"]\");else if(l&&i&&r===\"{\")n||(n=u),o.push(\"}\");else if(o.length===0)if(r===\";\")if(i){this.decl(a,l);return}else break;else if(r===\"{\"){this.rule(a);return}else if(r===\"}\"){this.tokenizer.back(a.pop()),t=!0;break}else r===\":\"&&(i=!0);else r===o[o.length-1]&&(o.pop(),o.length===0&&(n=null));u=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),o.length>0&&this.unclosedBracket(n),t&&i){if(!l)for(;a.length&&(u=a[a.length-1][0],!(u!==\"space\"&&u!==\"comment\"));)this.tokenizer.back(a.pop());this.decl(a,l)}else this.unknownWord(a)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case\"space\":this.spaces+=e[1];break;case\";\":this.freeSemicolon(e);break;case\"}\":this.end(e);break;case\"comment\":this.comment(e);break;case\"at-word\":this.atrule(e);break;case\"{\":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}precheckMissedSemicolon(){}raw(e,t,r,i){let n,o,l=r.length,a=\"\",u=!0,c,h;for(let d=0;d<l;d+=1)n=r[d],o=n[0],o===\"space\"&&d===l-1&&!i?u=!1:o===\"comment\"?(h=r[d-1]?r[d-1][0]:\"empty\",c=r[d+1]?r[d+1][0]:\"empty\",!Oi[h]&&!Oi[c]?a.slice(-1)===\",\"?u=!1:a+=n[1]:u=!1):a+=n[1];if(!u){let d=r.reduce((m,g)=>m+g[1],\"\");e.raws[t]={raw:d,value:a}}e[t]=a}rule(e){e.pop();let t=new xi;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,\"selector\",e),this.current=t}spacesAndCommentsFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],!(t!==\"space\"&&t!==\"comment\"));)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let t,r=\"\";for(;e.length&&(t=e[0][0],!(t!==\"space\"&&t!==\"comment\"));)r+=e.shift()[1];return r}spacesFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],t===\"space\");)r=e.pop()[1]+r;return r}stringFrom(e,t){let r=\"\";for(let i=t;i<e.length;i++)r+=e[i][1];return e.splice(t,e.length-t),r}unclosedBlock(){let e=this.current.source.start;throw this.input.error(\"Unclosed block\",e.line,e.column)}unclosedBracket(e){throw this.input.error(\"Unclosed bracket\",{offset:e[2]},{offset:e[2]+1})}unexpectedClose(e){throw this.input.error(\"Unexpected }\",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error(\"Unknown word\",{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unnamedAtrule(e,t){throw this.input.error(\"At-rule without name\",{offset:t[2]},{offset:t[2]+t[1].length})}};var xc=Ic;let Oc=Ie,Rc=xc,Ac=ur;function Kt(s,e){let t=new Ac(s,e),r=new Rc(t);try{r.parse()}catch(i){throw i}return r.root}var ks=Kt;Kt.default=Kt;Oc.registerParse(Kt);let{isClean:ce,my:Mc}=ot,Ec=Wn,$c=or,Nc=Ie,kc=Ms;let Ri=Es,Pc=ks,Dc=at;const Lc={atrule:\"AtRule\",comment:\"Comment\",decl:\"Declaration\",document:\"Document\",root:\"Root\",rule:\"Rule\"},Tc={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},_c={Once:!0,postcssPlugin:!0,prepare:!0},Le=0;function Ve(s){return typeof s==\"object\"&&typeof s.then==\"function\"}function ao(s){let e=!1,t=Lc[s.type];return s.type===\"decl\"?e=s.prop.toLowerCase():s.type===\"atrule\"&&(e=s.name.toLowerCase()),e&&s.append?[t,t+\"-\"+e,Le,t+\"Exit\",t+\"Exit-\"+e]:e?[t,t+\"-\"+e,t+\"Exit\",t+\"Exit-\"+e]:s.append?[t,Le,t+\"Exit\"]:[t,t+\"Exit\"]}function Ai(s){let e;return s.type===\"document\"?e=[\"Document\",Le,\"DocumentExit\"]:s.type===\"root\"?e=[\"Root\",Le,\"RootExit\"]:e=ao(s),{eventIndex:0,events:e,iterator:0,node:s,visitorIndex:0,visitors:[]}}function is(s){return s[ce]=!1,s.nodes&&s.nodes.forEach(e=>is(e)),s}let ns={},Te=class lo{constructor(e,t,r){this.stringified=!1,this.processed=!1;let i;if(typeof t==\"object\"&&t!==null&&(t.type===\"root\"||t.type===\"document\"))i=is(t);else if(t instanceof lo||t instanceof Ri)i=is(t.root),t.map&&(typeof r.map==\"undefined\"&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let n=Pc;r.syntax&&(n=r.syntax.parse),r.parser&&(n=r.parser),n.parse&&(n=n.parse);try{i=n(t,r)}catch(o){this.processed=!0,this.error=o}i&&!i[Mc]&&Nc.rebuild(i)}this.result=new Ri(e,i,r),this.helpers=ee(x({},ns),{postcss:ns,result:this.result}),this.plugins=this.processor.plugins.map(n=>typeof n==\"object\"&&n.prepare?x(x({},n),n.prepare(this.result)):n)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error(\"Use process(css).then(cb) to work with async plugins\")}handleError(e,t){let r=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,e.name===\"CssSyntaxError\"&&!e.plugin?(e.plugin=r.postcssPlugin,e.setMessage()):r.postcssVersion}catch(i){console&&console.error&&console.error(i)}return e}prepareVisitors(){this.listeners={};let e=(t,r,i)=>{this.listeners[r]||(this.listeners[r]=[]),this.listeners[r].push([t,i])};for(let t of this.plugins)if(typeof t==\"object\")for(let r in t){if(!Tc[r]&&/^[A-Z]/.test(r))throw new Error(\\`Unknown event \\${r} in \\${t.postcssPlugin}. Try to update PostCSS (\\${this.processor.version} now).\\`);if(!_c[r])if(typeof t[r]==\"object\")for(let i in t[r])i===\"*\"?e(t,r,t[r][i]):e(t,r+\"-\"+i.toLowerCase(),t[r][i]);else typeof t[r]==\"function\"&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let t=this.plugins[e],r=this.runOnRoot(t);if(Ve(r))try{await r}catch(i){throw this.handleError(i)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ce];){e[ce]=!0;let t=[Ai(e)];for(;t.length>0;){let r=this.visitTick(t);if(Ve(r))try{await r}catch(i){let n=t[t.length-1].node;throw this.handleError(i,n)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if(e.type===\"document\"){let i=e.nodes.map(n=>r(n,this.helpers));await Promise.all(i)}else await r(e,this.helpers)}catch(i){throw this.handleError(i)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e==\"object\"&&e.Once){if(this.result.root.type===\"document\"){let t=this.result.root.nodes.map(r=>e.Once(r,this.helpers));return Ve(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}else if(typeof e==\"function\")return e(this.result.root,this.result)}catch(t){throw this.handleError(t)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=$c;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let i=new Ec(t,this.result.root,this.result.opts).generate();return this.result.css=i[0],this.result.map=i[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let t=this.runOnRoot(e);if(Ve(t))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[ce];)e[ce]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type===\"document\")for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,t){return this.async().then(e,t)}toString(){return this.css}visitSync(e,t){for(let[r,i]of e){this.result.lastPlugin=r;let n;try{n=i(t,this.helpers)}catch(o){throw this.handleError(o,t.proxyOf)}if(t.type!==\"root\"&&t.type!==\"document\"&&!t.parent)return!0;if(Ve(n))throw this.getAsyncError()}}visitTick(e){let t=e[e.length-1],{node:r,visitors:i}=t;if(r.type!==\"root\"&&r.type!==\"document\"&&!r.parent){e.pop();return}if(i.length>0&&t.visitorIndex<i.length){let[o,l]=i[t.visitorIndex];t.visitorIndex+=1,t.visitorIndex===i.length&&(t.visitors=[],t.visitorIndex=0),this.result.lastPlugin=o;try{return l(r.toProxy(),this.helpers)}catch(a){throw this.handleError(a,r)}}if(t.iterator!==0){let o=t.iterator,l;for(;l=r.nodes[r.indexes[o]];)if(r.indexes[o]+=1,!l[ce]){l[ce]=!0,e.push(Ai(l));return}t.iterator=0,delete r.indexes[o]}let n=t.events;for(;t.eventIndex<n.length;){let o=n[t.eventIndex];if(t.eventIndex+=1,o===Le){r.nodes&&r.nodes.length&&(r[ce]=!0,t.iterator=r.getIterator());return}else if(this.listeners[o]){t.visitors=this.listeners[o];return}}e.pop()}walkSync(e){e[ce]=!0;let t=ao(e);for(let r of t)if(r===Le)e.nodes&&e.each(i=>{i[ce]||this.walkSync(i)});else{let i=this.listeners[r];if(i&&this.visitSync(i,e.toProxy()))return}}warnings(){return this.sync().warnings()}get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return\"LazyResult\"}};Te.registerPostcss=s=>{ns=s};var uo=Te;Te.default=Te;Dc.registerLazyResult(Te);kc.registerLazyResult(Te);let Fc=Wn,Uc=or;let Bc=ks;const zc=Es;let os=class{constructor(e,t,r){t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=r,this._map=void 0;let i,n=Uc;this.result=new zc(this._processor,i,this._opts),this.result.css=t;let o=this;Object.defineProperty(this.result,\"root\",{get(){return o.root}});let l=new Fc(n,i,this._opts,t);if(l.isMap()){let[a,u]=l.generate();a&&(this.result.css=a),u&&(this.result.map=u)}else l.clearAnnotation(),this.result.css=l.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,t){return this.async().then(e,t)}toString(){return this._css}warnings(){return[]}get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,t=Bc;try{e=t(this._css,this._opts)}catch(r){this.error=r}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return\"NoWorkResult\"}};var Wc=os;os.default=os;let Gc=Wc,Vc=uo,jc=Ms,Hc=at,tt=class{constructor(e=[]){this.version=\"8.4.38\",this.plugins=this.normalize(e)}normalize(e){let t=[];for(let r of e)if(r.postcss===!0?r=r():r.postcss&&(r=r.postcss),typeof r==\"object\"&&Array.isArray(r.plugins))t=t.concat(r.plugins);else if(typeof r==\"object\"&&r.postcssPlugin)t.push(r);else if(typeof r==\"function\")t.push(r);else if(!(typeof r==\"object\"&&(r.parse||r.stringify)))throw new Error(r+\" is not a PostCSS plugin\");return t}process(e,t={}){return!this.plugins.length&&!t.parser&&!t.stringifier&&!t.syntax?new Gc(this,e,t):new Vc(this,e,t)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};var Yc=tt;tt.default=tt;Hc.registerProcessor(tt);jc.registerProcessor(tt);let Zc=lr,Jc=_n,Xc=cr,Kc=$s,Qc=ur,qc=at,eh=Ns;function rt(s,e){if(Array.isArray(s))return s.map(o=>rt(o));let i=s,{inputs:t}=i,r=xe(i,[\"inputs\"]);if(t){e=[];for(let o of t){let l=ee(x({},o),{__proto__:Qc.prototype});l.map&&(l.map=ee(x({},l.map),{__proto__:Jc.prototype})),e.push(l)}}if(r.nodes&&(r.nodes=s.nodes.map(o=>rt(o,e))),r.source){let n=r.source,{inputId:o}=n,l=xe(n,[\"inputId\"]);r.source=l,o!=null&&(r.source.input=e[o])}if(r.type===\"root\")return new qc(r);if(r.type===\"decl\")return new Zc(r);if(r.type===\"rule\")return new eh(r);if(r.type===\"comment\")return new Xc(r);if(r.type===\"atrule\")return new Kc(r);throw new Error(\"Unknown node type: \"+s.type)}var th=rt;rt.default=rt;let rh=Os,co=lr,sh=uo,ih=Ie,Ps=Yc,nh=or,oh=th,ho=Ms,ah=eo,fo=cr,po=$s,lh=Es,uh=ur,ch=ks,hh=no,mo=Ns,go=at,fh=ar;function $(...s){return s.length===1&&Array.isArray(s[0])&&(s=s[0]),new Ps(s)}$.plugin=function(e,t){let r=!1;function i(...o){console&&console.warn&&!r&&(r=!0,console.warn(e+\\`: postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\\`),process.env.LANG&&process.env.LANG.startsWith(\"cn\")&&console.warn(e+\\`: \\\\u91CC\\\\u9762 postcss.plugin \\\\u88AB\\\\u5F03\\\\u7528. \\\\u8FC1\\\\u79FB\\\\u6307\\\\u5357:\nhttps://www.w3ctech.com/topic/2226\\`));let l=t(...o);return l.postcssPlugin=e,l.postcssVersion=new Ps().version,l}let n;return Object.defineProperty(i,\"postcss\",{get(){return n||(n=i()),n}}),i.process=function(o,l,a){return $([i(a)]).process(o,l)},i};$.stringify=nh;$.parse=ch;$.fromJSON=oh;$.list=hh;$.comment=s=>new fo(s);$.atRule=s=>new po(s);$.decl=s=>new co(s);$.rule=s=>new mo(s);$.root=s=>new go(s);$.document=s=>new ho(s);$.CssSyntaxError=rh;$.Declaration=co;$.Container=ih;$.Processor=Ps;$.Document=ho;$.Comment=fo;$.Warning=ah;$.AtRule=po;$.Result=lh;$.Input=uh;$.Rule=mo;$.Root=go;$.Node=fh;sh.registerPostcss($);var ph=$;$.default=$;const U=Ou(ph);U.stringify;U.fromJSON;U.plugin;U.parse;U.list;U.document;U.comment;U.atRule;U.rule;U.decl;U.root;U.CssSyntaxError;U.Declaration;U.Container;U.Processor;U.Document;U.Comment;U.Warning;U.AtRule;U.Result;U.Input;U.Rule;U.Root;U.Node;class Ds{constructor(...e){te(this,\"parentElement\",null),te(this,\"parentNode\",null),te(this,\"ownerDocument\"),te(this,\"firstChild\",null),te(this,\"lastChild\",null),te(this,\"previousSibling\",null),te(this,\"nextSibling\",null),te(this,\"ELEMENT_NODE\",1),te(this,\"TEXT_NODE\",3),te(this,\"nodeType\"),te(this,\"nodeName\"),te(this,\"RRNodeType\")}get childNodes(){const e=[];let t=this.firstChild;for(;t;)e.push(t),t=t.nextSibling;return e}contains(e){if(e instanceof Ds){if(e.ownerDocument!==this.ownerDocument)return!1;if(e===this)return!0}else return!1;for(;e.parentNode;){if(e.parentNode===this)return!0;e=e.parentNode}return!1}appendChild(e){throw new Error(\"RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.\")}insertBefore(e,t){throw new Error(\"RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.\")}removeChild(e){throw new Error(\"RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.\")}toString(){return\"RRNode\"}}const Mi={Node:[\"childNodes\",\"parentNode\",\"parentElement\",\"textContent\"],ShadowRoot:[\"host\",\"styleSheets\"],Element:[\"shadowRoot\",\"querySelector\",\"querySelectorAll\"],MutationObserver:[]},Ei={Node:[\"contains\",\"getRootNode\"],ShadowRoot:[\"getSelection\"],Element:[],MutationObserver:[\"constructor\"]},kt={},dh=()=>!!globalThis.Zone;function Ls(s){if(kt[s])return kt[s];const e=globalThis[s],t=e.prototype,r=s in Mi?Mi[s]:void 0,i=!!(r&&r.every(l=>{var a,u;return!!((u=(a=Object.getOwnPropertyDescriptor(t,l))==null?void 0:a.get)!=null&&u.toString().includes(\"[native code]\"))})),n=s in Ei?Ei[s]:void 0,o=!!(n&&n.every(l=>{var a;return typeof t[l]==\"function\"&&((a=t[l])==null?void 0:a.toString().includes(\"[native code]\"))}));if(i&&o&&!dh())return kt[s]=e.prototype,e.prototype;try{const l=document.createElement(\"iframe\");document.body.appendChild(l);const a=l.contentWindow;if(!a)return e.prototype;const u=a[s].prototype;return document.body.removeChild(l),u?kt[s]=u:t}catch(l){return t}}const Rr={};function ge(s,e,t){var r;const i=\\`\\${s}.\\${String(t)}\\`;if(Rr[i])return Rr[i].call(e);const n=Ls(s),o=(r=Object.getOwnPropertyDescriptor(n,t))==null?void 0:r.get;return o?(Rr[i]=o,o.call(e)):e[t]}const Ar={};function yo(s,e,t){const r=\\`\\${s}.\\${String(t)}\\`;if(Ar[r])return Ar[r].bind(e);const n=Ls(s)[t];return typeof n!=\"function\"?e[t]:(Ar[r]=n,n.bind(e))}function mh(s){return ge(\"Node\",s,\"childNodes\")}function gh(s){return ge(\"Node\",s,\"parentNode\")}function yh(s){return ge(\"Node\",s,\"parentElement\")}function wh(s){return ge(\"Node\",s,\"textContent\")}function Sh(s,e){return yo(\"Node\",s,\"contains\")(e)}function bh(s){return yo(\"Node\",s,\"getRootNode\")()}function Ch(s){return!s||!(\"host\"in s)?null:ge(\"ShadowRoot\",s,\"host\")}function vh(s){return s.styleSheets}function Ih(s){return!s||!(\"shadowRoot\"in s)?null:ge(\"Element\",s,\"shadowRoot\")}function xh(s,e){return ge(\"Element\",s,\"querySelector\")(e)}function Oh(s,e){return ge(\"Element\",s,\"querySelectorAll\")(e)}function wo(){return Ls(\"MutationObserver\").constructor}const v={childNodes:mh,parentNode:gh,parentElement:yh,textContent:wh,contains:Sh,getRootNode:bh,host:Ch,styleSheets:vh,shadowRoot:Ih,querySelector:xh,querySelectorAll:Oh,mutationObserver:wo};function J(s,e,t=document){const r={capture:!0,passive:!0};return t.addEventListener(s,e,r),()=>t.removeEventListener(s,e,r)}const Re=\\`Please stop import mirror directly. Instead of that,\\\\r\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\\\r\nor you can use record.mirror to access the mirror instance during recording.\\`;let $i={map:{},getId(){return console.error(Re),-1},getNode(){return console.error(Re),null},removeNodeFromMap(){console.error(Re)},has(){return console.error(Re),!1},reset(){console.error(Re)}};typeof window!=\"undefined\"&&window.Proxy&&window.Reflect&&($i=new Proxy($i,{get(s,e,t){return e===\"map\"&&console.error(Re),Reflect.get(s,e,t)}}));function st(s,e,t={}){let r=null,i=0;return function(...n){const o=Date.now();!i&&t.leading===!1&&(i=o);const l=e-(o-i),a=this;l<=0||l>e?(r&&(clearTimeout(r),r=null),i=o,s.apply(a,n)):!r&&t.trailing!==!1&&(r=setTimeout(()=>{i=t.leading===!1?0:Date.now(),r=null,s.apply(a,n)},l))}}function hr(s,e,t,r,i=window){const n=i.Object.getOwnPropertyDescriptor(s,e);return i.Object.defineProperty(s,e,r?t:{set(o){setTimeout(()=>{t.set.call(this,o)},0),n&&n.set&&n.set.call(this,o)}}),()=>hr(s,e,n||{},!0)}function Fe(s,e,t){try{if(!(e in s))return()=>{};const r=s[e],i=t(r);return typeof i==\"function\"&&(i.prototype=i.prototype||{},Object.defineProperties(i,{__rrweb_original__:{enumerable:!1,value:r}})),s[e]=i,()=>{s[e]=r}}catch(r){return()=>{}}}let Qt=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(Qt=()=>new Date().getTime());function So(s){var e,t,r,i;const n=s.document;return{left:n.scrollingElement?n.scrollingElement.scrollLeft:s.pageXOffset!==void 0?s.pageXOffset:n.documentElement.scrollLeft||(n==null?void 0:n.body)&&((e=v.parentElement(n.body))==null?void 0:e.scrollLeft)||((t=n==null?void 0:n.body)==null?void 0:t.scrollLeft)||0,top:n.scrollingElement?n.scrollingElement.scrollTop:s.pageYOffset!==void 0?s.pageYOffset:(n==null?void 0:n.documentElement.scrollTop)||(n==null?void 0:n.body)&&((r=v.parentElement(n.body))==null?void 0:r.scrollTop)||((i=n==null?void 0:n.body)==null?void 0:i.scrollTop)||0}}function bo(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function Co(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function vo(s){return s?s.nodeType===s.ELEMENT_NODE?s:v.parentElement(s):null}function X(s,e,t,r){if(!s)return!1;const i=vo(s);if(!i)return!1;try{if(typeof e==\"string\"){if(i.classList.contains(e)||r&&i.closest(\".\"+e)!==null)return!0}else if(Gt(i,e,r))return!0}catch(n){}return!!(t&&(i.matches(t)||r&&i.closest(t)!==null))}function Rh(s,e){return e.getId(s)!==-1}function Mr(s,e,t){return s.tagName===\"TITLE\"&&t.headTitleMutations?!0:e.getId(s)===Ze}function Io(s,e){if(je(s))return!1;const t=e.getId(s);if(!e.has(t))return!0;const r=v.parentNode(s);return r&&r.nodeType===s.DOCUMENT_NODE?!1:r?Io(r,e):!0}function as(s){return!!s.changedTouches}function Ah(s=window){\"NodeList\"in s&&!s.NodeList.prototype.forEach&&(s.NodeList.prototype.forEach=Array.prototype.forEach),\"DOMTokenList\"in s&&!s.DOMTokenList.prototype.forEach&&(s.DOMTokenList.prototype.forEach=Array.prototype.forEach)}function xo(s,e){return!!(s.nodeName===\"IFRAME\"&&e.getMeta(s))}function Oo(s,e){return!!(s.nodeName===\"LINK\"&&s.nodeType===s.ELEMENT_NODE&&s.getAttribute&&s.getAttribute(\"rel\")===\"stylesheet\"&&e.getMeta(s))}function ls(s){return s?s instanceof Ds&&\"shadowRoot\"in s?!!s.shadowRoot:!!v.shadowRoot(s):!1}class Mh{constructor(){w(this,\"id\",1),w(this,\"styleIDMap\",new WeakMap),w(this,\"idStyleMap\",new Map)}getId(e){var t;return(t=this.styleIDMap.get(e))!=null?t:-1}has(e){return this.styleIDMap.has(e)}add(e,t){if(this.has(e))return this.getId(e);let r;return t===void 0?r=this.id++:r=t,this.styleIDMap.set(e,r),this.idStyleMap.set(r,e),r}getStyle(e){return this.idStyleMap.get(e)||null}reset(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1}generateId(){return this.id++}}function Ro(s){var e;let t=null;return\"getRootNode\"in s&&((e=v.getRootNode(s))==null?void 0:e.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&v.host(v.getRootNode(s))&&(t=v.host(v.getRootNode(s))),t}function Eh(s){let e=s,t;for(;t=Ro(e);)e=t;return e}function $h(s){const e=s.ownerDocument;if(!e)return!1;const t=Eh(s);return v.contains(e,t)}function Ao(s){const e=s.ownerDocument;return e?v.contains(e,s)||$h(s):!1}var R=(s=>(s[s.DomContentLoaded=0]=\"DomContentLoaded\",s[s.Load=1]=\"Load\",s[s.FullSnapshot=2]=\"FullSnapshot\",s[s.IncrementalSnapshot=3]=\"IncrementalSnapshot\",s[s.Meta=4]=\"Meta\",s[s.Custom=5]=\"Custom\",s[s.Plugin=6]=\"Plugin\",s))(R||{}),I=(s=>(s[s.Mutation=0]=\"Mutation\",s[s.MouseMove=1]=\"MouseMove\",s[s.MouseInteraction=2]=\"MouseInteraction\",s[s.Scroll=3]=\"Scroll\",s[s.ViewportResize=4]=\"ViewportResize\",s[s.Input=5]=\"Input\",s[s.TouchMove=6]=\"TouchMove\",s[s.MediaInteraction=7]=\"MediaInteraction\",s[s.StyleSheetRule=8]=\"StyleSheetRule\",s[s.CanvasMutation=9]=\"CanvasMutation\",s[s.Font=10]=\"Font\",s[s.Log=11]=\"Log\",s[s.Drag=12]=\"Drag\",s[s.StyleDeclaration=13]=\"StyleDeclaration\",s[s.Selection=14]=\"Selection\",s[s.AdoptedStyleSheet=15]=\"AdoptedStyleSheet\",s[s.CustomElement=16]=\"CustomElement\",s))(I||{}),K=(s=>(s[s.MouseUp=0]=\"MouseUp\",s[s.MouseDown=1]=\"MouseDown\",s[s.Click=2]=\"Click\",s[s.ContextMenu=3]=\"ContextMenu\",s[s.DblClick=4]=\"DblClick\",s[s.Focus=5]=\"Focus\",s[s.Blur=6]=\"Blur\",s[s.TouchStart=7]=\"TouchStart\",s[s.TouchMove_Departed=8]=\"TouchMove_Departed\",s[s.TouchEnd=9]=\"TouchEnd\",s[s.TouchCancel=10]=\"TouchCancel\",s))(K||{}),he=(s=>(s[s.Mouse=0]=\"Mouse\",s[s.Pen=1]=\"Pen\",s[s.Touch=2]=\"Touch\",s))(he||{}),_e=(s=>(s[s[\"2D\"]=0]=\"2D\",s[s.WebGL=1]=\"WebGL\",s[s.WebGL2=2]=\"WebGL2\",s))(_e||{}),Ae=(s=>(s[s.Play=0]=\"Play\",s[s.Pause=1]=\"Pause\",s[s.Seeked=2]=\"Seeked\",s[s.VolumeChange=3]=\"VolumeChange\",s[s.RateChange=4]=\"RateChange\",s))(Ae||{}),Mo=(s=>(s[s.Document=0]=\"Document\",s[s.DocumentType=1]=\"DocumentType\",s[s.Element=2]=\"Element\",s[s.Text=3]=\"Text\",s[s.CDATA=4]=\"CDATA\",s[s.Comment=5]=\"Comment\",s))(Mo||{});function Ni(s){return\"__ln\"in s}class Nh{constructor(){w(this,\"length\",0),w(this,\"head\",null),w(this,\"tail\",null)}get(e){if(e>=this.length)throw new Error(\"Position outside of list range\");let t=this.head;for(let r=0;r<e;r++)t=(t==null?void 0:t.next)||null;return t}addNode(e){const t={value:e,previous:null,next:null};if(e.__ln=t,e.previousSibling&&Ni(e.previousSibling)){const r=e.previousSibling.__ln.next;t.next=r,t.previous=e.previousSibling.__ln,e.previousSibling.__ln.next=t,r&&(r.previous=t)}else if(e.nextSibling&&Ni(e.nextSibling)&&e.nextSibling.__ln.previous){const r=e.nextSibling.__ln.previous;t.previous=r,t.next=e.nextSibling.__ln,e.nextSibling.__ln.previous=t,r&&(r.next=t)}else this.head&&(this.head.previous=t),t.next=this.head,this.head=t;t.next===null&&(this.tail=t),this.length++}removeNode(e){const t=e.__ln;this.head&&(t.previous?(t.previous.next=t.next,t.next?t.next.previous=t.previous:this.tail=t.previous):(this.head=t.next,this.head?this.head.previous=null:this.tail=null),e.__ln&&delete e.__ln,this.length--)}}const ki=(s,e)=>\\`\\${s}@\\${e}\\`;class kh{constructor(){w(this,\"frozen\",!1),w(this,\"locked\",!1),w(this,\"texts\",[]),w(this,\"attributes\",[]),w(this,\"attributeMap\",new WeakMap),w(this,\"removes\",[]),w(this,\"mapRemoves\",[]),w(this,\"movedMap\",{}),w(this,\"addedSet\",new Set),w(this,\"movedSet\",new Set),w(this,\"droppedSet\",new Set),w(this,\"removesSubTreeCache\",new Set),w(this,\"mutationCb\"),w(this,\"blockClass\"),w(this,\"blockSelector\"),w(this,\"maskTextClass\"),w(this,\"maskTextSelector\"),w(this,\"inlineStylesheet\"),w(this,\"maskInputOptions\"),w(this,\"maskTextFn\"),w(this,\"maskInputFn\"),w(this,\"keepIframeSrcFn\"),w(this,\"recordCanvas\"),w(this,\"inlineImages\"),w(this,\"slimDOMOptions\"),w(this,\"dataURLOptions\"),w(this,\"doc\"),w(this,\"mirror\"),w(this,\"iframeManager\"),w(this,\"stylesheetManager\"),w(this,\"shadowDomManager\"),w(this,\"canvasManager\"),w(this,\"processedNodeManager\"),w(this,\"unattachedDoc\"),w(this,\"processMutations\",e=>{e.forEach(this.processMutation),this.emit()}),w(this,\"emit\",()=>{if(this.frozen||this.locked)return;const e=[],t=new Set,r=new Nh,i=a=>{let u=a,c=Ze;for(;c===Ze;)u=u&&u.nextSibling,c=u&&this.mirror.getId(u);return c},n=a=>{const u=v.parentNode(a);if(!u||!Ao(a))return;let c=!1;if(a.nodeType===Node.TEXT_NODE){const g=u.tagName;if(g===\"TEXTAREA\")return;g===\"STYLE\"&&this.addedSet.has(u)&&(c=!0)}const h=je(u)?this.mirror.getId(Ro(a)):this.mirror.getId(u),d=i(a);if(h===-1||d===-1)return r.addNode(a);const m=Ee(a,{doc:this.doc,mirror:this.mirror,blockClass:this.blockClass,blockSelector:this.blockSelector,maskTextClass:this.maskTextClass,maskTextSelector:this.maskTextSelector,skipChild:!0,newlyAddedElement:!0,inlineStylesheet:this.inlineStylesheet,maskInputOptions:this.maskInputOptions,maskTextFn:this.maskTextFn,maskInputFn:this.maskInputFn,slimDOMOptions:this.slimDOMOptions,dataURLOptions:this.dataURLOptions,recordCanvas:this.recordCanvas,inlineImages:this.inlineImages,onSerialize:g=>{xo(g,this.mirror)&&this.iframeManager.addIframe(g),Oo(g,this.mirror)&&this.stylesheetManager.trackLinkElement(g),ls(a)&&this.shadowDomManager.addShadowRoot(v.shadowRoot(a),this.doc)},onIframeLoad:(g,p)=>{this.iframeManager.attachIframe(g,p),this.shadowDomManager.observeAttachShadow(g)},onStylesheetLoad:(g,p)=>{this.stylesheetManager.attachLinkElement(g,p)},cssCaptured:c});m&&(e.push({parentId:h,nextId:d,node:m}),t.add(m.id))};for(;this.mapRemoves.length;)this.mirror.removeNodeFromMap(this.mapRemoves.shift());for(const a of this.movedSet)Pi(this.removesSubTreeCache,a,this.mirror)&&!this.movedSet.has(v.parentNode(a))||n(a);for(const a of this.addedSet)!Di(this.droppedSet,a)&&!Pi(this.removesSubTreeCache,a,this.mirror)||Di(this.movedSet,a)?n(a):this.droppedSet.add(a);let o=null;for(;r.length;){let a=null;if(o){const u=this.mirror.getId(v.parentNode(o.value)),c=i(o.value);u!==-1&&c!==-1&&(a=o)}if(!a){let u=r.tail;for(;u;){const c=u;if(u=u.previous,c){const h=this.mirror.getId(v.parentNode(c.value));if(i(c.value)===-1)continue;if(h!==-1){a=c;break}else{const m=c.value,g=v.parentNode(m);if(g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE){const p=v.host(g);if(this.mirror.getId(p)!==-1){a=c;break}}}}}}if(!a){for(;r.head;)r.removeNode(r.head.value);break}o=a.previous,r.removeNode(a.value),n(a.value)}const l={texts:this.texts.map(a=>{const u=a.node,c=v.parentNode(u);return c&&c.tagName===\"TEXTAREA\"&&this.genTextAreaValueMutation(c),{id:this.mirror.getId(u),value:a.value}}).filter(a=>!t.has(a.id)).filter(a=>this.mirror.has(a.id)),attributes:this.attributes.map(a=>{const{attributes:u}=a;if(typeof u.style==\"string\"){const c=JSON.stringify(a.styleDiff),h=JSON.stringify(a._unchangedStyles);c.length<u.style.length&&(c+h).split(\"var(\").length===u.style.split(\"var(\").length&&(u.style=a.styleDiff)}return{id:this.mirror.getId(a.node),attributes:u}}).filter(a=>!t.has(a.id)).filter(a=>this.mirror.has(a.id)),removes:this.removes,adds:e};!l.texts.length&&!l.attributes.length&&!l.removes.length&&!l.adds.length||(this.texts=[],this.attributes=[],this.attributeMap=new WeakMap,this.removes=[],this.addedSet=new Set,this.movedSet=new Set,this.droppedSet=new Set,this.removesSubTreeCache=new Set,this.movedMap={},this.mutationCb(l))}),w(this,\"genTextAreaValueMutation\",e=>{let t=this.attributeMap.get(e);t||(t={node:e,attributes:{},styleDiff:{},_unchangedStyles:{}},this.attributes.push(t),this.attributeMap.set(e,t)),t.attributes.value=Array.from(v.childNodes(e),r=>v.textContent(r)||\"\").join(\"\")}),w(this,\"processMutation\",e=>{if(!Mr(e.target,this.mirror,this.slimDOMOptions))switch(e.type){case\"characterData\":{const t=v.textContent(e.target);!X(e.target,this.blockClass,this.blockSelector,!1)&&t!==e.oldValue&&this.texts.push({value:Xi(e.target,this.maskTextClass,this.maskTextSelector,!0)&&t?this.maskTextFn?this.maskTextFn(t,vo(e.target)):t.replace(/[\\\\S]/g,\"*\"):t,node:e.target});break}case\"attributes\":{const t=e.target;let r=e.attributeName,i=e.target.getAttribute(r);if(r===\"value\"){const o=fs(t);i=hs({element:t,maskInputOptions:this.maskInputOptions,tagName:t.tagName,type:o,value:i,maskInputFn:this.maskInputFn})}if(X(e.target,this.blockClass,this.blockSelector,!1)||i===e.oldValue)return;let n=this.attributeMap.get(e.target);if(t.tagName===\"IFRAME\"&&r===\"src\"&&!this.keepIframeSrcFn(i))if(!t.contentDocument)r=\"rr_src\";else return;if(n||(n={node:e.target,attributes:{},styleDiff:{},_unchangedStyles:{}},this.attributes.push(n),this.attributeMap.set(e.target,n)),r===\"type\"&&t.tagName===\"INPUT\"&&(e.oldValue||\"\").toLowerCase()===\"password\"&&t.setAttribute(\"data-rr-is-password\",\"true\"),!Ji(t.tagName,r))if(n.attributes[r]=Zi(this.doc,Ce(t.tagName),Ce(r),i),r===\"style\"){if(!this.unattachedDoc)try{this.unattachedDoc=document.implementation.createHTMLDocument()}catch(l){this.unattachedDoc=this.doc}const o=this.unattachedDoc.createElement(\"span\");e.oldValue&&o.setAttribute(\"style\",e.oldValue);for(const l of Array.from(t.style)){const a=t.style.getPropertyValue(l),u=t.style.getPropertyPriority(l);a!==o.style.getPropertyValue(l)||u!==o.style.getPropertyPriority(l)?u===\"\"?n.styleDiff[l]=a:n.styleDiff[l]=[a,u]:n._unchangedStyles[l]=[a,u]}for(const l of Array.from(o.style))t.style.getPropertyValue(l)===\"\"&&(n.styleDiff[l]=!1)}else r===\"open\"&&t.tagName===\"DIALOG\"&&(t.matches(\"dialog:modal\")?n.attributes.rr_open_mode=\"modal\":n.attributes.rr_open_mode=\"non-modal\");break}case\"childList\":{if(X(e.target,this.blockClass,this.blockSelector,!0))return;if(e.target.tagName===\"TEXTAREA\"){this.genTextAreaValueMutation(e.target);return}e.addedNodes.forEach(t=>this.genAdds(t,e.target)),e.removedNodes.forEach(t=>{const r=this.mirror.getId(t),i=je(e.target)?this.mirror.getId(v.host(e.target)):this.mirror.getId(e.target);X(e.target,this.blockClass,this.blockSelector,!1)||Mr(t,this.mirror,this.slimDOMOptions)||!Rh(t,this.mirror)||(this.addedSet.has(t)?(us(this.addedSet,t),this.droppedSet.add(t)):this.addedSet.has(e.target)&&r===-1||Io(e.target,this.mirror)||(this.movedSet.has(t)&&this.movedMap[ki(r,i)]?us(this.movedSet,t):(this.removes.push({parentId:i,id:r,isShadow:je(e.target)&&He(e.target)?!0:void 0}),Ph(t,this.removesSubTreeCache))),this.mapRemoves.push(t))});break}}}),w(this,\"genAdds\",(e,t)=>{if(!this.processedNodeManager.inOtherBuffer(e,this)&&!(this.addedSet.has(e)||this.movedSet.has(e))){if(this.mirror.hasNode(e)){if(Mr(e,this.mirror,this.slimDOMOptions))return;this.movedSet.add(e);let r=null;t&&this.mirror.hasNode(t)&&(r=this.mirror.getId(t)),r&&r!==-1&&(this.movedMap[ki(this.mirror.getId(e),r)]=!0)}else this.addedSet.add(e),this.droppedSet.delete(e);X(e,this.blockClass,this.blockSelector,!1)||(v.childNodes(e).forEach(r=>this.genAdds(r)),ls(e)&&v.childNodes(v.shadowRoot(e)).forEach(r=>{this.processedNodeManager.add(r,this),this.genAdds(r,e)}))}})}init(e){[\"mutationCb\",\"blockClass\",\"blockSelector\",\"maskTextClass\",\"maskTextSelector\",\"inlineStylesheet\",\"maskInputOptions\",\"maskTextFn\",\"maskInputFn\",\"keepIframeSrcFn\",\"recordCanvas\",\"inlineImages\",\"slimDOMOptions\",\"dataURLOptions\",\"doc\",\"mirror\",\"iframeManager\",\"stylesheetManager\",\"shadowDomManager\",\"canvasManager\",\"processedNodeManager\"].forEach(t=>{this[t]=e[t]})}freeze(){this.frozen=!0,this.canvasManager.freeze()}unfreeze(){this.frozen=!1,this.canvasManager.unfreeze(),this.emit()}isFrozen(){return this.frozen}lock(){this.locked=!0,this.canvasManager.lock()}unlock(){this.locked=!1,this.canvasManager.unlock(),this.emit()}reset(){this.shadowDomManager.reset(),this.canvasManager.reset()}}function us(s,e){s.delete(e),v.childNodes(e).forEach(t=>us(s,t))}function Ph(s,e){const t=[s];for(;t.length;){const r=t.pop();e.has(r)||(e.add(r),v.childNodes(r).forEach(i=>t.push(i)))}}function Pi(s,e,t){return s.size===0?!1:Dh(s,e)}function Dh(s,e,t){const r=v.parentNode(e);return r?s.has(r):!1}function Di(s,e){return s.size===0?!1:Eo(s,e)}function Eo(s,e){const t=v.parentNode(e);return t?s.has(t)?!0:Eo(s,t):!1}let Ye;function Lh(s){Ye=s}function Th(){Ye=void 0}const O=s=>Ye?(...t)=>{try{return s(...t)}catch(r){if(Ye&&Ye(r)===!0)return;throw r}}:s,be=[];function lt(s){try{if(\"composedPath\"in s){const e=s.composedPath();if(e.length)return e[0]}else if(\"path\"in s&&s.path.length)return s.path[0]}catch(e){}return s&&s.target}function $o(s,e){const t=new kh;be.push(t),t.init(s);const r=new(wo())(O(t.processMutations.bind(t)));return r.observe(e,{attributes:!0,attributeOldValue:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0}),r}function _h({mousemoveCb:s,sampling:e,doc:t,mirror:r}){if(e.mousemove===!1)return()=>{};const i=typeof e.mousemove==\"number\"?e.mousemove:50,n=typeof e.mousemoveCallback==\"number\"?e.mousemoveCallback:500;let o=[],l;const a=st(O(h=>{const d=Date.now()-l;s(o.map(m=>(m.timeOffset-=d,m)),h),o=[],l=null}),n),u=O(st(O(h=>{const d=lt(h),{clientX:m,clientY:g}=as(h)?h.changedTouches[0]:h;l||(l=Qt()),o.push({x:m,y:g,id:r.getId(d),timeOffset:Qt()-l}),a(typeof DragEvent!=\"undefined\"&&h instanceof DragEvent?I.Drag:h instanceof MouseEvent?I.MouseMove:I.TouchMove)}),i,{trailing:!1})),c=[J(\"mousemove\",u,t),J(\"touchmove\",u,t),J(\"drag\",u,t)];return O(()=>{c.forEach(h=>h())})}function Fh({mouseInteractionCb:s,doc:e,mirror:t,blockClass:r,blockSelector:i,sampling:n}){if(n.mouseInteraction===!1)return()=>{};const o=n.mouseInteraction===!0||n.mouseInteraction===void 0?{}:n.mouseInteraction,l=[];let a=null;const u=c=>h=>{const d=lt(h);if(X(d,r,i,!0))return;let m=null,g=c;if(\"pointerType\"in h){switch(h.pointerType){case\"mouse\":m=he.Mouse;break;case\"touch\":m=he.Touch;break;case\"pen\":m=he.Pen;break}m===he.Touch?K[c]===K.MouseDown?g=\"TouchStart\":K[c]===K.MouseUp&&(g=\"TouchEnd\"):he.Pen}else as(h)&&(m=he.Touch);m!==null?(a=m,(g.startsWith(\"Touch\")&&m===he.Touch||g.startsWith(\"Mouse\")&&m===he.Mouse)&&(m=null)):K[c]===K.Click&&(m=a,a=null);const p=as(h)?h.changedTouches[0]:h;if(!p)return;const f=t.getId(d),{clientX:S,clientY:b}=p;O(s)(x({type:K[g],id:f,x:S,y:b},m!==null&&{pointerType:m}))};return Object.keys(K).filter(c=>Number.isNaN(Number(c))&&!c.endsWith(\"_Departed\")&&o[c]!==!1).forEach(c=>{let h=Ce(c);const d=u(c);if(window.PointerEvent)switch(K[c]){case K.MouseDown:case K.MouseUp:h=h.replace(\"mouse\",\"pointer\");break;case K.TouchStart:case K.TouchEnd:return}l.push(J(h,d,e))}),O(()=>{l.forEach(c=>c())})}function No({scrollCb:s,doc:e,mirror:t,blockClass:r,blockSelector:i,sampling:n}){const o=O(st(O(l=>{const a=lt(l);if(!a||X(a,r,i,!0))return;const u=t.getId(a);if(a===e&&e.defaultView){const c=So(e.defaultView);s({id:u,x:c.left,y:c.top})}else s({id:u,x:a.scrollLeft,y:a.scrollTop})}),n.scroll||100));return J(\"scroll\",o,e)}function Uh({viewportResizeCb:s},{win:e}){let t=-1,r=-1;const i=O(st(O(()=>{const n=bo(),o=Co();(t!==n||r!==o)&&(s({width:Number(o),height:Number(n)}),t=n,r=o)}),200));return J(\"resize\",i,e)}const Bh=[\"INPUT\",\"TEXTAREA\",\"SELECT\"],Li=new WeakMap;function zh({inputCb:s,doc:e,mirror:t,blockClass:r,blockSelector:i,ignoreClass:n,ignoreSelector:o,maskInputOptions:l,maskInputFn:a,sampling:u,userTriggeredOnInput:c}){function h(b){let y=lt(b);const C=b.isTrusted,N=y&&y.tagName;if(y&&N===\"OPTION\"&&(y=v.parentElement(y)),!y||!N||Bh.indexOf(N)<0||X(y,r,i,!0)||y.classList.contains(n)||o&&y.matches(o))return;let D=y.value,H=!1;const _=fs(y)||\"\";_===\"radio\"||_===\"checkbox\"?H=y.checked:(l[N.toLowerCase()]||l[_])&&(D=hs({element:y,maskInputOptions:l,tagName:N,type:_,value:D,maskInputFn:a})),d(y,c?{text:D,isChecked:H,userTriggered:C}:{text:D,isChecked:H});const G=y.name;_===\"radio\"&&G&&H&&e.querySelectorAll(\\`input[type=\"radio\"][name=\"\\${G}\"]\\`).forEach(Y=>{if(Y!==y){const Q=Y.value;d(Y,c?{text:Q,isChecked:!H,userTriggered:!1}:{text:Q,isChecked:!H})}})}function d(b,y){const C=Li.get(b);if(!C||C.text!==y.text||C.isChecked!==y.isChecked){Li.set(b,y);const N=t.getId(b);O(s)(ee(x({},y),{id:N}))}}const g=(u.input===\"last\"?[\"change\"]:[\"input\",\"change\"]).map(b=>J(b,O(h),e)),p=e.defaultView;if(!p)return()=>{g.forEach(b=>b())};const f=p.Object.getOwnPropertyDescriptor(p.HTMLInputElement.prototype,\"value\"),S=[[p.HTMLInputElement.prototype,\"value\"],[p.HTMLInputElement.prototype,\"checked\"],[p.HTMLSelectElement.prototype,\"value\"],[p.HTMLTextAreaElement.prototype,\"value\"],[p.HTMLSelectElement.prototype,\"selectedIndex\"],[p.HTMLOptionElement.prototype,\"selected\"]];return f&&f.set&&g.push(...S.map(b=>hr(b[0],b[1],{set(){O(h)({target:this,isTrusted:!1})}},!1,p))),O(()=>{g.forEach(b=>b())})}function qt(s){const e=[];function t(r,i){if(Pt(\"CSSGroupingRule\")&&r.parentRule instanceof CSSGroupingRule||Pt(\"CSSMediaRule\")&&r.parentRule instanceof CSSMediaRule||Pt(\"CSSSupportsRule\")&&r.parentRule instanceof CSSSupportsRule||Pt(\"CSSConditionRule\")&&r.parentRule instanceof CSSConditionRule){const o=Array.from(r.parentRule.cssRules).indexOf(r);i.unshift(o)}else if(r.parentStyleSheet){const o=Array.from(r.parentStyleSheet.cssRules).indexOf(r);i.unshift(o)}return i}return t(s,e)}function de(s,e,t){let r,i;return s?(s.ownerNode?r=e.getId(s.ownerNode):i=t.getId(s),{styleId:i,id:r}):{}}function Wh({styleSheetRuleCb:s,mirror:e,stylesheetManager:t},{win:r}){if(!r.CSSStyleSheet||!r.CSSStyleSheet.prototype)return()=>{};const i=r.CSSStyleSheet.prototype.insertRule;r.CSSStyleSheet.prototype.insertRule=new Proxy(i,{apply:O((c,h,d)=>{const[m,g]=d,{id:p,styleId:f}=de(h,e,t.styleMirror);return(p&&p!==-1||f&&f!==-1)&&s({id:p,styleId:f,adds:[{rule:m,index:g}]}),c.apply(h,d)})}),r.CSSStyleSheet.prototype.addRule=function(c,h,d=this.cssRules.length){const m=\\`\\${c} { \\${h} }\\`;return r.CSSStyleSheet.prototype.insertRule.apply(this,[m,d])};const n=r.CSSStyleSheet.prototype.deleteRule;r.CSSStyleSheet.prototype.deleteRule=new Proxy(n,{apply:O((c,h,d)=>{const[m]=d,{id:g,styleId:p}=de(h,e,t.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,removes:[{index:m}]}),c.apply(h,d)})}),r.CSSStyleSheet.prototype.removeRule=function(c){return r.CSSStyleSheet.prototype.deleteRule.apply(this,[c])};let o;r.CSSStyleSheet.prototype.replace&&(o=r.CSSStyleSheet.prototype.replace,r.CSSStyleSheet.prototype.replace=new Proxy(o,{apply:O((c,h,d)=>{const[m]=d,{id:g,styleId:p}=de(h,e,t.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,replace:m}),c.apply(h,d)})}));let l;r.CSSStyleSheet.prototype.replaceSync&&(l=r.CSSStyleSheet.prototype.replaceSync,r.CSSStyleSheet.prototype.replaceSync=new Proxy(l,{apply:O((c,h,d)=>{const[m]=d,{id:g,styleId:p}=de(h,e,t.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,replaceSync:m}),c.apply(h,d)})}));const a={};Dt(\"CSSGroupingRule\")?a.CSSGroupingRule=r.CSSGroupingRule:(Dt(\"CSSMediaRule\")&&(a.CSSMediaRule=r.CSSMediaRule),Dt(\"CSSConditionRule\")&&(a.CSSConditionRule=r.CSSConditionRule),Dt(\"CSSSupportsRule\")&&(a.CSSSupportsRule=r.CSSSupportsRule));const u={};return Object.entries(a).forEach(([c,h])=>{u[c]={insertRule:h.prototype.insertRule,deleteRule:h.prototype.deleteRule},h.prototype.insertRule=new Proxy(u[c].insertRule,{apply:O((d,m,g)=>{const[p,f]=g,{id:S,styleId:b}=de(m.parentStyleSheet,e,t.styleMirror);return(S&&S!==-1||b&&b!==-1)&&s({id:S,styleId:b,adds:[{rule:p,index:[...qt(m),f||0]}]}),d.apply(m,g)})}),h.prototype.deleteRule=new Proxy(u[c].deleteRule,{apply:O((d,m,g)=>{const[p]=g,{id:f,styleId:S}=de(m.parentStyleSheet,e,t.styleMirror);return(f&&f!==-1||S&&S!==-1)&&s({id:f,styleId:S,removes:[{index:[...qt(m),p]}]}),d.apply(m,g)})})}),O(()=>{r.CSSStyleSheet.prototype.insertRule=i,r.CSSStyleSheet.prototype.deleteRule=n,o&&(r.CSSStyleSheet.prototype.replace=o),l&&(r.CSSStyleSheet.prototype.replaceSync=l),Object.entries(a).forEach(([c,h])=>{h.prototype.insertRule=u[c].insertRule,h.prototype.deleteRule=u[c].deleteRule})})}function ko({mirror:s,stylesheetManager:e},t){var r,i,n;let o=null;t.nodeName===\"#document\"?o=s.getId(t):o=s.getId(v.host(t));const l=t.nodeName===\"#document\"?(r=t.defaultView)==null?void 0:r.Document:(n=(i=t.ownerDocument)==null?void 0:i.defaultView)==null?void 0:n.ShadowRoot,a=l!=null&&l.prototype?Object.getOwnPropertyDescriptor(l==null?void 0:l.prototype,\"adoptedStyleSheets\"):void 0;return o===null||o===-1||!l||!a?()=>{}:(Object.defineProperty(t,\"adoptedStyleSheets\",{configurable:a.configurable,enumerable:a.enumerable,get(){var u;return(u=a.get)==null?void 0:u.call(this)},set(u){var c;const h=(c=a.set)==null?void 0:c.call(this,u);if(o!==null&&o!==-1)try{e.adoptStyleSheets(u,o)}catch(d){}return h}}),O(()=>{Object.defineProperty(t,\"adoptedStyleSheets\",{configurable:a.configurable,enumerable:a.enumerable,get:a.get,set:a.set})}))}function Gh({styleDeclarationCb:s,mirror:e,ignoreCSSAttributes:t,stylesheetManager:r},{win:i}){const n=i.CSSStyleDeclaration.prototype.setProperty;i.CSSStyleDeclaration.prototype.setProperty=new Proxy(n,{apply:O((l,a,u)=>{var c;const[h,d,m]=u;if(t.has(h))return n.apply(a,[h,d,m]);const{id:g,styleId:p}=de((c=a.parentRule)==null?void 0:c.parentStyleSheet,e,r.styleMirror);return(g&&g!==-1||p&&p!==-1)&&s({id:g,styleId:p,set:{property:h,value:d,priority:m},index:qt(a.parentRule)}),l.apply(a,u)})});const o=i.CSSStyleDeclaration.prototype.removeProperty;return i.CSSStyleDeclaration.prototype.removeProperty=new Proxy(o,{apply:O((l,a,u)=>{var c;const[h]=u;if(t.has(h))return o.apply(a,[h]);const{id:d,styleId:m}=de((c=a.parentRule)==null?void 0:c.parentStyleSheet,e,r.styleMirror);return(d&&d!==-1||m&&m!==-1)&&s({id:d,styleId:m,remove:{property:h},index:qt(a.parentRule)}),l.apply(a,u)})}),O(()=>{i.CSSStyleDeclaration.prototype.setProperty=n,i.CSSStyleDeclaration.prototype.removeProperty=o})}function Vh({mediaInteractionCb:s,blockClass:e,blockSelector:t,mirror:r,sampling:i,doc:n}){const o=O(a=>st(O(u=>{const c=lt(u);if(!c||X(c,e,t,!0))return;const{currentTime:h,volume:d,muted:m,playbackRate:g,loop:p}=c;s({type:a,id:r.getId(c),currentTime:h,volume:d,muted:m,playbackRate:g,loop:p})}),i.media||500)),l=[J(\"play\",o(Ae.Play),n),J(\"pause\",o(Ae.Pause),n),J(\"seeked\",o(Ae.Seeked),n),J(\"volumechange\",o(Ae.VolumeChange),n),J(\"ratechange\",o(Ae.RateChange),n)];return O(()=>{l.forEach(a=>a())})}function jh({fontCb:s,doc:e}){const t=e.defaultView;if(!t)return()=>{};const r=[],i=new WeakMap,n=t.FontFace;t.FontFace=function(a,u,c){const h=new n(a,u,c);return i.set(h,{family:a,buffer:typeof u!=\"string\",descriptors:c,fontSource:typeof u==\"string\"?u:JSON.stringify(Array.from(new Uint8Array(u)))}),h};const o=Fe(e.fonts,\"add\",function(l){return function(a){return setTimeout(O(()=>{const u=i.get(a);u&&(s(u),i.delete(a))}),0),l.apply(this,[a])}});return r.push(()=>{t.FontFace=n}),r.push(o),O(()=>{r.forEach(l=>l())})}function Hh(s){const{doc:e,mirror:t,blockClass:r,blockSelector:i,selectionCb:n}=s;let o=!0;const l=O(()=>{const a=e.getSelection();if(!a||o&&(a!=null&&a.isCollapsed))return;o=a.isCollapsed||!1;const u=[],c=a.rangeCount||0;for(let h=0;h<c;h++){const d=a.getRangeAt(h),{startContainer:m,startOffset:g,endContainer:p,endOffset:f}=d;X(m,r,i,!0)||X(p,r,i,!0)||u.push({start:t.getId(m),startOffset:g,end:t.getId(p),endOffset:f})}n({ranges:u})});return l(),J(\"selectionchange\",l)}function Yh({doc:s,customElementCb:e}){const t=s.defaultView;return!t||!t.customElements?()=>{}:Fe(t.customElements,\"define\",function(i){return function(n,o,l){try{e({define:{name:n}})}catch(a){console.warn(\\`Custom element callback failed for \\${n}\\`)}return i.apply(this,[n,o,l])}})}function Zh(s,e){const{mutationCb:t,mousemoveCb:r,mouseInteractionCb:i,scrollCb:n,viewportResizeCb:o,inputCb:l,mediaInteractionCb:a,styleSheetRuleCb:u,styleDeclarationCb:c,canvasMutationCb:h,fontCb:d,selectionCb:m,customElementCb:g}=s;s.mutationCb=(...p)=>{e.mutation&&e.mutation(...p),t(...p)},s.mousemoveCb=(...p)=>{e.mousemove&&e.mousemove(...p),r(...p)},s.mouseInteractionCb=(...p)=>{e.mouseInteraction&&e.mouseInteraction(...p),i(...p)},s.scrollCb=(...p)=>{e.scroll&&e.scroll(...p),n(...p)},s.viewportResizeCb=(...p)=>{e.viewportResize&&e.viewportResize(...p),o(...p)},s.inputCb=(...p)=>{e.input&&e.input(...p),l(...p)},s.mediaInteractionCb=(...p)=>{e.mediaInteaction&&e.mediaInteaction(...p),a(...p)},s.styleSheetRuleCb=(...p)=>{e.styleSheetRule&&e.styleSheetRule(...p),u(...p)},s.styleDeclarationCb=(...p)=>{e.styleDeclaration&&e.styleDeclaration(...p),c(...p)},s.canvasMutationCb=(...p)=>{e.canvasMutation&&e.canvasMutation(...p),h(...p)},s.fontCb=(...p)=>{e.font&&e.font(...p),d(...p)},s.selectionCb=(...p)=>{e.selection&&e.selection(...p),m(...p)},s.customElementCb=(...p)=>{e.customElement&&e.customElement(...p),g(...p)}}function Jh(s,e={}){const t=s.doc.defaultView;if(!t)return()=>{};Zh(s,e);let r;s.recordDOM&&(r=$o(s,s.doc));const i=_h(s),n=Fh(s),o=No(s),l=Uh(s,{win:t}),a=zh(s),u=Vh(s);let c=()=>{},h=()=>{},d=()=>{},m=()=>{};s.recordDOM&&(c=Wh(s,{win:t}),h=ko(s,s.doc),d=Gh(s,{win:t}),s.collectFonts&&(m=jh(s)));const g=Hh(s),p=Yh(s),f=[];for(const S of s.plugins)f.push(S.observer(S.callback,t,S.options));return O(()=>{be.forEach(S=>S.reset()),r==null||r.disconnect(),i(),n(),o(),l(),a(),u(),c(),h(),d(),m(),g(),p(),f.forEach(S=>S())})}function Pt(s){return typeof window[s]!=\"undefined\"}function Dt(s){return!!(typeof window[s]!=\"undefined\"&&window[s].prototype&&\"insertRule\"in window[s].prototype&&\"deleteRule\"in window[s].prototype)}class Ti{constructor(e){w(this,\"iframeIdToRemoteIdMap\",new WeakMap),w(this,\"iframeRemoteIdToIdMap\",new WeakMap),this.generateIdFn=e}getId(e,t,r,i){const n=r||this.getIdToRemoteIdMap(e),o=i||this.getRemoteIdToIdMap(e);let l=n.get(t);return l||(l=this.generateIdFn(),n.set(t,l),o.set(l,t)),l}getIds(e,t){const r=this.getIdToRemoteIdMap(e),i=this.getRemoteIdToIdMap(e);return t.map(n=>this.getId(e,n,r,i))}getRemoteId(e,t,r){const i=r||this.getRemoteIdToIdMap(e);if(typeof t!=\"number\")return t;const n=i.get(t);return n||-1}getRemoteIds(e,t){const r=this.getRemoteIdToIdMap(e);return t.map(i=>this.getRemoteId(e,i,r))}reset(e){if(!e){this.iframeIdToRemoteIdMap=new WeakMap,this.iframeRemoteIdToIdMap=new WeakMap;return}this.iframeIdToRemoteIdMap.delete(e),this.iframeRemoteIdToIdMap.delete(e)}getIdToRemoteIdMap(e){let t=this.iframeIdToRemoteIdMap.get(e);return t||(t=new Map,this.iframeIdToRemoteIdMap.set(e,t)),t}getRemoteIdToIdMap(e){let t=this.iframeRemoteIdToIdMap.get(e);return t||(t=new Map,this.iframeRemoteIdToIdMap.set(e,t)),t}}class Xh{constructor(e){w(this,\"iframes\",new WeakMap),w(this,\"crossOriginIframeMap\",new WeakMap),w(this,\"crossOriginIframeMirror\",new Ti(Yi)),w(this,\"crossOriginIframeStyleMirror\"),w(this,\"crossOriginIframeRootIdMap\",new WeakMap),w(this,\"mirror\"),w(this,\"mutationCb\"),w(this,\"wrappedEmit\"),w(this,\"loadListener\"),w(this,\"stylesheetManager\"),w(this,\"recordCrossOriginIframes\"),this.mutationCb=e.mutationCb,this.wrappedEmit=e.wrappedEmit,this.stylesheetManager=e.stylesheetManager,this.recordCrossOriginIframes=e.recordCrossOriginIframes,this.crossOriginIframeStyleMirror=new Ti(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror)),this.mirror=e.mirror,this.recordCrossOriginIframes&&window.addEventListener(\"message\",this.handleMessage.bind(this))}addIframe(e){this.iframes.set(e,!0),e.contentWindow&&this.crossOriginIframeMap.set(e.contentWindow,e)}addLoadListener(e){this.loadListener=e}attachIframe(e,t){var r,i;this.mutationCb({adds:[{parentId:this.mirror.getId(e),nextId:null,node:t}],removes:[],texts:[],attributes:[],isAttachIframe:!0}),this.recordCrossOriginIframes&&((r=e.contentWindow)==null||r.addEventListener(\"message\",this.handleMessage.bind(this))),(i=this.loadListener)==null||i.call(this,e),e.contentDocument&&e.contentDocument.adoptedStyleSheets&&e.contentDocument.adoptedStyleSheets.length>0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))}handleMessage(e){const t=e;if(t.data.type!==\"rrweb\"||t.origin!==t.data.origin||!e.source)return;const i=this.crossOriginIframeMap.get(e.source);if(!i)return;const n=this.transformCrossOriginEvent(i,t.data.event);n&&this.wrappedEmit(n,t.data.isCheckout)}transformCrossOriginEvent(e,t){var r;switch(t.type){case R.FullSnapshot:{this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(t.data.node,e);const i=t.data.node.id;return this.crossOriginIframeRootIdMap.set(e,i),this.patchRootIdOnNode(t.data.node,i),{timestamp:t.timestamp,type:R.IncrementalSnapshot,data:{source:I.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:t.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case R.Meta:case R.Load:case R.DomContentLoaded:return!1;case R.Plugin:return t;case R.Custom:return this.replaceIds(t.data.payload,e,[\"id\",\"parentId\",\"previousId\",\"nextId\"]),t;case R.IncrementalSnapshot:switch(t.data.source){case I.Mutation:return t.data.adds.forEach(i=>{this.replaceIds(i,e,[\"parentId\",\"nextId\",\"previousId\"]),this.replaceIdOnNode(i.node,e);const n=this.crossOriginIframeRootIdMap.get(e);n&&this.patchRootIdOnNode(i.node,n)}),t.data.removes.forEach(i=>{this.replaceIds(i,e,[\"parentId\",\"id\"])}),t.data.attributes.forEach(i=>{this.replaceIds(i,e,[\"id\"])}),t.data.texts.forEach(i=>{this.replaceIds(i,e,[\"id\"])}),t;case I.Drag:case I.TouchMove:case I.MouseMove:return t.data.positions.forEach(i=>{this.replaceIds(i,e,[\"id\"])}),t;case I.ViewportResize:return!1;case I.MediaInteraction:case I.MouseInteraction:case I.Scroll:case I.CanvasMutation:case I.Input:return this.replaceIds(t.data,e,[\"id\"]),t;case I.StyleSheetRule:case I.StyleDeclaration:return this.replaceIds(t.data,e,[\"id\"]),this.replaceStyleIds(t.data,e,[\"styleId\"]),t;case I.Font:return t;case I.Selection:return t.data.ranges.forEach(i=>{this.replaceIds(i,e,[\"start\",\"end\"])}),t;case I.AdoptedStyleSheet:return this.replaceIds(t.data,e,[\"id\"]),this.replaceStyleIds(t.data,e,[\"styleIds\"]),(r=t.data.styles)==null||r.forEach(i=>{this.replaceStyleIds(i,e,[\"styleId\"])}),t}}return!1}replace(e,t,r,i){for(const n of i)!Array.isArray(t[n])&&typeof t[n]!=\"number\"||(Array.isArray(t[n])?t[n]=e.getIds(r,t[n]):t[n]=e.getId(r,t[n]));return t}replaceIds(e,t,r){return this.replace(this.crossOriginIframeMirror,e,t,r)}replaceStyleIds(e,t,r){return this.replace(this.crossOriginIframeStyleMirror,e,t,r)}replaceIdOnNode(e,t){this.replaceIds(e,t,[\"id\",\"rootId\"]),\"childNodes\"in e&&e.childNodes.forEach(r=>{this.replaceIdOnNode(r,t)})}patchRootIdOnNode(e,t){e.type!==Mo.Document&&!e.rootId&&(e.rootId=t),\"childNodes\"in e&&e.childNodes.forEach(r=>{this.patchRootIdOnNode(r,t)})}}class Kh{constructor(e){w(this,\"shadowDoms\",new WeakSet),w(this,\"mutationCb\"),w(this,\"scrollCb\"),w(this,\"bypassOptions\"),w(this,\"mirror\"),w(this,\"restoreHandlers\",[]),this.mutationCb=e.mutationCb,this.scrollCb=e.scrollCb,this.bypassOptions=e.bypassOptions,this.mirror=e.mirror,this.init()}init(){this.reset(),this.patchAttachShadow(Element,document)}addShadowRoot(e,t){if(!He(e)||this.shadowDoms.has(e))return;this.shadowDoms.add(e);const r=$o(ee(x({},this.bypassOptions),{doc:t,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e);this.restoreHandlers.push(()=>r.disconnect()),this.restoreHandlers.push(No(ee(x({},this.bypassOptions),{scrollCb:this.scrollCb,doc:e,mirror:this.mirror}))),setTimeout(()=>{e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&this.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,this.mirror.getId(v.host(e))),this.restoreHandlers.push(ko({mirror:this.mirror,stylesheetManager:this.bypassOptions.stylesheetManager},e))},0)}observeAttachShadow(e){!e.contentWindow||!e.contentDocument||this.patchAttachShadow(e.contentWindow.Element,e.contentDocument)}patchAttachShadow(e,t){const r=this;this.restoreHandlers.push(Fe(e.prototype,\"attachShadow\",function(i){return function(n){const o=i.call(this,n),l=v.shadowRoot(this);return l&&Ao(this)&&r.addShadowRoot(l,t),o}}))}reset(){this.restoreHandlers.forEach(e=>{try{e()}catch(t){}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet}}var $e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",Qh=typeof Uint8Array==\"undefined\"?[]:new Uint8Array(256);for(var Lt=0;Lt<$e.length;Lt++)Qh[$e.charCodeAt(Lt)]=Lt;var qh=function(s){var e=new Uint8Array(s),t,r=e.length,i=\"\";for(t=0;t<r;t+=3)i+=$e[e[t]>>2],i+=$e[(e[t]&3)<<4|e[t+1]>>4],i+=$e[(e[t+1]&15)<<2|e[t+2]>>6],i+=$e[e[t+2]&63];return r%3===2?i=i.substring(0,i.length-1)+\"=\":r%3===1&&(i=i.substring(0,i.length-2)+\"==\"),i};const _i=new Map;function ef(s,e){let t=_i.get(s);return t||(t=new Map,_i.set(s,t)),t.has(e)||t.set(e,[]),t.get(e)}const Po=(s,e,t)=>{if(!s||!(Lo(s,e)||typeof s==\"object\"))return;const r=s.constructor.name,i=ef(t,r);let n=i.indexOf(s);return n===-1&&(n=i.length,i.push(s)),n};function Bt(s,e,t){if(s instanceof Array)return s.map(r=>Bt(r,e,t));if(s===null)return s;if(s instanceof Float32Array||s instanceof Float64Array||s instanceof Int32Array||s instanceof Uint32Array||s instanceof Uint8Array||s instanceof Uint16Array||s instanceof Int16Array||s instanceof Int8Array||s instanceof Uint8ClampedArray)return{rr_type:s.constructor.name,args:[Object.values(s)]};if(s instanceof ArrayBuffer){const r=s.constructor.name,i=qh(s);return{rr_type:r,base64:i}}else{if(s instanceof DataView)return{rr_type:s.constructor.name,args:[Bt(s.buffer,e,t),s.byteOffset,s.byteLength]};if(s instanceof HTMLImageElement){const r=s.constructor.name,{src:i}=s;return{rr_type:r,src:i}}else if(s instanceof HTMLCanvasElement){const r=\"HTMLImageElement\",i=s.toDataURL();return{rr_type:r,src:i}}else{if(s instanceof ImageData)return{rr_type:s.constructor.name,args:[Bt(s.data,e,t),s.width,s.height]};if(Lo(s,e)||typeof s==\"object\"){const r=s.constructor.name,i=Po(s,e,t);return{rr_type:r,index:i}}}}return s}const Do=(s,e,t)=>s.map(r=>Bt(r,e,t)),Lo=(s,e)=>!![\"WebGLActiveInfo\",\"WebGLBuffer\",\"WebGLFramebuffer\",\"WebGLProgram\",\"WebGLRenderbuffer\",\"WebGLShader\",\"WebGLShaderPrecisionFormat\",\"WebGLTexture\",\"WebGLUniformLocation\",\"WebGLVertexArrayObject\",\"WebGLVertexArrayObjectOES\"].filter(i=>typeof e[i]==\"function\").find(i=>s instanceof e[i]);function tf(s,e,t,r){const i=[],n=Object.getOwnPropertyNames(e.CanvasRenderingContext2D.prototype);for(const o of n)try{if(typeof e.CanvasRenderingContext2D.prototype[o]!=\"function\")continue;const l=Fe(e.CanvasRenderingContext2D.prototype,o,function(a){return function(...u){return X(this.canvas,t,r,!0)||setTimeout(()=>{const c=Do(u,e,this);s(this.canvas,{type:_e[\"2D\"],property:o,args:c})},0),a.apply(this,u)}});i.push(l)}catch(l){const a=hr(e.CanvasRenderingContext2D.prototype,o,{set(u){s(this.canvas,{type:_e[\"2D\"],property:o,args:[u],setter:!0})}});i.push(a)}return()=>{i.forEach(o=>o())}}function rf(s){return s===\"experimental-webgl\"?\"webgl\":s}function Fi(s,e,t,r){const i=[];try{const n=Fe(s.HTMLCanvasElement.prototype,\"getContext\",function(o){return function(l,...a){if(!X(this,e,t,!0)){const u=rf(l);if(\"__context\"in this||(this.__context=u),r&&[\"webgl\",\"webgl2\"].includes(u))if(a[0]&&typeof a[0]==\"object\"){const c=a[0];c.preserveDrawingBuffer||(c.preserveDrawingBuffer=!0)}else a.splice(0,1,{preserveDrawingBuffer:!0})}return o.apply(this,[l,...a])}});i.push(n)}catch(n){console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\")}return()=>{i.forEach(n=>n())}}function Ui(s,e,t,r,i,n){const o=[],l=Object.getOwnPropertyNames(s);for(const a of l)if(![\"isContextLost\",\"canvas\",\"drawingBufferWidth\",\"drawingBufferHeight\"].includes(a))try{if(typeof s[a]!=\"function\")continue;const u=Fe(s,a,function(c){return function(...h){const d=c.apply(this,h);if(Po(d,n,this),\"tagName\"in this.canvas&&!X(this.canvas,r,i,!0)){const m=Do(h,n,this),g={type:e,property:a,args:m};t(this.canvas,g)}return d}});o.push(u)}catch(u){const c=hr(s,a,{set(h){t(this.canvas,{type:e,property:a,args:[h],setter:!0})}});o.push(c)}return o}function sf(s,e,t,r){const i=[];return i.push(...Ui(e.WebGLRenderingContext.prototype,_e.WebGL,s,t,r,e)),typeof e.WebGL2RenderingContext!=\"undefined\"&&i.push(...Ui(e.WebGL2RenderingContext.prototype,_e.WebGL2,s,t,r,e)),()=>{i.forEach(n=>n())}}const To=\"KGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKICB2YXIgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgdmFyIGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAidW5kZWZpbmVkIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7CiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpOwogIH0KICB2YXIgZW5jb2RlID0gZnVuY3Rpb24oYXJyYXlidWZmZXIpIHsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gIiI7CiAgICBmb3IgKGkyID0gMDsgaTIgPCBsZW47IGkyICs9IDMpIHsKICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMl0gJiAzKSA8PCA0IHwgYnl0ZXNbaTIgKyAxXSA+PiA0XTsKICAgICAgYmFzZTY0ICs9IGNoYXJzWyhieXRlc1tpMiArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpMiArIDJdID4+IDZdOwogICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTsKICAgIH0KICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgIj0iOwogICAgfSBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgIj09IjsKICAgIH0KICAgIHJldHVybiBiYXNlNjQ7CiAgfTsKICBjb25zdCBsYXN0QmxvYk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc3BhcmVudEJsb2JGb3Iod2lkdGgsIGhlaWdodCwgZGF0YVVSTE9wdGlvbnMpIHsKICAgIGNvbnN0IGlkID0gYCR7d2lkdGh9LSR7aGVpZ2h0fWA7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBpZiAodHJhbnNwYXJlbnRCbG9iTWFwLmhhcyhpZCkpIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBvZmZzY3JlZW4uY29udmVydFRvQmxvYihkYXRhVVJMT3B0aW9ucyk7CiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpOwogICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOwogICAgICB0cmFuc3BhcmVudEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICByZXR1cm4gYmFzZTY0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogIH0KICBjb25zdCB3b3JrZXIgPSBzZWxmOwogIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICBpZiAoIk9mZnNjcmVlbkNhbnZhcyIgaW4gZ2xvYmFsVGhpcykgewogICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zIH0gPSBlLmRhdGE7CiAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBkYXRhVVJMT3B0aW9ucwogICAgICApOwogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgICBiaXRtYXAuY2xvc2UoKTsKICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG9mZnNjcmVlbi5jb252ZXJ0VG9CbG9iKGRhdGFVUkxPcHRpb25zKTsKICAgICAgY29uc3QgdHlwZSA9IGJsb2IudHlwZTsKICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7CiAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7CiAgICAgIGlmICghbGFzdEJsb2JNYXAuaGFzKGlkKSAmJiBhd2FpdCB0cmFuc3BhcmVudEJhc2U2NCA9PT0gYmFzZTY0KSB7CiAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOwogICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsKICAgICAgfQogICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KSByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7CiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgaWQsCiAgICAgICAgdHlwZSwKICAgICAgICBiYXNlNjQsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0pOwogICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsKICAgIH0KICB9Owp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1iaXRtYXAtZGF0YS11cmwtd29ya2VyLUlKcEM3Z19iLmpzLm1hcAo=\",nf=s=>Uint8Array.from(atob(s),e=>e.charCodeAt(0)),Bi=typeof window!=\"undefined\"&&window.Blob&&new Blob([nf(To)],{type:\"text/javascript;charset=utf-8\"});function of(s){let e;try{if(e=Bi&&(window.URL||window.webkitURL).createObjectURL(Bi),!e)throw\"\";const t=new Worker(e,{name:s==null?void 0:s.name});return t.addEventListener(\"error\",()=>{(window.URL||window.webkitURL).revokeObjectURL(e)}),t}catch(t){return new Worker(\"data:text/javascript;base64,\"+To,{name:s==null?void 0:s.name})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}class af{constructor(e){w(this,\"pendingCanvasMutations\",new Map),w(this,\"rafStamps\",{latestId:0,invokeId:null}),w(this,\"mirror\"),w(this,\"mutationCb\"),w(this,\"resetObservers\"),w(this,\"frozen\",!1),w(this,\"locked\",!1),w(this,\"processMutation\",(a,u)=>{(this.rafStamps.invokeId&&this.rafStamps.latestId!==this.rafStamps.invokeId||!this.rafStamps.invokeId)&&(this.rafStamps.invokeId=this.rafStamps.latestId),this.pendingCanvasMutations.has(a)||this.pendingCanvasMutations.set(a,[]),this.pendingCanvasMutations.get(a).push(u)});const{sampling:t=\"all\",win:r,blockClass:i,blockSelector:n,recordCanvas:o,dataURLOptions:l}=e;this.mutationCb=e.mutationCb,this.mirror=e.mirror,o&&t===\"all\"&&this.initCanvasMutationObserver(r,i,n),o&&typeof t==\"number\"&&this.initCanvasFPSObserver(t,r,i,n,{dataURLOptions:l})}reset(){this.pendingCanvasMutations.clear(),this.resetObservers&&this.resetObservers()}freeze(){this.frozen=!0}unfreeze(){this.frozen=!1}lock(){this.locked=!0}unlock(){this.locked=!1}initCanvasFPSObserver(e,t,r,i,n){const o=Fi(t,r,i,!0),l=new Map,a=new of;a.onmessage=g=>{const{id:p}=g.data;if(l.set(p,!1),!(\"base64\"in g.data))return;const{base64:f,type:S,width:b,height:y}=g.data;this.mutationCb({id:p,type:_e[\"2D\"],commands:[{property:\"clearRect\",args:[0,0,b,y]},{property:\"drawImage\",args:[{rr_type:\"ImageBitmap\",args:[{rr_type:\"Blob\",data:[{rr_type:\"ArrayBuffer\",base64:f}],type:S}]},0,0]}]})};const u=1e3/e;let c=0,h;const d=()=>{const g=[];return t.document.querySelectorAll(\"canvas\").forEach(p=>{X(p,r,i,!0)||g.push(p)}),g},m=g=>{if(c&&g-c<u){h=requestAnimationFrame(m);return}c=g,d().forEach(async p=>{var f;const S=this.mirror.getId(p);if(l.get(S)||p.width===0||p.height===0)return;if(l.set(S,!0),[\"webgl\",\"webgl2\"].includes(p.__context)){const y=p.getContext(p.__context);((f=y==null?void 0:y.getContextAttributes())==null?void 0:f.preserveDrawingBuffer)===!1&&y.clear(y.COLOR_BUFFER_BIT)}const b=await createImageBitmap(p);a.postMessage({id:S,bitmap:b,width:p.width,height:p.height,dataURLOptions:n.dataURLOptions},[b])}),h=requestAnimationFrame(m)};h=requestAnimationFrame(m),this.resetObservers=()=>{o(),cancelAnimationFrame(h)}}initCanvasMutationObserver(e,t,r){this.startRAFTimestamping(),this.startPendingCanvasMutationFlusher();const i=Fi(e,t,r,!1),n=tf(this.processMutation.bind(this),e,t,r),o=sf(this.processMutation.bind(this),e,t,r);this.resetObservers=()=>{i(),n(),o()}}startPendingCanvasMutationFlusher(){requestAnimationFrame(()=>this.flushPendingCanvasMutations())}startRAFTimestamping(){const e=t=>{this.rafStamps.latestId=t,requestAnimationFrame(e)};requestAnimationFrame(e)}flushPendingCanvasMutations(){this.pendingCanvasMutations.forEach((e,t)=>{const r=this.mirror.getId(t);this.flushPendingCanvasMutationFor(t,r)}),requestAnimationFrame(()=>this.flushPendingCanvasMutations())}flushPendingCanvasMutationFor(e,t){if(this.frozen||this.locked)return;const r=this.pendingCanvasMutations.get(e);if(!r||t===-1)return;const i=r.map(o=>{const u=o,{type:l}=u;return xe(u,[\"type\"])}),{type:n}=r[0];this.mutationCb({id:t,type:n,commands:i}),this.pendingCanvasMutations.delete(e)}}class lf{constructor(e){w(this,\"trackedLinkElements\",new WeakSet),w(this,\"mutationCb\"),w(this,\"adoptedStyleSheetCb\"),w(this,\"styleMirror\",new Mh),this.mutationCb=e.mutationCb,this.adoptedStyleSheetCb=e.adoptedStyleSheetCb}attachLinkElement(e,t){\"_cssText\"in t.attributes&&this.mutationCb({adds:[],removes:[],texts:[],attributes:[{id:t.id,attributes:t.attributes}]}),this.trackLinkElement(e)}trackLinkElement(e){this.trackedLinkElements.has(e)||(this.trackedLinkElements.add(e),this.trackStylesheetInLinkElement(e))}adoptStyleSheets(e,t){if(e.length===0)return;const r={id:t,styleIds:[]},i=[];for(const n of e){let o;this.styleMirror.has(n)?o=this.styleMirror.getId(n):(o=this.styleMirror.add(n),i.push({styleId:o,rules:Array.from(n.rules||CSSRule,(l,a)=>({rule:Vi(l,n.href),index:a}))})),r.styleIds.push(o)}i.length>0&&(r.styles=i),this.adoptedStyleSheetCb(r)}reset(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet}trackStylesheetInLinkElement(e){}}class uf{constructor(){w(this,\"nodeMap\",new WeakMap),w(this,\"active\",!1)}inOtherBuffer(e,t){const r=this.nodeMap.get(e);return r&&Array.from(r).some(i=>i!==t)}add(e,t){this.active||(this.active=!0,requestAnimationFrame(()=>{this.nodeMap=new WeakMap,this.active=!1})),this.nodeMap.set(e,(this.nodeMap.get(e)||new Set).add(t))}destroy(){}}let W,zt,Er,er=!1;try{if(Array.from([1],s=>s*2)[0]!==2){const s=document.createElement(\"iframe\");document.body.appendChild(s),Array.from=((Gs=s.contentWindow)==null?void 0:Gs.Array.from)||Array.from,document.body.removeChild(s)}}catch(s){console.debug(\"Unable to override Array.from\",s)}const se=ua();function ut(s={}){const{emit:e,checkoutEveryNms:t,checkoutEveryNth:r,blockClass:i=\"rr-block\",blockSelector:n=null,ignoreClass:o=\"rr-ignore\",ignoreSelector:l=null,maskTextClass:a=\"rr-mask\",maskTextSelector:u=null,inlineStylesheet:c=!0,maskAllInputs:h,maskInputOptions:d,slimDOMOptions:m,maskInputFn:g,maskTextFn:p,hooks:f,packFn:S,sampling:b={},dataURLOptions:y={},mousemoveWait:C,recordDOM:N=!0,recordCanvas:D=!1,recordCrossOriginIframes:H=!1,recordAfter:_=s.recordAfter===\"DOMContentLoaded\"?s.recordAfter:\"load\",userTriggeredOnInput:G=!1,collectFonts:Y=!1,inlineImages:Q=!1,plugins:oe,keepIframeSrcFn:A=()=>!1,ignoreCSSAttributes:Ue=new Set([]),errorHandler:Be}=s;Lh(Be);const V=H?window.parent===window:!0;let q=!1;if(!V)try{window.parent.document&&(q=!1)}catch(M){q=!0}if(V&&!e)throw new Error(\"emit function is required\");if(!V&&!q)return()=>{};C!==void 0&&b.mousemove===void 0&&(b.mousemove=C),se.reset();const ye=h===!0?{color:!0,date:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0}:d!==void 0?d:{password:!0},ae=m===!0||m===\"all\"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:m===\"all\",headMetaDescKeywords:m===\"all\",headTitleMutations:m===\"all\"}:m||{};Ah();let Ts,fr=0;const _s=M=>{for(const re of oe||[])re.eventProcessor&&(M=re.eventProcessor(M));return S&&!q&&(M=S(M)),M};W=(M,re)=>{var B;const z=M;if(z.timestamp=Qt(),(B=be[0])!=null&&B.isFrozen()&&z.type!==R.FullSnapshot&&!(z.type===R.IncrementalSnapshot&&z.data.source===I.Mutation)&&be.forEach(le=>le.unfreeze()),V)e==null||e(_s(z),re);else if(q){const le={type:\"rrweb\",event:_s(z),origin:window.location.origin,isCheckout:re};window.parent.postMessage(le,\"*\")}if(z.type===R.FullSnapshot)Ts=z,fr=0;else if(z.type===R.IncrementalSnapshot){if(z.data.source===I.Mutation&&z.data.isAttachIframe)return;fr++;const le=r&&fr>=r,k=t&&z.timestamp-Ts.timestamp>t;(le||k)&&zt(!0)}};const ct=M=>{W({type:R.IncrementalSnapshot,data:x({source:I.Mutation},M)})},Fs=M=>W({type:R.IncrementalSnapshot,data:x({source:I.Scroll},M)}),Us=M=>W({type:R.IncrementalSnapshot,data:x({source:I.CanvasMutation},M)}),_o=M=>W({type:R.IncrementalSnapshot,data:x({source:I.AdoptedStyleSheet},M)}),we=new lf({mutationCb:ct,adoptedStyleSheetCb:_o}),Se=new Xh({mirror:se,mutationCb:ct,stylesheetManager:we,recordCrossOriginIframes:H,wrappedEmit:W});for(const M of oe||[])M.getMirror&&M.getMirror({nodeMirror:se,crossOriginIframeMirror:Se.crossOriginIframeMirror,crossOriginIframeStyleMirror:Se.crossOriginIframeStyleMirror});const pr=new uf;Er=new af({recordCanvas:D,mutationCb:Us,win:window,blockClass:i,blockSelector:n,mirror:se,sampling:b.canvas,dataURLOptions:y});const ht=new Kh({mutationCb:ct,scrollCb:Fs,bypassOptions:{blockClass:i,blockSelector:n,maskTextClass:a,maskTextSelector:u,inlineStylesheet:c,maskInputOptions:ye,dataURLOptions:y,maskTextFn:p,maskInputFn:g,recordCanvas:D,inlineImages:Q,sampling:b,slimDOMOptions:ae,iframeManager:Se,stylesheetManager:we,canvasManager:Er,keepIframeSrcFn:A,processedNodeManager:pr},mirror:se});zt=(M=!1)=>{if(!N)return;W({type:R.Meta,data:{href:window.location.href,width:Co(),height:bo()}},M),we.reset(),ht.init(),be.forEach(B=>B.lock());const re=Pa(document,{mirror:se,blockClass:i,blockSelector:n,maskTextClass:a,maskTextSelector:u,inlineStylesheet:c,maskAllInputs:ye,maskTextFn:p,maskInputFn:g,slimDOM:ae,dataURLOptions:y,recordCanvas:D,inlineImages:Q,onSerialize:B=>{xo(B,se)&&Se.addIframe(B),Oo(B,se)&&we.trackLinkElement(B),ls(B)&&ht.addShadowRoot(v.shadowRoot(B),document)},onIframeLoad:(B,z)=>{Se.attachIframe(B,z),ht.observeAttachShadow(B)},onStylesheetLoad:(B,z)=>{we.attachLinkElement(B,z)},keepIframeSrcFn:A});if(!re)return console.warn(\"Failed to snapshot the document\");W({type:R.FullSnapshot,data:{node:re,initialOffset:So(window)}},M),be.forEach(B=>B.unlock()),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&we.adoptStyleSheets(document.adoptedStyleSheets,se.getId(document))};try{const M=[],re=z=>{var le;return O(Jh)({mutationCb:ct,mousemoveCb:(k,dr)=>W({type:R.IncrementalSnapshot,data:{source:dr,positions:k}}),mouseInteractionCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.MouseInteraction},k)}),scrollCb:Fs,viewportResizeCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.ViewportResize},k)}),inputCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.Input},k)}),mediaInteractionCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.MediaInteraction},k)}),styleSheetRuleCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.StyleSheetRule},k)}),styleDeclarationCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.StyleDeclaration},k)}),canvasMutationCb:Us,fontCb:k=>W({type:R.IncrementalSnapshot,data:x({source:I.Font},k)}),selectionCb:k=>{W({type:R.IncrementalSnapshot,data:x({source:I.Selection},k)})},customElementCb:k=>{W({type:R.IncrementalSnapshot,data:x({source:I.CustomElement},k)})},blockClass:i,ignoreClass:o,ignoreSelector:l,maskTextClass:a,maskTextSelector:u,maskInputOptions:ye,inlineStylesheet:c,sampling:b,recordDOM:N,recordCanvas:D,inlineImages:Q,userTriggeredOnInput:G,collectFonts:Y,doc:z,maskInputFn:g,maskTextFn:p,keepIframeSrcFn:A,blockSelector:n,slimDOMOptions:ae,dataURLOptions:y,mirror:se,iframeManager:Se,stylesheetManager:we,shadowDomManager:ht,processedNodeManager:pr,canvasManager:Er,ignoreCSSAttributes:Ue,plugins:((le=oe==null?void 0:oe.filter(k=>k.observer))==null?void 0:le.map(k=>({observer:k.observer,options:k.options,callback:dr=>W({type:R.Plugin,data:{plugin:k.name,payload:dr}})})))||[]},f)};Se.addLoadListener(z=>{try{M.push(re(z.contentDocument))}catch(le){console.warn(le)}});const B=()=>{zt(),M.push(re(document)),er=!0};return document.readyState===\"interactive\"||document.readyState===\"complete\"?B():(M.push(J(\"DOMContentLoaded\",()=>{W({type:R.DomContentLoaded,data:{}}),_===\"DOMContentLoaded\"&&B()})),M.push(J(\"load\",()=>{W({type:R.Load,data:{}}),_===\"load\"&&B()},window))),()=>{M.forEach(z=>z()),pr.destroy(),er=!1,Th()}}catch(M){console.warn(M)}}ut.addCustomEvent=(s,e)=>{if(!er)throw new Error(\"please add custom event after start recording\");W({type:R.Custom,data:{tag:s,payload:e}})};ut.freezePage=()=>{be.forEach(s=>s.freeze())};ut.takeFullSnapshot=s=>{if(!er)throw new Error(\"please take full snapshot after start recording\");zt(s)};ut.mirror=se;var zi;(function(s){s[s.NotStarted=0]=\"NotStarted\",s[s.Running=1]=\"Running\",s[s.Stopped=2]=\"Stopped\"})(zi||(zi={}));exports.record=ut;\nif (typeof module.exports == \"object\" && typeof exports == \"object\") {\n var __cp = (to, from, except, desc) => {\n if ((from && typeof from === \"object\") || typeof from === \"function\") {\n for (let key of Object.getOwnPropertyNames(from)) {\n if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)\n Object.defineProperty(to, key, {\n get: () => from[key],\n enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,\n });\n }\n }\n return to;\n };\n module.exports = __cp(module.exports, exports);\n}\nreturn module.exports;\n}))\n//# sourceMappingURL=record.umd.min.cjs.map`;\n","import { type SessionRecordingOptions, type StringUUID } from \"@lmnr-ai/types\";\nimport { Page as PlaywrightPage } from \"playwright\";\nimport { Page as PuppeteerPage } from \"puppeteer\";\n\nimport { LaminarClient } from \"..\";\nimport { initializeLogger } from \"../utils\";\nimport { RECORDER } from \"./recorder\";\n\nexport const LMNR_SEND_EVENTS_FUNCTION_NAME = 'lmnrSendEvents';\n\nconst logger = initializeLogger();\n\n/**\n * If the first argument is a string, return an object with the name of the method\n * and the argument as the value.\n * Otherwise, return the shallow copy of the arguments.\n *\n * This is useful for Stagehand, where the first argument is often a string, but is named\n * 'instruction', so we add a name to it on the spans.\n *\n * @param args - Args of a function.\n * @param name - The name to add on the first argument if it is a string.\n * @returns The arguments as an object with the name of the method and the argument\n * as the value, or the arguments as is.\n */\nexport const nameArgsOrCopy = (args: any[], name: string = \"instruction\") => {\n if (args.length === 1 && typeof args[0] === 'string') {\n return { [name]: args[0] };\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [...args];\n};\n\n\nexport interface EventChunk {\n batchId: string;\n chunkIndex: number;\n totalChunks: number;\n data: string;\n isFinal: boolean;\n}\n\nexport const sendPageEvents = async (\n client: LaminarClient,\n page: PlaywrightPage | PuppeteerPage,\n sessionId: StringUUID,\n traceId: StringUUID,\n) => {\n try {\n // Puppeteer pages have the same evaluate method, but TypeScript\n // isn't liking that the signature is different.\n\n /* eslint-disable @typescript-eslint/no-unsafe-return */\n const events = await (page as PlaywrightPage).evaluate(\n async () => {\n if (typeof (window as any).lmnrGetAndClearEvents !== 'function') {\n return [];\n }\n return await (window as any).lmnrGetAndClearEvents();\n },\n );\n /* eslint-enable @typescript-eslint/no-unsafe-return */\n if (events == null || events.length === 0) {\n return;\n }\n\n await client.browserEvents.send({\n sessionId,\n traceId,\n events,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(\"Execution context was destroyed\")\n || message.includes(\"Target page, context or browser has been closed\")) {\n logger.debug(`Tried to flush events from a closed page. Continuing...`);\n }\n }\n};\n\nexport const takeFullSnapshot = async (\n page: PlaywrightPage | PuppeteerPage,\n): Promise<boolean> => await (page as PlaywrightPage).evaluate(() => {\n if ((window as any).lmnrRrweb) {\n try {\n (window as any).lmnrRrweb.record.takeFullSnapshot();\n return true;\n } catch (error) {\n logger.error(\"Error taking full snapshot: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n }\n return false;\n});\n\nexport const injectSessionRecorder = async (\n page: PlaywrightPage | PuppeteerPage,\n sessionRecordingOptions?: SessionRecordingOptions,\n) => {\n const tryRunScript = async <R>(\n script: (...args: any[]) => Promise<R>,\n maxAttempts: number = 5,\n ): Promise<R | undefined> => {\n for (let i = 0; i < maxAttempts; i++) {\n try {\n return await script();\n } catch (error) {\n logger.error(\"Operation \" + script.name + \" failed: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n };\n\n // Both Puppeteer and Playwright have a evaluate method, but the types are different\n // and TypeScript is not liking that the signature is different.\n\n const castedPage = page as PlaywrightPage;\n\n let isRrwebPresent = false;\n try {\n isRrwebPresent = await castedPage.evaluate(() =>\n typeof (window as any).lmnrRrweb !== 'undefined',\n );\n } catch (error) {\n logger.debug(\"ailed to check if session recorder is loaded: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n\n // Load rrweb and set up recording\n if (!isRrwebPresent) {\n const result = await tryRunScript(async function injectSessionRecorder() {\n await castedPage.evaluate(RECORDER);\n return true;\n });\n if (!result) {\n logger.error(\"Failed to load session recorder\");\n return;\n }\n try {\n await castedPage.evaluate(injectScript, sessionRecordingOptions);\n } catch (error) {\n logger.debug(\"Failed to inject session recorder: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n};\n\n\n// Removes the heavy client prop and the apiKey to avoid security issues\nexport const cleanStagehandLLMClient = (llmClient: object): object =>\n Object.fromEntries(\n Object.entries(llmClient)\n .filter(([key]) => key !== \"client\")\n .map(([key, value]) =>\n key === \"clientOptions\"\n ? [\n key,\n Object.fromEntries(\n Object.entries(value).filter(([key]) => key !== \"apiKey\"),\n ),\n ]\n : [key, value],\n ),\n );\n\n\n// Stagehand uses zod 3.x or 4.x, so we need to support both versions via duck-typing\nexport const prettyPrintZodSchema = (schema: any, indent = 2): string => {\n // Use duck-typing instead of instanceof to support both Zod v3 and v4\n const def = schema?._def;\n if (!def || def.typeName !== 'ZodObject') {\n throw new Error('Not a Zod object schema');\n }\n\n const indentString = ' '.repeat(indent);\n\n const shape = schema.shape;\n const entries = Object.entries(shape);\n\n const reconstructed: string[] = entries.map(([key, value]) => {\n // Base type detection function using duck-typing\n const getBaseType = (val: any): string => {\n const valDef = val?._def;\n if (!valDef) return 'z.unknown()';\n\n const typeName = valDef.typeName;\n\n if (typeName === 'ZodString') {\n return 'z.string()';\n }\n if (typeName === 'ZodNumber') {\n return 'z.number()';\n }\n if (typeName === 'ZodBoolean') {\n return 'z.boolean()';\n }\n if (typeName === 'ZodArray') {\n const elementType = valDef.type;\n if (elementType?._def?.typeName === 'ZodObject') {\n return `z.array(${prettyPrintZodSchema(elementType)})`;\n } else {\n return `z.array(${getBaseType(elementType)})`;\n }\n }\n if (typeName === 'ZodObject') {\n return prettyPrintZodSchema(val);\n }\n if (typeName === 'ZodEnum') {\n const enumValues = valDef.values;\n if (Array.isArray(enumValues)) {\n return `z.enum([${enumValues.map(v => `'${v}'`).join(', ')}])`;\n }\n return 'z.enum([...])';\n }\n if (typeName === 'ZodLiteral') {\n const literalValue = valDef.value;\n if (typeof literalValue === 'string') {\n return `z.literal('${literalValue}')`;\n }\n return `z.literal(${literalValue})`;\n }\n if (typeName === 'ZodUnion') {\n const options = valDef.options;\n if (Array.isArray(options)) {\n return `z.union([${options.map(getBaseType).join(', ')}])`;\n }\n return 'z.union([...])';\n }\n if (typeName === 'ZodDate') {\n return 'z.date()';\n }\n if (typeName === 'ZodRecord') {\n const keyType = valDef.keyType;\n const valueType = valDef.valueType;\n\n let keyTypeStr = 'z.string()';\n if (keyType && keyType._def?.typeName !== 'ZodString') {\n keyTypeStr = getBaseType(keyType);\n }\n\n let valueTypeStr = 'z.any()';\n if (valueType) {\n valueTypeStr = getBaseType(valueType);\n }\n\n return `z.record(${keyTypeStr}, ${valueTypeStr})`;\n }\n if (typeName === 'ZodMap') {\n const keyType = valDef.keyType;\n const valueType = valDef.valueType;\n\n let keyTypeStr = 'z.any()';\n if (keyType) {\n keyTypeStr = getBaseType(keyType);\n }\n\n let valueTypeStr = 'z.any()';\n if (valueType) {\n valueTypeStr = getBaseType(valueType);\n }\n\n return `z.map(${keyTypeStr}, ${valueTypeStr})`;\n }\n if (typeName === 'ZodTuple') {\n const items = valDef.items;\n\n if (Array.isArray(items)) {\n const itemsTypeStr = items.map(item => getBaseType(item)).join(', ');\n return `z.tuple([${itemsTypeStr}])`;\n }\n return 'z.tuple([])';\n }\n if (typeName === 'ZodNullable') {\n return `${getBaseType(valDef.innerType)}.nullable()`;\n }\n if (typeName === 'ZodOptional') {\n return `${getBaseType(valDef.innerType)}.optional()`;\n }\n // Add more type checks as needed\n return 'z.any()';\n };\n\n // Check for modifiers and description\n const applyModifiers = (val: any, baseType: string): string => {\n let result = baseType;\n let currentVal = val;\n\n // Check for .nullable() modifier using duck-typing\n if (currentVal?._def?.typeName === 'ZodNullable') {\n result = `${getBaseType(currentVal._def.innerType)}.nullable()`;\n currentVal = currentVal._def.innerType;\n }\n\n // Check for .optional() modifier using duck-typing\n if (currentVal?._def?.typeName === 'ZodOptional') {\n if (!result.endsWith('.nullable()')) {\n result = `${getBaseType(currentVal._def.innerType)}.optional()`;\n }\n currentVal = currentVal._def.innerType;\n }\n\n // Check for description\n const description = val?._def?.description;\n if (typeof description === 'string') {\n result += `.describe('${description.replace(/'/g, \"\\\\'\")}')`;\n }\n\n return result;\n };\n\n const baseType = getBaseType(value);\n const finalType = applyModifiers(value, baseType);\n\n return `${indentString}${key}: ${finalType},`;\n });\n\n return `z.object({\\n${reconstructed.join('\\n')}\\n})`;\n};\n\n\n// copied from https://github.com/browserbase/stagehand/blob/main/lib/llm/LLMProvider.ts#L62\nconst modelToProviderMap: Record<string, string> = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"claude-3-5-sonnet-latest\": \"anthropic\",\n \"claude-3-5-sonnet-20240620\": \"anthropic\",\n \"claude-3-5-sonnet-20241022\": \"anthropic\",\n \"claude-3-7-sonnet-20250219\": \"anthropic\",\n \"claude-3-7-sonnet-latest\": \"anthropic\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n};\n\nexport const modelToProvider = (model: string): string | undefined => {\n const clean = model.toLowerCase().trim();\n if (clean.startsWith(\"gpt-\") || clean.match(/^o\\d-/)) {\n return \"openai\";\n }\n if (clean.startsWith(\"claude-\")) {\n return \"anthropic\";\n }\n if (clean.startsWith(\"gemini-\")) {\n return \"google\";\n }\n if (clean.startsWith(\"cerebras-\")) {\n return \"cerebras\";\n }\n if (clean.startsWith(\"groq-\")) {\n return \"groq\";\n }\n return modelToProviderMap[clean];\n};\n\n/**\n * The session recording inject script function.\n * This function runs in the browser context and sets up rrweb recording.\n * Exported so it can be converted to a string for CDP Runtime.evaluate.\n * @param sessionRecordingOptions - Optional recording options\n * @param stringifyCallbackArgs - If true, stringify arguments when calling\n * lmnrSendEvents (for raw CDP bindings)\n */\nexport const injectScript = (\n sessionRecordingOptions?: SessionRecordingOptions,\n stringifyCallbackArgs?: boolean,\n) => {\n const BATCH_TIMEOUT = 2000; // Send events after 2 seconds\n const MAX_WORKER_PROMISES = 50; // Max concurrent worker promises\n const HEARTBEAT_INTERVAL = 2000;\n const CHUNK_SIZE = 256 * 1024; // 256KB chunks\n const CHUNK_SEND_DELAY = 100; // 100ms delay between chunks\n\n (window as any).lmnrRrwebEventsBatch = [];\n (window as any).lmnrChunkQueue = [];\n (window as any).lmnrChunkSequence = 0;\n (window as any).lmnrCurrentBatchId = null;\n\n // Create a Web Worker for heavy JSON processing with chunked processing\n const createCompressionWorker = (): Worker => {\n const workerCode = `\n self.onmessage = async (e) => {\n const { jsonString, buffer, id, useBuffer } = e.data;\n try {\n let dataBytes;\n if (useBuffer && buffer) {\n // Use transferred ArrayBuffer (no copying needed!)\n dataBytes = new Uint8Array(buffer);\n } else {\n // Convert JSON string to bytes\n const textEncoder = new TextEncoder();\n dataBytes = textEncoder.encode(jsonString);\n }\n\n const compressionStream = new CompressionStream('gzip');\n const writer = compressionStream.writable.getWriter();\n const reader = compressionStream.readable.getReader();\n\n // TODO: investigate why the events are not sent if we await the \n // write and close\n writer.write(dataBytes);\n writer.close();\n\n const chunks = [];\n let totalLength = 0;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n totalLength += value.length;\n }\n\n const compressedData = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n compressedData.set(chunk, offset);\n offset += chunk.length;\n }\n\n self.postMessage({ id, success: true, data: compressedData });\n } catch (error) {\n self.postMessage({ id, success: false, error: error.message });\n }\n };\n `;\n\n const blob = new Blob([workerCode], { type: 'application/javascript' });\n return new Worker(URL.createObjectURL(blob));\n };\n\n let compressionWorker: Worker | null = null;\n const workerPromises = new Map();\n let workerId = 0;\n // null = unknown, true = supported, false = blocked by CSP\n let workerSupported: boolean | null = null;\n\n // Test if workers are supported (not blocked by CSP)\n const testWorkerSupport = () => {\n if (workerSupported !== null) {\n return workerSupported;\n }\n\n try {\n const testWorker = createCompressionWorker();\n testWorker.terminate();\n workerSupported = true;\n return true;\n } catch (error) {\n console.warn('Web Workers blocked by CSP, will use main thread compression:', error);\n workerSupported = false;\n return false;\n }\n };\n\n // Cleanup function for worker\n const cleanupWorker = () => {\n if (compressionWorker) {\n compressionWorker.terminate();\n compressionWorker = null;\n }\n workerPromises.clear();\n workerId = 0;\n };\n\n // Clean up stale promises to prevent memory leaks\n const cleanupStalePromises = () => {\n if (workerPromises.size > MAX_WORKER_PROMISES) {\n const toDelete = [];\n for (const [id, promise] of workerPromises) {\n if (toDelete.length >= workerPromises.size - MAX_WORKER_PROMISES) {\n break;\n }\n toDelete.push(id);\n promise.reject(new Error('Promise cleaned up due to memory pressure'));\n }\n toDelete.forEach(id => workerPromises.delete(id));\n }\n };\n\n // Non-blocking JSON.stringify using chunked processing\n const stringifyNonBlocking = (\n obj: unknown,\n chunkSize = 10000,\n ): Promise<string> => new Promise((resolve, reject) => {\n try {\n // For very large objects, we need to be more careful\n // Use requestIdleCallback if available, otherwise setTimeout\n const scheduleWork = window.requestIdleCallback ||\n ((cb) => setTimeout(cb, 0));\n\n let result = '';\n let keys: string[] = [];\n let keyIndex = 0;\n\n // Pre-process to get all keys if it's an object\n if (typeof obj === 'object' && obj !== null && !Array.isArray(obj)) {\n keys = Object.keys(obj);\n }\n\n const processChunk = () => {\n try {\n if (Array.isArray(obj) || typeof obj !== 'object' || obj === null) {\n // For arrays and primitives, just stringify directly\n result = JSON.stringify(obj);\n resolve(result);\n return;\n }\n\n // For objects, process in chunks\n const endIndex = Math.min(keyIndex + chunkSize, keys.length);\n\n if (keyIndex === 0) {\n result = '{';\n }\n\n for (let i = keyIndex; i < endIndex; i++) {\n const key = keys[i];\n const value = (obj as Record<string, unknown>)[key];\n\n if (i > 0) result += ',';\n result += JSON.stringify(key) + ':' + JSON.stringify(value);\n }\n\n keyIndex = endIndex;\n\n if (keyIndex >= keys.length) {\n result += '}';\n resolve(result);\n } else {\n // Schedule next chunk\n scheduleWork(processChunk);\n }\n } catch (error) {\n reject(error as Error);\n }\n };\n\n processChunk();\n } catch (error) {\n reject(error as Error);\n }\n });\n\n // Fast compression for small objects (main thread)\n const compressSmallObject = async (data: unknown) => {\n const jsonString = JSON.stringify(data);\n const textEncoder = new TextEncoder();\n const bytes = textEncoder.encode(jsonString);\n\n const compressionStream = new CompressionStream('gzip');\n const writer = compressionStream.writable.getWriter();\n const reader = compressionStream.readable.getReader();\n\n // TODO: investigate why the events are not sent if we await the write and close\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n writer.write(bytes);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n writer.close();\n\n const chunks = [];\n let totalLength = 0;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n totalLength += value.length;\n }\n\n const compressedData = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n compressedData.set(chunk, offset);\n offset += chunk.length;\n }\n\n return compressedData;\n };\n\n // Alternative: Use transferable objects for maximum efficiency\n const compressLargeObjectTransferable = async (data: unknown): Promise<Uint8Array> => {\n try {\n if (!testWorkerSupport()) {\n return compressSmallObject(data);\n }\n\n // Clean up stale promises first\n cleanupStalePromises();\n\n // Stringify on main thread but non-blocking\n const jsonString = await stringifyNonBlocking(data);\n\n // Convert to ArrayBuffer (transferable)\n const encoder = new TextEncoder();\n const uint8Array = encoder.encode(jsonString);\n const buffer = uint8Array.buffer; // Use the original buffer for transfer\n\n return new Promise((resolve, reject) => {\n if (!compressionWorker) {\n compressionWorker = createCompressionWorker();\n compressionWorker.onmessage = (e) => {\n const { id, success, data: result, error } = e.data;\n const promise = workerPromises.get(id);\n if (promise) {\n workerPromises.delete(id);\n if (success) {\n promise.resolve(result);\n } else {\n promise.reject(new Error(error));\n }\n }\n };\n\n compressionWorker.onerror = (error) => {\n console.error('Compression worker error:', error);\n cleanupWorker();\n compressSmallObject(data).then(resolve, reject);\n };\n }\n\n const id = ++workerId;\n workerPromises.set(id, { resolve, reject });\n\n // Set timeout to prevent hanging promises\n setTimeout(() => {\n if (workerPromises.has(id)) {\n workerPromises.delete(id);\n reject(new Error('Compression timeout'));\n }\n }, 10000);\n\n // Transfer the ArrayBuffer (no copying!)\n compressionWorker.postMessage({\n buffer,\n id,\n useBuffer: true,\n }, [buffer]);\n });\n } catch {\n // Silently fall back to main thread compression\n return compressSmallObject(data);\n }\n };\n\n // Worker-based compression for large objects\n const compressLargeObject = async (data: unknown): Promise<Uint8Array> => {\n try {\n // Use transferable objects for better performance\n return await compressLargeObjectTransferable(data);\n } catch (error) {\n console.warn('Transferable failed, falling back to string method:', error);\n try {\n // Fallback to string method\n const jsonString = await stringifyNonBlocking(data);\n\n return new Promise((resolve, reject) => {\n if (!compressionWorker) {\n compressionWorker = createCompressionWorker();\n compressionWorker.onmessage = (e) => {\n const { id, success, data: result, error } = e.data;\n const promise = workerPromises.get(id);\n if (promise) {\n workerPromises.delete(id);\n if (success) {\n promise.resolve(result);\n } else {\n promise.reject(new Error(error));\n }\n }\n };\n\n compressionWorker.onerror = (error) => {\n console.error('Compression worker error:', error);\n cleanupWorker();\n };\n }\n\n const id = ++workerId;\n workerPromises.set(id, { resolve, reject });\n\n // Set timeout to prevent hanging promises\n setTimeout(() => {\n if (workerPromises.has(id)) {\n workerPromises.delete(id);\n reject(new Error('Compression timeout'));\n }\n }, 10000);\n\n compressionWorker.postMessage({ jsonString, id });\n });\n } catch (workerError) {\n logger.warn(\"Worker creation failed, falling back to main thread compression: \" +\n `${workerError instanceof Error ? workerError.message : String(workerError)}`);\n // Final fallback: compress on main thread (may block UI but will work)\n return await compressSmallObject(data);\n }\n }\n };\n\n\n setInterval(cleanupWorker, 5000);\n\n const isLargeEvent = (type: number) => {\n const LARGE_EVENT_TYPES: number[] = [\n 2, // FullSnapshot\n ];\n\n if (LARGE_EVENT_TYPES.includes(type)) {\n return true;\n }\n\n return false;\n };\n\n // Create chunks from a string with metadata\n const createChunks = (str: string, batchId: string) => {\n const chunks = [];\n const totalChunks = Math.ceil(str.length / CHUNK_SIZE);\n\n for (let i = 0; i < str.length; i += CHUNK_SIZE) {\n const chunk = str.slice(i, i + CHUNK_SIZE);\n chunks.push({\n batchId: batchId,\n chunkIndex: chunks.length,\n totalChunks: totalChunks,\n data: chunk,\n isFinal: chunks.length === totalChunks - 1,\n });\n }\n\n return chunks;\n };\n\n // Send chunks with flow control\n const sendChunks = async (chunks: any[]) => {\n if (typeof (window as any).lmnrSendEvents !== 'function') {\n return;\n }\n\n (window as any).lmnrChunkQueue.push(...chunks);\n\n // Process queue\n while ((window as any).lmnrChunkQueue.length > 0) {\n const chunk = (window as any).lmnrChunkQueue.shift();\n try {\n // CDP bindings require stringified arguments, Playwright/Puppeteer auto-serialize\n const arg = stringifyCallbackArgs ? JSON.stringify(chunk) : chunk;\n await (window as any).lmnrSendEvents(arg);\n // Small delay between chunks to avoid overwhelming CDP\n await new Promise(resolve => setTimeout(resolve, CHUNK_SEND_DELAY));\n } catch (error) {\n console.error('Failed to send chunk:', error);\n // On error, clear failed chunk batch from queue\n (window as any).lmnrChunkQueue = (window as any).lmnrChunkQueue.filter(\n (c: any) => c.batchId !== chunk.batchId,\n );\n break;\n }\n }\n };\n\n const sendBatchIfReady = async () => {\n if ((window as any).lmnrRrwebEventsBatch.length > 0\n && typeof (window as any).lmnrSendEvents === 'function') {\n const events = (window as any).lmnrRrwebEventsBatch;\n (window as any).lmnrRrwebEventsBatch = [];\n\n try {\n // Generate unique batch ID\n const batchId = `${Date.now()}_${(window as any).lmnrChunkSequence++}`;\n (window as any).lmnrCurrentBatchId = batchId;\n\n // Stringify the entire batch\n const batchString = JSON.stringify(events);\n\n // Check size and chunk if necessary\n if (batchString.length <= CHUNK_SIZE) {\n // Small enough to send as single chunk\n const chunk = {\n batchId: batchId,\n chunkIndex: 0,\n totalChunks: 1,\n data: batchString,\n isFinal: true,\n };\n // CDP bindings require stringified arguments, Playwright/Puppeteer auto-serialize\n const arg = stringifyCallbackArgs ? JSON.stringify(chunk) : chunk;\n await (window as any).lmnrSendEvents(arg);\n } else {\n // Need to chunk\n const chunks = createChunks(batchString, batchId);\n await sendChunks(chunks);\n }\n } catch (error) {\n console.error('Failed to send events:', error);\n // Clear batch to prevent memory buildup\n (window as any).lmnrRrwebEventsBatch = [];\n }\n }\n };\n\n const bufferToBase64 = async (buffer: Uint8Array) => {\n const base64url = await new Promise<string>(resolve => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.readAsDataURL(new Blob([buffer.slice()]));\n });\n\n return base64url.slice(base64url.indexOf(',') + 1);\n };\n\n if (!(window as any).lmnrStartedRecordingEvents) {\n // It's fine to retrigger the interval even if the original function\n // is async and still running.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n setInterval(sendBatchIfReady, BATCH_TIMEOUT);\n\n (window as any).lmnrRrweb.record({\n async emit(event: any) {\n try {\n const isLarge = isLargeEvent(event.type);\n const compressedResult = isLarge ?\n await compressLargeObject(event.data) :\n await compressSmallObject(event.data);\n\n const base64Data = await bufferToBase64(compressedResult);\n const eventToSend = {\n ...event,\n data: base64Data,\n };\n (window as any).lmnrRrwebEventsBatch.push(eventToSend);\n } catch (error) {\n console.warn('Failed to push event to batch', error);\n }\n },\n recordCanvas: true,\n collectFonts: true,\n recordCrossOriginIframes: true,\n maskInputOptions: {\n password: true,\n textarea: sessionRecordingOptions?.maskInputOptions?.textarea || false,\n text: sessionRecordingOptions?.maskInputOptions?.text || false,\n number: sessionRecordingOptions?.maskInputOptions?.number || false,\n select: sessionRecordingOptions?.maskInputOptions?.select || false,\n email: sessionRecordingOptions?.maskInputOptions?.email || false,\n tel: sessionRecordingOptions?.maskInputOptions?.tel || false,\n },\n });\n\n function heartbeat() {\n // Add heartbeat events\n setInterval(\n () => {\n (window as any).lmnrRrweb.record.addCustomEvent('heartbeat', {\n title: document.title,\n url: document.URL,\n });\n },\n HEARTBEAT_INTERVAL,\n );\n }\n\n heartbeat();\n (window as any).lmnrStartedRecordingEvents = true;\n }\n};\n\n// Buffer for storing incomplete chunk batches\nexport interface ChunkBuffer {\n chunks: Map<number, string>;\n total: number;\n timestamp: number;\n}\n\nconst OLD_BUFFER_TIMEOUT = 60000; // 60 seconds in milliseconds\n\nexport async function sendEvents(\n chunk: EventChunk,\n client: LaminarClient,\n chunkBuffers: Map<string, ChunkBuffer>,\n sessionId: StringUUID,\n traceId: StringUUID,\n): Promise<void> {\n try {\n // Handle chunked data\n const { batchId, chunkIndex, totalChunks, data } = chunk;\n\n // Validate required fields\n if (!sessionId || !traceId) {\n logger.debug(\"Missing sessionId or traceId in chunk\");\n return;\n }\n\n // Initialize buffer for this batch if needed\n if (!chunkBuffers.has(batchId)) {\n chunkBuffers.set(batchId, {\n chunks: new Map(),\n total: totalChunks,\n timestamp: Date.now(),\n });\n }\n\n const buffer = chunkBuffers.get(batchId)!;\n\n // Store chunk\n buffer.chunks.set(chunkIndex, data);\n\n // Check if we have all chunks\n if (buffer.chunks.size === totalChunks) {\n // Reassemble the full message\n let fullData = \"\";\n for (let i = 0; i < totalChunks; i++) {\n fullData += buffer.chunks.get(i);\n }\n\n // Parse the JSON\n const events = JSON.parse(fullData) as Record<string, any>[];\n\n // Send to server\n if (events && events.length > 0) {\n // Fire and forget - don't await to avoid blocking\n await client.browserEvents.send({ sessionId, traceId, events }).catch((error) => {\n logger.debug(\"Failed to send events: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n\n // Clean up buffer\n chunkBuffers.delete(batchId);\n }\n\n // Clean up old incomplete buffers\n const currentTime = Date.now();\n const toDelete: string[] = [];\n\n for (const [bid, buffer] of chunkBuffers.entries()) {\n if (currentTime - buffer.timestamp > OLD_BUFFER_TIMEOUT) {\n toDelete.push(bid);\n }\n }\n\n for (const bid of toDelete) {\n logger.debug(`Cleaning up incomplete chunk buffer: ${bid}`);\n chunkBuffers.delete(bid);\n }\n } catch (error) {\n logger.debug(\"Could not send events: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","import { LaminarClient } from '@lmnr-ai/client';\nimport { SessionRecordingOptions } from '@lmnr-ai/types';\nimport { diag, type Span, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\nimport type * as PlaywrightLib from \"playwright\";\nimport type { Browser, BrowserContext, Page } from 'playwright';\n\nimport { version as SDK_VERSION } from \"../../package.json\";\nimport { observe } from '../decorators';\nimport { Laminar } from '../laminar';\nimport { TRACE_HAS_BROWSER_SESSION } from '../opentelemetry-lib/tracing/attributes';\nimport { LaminarContextManager } from '../opentelemetry-lib/tracing/context';\nimport { initializeLogger, newUUID, NIL_UUID, otelTraceIdToUUID, StringUUID } from '../utils';\nimport {\n ChunkBuffer,\n EventChunk,\n injectSessionRecorder,\n LMNR_SEND_EVENTS_FUNCTION_NAME,\n sendEvents,\n sendPageEvents,\n takeFullSnapshot,\n} from \"./utils\";\n\nconst logger = initializeLogger();\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class PlaywrightInstrumentation extends InstrumentationBase {\n private _patchedBrowsers: Set<Browser> = new Set();\n private _parentSpans: Map<StringUUID, Span> = new Map();\n private _client: LaminarClient;\n private _sessionRecordingOptions?: SessionRecordingOptions;\n\n constructor(client: LaminarClient, sessionRecordingOptions?: SessionRecordingOptions) {\n super(\n \"@lmnr/playwright-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this._client = client;\n this._sessionRecordingOptions = sessionRecordingOptions;\n }\n\n // It's the caller's responsibility to ensure the span is ended\n public setParentSpanForSession(sessionId: StringUUID, span: Span) {\n this._parentSpans.set(sessionId, span);\n }\n\n public removeAndEndParentSpanForSession(sessionId: StringUUID) {\n const span = this._parentSpans.get(sessionId);\n if (span && span.isRecording()) {\n span.end();\n }\n this._parentSpans.delete(sessionId);\n }\n\n public getParentSpanForSession(sessionId: StringUUID): Span | undefined {\n return this._parentSpans.get(sessionId);\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"playwright\",\n // TODO: test if the older versions work\n ['>=1.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(pwModule: {\n chromium?: typeof PlaywrightLib.chromium,\n firefox?: typeof PlaywrightLib.firefox,\n webkit?: typeof PlaywrightLib.webkit,\n }) {\n const browsers = [pwModule.chromium, pwModule.firefox, pwModule.webkit] as const;\n\n for (const browserType of browsers) {\n if (browserType) {\n this._wrap(\n browserType,\n 'launch',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n browserType,\n 'connect',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n browserType,\n 'connectOverCDP',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n browserType,\n 'launchPersistentContext',\n this.patchBrowserNewContext(),\n );\n }\n }\n\n return pwModule;\n }\n\n private patch(moduleExports: typeof PlaywrightLib, moduleVersion?: string) {\n diag.debug(`patching playwright ${moduleVersion}`);\n const browsers = ['chromium', 'firefox', 'webkit'] as const;\n\n for (const browserType of browsers) {\n if (moduleExports[browserType]) {\n // First we need to patch the browser launch to get access to the Page class\n this._wrap(\n moduleExports[browserType],\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports[browserType],\n `connect`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports[browserType],\n 'connectOverCDP',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports[browserType],\n 'launchPersistentContext',\n this.patchBrowserNewContext(),\n );\n }\n }\n\n return moduleExports;\n }\n\n private unpatch(moduleExports: typeof PlaywrightLib, moduleVersion?: string) {\n diag.debug(`unpatching playwright ${moduleVersion}`);\n const browsers = ['chromium', 'firefox', 'webkit'] as const;\n\n for (const browserType of browsers) {\n if (moduleExports[browserType]) {\n // First we need to patch the browser launch to get access to the Page class\n this._wrap(\n moduleExports[browserType],\n `launch`,\n this.patchNewBrowser(),\n );\n }\n }\n\n for (const browser of this._patchedBrowsers) {\n this._unwrap(browser, 'newContext');\n }\n }\n\n private patchNewBrowser() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: any[]) {\n const browser: Browser = await original.call(this, ...args);\n const sessionId = newUUID();\n\n for (const context of browser.contexts()) {\n context.on('page', (page: Page) => plugin.patchPage(page, sessionId));\n for (const page of context.pages()) {\n await plugin.patchPage(page, sessionId);\n }\n }\n\n plugin._wrap(\n browser,\n 'newContext',\n plugin.patchBrowserNewContext(),\n );\n\n plugin._patchedBrowsers.add(browser);\n return browser;\n };\n }\n\n private patchBrowserNewContext() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: unknown[]) {\n const context: BrowserContext = await original.bind(this).apply(this, args);\n const sessionId = newUUID();\n // Patch pages created by browser, e.g. new tab\n context.on('page', async (page) => plugin.patchPage(page, sessionId));\n\n // Patch pages that are already created\n for (const page of context.pages()) {\n await plugin.patchPage(page, sessionId);\n }\n\n return context;\n };\n }\n\n public async patchPage(page: Page, sessionId: StringUUID) {\n const wrapped = async () => {\n // Note: be careful with await here, if the await is removed,\n // this creates a race condition, and playwright fails.\n await observe({ name: 'playwright.page' }, async () => {\n await this._patchPage(page, sessionId);\n });\n };\n\n const parentSpan = this.getParentSpanForSession(sessionId);\n if (parentSpan) {\n return await Laminar.withSpan(\n parentSpan,\n wrapped,\n );\n }\n\n return await wrapped();\n }\n\n private async _patchPage(page: Page, sessionId: StringUUID) {\n const originalBringToFront = page.bringToFront.bind(page);\n page.bringToFront = async () => {\n await originalBringToFront();\n await takeFullSnapshot(page);\n };\n\n const currentSpan = trace.getSpan(LaminarContextManager.getContext()) ?? trace.getActiveSpan();\n currentSpan?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n const otelTraceId = currentSpan?.spanContext().traceId;\n const traceId = otelTraceId ? otelTraceIdToUUID(otelTraceId) : NIL_UUID;\n\n page.on('domcontentloaded', async () => {\n try {\n await injectSessionRecorder(page, this._sessionRecordingOptions);\n } catch (error) {\n logger.error(\"Error in onLoad handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n });\n\n page.on('close', async () => {\n try {\n // Send any remaining events before closing\n await sendPageEvents(this._client, page, sessionId, traceId);\n } catch (error) {\n logger.error(\"Error in onClose handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n });\n\n const chunkBuffers = new Map<string, ChunkBuffer>();\n\n await injectSessionRecorder(page, this._sessionRecordingOptions);\n try {\n await page.exposeFunction(LMNR_SEND_EVENTS_FUNCTION_NAME, async (chunk: EventChunk) => {\n await sendEvents(chunk, this._client, chunkBuffers, sessionId, traceId);\n });\n } catch (error) {\n logger.debug(\"Could not expose function \" + LMNR_SEND_EVENTS_FUNCTION_NAME + \": \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\n","import { trace } from \"@opentelemetry/api\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nimport { observe as laminarObserve } from \"../../decorators\";\nimport { SPAN_TYPE } from \"../../opentelemetry-lib/tracing/attributes\";\nimport { LaminarContextManager } from \"../../opentelemetry-lib/tracing/context\";\nimport { modelToProvider } from \"../utils\";\n\nexport interface GlobalLLMClientOptions {\n provider: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {})\n model: string\n}\n\ninterface CreateChatCompletionOptions {\n options: {\n messages?: any[];\n temperature?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n maxTokens?: number;\n maxOutputTokens?: number;\n response_model?: {\n name: string;\n schema: any;\n };\n tools?: any[];\n };\n logger?: (message: any) => void;\n retries?: number;\n}\n\ninterface LLMResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices?: {\n index: number;\n message: {\n role: string;\n content: string | null;\n tool_calls?: {\n id: string;\n type: string;\n function: {\n name: string;\n arguments: string;\n };\n }[];\n };\n finish_reason: string;\n }[];\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * Creates a wrapper function for LLM client's createChatCompletion method\n * that adds OpenTelemetry tracing with detailed span attributes.\n *\n * This wrapper is shared between Stagehand v2 and v3 instrumentations.\n *\n * @param globalLLMClientOptions - WeakMap to track LLM client options (provider and model)\n * @returns A wrapper function compatible with OpenTelemetry's _wrap method\n */\nexport const createLLMClientCreateChatCompletionWrapper = (\n globalLLMClientOptions: WeakMap<any, GlobalLLMClientOptions | undefined>,\n) => (original: (...args: any[]) => Promise<any>) =>\n async function createChatCompletion(this: any, ...args: any[]) {\n const options = args[0] as CreateChatCompletionOptions;\n return await laminarObserve({\n name: \"createChatCompletion\",\n // input and output are set as gen_ai.prompt and gen_ai.completion\n ignoreInput: true,\n ignoreOutput: true,\n }, async () => {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n const span = currentSpan!;\n const innerOptions = options.options;\n const recordedProvider = globalLLMClientOptions.get(this)?.provider;\n const provider = (\n recordedProvider === \"aisdk\"\n && globalLLMClientOptions.get(this)?.model\n )\n ? (\n modelToProvider(globalLLMClientOptions.get(this)!.model)\n ?? \"aisdk\"\n )\n : recordedProvider;\n\n // Set request attributes\n span.setAttributes({\n [SPAN_TYPE]: \"LLM\",\n ...(innerOptions.temperature ? {\n \"gen_ai.request.temperature\": innerOptions.temperature,\n } : {}),\n ...(innerOptions.top_p ? {\n \"gen_ai.request.top_p\": innerOptions.top_p,\n } : {}),\n ...(innerOptions.frequency_penalty ? {\n \"gen_ai.request.frequency_penalty\": innerOptions.frequency_penalty,\n } : {}),\n ...(innerOptions.presence_penalty ? {\n \"gen_ai.request.presence_penalty\": innerOptions.presence_penalty,\n } : {}),\n ...((innerOptions.maxTokens !== undefined || innerOptions.maxOutputTokens !== undefined) ? {\n \"gen_ai.request.max_tokens\": innerOptions.maxTokens ?? innerOptions.maxOutputTokens,\n } : {}),\n ...(globalLLMClientOptions.get(this) ? {\n \"gen_ai.request.model\": globalLLMClientOptions.get(this)?.model,\n \"gen_ai.system\": provider,\n } : {}),\n });\n\n // Set message attributes\n innerOptions.messages?.forEach((message, index) => {\n span.setAttributes({\n [`gen_ai.prompt.${index}.role`]: message.role,\n [`gen_ai.prompt.${index}.content`]: JSON.stringify(message.content),\n });\n });\n\n // Set tool/function attributes\n innerOptions.tools?.forEach((tool, index) => {\n span.setAttributes({\n [`llm.request.functions.${index}.name`]: tool.name,\n [`llm.request.functions.${index}.description`]: tool.description,\n [`llm.request.functions.${index}.parameters`]: JSON.stringify(tool.parameters),\n });\n });\n\n // Set structured output schema if present\n if (innerOptions.response_model?.schema) {\n const schema = zodToJsonSchema(innerOptions.response_model.schema);\n if (schema) {\n span.setAttributes({\n [`gen_ai.request.structured_output_schema`]: JSON.stringify(schema),\n });\n }\n }\n\n // Execute the original method\n const result = await original.bind(this).apply(this, args) as LLMResponse;\n\n // Set response attributes\n span.setAttributes({\n \"gen_ai.response.model\": result.model,\n \"gen_ai.usage.input_tokens\": result.usage?.prompt_tokens ?? 0,\n \"gen_ai.usage.output_tokens\": result.usage?.completion_tokens ?? 0,\n \"llm.usage.total_tokens\": result.usage?.total_tokens ?? 0,\n });\n\n // Set completion attributes\n result.choices?.forEach(choice => {\n const index = choice.index;\n span.setAttributes({\n [`gen_ai.completion.${index}.finish_reason`]: choice.finish_reason,\n [`gen_ai.completion.${index}.role`]: choice.message.role,\n });\n if (choice.message.content) {\n span.setAttribute(\n `gen_ai.completion.${index}.content`,\n JSON.stringify(choice.message.content),\n );\n }\n choice.message.tool_calls?.forEach((toolCall, toolCallIndex) => {\n span.setAttributes({\n [`gen_ai.completion.${index}.message.tool_calls.${toolCallIndex}.id`]: toolCall.id,\n [`gen_ai.completion.${index}.message.tool_calls.${toolCallIndex}.name`]:\n toolCall.function.name,\n [`gen_ai.completion.${index}.message.tool_calls.${toolCallIndex}.arguments`]:\n JSON.stringify(toolCall.function.arguments),\n });\n });\n });\n\n // Handle special case when choices is empty (structured output mode)\n if (!result.choices || result.choices.length === 0) {\n const data = (result as any).data;\n if (data) {\n span.setAttributes({\n \"gen_ai.completion.0.role\": \"assistant\",\n \"gen_ai.completion.0.content\": typeof data === \"string\"\n ? data\n : JSON.stringify(data),\n });\n }\n }\n\n return result;\n });\n };\n","import { diag, trace } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\nimport { z } from \"zod/v3\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { observe as laminarObserve } from \"../../decorators\";\nimport { Laminar } from \"../../laminar\";\nimport { LaminarContextManager } from \"../../opentelemetry-lib/tracing/context\";\nimport { newUUID, StringUUID } from \"../../utils\";\nimport { PlaywrightInstrumentation } from \"../playwright\";\nimport {\n cleanStagehandLLMClient,\n nameArgsOrCopy,\n prettyPrintZodSchema,\n} from \"../utils\";\nimport { createLLMClientCreateChatCompletionWrapper } from \"./shared-llm-wrapper\";\n\n// Stagehand interfaces:\ntype AvailableModel = string;\n\ninterface ActOptions {\n action: string;\n modelName?: AvailableModel;\n modelClientOptions?: any; // ClientOptions\n variables?: Record<string, string>;\n domSettleTimeoutMs?: number;\n timeoutMs?: number;\n iframes?: boolean;\n frameId?: string;\n}\ntype LLMResponse = {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: {\n index: number;\n message: {\n role: string;\n content: string | null;\n tool_calls: {\n id: string;\n type: string;\n function: {\n name: string;\n arguments: string;\n };\n }[];\n };\n finish_reason: string;\n }[];\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n};\n\ninterface ChatCompletionInnerOptions {\n messages: any[]; // ChatMessage[]\n temperature?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n image?: {\n buffer: Buffer;\n description?: string;\n };\n response_model?: {\n name: string;\n schema: any; // ZodType\n };\n tools?: any[]; // LLMTool[]\n tool_choice?: \"auto\" | \"none\" | \"required\";\n maxTokens?: number;\n requestId?: string;\n};\n\ninterface CreateChatCompletionOptions {\n options: ChatCompletionInnerOptions;\n logger: (message: any) => void;\n retries?: number;\n}\n\ndeclare abstract class LLMClient {\n type: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {});\n modelName: AvailableModel | (string & {});\n hasVision: boolean;\n clientOptions: any; // ClientOptions\n userProvidedInstructions?: string;\n constructor(modelName: AvailableModel, userProvidedInstructions?: string);\n abstract createChatCompletion<T = LLMResponse>(\n options: CreateChatCompletionOptions\n ): Promise<T>;\n generateText: (args: any) => Promise<any>;\n streamText: (args: any) => any;\n streamObject: (args: any) => any;\n generateImage: (args: any) => Promise<any>;\n embed: (args: any) => Promise<any>;\n embedMany: (args: any) => Promise<any>;\n transcribe: (args: any) => Promise<any>;\n generateSpeech: (args: any) => Promise<any>;\n};\n\ninterface StagehandPage {\n act: (args: any) => Promise<any>;\n extract: (args: any) => Promise<any>;\n observe: (args: any) => Promise<any>;\n on: (args: any) => any;\n}\n// ================================\n\n\ninterface GlobalLLMClientOptions {\n // named `type` in Stagehand\n provider: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {})\n model: string\n}\n\ntype AgentClient = {\n execute: (\n instructionOrOptions: string | object,\n ) => Promise<object>;\n};\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return\n*/\nexport class StagehandV2Instrumentation extends InstrumentationBase {\n private playwrightInstrumentation: PlaywrightInstrumentation;\n private globalLLMClientOptions: WeakMap<\n LLMClient,\n GlobalLLMClientOptions | undefined\n > = new WeakMap();\n private globalAgentOptions: WeakMap<\n object,\n Record<string, any> | undefined\n > = new WeakMap();\n private stagehandInstanceToSessionId: WeakMap<object, StringUUID> = new WeakMap();\n\n constructor(playwrightInstrumentation: PlaywrightInstrumentation) {\n super(\n \"@lmnr/browserbase-stagehand-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this.playwrightInstrumentation = playwrightInstrumentation;\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@browserbasehq/stagehand\",\n ['>=1.0.0 <3.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n private patch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`patching stagehand ${moduleVersion}`);\n // Check if Stagehand is non-configurable\n const descriptor = Object.getOwnPropertyDescriptor(moduleExports, 'Stagehand');\n if (descriptor && !descriptor.configurable) {\n // Create a proxy for the entire module exports\n const originalStagehand = moduleExports.Stagehand;\n const patchedConstructor = this.patchStagehandConstructor()(originalStagehand);\n\n // Create a proxy for the module exports\n return new Proxy(moduleExports, {\n get: (target, prop) => {\n if (prop === 'Stagehand') {\n return patchedConstructor;\n }\n return target[prop as keyof typeof target];\n },\n });\n } else {\n // If it's configurable, use the standard _wrap method\n this._wrap(\n moduleExports,\n 'Stagehand',\n this.patchStagehandConstructor(),\n );\n\n return moduleExports;\n }\n }\n\n public manuallyInstrument(Stagehand: any) {\n diag.debug('manually instrumenting stagehand');\n\n // Since we can't replace the Stagehand constructor directly due to non-configurable property,\n // we'll patch the prototype methods of the existing constructor\n\n // First, patch the init method on the prototype\n if (Stagehand && Stagehand.prototype) {\n this._wrap(\n Stagehand.prototype,\n 'init',\n this.patchStagehandInit(),\n );\n this._wrap(\n Stagehand.prototype,\n 'close',\n this.patchStagehandClose(),\n );\n }\n }\n\n private unpatch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`unpatching stagehand ${moduleVersion}`);\n this._unwrap(moduleExports, 'Stagehand');\n\n if (moduleExports.Stagehand) {\n this._unwrap(moduleExports.Stagehand.prototype, 'init');\n this._unwrap(moduleExports.Stagehand.prototype, 'close');\n if (moduleExports.Stagehand.prototype?.page) {\n this._unwrap(moduleExports.Stagehand.prototype.page, 'act');\n this._unwrap(moduleExports.Stagehand.prototype.page, 'extract');\n this._unwrap(moduleExports.Stagehand.prototype.page, 'observe');\n const observeHandler = (moduleExports.Stagehand.prototype.page).observeHandler;\n if (observeHandler) {\n this._unwrap(observeHandler, 'observe');\n }\n const extractHandler = (moduleExports.Stagehand.prototype.page).extractHandler;\n if (extractHandler) {\n this._unwrap(extractHandler, 'textExtract');\n this._unwrap(extractHandler, 'domExtract');\n }\n const actHandler = (moduleExports.Stagehand.prototype.page).actHandler;\n if (actHandler) {\n this._unwrap(actHandler, 'act');\n }\n }\n }\n\n return moduleExports;\n }\n\n private patchStagehandConstructor() {\n const instrumentation = this;\n\n return (Original: any) => {\n // Create a constructor function that maintains the same signature\n const Stagehand = function (this: InstanceType<typeof Original>, ...args: any[]) {\n // Only apply if this is a new instance\n if (!(this instanceof Stagehand)) {\n return new (Stagehand)(...args);\n }\n\n const instance = new Original(args.length > 0 ? args[0] : undefined);\n Object.assign(this, instance);\n\n instrumentation._wrap(\n this,\n 'init',\n instrumentation.patchStagehandInit(),\n );\n\n instrumentation._wrap(\n this,\n 'close',\n instrumentation.patchStagehandClose(),\n );\n\n return this;\n } as unknown as typeof Original;\n\n // Copy static properties\n Object.setPrototypeOf(Stagehand, Original);\n // Copy prototype properties\n Stagehand.prototype = Object.create(Original.prototype);\n Stagehand.prototype.constructor = Stagehand;\n\n return Stagehand;\n };\n }\n\n private patchStagehandInit() {\n const instrumentation = this;\n\n return (original: any) => async function method(this: any) {\n const sessionId = newUUID();\n\n // Make sure the parent span is set before calling the original init method\n // so that playwright instrumentation does not set its default parent span\n const parentSpan = Laminar.startSpan({\n name: 'Stagehand',\n });\n instrumentation.playwrightInstrumentation.setParentSpanForSession(sessionId, parentSpan);\n\n const result = await original.bind(this).apply(this);\n for (const page of this.context.pages()) {\n await instrumentation.playwrightInstrumentation.patchPage(page, sessionId);\n }\n await instrumentation.playwrightInstrumentation.patchPage(this.page, sessionId);\n\n instrumentation._wrap(\n this,\n 'agent',\n instrumentation.patchStagehandAgentInitializer(sessionId),\n );\n\n // when new playwright page opens, we need to add playwright instrumentation\n // to it and instrument the stagehand page stored on the stagehand instance\n this.context.on('page', async (page: any) => {\n await instrumentation.playwrightInstrumentation.patchPage(page, sessionId);\n instrumentation.patchStagehandPage(this.stagehandPage, sessionId);\n });\n\n instrumentation.patchStagehandPage(this.stagehandPage, sessionId);\n if (this.llmClient) {\n instrumentation.globalLLMClientOptions.set(this.llmClient, {\n provider: this.llmClient.type,\n model: this.llmClient.modelName,\n });\n instrumentation._wrap(\n this.llmClient,\n 'createChatCompletion',\n instrumentation.patchStagehandLLMClientCreateChatCompletion(),\n );\n }\n\n instrumentation.stagehandInstanceToSessionId.set(this, sessionId);\n return result;\n };\n }\n\n private patchStagehandClose() {\n const instrumentation = this;\n return (original: Function) => async function method(this: any, ...args: any[]) {\n // Clean up the session from the registry\n const sessionId = instrumentation.stagehandInstanceToSessionId.get(this);\n if (sessionId) {\n instrumentation.playwrightInstrumentation.removeAndEndParentSpanForSession(sessionId);\n instrumentation.stagehandInstanceToSessionId.delete(this);\n }\n\n await original.bind(this).apply(this, args);\n };\n }\n\n private patchStagehandPage(page: StagehandPage, sessionId: StringUUID) {\n const actHandler = (page as any).actHandler;\n if (actHandler) {\n if (actHandler.act) {\n this._wrap(\n actHandler,\n 'act',\n this.patchStagehandV1ActHandlerAct(),\n );\n }\n if (actHandler.actFromObserveResult) {\n this._wrap(\n actHandler,\n 'actFromObserveResult',\n this.patchStagehandV2ActHandlerActFromObserveResult(),\n );\n }\n if (actHandler.observeAct) {\n this._wrap(\n actHandler,\n 'observeAct',\n this.patchStagehandV2ActHandlerObserveAct(),\n );\n }\n }\n\n const observeHandler = (page as any).observeHandler;\n if (observeHandler) {\n this._wrap(\n observeHandler,\n 'observe',\n this.patchStagehandObserveHandler(),\n );\n }\n\n const extractHandler = (page as any).extractHandler;\n if (extractHandler) {\n if (extractHandler.textExtract) {\n this._wrap(\n extractHandler,\n 'textExtract',\n this.patchStagehandExtractHandlerTextExtract(),\n );\n }\n\n if (extractHandler.domExtract) {\n this._wrap(\n extractHandler,\n 'domExtract',\n this.patchStagehandExtractHandlerDomExtract(),\n );\n }\n }\n\n this._wrap(\n page,\n 'act',\n this.patchStagehandGlobalMethod('act', sessionId),\n );\n\n this._wrap(\n page,\n 'extract',\n this.patchStagehandGlobalMethod('extract', sessionId),\n );\n\n this._wrap(\n page,\n 'observe',\n this.patchStagehandGlobalMethod('observe', sessionId),\n );\n }\n\n private patchStagehandGlobalMethod(methodName: string, sessionId: StringUUID) {\n const instrumentation = this;\n return (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n if (methodName === \"extract\"\n && Array.isArray(input)\n && input.length > 0 && (input[0])?.schema\n ) {\n // We need to clone the input object to avoid mutating the original object\n // because the original object is passed to the LLM client\n const { schema, ...rest } = input[0];\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n input[0] = { ...rest, schema: prettySchema };\n }\n return await Laminar.withSpan(\n instrumentation.playwrightInstrumentation.getParentSpanForSession(sessionId)!,\n async () => await laminarObserve(\n {\n name: `stagehand.${methodName}`,\n input,\n },\n async (thisArg: any, rest: any[]) => await original.apply(thisArg, rest),\n this, args,\n ),\n );\n };\n }\n\n private patchStagehandV1ActHandlerAct() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.act',\n input: {\n action: args[0].action,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n chunksSeen: args[0].chunksSeen,\n steps: args[0].steps,\n requestId: args[0].requestId,\n schema: args[0].schema,\n retries: args[0].retries,\n variables: args[0].variables,\n previousSelectors: args[0].previousSelectors,\n skipActionCacheForThisStep: args[0].skipActionCacheForThisStep,\n domSettleTimeoutMs: args[0].domSettleTimeoutMs,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandV2ActHandlerActFromObserveResult() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.actFromObserveResult',\n input: {\n observe: args?.[0] ?? null,\n domSettleTimeoutMs: args?.[1] ?? null,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandV2ActHandlerObserveAct() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n const actOptions = args?.[0] as ActOptions | undefined;\n const llmClient = args.filter((arg) =>\n Object.keys(arg).includes('modelName'),\n )[0] as LLMClient | undefined;\n const requestId = typeof args?.[3] === 'string' ? args?.[3] : null;\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.observeAct',\n input: {\n action: actOptions?.action,\n modelName: actOptions?.modelName,\n variables: actOptions?.variables,\n domSettleTimeoutMs: actOptions?.domSettleTimeoutMs,\n timeoutMs: actOptions?.timeoutMs,\n llmClient: cleanStagehandLLMClient(llmClient ?? {}),\n requestId: requestId,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n // Stagehand uses zod 3.x, so we need to use the v3 version of zod\n private patchStagehandExtractHandlerTextExtract() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function textExtract(this: any, ...args: any[]) {\n const schema = (args[0].schema as z.AnyZodObject);\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n return await laminarObserve(\n {\n name: 'stagehand.extractHandler.textExtract',\n input: {\n instruction: args[0].instruction,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n requestId: args[0].requestId,\n schema: prettySchema,\n content: args[0].content,\n domSettleTimeoutMs: args[0].domSettleTimeoutMs,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandExtractHandlerDomExtract() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function domExtract(this: any, ...args: any[]) {\n const schema = (args[0].schema as z.AnyZodObject);\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n\n return await laminarObserve(\n {\n name: 'stagehand.extractHandler.domExtract',\n input: {\n instruction: args[0].instruction,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n requestId: args[0].requestId,\n schema: prettySchema,\n content: args[0].content,\n chunksSeen: args[0].chunksSeen,\n domSettleTimeoutMs: args[0].domSettleTimeoutMs,\n },\n },\n async () => await original.apply(this, args),\n );\n };\n }\n\n private patchStagehandObserveHandler() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function observe(this: any, ...args: any[]) {\n\n return await laminarObserve(\n {\n name: 'stagehand.observeHandler.observe',\n input: {\n instruction: args[0].instruction,\n llmClient: cleanStagehandLLMClient(args[0].llmClient ?? {}),\n requestId: args[0].requestId,\n returnAction: args[0].returnAction,\n onlyVisible: args[0].onlyVisible,\n drawOverlay: args[0].drawOverlay,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandLLMClientCreateChatCompletion() {\n return createLLMClientCreateChatCompletionWrapper(this.globalLLMClientOptions);\n }\n\n private patchStagehandAgentInitializer(sessionId: StringUUID) {\n const instrumentation = this;\n return (original: (...args: any[]) => any) =>\n function agent(this: any, ...args: any[]) {\n if (args.length > 0 && typeof args[0] === 'object') {\n instrumentation.globalAgentOptions.set(this, args[0]);\n }\n const agent = original.bind(this).apply(this, args);\n instrumentation.patchStagehandAgent(agent, sessionId);\n return agent;\n };\n }\n\n private patchStagehandAgent(agent: AgentClient, sessionId: StringUUID) {\n this._wrap(\n agent,\n 'execute',\n this.patchStagehandAgentExecute(sessionId),\n );\n }\n\n private patchStagehandAgentExecute(sessionId: StringUUID) {\n const instrumentation = this;\n return (original: (this: any, ...args: any[]) => Promise<any>) =>\n async function execute(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n\n return await Laminar.withSpan(\n instrumentation.playwrightInstrumentation.getParentSpanForSession(sessionId)!,\n async () => await laminarObserve(\n {\n name: 'stagehand.agent.execute',\n input,\n },\n async () => await laminarObserve(\n {\n name: 'execute',\n // input and output are set as gen_ai.prompt and gen_ai.completion\n ignoreInput: true,\n ignoreOutput: true,\n spanType: \"LLM\",\n },\n async () => {\n const span = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n\n const provider = instrumentation.globalAgentOptions.get(this)?.provider\n ?? instrumentation.globalLLMClientOptions.get(this)?.provider;\n const model = instrumentation.globalAgentOptions.get(this)?.model\n ?? instrumentation.globalLLMClientOptions.get(this)?.model;\n span?.setAttributes({\n ...(provider ? { \"gen_ai.system\": provider } : {}),\n ...(model ? { \"gen_ai.request.model\": model } : {}),\n });\n\n let promptIndex = 0;\n if (instrumentation.globalAgentOptions.get(this)?.instructions) {\n span?.setAttributes({\n \"gen_ai.prompt.0.content\":\n instrumentation.globalAgentOptions.get(this)?.instructions,\n \"gen_ai.prompt.0.role\": \"system\",\n });\n promptIndex++;\n }\n\n const instruction = typeof input === 'string' ? input : (input as any).instruction;\n if (instruction) {\n span?.setAttributes({\n [`gen_ai.prompt.${promptIndex}.content`]: instruction,\n [`gen_ai.prompt.${promptIndex}.role`]: \"user\",\n });\n }\n\n const result = await original\n .bind(this)\n .apply(this, args);\n\n if (result.completed && result.success && result.message) {\n const content = [{ type: \"text\", text: result.message }];\n if (result.actions && result.actions.length > 0) {\n content.push({\n type: \"text\",\n text: JSON.stringify({ actions: result.actions }),\n });\n }\n span?.setAttributes({\n \"gen_ai.completion.0.content\": JSON.stringify(content),\n \"gen_ai.completion.0.role\": \"assistant\",\n });\n } else if (result.completed && !result.success) {\n span?.recordException(new Error(result.message));\n }\n if (result.usage) {\n span?.setAttributes({\n \"gen_ai.usage.input_tokens\": result.usage.input_tokens,\n \"gen_ai.usage.output_tokens\": result.usage.output_tokens,\n \"llm.usage.total_tokens\":\n result.usage.input_tokens + result.usage.output_tokens,\n });\n }\n return result;\n },\n ),\n ),\n );\n };\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return\n*/\n","import { LaminarClient } from '@lmnr-ai/client';\nimport { SessionRecordingOptions } from '@lmnr-ai/types';\nimport { diag, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\nimport type * as PuppeteerLib from \"puppeteer\";\nimport type { Browser, BrowserContext, Page } from 'puppeteer';\nimport type * as PuppeteerCoreLib from \"puppeteer-core\";\n\nimport { version as SDK_VERSION } from \"../../package.json\";\nimport { observe } from '../decorators';\nimport { TRACE_HAS_BROWSER_SESSION } from '../opentelemetry-lib/tracing/attributes';\nimport { LaminarContextManager } from '../opentelemetry-lib/tracing/context';\nimport { initializeLogger, newUUID, NIL_UUID, otelTraceIdToUUID, StringUUID } from '../utils';\nimport {\n ChunkBuffer,\n EventChunk,\n injectSessionRecorder,\n LMNR_SEND_EVENTS_FUNCTION_NAME,\n sendEvents,\n sendPageEvents,\n takeFullSnapshot,\n} from \"./utils\";\n\nconst logger = initializeLogger();\n\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class PuppeteerInstrumentation extends InstrumentationBase {\n private _patchedBrowsers: Set<Browser> = new Set();\n private _client: LaminarClient;\n private _sessionRecordingOptions?: SessionRecordingOptions;\n\n constructor(client: LaminarClient, sessionRecordingOptions?: SessionRecordingOptions) {\n super(\n \"@lmnr/puppeteer-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this._client = client;\n this._sessionRecordingOptions = sessionRecordingOptions;\n }\n\n protected init(): InstrumentationModuleDefinition[] {\n const puppeteerInstrumentation = new InstrumentationNodeModuleDefinition(\n \"puppeteer\",\n // About two years before first writing this instrumentation\n // and apparently no big breaking changes afterwards\n // https://github.com/puppeteer/puppeteer/releases\n ['>=19.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n const puppeteerCoreInstrumentation = new InstrumentationNodeModuleDefinition(\n \"puppeteer-core\",\n ['>=19.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return [puppeteerInstrumentation, puppeteerCoreInstrumentation];\n }\n\n public manuallyInstrument(puppeteerModule: typeof PuppeteerLib | typeof PuppeteerCoreLib) {\n this._wrap(\n puppeteerModule,\n 'launch',\n this.patchNewBrowser(),\n );\n\n this._wrap(\n puppeteerModule,\n 'connect',\n this.patchNewBrowser(),\n );\n\n return puppeteerModule;\n }\n\n private patch(\n moduleExports: typeof PuppeteerLib | typeof PuppeteerCoreLib,\n moduleVersion?: string,\n ) {\n diag.debug(`patching puppeteer ${moduleVersion}`);\n this._wrap(\n moduleExports,\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.PuppeteerNode.prototype,\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports,\n `connect`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.Puppeteer.prototype,\n `connect`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.default,\n `launch`,\n this.patchNewBrowser(),\n );\n\n this._wrap(\n moduleExports.default,\n `connect`,\n this.patchNewBrowser(),\n );\n\n return moduleExports;\n }\n\n private unpatch(moduleExports: typeof PuppeteerLib, moduleVersion?: string) {\n diag.debug(`unpatching puppeteer ${moduleVersion}`);\n this._unwrap(\n moduleExports,\n `launch`,\n );\n\n this._unwrap(\n moduleExports,\n `connect`,\n );\n\n this._unwrap(\n moduleExports.PuppeteerNode.prototype,\n `launch`,\n );\n\n this._unwrap(\n moduleExports.Puppeteer.prototype,\n `connect`,\n );\n\n this._unwrap(\n moduleExports.default,\n `connect`,\n );\n\n this._unwrap(\n moduleExports.default,\n `launch`,\n );\n\n for (const browser of this._patchedBrowsers) {\n this._unwrap(browser, 'createBrowserContext');\n }\n }\n\n private patchNewBrowser() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: any[]) {\n const browser: Browser = await original.call(this, ...args);\n const sessionId = newUUID();\n\n for (const context of browser.browserContexts()) {\n context.on('targetcreated', (target) => {\n target.page().then(page => {\n if (page) {\n plugin.patchPage(page, sessionId).catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n })\n .catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n await Promise.all((await context.pages()).map(page => plugin.patchPage(page, sessionId)));\n }\n\n plugin._wrap(\n browser,\n 'createBrowserContext',\n plugin.patchBrowserNewContext(),\n );\n\n plugin._patchedBrowsers.add(browser);\n return browser;\n };\n }\n\n private patchBrowserNewContext() {\n const plugin = this;\n return (original: Function) => async function method(this: Browser, ...args: unknown[]) {\n const context: BrowserContext = await original.bind(this).apply(this, args);\n const sessionId = newUUID();\n // Patch pages created by browser, e.g. new tab\n context.on('targetcreated', (target) => {\n target.page().then(page => {\n if (page) {\n plugin.patchPage(page, sessionId).catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n })\n .catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n context.on('targetchanged', (target) => {\n target.page().then(page => {\n if (page) {\n plugin.patchPage(page, sessionId).catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n }\n })\n .catch(error => {\n logger.error(\"Failed to patch page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n\n // Patch pages that are already created\n for (const page of await context.pages()) {\n await plugin.patchPage(page, sessionId);\n }\n\n return context;\n };\n }\n\n public async patchPage(page: Page, sessionId: StringUUID) {\n return await observe({ name: 'puppeteer.page' }, async () => {\n await this._patchPage(page, sessionId);\n });\n }\n\n private async _patchPage(page: Page, sessionId: StringUUID) {\n const originalBringToFront = page.bringToFront.bind(page);\n\n page.bringToFront = async () => {\n await originalBringToFront();\n await takeFullSnapshot(page);\n };\n\n const currentSpan = trace.getSpan(LaminarContextManager.getContext()) ?? trace.getActiveSpan();\n currentSpan?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n const otelTraceId = currentSpan?.spanContext().traceId;\n const traceId = otelTraceId ? otelTraceIdToUUID(otelTraceId) : NIL_UUID;\n\n page.on('domcontentloaded', () => {\n injectSessionRecorder(page, this._sessionRecordingOptions).catch(error => {\n logger.error(\"Error in onLoad handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n\n page.on('close', () => {\n sendPageEvents(this._client, page, sessionId, traceId).catch(error => {\n logger.error(\"Error in onClose handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n });\n });\n\n await injectSessionRecorder(page, this._sessionRecordingOptions);\n\n const chunkBuffers = new Map<string, ChunkBuffer>();\n\n try {\n await page.exposeFunction(LMNR_SEND_EVENTS_FUNCTION_NAME, async (chunk: EventChunk) => {\n await sendEvents(chunk, this._client, chunkBuffers, sessionId, traceId);\n });\n } catch (error) {\n logger.debug(\"Could not expose function \" + LMNR_SEND_EVENTS_FUNCTION_NAME + \": \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\n","import { initializeLogger } from \"../../../utils\";\n\nexport const logger = initializeLogger();\n\n// CDP timeout for operations\nexport const CDP_OPERATION_TIMEOUT_MS = 10000;\n\n// URLs that should be skipped for recording\nexport const SKIP_URL_PATTERNS = [\n \"about:blank\",\n \"chrome-error://\",\n \"chrome://\",\n \"edge-error://\",\n \"edge://\",\n \"about:neterror\",\n \"about:certerror\",\n \"devtools://\",\n];\n","import { SessionRecordingOptions } from \"@lmnr-ai/types\";\n\nimport { RECORDER } from \"../../recorder\";\nimport { injectScript } from \"../../utils\";\nimport {\n CDP_OPERATION_TIMEOUT_MS,\n logger,\n SKIP_URL_PATTERNS,\n} from \"./constants\";\nimport {\n type FrameTree,\n type RuntimeBindingCalledEvent,\n type RuntimeEvaluateResult,\n type StagehandCdpConnection,\n type StagehandV3Page,\n type V3RecorderState,\n} from \"./types\";\n\n/**\n * Check if a URL should be skipped for recording (error pages, blank pages, etc.)\n */\nexport function shouldSkipUrl(url: string): boolean {\n if (!url) return true;\n return SKIP_URL_PATTERNS.some(pattern => url.startsWith(pattern));\n}\n\n/**\n * Create an isolated world for a page and return the execution context ID\n */\nexport async function getOrCreateIsolatedWorld(\n page: StagehandV3Page,\n): Promise<{ contextId: number; frameId: string } | null> {\n try {\n // Get the frame tree to find the main frame\n const frameTreeResult = await Promise.race([\n page.sendCDP<{ frameTree: FrameTree }>(\"Page.getFrameTree\"),\n new Promise<null>((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout getting frame tree\")), CDP_OPERATION_TIMEOUT_MS),\n ),\n ]);\n\n if (!frameTreeResult) return null;\n\n const frameId = frameTreeResult.frameTree.frame.id;\n\n // Create isolated world\n const isolatedWorldResult = await Promise.race([\n page.sendCDP<{ executionContextId: number }>(\"Page.createIsolatedWorld\", {\n frameId,\n worldName: \"laminar-recorder\",\n }),\n new Promise<null>((_, reject) =>\n setTimeout(() => reject(\n new Error(\"Timeout creating isolated world\")), CDP_OPERATION_TIMEOUT_MS,\n ),\n ),\n ]);\n\n if (!isolatedWorldResult) return null;\n\n return {\n contextId: isolatedWorldResult.executionContextId,\n frameId,\n };\n } catch (error) {\n logger.debug(\"Failed to create isolated world: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Check if the session recorder is already present in the page\n */\nexport async function isRecorderPresent(\n page: StagehandV3Page,\n contextId: number,\n): Promise<boolean> {\n try {\n const result = await Promise.race([\n page.sendCDP<RuntimeEvaluateResult>(\"Runtime.evaluate\", {\n expression: \"typeof window.lmnrRrweb !== 'undefined'\",\n contextId,\n returnByValue: true,\n }),\n new Promise<null>((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout checking recorder\")), CDP_OPERATION_TIMEOUT_MS),\n ),\n ]);\n\n if (!result) return true; // On timeout, assume present to avoid double injection\n return result.result?.value === true;\n } catch (error) {\n logger.debug(\"Failed to check if recorder is present: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return true; // On error, assume present to be safe\n }\n}\n\n/**\n * Inject the session recorder into a page using CDP\n */\nexport async function injectRecorderViaCDP(\n page: StagehandV3Page,\n state: V3RecorderState,\n conn: StagehandCdpConnection,\n sessionRecordingOptions?: SessionRecordingOptions,\n bindingHandler?: (event: RuntimeBindingCalledEvent) => void,\n): Promise<number | null> {\n try {\n // Check if we should skip this page\n let url: string;\n try {\n url = page.url();\n } catch (error) {\n logger.debug(\"Failed to get page URL, page might be closed: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n\n if (shouldSkipUrl(url)) {\n logger.debug(`Skipping recorder injection for URL: ${url}`);\n return null;\n }\n\n // Get or create isolated world\n const worldResult = await getOrCreateIsolatedWorld(page);\n if (!worldResult) {\n logger.debug(\"Failed to get isolated world for page\");\n return null;\n }\n\n const { contextId, frameId } = worldResult;\n\n // Check if already injected\n if (await isRecorderPresent(page, contextId)) {\n logger.debug(\"Recorder already present, skipping injection\");\n // Still register the context mapping\n state.contextIdToSession.set(contextId, {\n sessionId: state.sessionId,\n traceId: state.traceId,\n });\n return contextId;\n }\n\n // Inject rrweb base\n try {\n await page.sendCDP(\"Runtime.evaluate\", {\n expression: RECORDER,\n contextId,\n });\n } catch (error) {\n logger.debug(\"Failed to inject rrweb: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n\n // Inject recording setup script using the existing injectScript function\n // Convert function to string and create an IIFE with options\n // Pass true for stringifyCallbackArgs since CDP bindings require stringified arguments\n const optionsJson = JSON.stringify(sessionRecordingOptions ?? {});\n const injectExpression = `(${injectScript.toString()})(${optionsJson}, true);`;\n try {\n await page.sendCDP(\"Runtime.evaluate\", {\n expression: injectExpression,\n contextId,\n });\n } catch (error) {\n logger.debug(\"Failed to inject recording setup: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n\n // Add binding globally (not scoped to execution context)\n // The Runtime.bindingCalled event will include the executionContextId\n try {\n await page.sendCDP(\"Runtime.addBinding\", {\n name: \"lmnrSendEvents\",\n });\n logger.debug(`Added binding 'lmnrSendEvents' for page ${frameId}, context ${contextId}`);\n } catch (error) {\n // Binding might already exist, that's ok\n logger.debug(\"Binding may already exist: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n\n // Set up binding handler on this page using the internal Stagehand CDP session\n // The page.sendCDP method goes through the page's mainSession, so we need to listen there\n // We can access the session through the connection's internal structure\n if (bindingHandler) {\n try {\n const pageTargetId = page.targetId();\n if (!state.pageSessionHandlers.has(pageTargetId)) {\n // Access the connection's sessions map to find the session for this page\n const connInternal = conn as unknown as {\n getSession(sessionId: string): {\n on<P>(event: string, handler: (params: P) => void): void\n } | undefined;\n sessions: Map<string, unknown>;\n };\n\n // In Stagehand v3, each page has a corresponding session\n // We need to find the session that owns this page/target\n // The session for a page target is tracked in the context\n // We can iterate sessions and try to set up the listener\n if (connInternal.sessions) {\n for (const [sessionId, session] of connInternal.sessions.entries()) {\n try {\n // Set up the handler on each session (the correct one will receive the events)\n const sessionTyped = session as {\n on<P>(event: string, handler: (params: P) => void): void\n };\n if (sessionTyped.on) {\n sessionTyped.on<RuntimeBindingCalledEvent>(\n \"Runtime.bindingCalled\",\n bindingHandler,\n );\n logger.debug(`Set up binding handler on session ${sessionId}`);\n }\n } catch (error) {\n // Session might be closed, continue with next session\n logger.debug(`Failed to set up binding handler on session ${sessionId}: ` +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n state.pageSessionHandlers.set(pageTargetId, bindingHandler);\n }\n } catch (error) {\n logger.debug(\"Failed to set up binding handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Register context mapping\n state.contextIdToSession.set(contextId, {\n sessionId: state.sessionId,\n traceId: state.traceId,\n });\n logger.debug(\n `Registered context mapping: contextId=${contextId}, sessionId=${state.sessionId}`,\n );\n\n // Mark page as instrumented\n state.instrumentedPageIds.add(frameId);\n\n logger.debug(`Successfully injected recorder into page ${frameId}`);\n return contextId;\n } catch (error) {\n logger.debug(\"Error injecting recorder: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n","import { type SessionRecordingOptions, type StringUUID } from \"@lmnr-ai/types\";\n\nimport { EventChunk, sendEvents } from \"../../utils\";\nimport { injectRecorderViaCDP, shouldSkipUrl } from \"./cdp-helpers\";\nimport { logger } from \"./constants\";\nimport {\n RuntimeBindingCalledEvent,\n StagehandV3Context,\n TargetCreatedEvent,\n TargetInfoChangedEvent,\n V3RecorderState,\n} from \"./types\";\n\n/**\n * Handle Runtime.bindingCalled events\n */\nexport function createBindingHandler(\n state: V3RecorderState,\n): (event: RuntimeBindingCalledEvent) => void {\n return (event: RuntimeBindingCalledEvent) => {\n if (event.name !== \"lmnrSendEvents\") return;\n const sessionInfo = state.contextIdToSession.get(event.executionContextId);\n if (!sessionInfo) {\n // Try to find any matching session (for cases where context ID changed)\n // This is a fallback - normally the context should be mapped\n if (state.contextIdToSession.size > 0) {\n // Use the first available session info as fallback\n const [, fallbackInfo] = state.contextIdToSession.entries().next().value as\n [number, { sessionId: StringUUID; traceId: StringUUID }];\n if (fallbackInfo) {\n try {\n const chunk = JSON.parse(event.payload) as EventChunk;\n void sendEvents(\n chunk,\n state.client,\n state.chunkBuffers,\n fallbackInfo.sessionId,\n fallbackInfo.traceId,\n );\n } catch (error) {\n logger.debug(\"Failed to parse binding payload: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n return;\n }\n\n try {\n const chunk = JSON.parse(event.payload) as EventChunk;\n void sendEvents(\n chunk,\n state.client,\n state.chunkBuffers,\n sessionInfo.sessionId,\n sessionInfo.traceId,\n );\n } catch (error) {\n logger.debug(\"Failed to handle binding event: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n };\n}\n\n/**\n * Handle Target.targetCreated events for new pages\n */\nexport function createTargetCreatedHandler(\n context: StagehandV3Context,\n state: V3RecorderState,\n sessionRecordingOptions?: SessionRecordingOptions,\n): (event: TargetCreatedEvent) => Promise<void> {\n return async (event: TargetCreatedEvent) => {\n try {\n if (event.targetInfo.type !== \"page\") return;\n\n // Wait a bit for the page to be available in the context\n await new Promise(resolve => setTimeout(resolve, 200));\n // Try to inject into all uninstrumented pages\n for (const page of context.pages()) {\n try {\n const pageId = page.mainFrameId();\n if (!state.instrumentedPageIds.has(pageId)) {\n await injectRecorderViaCDP(\n page,\n state,\n context.conn,\n sessionRecordingOptions,\n state.bindingHandler ?? undefined,\n );\n }\n } catch (error) {\n // Page might have been closed or CDP session lost, continue with next page\n logger.debug(\"Error injecting recorder into new page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n } catch (error) {\n logger.debug(\"Error handling target created event: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n };\n}\n\n/**\n * Handle Target.targetInfoChanged events for URL changes/navigation\n */\nexport function createTargetInfoChangedHandler(\n context: StagehandV3Context,\n state: V3RecorderState,\n sessionRecordingOptions?: SessionRecordingOptions,\n): (event: TargetInfoChangedEvent) => Promise<void> {\n return async (event: TargetInfoChangedEvent) => {\n // Only handle page targets\n if (event.targetInfo.type !== \"page\") return;\n\n const url = event.targetInfo.url;\n\n if (shouldSkipUrl(url)) return;\n\n logger.debug(`Target URL changed to ${url}, checking if recorder injection needed`);\n\n await new Promise(resolve => setTimeout(resolve, 150));\n\n try {\n for (const page of context.pages()) {\n // Try to match by target ID\n const targetId = page.targetId();\n if (targetId === event.targetInfo.targetId) {\n await injectRecorderViaCDP(\n page, state, context.conn, sessionRecordingOptions, state.bindingHandler ?? undefined,\n );\n break;\n }\n }\n } catch (error) {\n logger.debug(\"Error handling target info change: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n };\n}\n","import { LaminarClient } from \"@lmnr-ai/client\";\nimport { type SessionRecordingOptions } from \"@lmnr-ai/types\";\nimport { diag, type Span, trace } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { version as SDK_VERSION } from \"../../../../package.json\";\nimport { observe as laminarObserve } from \"../../../decorators\";\nimport { Laminar } from \"../../../laminar\";\nimport { TRACE_HAS_BROWSER_SESSION } from \"../../../opentelemetry-lib/tracing/attributes\";\nimport { LaminarContextManager } from \"../../../opentelemetry-lib/tracing/context\";\nimport { newUUID, NIL_UUID, otelTraceIdToUUID, StringUUID } from \"../../../utils\";\nimport { nameArgsOrCopy, prettyPrintZodSchema } from \"../../utils\";\nimport {\n createLLMClientCreateChatCompletionWrapper,\n GlobalLLMClientOptions,\n} from \"../shared-llm-wrapper\";\nimport { injectRecorderViaCDP } from \"./cdp-helpers\";\nimport { logger } from \"./constants\";\nimport {\n createBindingHandler,\n createTargetCreatedHandler,\n createTargetInfoChangedHandler,\n} from \"./event-handlers\";\nimport {\n StagehandV3Context,\n TargetCreatedEvent,\n TargetInfoChangedEvent,\n V3RecorderState,\n} from \"./types\";\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return,\n @typescript-eslint/no-misused-promises\n*/\nexport class StagehandInstrumentation extends InstrumentationBase {\n private stagehandInstanceToSessionId: WeakMap<object, StringUUID> = new WeakMap();\n private globalLLMClientOptions: WeakMap<\n any,\n GlobalLLMClientOptions | undefined\n > = new WeakMap();\n private globalAgentOptions: WeakMap<\n object,\n Record<string, any> | undefined\n > = new WeakMap();\n private sessionIdToParentSpan: Map<StringUUID, Span> = new Map();\n\n // Session recording state per Stagehand instance\n private stagehandInstanceToRecorderState: WeakMap<object, V3RecorderState> = new WeakMap();\n\n // LaminarClient for sending events (set externally)\n private _client: LaminarClient | null = null;\n\n // Session recording options\n private _sessionRecordingOptions?: SessionRecordingOptions;\n\n constructor(sessionRecordingOptions?: SessionRecordingOptions) {\n super(\n \"@lmnr/browserbase-stagehand-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n this._sessionRecordingOptions = sessionRecordingOptions;\n }\n\n /**\n * Set the LaminarClient to use for sending browser events.\n * This must be called before Stagehand.init() to enable session recording.\n */\n public setClient(client: LaminarClient): void {\n this._client = client;\n }\n\n /**\n * Get the LaminarClient instance\n */\n public get client(): LaminarClient | null {\n return this._client;\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@browserbasehq/stagehand\",\n ['>=3.0.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n private patch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`patching stagehand ${moduleVersion}`);\n\n // Check if Stagehand is non-configurable\n const descriptor = Object.getOwnPropertyDescriptor(moduleExports, 'Stagehand');\n if (descriptor && !descriptor.configurable) {\n // Create a proxy for the entire module exports\n const originalStagehand = moduleExports.Stagehand;\n const patchedConstructor = this.patchStagehandConstructor()(originalStagehand);\n\n // Create a proxy for the module exports\n return new Proxy(moduleExports, {\n get: (target, prop) => {\n if (prop === 'Stagehand') {\n return patchedConstructor;\n }\n return target[prop as keyof typeof target];\n },\n });\n } else {\n // If it's configurable, use the standard _wrap method\n this._wrap(\n moduleExports,\n 'Stagehand',\n this.patchStagehandConstructor(),\n );\n\n return moduleExports;\n }\n }\n\n public manuallyInstrument(Stagehand: any) {\n diag.debug('manually instrumenting stagehand');\n\n // Patch the prototype methods of the existing constructor\n if (Stagehand && Stagehand.prototype) {\n this._wrap(\n Stagehand.prototype,\n 'init',\n this.patchStagehandInit(),\n );\n this._wrap(\n Stagehand.prototype,\n 'close',\n this.patchStagehandClose(),\n );\n }\n }\n\n private unpatch(moduleExports: any, moduleVersion?: string) {\n diag.debug(`unpatching stagehand ${moduleVersion}`);\n this._unwrap(moduleExports, 'Stagehand');\n\n if (moduleExports.Stagehand && moduleExports.Stagehand.prototype) {\n this._unwrap(moduleExports.Stagehand.prototype, 'init');\n this._unwrap(moduleExports.Stagehand.prototype, 'close');\n this._unwrap(moduleExports.Stagehand.prototype, 'act');\n this._unwrap(moduleExports.Stagehand.prototype, 'extract');\n this._unwrap(moduleExports.Stagehand.prototype, 'observe');\n\n // Try to unwrap handler methods if they exist on the prototype\n const prototype = moduleExports.Stagehand.prototype;\n if (prototype.actHandler) {\n this._unwrap(prototype.actHandler, 'act');\n this._unwrap(prototype.actHandler, 'actFromObserveResult');\n }\n if (prototype.extractHandler) {\n this._unwrap(prototype.extractHandler, 'extract');\n }\n if (prototype.observeHandler) {\n this._unwrap(prototype.observeHandler, 'observe');\n }\n // Try to unwrap LLM client if it exists\n if (prototype.llmClient) {\n this._unwrap(prototype.llmClient, 'createChatCompletion');\n }\n }\n\n return moduleExports;\n }\n\n private patchStagehandConstructor() {\n const instrumentation = this;\n\n return (Original: any) => {\n // Create a constructor function that maintains the same signature\n const Stagehand = function (this: InstanceType<typeof Original>, ...args: any[]) {\n // Only apply if this is a new instance\n if (!(this instanceof Stagehand)) {\n return new (Stagehand)(...args);\n }\n\n const instance = new Original(args.length > 0 ? args[0] : undefined);\n Object.assign(this, instance);\n\n instrumentation._wrap(\n this,\n 'init',\n instrumentation.patchStagehandInit(),\n );\n\n instrumentation._wrap(\n this,\n 'close',\n instrumentation.patchStagehandClose(),\n );\n\n return this;\n } as unknown as typeof Original;\n\n // Copy static properties\n Object.setPrototypeOf(Stagehand, Original);\n // Copy prototype properties\n Stagehand.prototype = Object.create(Original.prototype);\n Stagehand.prototype.constructor = Stagehand;\n\n return Stagehand;\n };\n }\n\n private patchStagehandInit() {\n const instrumentation = this;\n\n return (original: any) => async function method(this: any) {\n const sessionId = newUUID();\n\n // Create parent span for this Stagehand session\n const parentSpan = Laminar.startSpan({\n name: 'Stagehand',\n });\n instrumentation.sessionIdToParentSpan.set(sessionId, parentSpan);\n\n instrumentation.stagehandInstanceToSessionId.set(this, sessionId);\n\n // Get trace ID from current span context\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n currentSpan?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n const otelTraceId = currentSpan?.spanContext().traceId;\n const traceId = otelTraceId ? otelTraceIdToUUID(otelTraceId) : NIL_UUID;\n\n // Call the original init method first\n const result = await original.bind(this).apply(this);\n\n // After init, wrap the global methods on the stagehand instance\n instrumentation._wrap(\n this,\n 'act',\n instrumentation.patchStagehandGlobalMethod('act', sessionId, parentSpan),\n );\n\n instrumentation._wrap(\n this,\n 'extract',\n instrumentation.patchStagehandGlobalMethod('extract', sessionId, parentSpan),\n );\n\n instrumentation._wrap(\n this,\n 'observe',\n instrumentation.patchStagehandGlobalMethod('observe', sessionId, parentSpan),\n );\n\n // Wrap handler methods if they exist\n if (this.actHandler) {\n instrumentation.patchActHandler(this.actHandler);\n }\n\n if (this.extractHandler) {\n instrumentation.patchExtractHandler(this.extractHandler);\n }\n\n if (this.observeHandler) {\n instrumentation.patchObserveHandler(this.observeHandler);\n }\n\n // Wrap LLM client if it exists\n if (this.llmClient) {\n instrumentation.globalLLMClientOptions.set(this.llmClient, {\n provider: this.llmClient.type,\n model: this.llmClient.modelName,\n });\n instrumentation._wrap(\n this.llmClient,\n 'createChatCompletion',\n instrumentation.patchStagehandLLMClientCreateChatCompletion(),\n );\n }\n\n // Wrap agent method if it exists\n instrumentation._wrap(\n this,\n 'agent',\n instrumentation.patchStagehandAgentInitializer(sessionId, parentSpan),\n );\n\n // Set up session recording if client is available\n if (instrumentation._client) {\n await instrumentation.setupSessionRecording(this, sessionId, traceId);\n }\n\n // Patch all existing pages\n if (this.context && this.context.pages) {\n for (const page of this.context.pages()) {\n instrumentation.patchStagehandPage(page, parentSpan);\n }\n }\n\n // Set up listener for new pages\n if (this.context && this.context.on) {\n this.context.on('page', (page: any) => {\n instrumentation.patchStagehandPage(page, parentSpan);\n });\n }\n\n return result;\n };\n }\n\n /**\n * Set up session recording for a Stagehand instance\n */\n private async setupSessionRecording(\n stagehandInstance: any,\n sessionId: StringUUID,\n traceId: StringUUID,\n ): Promise<void> {\n if (!this._client) {\n logger.debug(\"No Laminar client available, skipping session recording setup\");\n return;\n }\n\n // Get the context from the Stagehand instance\n const context = stagehandInstance.context as StagehandV3Context | undefined;\n if (!context || !context.conn) {\n logger.debug(\"No context or connection available, skipping session recording setup\");\n return;\n }\n // Create recorder state\n const recorderState: V3RecorderState = {\n sessionId,\n traceId,\n client: this._client,\n chunkBuffers: new Map(),\n contextIdToSession: new Map(),\n instrumentedPageIds: new Set(),\n bindingHandler: null,\n targetCreatedHandler: null,\n targetInfoChangedHandler: null,\n pageSessionHandlers: new Map(),\n };\n\n // Store recorder state\n this.stagehandInstanceToRecorderState.set(stagehandInstance, recorderState);\n\n // Set up binding event handler\n // (will be registered on individual page sessions during injection)\n const bindingHandler = createBindingHandler(recorderState);\n recorderState.bindingHandler = bindingHandler;\n\n // Set up target created handler for new pages\n const targetCreatedHandler = createTargetCreatedHandler(\n context,\n recorderState,\n this._sessionRecordingOptions,\n );\n recorderState.targetCreatedHandler = targetCreatedHandler;\n context.conn.on<TargetCreatedEvent>(\"Target.targetCreated\", targetCreatedHandler);\n\n // Set up target info changed handler for re-injection after navigation\n const targetInfoChangedHandler = createTargetInfoChangedHandler(\n context,\n recorderState,\n this._sessionRecordingOptions,\n );\n recorderState.targetInfoChangedHandler = targetInfoChangedHandler;\n context.conn.on<TargetInfoChangedEvent>(\"Target.targetInfoChanged\", targetInfoChangedHandler);\n\n // Inject recorder into all existing pages\n try {\n const pages = context.pages();\n let injectedCount = 0;\n for (const page of pages) {\n try {\n const result = await injectRecorderViaCDP(\n page,\n recorderState,\n context.conn,\n this._sessionRecordingOptions,\n bindingHandler,\n );\n if (result !== null) {\n injectedCount++;\n }\n } catch (error) {\n // Page might have been closed or CDP session lost, continue with next page\n logger.debug(\"Error injecting recorder into page: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n logger.debug(\n `Injected session recorder into ${injectedCount} of ${pages.length} existing page(s)`,\n );\n } catch (error) {\n logger.debug(\"Error accessing pages for recorder injection: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n private patchStagehandClose() {\n const instrumentation = this;\n return (original: Function) => async function method(this: any, ...args: any[]) {\n // Clean up session recording before closing\n instrumentation.cleanupSessionRecording(this);\n\n // Clean up the session from the registry\n const sessionId = instrumentation.stagehandInstanceToSessionId.get(this);\n if (sessionId) {\n instrumentation.stagehandInstanceToSessionId.delete(this);\n }\n\n await original.bind(this).apply(this, args);\n\n // Clean up the parent span from the registry\n if (sessionId) {\n const parentSpan = instrumentation.sessionIdToParentSpan.get(sessionId);\n if (parentSpan) {\n parentSpan.end();\n instrumentation.sessionIdToParentSpan.delete(sessionId);\n }\n }\n };\n }\n\n /**\n * Clean up session recording resources for a Stagehand instance\n */\n private cleanupSessionRecording(stagehandInstance: any): void {\n const recorderState = this.stagehandInstanceToRecorderState.get(stagehandInstance);\n if (!recorderState) return;\n\n // Get the context to remove event listeners\n const context = stagehandInstance.context as StagehandV3Context | undefined;\n if (context && context.conn) {\n // Remove target created handler\n if (recorderState.targetCreatedHandler) {\n try {\n context.conn.off(\"Target.targetCreated\", recorderState.targetCreatedHandler);\n } catch (error) {\n logger.debug(\"Error removing target created handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Remove target info changed handler\n if (recorderState.targetInfoChangedHandler) {\n try {\n context.conn.off(\"Target.targetInfoChanged\", recorderState.targetInfoChangedHandler);\n } catch (error) {\n logger.debug(\"Error removing target info changed handler: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n\n // Clear state\n recorderState.contextIdToSession.clear();\n recorderState.instrumentedPageIds.clear();\n recorderState.chunkBuffers.clear();\n recorderState.pageSessionHandlers.clear();\n recorderState.bindingHandler = null;\n recorderState.targetCreatedHandler = null;\n recorderState.targetInfoChangedHandler = null;\n\n // Remove from WeakMap\n this.stagehandInstanceToRecorderState.delete(stagehandInstance);\n\n logger.debug(\"Cleaned up session recording for Stagehand instance\");\n }\n\n private patchStagehandGlobalMethod(methodName: string, sessionId: StringUUID, parentSpan: any) {\n return (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n\n // Handle extract schema pretty-printing\n if (methodName === \"extract\"\n && Array.isArray(input)\n && input.length > 1 && (input[1])?.shape\n ) {\n // We need to clone the input object to avoid mutating the original object\n // because the original object is passed to the LLM client\n const schema = input[1];\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n input[1] = prettySchema;\n }\n\n // Also handle extract when options contain schema\n if (methodName === \"extract\"\n && Array.isArray(input)\n && input.length > 0\n && typeof input[0] === 'string'\n && input.length > 1\n && (input[1])?.shape\n ) {\n const schema = input[1];\n let prettySchema = schema?.shape;\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n input[1] = prettySchema;\n }\n\n return await Laminar.withSpan(\n currentSpan ?? parentSpan,\n async () => await laminarObserve(\n {\n name: `stagehand.${methodName}`,\n input,\n },\n async (thisArg: any, rest: any[]) => {\n const span = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n span?.setAttribute(TRACE_HAS_BROWSER_SESSION, true);\n return await original.apply(thisArg, rest);\n },\n this, args,\n ),\n );\n };\n }\n\n private patchActHandler(actHandler: any) {\n // Patch the main act method on the handler\n this._wrap(\n actHandler,\n 'act',\n this.patchActHandlerAct(),\n );\n\n // Patch actFromObserveResult\n this._wrap(\n actHandler,\n 'actFromObserveResult',\n this.patchActHandlerActFromObserveResult(),\n );\n }\n\n private patchActHandlerAct() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function act(this: any, ...args: any[]) {\n const params = args[0];\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.act',\n input: {\n instruction: params?.instruction,\n variables: params?.variables,\n timeout: params?.timeout,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchActHandlerActFromObserveResult() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function actFromObserveResult(this: any, ...args: any[]) {\n const action = args[0];\n const domSettleTimeoutMs = args[2];\n return await laminarObserve(\n {\n name: 'stagehand.actHandler.actFromObserveResult',\n input: {\n action: action,\n domSettleTimeoutMs: domSettleTimeoutMs,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchExtractHandler(extractHandler: any) {\n // Patch the main extract method on the handler\n this._wrap(\n extractHandler,\n 'extract',\n this.patchExtractHandlerExtract(),\n );\n }\n\n private patchExtractHandlerExtract() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function extract(this: any, ...args: any[]) {\n const params = args[0];\n const schema = params?.schema;\n let prettySchema = schema?.shape;\n\n if (schema) {\n try {\n prettySchema = prettyPrintZodSchema(schema);\n } catch (error) {\n diag.warn('Error pretty printing zod schema', { error });\n }\n }\n\n return await laminarObserve(\n {\n name: 'stagehand.extractHandler.extract',\n input: {\n instruction: params?.instruction,\n schema: prettySchema,\n timeout: params?.timeout,\n selector: params?.selector,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchObserveHandler(observeHandler: any) {\n // Patch the main observe method on the handler\n this._wrap(\n observeHandler,\n 'observe',\n this.patchObserveHandlerObserve(),\n );\n }\n\n private patchObserveHandlerObserve() {\n return (original: (...args: any[]) => Promise<any>) =>\n async function observe(this: any, ...args: any[]) {\n const params = args[0];\n return await laminarObserve(\n {\n name: 'stagehand.observeHandler.observe',\n input: {\n instruction: params?.instruction,\n timeout: params?.timeout,\n selector: params?.selector,\n },\n },\n async () => await original.bind(this).apply(this, args),\n );\n };\n }\n\n private patchStagehandLLMClientCreateChatCompletion() {\n return createLLMClientCreateChatCompletionWrapper(this.globalLLMClientOptions);\n }\n\n private patchStagehandAgentInitializer(sessionId: StringUUID, parentSpan: Span) {\n const instrumentation = this;\n return (original: (...args: any[]) => any) =>\n function agent(this: any, ...args: any[]) {\n if (args.length > 0 && typeof args[0] === 'object') {\n instrumentation.globalAgentOptions.set(this, args[0]);\n }\n const agent = original.bind(this).apply(this, args);\n instrumentation.patchStagehandAgent(agent, sessionId, parentSpan);\n return agent;\n };\n }\n\n private patchStagehandAgent(agent: any, sessionId: StringUUID, parentSpan: Span) {\n this._wrap(\n agent,\n 'execute',\n this.patchStagehandAgentExecute(sessionId, parentSpan),\n );\n\n // Wrap additional agent methods\n this.wrapAgentMethod(\n agent, 'captureScreenshot', parentSpan, { spanType: \"TOOL\", ignoreOutput: true },\n );\n this.wrapAgentMethod(agent, 'setViewport', parentSpan);\n this.wrapAgentMethod(agent, 'setCurrentUrl', parentSpan);\n }\n\n private patchStagehandAgentExecute(sessionId: StringUUID, parentSpan: Span) {\n const instrumentation = this;\n return (original: (this: any, ...args: any[]) => Promise<any>) =>\n async function execute(this: any, ...args: any[]) {\n const input = nameArgsOrCopy(args);\n\n return await Laminar.withSpan(\n parentSpan,\n async () => await laminarObserve(\n {\n name: 'stagehand.agent.execute',\n input,\n },\n async () => await laminarObserve(\n {\n name: 'execute',\n // input and output are set as gen_ai.prompt and gen_ai.completion\n ignoreInput: true,\n ignoreOutput: true,\n spanType: \"LLM\",\n },\n async () => {\n const span = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n\n const agentOptions = instrumentation.globalAgentOptions.get(this);\n const provider = agentOptions?.model?.provider\n ?? (\n (agentOptions?.model as string | undefined)?.includes(\"/\") ?\n (agentOptions?.model as string | undefined)?.split(\"/\")[0] :\n instrumentation.globalLLMClientOptions.get(this)?.provider);\n const model = agentOptions?.model?.modelName\n ?? instrumentation.globalLLMClientOptions.get(this)?.model;\n span?.setAttributes({\n ...(provider ? { \"gen_ai.system\": provider } : {}),\n ...(model ? { \"gen_ai.request.model\": model } : {}),\n });\n\n let promptIndex = 0;\n if (agentOptions?.systemPrompt) {\n span?.setAttributes({\n \"gen_ai.prompt.0.content\": agentOptions.systemPrompt,\n \"gen_ai.prompt.0.role\": \"system\",\n });\n promptIndex++;\n }\n\n const instruction = typeof input === 'string' ? input : (input as any).instruction;\n if (instruction) {\n span?.setAttributes({\n [`gen_ai.prompt.${promptIndex}.content`]: instruction,\n [`gen_ai.prompt.${promptIndex}.role`]: \"user\",\n });\n }\n\n const result = await original\n .bind(this)\n .apply(this, args);\n\n if (result.completed && result.success && result.message) {\n const content = [{ type: \"text\", text: result.message }];\n if (result.actions && result.actions.length > 0) {\n content.push({\n type: \"text\",\n text: JSON.stringify({ actions: result.actions }),\n });\n }\n span?.setAttributes({\n \"gen_ai.completion.0.content\": JSON.stringify(content),\n \"gen_ai.completion.0.role\": \"assistant\",\n });\n } else if (result.completed && !result.success) {\n span?.recordException(new Error(result.message));\n }\n if (result.usage) {\n span?.setAttributes({\n \"gen_ai.usage.input_tokens\": result.usage.input_tokens,\n \"gen_ai.usage.output_tokens\": result.usage.output_tokens,\n \"llm.usage.total_tokens\":\n result.usage.input_tokens + result.usage.output_tokens,\n });\n }\n return result;\n },\n ),\n ),\n );\n };\n }\n\n private wrapAgentMethod(\n agent: any,\n methodName: string,\n parentSpan: Span,\n options?: {\n spanType?: \"TOOL\" | \"LLM\" | \"DEFAULT\" | \"EVALUATOR\" | \"EVALUATION\" | \"EXECUTOR\";\n ignoreOutput?: boolean;\n },\n ) {\n if (typeof agent[methodName] !== 'function') return;\n\n this._wrap(\n agent,\n methodName,\n (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n return await Laminar.withSpan(\n currentSpan ?? parentSpan,\n async () => await laminarObserve(\n {\n name: `stagehand.agent.${methodName}`,\n ...(options?.spanType ? { spanType: options.spanType } : {}),\n ...(options?.ignoreOutput ? { ignoreOutput: true } : {}),\n },\n async (argVals: any[]) => await original.bind(this).apply(this, argVals),\n args,\n ),\n );\n },\n );\n }\n\n private patchStagehandPage(page: any, parentSpan: Span) {\n const pageMethods = [\n 'goto',\n 'reload',\n 'goBack',\n 'goForward',\n 'click',\n 'scroll',\n 'dragAndDrop',\n 'type',\n 'keyPress',\n 'keyDown',\n 'keyUp',\n ];\n\n for (const methodName of pageMethods) {\n if (typeof page[methodName] !== 'function') continue;\n\n this._wrap(\n page,\n methodName,\n (original: (...args: any[]) => Promise<any>) =>\n async function method(this: any, ...args: any[]) {\n const currentSpan = trace.getSpan(LaminarContextManager.getContext())\n ?? trace.getActiveSpan();\n return await Laminar.withSpan(\n currentSpan ?? parentSpan,\n async () => await laminarObserve(\n {\n name: `stagehand.page.${methodName}`,\n },\n async (argVals: any[]) => await original.bind(this).apply(this, argVals),\n args,\n ),\n );\n },\n );\n }\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type,\n @typescript-eslint/no-unsafe-return,\n @typescript-eslint/no-misused-promises\n*/\n","import type * as KernelSDK from \"@onkernel/sdk\";\nimport { diag } from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { observe } from \"../../decorators\";\nimport { Laminar } from \"../../laminar\";\n\nconst WRAPPED_BROWSER_METHODS: (keyof KernelSDK.Kernel.Browsers)[] = [\n 'create',\n 'retrieve',\n 'list',\n 'delete',\n 'deleteByID',\n 'loadExtensions',\n];\n\nconst WRAPPED_COMPUTER_METHODS: (keyof KernelSDK.Kernel.Browsers.Computer)[] = [\n \"captureScreenshot\",\n \"clickMouse\",\n \"dragMouse\",\n \"moveMouse\",\n \"pressKey\",\n \"scroll\",\n \"typeText\",\n];\n\nconst WRAPPED_PROCESS_METHODS: (keyof KernelSDK.Kernel.Browsers.Process)[] = [\n \"exec\",\n \"kill\",\n \"spawn\",\n \"status\",\n \"stdin\",\n \"stdoutStream\",\n];\n\n/* eslint-disable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\nexport class KernelInstrumentation extends InstrumentationBase {\n constructor() {\n super(\n \"@lmnr/kernel-instrumentation\",\n SDK_VERSION,\n {\n enabled: true,\n },\n );\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@onkernel/sdk\",\n ['>=0.7.0'],\n this.patch.bind(this),\n this.unpatch.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(kernelModule: typeof KernelSDK) {\n // Instrument resource classes\n for (const wrappedMethod of WRAPPED_BROWSER_METHODS) {\n this._wrap(\n kernelModule.Kernel.Browsers.prototype,\n wrappedMethod,\n this.patchMethod('Browser', wrappedMethod, 'DEFAULT'),\n );\n }\n for (const wrappedMethod of WRAPPED_COMPUTER_METHODS) {\n if (wrappedMethod === 'captureScreenshot') {\n this._wrap(\n kernelModule.Kernel.Browsers.Computer.prototype,\n wrappedMethod,\n this.patchTakeScreenshot(),\n );\n } else {\n this._wrap(\n kernelModule.Kernel.Browsers.Computer.prototype,\n wrappedMethod,\n this.patchMethod('Computer', wrappedMethod, 'TOOL'),\n );\n }\n }\n for (const wrappedMethod of WRAPPED_PROCESS_METHODS) {\n this._wrap(\n kernelModule.Kernel.Browsers.Process.prototype,\n wrappedMethod,\n this.patchProcessMethod(wrappedMethod),\n );\n }\n\n // Wrap the Kernel.app() factory method to patch KernelApp.action()\n this._wrap(\n kernelModule.Kernel.prototype,\n 'app',\n this.patchAppFactory(),\n );\n }\n\n private patchMethod(className: string, method: string, spanType: 'DEFAULT' | 'TOOL'): any {\n const plugin = this;\n return (original: (...args: any[]) => KernelSDK.APIPromise<unknown>) =>\n async function (this: any, ...args: any[]) {\n // Use observe() to automatically handle span lifecycle, input/output capture, and errors\n return await observe(\n {\n name: `${className}.${method}`,\n spanType,\n input: plugin.formatInput(args),\n },\n async (innerArgs: any[]) =>\n await (original.bind(this).apply(this, innerArgs)),\n args,\n );\n };\n }\n\n private patchTakeScreenshot(): any {\n const plugin = this;\n return (original: (...args: any[]) => KernelSDK.APIPromise<unknown>) =>\n async function (this: any, ...args: any[]) {\n // Use observe() to automatically handle span lifecycle, input/output capture, and errors\n const span = Laminar.startSpan({\n name: `Computer.captureScreenshot`,\n spanType: 'TOOL',\n input: plugin.formatInput(args),\n });\n try {\n const res = await original.bind(this).apply(this, args) as KernelSDK.APIPromise<unknown>;\n // We could actually parse binary and decode here, but we would need to consume\n // the api response byte stream, which may break the subsequent operations\n // on the response.\n span.setAttribute('lmnr.span.output', '<BASE64_ENCODED_IMAGE>');\n return res;\n } finally {\n span.end();\n }\n };\n }\n\n private patchProcessMethod(method: string): any {\n const plugin = this;\n return (original: (...args: any[]) => KernelSDK.APIPromise<unknown>) =>\n async function (this: any, ...args: any[]) {\n // First parameter of spawn and exec is the session ID, for others its PID (string)\n const input = ['spawn', 'exec'].includes(method)\n ? plugin.formatInput(args)\n : plugin.formatProcessInput(args);\n const span = Laminar.startSpan({\n name: `Process.${method}`,\n spanType: 'TOOL',\n input,\n });\n try {\n const result = await (original.bind(this).apply(this, args) as KernelSDK.APIPromise<{\n stderr_b64?: string,\n stdout_b64?: string,\n }>);\n const output = {\n ...(\n result?.stderr_b64\n ? { stderr: Buffer.from(result.stderr_b64, 'base64').toString('utf-8') }\n : {}\n ),\n ...(\n result?.stdout_b64\n ? { stdout: Buffer.from(result.stdout_b64, 'base64').toString('utf-8') }\n : {}),\n ...result,\n };\n span.setAttribute('lmnr.span.output', JSON.stringify(output));\n return result;\n } finally {\n span.end();\n }\n };\n }\n\n\n private patchAppFactory() {\n const plugin = this;\n return (original: Function) => function (this: any, name: string): any {\n // Call the original app() method to get the KernelApp instance\n const kernelApp = original.call(this, name);\n\n // Patch the action method on the returned KernelApp instance\n plugin._wrap(\n kernelApp,\n 'action',\n plugin.patchKernelAppAction(),\n );\n\n return kernelApp;\n };\n }\n\n private patchKernelAppAction() {\n return (original: any) => function (this: any, name: string, handler: Function): any {\n // Wrap the handler with observe\n const wrappedHandler = async (context: any, payload?: any) => {\n const result = await observe(\n {\n name: `action.${name}`,\n spanType: 'DEFAULT',\n },\n async (innerCtx: any, innerPayload: any) => {\n const result = await handler(innerCtx, innerPayload);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n },\n context,\n payload,\n );\n await Laminar.flush();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result;\n };\n\n // Register the wrapped handler with the original action method\n return original.call(this, name, wrappedHandler);\n };\n }\n\n private formatInput(args: unknown[]): unknown[] {\n if (args.length === 0) {\n return [];\n }\n if (typeof args[0] === \"string\") {\n return [{ session_id: args[0] }, ...args.slice(1)];\n }\n return args;\n }\n\n private formatProcessInput(args: unknown[]): unknown[] {\n if (args.length === 0) {\n return [];\n }\n if (typeof args[0] === \"string\") {\n if (args.length === 1) {\n return [{ processID: args[0] }];\n }\n const requestParams = args[1] as { id?: string };\n if (requestParams.id) {\n return [{ processID: args[0], session_id: requestParams.id }, ...args.slice(1)];\n }\n return [{ processID: args[0] }, ...args.slice(1)];\n }\n return args;\n }\n\n private patch(moduleExports: typeof KernelSDK): any {\n diag.debug('Patching @onkernel/sdk');\n this.manuallyInstrument(moduleExports);\n return moduleExports;\n }\n\n private unpatch(moduleExports: typeof KernelSDK): void {\n diag.debug('Unpatching @onkernel/sdk');\n\n // Unwrap resource classes\n for (const wrappedMethod of WRAPPED_BROWSER_METHODS) {\n this._unwrap(moduleExports.Kernel.Browsers.prototype, wrappedMethod);\n }\n for (const wrappedMethod of WRAPPED_COMPUTER_METHODS) {\n this._unwrap(moduleExports.Kernel.Browsers.Computer.prototype, wrappedMethod);\n }\n for (const wrappedMethod of WRAPPED_PROCESS_METHODS) {\n this._unwrap(moduleExports.Kernel.Browsers.Process.prototype, wrappedMethod);\n }\n\n // Unwrap Kernel.app\n this._unwrap(moduleExports.Kernel.prototype, 'app');\n }\n}\n/* eslint-enable\n @typescript-eslint/no-this-alias,\n @typescript-eslint/no-unsafe-function-type\n*/\n","import { LaminarClient } from \"@lmnr-ai/client\";\nimport { SessionRecordingOptions } from \"@lmnr-ai/types\";\nimport { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport { AnthropicInstrumentation } from \"@traceloop/instrumentation-anthropic\";\nimport { AzureOpenAIInstrumentation } from \"@traceloop/instrumentation-azure\";\nimport { BedrockInstrumentation } from \"@traceloop/instrumentation-bedrock\";\nimport { ChromaDBInstrumentation } from \"@traceloop/instrumentation-chromadb\";\nimport { CohereInstrumentation } from \"@traceloop/instrumentation-cohere\";\nimport { LangChainInstrumentation } from \"@traceloop/instrumentation-langchain\";\nimport { LlamaIndexInstrumentation } from \"@traceloop/instrumentation-llamaindex\";\nimport { OpenAIInstrumentation } from \"@traceloop/instrumentation-openai\";\nimport { PineconeInstrumentation } from \"@traceloop/instrumentation-pinecone\";\nimport { QdrantInstrumentation } from \"@traceloop/instrumentation-qdrant\";\nimport { TogetherInstrumentation } from \"@traceloop/instrumentation-together\";\nimport {\n AIPlatformInstrumentation,\n VertexAIInstrumentation,\n} from \"@traceloop/instrumentation-vertexai\";\n\nimport { PlaywrightInstrumentation } from \"../../browser\";\nimport { PuppeteerInstrumentation } from \"../../browser/puppeteer\";\nimport { StagehandV2Instrumentation } from \"../../browser/stagehand/v2\";\nimport { StagehandInstrumentation as StagehandV3Instrumentation } from \"../../browser/stagehand/v3\";\nimport { ClaudeAgentSDKInstrumentation } from \"../instrumentation/claude-agent-sdk\";\nimport { KernelInstrumentation } from \"../instrumentation/kernel\";\nimport { InitializeOptions } from \"../interfaces\";\n\n/**\n * Initialize and return Laminar instrumentations.\n * Useful to use with libraries that initialize tracing and can register passed\n * instrumentations.\n *\n * @param options\n * @param {string} options.baseUrl - Base URL of the Laminar API.\n * @param {string} options.apiKey - Laminar project API key. If not provided, will use\n * the LMNR_PROJECT_API_KEY environment variable.\n * @param {number} options.httpPort - Laminar API http port. If not provided, will use\n * the port from the baseUrl or defaults to 443. Only required for Playwright/Puppeteer\n * instrumentations for sending browser sessions.\n * @param {boolean} options.suppressContentTracing - Whether to suppress content tracing.\n * @param {InitializeOptions[\"instrumentModules\"]} options.instrumentModules - Record of modules\n * to instrument.\n * If not provided, all auto-instrumentable modules will be instrumented, which include\n * LLM calls (OpenAI, Anthropic, etc), Langchain, VectorDB calls (Pinecone, Qdrant, etc).\n * Pass an empty object {} to disable any kind of automatic instrumentation.\n * If you only want to auto-instrument specific modules, then pass them in the object.\n *\n * @returns {Instrumentation[]} Array of enabled instrumentations. It is your responsibility\n * to enable them and register them with the OpenTelemetry SDK. For example, you could use\n * registerInstrumentations from the opentelemetry-api to register them.\n */\nexport const initializeLaminarInstrumentations = (\n options: {\n baseUrl?: string,\n apiKey?: string,\n httpPort?: number,\n suppressContentTracing?: boolean,\n instrumentModules?: InitializeOptions[\"instrumentModules\"],\n sessionRecordingOptions?: SessionRecordingOptions,\n } = {},\n) => {\n const apiKey = options.apiKey ?? process.env.LMNR_PROJECT_API_KEY;\n\n // Only create client if we have an API key. That is, only send browser\n // session events to Laminar backend, but not other OTEL backends.\n let client: LaminarClient | undefined;\n if (apiKey) {\n const url = options.baseUrl ?? process?.env?.LMNR_BASE_URL ?? 'https://api.lmnr.ai';\n const port = options.httpPort ?? (\n url.match(/:\\d{1,5}$/g)\n ? parseInt(url.match(/:\\d{1,5}$/g)![0].slice(1))\n : 443);\n const urlWithoutSlash = url.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n client = new LaminarClient({\n baseUrl: `${urlWithoutSlash}:${port}`,\n projectApiKey: apiKey,\n });\n }\n\n return options?.instrumentModules !== undefined\n ? manuallyInitInstrumentations(\n client,\n options.instrumentModules,\n options.suppressContentTracing,\n options.sessionRecordingOptions,\n )\n : initInstrumentations(\n client,\n options.suppressContentTracing,\n options.sessionRecordingOptions,\n );\n};\n\n/**\n * Get the appropriate Stagehand instrumentation based on the installed version.\n * Returns v3 instrumentation for stagehand >= 3.0.0, otherwise v2.\n */\nconst getStagehandInstrumentation = (\n playwrightInstrumentation: PlaywrightInstrumentation,\n client: LaminarClient,\n sessionRecordingOptions?: SessionRecordingOptions,\n): StagehandV2Instrumentation | StagehandV3Instrumentation => {\n try {\n // Try to require the stagehand package to get its version\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const stagehandPkg = require(\"@browserbasehq/stagehand/package.json\");\n const version = stagehandPkg.version;\n const majorVersion = parseInt(version.split('.')[0], 10);\n\n if (majorVersion >= 3) {\n const stagehandInstrumentation = new StagehandV3Instrumentation(sessionRecordingOptions);\n stagehandInstrumentation.setClient(client);\n return stagehandInstrumentation;\n }\n else {\n return new StagehandV2Instrumentation(playwrightInstrumentation);\n }\n } catch {\n // If we can't find the package, default to v3\n }\n\n const stagehandInstrumentation = new StagehandV3Instrumentation(sessionRecordingOptions);\n stagehandInstrumentation.setClient(client);\n return stagehandInstrumentation;\n};\n\nconst initInstrumentations = (\n client: LaminarClient | undefined,\n suppressContentTracing?: boolean,\n sessionRecordingOptions?: SessionRecordingOptions,\n): Instrumentation[] => {\n const enrichTokens = false;\n const instrumentations: Instrumentation[] = [];\n\n instrumentations.push(new OpenAIInstrumentation({\n enrichTokens,\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new AnthropicInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new AzureOpenAIInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new CohereInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new VertexAIInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new AIPlatformInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new BedrockInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new PineconeInstrumentation());\n\n instrumentations.push(new LangChainInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new LlamaIndexInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new TogetherInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new ChromaDBInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n instrumentations.push(new QdrantInstrumentation({\n traceContent: !suppressContentTracing,\n }));\n\n // Browser instrumentations require a client (API key)\n if (client) {\n const playwrightInstrumentation = new PlaywrightInstrumentation(\n client,\n sessionRecordingOptions,\n );\n instrumentations.push(playwrightInstrumentation);\n\n instrumentations.push(getStagehandInstrumentation(\n playwrightInstrumentation,\n client,\n sessionRecordingOptions,\n ));\n\n instrumentations.push(new PuppeteerInstrumentation(client, sessionRecordingOptions));\n }\n\n instrumentations.push(new KernelInstrumentation());\n\n instrumentations.push(new ClaudeAgentSDKInstrumentation());\n\n return instrumentations;\n};\n\nconst manuallyInitInstrumentations = (\n client: LaminarClient | undefined,\n instrumentModules: InitializeOptions[\"instrumentModules\"],\n suppressContentTracing?: boolean,\n sessionRecordingOptions?: SessionRecordingOptions,\n): Instrumentation[] => {\n const enrichTokens = false;\n const instrumentations: Instrumentation[] = [];\n let playwrightInstrumentation: PlaywrightInstrumentation | undefined;\n\n if (instrumentModules?.OpenAI && instrumentModules?.openAI) {\n throw new Error(\n \"`openAI` is deprecated, but both `OpenAI` and `openAI` are provided. \" +\n \"Please use `OpenAI` only.\",\n );\n }\n\n if (instrumentModules?.openAI) {\n const openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(openAIInstrumentation);\n openAIInstrumentation.manuallyInstrument(instrumentModules.openAI);\n }\n\n if (instrumentModules?.OpenAI) {\n const openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(openAIInstrumentation);\n openAIInstrumentation.manuallyInstrument(instrumentModules.OpenAI);\n }\n\n if (instrumentModules?.anthropic) {\n const anthropicInstrumentation = new AnthropicInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(anthropicInstrumentation);\n anthropicInstrumentation.manuallyInstrument(instrumentModules.anthropic as any);\n }\n\n if (instrumentModules?.azureOpenAI) {\n const azureOpenAIInstrumentation = new AzureOpenAIInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(azureOpenAIInstrumentation as Instrumentation);\n azureOpenAIInstrumentation.manuallyInstrument(instrumentModules.azureOpenAI);\n }\n\n if (instrumentModules?.cohere) {\n const cohereInstrumentation = new CohereInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(cohereInstrumentation);\n cohereInstrumentation.manuallyInstrument(instrumentModules.cohere);\n }\n\n if (instrumentModules?.google_vertexai) {\n const vertexaiInstrumentation = new VertexAIInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(vertexaiInstrumentation);\n vertexaiInstrumentation.manuallyInstrument(\n instrumentModules.google_vertexai,\n );\n }\n\n if (instrumentModules?.google_aiplatform) {\n const aiplatformInstrumentation = new AIPlatformInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(aiplatformInstrumentation);\n aiplatformInstrumentation.manuallyInstrument(\n instrumentModules.google_aiplatform,\n );\n }\n\n if (instrumentModules?.bedrock) {\n const bedrockInstrumentation = new BedrockInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(bedrockInstrumentation);\n bedrockInstrumentation.manuallyInstrument(instrumentModules.bedrock);\n }\n\n if (instrumentModules?.pinecone) {\n const instrumentation = new PineconeInstrumentation();\n instrumentations.push(instrumentation as Instrumentation);\n instrumentation.manuallyInstrument(instrumentModules.pinecone);\n }\n\n if (instrumentModules?.langchain) {\n const langchainInstrumentation = new LangChainInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(langchainInstrumentation);\n langchainInstrumentation.manuallyInstrument(instrumentModules.langchain);\n }\n\n if (instrumentModules?.llamaIndex) {\n const llamaIndexInstrumentation = new LlamaIndexInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(llamaIndexInstrumentation);\n llamaIndexInstrumentation.manuallyInstrument(instrumentModules.llamaIndex);\n }\n\n if (instrumentModules?.chromadb) {\n const chromadbInstrumentation = new ChromaDBInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(chromadbInstrumentation);\n chromadbInstrumentation.manuallyInstrument(instrumentModules.chromadb);\n }\n\n if (instrumentModules?.qdrant) {\n const qdrantInstrumentation = new QdrantInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(qdrantInstrumentation);\n qdrantInstrumentation.manuallyInstrument(instrumentModules.qdrant);\n }\n\n if (instrumentModules?.together) {\n const togetherInstrumentation = new TogetherInstrumentation({\n traceContent: !suppressContentTracing,\n });\n instrumentations.push(togetherInstrumentation);\n togetherInstrumentation.manuallyInstrument(instrumentModules.together as any);\n }\n\n if (instrumentModules?.playwright && client) {\n playwrightInstrumentation = new PlaywrightInstrumentation(client, sessionRecordingOptions);\n instrumentations.push(playwrightInstrumentation);\n playwrightInstrumentation.manuallyInstrument(instrumentModules.playwright);\n }\n\n if (instrumentModules?.puppeteer && client) {\n const puppeteerInstrumentation = new PuppeteerInstrumentation(client, sessionRecordingOptions);\n instrumentations.push(puppeteerInstrumentation);\n puppeteerInstrumentation.manuallyInstrument(instrumentModules.puppeteer);\n }\n\n if (instrumentModules?.stagehand && client) {\n if (!playwrightInstrumentation) {\n playwrightInstrumentation = new PlaywrightInstrumentation(client, sessionRecordingOptions);\n instrumentations.push(playwrightInstrumentation);\n }\n const stagehandInstrumentation = getStagehandInstrumentation(\n playwrightInstrumentation,\n client,\n sessionRecordingOptions,\n );\n instrumentations.push(stagehandInstrumentation);\n stagehandInstrumentation.manuallyInstrument(instrumentModules.stagehand);\n }\n\n if (instrumentModules?.kernel) {\n const kernelInstrumentation = new KernelInstrumentation();\n instrumentations.push(kernelInstrumentation);\n kernelInstrumentation.manuallyInstrument(instrumentModules.kernel);\n }\n\n if (instrumentModules?.claudeAgentSDK) {\n const claudeAgentInstrumentation = new ClaudeAgentSDKInstrumentation();\n instrumentations.push(claudeAgentInstrumentation);\n claudeAgentInstrumentation.manuallyInstrument(instrumentModules.claudeAgentSDK);\n }\n\n return instrumentations;\n};\n","export const getLangVersion: () => string | undefined = () => {\n if (process?.versions?.node) {\n return `node@${process.versions.node}`;\n }\n// else if (Deno?.version) {\n// return `deno@${Deno?.version?.deno}`;\n// }\n};\n","// This class could be just an initialization of the OTLP exporter,\n// but OTel v2 has some breaking changes, so we're applying\n// a small backward-compatibility fix here.\n\nimport { Metadata } from \"@grpc/grpc-js\";\nimport { ExportResult } from \"@opentelemetry/core\";\nimport {\n OTLPTraceExporter as ExporterGrpc,\n} from \"@opentelemetry/exporter-trace-otlp-grpc\";\nimport {\n OTLPTraceExporter as ExporterHttp,\n} from \"@opentelemetry/exporter-trace-otlp-proto\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\nimport { getOtelEnvVar, initializeLogger, parseOtelHeaders } from \"../../utils\";\nimport { makeSpanOtelV2Compatible } from \"./compat\";\n\nconst logger = initializeLogger();\n\nexport class LaminarSpanExporter implements SpanExporter {\n private exporter: SpanExporter;\n\n constructor(options: {\n baseUrl?: string;\n port?: number;\n apiKey?: string;\n forceHttp?: boolean;\n timeoutMillis?: number;\n } = {}) {\n let url = options.baseUrl ?? process?.env?.LMNR_BASE_URL;\n let port = options.port;\n let forceHttp = options.forceHttp ?? false;\n const key = options.apiKey ?? process?.env?.LMNR_PROJECT_API_KEY;\n\n // Determine headers - either from API key or OTEL env vars\n let headers: Record<string, string> = {};\n if (key) {\n headers = forceHttp\n ? { 'Authorization': `Bearer ${key}` }\n : { 'authorization': `Bearer ${key}` };\n if (!url) {\n url = 'https://api.lmnr.ai';\n }\n } else {\n const otelHeaders = getOtelEnvVar('HEADERS');\n if (otelHeaders) {\n headers = parseOtelHeaders(otelHeaders);\n }\n // Check for OTEL endpoint configuration\n const otelEndpoint = getOtelEnvVar('ENDPOINT');\n if (otelEndpoint && !url) {\n url = otelEndpoint;\n\n // Determine protocol from OTEL env vars\n const otelProtocol = getOtelEnvVar('PROTOCOL') || 'grpc/protobuf';\n const otelExporter = process?.env?.OTEL_EXPORTER;\n forceHttp = otelProtocol === 'http/protobuf'\n || otelProtocol === 'http/json'\n || otelExporter === 'otlp_http';\n } else if (otelEndpoint && url) {\n logger.warn(\n 'OTEL_ENDPOINT is set, but Laminar base URL is also set. Ignoring OTEL_ENDPOINT.',\n );\n }\n }\n\n if (!url) {\n throw new Error(\n 'Laminar base URL is not set and OTEL_ENDPOINT is not set. Please either\\n' +\n '- set the LMNR_BASE_URL environment variable\\n' +\n '- set the OTEL_ENDPOINT environment variable (if you are not using a Laminar API key)\\n' +\n '- pass the baseUrl parameter to Laminar.initialize',\n );\n }\n\n // Calculate port\n if (!port) {\n port = url.match(/:\\d{1,5}$/g)\n ? parseInt(url.match(/:\\d{1,5}$/g)![0].slice(1))\n : (forceHttp ? 443 : 8443);\n }\n\n const urlWithoutSlash = url.replace(/\\/$/, '').replace(/:\\d{1,5}$/g, '');\n\n if (forceHttp) {\n this.exporter = new ExporterHttp({\n url: `${urlWithoutSlash}:${port}/v1/traces`,\n headers,\n timeoutMillis: options.timeoutMillis ?? 30000,\n });\n } else {\n const metadata = new Metadata();\n Object.entries(headers).forEach(([key, value]) => {\n metadata.set(key, value);\n });\n this.exporter = new ExporterGrpc({\n url: `${urlWithoutSlash}:${port}`,\n metadata,\n timeoutMillis: options.timeoutMillis ?? 30000,\n });\n }\n }\n\n export(\n items: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ) {\n // ==== //\n // OTel v2 has renamed the instrumentationLibrary field to instrumentationScope,\n // but spans may be created by older versions of the SDK that don't have that change.\n // This is a small hack to support those older spans.\n items.forEach(makeSpanOtelV2Compatible);\n // ==== //\n\n return this.exporter.export(items, resultCallback);\n }\n\n async shutdown(): Promise<void> {\n return this.exporter.shutdown();\n }\n\n async forceFlush(): Promise<void> {\n return this.exporter.forceFlush?.();\n }\n}\n\n","import { LaminarClient } from \"@lmnr-ai/client\";\nimport { SpanType } from \"@lmnr-ai/types\";\nimport { AttributeValue, Context, context } from \"@opentelemetry/api\";\nimport {\n BatchSpanProcessor,\n SimpleSpanProcessor,\n type Span,\n SpanExporter,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"pino\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { initializeLogger, metadataToAttributes, otelSpanIdToUUID, StringUUID } from \"../../utils\";\nimport { getLangVersion } from \"../../version\";\nimport {\n ASSOCIATION_PROPERTIES,\n ASSOCIATION_PROPERTIES_OVERRIDES,\n PARENT_SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n ROLLOUT_SESSION_ID,\n SESSION_ID,\n SPAN_IDS_PATH,\n SPAN_INSTRUMENTATION_SOURCE,\n SPAN_LANGUAGE_VERSION,\n SPAN_PATH,\n SPAN_SDK_VERSION,\n SPAN_TYPE,\n TRACE_TYPE,\n USER_ID,\n} from \"./attributes\";\nimport {\n getParentSpanId,\n makeSpanOtelV2Compatible,\n OTelSpanCompat,\n} from \"./compat\";\nimport {\n ASSOCIATION_PROPERTIES_KEY,\n CONTEXT_SPAN_PATH_KEY,\n} from \"./context\";\nimport { LaminarSpanExporter } from \"./exporter\";\n\ninterface LaminarSpanProcessorOptions {\n /**\n * The base URL of the Laminar API. Optional.\n * Defaults to https://api.lmnr.ai.\n */\n baseUrl?: string;\n /**\n * The port of the Laminar API. Optional.\n * Defaults to 8443.\n */\n port?: number;\n /**\n * Laminar project API key. Optional.\n * If not provided, the LMNR_PROJECT_API_KEY environment variable will be used.\n */\n apiKey?: string;\n /**\n * The maximum number of spans to export at a time. Optional.\n * Defaults to 512.\n */\n maxExportBatchSize?: number;\n /**\n * Whether to disable batching. Optional.\n * Defaults to false.\n */\n disableBatch?: boolean;\n /**\n * Whether to force HTTP and use OpenTelemetry HTTP/protobuf exporter.\n * Not recommended with Laminar backends.\n * Optional.\n * Defaults to false.\n */\n forceHttp?: boolean;\n /**\n * The timeout for sending traces data. Optional.\n * Defaults to 30 seconds.\n */\n traceExportTimeoutMillis?: number;\n\n /**\n * The exporter to use. Optional. If specified, some of the other options will be ignored.\n * Defaults to a new LaminarSpanExporter.\n */\n exporter?: SpanExporter;\n\n /**\n * The span processor to use. If passed, some of the other options will be ignored.\n * If passed, wraps the underlying span processor.\n */\n spanProcessor?: SpanProcessor;\n\n /**\n * The HTTP port to use. Optional.\n * If not provided, the `port` option will be used.\n */\n httpPort?: number;\n}\n\nexport class LaminarSpanProcessor implements SpanProcessor {\n private instance: BatchSpanProcessor | SimpleSpanProcessor;\n private client: LaminarClient | undefined;\n private logger: Logger;\n private readonly _spanIdToPath: Map<string, string[]> = new Map();\n private readonly _spanIdLists: Map<string, string[]> = new Map();\n\n /**\n * @param {object} options - The options for the Laminar span processor.\n * @param {string} options.baseUrl - The base URL of the Laminar API.\n * @param {number} options.port - The port of the Laminar API.\n * @param {string} options.apiKey - Laminar project API key or any other\n * authorization set as bearer token.\n * @param {boolean} options.disableBatch - Whether to disable batching (uses SimpleSpanProcessor).\n * @param {number} options.maxExportBatchSize - The maximum number of spans to export at a time\n * if disableBatch is false.\n * @param {number} options.traceExportTimeoutMillis - The timeout for sending traces data.\n * Defaults to 30 seconds.\n * @param {boolean} options.forceHttp - Whether to force HTTP and use OpenTelemetry\n * HTTP/protobuf exporter.\n * Not recommended with Laminar backends.\n */\n constructor(options: LaminarSpanProcessorOptions = {}) {\n this.logger = initializeLogger();\n if (options.spanProcessor && options.spanProcessor instanceof LaminarSpanProcessor) {\n this.instance = options.spanProcessor.instance;\n // Set by reference, so that updates from the inside are reflected here.\n this._spanIdToPath = options.spanProcessor._spanIdToPath;\n this._spanIdLists = options.spanProcessor._spanIdLists;\n } else if (options.spanProcessor) {\n this.instance = options.spanProcessor as BatchSpanProcessor | SimpleSpanProcessor;\n } else {\n const exporter = options.exporter ?? new LaminarSpanExporter(options);\n this.instance = options.disableBatch\n ? new SimpleSpanProcessor(exporter)\n : new BatchSpanProcessor(exporter, {\n maxExportBatchSize: options.maxExportBatchSize ?? 512,\n exportTimeoutMillis: options.traceExportTimeoutMillis ?? 30000,\n });\n }\n\n if (process.env.LMNR_ROLLOUT_SESSION_ID) {\n this.client = new LaminarClient({\n baseUrl: options.baseUrl,\n projectApiKey: options.apiKey,\n port: options.httpPort ?? options.port,\n });\n }\n }\n\n forceFlush(): Promise<void> {\n return this.instance.forceFlush();\n }\n\n shutdown(): Promise<void> {\n return this.instance.shutdown();\n }\n\n onStart(spanArg: any, parentContext: Context): void {\n const span = spanArg as OTelSpanCompat;\n // Check for parent path attributes first (from serialized span context)\n const parentPathFromAttribute = span.attributes?.[PARENT_SPAN_PATH] as string[] | undefined;\n const parentIdsPathFromAttribute =\n span.attributes?.[PARENT_SPAN_IDS_PATH] as StringUUID[] | undefined;\n\n const parentSpanId = getParentSpanId(span);\n\n // Use parent path from attributes if available, otherwise fall back to cached paths\n const parentSpanPath = parentPathFromAttribute\n ?? (parentSpanId !== undefined\n ? this._spanIdToPath.get(parentSpanId)\n : undefined);\n\n const spanId = span.spanContext().spanId;\n const parentSpanIdsPath = parentIdsPathFromAttribute\n ?? (parentSpanId\n ? this._spanIdLists.get(parentSpanId)\n : []);\n const spanPath = parentSpanPath ? [...parentSpanPath, span.name] : [span.name];\n\n const spanIdUuid = otelSpanIdToUUID(spanId);\n const spanIdsPath = parentSpanIdsPath ? [...parentSpanIdsPath, spanIdUuid] : [spanIdUuid];\n\n span.setAttribute(SPAN_IDS_PATH, spanIdsPath);\n this._spanIdLists.set(spanId, spanIdsPath);\n\n span.setAttribute(SPAN_PATH, spanPath);\n context.active().setValue(CONTEXT_SPAN_PATH_KEY, spanPath);\n this._spanIdToPath.set(spanId, spanPath);\n\n span.setAttribute(SPAN_INSTRUMENTATION_SOURCE, \"javascript\");\n span.setAttribute(SPAN_SDK_VERSION, SDK_VERSION);\n const langVersion = getLangVersion();\n if (langVersion) {\n span.setAttribute(SPAN_LANGUAGE_VERSION, langVersion);\n }\n\n // This sets the properties only if the context has them\n const associationProperties = context\n .active()\n .getValue(ASSOCIATION_PROPERTIES_KEY);\n if (associationProperties) {\n for (const [key, value] of Object.entries(associationProperties)) {\n if (Object.keys(ASSOCIATION_PROPERTIES_OVERRIDES).includes(key)) {\n span.setAttribute(ASSOCIATION_PROPERTIES_OVERRIDES[key], value);\n } else if (key === \"tracing_level\") {\n span.setAttribute(\"lmnr.internal.tracing_level\", value);\n } else if (key === \"rolloutSessionId\") {\n span.setAttribute(ROLLOUT_SESSION_ID, value);\n span.setAttribute(\"lmnr.rollout.session_id\", value);\n } else if (key === \"metadata\" && typeof value === \"object\" && value !== null) {\n // Flatten metadata into individual attributes\n const metadataAttrs = metadataToAttributes(value as Record<string, unknown>);\n span.setAttributes(metadataAttrs);\n } else if (key === \"userId\") {\n span.setAttribute(USER_ID, value);\n } else if (key === \"sessionId\") {\n span.setAttribute(SESSION_ID, value);\n } else if (key === \"traceType\") {\n span.setAttribute(TRACE_TYPE, value);\n } else if (key === \"tracingLevel\") {\n span.setAttribute(\"lmnr.internal.tracing_level\", value);\n } else {\n span.setAttribute(`${ASSOCIATION_PROPERTIES}.${key}`, value);\n }\n }\n }\n\n makeSpanOtelV2Compatible(span);\n\n if (process.env.LMNR_ROLLOUT_SESSION_ID && this.client) {\n this.client.rolloutSessions.sendSpanUpdate({\n sessionId: process.env.LMNR_ROLLOUT_SESSION_ID,\n span: {\n name: span.name,\n startTime: new Date(span.startTime[0] * 1000 + span.startTime[1] / 1e6).toISOString(),\n spanId: span.spanContext().spanId,\n traceId: span.spanContext().traceId,\n parentSpanId: getParentSpanId(span),\n attributes: attributesForStartEvent(span.name, span.attributes),\n spanType: inferSpanType(span.name, span.attributes),\n },\n }).catch((error: any) => {\n this.logger.debug(\n `Failed to send span update: ${error instanceof Error ? error.message : String(error)}`,\n );\n });\n }\n this.instance.onStart((span), parentContext);\n }\n\n // type ReadableSpan\n onEnd(span: any): void {\n // By default, we call the original onEnd.\n makeSpanOtelV2Compatible(span);\n this.instance.onEnd(span as Span);\n }\n\n /**\n * Set parent path information for a given span ID.\n * Used when initializing context from environment variables.\n *\n * @param parentSpanId - The span ID to set path information for\n * @param spanPath - The span path (array of span names)\n * @param spanIdsPath - The span IDs path (array of span ID UUIDs)\n */\n setParentPathInfo(\n parentSpanId: string,\n spanPath: string[],\n spanIdsPath: StringUUID[],\n ): void {\n this._spanIdToPath.set(parentSpanId, spanPath);\n this._spanIdLists.set(parentSpanId, spanIdsPath);\n }\n\n clear() {\n this._spanIdToPath.clear();\n this._spanIdLists.clear();\n }\n}\n\nconst inferSpanType = (\n name: string,\n attributes: Record<string, AttributeValue | undefined>,\n): SpanType => {\n if (attributes[SPAN_TYPE]) {\n return attributes[SPAN_TYPE] as SpanType;\n }\n if (attributes['gen_ai.system']) {\n return 'LLM';\n }\n if (Object.keys(attributes).some((k) => k.startsWith('gen_ai.') || k.startsWith('llm.'))) {\n return 'LLM';\n }\n if (name === 'ai.toolCall' || attributes['ai.toolCall.id'] || attributes['ai.toolCall.name']) {\n return 'TOOL';\n }\n return 'DEFAULT';\n};\n\nconst attributesForStartEvent = (\n name: string,\n attributes: Record<string, AttributeValue | undefined>,\n): Record<string, AttributeValue> => {\n const keysToKeep = [\n SPAN_PATH,\n SPAN_TYPE,\n SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n PARENT_SPAN_IDS_PATH,\n SPAN_INSTRUMENTATION_SOURCE,\n SPAN_SDK_VERSION,\n SPAN_LANGUAGE_VERSION,\n \"gen_ai.request.model\",\n \"gen_ai.response.model\",\n \"gen_ai.system\",\n \"lmnr.span.original_type\",\n \"ai.model.id\",\n ];\n const newAttributes = Object.fromEntries(\n Object.entries(attributes).filter(([key]) => keysToKeep.includes(key)),\n );\n\n // Common scenario, because we don't have the response model in the start event.\n // Atrificially set the response model to the request model, just so frontend\n // can show the model in the UI.\n if (attributes[\"gen_ai.request.model\"] && !attributes[\"gen_ai.response.model\"]) {\n newAttributes[\"gen_ai.response.model\"] = attributes[\"gen_ai.request.model\"];\n }\n return {\n [SPAN_TYPE]: inferSpanType(name, attributes),\n ...newAttributes,\n };\n};\n","import { Context, type Span, type SpanOptions, trace, type Tracer } from \"@opentelemetry/api\";\n\nimport { LaminarContextManager } from \"./context\";\nimport { LaminarSpan } from \"./span\";\n\n\nexport class LaminarTracer implements Tracer {\n private _tracer: Tracer;\n constructor(tracer: Tracer) {\n this._tracer = tracer;\n }\n\n public startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n return new LaminarSpan(\n this._tracer.startSpan(name, options, context || LaminarContextManager.getContext()),\n );\n }\n\n public startActiveSpan<F extends (span: Span) => unknown>(name: string, fn: F): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n optionsOrFn?: SpanOptions | F,\n contextOrFn?: Context | F,\n fn?: F,\n ): ReturnType<F> {\n let contextToUse: Context;\n if (typeof contextOrFn !== \"function\" && contextOrFn !== undefined) {\n contextToUse = contextOrFn;\n } else {\n contextToUse = LaminarContextManager.getContext();\n }\n\n const wrapped = (fn: F) => (span: Span): ReturnType<F> => {\n const laminarSpan = new LaminarSpan(span);\n const ctxWithAssociationProperties = LaminarContextManager.setAssociationProperties(\n laminarSpan,\n contextToUse,\n );\n const newContext = trace.setSpan(ctxWithAssociationProperties, laminarSpan);\n const currentStack = LaminarContextManager.getContextStack();\n const res = LaminarContextManager.runWithIsolatedContext(\n [...currentStack, newContext],\n () => fn(laminarSpan) as ReturnType<F>,\n );\n // We don't pop the context here, because it is the caller's responsibility to\n // end the span. LaminarSpan.end() will pop the context.\n return res;\n };\n if (typeof optionsOrFn === \"function\") {\n return this._tracer.startActiveSpan(name, {}, contextToUse, wrapped(optionsOrFn));\n }\n if (typeof contextOrFn === \"function\") {\n return this._tracer.startActiveSpan(\n name,\n optionsOrFn as SpanOptions,\n contextToUse,\n wrapped(contextOrFn),\n );\n }\n\n // Use the provided context or the current Laminar context\n return this._tracer.startActiveSpan(\n name,\n optionsOrFn as SpanOptions,\n contextToUse,\n wrapped(fn as F),\n );\n }\n}\n\n","import {\n Context,\n context,\n createContextKey,\n ROOT_CONTEXT,\n} from \"@opentelemetry/api\";\n\nimport { CONTEXT_SPAN_PATH_KEY } from \"./context\";\n\n// Function to check if a global context manager is already configured\nexport const isGlobalContextManagerConfigured = () => {\n // Create a temporary context key for testing\n const testKey = createContextKey('lmnr-test-context-manager-check');\n\n // Create a context with this key\n const testContext = ROOT_CONTEXT.setValue(testKey, 'lmnr-test-value');\n\n // Try to make this context active\n let isContextManagerWorking = false;\n\n context.with(testContext, () => {\n // If the context manager is configured and enabled,\n // active() should return our test context\n const activeContext = context.active();\n isContextManagerWorking = activeContext.getValue(testKey) === 'lmnr-test-value';\n });\n\n return isContextManagerWorking;\n};\n\nexport const getSpanPath = (entityContext: Context): string | undefined => {\n const path = entityContext.getValue(CONTEXT_SPAN_PATH_KEY) as string | undefined;\n return path ? `${path}` : undefined;\n};\n","import { context, trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { registerInstrumentations } from \"@opentelemetry/instrumentation\";\nimport { AlwaysOnSampler } from \"@opentelemetry/sdk-trace-base\";\nimport {\n NodeTracerProvider,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from \"@opentelemetry/semantic-conventions\";\n\nimport { version as SDK_VERSION } from \"../../../package.json\";\nimport { initializeLogger } from \"../../utils\";\nimport { _configuration } from \"../configuration\";\nimport { InitializeOptions } from \"../interfaces\";\nimport { createResource } from \"./compat\";\nimport { consumeStreamResult,waitForPendingStreams } from \"./stream-utils\";\n\nexport { consumeStreamResult,waitForPendingStreams };\nimport { initializeLaminarInstrumentations } from \"./instrumentations\";\nimport { LaminarSpanProcessor } from \"./processor\";\nimport { LaminarTracer } from \"./tracer\";\nimport { isGlobalContextManagerConfigured } from \"./utils\";\n\nconst logger = initializeLogger();\n\nlet spanProcessor: LaminarSpanProcessor;\nlet tracerProvider: TracerProvider | undefined;\nlet _baseHttpUrl: string = \"https://api.lmnr.ai:443\";\nlet _apiKey: string | undefined;\n\n/**\n * Initializes the Tracing SDK.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions}\n * for details.\n */\nexport const startTracing = (options: InitializeOptions) => {\n _baseHttpUrl = `${options.baseHttpUrl ?? options.baseUrl}:${options.httpPort ?? 443}`;\n _apiKey = options.apiKey;\n\n const instrumentations = initializeLaminarInstrumentations({\n baseUrl: _baseHttpUrl,\n apiKey: _apiKey,\n suppressContentTracing: !shouldSendTraces(),\n instrumentModules: options.instrumentModules,\n sessionRecordingOptions: options.sessionRecordingOptions,\n });\n\n const port = options.forceHttp ? options.httpPort : options.port;\n\n spanProcessor = new LaminarSpanProcessor({\n spanProcessor: options.spanProcessor,\n baseUrl: options.baseUrl,\n port,\n httpPort: options.httpPort,\n apiKey: options.apiKey,\n forceHttp: options.forceHttp,\n traceExportTimeoutMillis: options.traceExportTimeoutMillis,\n maxExportBatchSize: options.maxExportBatchSize,\n exporter: options.exporter,\n disableBatch: options.disableBatch,\n });\n\n const newProvider = new NodeTracerProvider({\n spanProcessors: [spanProcessor],\n sampler: new AlwaysOnSampler(),\n resource: createResource(\n {\n [ATTR_SERVICE_NAME]: \"laminar-tracer-resource\",\n [ATTR_SERVICE_VERSION]: SDK_VERSION,\n },\n ),\n });\n\n tracerProvider = newProvider;\n\n // Usually, we would do `tracerProvider.register()`, which does three things:\n // 1. Sets the global tracer provider\n // 2. Sets the global context manager to a default one, unless we specify a custom one\n // 3. Sets the global propagator to a default one, unless we specify a custom one\n // We don't do that, because Opentelemetry only allows setting these global\n // OTel API instances once.\n //\n // Instead, we do the following:\n // 1. Carry the global tracer provider around without globally registering it.\n // - Set this tracer provider in the auto-instrumentations from OpenLLMetry\n // - expose the `getTracer` function, which will return a tracer from our\n // tracer provider.\n // 2. Set a context manager globally, only if we are the first ones to do so.\n // - If we are not the first ones, we don't set the global context manager.\n // - If an existing context manager is not broken, it suffices for our purposes\n // for carrying the parent span context.\n // - If any library tries to do so afterwards (and they will, e.g. @vercel/otel\n // or @sentry/node do tracerProvider.register() internally), there will be\n // an error message at their initialization.\n // - We recommend to initialize Laminar after other tracing libraries to avoid that\n // 3. We don't do anything about the propagator, because no Laminar functionality\n // depends on it. We might want to revisit this in the future w.r.t. `LaminarSpanContext`.\n\n // This is a small hack to only set the global context manager if there is none.\n if (!isGlobalContextManagerConfigured()) {\n const contextManager = new AsyncLocalStorageContextManager();\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n logger.debug('Laminar set global OTel Context Manager');\n }\n logger.debug('Global OTel Context Manager exists');\n\n\n logger.debug(`Laminar registering ${instrumentations.length} instrumentations`);\n // Similarly, we carry our global tracer provider around without globally\n // registering it.\n registerInstrumentations({\n instrumentations,\n tracerProvider: newProvider,\n });\n};\n\nexport const patchModules = (modules: InitializeOptions[\"instrumentModules\"]) => {\n const instrumentations = initializeLaminarInstrumentations({\n baseUrl: _baseHttpUrl,\n apiKey: _apiKey,\n instrumentModules: modules,\n suppressContentTracing: !shouldSendTraces(),\n sessionRecordingOptions: _configuration?.sessionRecordingOptions,\n });\n registerInstrumentations({\n instrumentations,\n tracerProvider: tracerProvider,\n });\n};\n\n\nexport const shouldSendTraces = () => {\n if (!_configuration) {\n /**\n * We've only seen this happen in Next.js where apparently\n * the initialization in `instrumentation.ts` somehow does not\n * respect `Object.freeze`. Unlike original OpenLLMetry/Traceloop,\n * we return true here, because we have other mechanisms\n * {@link withTracingLevel} to disable tracing inputs and outputs.\n */\n return true;\n }\n\n if (\n _configuration.traceContent === false ||\n (process.env.TRACELOOP_TRACE_CONTENT || \"true\").toLowerCase() === \"false\"\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Get the tracer provider. Returns Laminar's tracer provider if Laminar is initialized,\n * otherwise returns the global tracer provider.\n * @returns The tracer provider.\n */\nexport const getTracerProvider = (): TracerProvider => tracerProvider ?? trace.getTracerProvider();\n\n/**\n * Get the tracer.\n * @returns Laminar's tracer if Laminar is initialized,\n * otherwise returns Laminar's tracer from the global tracer provider\n *\n * @example\n * // instrumentation.ts\n * import { Laminar } from '@lmnr-ai/lmnr';\n * Laminar.initialize()\n *\n * // File that calls AI SDK.\n * import { getTracer } from '@lmnr-ai/lmnr';\n * import { openai } from \"@ai-sdk/openai\";\n * import { generateText } from \"ai\";\n *\n * const response = await generateText({\n * model: openai(\"gpt-4.1-nano\"),\n * prompt: \"What is the capital of France?\",\n * experimental_telemetry: {\n * isEnabled: true,\n * tracer: getTracer(),\n * }\n * })\n */\nexport const getTracer = (): Tracer => {\n const TRACER_NAME = \"lmnr.tracer\";\n const TRACER_VERSION = \"0.0.1\";\n const provider = getTracerProvider();\n return new LaminarTracer(provider.getTracer(TRACER_NAME, TRACER_VERSION));\n};\n\n/**\n * Get the span processor.\n * Used internally for setting parent path information when initializing from environment.\n * @returns The span processor, or undefined if not initialized.\n */\nexport const getSpanProcessor = (): LaminarSpanProcessor | undefined => spanProcessor;\n\nexport const forceFlush = async () => {\n // Wait for pending stream processing with 5 second timeout\n await waitForPendingStreams(5000);\n await spanProcessor.forceFlush();\n};\n\nexport const clearSpanProcessor = () => {\n spanProcessor.clear();\n};\n","import { diag, DiagConsoleLogger, DiagLogLevel } from \"@opentelemetry/api\";\n\nimport { type InitializeOptions } from \"../interfaces\";\nimport { startTracing } from \"../tracing\";\n\nexport let _configuration: InitializeOptions | undefined;\n\n/**\n * Initializes the SDK.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions}\n * for details.\n * @throws {InitializationError} if the configuration is invalid or if failed to fetch\n * feature data.\n */\nexport const initializeTracing = (options: InitializeOptions) => {\n if (_configuration) {\n return;\n }\n\n // Only set defaults if not already provided and if we have an API key\n // (when using OTEL env vars, we don't need a baseUrl or API key)\n const apiKey = options.apiKey ?? process.env.LMNR_PROJECT_API_KEY;\n if (!options.baseUrl && apiKey) {\n options.baseUrl = process.env.LMNR_BASE_URL || \"https://api.lmnr.ai:8443\";\n }\n if (!options.apiKey) {\n options.apiKey = apiKey;\n }\n\n _configuration = Object.freeze(options);\n\n if (options.logLevel) {\n diag.setLogger(\n new DiagConsoleLogger(),\n {\n logLevel: logLevelToOtelLogLevel(options.logLevel),\n suppressOverrideMessage: true,\n },\n );\n }\n\n startTracing(_configuration);\n};\n\nconst logLevelToOtelLogLevel = (\n logLevel: \"debug\" | \"info\" | \"warn\" | \"error\",\n) => {\n switch (logLevel) {\n case \"debug\":\n return DiagLogLevel.DEBUG;\n case \"info\":\n return DiagLogLevel.INFO;\n case \"warn\":\n return DiagLogLevel.WARN;\n case \"error\":\n return DiagLogLevel.ERROR;\n }\n};\n\nexport const _resetConfiguration = () => {\n _configuration = undefined;\n};\n","import { LaminarSpanContext, TraceType, TracingLevel } from \"@lmnr-ai/types\";\nimport { AttributeValue, context, type Span, trace } from \"@opentelemetry/api\";\nimport { suppressTracing } from \"@opentelemetry/core\";\n\nimport {\n deserializeLaminarSpanContext,\n initializeLogger,\n tryToOtelSpanContext,\n} from \"../../utils\";\nimport { getStream } from \"../instrumentation/aisdk/utils\";\nimport { getTracer, shouldSendTraces } from \".\";\nimport {\n SPAN_INPUT,\n SPAN_OUTPUT,\n} from \"./attributes\";\nimport {\n ASSOCIATION_PROPERTIES_KEY,\n LaminarContextManager,\n} from \"./context\";\nimport { handleStreamResult } from \"./stream-utils\";\n\nconst logger = initializeLogger();\n\nexport { consumeStreamResult, waitForPendingStreams } from \"./stream-utils\";\n\nexport type DecoratorConfig = {\n name: string;\n contextProperties?: {\n userId?: string;\n sessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n };\n spanAttributes?: Record<string, AttributeValue>;\n input?: unknown;\n ignoreInput?: boolean;\n ignoreOutput?: boolean;\n inputParameters?: unknown[];\n suppressTracing?: boolean;\n parentSpanContext?: string | LaminarSpanContext;\n};\n\n// Overload for when thisArg is provided (method call)\nexport function observeBase<\n A extends unknown[],\n This,\n F extends (this: This, ...args: A) => ReturnType<F>,\n>(\n config: DecoratorConfig,\n fn: F,\n thisArg: This,\n ...args: A\n): ReturnType<F>;\n\n// Overload for when thisArg is not provided (standalone function)\nexport function observeBase<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(\n config: DecoratorConfig,\n fn: F,\n thisArg: undefined,\n ...args: A\n): ReturnType<F>;\n\n// Implementation signature (more permissive to handle both cases)\nexport function observeBase<\n A extends unknown[],\n F extends (this: ThisParameterType<F>, ...args: A) => ReturnType<F>,\n>(\n {\n name,\n contextProperties,\n spanAttributes,\n input,\n ignoreInput,\n ignoreOutput,\n inputParameters,\n suppressTracing: shouldSuppressTracing,\n parentSpanContext,\n }: DecoratorConfig,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n): ReturnType<F> {\n let entityContext = LaminarContextManager.getContext();\n\n if (shouldSuppressTracing) {\n entityContext = suppressTracing(entityContext);\n }\n\n if (parentSpanContext) {\n try {\n const laminarContext = typeof parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(parentSpanContext)\n : parentSpanContext;\n\n const spanContext = tryToOtelSpanContext(laminarContext);\n entityContext = trace.setSpan(entityContext, trace.wrapSpanContext(spanContext));\n } catch (e) {\n logger.warn(\"Failed to parse parent span context: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n // Set context properties for propagation to child spans\n if (contextProperties && Object.keys(contextProperties).length > 0) {\n const currentAssociationProperties = entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {};\n entityContext = entityContext.setValue(\n ASSOCIATION_PROPERTIES_KEY,\n { ...currentAssociationProperties, ...contextProperties },\n );\n }\n\n return context.with(entityContext, () =>\n getTracer().startActiveSpan(\n name,\n {\n attributes: spanAttributes,\n },\n entityContext,\n (span: Span) => {\n if (shouldSendTraces() && !ignoreInput) {\n try {\n const spanInput = inputParameters ?? args;\n if (input !== undefined) {\n span.setAttribute(\n SPAN_INPUT,\n typeof input === 'string' ? input : serialize(input),\n );\n } else if (\n spanInput.length === 1 &&\n typeof spanInput[0] === \"object\" &&\n !(spanInput[0] instanceof Map)\n ) {\n span.setAttribute(\n SPAN_INPUT,\n typeof spanInput[0] === 'string' ? spanInput[0] : serialize(spanInput[0]),\n );\n } else {\n // pass an array of the arguments without names\n // Need to convert it to map from argument name to value,\n // if we figure out how to do it elegantly\n span.setAttribute(\n SPAN_INPUT,\n serialize(spanInput.length > 0 ? spanInput : {}),\n );\n }\n } catch (error) {\n logger.warn(\"Failed to serialize input: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n let res: ReturnType<F>;\n try {\n res = fn.apply(thisArg as ThisParameterType<F>, args);\n } catch (error) {\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n // Check if the resolved result is a stream\n const streamInfo = getStream(resolvedRes);\n if (streamInfo.type !== null) {\n return handleStreamResult(\n resolvedRes,\n streamInfo,\n span,\n ignoreOutput,\n serialize,\n ) as ReturnType<F>;\n }\n\n // Not a stream, handle normally\n try {\n if (shouldSendTraces() && !ignoreOutput) {\n span.setAttribute(\n SPAN_OUTPUT,\n serialize(resolvedRes),\n );\n }\n } catch (error) {\n logger.warn(\"Failed to serialize async output: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n } finally {\n span.end();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return resolvedRes;\n })\n .catch((error) => {\n span.recordException(error as Error);\n span.end();\n throw error;\n }) as ReturnType<F>;\n }\n\n // Check if the result is a stream\n const streamInfo = getStream(res);\n if (streamInfo.type !== null) {\n return handleStreamResult(\n res, streamInfo, span, ignoreOutput, serialize) as ReturnType<F>;\n }\n\n try {\n if (shouldSendTraces() && !ignoreOutput) {\n span.setAttribute(\n SPAN_OUTPUT,\n typeof res === 'string' ? res : serialize(res),\n );\n }\n } catch (error) {\n logger.warn(\"Failed to serialize output: \" +\n `${error instanceof Error ? error.message : String(error)}`);\n } finally {\n span.end();\n }\n\n return res;\n },\n ),\n );\n}\n\nconst normalizePayload = (payload: unknown, seen: WeakSet<any>): unknown => {\n if (payload instanceof Map) {\n return Array.from(payload.entries());\n } else if (Array.isArray(payload)) {\n return payload.map((value) => normalizePayload(value, seen));\n } else if (!payload) {\n return payload;\n } else if (typeof payload === \"object\") {\n if (seen.has(payload)) {\n return \"[Circular reference]\";\n }\n seen.add(payload);\n\n // serialize object one by one\n const output: any = {};\n Object.entries(payload as any).forEach(([key, value]) => {\n\n output[key] = normalizePayload(value, seen);\n });\n return output;\n }\n\n return payload;\n};\n\nconst serialize = (payload: unknown): string =>\n JSON.stringify(normalizePayload(payload, new WeakSet()));\n","import { LaminarSpanContext, RolloutParam, TraceType, TracingLevel } from '@lmnr-ai/types';\nimport { AttributeValue } from \"@opentelemetry/api\";\n\nimport { observeBase } from './opentelemetry-lib';\nimport {\n ASSOCIATION_PROPERTIES,\n PARENT_SPAN_IDS_PATH,\n PARENT_SPAN_PATH,\n SPAN_TYPE,\n} from \"./opentelemetry-lib/tracing/attributes\";\nimport {\n ASSOCIATION_PROPERTIES_KEY,\n LaminarContextManager,\n} from \"./opentelemetry-lib/tracing/context\";\nimport { deserializeLaminarSpanContext, initializeLogger } from \"./utils\";\n\nconst logger = initializeLogger();\n\ndeclare global {\n var _rolloutFunctions: Map<string, {\n fn: (...args: any[]) => any;\n params: RolloutParam[];\n name: string;\n }> | undefined;\n var _set_rollout_global: boolean;\n var _currentExportName: string | undefined;\n}\n\ninterface ObserveOptions {\n name?: string;\n sessionId?: string;\n userId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n spanType?: 'DEFAULT' | 'LLM' | 'TOOL' | 'EVALUATOR' | 'EVALUATION' | 'EXECUTOR';\n input?: unknown;\n ignoreInput?: boolean;\n ignoreOutput?: boolean;\n parentSpanContext?: string | LaminarSpanContext;\n metadata?: Record<string, any>;\n tags?: string[];\n rolloutEntrypoint?: boolean;\n}\n\n/**\n * Extracts parameter names from a function using regex (fallback for runtime parsing)\n * Note: This is a best-effort fallback. For TypeScript files, use ts-parser.ts instead.\n */\nconst extractParamNames = (fn: (...args: any[]) => any): RolloutParam[] => {\n const fnStr = fn.toString();\n\n // Match function parameters - handles regular functions, arrow functions, async functions\n const paramMatch = fnStr.match(\n /(?:async\\s+)?(?:function\\s*)?\\(([^)]*)\\)|(?:async\\s*)?([^=\\s(]+)\\s*=>/,\n );\n\n if (!paramMatch) {\n return [];\n }\n\n const paramsStr = paramMatch[1] || paramMatch[2] || '';\n\n if (!paramsStr.trim()) {\n return [];\n }\n\n // Split by comma and extract parameter names with metadata\n const params = paramsStr.split(',').map(param => {\n const trimmed = param.trim();\n\n // Check if it's destructured (starts with { or [)\n if (trimmed.startsWith('{')) {\n return {\n name: '_destructured',\n required: !trimmed.includes('='), // Has default if includes =\n };\n }\n\n if (trimmed.startsWith('[')) {\n return {\n name: '_arrayDestructured',\n required: !trimmed.includes('='),\n };\n }\n\n // Extract default value if present\n const hasDefault = trimmed.includes('=');\n let defaultValue: string | undefined;\n let nameWithoutDefault = trimmed;\n\n if (hasDefault) {\n const parts = trimmed.split('=');\n nameWithoutDefault = parts[0].trim();\n defaultValue = parts.slice(1).join('=').trim();\n }\n\n // Check for optional marker (?)\n const isOptional = nameWithoutDefault.includes('?');\n\n // Remove type annotations and whitespace\n const name = nameWithoutDefault\n .replace(/:.+$/, '') // Remove type annotations\n .replace(/\\?/g, '') // Remove optional marker\n .replace(/\\s+/g, ''); // Remove whitespace\n\n // Extract just the parameter name\n const simpleNameMatch = name.match(/^[a-zA-Z_$][a-zA-Z0-9_$]*/);\n const paramName = simpleNameMatch ? simpleNameMatch[0] : name;\n\n return {\n name: paramName,\n required: !hasDefault && !isOptional,\n default: defaultValue,\n };\n });\n\n return params.filter(p => p.name && p.name.length > 0);\n};\n\n/**\n * The main decorator entrypoint for Laminar. This is used to wrap\n * functions and methods to create spans.\n *\n * When `rolloutEntrypoint: true` is set, returns a wrapped function that can be\n * used for rollout debugging sessions with `npx lmnr serve`.\n *\n * @param options - Configuration options for the span\n * @param options.name - Name of the span. Function name is used if not specified.\n * @param options.sessionId - Session ID to associate with the span and the following context.\n * @param options.userId - User ID to associate with the span and the following context.\n * This is different from the id of a Laminar user.\n * @param options.traceType - Type of the trace. Unless it is within evaluation, it should be\n * 'DEFAULT'.\n * @param options.spanType - Type of the span. 'DEFAULT' is used if not specified. If the type\n * is 'LLM', you must manually specify some attributes. See `Laminar.setSpanAttributes`\n * for more information.\n * @param options.input - Force override the input for the span. If not specified, the\n * input will be the arguments passed to the function.\n * @param options.ignoreInput - Whether to ignore the input altogether.\n * @param options.ignoreOutput - Whether to ignore the output altogether.\n * @param options.parentSpanContext - Parent span context to associate with this span.\n * @param options.metadata - Metadata to add to a trace for further filtering. Must be\n * JSON serializable.\n * @param options.tags - Tags to associate with the span.\n * @param options.rolloutEntrypoint - When true, returns a wrapped function for\n * rollout debugging. When false/undefined, executes the function immediately.\n * @param fn - The function to wrap\n * @param args - Arguments to pass to the function (only when rolloutEntrypoint is\n * false/undefined)\n * @returns Wrapped function (when rolloutEntrypoint: true) or Promise with result\n * @throws Exception - Re-throws the exception if the wrapped function throws an exception.\n *\n * @example\n * ```typescript\n * // Regular usage (immediate execution)\n * await observe({ name: 'my_function' }, async (x: string) => {\n * // Your code here\n * return x.toUpperCase();\n * }, 'hello');\n *\n * // Rollout entrypoint (returns wrapped function)\n * export const myAgent = observe(\n * { name: 'agent', rolloutEntrypoint: true },\n * async (input: string) => {\n * // Your agent code here\n * return processInput(input);\n * }\n * );\n * // Then call: await myAgent('hello');\n * ```\n */\n// Overload: when rolloutEntrypoint is true, return wrapped function\nexport function observe<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n options: ObserveOptions & { rolloutEntrypoint: true },\n fn: F,\n ...args: A\n): F;\n\nexport function observe<F extends (...args: any[]) => ReturnType<F>>(\n options: ObserveOptions & { rolloutEntrypoint: true },\n fn: F,\n): F;\n\n// Overload: when rolloutEntrypoint is false/undefined, execute immediately\nexport function observe<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n options: ObserveOptions,\n fn: F,\n ...args: A\n): ReturnType<F>;\n\n// Implementation\nexport function observe<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n options: ObserveOptions,\n fn: F,\n ...args: A\n): F | ReturnType<F> {\n if (fn === undefined || typeof fn !== \"function\") {\n throw new Error(\"Invalid `observe` usage. Second argument `fn` must be a function.\");\n }\n\n const {\n name,\n sessionId,\n userId,\n traceType,\n spanType,\n input,\n ignoreInput,\n ignoreOutput,\n parentSpanContext,\n metadata,\n tags,\n rolloutEntrypoint,\n } = options;\n const spanName = name ?? fn.name;\n\n // If rolloutEntrypoint is true, return a wrapped function\n if (rolloutEntrypoint) {\n // Extract parameter names for rollout\n const params = extractParamNames(fn);\n // Get rollout session ID from env var if in rollout mode\n const envRolloutSessionId = process.env.LMNR_ROLLOUT_SESSION_ID;\n\n // Create wrapped function\n const wrappedFn = ((...fnArgs: Parameters<F>): ReturnType<F> => {\n const observeOptions = {\n sessionId,\n traceType,\n spanType,\n userId,\n rolloutSessionId: envRolloutSessionId,\n tags,\n metadata,\n };\n\n const contextProperties = buildContextProperties(observeOptions);\n const spanAttributes = buildSpanAttributes(observeOptions);\n\n const argsToPass = (args && args.length > 0) ? args : fnArgs;\n\n return observeBase<A, F>({\n name: spanName,\n contextProperties,\n spanAttributes,\n input: input ?? argsToPass,\n ignoreInput,\n ignoreOutput,\n parentSpanContext,\n }, fn, undefined, ...argsToPass);\n }) as F;\n\n // If in registration mode, register this function\n if (globalThis._set_rollout_global) {\n if (!globalThis._rolloutFunctions) {\n globalThis._rolloutFunctions = new Map();\n }\n\n // Use current export name if available, otherwise use function name\n const exportName = globalThis._currentExportName || spanName || 'unknown';\n\n globalThis._rolloutFunctions.set(exportName, {\n fn: wrappedFn as (...args: any[]) => any,\n params,\n name: spanName,\n });\n }\n\n return wrappedFn;\n }\n\n // Regular execution mode (backward compatible)\n const observeOptions = {\n sessionId,\n traceType,\n spanType,\n userId,\n tags,\n metadata,\n parentSpanContext,\n };\n\n const contextProperties = buildContextProperties(observeOptions);\n const spanAttributes = buildSpanAttributes(observeOptions);\n\n return observeBase<A, F>({\n name: spanName,\n contextProperties,\n spanAttributes,\n input,\n ignoreInput,\n ignoreOutput,\n parentSpanContext,\n }, fn, undefined, ...args);\n}\n\n/**\n * Sets the tracing level for any spans inside the function. This is useful for\n * conditionally disabling the tracing for certain functions.\n * Tracing level must be one of the values in {@link TracingLevel}. Returns the\n * result of the wrapped function, so you can use it in an `await` statement if\n * needed.\n *\n * @param tracingLevel - The tracing level to set.\n * @returns The result of the wrapped function.\n *\n * @example\n * ```typescript\n * import { withTracingLevel, TracingLevel } from '@lmnr-ai/lmnr';\n *\n * const result = await withTracingLevel(TracingLevel.META_ONLY, () => {\n * openai.chat.completions.create({});\n * });\n * ```\n */\nexport function withTracingLevel<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n tracingLevel: TracingLevel,\n fn: F,\n ...args: A\n): ReturnType<F> {\n let entityContext = LaminarContextManager.getContext();\n const currentAssociationProperties = entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {};\n\n entityContext = entityContext.setValue(\n ASSOCIATION_PROPERTIES_KEY,\n { ...currentAssociationProperties, \"tracing_level\": tracingLevel },\n );\n\n const result = LaminarContextManager.runWithIsolatedContext(\n [entityContext],\n () => fn(...args),\n );\n\n const newAssociationProperties = (\n entityContext.getValue(ASSOCIATION_PROPERTIES_KEY) ?? {}\n ) as Record<string, any>;\n delete newAssociationProperties[\"tracing_level\"];\n\n entityContext = entityContext.setValue(\n ASSOCIATION_PROPERTIES_KEY,\n newAssociationProperties,\n );\n\n return result;\n}\n\n/**\n * Builds context-level association properties that propagate to child spans.\n * These properties flow through the OpenTelemetry context and are inherited by\n * any child spans created with startActiveSpan.\n */\nconst buildContextProperties = (\n options: Partial<ObserveOptions>,\n): {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n} => {\n const parentSpanContext = options.parentSpanContext;\n const globalMetadata = LaminarContextManager.getGlobalMetadata();\n const ctxAssociationProperties = LaminarContextManager.getAssociationProperties();\n\n let parentMetadata: Record<string, any> | undefined;\n let parentTraceType: TraceType | undefined;\n let parentTracingLevel: TracingLevel | undefined;\n let parentUserId: string | undefined;\n let parentSessionId: string | undefined;\n let parentRolloutSessionId: string | undefined;\n\n if (parentSpanContext) {\n try {\n const laminarContext = typeof parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(parentSpanContext)\n : parentSpanContext;\n\n parentMetadata = laminarContext.metadata;\n parentTraceType = laminarContext.traceType;\n parentTracingLevel = laminarContext.tracingLevel;\n parentUserId = laminarContext.userId;\n parentSessionId = laminarContext.sessionId;\n parentRolloutSessionId = laminarContext.rolloutSessionId;\n } catch (e) {\n logger.warn(\"Failed to parse parent span context: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n const contextProperties: {\n userId?: string;\n sessionId?: string;\n rolloutSessionId?: string;\n traceType?: TraceType;\n tracingLevel?: TracingLevel;\n metadata?: Record<string, any>;\n } = {};\n\n const sessionIdValue = options.sessionId ?? parentSessionId ?? ctxAssociationProperties.sessionId;\n if (sessionIdValue) {\n contextProperties.sessionId = sessionIdValue;\n }\n\n const userIdValue = options.userId ?? parentUserId ?? ctxAssociationProperties.userId;\n if (userIdValue) {\n contextProperties.userId = userIdValue;\n }\n\n const rolloutSessionIdValue = options.rolloutSessionId ?? parentRolloutSessionId\n ?? ctxAssociationProperties.rolloutSessionId;\n if (rolloutSessionIdValue) {\n contextProperties.rolloutSessionId = rolloutSessionIdValue;\n }\n\n const traceTypeValue = options.traceType ?? parentTraceType\n ?? ([\"EVALUATION\", \"EXECUTOR\", \"EVALUATOR\"].includes(options.spanType ?? \"DEFAULT\")\n ? \"EVALUATION\"\n : undefined\n )\n ?? ctxAssociationProperties.traceType\n ?? \"DEFAULT\";\n if (traceTypeValue) {\n contextProperties.traceType = traceTypeValue;\n }\n\n const tracingLevelValue = parentTracingLevel ?? ctxAssociationProperties.tracingLevel;\n if (tracingLevelValue) {\n contextProperties.tracingLevel = tracingLevelValue;\n }\n\n const mergedMetadata = {\n ...globalMetadata,\n ...ctxAssociationProperties.metadata,\n ...parentMetadata,\n ...options.metadata,\n ...(rolloutSessionIdValue ? { 'rollout.session_id': rolloutSessionIdValue } : {}),\n };\n\n if (Object.keys(mergedMetadata).length > 0) {\n contextProperties.metadata = mergedMetadata;\n }\n\n return contextProperties;\n};\n\n/**\n * Builds span-specific attributes that do NOT propagate to child spans.\n * These include spanType, tags, and parent span path information.\n */\nconst buildSpanAttributes = (\n options: Partial<ObserveOptions>,\n): Record<string, AttributeValue> => {\n const spanAttributes: Record<string, AttributeValue> = {};\n\n if (options.spanType) {\n spanAttributes[SPAN_TYPE] = options.spanType;\n }\n\n if (options.tags) {\n spanAttributes[`${ASSOCIATION_PROPERTIES}.tags`] = Array.from(new Set(options.tags));\n }\n\n if (options.parentSpanContext) {\n try {\n const laminarContext = typeof options.parentSpanContext === 'string'\n ? deserializeLaminarSpanContext(options.parentSpanContext)\n : options.parentSpanContext;\n\n if (laminarContext.spanPath) {\n spanAttributes[PARENT_SPAN_PATH] = laminarContext.spanPath;\n }\n if (laminarContext.spanIdsPath) {\n spanAttributes[PARENT_SPAN_IDS_PATH] = laminarContext.spanIdsPath;\n }\n } catch (e) {\n logger.warn(\"Failed to parse parent span context for span attributes: \" +\n (e instanceof Error ? e.message : String(e)),\n );\n }\n }\n\n return spanAttributes;\n};\n\n/**\n * Decorator that wraps a method to automatically observe it with Laminar tracing.\n * This decorator uses the TypeScript 5.0+ standard decorator syntax.\n *\n * **Important**: Use this decorator only if your `tsconfig.json` does NOT have\n * `experimentalDecorators: true`. If you're using experimental decorators, use\n * {@link observeExperimentalDecorator} instead.\n *\n * This decorator can be used on class methods to automatically create spans.\n *\n * @param config - Configuration for the observe decorator, can be static or a function\n * @returns A method decorator\n *\n * @example\n * ```typescript\n * // In your tsconfig.json, ensure experimentalDecorators is NOT enabled:\n * // {\n * // \"compilerOptions\": {\n * // \"experimentalDecorators\": false // or omit this line\n * // }\n * // }\n *\n * import { observeDecorator } from '@lmnr-ai/lmnr';\n *\n * class MyService {\n * @observeDecorator({ name: 'processData', spanType: 'DEFAULT' })\n * async processData(input: string) {\n * // Your code here\n * return `processed: ${input}`;\n * }\n *\n * @observeDecorator((thisArg, ...args) => ({\n * name: `dynamicMethod_${args[0]}`,\n * sessionId: thisArg.sessionId\n * }))\n * async dynamicMethod(id: string) {\n * // Your code here\n * }\n * }\n * ```\n */\nexport function observeDecorator<This, Args extends unknown[], Return>(\n config:\n | Partial<ObserveOptions>\n | ((thisArg: This, ...funcArgs: Args) => Partial<ObserveOptions>),\n) {\n return function (\n originalMethod: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n ) {\n if (context.kind !== 'method') {\n throw new Error(\n `observeDecorator can only be applied to methods. Applied to: ${String(context.name)}`,\n );\n }\n\n const methodName = String(context.name);\n\n return function (this: This, ...args: Args): Return {\n let actualConfig: Partial<ObserveOptions>;\n\n if (typeof config === \"function\") {\n actualConfig = config(this, ...args);\n } else {\n actualConfig = config;\n }\n\n const observeName = actualConfig.name ?? methodName;\n const contextProperties = buildContextProperties(actualConfig);\n const spanAttributes = buildSpanAttributes(actualConfig);\n\n return observeBase(\n {\n name: observeName,\n contextProperties,\n spanAttributes,\n input: actualConfig.input,\n ignoreInput: actualConfig.ignoreInput,\n ignoreOutput: actualConfig.ignoreOutput,\n parentSpanContext: actualConfig.parentSpanContext,\n },\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n\n/**\n * Decorator that wraps a method to automatically observe it with Laminar tracing.\n * This decorator uses the legacy experimental decorator syntax\n * (requires `--experimentalDecorators` flag).\n *\n * **Important**: Use this decorator only if your `tsconfig.json` has\n * `experimentalDecorators: true` in the `compilerOptions` section\n * (or if you compile with the `--experimentalDecorators` flag).\n * For TypeScript 5.0+ projects without experimental decorators, use\n * {@link observeDecorator} instead.\n *\n * This decorator can be used on class methods to automatically create spans.\n *\n * Use this only if you need the legacy experimental decorator syntax.\n * @param config - Configuration for the observe decorator, can be static or a function\n * @returns A method decorator\n *\n * @example\n * ```typescript\n * // In your tsconfig.json, ensure experimentalDecorators is enabled:\n * // {\n * // \"compilerOptions\": {\n * // \"experimentalDecorators\": true\n * // }\n * // }\n *\n * import { observeExperimentalDecorator } from '@lmnr-ai/lmnr';\n *\n * class MyService {\n * @observeExperimentalDecorator({ name: 'processData', spanType: 'DEFAULT' })\n * async processData(input: string) {\n * // Your code here\n * return `processed: ${input}`;\n * }\n *\n * @observeExperimentalDecorator((thisArg, ...args) => ({\n * name: `dynamicMethod_${args[0]}`,\n * sessionId: thisArg.sessionId\n * }))\n * async dynamicMethod(id: string) {\n * // Your code here\n * }\n * }\n * ```\n */\nexport function observeExperimentalDecorator(\n config:\n | Partial<ObserveOptions>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<ObserveOptions>),\n) {\n return function (\n _target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error(\n \"observeExperimentalDecorator can only be applied to methods. \" +\n `Applied to: ${String(propertyKey)}`,\n );\n }\n\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: unknown[]) {\n let actualConfig: Partial<ObserveOptions>;\n\n if (typeof config === \"function\") {\n actualConfig = config(this, ...args);\n } else {\n actualConfig = config;\n }\n\n const observeName = actualConfig.name ?? originalMethod.name;\n const contextProperties = buildContextProperties(actualConfig);\n const spanAttributes = buildSpanAttributes(actualConfig);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return observeBase(\n {\n name: observeName,\n contextProperties,\n spanAttributes,\n input: actualConfig.input,\n ignoreInput: actualConfig.ignoreInput,\n ignoreOutput: actualConfig.ignoreOutput,\n parentSpanContext: actualConfig.parentSpanContext,\n },\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n"],"mappings":"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"}