{"version":3,"file":"wreq-js.cjs","names":["require","ReadableStream","STATUS_CODES","Readable"],"sources":["../src/native-require-cjs.ts","../src/types.ts","../src/wreq-js.ts"],"sourcesContent":["export const nativeRequire: NodeRequire = require;\n","// Import and re-export the auto-generated BrowserProfile and EmulationOS types\nimport type { BrowserProfile, EmulationOS } from \"./generated-types.js\";\nimport type { Session, Transport, WebSocket } from \"./wreq-js.js\";\n\nexport type { BrowserProfile, EmulationOS };\n\n/**\n * Controls how cookies are scoped for a request.\n * - \"session\": reuse an explicit Session or sessionId across calls.\n * - \"ephemeral\": create an isolated, single-use session.\n */\nexport type CookieMode = \"session\" | \"ephemeral\";\n\n/**\n * Minimal handle implemented by {@link Session}. Exposed for integrations\n * that only need to carry a session id.\n */\nexport interface SessionHandle {\n  readonly id: string;\n}\n\nexport interface SessionCookie {\n  name: string;\n  value: string;\n  domain?: string;\n  path?: string;\n  secure: boolean;\n  httpOnly: boolean;\n  sameSite?: \"lax\" | \"strict\" | \"none\";\n  expiresAtMs?: number;\n}\n\n/**\n * A tuple of [name, value] pairs used for initializing headers.\n * Both name and value must be strings.\n *\n * @example\n * ```typescript\n * const headers: HeaderTuple = ['Content-Type', 'application/json'];\n * ```\n */\nexport type HeaderTuple = [string, string];\n\n/**\n * Represents various input types accepted when creating or initializing headers.\n * Can be an iterable of header tuples, an array of tuples, or a plain object.\n *\n * @example\n * ```typescript\n * // As an object\n * const headers: HeadersInit = { 'Content-Type': 'application/json' };\n *\n * // As an array of tuples\n * const headers: HeadersInit = [['Content-Type', 'application/json']];\n *\n * // As an iterable\n * const headers: HeadersInit = new Map([['Content-Type', 'application/json']]);\n * ```\n */\nexport type HeadersInit =\n  | Iterable<HeaderTuple>\n  | Array<HeaderTuple>\n  | Record<string, string | number | boolean | null | undefined>;\n\nexport type AlpnProtocol = \"HTTP1\" | \"HTTP2\" | \"HTTP3\";\n\nexport type AlpsProtocol = \"HTTP1\" | \"HTTP2\" | \"HTTP3\";\n\nexport type TlsVersion = \"1.0\" | \"1.1\" | \"1.2\" | \"1.3\" | \"TLS1.0\" | \"TLS1.1\" | \"TLS1.2\" | \"TLS1.3\";\n\nexport type Http2PseudoHeaderId = \"Method\" | \"Scheme\" | \"Authority\" | \"Path\" | \"Protocol\";\nexport type TrustStoreMode = \"combined\" | \"mozilla\" | \"defaultPaths\";\n\nexport type Http2SettingId =\n  | \"HeaderTableSize\"\n  | \"EnablePush\"\n  | \"MaxConcurrentStreams\"\n  | \"InitialWindowSize\"\n  | \"MaxFrameSize\"\n  | \"MaxHeaderListSize\"\n  | \"EnableConnectProtocol\"\n  | \"NoRfc7540Priorities\";\n\nexport interface Http2StreamDependency {\n  dependencyId: number;\n  weight: number;\n  exclusive?: boolean;\n}\n\nexport interface Http2Priority {\n  streamId: number;\n  dependency: Http2StreamDependency;\n}\n\nexport interface Http2ExperimentalSetting {\n  id: number;\n  value: number;\n}\n\nexport interface CustomTlsOptions {\n  alpnProtocols?: AlpnProtocol[];\n  alpsProtocols?: AlpsProtocol[];\n  alpsUseNewCodepoint?: boolean;\n  sessionTicket?: boolean;\n  minTlsVersion?: TlsVersion;\n  maxTlsVersion?: TlsVersion;\n  preSharedKey?: boolean;\n  enableEchGrease?: boolean;\n  permuteExtensions?: boolean;\n  greaseEnabled?: boolean;\n  enableOcspStapling?: boolean;\n  enableSignedCertTimestamps?: boolean;\n  recordSizeLimit?: number;\n  pskSkipSessionTicket?: boolean;\n  keySharesLimit?: number;\n  pskDheKe?: boolean;\n  renegotiation?: boolean;\n  delegatedCredentials?: string;\n  curvesList?: string;\n  cipherList?: string;\n  sigalgsList?: string;\n  certificateCompressionAlgorithms?: Array<\"zlib\" | \"brotli\" | \"zstd\">;\n  extensionPermutation?: number[];\n  aesHwOverride?: boolean;\n  preserveTls13CipherList?: boolean;\n  randomAesHwOverride?: boolean;\n}\n\nexport interface CustomHttp1Options {\n  http09Responses?: boolean;\n  writev?: boolean;\n  maxHeaders?: number;\n  readBufExactSize?: number;\n  maxBufSize?: number;\n  ignoreInvalidHeadersInResponses?: boolean;\n  allowSpacesAfterHeaderNameInResponses?: boolean;\n  allowObsoleteMultilineHeadersInResponses?: boolean;\n}\n\nexport interface CustomHttp2Options {\n  adaptiveWindow?: boolean;\n  initialStreamId?: number;\n  initialConnectionWindowSize?: number;\n  initialWindowSize?: number;\n  initialMaxSendStreams?: number;\n  maxFrameSize?: number;\n  keepAliveInterval?: number;\n  keepAliveTimeout?: number;\n  keepAliveWhileIdle?: boolean;\n  maxConcurrentResetStreams?: number;\n  maxSendBufferSize?: number;\n  maxConcurrentStreams?: number;\n  maxHeaderListSize?: number;\n  maxPendingAcceptResetStreams?: number;\n  enablePush?: boolean;\n  headerTableSize?: number;\n  enableConnectProtocol?: boolean;\n  noRfc7540Priorities?: boolean;\n  settingsOrder?: Http2SettingId[];\n  headersPseudoOrder?: Http2PseudoHeaderId[];\n  headersStreamDependency?: Http2StreamDependency;\n  priorities?: Http2Priority[];\n  experimentalSettings?: Http2ExperimentalSetting[];\n}\n\nexport interface CustomEmulationOptions {\n  tlsOptions?: CustomTlsOptions;\n  http1Options?: CustomHttp1Options;\n  http2Options?: CustomHttp2Options;\n  headers?: HeadersInit;\n  origHeaders?: string[];\n}\n\n/**\n * Represents the various types of data that can be used as a request body.\n * Supports strings, binary payloads, URL-encoded parameters, multipart forms, and blobs.\n *\n * @example\n * ```typescript\n * // String body\n * const body: BodyInit = JSON.stringify({ key: 'value' });\n *\n * // URLSearchParams\n * const body: BodyInit = new URLSearchParams({ key: 'value' });\n *\n * // Buffer\n * const body: BodyInit = Buffer.from('data');\n *\n * // FormData\n * const body: BodyInit = new FormData();\n * ```\n */\nexport type BodyInit = string | ArrayBuffer | ArrayBufferView | URLSearchParams | Buffer | Blob | FormData;\n\n/**\n * Details about why a WebSocket connection closed.\n */\nexport type WebSocketBinaryType = \"nodebuffer\" | \"arraybuffer\" | \"blob\";\n\nexport type WebSocketEventType = \"open\" | \"message\" | \"close\" | \"error\";\n\nexport interface WebSocketOpenEvent {\n  type: \"open\";\n  isTrusted: false;\n  timeStamp: number;\n  target: WebSocket;\n  currentTarget: WebSocket;\n}\n\nexport interface WebSocketMessageEvent {\n  type: \"message\";\n  isTrusted: false;\n  timeStamp: number;\n  data: string | Buffer | ArrayBuffer | Blob;\n  target: WebSocket;\n  currentTarget: WebSocket;\n}\n\nexport interface WebSocketErrorEvent {\n  type: \"error\";\n  isTrusted: false;\n  timeStamp: number;\n  message?: string;\n  target: WebSocket;\n  currentTarget: WebSocket;\n}\n\nexport interface WebSocketCloseEvent {\n  type: \"close\";\n  isTrusted: false;\n  timeStamp: number;\n\n  /**\n   * WebSocket close status code (RFC 6455).\n   */\n  code: number;\n\n  /**\n   * UTF-8 close reason sent by the peer.\n   */\n  reason: string;\n\n  wasClean: boolean;\n  target: WebSocket;\n  currentTarget: WebSocket;\n}\n\n/**\n * Options for configuring a fetch style request with wreq-specific extensions\n * for browser impersonation, proxies, sessions, and timeouts.\n *\n * @example\n * ```typescript\n * const options: RequestInit = {\n *   method: 'POST',\n *   headers: { 'Content-Type': 'application/json' },\n *   body: JSON.stringify({ key: 'value' }),\n *   browser: 'chrome_142',\n *   proxy: 'http://proxy.example.com:8080',\n *   timeout: 5000\n * };\n * ```\n */\nexport type RequestEventType =\n  | \"request_start\"\n  | \"request_sent\"\n  | \"response_headers\"\n  | \"body_progress\"\n  | \"body_complete\"\n  | \"done\"\n  | \"error\";\n\nexport interface RequestEvent {\n  type: RequestEventType;\n  timestamp: number;\n  status?: number;\n  url?: string;\n  contentLength?: number | null;\n  downloadedBytes?: number;\n  message?: string;\n}\n\nexport interface RequestDiagnostics {\n  totalDurationMs?: number;\n  headersDurationMs?: number;\n  status?: number;\n  localAddr?: string;\n  remoteAddr?: string;\n  tlsPeerCertificatePresent?: boolean;\n  tlsPeerCertificateChainLength?: number;\n}\n\nexport interface RequestInit {\n  /**\n   * A string to set request's method.\n   * @default 'GET'\n   */\n  method?: string;\n\n  /**\n   * A Headers object, an object literal, or an array of two-item arrays to set request's headers.\n   */\n  headers?: HeadersInit;\n\n  /**\n   * A BodyInit object or null to set request's body.\n   */\n  body?: BodyInit | null;\n\n  /**\n   * An AbortSignal to set request's signal.\n   */\n  signal?: AbortSignal | null;\n\n  /**\n   * A string indicating whether request follows redirects, results in an error upon\n   * encountering a redirect, or returns the redirect (in an opaque fashion).\n   * @default 'follow'\n   */\n  redirect?: \"follow\" | \"manual\" | \"error\";\n\n  /**\n   * Transport instance to use for this request. When provided, transport-level\n   * options such as `browser`, `os`, `proxy`, and `insecure` must not be set.\n   */\n  transport?: Transport;\n\n  /**\n   * Browser profile to impersonate for this request.\n   * Applies browser profile behavior handled by the native layer.\n   * Ignored when `transport` is provided.\n   * @default 'chrome_142'\n   */\n  browser?: BrowserProfile;\n\n  /**\n   * Operating system to emulate for this request.\n   * Influences platform-specific behavior handled by the native layer.\n   * Ignored when `transport` is provided.\n   * @default 'macos'\n   */\n  os?: EmulationOS;\n\n  /**\n   * Custom emulation overrides. When `browser` or `os` is present, these fields\n   * layer on top of the resolved preset profile. When both are omitted, this\n   * switches the request into standalone custom emulation mode.\n   */\n  emulation?: CustomEmulationOptions;\n\n  /**\n   * Proxy URL to route the request through (e.g., 'http://proxy.example.com:8080').\n   * Proxy support depends on the native layer and proxy scheme.\n   * Ignored when `transport` is provided.\n   */\n  proxy?: string;\n\n  /**\n   * Request timeout in milliseconds. If the request takes longer than this value,\n   * it will be aborted.\n   * @default 30000\n   */\n  timeout?: number;\n\n  /**\n   * Controls how cookies are managed for this call.\n   * - \"ephemeral\": default when no session/sessionId is provided. Creates an isolated session per request.\n   * - \"session\": requires an explicit session or sessionId and reuses its cookie jar.\n   */\n  cookieMode?: CookieMode;\n\n  /**\n   * Session instance to bind this request to. When provided, {@link cookieMode}\n   * automatically behaves like `\"session\"`.\n   */\n  session?: Session;\n\n  /**\n   * Identifier of an existing session created elsewhere (e.g., via {@link createSession}).\n   */\n  sessionId?: string;\n\n  /**\n   * Disable default headers from browser emulation. When enabled, only explicitly\n   * provided headers will be sent with the request, preventing emulation headers\n   * from being automatically added or appended.\n   * @default false\n   */\n  disableDefaultHeaders?: boolean;\n\n  /**\n   * Disable HTTPS certificate verification. When enabled, self-signed and invalid\n   * certificates will be accepted.\n   * Ignored when `transport` is provided.\n   *\n   * # Warning\n   *\n   * You should think very carefully before using this method. If invalid\n   * certificates are trusted, *any* certificate for *any* site will be\n   * trusted for use. This includes expired certificates. This introduces\n   * significant vulnerabilities, and should only be used as a last resort.\n   *\n   * @default false\n   */\n  insecure?: boolean;\n\n  /**\n   * Controls which certificate roots are used for TLS verification.\n   *\n   * - `\"combined\"` merges OpenSSL/BoringSSL default verify paths with bundled Mozilla roots.\n   * - `\"mozilla\"` uses only the bundled Mozilla roots.\n   * - `\"defaultPaths\"` uses only OpenSSL/BoringSSL default verify paths such as\n   *   `SSL_CERT_FILE` / `SSL_CERT_DIR` when configured.\n   *\n   * Note: `\"defaultPaths\"` is not a native OS trust-store verifier.\n   * Ignored when `transport` is provided.\n   * @default \"combined\"\n   */\n  trustStore?: TrustStoreMode;\n\n  /**\n   * Whether to automatically decompress response bodies. When set to `false`,\n   * the raw compressed response body is returned as-is and the `Content-Encoding`\n   * header is preserved. Useful for proxy scenarios where the downstream client\n   * handles decompression.\n   * @default true\n   */\n  compress?: boolean;\n\n  /**\n   * Optional callback for structured request lifecycle events emitted by the\n   * native bridge.\n   */\n  onRequestEvent?: (event: RequestEvent) => void;\n\n  /**\n   * Capture a final diagnostics payload where supported by the native layer.\n   */\n  captureDiagnostics?: boolean;\n}\n\n/**\n * Configuration for {@link createSession}.\n */\nexport interface CreateSessionOptions {\n  /**\n   * Provide a custom identifier instead of an auto-generated random ID.\n   */\n  sessionId?: string;\n\n  /**\n   * Default headers applied to every request made through this session.\n   */\n  defaultHeaders?: HeadersInit;\n\n  /**\n   * Browser profile to bind to this session. Defaults to 'chrome_142'.\n   */\n  browser?: BrowserProfile;\n\n  /**\n   * Operating system to bind to this session. Defaults to 'macos'.\n   */\n  os?: EmulationOS;\n\n  /**\n   * Custom emulation overrides or a standalone custom emulation for the session transport.\n   */\n  emulation?: CustomEmulationOptions;\n  /**\n   * Optional proxy for every request made through the session.\n   */\n  proxy?: string;\n  /**\n   * Default timeout applied when {@link Session.fetch} is called without\n   * overriding `timeout`.\n   */\n  timeout?: number;\n\n  /**\n   * Disable HTTPS certificate verification. When enabled, self-signed and invalid\n   * certificates will be accepted for all requests made through this session.\n   *\n   * # Warning\n   *\n   * You should think very carefully before using this method. If invalid\n   * certificates are trusted, *any* certificate for *any* site will be\n   * trusted for use. This includes expired certificates. This introduces\n   * significant vulnerabilities, and should only be used as a last resort.\n   *\n   * @default false\n   */\n  insecure?: boolean;\n\n  /**\n   * Controls which certificate roots are used for TLS verification for this session.\n   * @default \"combined\"\n   */\n  trustStore?: TrustStoreMode;\n\n  /**\n   * Enable extra connection/TLS diagnostics for requests made through this session.\n   */\n  captureDiagnostics?: boolean;\n}\n\n/**\n * Configuration for {@link createTransport}.\n */\nexport interface CreateTransportOptions {\n  /**\n   * Proxy URL to route requests through (e.g., 'http://proxy.example.com:8080').\n   */\n  proxy?: string;\n\n  /**\n   * Browser profile to impersonate for this transport.\n   */\n  browser?: BrowserProfile;\n\n  /**\n   * Operating system to emulate for this transport.\n   */\n  os?: EmulationOS;\n\n  /**\n   * Custom emulation overrides or a standalone custom emulation for this transport.\n   */\n  emulation?: CustomEmulationOptions;\n\n  /**\n   * Disable HTTPS certificate verification for this transport.\n   */\n  insecure?: boolean;\n\n  /**\n   * Controls which certificate roots are used for TLS verification for this transport.\n   * @default \"combined\"\n   */\n  trustStore?: TrustStoreMode;\n\n  /**\n   * Idle timeout for pooled connections (ms).\n   */\n  poolIdleTimeout?: number;\n\n  /**\n   * Maximum number of idle connections per host.\n   */\n  poolMaxIdlePerHost?: number;\n\n  /**\n   * Maximum total connections in the pool.\n   */\n  poolMaxSize?: number;\n\n  /**\n   * TCP connect timeout (ms).\n   */\n  connectTimeout?: number;\n\n  /**\n   * Read timeout (ms).\n   */\n  readTimeout?: number;\n\n  /**\n   * Enable extra connection/TLS diagnostics for requests made through this transport.\n   */\n  captureDiagnostics?: boolean;\n}\n\n/**\n * Legacy request options interface. This interface is deprecated and will be removed in a future version.\n *\n * @deprecated Use {@link RequestInit} with the standard `fetch()` API instead.\n *\n * @example\n * ```typescript\n * // Old (deprecated):\n * const options: RequestOptions = {\n *   url: 'https://api.example.com',\n *   method: 'POST',\n *   body: JSON.stringify({ data: 'value' })\n * };\n *\n * // New (recommended):\n * const response = await fetch('https://api.example.com', {\n *   method: 'POST',\n *   body: JSON.stringify({ data: 'value' })\n * });\n * ```\n */\nexport interface RequestOptions {\n  /**\n   * The URL to request.\n   */\n  url: string;\n\n  /**\n   * Browser profile to impersonate.\n   * Applies browser profile behavior handled by the native layer.\n   * @default 'chrome_142'\n   */\n  browser?: BrowserProfile;\n\n  /**\n   * Operating system to emulate.\n   * @default 'macos'\n   */\n  os?: EmulationOS;\n\n  /**\n   * Custom emulation overrides. When `browser` or `os` is present, these fields\n   * layer on top of the resolved preset profile. When both are omitted, this\n   * switches the request into standalone custom emulation mode.\n   */\n  emulation?: CustomEmulationOptions;\n\n  /**\n   * HTTP method to use for the request.\n   * @default 'GET'\n   */\n  method?: string;\n\n  /**\n   * Additional headers to send with the request.\n   * Browser-specific headers will be automatically added based on the selected browser profile.\n   */\n  headers?: Record<string, string> | HeaderTuple[];\n\n  /**\n   * Request body data (for POST, PUT, PATCH requests).\n   */\n  body?: BodyInit | null;\n\n  /**\n   * Transport instance to use for this request. When provided, transport-level\n   * options such as `browser`, `os`, `proxy`, and `insecure` must not be set.\n   */\n  transport?: Transport;\n\n  /**\n   * Proxy URL to route the request through (e.g., 'http://proxy.example.com:8080').\n   * Proxy support depends on the native layer and proxy scheme.\n   */\n  proxy?: string;\n\n  /**\n   * Redirect policy applied to this request. Matches the `redirect` option accepted by {@link fetch}.\n   * @default \"follow\"\n   */\n  redirect?: \"follow\" | \"manual\" | \"error\";\n\n  /**\n   * Request timeout in milliseconds. If the request takes longer than this value,\n   * it will be aborted.\n   * @default 30000\n   */\n  timeout?: number;\n\n  /**\n   * Signal used to abort the request.\n   */\n  signal?: AbortSignal | null;\n\n  /**\n   * Session instance to bind this request to.\n   */\n  session?: Session;\n\n  /**\n   * Controls cookie scoping behavior for this request.\n   */\n  cookieMode?: CookieMode;\n\n  /**\n   * Identifier for the session that should handle this request.\n   * @internal\n   */\n  sessionId?: string;\n\n  /**\n   * Internal flag indicating whether the session should be discarded once the\n   * request finishes.\n   * @internal\n   */\n  ephemeral?: boolean;\n\n  /**\n   * Disable default headers from browser emulation. When enabled, only explicitly\n   * provided headers will be sent with the request, preventing emulation headers\n   * from being automatically added or appended.\n   * @default false\n   */\n  disableDefaultHeaders?: boolean;\n\n  /**\n   * Disable HTTPS certificate verification. When enabled, self-signed and invalid\n   * certificates will be accepted.\n   *\n   * # Warning\n   *\n   * You should think very carefully before using this method. If invalid\n   * certificates are trusted, *any* certificate for *any* site will be\n   * trusted for use. This includes expired certificates. This introduces\n   * significant vulnerabilities, and should only be used as a last resort.\n   *\n   * @default false\n   */\n  insecure?: boolean;\n\n  /**\n   * Controls which certificate roots are used for TLS verification.\n   * @default \"combined\"\n   */\n  trustStore?: TrustStoreMode;\n\n  /**\n   * Optional callback for structured request lifecycle events emitted by the\n   * native bridge.\n   */\n  onRequestEvent?: (event: RequestEvent) => void;\n\n  /**\n   * Capture a final diagnostics payload where supported by the native layer.\n   */\n  captureDiagnostics?: boolean;\n}\n\n/**\n * Internal response payload returned from the native Rust binding.\n * This interface represents the raw response data before it's converted\n * to a standard Response object.\n *\n * @internal\n */\nexport interface NativeResponse {\n  /**\n   * HTTP status code (e.g., 200, 404, 500).\n   */\n  status: number;\n\n  /**\n   * Response headers as [name, value] tuples.\n   * Header names are normalized to lowercase.\n   */\n  headers: HeaderTuple[];\n\n  /**\n   * Handle for streaming response body chunks from the native layer.\n   * When `null`, the response does not have a body (e.g., HEAD/204/304).\n   */\n  bodyHandle: number | null;\n\n  /**\n   * Inline body buffer returned for small payloads. When present, `bodyHandle`\n   * will be `null` to avoid a second native round-trip to read the body.\n   */\n  bodyBytes: Buffer | null;\n\n  /**\n   * Optional Content-Length hint reported by the server after decompression.\n   */\n  contentLength: number | null;\n\n  /**\n   * Cookies set by the server as [name, value] tuples.\n   */\n  cookies: HeaderTuple[];\n\n  /**\n   * Final URL after following any redirects.\n   * If no redirects occurred, this will match the original request URL.\n   */\n  url: string;\n\n  /**\n   * Optional diagnostics payload collected by the native layer.\n   */\n  diagnostics?: RequestDiagnostics | null;\n}\n\n/**\n * Configuration options for creating a WebSocket connection.\n * Supports browser impersonation and proxies, similar to HTTP requests.\n *\n * @example\n * ```typescript\n * const ws = await websocket('wss://example.com/socket', {\n *   browser: 'chrome_142',\n *   headers: { 'Authorization': 'Bearer token' },\n * });\n *\n * ws.onmessage = (event) => {\n *   console.log('Received:', event.data);\n * };\n * ```\n */\nexport interface WebSocketOptions {\n  /**\n   * Browser profile to impersonate for the WebSocket upgrade request.\n   * Automatically applies browser-specific headers and TLS fingerprints.\n   * @default 'chrome_142'\n   */\n  browser?: BrowserProfile;\n\n  /**\n   * Operating system to emulate for the WebSocket handshake.\n   * @default 'macos'\n   */\n  os?: EmulationOS;\n\n  /**\n   * Custom emulation overrides. When `browser` or `os` is present, these fields\n   * layer on top of the resolved preset profile. When both are omitted, this\n   * switches the handshake into standalone custom emulation mode.\n   */\n  emulation?: CustomEmulationOptions;\n\n  /**\n   * Additional headers to send with the WebSocket upgrade request.\n   * Common headers include Authorization, Origin, or custom application headers.\n   */\n  headers?: HeadersInit;\n\n  /**\n   * Proxy URL to route the connection through (e.g., 'http://proxy.example.com:8080').\n   * Proxy support depends on the native layer and proxy scheme.\n   */\n  proxy?: string;\n\n  /**\n   * Optional subprotocols for compatibility with the WHATWG WebSocket constructor.\n   * Values are validated for non-empty, unique entries and sent in\n   * the `Sec-WebSocket-Protocol` handshake header.\n   */\n  protocols?: string | string[];\n\n  /**\n   * Maximum size in bytes for a single incoming WebSocket frame.\n   * Increase this when the peer sends large unfragmented frames.\n   */\n  maxFrameSize?: number;\n\n  /**\n   * Maximum size in bytes for a complete incoming WebSocket message.\n   * Increase this when the peer sends very large fragmented messages.\n   */\n  maxMessageSize?: number;\n\n  /**\n   * Controls the binary payload type exposed via `MessageEvent.data`.\n   * - \"nodebuffer\": delivers Node.js Buffer instances (default)\n   * - \"arraybuffer\": delivers ArrayBuffer instances\n   * - \"blob\": delivers Blob instances\n   */\n  binaryType?: WebSocketBinaryType;\n}\n\nexport interface LegacyWebSocketOptions extends WebSocketOptions {\n  /**\n   * @deprecated Use `websocket(url, options)` or `new WebSocket(...)`.\n   */\n  url: string;\n  /**\n   * @deprecated Use `onmessage` or `addEventListener(\"message\", ...)`.\n   */\n  onMessage?: (data: string | Buffer) => void;\n  /**\n   * @deprecated Use `onclose` or `addEventListener(\"close\", ...)`.\n   */\n  onClose?: (event: WebSocketCloseEvent) => void;\n  /**\n   * @deprecated Use `onerror` or `addEventListener(\"error\", ...)`.\n   */\n  onError?: (error: string) => void;\n}\n\nexport type SessionWebSocketOptions = Omit<WebSocketOptions, \"browser\" | \"os\" | \"proxy\" | \"emulation\">;\n\nexport interface LegacySessionWebSocketOptions extends SessionWebSocketOptions {\n  /**\n   * @deprecated Use `session.websocket(url, options)`.\n   */\n  url: string;\n  /**\n   * @deprecated Use `onmessage` or `addEventListener(\"message\", ...)`.\n   */\n  onMessage?: (data: string | Buffer) => void;\n  /**\n   * @deprecated Use `onclose` or `addEventListener(\"close\", ...)`.\n   */\n  onClose?: (event: WebSocketCloseEvent) => void;\n  /**\n   * @deprecated Use `onerror` or `addEventListener(\"error\", ...)`.\n   */\n  onError?: (error: string) => void;\n}\n\n/**\n * Internal WebSocket connection object returned from the native Rust binding.\n * This interface contains the connection ID used to reference the WebSocket\n * in subsequent operations like sending messages or closing the connection.\n *\n * @internal\n */\nexport interface NativeWebSocketConnection {\n  /**\n   * Unique identifier for this WebSocket connection.\n   * Used internally to track and manage the connection.\n   * @internal\n   */\n  _id: number;\n\n  /**\n   * Selected subprotocol returned by the server, when present.\n   * @internal\n   */\n  protocol?: string;\n\n  /**\n   * Negotiated extension string returned by the server, when present.\n   * @internal\n   */\n  extensions?: string;\n}\n\n/**\n * Error thrown when a request fails. This can occur due to network errors,\n * timeouts, invalid URLs, or other request-related issues.\n *\n * @example\n * ```typescript\n * try {\n *   const response = await fetch('https://api.example.com');\n * } catch (error) {\n *   if (error instanceof RequestError) {\n *     console.error('Request failed:', error.message);\n *   }\n * }\n * ```\n */\nexport class RequestError extends TypeError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"RequestError\";\n  }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { STATUS_CODES } from \"node:http\";\nimport { Readable } from \"node:stream\";\nimport { ReadableStream } from \"node:stream/web\";\nimport { nativeRequire as require } from \"./native-require.js\";\nimport type {\n  AlpnProtocol,\n  AlpsProtocol,\n  BodyInit,\n  BrowserProfile,\n  CookieMode,\n  CreateSessionOptions,\n  CreateTransportOptions,\n  CustomEmulationOptions,\n  CustomHttp1Options,\n  CustomHttp2Options,\n  CustomTlsOptions,\n  EmulationOS,\n  HeadersInit,\n  HeaderTuple,\n  Http2ExperimentalSetting,\n  Http2Priority,\n  Http2PseudoHeaderId,\n  Http2SettingId,\n  Http2StreamDependency,\n  LegacySessionWebSocketOptions,\n  LegacyWebSocketOptions,\n  NativeResponse,\n  NativeWebSocketConnection,\n  RequestDiagnostics,\n  RequestEvent,\n  RequestOptions,\n  SessionCookie,\n  SessionHandle,\n  SessionWebSocketOptions,\n  TlsVersion,\n  TrustStoreMode,\n  WebSocketBinaryType,\n  WebSocketCloseEvent,\n  WebSocketErrorEvent,\n  WebSocketMessageEvent,\n  WebSocketOpenEvent,\n  WebSocketOptions,\n  RequestInit as WreqRequestInit,\n} from \"./types.js\";\nimport { RequestError } from \"./types.js\";\n\ninterface NativeWebSocketCloseEvent {\n  code: number;\n  reason: string;\n}\n\ninterface NativeWebSocketCloseOptions {\n  code?: number;\n  reason?: string;\n}\n\ninterface NativeWebSocketOptions {\n  url: string;\n  browser?: BrowserProfile;\n  os?: EmulationOS;\n  emulationJson?: string;\n  headers: HeaderTuple[];\n  protocols?: string[];\n  proxy?: string;\n  maxFrameSize?: number;\n  maxMessageSize?: number;\n  onMessage: (data: string | Buffer) => void;\n  onClose?: (event: NativeWebSocketCloseEvent) => void;\n  onError?: (error: string) => void;\n}\n\ninterface NativeWebSocketSessionOptions {\n  url: string;\n  sessionId: string;\n  transportId: string;\n  headers: HeaderTuple[];\n  protocols?: string[];\n  maxFrameSize?: number;\n  maxMessageSize?: number;\n  onMessage: (data: string | Buffer) => void;\n  onClose?: (event: NativeWebSocketCloseEvent) => void;\n  onError?: (error: string) => void;\n}\n\ninterface NativeSessionOptions {\n  sessionId: string;\n}\n\ninterface NativeTransportOptions {\n  browser?: BrowserProfile;\n  os?: EmulationOS;\n  emulationJson?: string;\n  proxy?: string;\n  insecure?: boolean;\n  trustStore?: TrustStoreMode;\n  poolIdleTimeout?: number;\n  poolMaxIdlePerHost?: number;\n  poolMaxSize?: number;\n  connectTimeout?: number;\n  readTimeout?: number;\n  captureDiagnostics?: boolean;\n}\n\ninterface NativeRequestOptions {\n  url: string;\n  method: string;\n  browser?: BrowserProfile;\n  os?: EmulationOS;\n  emulationJson?: string;\n  headers?: HeaderTuple[];\n  body?: Buffer;\n  proxy?: string;\n  timeout?: number;\n  redirect?: \"follow\" | \"manual\" | \"error\";\n  sessionId: string;\n  ephemeral: boolean;\n  disableDefaultHeaders?: boolean;\n  insecure?: boolean;\n  trustStore?: TrustStoreMode;\n  transportId?: string;\n  compress?: boolean;\n  captureDiagnostics?: boolean;\n  onRequestEvent?: (event: RequestEvent) => void;\n}\n\nlet nativeBinding: {\n  request: (options: NativeRequestOptions, requestId: number, enableCancellation?: boolean) => Promise<NativeResponse>;\n  cancelRequest: (requestId: number) => void;\n  readBodyChunk: (handleId: number) => Promise<Buffer | null>;\n  readBodyAll: (handleId: number) => Promise<Buffer>;\n  cancelBody: (handleId: number) => void;\n  getProfiles: () => string[];\n  websocketConnect: (options: NativeWebSocketOptions) => Promise<NativeWebSocketConnection>;\n  websocketConnectSession: (options: NativeWebSocketSessionOptions) => Promise<NativeWebSocketConnection>;\n  websocketSend: (ws: NativeWebSocketConnection, data: string | Buffer) => Promise<void>;\n  websocketClose: (ws: NativeWebSocketConnection, options?: NativeWebSocketCloseOptions) => Promise<void>;\n  createSession: (options: NativeSessionOptions) => string;\n  clearSession: (sessionId: string) => void;\n  dropSession: (sessionId: string) => void;\n  getCookies: (sessionId: string, url: string) => Record<string, string>;\n  getAllCookies: (sessionId: string) => SessionCookie[];\n  setCookie: (sessionId: string, name: string, value: string, url: string) => void;\n  createTransport: (options: NativeTransportOptions) => string;\n  dropTransport: (transportId: string) => void;\n  getOperatingSystems?: () => string[];\n};\n\nlet cachedProfiles: BrowserProfile[] | undefined;\nlet cachedProfileSet: Set<string> | undefined;\nlet cachedOperatingSystems: EmulationOS[] | undefined;\nlet cachedOperatingSystemSet: Set<string> | undefined;\n\nfunction detectLibc(): \"gnu\" | \"musl\" | undefined {\n  if (process.platform !== \"linux\") {\n    return undefined;\n  }\n\n  const envLibc = process.env.LIBC ?? process.env.npm_config_libc;\n  if (envLibc) {\n    return envLibc.toLowerCase().includes(\"musl\") ? \"musl\" : \"gnu\";\n  }\n\n  try {\n    const report = process.report?.getReport?.() as { header?: { glibcVersionRuntime?: string } } | undefined;\n    const glibcVersion = report?.header?.glibcVersionRuntime;\n\n    if (glibcVersion) {\n      return \"gnu\";\n    }\n\n    return \"musl\";\n  } catch {\n    return \"gnu\";\n  }\n}\n\nfunction loadNativeBinding() {\n  const platform = process.platform;\n  const arch = process.arch;\n  const libc = detectLibc();\n\n  if (platform === \"darwin\" && arch === \"x64\") {\n    try {\n      return require(\"../rust/wreq-js.darwin-x64.node\");\n    } catch {\n      try {\n        return require(\"../rust/wreq-js.node\");\n      } catch {\n        throw new Error(\n          \"Failed to load native module for darwin-x64. \" +\n            \"Tried: ../rust/wreq-js.darwin-x64.node and ../rust/wreq-js.node. \" +\n            \"Make sure the package is installed correctly and the native module is built for your platform.\",\n        );\n      }\n    }\n  }\n\n  if (platform === \"darwin\" && arch === \"arm64\") {\n    try {\n      return require(\"../rust/wreq-js.darwin-arm64.node\");\n    } catch {\n      try {\n        return require(\"../rust/wreq-js.node\");\n      } catch {\n        throw new Error(\n          \"Failed to load native module for darwin-arm64. \" +\n            \"Tried: ../rust/wreq-js.darwin-arm64.node and ../rust/wreq-js.node. \" +\n            \"Make sure the package is installed correctly and the native module is built for your platform.\",\n        );\n      }\n    }\n  }\n\n  if (platform === \"linux\" && arch === \"x64\") {\n    if (libc === \"musl\") {\n      try {\n        return require(\"../rust/wreq-js.linux-x64-musl.node\");\n      } catch {\n        try {\n          return require(\"../rust/wreq-js.node\");\n        } catch {\n          throw new Error(\n            \"Failed to load native module for linux-x64-musl. \" +\n              \"Tried: ../rust/wreq-js.linux-x64-musl.node and ../rust/wreq-js.node. \" +\n              \"Make sure the package is installed correctly and the native module is built for your platform.\",\n          );\n        }\n      }\n    }\n\n    try {\n      return require(\"../rust/wreq-js.linux-x64-gnu.node\");\n    } catch {\n      try {\n        return require(\"../rust/wreq-js.node\");\n      } catch {\n        throw new Error(\n          \"Failed to load native module for linux-x64-gnu. \" +\n            \"Tried: ../rust/wreq-js.linux-x64-gnu.node and ../rust/wreq-js.node. \" +\n            \"Make sure the package is installed correctly and the native module is built for your platform.\",\n        );\n      }\n    }\n  }\n\n  if (platform === \"linux\" && arch === \"arm64\") {\n    if (libc === \"musl\") {\n      try {\n        return require(\"../rust/wreq-js.linux-arm64-musl.node\");\n      } catch {\n        try {\n          return require(\"../rust/wreq-js.node\");\n        } catch {\n          throw new Error(\n            \"Failed to load native module for linux-arm64-musl. \" +\n              \"Tried: ../rust/wreq-js.linux-arm64-musl.node and ../rust/wreq-js.node. \" +\n              \"Make sure the package is installed correctly and the native module is built for your platform.\",\n          );\n        }\n      }\n    }\n\n    try {\n      return require(\"../rust/wreq-js.linux-arm64-gnu.node\");\n    } catch {\n      try {\n        return require(\"../rust/wreq-js.node\");\n      } catch {\n        throw new Error(\n          \"Failed to load native module for linux-arm64-gnu. \" +\n            \"Tried: ../rust/wreq-js.linux-arm64-gnu.node and ../rust/wreq-js.node. \" +\n            \"Make sure the package is installed correctly and the native module is built for your platform.\",\n        );\n      }\n    }\n  }\n\n  if (platform === \"win32\" && arch === \"x64\") {\n    try {\n      return require(\"../rust/wreq-js.win32-x64-msvc.node\");\n    } catch {\n      try {\n        return require(\"../rust/wreq-js.node\");\n      } catch {\n        throw new Error(\n          \"Failed to load native module for win32-x64-msvc. \" +\n            \"Tried: ../rust/wreq-js.win32-x64-msvc.node and ../rust/wreq-js.node. \" +\n            \"Make sure the package is installed correctly and the native module is built for your platform.\",\n        );\n      }\n    }\n  }\n\n  throw new Error(\n    `Unsupported platform: ${platform}-${arch}${libc ? `-${libc}` : \"\"}. ` +\n      `Supported platforms: darwin-x64, darwin-arm64, linux-x64-gnu, linux-x64-musl, ` +\n      `linux-arm64-gnu, linux-arm64-musl, win32-x64-msvc`,\n  );\n}\n\nnativeBinding = loadNativeBinding();\n\nconst websocketFinalizer =\n  typeof FinalizationRegistry === \"function\"\n    ? new FinalizationRegistry<NativeWebSocketConnection>((connection: NativeWebSocketConnection) => {\n        void nativeBinding.websocketClose(connection).catch(() => undefined);\n      })\n    : undefined;\n\ntype NativeBodyHandle = { id: number; released: boolean };\n\nconst bodyHandleFinalizer =\n  typeof FinalizationRegistry === \"function\"\n    ? new FinalizationRegistry<NativeBodyHandle>((handle: NativeBodyHandle) => {\n        if (handle.released) {\n          return;\n        }\n\n        handle.released = true;\n        try {\n          nativeBinding.cancelBody(handle.id);\n        } catch {\n          // Best-effort cleanup; ignore binding-level failures.\n        }\n      })\n    : undefined;\n\nconst DEFAULT_BROWSER: BrowserProfile = \"chrome_142\";\nconst DEFAULT_OS: EmulationOS = \"macos\";\nconst DEFAULT_REQUEST_TIMEOUT_MS = 300_000;\nconst DEFAULT_TRUST_STORE: TrustStoreMode = \"combined\";\nconst SUPPORTED_OSES: readonly EmulationOS[] = [\"windows\", \"macos\", \"linux\", \"android\", \"ios\"];\nconst UTF8_DECODER = new TextDecoder(\"utf-8\");\n\ntype SessionDefaults = {\n  transportMode: ResolvedEmulationMode;\n  proxy?: string;\n  timeout?: number;\n  insecure?: boolean;\n  trustStore?: TrustStoreMode;\n  defaultHeaders?: HeaderTuple[];\n  captureDiagnostics?: boolean;\n  transportId?: string;\n  ownsTransport?: boolean;\n};\n\ntype SessionResolution = {\n  sessionId: string;\n  cookieMode: CookieMode;\n  dropAfterRequest: boolean;\n  defaults?: SessionDefaults;\n};\n\ntype TransportResolution = {\n  transportId?: string;\n  mode?: ResolvedEmulationMode;\n  proxy?: string;\n  insecure?: boolean;\n  trustStore?: TrustStoreMode;\n  captureDiagnostics?: boolean;\n};\n\ntype SerializedCustomEmulation = {\n  tlsOptions?: CustomTlsOptions;\n  http1Options?: CustomHttp1Options;\n  http2Options?: CustomHttp2Options;\n  headers?: HeaderTuple[];\n  origHeaders?: string[];\n};\n\ntype PresetEmulationMode = {\n  kind: \"preset\";\n  browser: BrowserProfile;\n  os: EmulationOS;\n  emulationJson?: string;\n};\n\ntype CustomEmulationMode = {\n  kind: \"custom\";\n  emulationJson: string;\n};\n\ntype ResolvedEmulationMode = PresetEmulationMode | CustomEmulationMode;\n\ntype LegacyWebSocketCallbacks = {\n  onMessage?: (data: string | Buffer) => void;\n  onClose?: (event: WebSocketCloseEvent) => void;\n  onError?: (error: string) => void;\n};\n\ntype WebSocketOpenDispatchMode = \"automatic\" | \"deferred\";\n\ntype InternalWebSocketInit = {\n  readonly _internal: true;\n  url: string;\n  options: WebSocketOptions;\n  openDispatchMode: WebSocketOpenDispatchMode;\n  connect: (callbacks: {\n    onMessage: (data: string | Buffer) => void;\n    onClose: (event: NativeWebSocketCloseEvent) => void;\n    onError: (message: string) => void;\n  }) => Promise<NativeWebSocketConnection>;\n  legacyCallbacks: LegacyWebSocketCallbacks | undefined;\n};\n\n// Persistent sessions need globally-unique IDs; ephemeral ones only need a\n// placeholder that is never looked up again, so a cheap monotonic counter suffices.\nlet ephemeralIdCounter = 0;\nfunction generateEphemeralSessionId(): string {\n  return `_e${++ephemeralIdCounter}`;\n}\n\nfunction generateSessionId(): string {\n  return randomUUID();\n}\n\nfunction normalizeSessionOptions(options?: CreateSessionOptions): { sessionId: string; defaults: SessionDefaults } {\n  const sessionId = options?.sessionId ?? generateSessionId();\n  const defaults: SessionDefaults = {\n    transportMode: resolveEmulationMode(options?.browser, options?.os, options?.emulation),\n    trustStore: DEFAULT_TRUST_STORE,\n  };\n\n  if (options?.proxy !== undefined) {\n    defaults.proxy = options.proxy;\n  }\n\n  if (options?.timeout !== undefined) {\n    validateTimeout(options.timeout);\n    defaults.timeout = options.timeout;\n  }\n\n  if (options?.insecure !== undefined) {\n    defaults.insecure = options.insecure;\n  }\n\n  if (options?.trustStore !== undefined) {\n    validateTrustStore(options.trustStore);\n    defaults.trustStore = options.trustStore;\n  }\n\n  if (options?.defaultHeaders !== undefined) {\n    defaults.defaultHeaders = headersToTuples(options.defaultHeaders);\n  }\n\n  if (options?.captureDiagnostics !== undefined) {\n    defaults.captureDiagnostics = options.captureDiagnostics;\n  }\n\n  return { sessionId, defaults };\n}\n\ntype HeaderStoreEntry = {\n  name: string;\n  values: string[];\n};\n\nfunction isIterable<T>(value: unknown): value is Iterable<T> {\n  return Boolean(value) && typeof (value as Iterable<T>)[Symbol.iterator] === \"function\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n\n  const proto = Object.getPrototypeOf(value);\n  return proto === Object.prototype || proto === null;\n}\n\nfunction coerceHeaderValue(value: unknown): string {\n  return String(value);\n}\n\nexport class Headers implements Iterable<[string, string]> {\n  private readonly store = new Map<string, HeaderStoreEntry>();\n\n  constructor(init?: HeadersInit) {\n    if (init) {\n      this.applyInit(init);\n    }\n  }\n\n  private applyInit(init: HeadersInit) {\n    if (init instanceof Headers) {\n      for (const [name, value] of init) {\n        this.append(name, value);\n      }\n      return;\n    }\n\n    if (Array.isArray(init) || isIterable<[string, string]>(init)) {\n      for (const tuple of init as Iterable<[string, string]>) {\n        if (!tuple) {\n          continue;\n        }\n        const [name, value] = tuple;\n        this.append(name, value);\n      }\n      return;\n    }\n\n    if (isPlainObject(init)) {\n      for (const [name, value] of Object.entries(init)) {\n        if (value === undefined || value === null) {\n          continue;\n        }\n        this.set(name, coerceHeaderValue(value));\n      }\n    }\n  }\n\n  private normalizeName(name: string): { key: string; display: string } {\n    if (typeof name !== \"string\") {\n      throw new TypeError(\"Header name must be a string\");\n    }\n    const trimmed = name.trim();\n    if (!trimmed) {\n      throw new TypeError(\"Header name must not be empty\");\n    }\n    return { key: trimmed.toLowerCase(), display: trimmed };\n  }\n\n  private assertValue(value: unknown): string {\n    if (value === undefined || value === null) {\n      throw new TypeError(\"Header value must not be null or undefined\");\n    }\n\n    return coerceHeaderValue(value);\n  }\n\n  append(name: string, value: unknown): void {\n    const normalized = this.normalizeName(name);\n    const existing = this.store.get(normalized.key);\n    const coercedValue = this.assertValue(value);\n\n    if (existing) {\n      existing.values.push(coercedValue);\n      return;\n    }\n\n    this.store.set(normalized.key, {\n      name: normalized.display,\n      values: [coercedValue],\n    });\n  }\n\n  set(name: string, value: unknown): void {\n    const normalized = this.normalizeName(name);\n    const coercedValue = this.assertValue(value);\n\n    this.store.set(normalized.key, {\n      name: normalized.display,\n      values: [coercedValue],\n    });\n  }\n\n  get(name: string): string | null {\n    const normalized = this.normalizeName(name);\n    const entry = this.store.get(normalized.key);\n    return entry ? entry.values.join(\", \") : null;\n  }\n\n  has(name: string): boolean {\n    const normalized = this.normalizeName(name);\n    return this.store.has(normalized.key);\n  }\n\n  delete(name: string): void {\n    const normalized = this.normalizeName(name);\n    this.store.delete(normalized.key);\n  }\n\n  entries(): IterableIterator<[string, string]> {\n    return this[Symbol.iterator]();\n  }\n\n  *keys(): IterableIterator<string> {\n    for (const [name] of this) {\n      yield name;\n    }\n  }\n\n  *values(): IterableIterator<string> {\n    for (const [, value] of this) {\n      yield value;\n    }\n  }\n\n  forEach(callback: (value: string, name: string, parent: Headers) => void, thisArg?: unknown): void {\n    for (const [name, value] of this) {\n      callback.call(thisArg, value, name, this);\n    }\n  }\n\n  [Symbol.iterator](): IterableIterator<[string, string]> {\n    const generator = function* (store: Map<string, HeaderStoreEntry>) {\n      for (const entry of store.values()) {\n        yield [entry.name, entry.values.join(\", \")] as [string, string];\n      }\n    };\n\n    return generator(this.store);\n  }\n\n  toObject(): Record<string, string> {\n    const result: Record<string, string> = {};\n\n    for (const [name, value] of this) {\n      result[name] = value;\n    }\n\n    return result;\n  }\n\n  toTuples(): HeaderTuple[] {\n    const result: HeaderTuple[] = [];\n\n    for (const [name, value] of this) {\n      result.push([name, value]);\n    }\n\n    return result;\n  }\n}\n\nfunction headersToTuples(init: HeadersInit): HeaderTuple[] {\n  return new Headers(init).toTuples();\n}\n\nfunction hasHeaderName(tuples: HeaderTuple[] | undefined, name: string): boolean {\n  if (!tuples) {\n    return false;\n  }\n\n  const target = name.toLowerCase();\n  for (const [headerName] of tuples) {\n    if (headerName.toLowerCase() === target) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction hasWebSocketProtocolHeader(headers: HeadersInit | undefined): boolean {\n  const protocolHeaderName = \"Sec-WebSocket-Protocol\";\n  if (!headers) {\n    return false;\n  }\n\n  return hasHeaderName(headersToTuples(headers), protocolHeaderName);\n}\n\nfunction assertNoManualWebSocketProtocolHeader(headers: HeadersInit | undefined): void {\n  if (hasWebSocketProtocolHeader(headers)) {\n    throw new RequestError(\"Do not set `Sec-WebSocket-Protocol` header manually; use the `protocols` option instead.\");\n  }\n}\n\nfunction normalizeWebSocketProtocolList(protocols?: string | string[]): string[] | undefined {\n  if (protocols === undefined) {\n    return undefined;\n  }\n\n  return typeof protocols === \"string\" ? [protocols] : [...protocols];\n}\n\nfunction mergeHeaderTuples(\n  defaults: HeaderTuple[] | undefined,\n  overrides: HeadersInit | undefined,\n): HeaderTuple[] | undefined {\n  if (!defaults) {\n    return overrides === undefined ? undefined : headersToTuples(overrides);\n  }\n\n  if (overrides === undefined) {\n    return defaults;\n  }\n\n  const overrideTuples = headersToTuples(overrides);\n  if (overrideTuples.length === 0) {\n    return defaults;\n  }\n\n  const overrideKeys = new Set<string>();\n  for (const tuple of overrideTuples) {\n    overrideKeys.add(tuple[0].toLowerCase());\n  }\n  const merged: HeaderTuple[] = [];\n  for (const tuple of defaults) {\n    if (!overrideKeys.has(tuple[0].toLowerCase())) {\n      merged.push(tuple);\n    }\n  }\n  for (const tuple of overrideTuples) {\n    merged.push(tuple);\n  }\n  return merged;\n}\n\ntype ResponseType = \"basic\" | \"cors\" | \"error\" | \"opaque\" | \"opaqueredirect\";\n\nfunction cloneNativeResponse(payload: NativeResponse): NativeResponse {\n  return {\n    status: payload.status,\n    headers: payload.headers.map(([name, value]): HeaderTuple => [name, value]),\n    bodyHandle: payload.bodyHandle,\n    bodyBytes: payload.bodyBytes,\n    contentLength: payload.contentLength,\n    cookies: payload.cookies.map(([name, value]): HeaderTuple => [name, value]),\n    url: payload.url,\n    diagnostics: payload.diagnostics ? { ...payload.diagnostics } : null,\n  };\n}\n\nfunction releaseNativeBody(handle: NativeBodyHandle): void {\n  if (handle.released) {\n    return;\n  }\n\n  handle.released = true;\n\n  try {\n    nativeBinding.cancelBody(handle.id);\n  } catch {\n    // Best-effort cleanup; ignore binding errors.\n  }\n\n  bodyHandleFinalizer?.unregister(handle);\n}\n\nfunction markNativeBodyReleased(handle: NativeBodyHandle): void {\n  if (handle.released) {\n    return;\n  }\n\n  handle.released = true;\n  bodyHandleFinalizer?.unregister(handle);\n}\n\nfunction createNativeBodyStream(handle: NativeBodyHandle): ReadableStream<Uint8Array> {\n  const stream = new ReadableStream<Uint8Array>({\n    async pull(controller) {\n      try {\n        const chunk = await nativeBinding.readBodyChunk(handle.id);\n\n        if (chunk === null) {\n          releaseNativeBody(handle);\n          controller.close();\n          return;\n        }\n\n        controller.enqueue(chunk);\n      } catch (error) {\n        releaseNativeBody(handle);\n        controller.error(error);\n      }\n    },\n    cancel() {\n      releaseNativeBody(handle);\n    },\n  });\n\n  bodyHandleFinalizer?.register(stream, handle, handle);\n\n  return stream;\n}\n\nfunction wrapBodyStream(source: ReadableStream<Uint8Array>, onFirstUse: () => void): ReadableStream<Uint8Array> {\n  let started = false;\n  let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n\n  return new ReadableStream<Uint8Array>({\n    async pull(controller) {\n      if (!started) {\n        started = true;\n        onFirstUse();\n      }\n\n      if (!reader) {\n        reader = source.getReader();\n      }\n\n      try {\n        const { done, value } = await reader.read();\n\n        if (done) {\n          controller.close();\n          return;\n        }\n\n        controller.enqueue(value);\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    cancel(reason) {\n      if (!reader) {\n        return source.cancel(reason);\n      }\n      return reader.cancel(reason);\n    },\n  });\n}\n\nexport class Response {\n  readonly status: number;\n  readonly ok: boolean;\n  readonly contentLength: number | null;\n  readonly url: string;\n  readonly diagnostics: RequestDiagnostics | null;\n  readonly type: ResponseType = \"basic\";\n  bodyUsed = false;\n\n  private readonly payload: NativeResponse;\n  private readonly requestUrl: string;\n  private redirectedMemo: boolean | undefined;\n  private readonly headersInit: HeaderTuple[];\n  private headersInstance: Headers | null;\n  private readonly cookiesInit: HeaderTuple[];\n  private cookiesRecord: Record<string, string | string[]> | null;\n  private inlineBody: Buffer | null;\n  private bodySource: ReadableStream<Uint8Array> | null;\n  private bodyStream: ReadableStream<Uint8Array> | null | undefined;\n  // Track if we can use the fast path (native handle not yet wrapped in a stream)\n  private nativeHandleAvailable: boolean;\n  private nativeHandle: NativeBodyHandle | null;\n\n  constructor(payload: NativeResponse, requestUrl: string, bodySource?: ReadableStream<Uint8Array> | null) {\n    this.payload = payload;\n    this.requestUrl = requestUrl;\n    this.status = this.payload.status;\n    this.ok = this.status >= 200 && this.status < 300;\n    this.headersInit = this.payload.headers;\n    this.headersInstance = null;\n    this.url = this.payload.url;\n    this.diagnostics = this.payload.diagnostics ?? null;\n    this.cookiesInit = this.payload.cookies;\n    this.cookiesRecord = null;\n    this.contentLength = this.payload.contentLength ?? null;\n    this.inlineBody = this.payload.bodyBytes ?? null;\n    this.nativeHandle = null;\n\n    if (typeof bodySource !== \"undefined\") {\n      // External stream provided (e.g., from clone) - no fast path\n      this.bodySource = bodySource;\n      this.nativeHandleAvailable = false;\n    } else if (this.inlineBody !== null) {\n      // Inline body provided by native layer\n      this.bodySource = null;\n      this.nativeHandleAvailable = false;\n    } else if (this.payload.bodyHandle !== null) {\n      // Defer stream creation - we might use fast path instead\n      this.bodySource = null;\n      this.nativeHandleAvailable = true;\n      this.nativeHandle = { id: this.payload.bodyHandle, released: false };\n      bodyHandleFinalizer?.register(this, this.nativeHandle, this.nativeHandle);\n    } else {\n      this.bodySource = null;\n      this.nativeHandleAvailable = false;\n    }\n\n    this.bodyStream = undefined;\n  }\n\n  get redirected(): boolean {\n    if (this.redirectedMemo !== undefined) {\n      return this.redirectedMemo;\n    }\n\n    if (this.url === this.requestUrl) {\n      this.redirectedMemo = false;\n      return false;\n    }\n\n    const normalizedRequestUrl = normalizeUrlForComparison(this.requestUrl);\n    this.redirectedMemo = normalizedRequestUrl ? this.url !== normalizedRequestUrl : true;\n    return this.redirectedMemo;\n  }\n\n  get statusText(): string {\n    return STATUS_CODES[this.status] ?? \"\";\n  }\n\n  get headers(): Headers {\n    if (!this.headersInstance) {\n      this.headersInstance = new Headers(this.headersInit);\n    }\n    return this.headersInstance;\n  }\n\n  get cookies(): Record<string, string | string[]> {\n    if (!this.cookiesRecord) {\n      const record: Record<string, string | string[]> = Object.create(null);\n      for (const [name, value] of this.cookiesInit) {\n        const existing = record[name];\n        if (existing === undefined) {\n          record[name] = value;\n        } else if (Array.isArray(existing)) {\n          existing.push(value);\n        } else {\n          record[name] = [existing, value];\n        }\n      }\n      this.cookiesRecord = record;\n    }\n\n    return this.cookiesRecord;\n  }\n\n  get body(): ReadableStream<Uint8Array> | null {\n    if (this.inlineBody && this.bodySource === null) {\n      const bytes = this.inlineBody;\n      this.inlineBody = null;\n      this.bodySource = new ReadableStream<Uint8Array>({\n        start(controller) {\n          controller.enqueue(bytes);\n          controller.close();\n        },\n      });\n    }\n\n    if (this.inlineBody === null && this.payload.bodyHandle === null && this.bodySource === null) {\n      return null;\n    }\n\n    // Lazily create the stream if needed (disables fast path)\n    if (this.bodySource === null && this.nativeHandleAvailable && this.payload.bodyHandle !== null) {\n      if (this.nativeHandle) {\n        bodyHandleFinalizer?.unregister(this.nativeHandle);\n      }\n      const handle = this.nativeHandle ?? { id: this.payload.bodyHandle, released: false };\n      this.nativeHandle = handle;\n      this.bodySource = createNativeBodyStream(handle);\n      this.nativeHandleAvailable = false;\n    }\n\n    if (this.bodySource === null) {\n      return null;\n    }\n\n    if (this.bodyStream === undefined) {\n      this.bodyStream = wrapBodyStream(this.bodySource, () => {\n        this.bodyUsed = true;\n      });\n    }\n\n    return this.bodyStream;\n  }\n\n  async json<T = unknown>(): Promise<T> {\n    const text = await this.text();\n    return JSON.parse(text) as T;\n  }\n\n  async arrayBuffer(): Promise<ArrayBuffer> {\n    const bytes = await this.consumeBody();\n    const { buffer, byteOffset, byteLength } = bytes;\n\n    if (buffer instanceof ArrayBuffer) {\n      // Zero-copy when the Buffer owns the entire ArrayBuffer.\n      if (byteOffset === 0 && byteLength === buffer.byteLength) {\n        return buffer;\n      }\n      return buffer.slice(byteOffset, byteOffset + byteLength);\n    }\n\n    const view = new Uint8Array(byteLength);\n    view.set(bytes);\n    return view.buffer;\n  }\n\n  async text(): Promise<string> {\n    const bytes = await this.consumeBody();\n    return UTF8_DECODER.decode(bytes);\n  }\n\n  async blob(): Promise<Blob> {\n    const bytes = await this.consumeBody();\n    const contentType = this.headers.get(\"content-type\") ?? \"\";\n    return new Blob([bytes], contentType ? { type: contentType } : undefined);\n  }\n\n  async formData(): Promise<FormData> {\n    const bytes = await this.consumeBody();\n    const contentType = this.headers.get(\"content-type\");\n    const response = new globalThis.Response(\n      bytes,\n      contentType ? { headers: { \"content-type\": contentType } } : undefined,\n    );\n    return response.formData();\n  }\n\n  readable(): Readable {\n    this.assertBodyAvailable();\n    this.bodyUsed = true;\n\n    const stream = this.body;\n\n    if (stream === null) {\n      return Readable.from([]);\n    }\n\n    return Readable.fromWeb(stream as ReadableStream);\n  }\n\n  clone(): Response {\n    if (this.bodyUsed) {\n      throw new TypeError(\"Cannot clone a Response whose body is already used\");\n    }\n\n    // If we still have the native handle (fast path), we need to create the stream first\n    if (this.nativeHandleAvailable && this.payload.bodyHandle !== null) {\n      if (this.nativeHandle) {\n        bodyHandleFinalizer?.unregister(this.nativeHandle);\n      }\n      const handle = this.nativeHandle ?? { id: this.payload.bodyHandle, released: false };\n      this.nativeHandle = handle;\n      this.bodySource = createNativeBodyStream(handle);\n      this.nativeHandleAvailable = false;\n    }\n\n    if (this.bodySource === null) {\n      return new Response(cloneNativeResponse(this.payload), this.requestUrl, null);\n    }\n\n    const [branchA, branchB] = this.bodySource.tee();\n\n    // Reset cached stream so the original response uses the new branch lazily.\n    this.bodySource = branchA;\n    this.bodyStream = undefined;\n\n    return new Response(cloneNativeResponse(this.payload), this.requestUrl, branchB);\n  }\n\n  private assertBodyAvailable(): void {\n    if (this.bodyUsed) {\n      throw new TypeError(\"Response body is already used\");\n    }\n  }\n\n  private async consumeBody(): Promise<Buffer> {\n    this.assertBodyAvailable();\n    this.bodyUsed = true;\n\n    if (this.inlineBody) {\n      const bytes = this.inlineBody;\n      this.inlineBody = null;\n      return bytes;\n    }\n\n    // Fast path: if native handle is still available, read entire body in one Rust call\n    if (this.nativeHandleAvailable && this.payload.bodyHandle !== null) {\n      this.nativeHandleAvailable = false;\n      try {\n        return await nativeBinding.readBodyAll(this.payload.bodyHandle);\n      } catch (error) {\n        // Handle already consumed or error\n        if (String(error).includes(\"Body handle\") && String(error).includes(\"not found\")) {\n          return Buffer.alloc(0);\n        }\n        throw error;\n      } finally {\n        if (this.nativeHandle) {\n          markNativeBodyReleased(this.nativeHandle);\n        }\n      }\n    }\n\n    // Slow path: stream was accessed, use streaming consumption\n    const stream = this.body;\n    if (!stream) {\n      return Buffer.alloc(0);\n    }\n\n    const reader = stream.getReader();\n    const chunks: Buffer[] = [];\n\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) {\n          break;\n        }\n\n        if (value && value.byteLength > 0) {\n          if (Buffer.isBuffer(value)) {\n            chunks.push(value);\n          } else {\n            chunks.push(Buffer.from(value.buffer, value.byteOffset, value.byteLength));\n          }\n        }\n      }\n    } finally {\n      // reader.releaseLock() is unnecessary here; letting the stream close naturally\n      // ensures the underlying native handle is released.\n    }\n\n    return chunks.length === 0 ? Buffer.alloc(0) : Buffer.concat(chunks);\n  }\n}\n\nexport class Transport {\n  readonly id: string;\n  private disposed = false;\n\n  constructor(id: string) {\n    this.id = id;\n  }\n\n  get closed(): boolean {\n    return this.disposed;\n  }\n\n  async close(): Promise<void> {\n    if (this.disposed) {\n      return;\n    }\n\n    this.disposed = true;\n\n    try {\n      nativeBinding.dropTransport(this.id);\n    } catch (error) {\n      throw new RequestError(String(error));\n    }\n  }\n}\n\nexport class Session implements SessionHandle {\n  readonly id: string;\n  private disposed = false;\n  private readonly defaults: SessionDefaults;\n\n  constructor(id: string, defaults: SessionDefaults) {\n    this.id = id;\n    this.defaults = defaults;\n  }\n\n  get closed(): boolean {\n    return this.disposed;\n  }\n\n  private ensureActive(): void {\n    if (this.disposed) {\n      throw new RequestError(\"Session has been closed\");\n    }\n  }\n\n  /** @internal */\n  getDefaults(): SessionDefaults {\n    const snapshot: SessionDefaults = { ...this.defaults };\n    if (this.defaults.defaultHeaders) {\n      snapshot.defaultHeaders = [...this.defaults.defaultHeaders];\n    }\n    return snapshot;\n  }\n\n  /** @internal */\n  _defaultsRef(): SessionDefaults {\n    return this.defaults;\n  }\n\n  async fetch(input: string | URL | Request, init?: WreqRequestInit): Promise<Response> {\n    this.ensureActive();\n    const config: WreqRequestInit = init ? { ...init, session: this } : { session: this };\n    return fetch(input, config);\n  }\n\n  async clearCookies(): Promise<void> {\n    this.ensureActive();\n    try {\n      nativeBinding.clearSession(this.id);\n    } catch (error) {\n      throw new RequestError(String(error));\n    }\n  }\n\n  getCookies(url: string | URL): Record<string, string> {\n    this.ensureActive();\n    try {\n      return nativeBinding.getCookies(this.id, String(url));\n    } catch (error) {\n      throw new RequestError(String(error));\n    }\n  }\n\n  getAllCookies(): SessionCookie[] {\n    this.ensureActive();\n    try {\n      return nativeBinding.getAllCookies(this.id);\n    } catch (error) {\n      throw new RequestError(String(error));\n    }\n  }\n\n  setCookie(name: string, value: string, url: string | URL): void {\n    this.ensureActive();\n    try {\n      nativeBinding.setCookie(this.id, name, value, String(url));\n    } catch (error) {\n      throw new RequestError(String(error));\n    }\n  }\n\n  /**\n   * Create a WebSocket connection that shares this session's cookies and TLS configuration.\n   *\n   * @param urlOrOptions - WebSocket URL or legacy options object\n   * @param options - Session WebSocket options\n   * @returns Promise that resolves to the WebSocket instance\n   */\n  async websocket(url: string | URL, options?: SessionWebSocketOptions): Promise<WebSocket>;\n  async websocket(options: LegacySessionWebSocketOptions): Promise<WebSocket>;\n  async websocket(\n    urlOrOptions: string | URL | LegacySessionWebSocketOptions,\n    options?: SessionWebSocketOptions,\n  ): Promise<WebSocket> {\n    this.ensureActive();\n\n    const normalized = normalizeSessionWebSocketArgs(urlOrOptions, options);\n    validateWebSocketProtocols(normalized.options.protocols);\n    assertNoManualWebSocketProtocolHeader(normalized.options.headers);\n    const protocols = normalizeWebSocketProtocolList(normalized.options.protocols);\n\n    const transportId = this.defaults.transportId;\n    if (!transportId) {\n      throw new RequestError(\n        \"Session has no transport. Create the session with browser/os options or pass a transport to use session.websocket().\",\n      );\n    }\n\n    return WebSocket._connectWithInit({\n      _internal: true,\n      url: normalized.url,\n      options: normalized.options,\n      openDispatchMode: \"deferred\",\n      connect: (callbacks) =>\n        nativeBinding.websocketConnectSession({\n          url: normalized.url,\n          sessionId: this.id,\n          transportId,\n          headers: headersToTuples(normalized.options.headers ?? {}),\n          ...(protocols && protocols.length > 0 && { protocols }),\n          ...(normalized.options.maxFrameSize !== undefined && { maxFrameSize: normalized.options.maxFrameSize }),\n          ...(normalized.options.maxMessageSize !== undefined && {\n            maxMessageSize: normalized.options.maxMessageSize,\n          }),\n          onMessage: callbacks.onMessage,\n          onClose: callbacks.onClose,\n          onError: callbacks.onError,\n        }),\n      legacyCallbacks: normalized.legacyCallbacks,\n    });\n  }\n\n  async close(): Promise<void> {\n    if (this.disposed) {\n      return;\n    }\n\n    this.disposed = true;\n    const transportId = this.defaults.transportId;\n    const ownsTransport = this.defaults.ownsTransport;\n\n    try {\n      nativeBinding.dropSession(this.id);\n    } catch (error) {\n      if (!ownsTransport || !transportId) {\n        throw new RequestError(String(error));\n      }\n      // Fall through to transport cleanup and surface the original error after.\n      const originalError = error;\n      try {\n        nativeBinding.dropTransport(transportId);\n      } catch {\n        // Ignore transport cleanup errors when a session drop error already occurred.\n      }\n      throw new RequestError(String(originalError));\n    }\n\n    if (ownsTransport && transportId) {\n      try {\n        nativeBinding.dropTransport(transportId);\n      } catch (error) {\n        throw new RequestError(String(error));\n      }\n    }\n  }\n}\n\nfunction resolveSessionContext(config: WreqRequestInit): SessionResolution {\n  const requestedMode = config.cookieMode ?? \"ephemeral\";\n  const sessionCandidate = config.session;\n  const providedSessionId = typeof config.sessionId === \"string\" ? config.sessionId.trim() : undefined;\n\n  if (sessionCandidate && providedSessionId) {\n    throw new RequestError(\"Provide either `session` or `sessionId`, not both.\");\n  }\n\n  if (sessionCandidate) {\n    if (!(sessionCandidate instanceof Session)) {\n      throw new RequestError(\"`session` must be created via createSession()\");\n    }\n\n    if (sessionCandidate.closed) {\n      throw new RequestError(\"Session has been closed\");\n    }\n\n    return {\n      sessionId: sessionCandidate.id,\n      cookieMode: \"session\",\n      dropAfterRequest: false,\n      defaults: sessionCandidate._defaultsRef(),\n    };\n  }\n\n  if (providedSessionId) {\n    if (!providedSessionId) {\n      throw new RequestError(\"sessionId must not be empty\");\n    }\n\n    if (requestedMode === \"ephemeral\") {\n      throw new RequestError(\"cookieMode 'ephemeral' cannot be combined with sessionId\");\n    }\n\n    return {\n      sessionId: providedSessionId,\n      cookieMode: \"session\",\n      dropAfterRequest: false,\n    };\n  }\n\n  if (requestedMode === \"session\") {\n    throw new RequestError(\"cookieMode 'session' requires a session or sessionId\");\n  }\n\n  return {\n    sessionId: generateEphemeralSessionId(),\n    cookieMode: \"ephemeral\",\n    dropAfterRequest: true,\n  };\n}\n\nfunction resolveTransportContext(config: WreqRequestInit, sessionDefaults?: SessionDefaults): TransportResolution {\n  if (config.transport !== undefined) {\n    if (!(config.transport instanceof Transport)) {\n      throw new RequestError(\"`transport` must be created via createTransport()\");\n    }\n\n    if (config.transport.closed) {\n      throw new RequestError(\"Transport has been closed\");\n    }\n\n    const hasProxy = config.proxy !== undefined;\n    if (\n      config.browser !== undefined ||\n      config.os !== undefined ||\n      config.emulation !== undefined ||\n      hasProxy ||\n      config.insecure !== undefined ||\n      config.trustStore !== undefined\n    ) {\n      throw new RequestError(\n        \"`transport` cannot be combined with browser/os/emulation/proxy/insecure/trustStore options\",\n      );\n    }\n\n    return {\n      transportId: config.transport.id,\n      ...(config.captureDiagnostics !== undefined && {\n        captureDiagnostics: config.captureDiagnostics,\n      }),\n    };\n  }\n\n  if (sessionDefaults?.transportId) {\n    if (config.emulation !== undefined) {\n      throw new RequestError(\"Session emulation cannot be changed after creation\");\n    }\n\n    if (config.browser !== undefined) {\n      validateBrowserProfile(config.browser);\n      const lockedBrowser =\n        sessionDefaults.transportMode.kind === \"custom\" ? undefined : sessionDefaults.transportMode.browser;\n      if (config.browser !== lockedBrowser) {\n        throw new RequestError(\"Session browser cannot be changed after creation\");\n      }\n    }\n\n    if (config.os !== undefined) {\n      validateOperatingSystem(config.os);\n      const lockedOs = sessionDefaults.transportMode.kind === \"custom\" ? undefined : sessionDefaults.transportMode.os;\n      if (config.os !== lockedOs) {\n        throw new RequestError(\"Session operating system cannot be changed after creation\");\n      }\n    }\n\n    const initHasProxy = Object.hasOwn(config as object, \"proxy\");\n    const requestedProxy = initHasProxy ? (config as { proxy?: string | null }).proxy : undefined;\n    if (initHasProxy && requestedProxy !== undefined && (sessionDefaults.proxy ?? null) !== (requestedProxy ?? null)) {\n      throw new RequestError(\"Session proxy cannot be changed after creation\");\n    }\n\n    if (config.insecure !== undefined) {\n      const lockedInsecure = sessionDefaults.insecure ?? false;\n      if (config.insecure !== lockedInsecure) {\n        throw new RequestError(\"Session insecure setting cannot be changed after creation\");\n      }\n    }\n\n    if (config.trustStore !== undefined) {\n      const lockedTrustStore = sessionDefaults.trustStore ?? DEFAULT_TRUST_STORE;\n      if (config.trustStore !== lockedTrustStore) {\n        throw new RequestError(\"Session trustStore setting cannot be changed after creation\");\n      }\n    }\n\n    const captureDiagnostics = config.captureDiagnostics ?? sessionDefaults.captureDiagnostics;\n    return {\n      transportId: sessionDefaults.transportId,\n      ...(captureDiagnostics !== undefined && { captureDiagnostics }),\n    };\n  }\n\n  const resolved: TransportResolution = {\n    mode: resolveEmulationMode(config.browser, config.os, config.emulation),\n  };\n  if (config.proxy !== undefined) {\n    resolved.proxy = config.proxy;\n  }\n  if (config.insecure !== undefined) {\n    resolved.insecure = config.insecure;\n  }\n  resolved.trustStore = config.trustStore ?? DEFAULT_TRUST_STORE;\n  if (config.captureDiagnostics !== undefined) {\n    resolved.captureDiagnostics = config.captureDiagnostics;\n  }\n  return resolved;\n}\n\ninterface AbortHandler {\n  promise: Promise<never>;\n  cleanup: () => void;\n}\n\nfunction createAbortError(reason?: unknown): Error {\n  const fallbackMessage = typeof reason === \"string\" ? reason : \"The operation was aborted\";\n\n  if (typeof DOMException !== \"undefined\" && reason instanceof DOMException) {\n    return reason.name === \"AbortError\" ? reason : new DOMException(reason.message || fallbackMessage, \"AbortError\");\n  }\n\n  if (reason instanceof Error) {\n    const error = new Error(reason.message);\n    error.name = \"AbortError\";\n    error.cause = reason;\n    return error;\n  }\n\n  if (typeof DOMException !== \"undefined\") {\n    return new DOMException(fallbackMessage, \"AbortError\");\n  }\n\n  const error = new Error(fallbackMessage);\n  error.name = \"AbortError\";\n  return error;\n}\n\nfunction isAbortError(error: unknown): error is Error {\n  return Boolean(error) && typeof (error as Error).name === \"string\" && (error as Error).name === \"AbortError\";\n}\n\n// Request IDs must stay below 2^48 to preserve integer precision across the bridge.\nconst REQUEST_ID_MAX = 2 ** 48;\n// Seed with a monotonic-ish value derived from hrtime to avoid collisions after reloads.\nlet requestIdCounter = Math.trunc(Number(process.hrtime.bigint() % BigInt(REQUEST_ID_MAX - 1))) + 1;\n\nfunction generateRequestId(): number {\n  requestIdCounter += 1;\n  if (requestIdCounter >= REQUEST_ID_MAX) {\n    requestIdCounter = 1;\n  }\n\n  return requestIdCounter;\n}\n\nfunction setupAbort(signal: AbortSignal | null | undefined, cancelNative: () => void): AbortHandler | null {\n  if (!signal) {\n    return null;\n  }\n\n  if (signal.aborted) {\n    cancelNative();\n    throw createAbortError(signal.reason);\n  }\n\n  let onAbortListener: (() => void) | undefined;\n\n  const promise = new Promise<never>((_, reject) => {\n    onAbortListener = () => {\n      cancelNative();\n      reject(createAbortError(signal.reason));\n    };\n\n    signal.addEventListener(\"abort\", onAbortListener, { once: true });\n  });\n\n  const cleanup = () => {\n    if (onAbortListener) {\n      signal.removeEventListener(\"abort\", onAbortListener);\n      onAbortListener = undefined;\n    }\n  };\n\n  return { promise, cleanup };\n}\n\nfunction coerceUrlInput(input: string | URL): string {\n  if (input instanceof URL) {\n    return input.href;\n  }\n\n  if (input.length === 0) {\n    throw new RequestError(\"URL is required\");\n  }\n\n  // Fast path: skip trim when the string has no leading/trailing whitespace.\n  if (input.charCodeAt(0) > 32 && input.charCodeAt(input.length - 1) > 32) {\n    return input;\n  }\n\n  const trimmed = input.trim();\n  if (trimmed.length === 0) {\n    throw new RequestError(\"URL is required\");\n  }\n\n  return trimmed;\n}\n\ntype RequestLike = {\n  url: string;\n  method: string;\n  headers: globalThis.Headers;\n  signal: AbortSignal | null;\n  redirect: string;\n  bodyUsed: boolean;\n  body: ReadableStream<Uint8Array> | null;\n  arrayBuffer(): Promise<ArrayBuffer>;\n};\n\nfunction isRequestLike(input: unknown): input is RequestLike {\n  if (!input || typeof input !== \"object\") {\n    return false;\n  }\n\n  if (typeof Request !== \"undefined\" && input instanceof Request) {\n    return true;\n  }\n\n  const candidate = input as Partial<RequestLike>;\n  return (\n    typeof candidate.url === \"string\" &&\n    typeof candidate.method === \"string\" &&\n    typeof candidate.arrayBuffer === \"function\" &&\n    typeof candidate.redirect === \"string\"\n  );\n}\n\nasync function resolveFetchArgs(\n  input: string | URL | RequestLike,\n  init?: WreqRequestInit,\n): Promise<{\n  url: string;\n  init: WreqRequestInit;\n}> {\n  if (!isRequestLike(input)) {\n    return { url: coerceUrlInput(input), init: init ?? {} };\n  }\n\n  const mergedInit: WreqRequestInit = init ? { ...init } : {};\n\n  if (mergedInit.method === undefined) {\n    mergedInit.method = input.method;\n  }\n  if (mergedInit.headers === undefined) {\n    mergedInit.headers = input.headers as unknown as HeadersInit;\n  }\n  if (\n    mergedInit.redirect === undefined &&\n    (input.redirect === \"follow\" || input.redirect === \"manual\" || input.redirect === \"error\")\n  ) {\n    mergedInit.redirect = input.redirect;\n  }\n  if (mergedInit.signal === undefined) {\n    mergedInit.signal = input.signal;\n  }\n  if (mergedInit.body === undefined && input.body !== null) {\n    if (input.bodyUsed) {\n      throw new TypeError(\"Request body is already used\");\n    }\n    mergedInit.body = Buffer.from(await input.arrayBuffer());\n  }\n\n  return { url: coerceUrlInput(input.url), init: mergedInit };\n}\n\nfunction normalizeUrlForComparison(value: string): string | null {\n  try {\n    return new URL(value).toString();\n  } catch {\n    return null;\n  }\n}\n\nfunction validateRedirectMode(mode?: WreqRequestInit[\"redirect\"]): void {\n  if (mode === undefined || mode === \"follow\" || mode === \"manual\" || mode === \"error\") {\n    return;\n  }\n\n  throw new RequestError(`Redirect mode '${mode}' is not supported`);\n}\n\ntype SerializedBody = {\n  body?: Buffer;\n  contentType?: string;\n};\n\nasync function serializeBody(body?: BodyInit | null): Promise<SerializedBody> {\n  if (body === null || body === undefined) {\n    return {};\n  }\n\n  if (typeof body === \"string\") {\n    return { body: Buffer.from(body, \"utf8\") };\n  }\n\n  if (Buffer.isBuffer(body)) {\n    return { body };\n  }\n\n  if (body instanceof URLSearchParams) {\n    return {\n      body: Buffer.from(body.toString(), \"utf8\"),\n      contentType: \"application/x-www-form-urlencoded;charset=UTF-8\",\n    };\n  }\n\n  if (body instanceof ArrayBuffer) {\n    return { body: Buffer.from(body) };\n  }\n\n  if (ArrayBuffer.isView(body)) {\n    return { body: Buffer.from(body.buffer, body.byteOffset, body.byteLength) };\n  }\n\n  if (typeof Blob !== \"undefined\" && body instanceof Blob) {\n    const buffer = Buffer.from(await body.arrayBuffer());\n    return { body: buffer, ...(body.type ? { contentType: body.type } : {}) };\n  }\n\n  if (typeof FormData !== \"undefined\" && body instanceof FormData) {\n    const encoded = new globalThis.Response(body);\n    const contentType = encoded.headers.get(\"content-type\") ?? undefined;\n    const buffer = Buffer.from(await encoded.arrayBuffer());\n    return { body: buffer, ...(contentType ? { contentType } : {}) };\n  }\n\n  throw new TypeError(\n    \"Unsupported body type; expected string, Buffer, ArrayBuffer, ArrayBufferView, URLSearchParams, Blob, or FormData\",\n  );\n}\n\nfunction ensureMethod(method?: string): string {\n  if (method === undefined || method.length === 0) {\n    return \"GET\";\n  }\n\n  // Fast path: common methods already in canonical form (avoids trim + toUpperCase).\n  switch (method) {\n    case \"GET\":\n    case \"POST\":\n    case \"PUT\":\n    case \"DELETE\":\n    case \"PATCH\":\n    case \"HEAD\":\n    case \"OPTIONS\":\n      return method;\n  }\n\n  const normalized = method.trim().toUpperCase();\n  return normalized.length > 0 ? normalized : \"GET\";\n}\n\nfunction ensureBodyAllowed(method: string, body?: Buffer): void {\n  if (body === undefined) {\n    return;\n  }\n\n  if (method === \"GET\" || method === \"HEAD\") {\n    throw new RequestError(`Request with ${method} method cannot have a body`);\n  }\n}\n\nfunction validateBrowserProfile(browser?: BrowserProfile | string): void {\n  if (browser === undefined) {\n    return;\n  }\n\n  if (typeof browser !== \"string\" || browser.trim().length === 0) {\n    throw new RequestError(\"Browser profile must not be empty\");\n  }\n\n  if (!getProfileSet().has(browser)) {\n    throw new RequestError(`Invalid browser profile: ${browser}. Available profiles: ${getProfiles().join(\", \")}`);\n  }\n}\n\nfunction validateOperatingSystem(os?: EmulationOS | string): void {\n  if (os === undefined) {\n    return;\n  }\n\n  if (typeof os !== \"string\" || os.trim().length === 0) {\n    throw new RequestError(\"Operating system must not be empty\");\n  }\n\n  if (!getOperatingSystemSet().has(os)) {\n    throw new RequestError(`Invalid operating system: ${os}. Available options: ${getOperatingSystems().join(\", \")}`);\n  }\n}\n\nfunction validateTimeout(timeout?: number): void {\n  if (timeout === undefined) {\n    return;\n  }\n\n  if (typeof timeout !== \"number\" || !Number.isFinite(timeout)) {\n    throw new RequestError(\"Timeout must be a finite number\");\n  }\n\n  if (timeout < 0) {\n    throw new RequestError(\"Timeout must be 0 (no timeout) or a positive number\");\n  }\n}\n\nfunction validateTrustStore(trustStore?: TrustStoreMode | string): void {\n  if (trustStore === undefined) {\n    return;\n  }\n\n  if (trustStore !== \"combined\" && trustStore !== \"mozilla\" && trustStore !== \"defaultPaths\") {\n    throw new RequestError(\"trustStore must be one of: combined, mozilla, defaultPaths\");\n  }\n}\n\nfunction validatePositiveNumber(value: number, label: string): void {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    throw new RequestError(`${label} must be a finite number`);\n  }\n\n  if (value <= 0) {\n    throw new RequestError(`${label} must be greater than 0`);\n  }\n}\n\nfunction validateNonNegativeInteger(value: number, label: string): void {\n  if (typeof value !== \"number\" || !Number.isFinite(value) || !Number.isInteger(value)) {\n    throw new RequestError(`${label} must be an integer`);\n  }\n\n  if (value < 0) {\n    throw new RequestError(`${label} must be greater than or equal to 0`);\n  }\n}\n\nfunction validatePositiveInteger(value: number, label: string): void {\n  if (typeof value !== \"number\" || !Number.isFinite(value) || !Number.isInteger(value)) {\n    throw new RequestError(`${label} must be an integer`);\n  }\n\n  if (value <= 0) {\n    throw new RequestError(`${label} must be greater than 0`);\n  }\n}\n\nfunction validateIntegerInRange(value: number, min: number, max: number, label: string): void {\n  validateNonNegativeInteger(value, label);\n  if (value < min || value > max) {\n    throw new RequestError(`${label} must be between ${min} and ${max}`);\n  }\n}\n\nconst SUPPORTED_ALPN_PROTOCOLS = new Set<AlpnProtocol>([\"HTTP1\", \"HTTP2\", \"HTTP3\"]);\nconst SUPPORTED_ALPS_PROTOCOLS = new Set<AlpsProtocol>([\"HTTP1\", \"HTTP2\", \"HTTP3\"]);\nconst SUPPORTED_CERTIFICATE_COMPRESSION_ALGORITHMS = new Set([\"zlib\", \"brotli\", \"zstd\"]);\nconst HTTP2_SETTING_IDS = new Set<Http2SettingId>([\n  \"HeaderTableSize\",\n  \"EnablePush\",\n  \"MaxConcurrentStreams\",\n  \"InitialWindowSize\",\n  \"MaxFrameSize\",\n  \"MaxHeaderListSize\",\n  \"EnableConnectProtocol\",\n  \"NoRfc7540Priorities\",\n]);\nconst HTTP2_PSEUDO_HEADER_IDS = new Set<Http2PseudoHeaderId>([\"Method\", \"Scheme\", \"Authority\", \"Path\", \"Protocol\"]);\nconst STANDARD_HTTP2_SETTING_ID_VALUES = new Set([1, 2, 3, 4, 5, 6, 8, 9]);\nconst MAX_HTTP2_EXPERIMENTAL_SETTING_ID = 15;\nconst TLS_VERSION_ALIASES = new Map<string, \"1.0\" | \"1.1\" | \"1.2\" | \"1.3\">([\n  [\"1.0\", \"1.0\"],\n  [\"1.1\", \"1.1\"],\n  [\"1.2\", \"1.2\"],\n  [\"1.3\", \"1.3\"],\n  [\"tls1.0\", \"1.0\"],\n  [\"tls1.1\", \"1.1\"],\n  [\"tls1.2\", \"1.2\"],\n  [\"tls1.3\", \"1.3\"],\n]);\n\nfunction isNonEmpty(value: object): boolean {\n  for (const _ in value) return true;\n  return false;\n}\n\nfunction normalizeProtocolList<T extends AlpnProtocol | AlpsProtocol>(\n  value: T[] | undefined,\n  label: string,\n  allowed: Set<T>,\n): T[] | undefined {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  if (!Array.isArray(value)) {\n    throw new RequestError(`${label} must be an array`);\n  }\n\n  for (const protocol of value) {\n    if (!allowed.has(protocol)) {\n      throw new RequestError(`${label} values must be one of: HTTP1, HTTP2, HTTP3`);\n    }\n  }\n\n  return [...value];\n}\n\nfunction normalizeTlsVersion(value: TlsVersion | undefined, label: string): \"1.0\" | \"1.1\" | \"1.2\" | \"1.3\" | undefined {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  if (typeof value !== \"string\") {\n    throw new RequestError(`${label} must be a string`);\n  }\n\n  const normalized = TLS_VERSION_ALIASES.get(value.trim().toLowerCase());\n  if (!normalized) {\n    throw new RequestError(`${label} must be one of: 1.0, 1.1, 1.2, 1.3`);\n  }\n\n  return normalized;\n}\n\nfunction normalizeOrigHeaders(origHeaders: string[] | undefined): string[] | undefined {\n  if (origHeaders === undefined) {\n    return undefined;\n  }\n\n  if (!Array.isArray(origHeaders)) {\n    throw new RequestError(\"emulation.origHeaders must be an array of strings\");\n  }\n\n  const normalized: string[] = [];\n  const seen = new Set<string>();\n\n  for (const entry of origHeaders) {\n    if (typeof entry !== \"string\" || entry.trim().length === 0) {\n      throw new RequestError(\"emulation.origHeaders entries must be non-empty strings\");\n    }\n\n    const trimmed = entry.trim();\n    const duplicateKey = trimmed.toLowerCase();\n    if (seen.has(duplicateKey)) {\n      throw new RequestError(`Duplicate emulation.origHeaders entry: ${trimmed}`);\n    }\n\n    seen.add(duplicateKey);\n    normalized.push(trimmed);\n  }\n\n  return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeCustomTlsOptions(options: CustomTlsOptions | undefined): CustomTlsOptions | undefined {\n  if (options === undefined) {\n    return undefined;\n  }\n\n  const normalized: CustomTlsOptions = {};\n\n  const alpnProtocols = normalizeProtocolList(\n    options.alpnProtocols,\n    \"emulation.tlsOptions.alpnProtocols\",\n    SUPPORTED_ALPN_PROTOCOLS,\n  );\n  if (alpnProtocols !== undefined) {\n    normalized.alpnProtocols = alpnProtocols;\n  }\n\n  const alpsProtocols = normalizeProtocolList(\n    options.alpsProtocols,\n    \"emulation.tlsOptions.alpsProtocols\",\n    SUPPORTED_ALPS_PROTOCOLS,\n  );\n  if (alpsProtocols !== undefined) {\n    normalized.alpsProtocols = alpsProtocols;\n  }\n\n  const minTlsVersion = normalizeTlsVersion(options.minTlsVersion, \"emulation.tlsOptions.minTlsVersion\");\n  if (minTlsVersion !== undefined) {\n    normalized.minTlsVersion = minTlsVersion;\n  }\n\n  const maxTlsVersion = normalizeTlsVersion(options.maxTlsVersion, \"emulation.tlsOptions.maxTlsVersion\");\n  if (maxTlsVersion !== undefined) {\n    normalized.maxTlsVersion = maxTlsVersion;\n  }\n\n  if (options.alpsUseNewCodepoint !== undefined) {\n    normalized.alpsUseNewCodepoint = options.alpsUseNewCodepoint;\n  }\n  if (options.sessionTicket !== undefined) {\n    normalized.sessionTicket = options.sessionTicket;\n  }\n  if (options.preSharedKey !== undefined) {\n    normalized.preSharedKey = options.preSharedKey;\n  }\n  if (options.enableEchGrease !== undefined) {\n    normalized.enableEchGrease = options.enableEchGrease;\n  }\n  if (options.permuteExtensions !== undefined) {\n    normalized.permuteExtensions = options.permuteExtensions;\n  }\n  if (options.greaseEnabled !== undefined) {\n    normalized.greaseEnabled = options.greaseEnabled;\n  }\n  if (options.enableOcspStapling !== undefined) {\n    normalized.enableOcspStapling = options.enableOcspStapling;\n  }\n  if (options.enableSignedCertTimestamps !== undefined) {\n    normalized.enableSignedCertTimestamps = options.enableSignedCertTimestamps;\n  }\n  if (options.pskSkipSessionTicket !== undefined) {\n    normalized.pskSkipSessionTicket = options.pskSkipSessionTicket;\n  }\n  if (options.pskDheKe !== undefined) {\n    normalized.pskDheKe = options.pskDheKe;\n  }\n  if (options.renegotiation !== undefined) {\n    normalized.renegotiation = options.renegotiation;\n  }\n  if (options.aesHwOverride !== undefined) {\n    normalized.aesHwOverride = options.aesHwOverride;\n  }\n  if (options.preserveTls13CipherList !== undefined) {\n    normalized.preserveTls13CipherList = options.preserveTls13CipherList;\n  }\n  if (options.randomAesHwOverride !== undefined) {\n    normalized.randomAesHwOverride = options.randomAesHwOverride;\n  }\n  if (options.delegatedCredentials !== undefined) {\n    normalized.delegatedCredentials = options.delegatedCredentials;\n  }\n  if (options.curvesList !== undefined) {\n    normalized.curvesList = options.curvesList;\n  }\n  if (options.cipherList !== undefined) {\n    normalized.cipherList = options.cipherList;\n  }\n  if (options.sigalgsList !== undefined) {\n    normalized.sigalgsList = options.sigalgsList;\n  }\n\n  if (options.recordSizeLimit !== undefined) {\n    validateIntegerInRange(options.recordSizeLimit, 0, 65535, \"emulation.tlsOptions.recordSizeLimit\");\n    normalized.recordSizeLimit = options.recordSizeLimit;\n  }\n\n  if (options.keySharesLimit !== undefined) {\n    validateIntegerInRange(options.keySharesLimit, 0, 255, \"emulation.tlsOptions.keySharesLimit\");\n    normalized.keySharesLimit = options.keySharesLimit;\n  }\n\n  if (options.certificateCompressionAlgorithms !== undefined) {\n    if (!Array.isArray(options.certificateCompressionAlgorithms)) {\n      throw new RequestError(\"emulation.tlsOptions.certificateCompressionAlgorithms must be an array\");\n    }\n\n    const algorithms: Array<\"zlib\" | \"brotli\" | \"zstd\"> = [];\n    const seen = new Set<string>();\n\n    for (const algorithm of options.certificateCompressionAlgorithms) {\n      if (!SUPPORTED_CERTIFICATE_COMPRESSION_ALGORITHMS.has(algorithm)) {\n        throw new RequestError(\n          \"emulation.tlsOptions.certificateCompressionAlgorithms values must be one of: zlib, brotli, zstd\",\n        );\n      }\n      if (seen.has(algorithm)) {\n        throw new RequestError(`Duplicate emulation.tlsOptions.certificateCompressionAlgorithms entry: ${algorithm}`);\n      }\n      seen.add(algorithm);\n      algorithms.push(algorithm);\n    }\n\n    normalized.certificateCompressionAlgorithms = algorithms;\n  }\n\n  if (options.extensionPermutation !== undefined) {\n    if (!Array.isArray(options.extensionPermutation)) {\n      throw new RequestError(\"emulation.tlsOptions.extensionPermutation must be an array\");\n    }\n\n    const permutation: number[] = [];\n    const seen = new Set<number>();\n\n    for (const extensionId of options.extensionPermutation) {\n      validateIntegerInRange(extensionId, 0, 65535, \"emulation.tlsOptions.extensionPermutation\");\n      if (seen.has(extensionId)) {\n        throw new RequestError(`Duplicate emulation.tlsOptions.extensionPermutation entry: ${extensionId}`);\n      }\n      seen.add(extensionId);\n      permutation.push(extensionId);\n    }\n\n    normalized.extensionPermutation = permutation;\n  }\n\n  return isNonEmpty(normalized) ? normalized : undefined;\n}\n\nfunction normalizeCustomHttp1Options(options: CustomHttp1Options | undefined): CustomHttp1Options | undefined {\n  if (options === undefined) {\n    return undefined;\n  }\n\n  const normalized: CustomHttp1Options = {};\n\n  if (options.http09Responses !== undefined) {\n    normalized.http09Responses = options.http09Responses;\n  }\n  if (options.writev !== undefined) {\n    normalized.writev = options.writev;\n  }\n  if (options.ignoreInvalidHeadersInResponses !== undefined) {\n    normalized.ignoreInvalidHeadersInResponses = options.ignoreInvalidHeadersInResponses;\n  }\n  if (options.allowSpacesAfterHeaderNameInResponses !== undefined) {\n    normalized.allowSpacesAfterHeaderNameInResponses = options.allowSpacesAfterHeaderNameInResponses;\n  }\n  if (options.allowObsoleteMultilineHeadersInResponses !== undefined) {\n    normalized.allowObsoleteMultilineHeadersInResponses = options.allowObsoleteMultilineHeadersInResponses;\n  }\n\n  if (options.maxHeaders !== undefined) {\n    validateNonNegativeInteger(options.maxHeaders, \"emulation.http1Options.maxHeaders\");\n    normalized.maxHeaders = options.maxHeaders;\n  }\n\n  if (options.readBufExactSize !== undefined) {\n    validateNonNegativeInteger(options.readBufExactSize, \"emulation.http1Options.readBufExactSize\");\n    normalized.readBufExactSize = options.readBufExactSize;\n  }\n\n  if (options.maxBufSize !== undefined) {\n    validateNonNegativeInteger(options.maxBufSize, \"emulation.http1Options.maxBufSize\");\n    if (options.maxBufSize < 8192) {\n      throw new RequestError(\"emulation.http1Options.maxBufSize must be greater than or equal to 8192\");\n    }\n    normalized.maxBufSize = options.maxBufSize;\n  }\n\n  if (normalized.readBufExactSize !== undefined && normalized.maxBufSize !== undefined) {\n    throw new RequestError(\"emulation.http1Options.readBufExactSize and maxBufSize cannot both be set\");\n  }\n\n  return isNonEmpty(normalized) ? normalized : undefined;\n}\n\nfunction normalizeHttp2StreamDependency(dependency: Http2StreamDependency, label: string): Http2StreamDependency {\n  if (!isPlainObject(dependency)) {\n    throw new RequestError(`${label} must be an object`);\n  }\n\n  validateIntegerInRange(dependency.dependencyId, 0, 0x7fffffff, `${label}.dependencyId`);\n  validateIntegerInRange(dependency.weight, 0, 255, `${label}.weight`);\n\n  const normalized: Http2StreamDependency = {\n    dependencyId: dependency.dependencyId,\n    weight: dependency.weight,\n  };\n  if (dependency.exclusive !== undefined) {\n    normalized.exclusive = dependency.exclusive;\n  }\n  return normalized;\n}\n\nfunction normalizeCustomHttp2Options(options: CustomHttp2Options | undefined): CustomHttp2Options | undefined {\n  if (options === undefined) {\n    return undefined;\n  }\n\n  const normalized: CustomHttp2Options = {};\n\n  if (options.adaptiveWindow !== undefined) {\n    normalized.adaptiveWindow = options.adaptiveWindow;\n  }\n  if (options.keepAliveWhileIdle !== undefined) {\n    normalized.keepAliveWhileIdle = options.keepAliveWhileIdle;\n  }\n  if (options.enablePush !== undefined) {\n    normalized.enablePush = options.enablePush;\n  }\n  if (options.enableConnectProtocol !== undefined) {\n    normalized.enableConnectProtocol = options.enableConnectProtocol;\n  }\n  if (options.noRfc7540Priorities !== undefined) {\n    normalized.noRfc7540Priorities = options.noRfc7540Priorities;\n  }\n\n  if (options.initialStreamId !== undefined) {\n    validateNonNegativeInteger(options.initialStreamId, \"emulation.http2Options.initialStreamId\");\n    normalized.initialStreamId = options.initialStreamId;\n  }\n  if (options.initialConnectionWindowSize !== undefined) {\n    validateNonNegativeInteger(\n      options.initialConnectionWindowSize,\n      \"emulation.http2Options.initialConnectionWindowSize\",\n    );\n    normalized.initialConnectionWindowSize = options.initialConnectionWindowSize;\n  }\n  if (options.initialWindowSize !== undefined) {\n    validateNonNegativeInteger(options.initialWindowSize, \"emulation.http2Options.initialWindowSize\");\n    normalized.initialWindowSize = options.initialWindowSize;\n  }\n  if (options.initialMaxSendStreams !== undefined) {\n    validateNonNegativeInteger(options.initialMaxSendStreams, \"emulation.http2Options.initialMaxSendStreams\");\n    normalized.initialMaxSendStreams = options.initialMaxSendStreams;\n  }\n  if (options.maxFrameSize !== undefined) {\n    validateNonNegativeInteger(options.maxFrameSize, \"emulation.http2Options.maxFrameSize\");\n    normalized.maxFrameSize = options.maxFrameSize;\n  }\n  if (options.keepAliveInterval !== undefined) {\n    validateNonNegativeInteger(options.keepAliveInterval, \"emulation.http2Options.keepAliveInterval\");\n    normalized.keepAliveInterval = options.keepAliveInterval;\n  }\n  if (options.keepAliveTimeout !== undefined) {\n    validateNonNegativeInteger(options.keepAliveTimeout, \"emulation.http2Options.keepAliveTimeout\");\n    normalized.keepAliveTimeout = options.keepAliveTimeout;\n  }\n  if (options.maxConcurrentResetStreams !== undefined) {\n    validateNonNegativeInteger(options.maxConcurrentResetStreams, \"emulation.http2Options.maxConcurrentResetStreams\");\n    normalized.maxConcurrentResetStreams = options.maxConcurrentResetStreams;\n  }\n  if (options.maxSendBufferSize !== undefined) {\n    validateNonNegativeInteger(options.maxSendBufferSize, \"emulation.http2Options.maxSendBufferSize\");\n    normalized.maxSendBufferSize = options.maxSendBufferSize;\n  }\n  if (options.maxConcurrentStreams !== undefined) {\n    validateNonNegativeInteger(options.maxConcurrentStreams, \"emulation.http2Options.maxConcurrentStreams\");\n    normalized.maxConcurrentStreams = options.maxConcurrentStreams;\n  }\n  if (options.maxHeaderListSize !== undefined) {\n    validateNonNegativeInteger(options.maxHeaderListSize, \"emulation.http2Options.maxHeaderListSize\");\n    normalized.maxHeaderListSize = options.maxHeaderListSize;\n  }\n  if (options.maxPendingAcceptResetStreams !== undefined) {\n    validateNonNegativeInteger(\n      options.maxPendingAcceptResetStreams,\n      \"emulation.http2Options.maxPendingAcceptResetStreams\",\n    );\n    normalized.maxPendingAcceptResetStreams = options.maxPendingAcceptResetStreams;\n  }\n  if (options.headerTableSize !== undefined) {\n    validateNonNegativeInteger(options.headerTableSize, \"emulation.http2Options.headerTableSize\");\n    normalized.headerTableSize = options.headerTableSize;\n  }\n\n  if (options.settingsOrder !== undefined) {\n    if (!Array.isArray(options.settingsOrder)) {\n      throw new RequestError(\"emulation.http2Options.settingsOrder must be an array\");\n    }\n\n    const settingsOrder: Http2SettingId[] = [];\n    const seen = new Set<Http2SettingId>();\n    for (const settingId of options.settingsOrder) {\n      if (!HTTP2_SETTING_IDS.has(settingId)) {\n        throw new RequestError(\"emulation.http2Options.settingsOrder contains an unsupported setting id\");\n      }\n      if (seen.has(settingId)) {\n        throw new RequestError(`Duplicate emulation.http2Options.settingsOrder entry: ${settingId}`);\n      }\n      seen.add(settingId);\n      settingsOrder.push(settingId);\n    }\n    normalized.settingsOrder = settingsOrder;\n  }\n\n  if (options.headersPseudoOrder !== undefined) {\n    if (!Array.isArray(options.headersPseudoOrder)) {\n      throw new RequestError(\"emulation.http2Options.headersPseudoOrder must be an array\");\n    }\n\n    const headersPseudoOrder: Http2PseudoHeaderId[] = [];\n    const seenPseudo = new Set<Http2PseudoHeaderId>();\n    for (const pseudoId of options.headersPseudoOrder) {\n      if (!HTTP2_PSEUDO_HEADER_IDS.has(pseudoId)) {\n        throw new RequestError(\"emulation.http2Options.headersPseudoOrder contains an unsupported pseudo-header id\");\n      }\n      if (seenPseudo.has(pseudoId)) {\n        throw new RequestError(`Duplicate emulation.http2Options.headersPseudoOrder entry: ${pseudoId}`);\n      }\n      seenPseudo.add(pseudoId);\n      headersPseudoOrder.push(pseudoId);\n    }\n    normalized.headersPseudoOrder = headersPseudoOrder;\n  }\n\n  if (options.headersStreamDependency !== undefined) {\n    normalized.headersStreamDependency = normalizeHttp2StreamDependency(\n      options.headersStreamDependency,\n      \"emulation.http2Options.headersStreamDependency\",\n    );\n  }\n\n  if (options.priorities !== undefined) {\n    if (!Array.isArray(options.priorities)) {\n      throw new RequestError(\"emulation.http2Options.priorities must be an array\");\n    }\n\n    const priorities: Http2Priority[] = [];\n    const seenStreamIds = new Set<number>();\n    for (const [index, priority] of options.priorities.entries()) {\n      if (!isPlainObject(priority)) {\n        throw new RequestError(`emulation.http2Options.priorities[${index}] must be an object`);\n      }\n\n      validatePositiveInteger(priority.streamId, `emulation.http2Options.priorities[${index}].streamId`);\n      if (seenStreamIds.has(priority.streamId)) {\n        throw new RequestError(`Duplicate emulation.http2Options.priorities streamId: ${priority.streamId}`);\n      }\n      seenStreamIds.add(priority.streamId);\n\n      priorities.push({\n        streamId: priority.streamId,\n        dependency: normalizeHttp2StreamDependency(\n          priority.dependency,\n          `emulation.http2Options.priorities[${index}].dependency`,\n        ),\n      });\n    }\n    normalized.priorities = priorities;\n  }\n\n  if (options.experimentalSettings !== undefined) {\n    if (!Array.isArray(options.experimentalSettings)) {\n      throw new RequestError(\"emulation.http2Options.experimentalSettings must be an array\");\n    }\n\n    const experimentalSettings: Http2ExperimentalSetting[] = [];\n    const seenIds = new Set<number>();\n\n    for (const [index, setting] of options.experimentalSettings.entries()) {\n      if (!isPlainObject(setting)) {\n        throw new RequestError(`emulation.http2Options.experimentalSettings[${index}] must be an object`);\n      }\n\n      validateIntegerInRange(\n        setting.id,\n        1,\n        MAX_HTTP2_EXPERIMENTAL_SETTING_ID,\n        `emulation.http2Options.experimentalSettings[${index}].id`,\n      );\n      if (STANDARD_HTTP2_SETTING_ID_VALUES.has(setting.id)) {\n        throw new RequestError(\n          `emulation.http2Options.experimentalSettings[${index}].id must not be a standard HTTP/2 setting id`,\n        );\n      }\n      if (seenIds.has(setting.id)) {\n        throw new RequestError(`Duplicate emulation.http2Options.experimentalSettings id: ${setting.id}`);\n      }\n      seenIds.add(setting.id);\n\n      validateIntegerInRange(\n        setting.value,\n        0,\n        0xffffffff,\n        `emulation.http2Options.experimentalSettings[${index}].value`,\n      );\n\n      experimentalSettings.push({\n        id: setting.id,\n        value: setting.value,\n      });\n    }\n\n    normalized.experimentalSettings = experimentalSettings;\n  }\n\n  return isNonEmpty(normalized) ? normalized : undefined;\n}\n\nfunction normalizeCustomEmulationOptions(\n  emulation: CustomEmulationOptions | undefined,\n  allowEmpty: boolean,\n): SerializedCustomEmulation | undefined {\n  if (emulation === undefined) {\n    return undefined;\n  }\n\n  if (!isPlainObject(emulation)) {\n    throw new RequestError(\"emulation must be an object\");\n  }\n\n  const source = emulation as Partial<CustomEmulationOptions>;\n  const normalized: SerializedCustomEmulation = {};\n\n  const tlsOptions = normalizeCustomTlsOptions(source.tlsOptions);\n  if (tlsOptions !== undefined) {\n    normalized.tlsOptions = tlsOptions;\n  }\n\n  const http1Options = normalizeCustomHttp1Options(source.http1Options);\n  if (http1Options !== undefined) {\n    normalized.http1Options = http1Options;\n  }\n\n  const http2Options = normalizeCustomHttp2Options(source.http2Options);\n  if (http2Options !== undefined) {\n    normalized.http2Options = http2Options;\n  }\n\n  if (source.headers !== undefined) {\n    const headers = headersToTuples(source.headers);\n    if (headers.length > 0) {\n      normalized.headers = headers;\n    }\n  }\n\n  const origHeaders = normalizeOrigHeaders(source.origHeaders);\n  if (origHeaders !== undefined) {\n    normalized.origHeaders = origHeaders;\n  }\n\n  if (!allowEmpty && !isNonEmpty(normalized)) {\n    throw new RequestError(\n      \"Standalone custom emulation requires at least one of tlsOptions, http1Options, http2Options, headers, or origHeaders\",\n    );\n  }\n\n  return isNonEmpty(normalized) ? normalized : undefined;\n}\n\nfunction serializeCustomEmulationOptions(\n  emulation: CustomEmulationOptions | undefined,\n  allowEmpty: boolean,\n): string | undefined {\n  const normalized = normalizeCustomEmulationOptions(emulation, allowEmpty);\n  return normalized ? JSON.stringify(normalized) : undefined;\n}\n\nfunction resolveEmulationMode(\n  browser: BrowserProfile | undefined,\n  os: EmulationOS | undefined,\n  emulation: CustomEmulationOptions | undefined,\n): ResolvedEmulationMode {\n  if (browser !== undefined) {\n    validateBrowserProfile(browser);\n    if (os !== undefined) {\n      validateOperatingSystem(os);\n    }\n\n    const emulationJson = serializeCustomEmulationOptions(emulation, true);\n    return {\n      kind: \"preset\",\n      browser,\n      os: os ?? DEFAULT_OS,\n      ...(emulationJson !== undefined && { emulationJson }),\n    };\n  }\n\n  if (os !== undefined) {\n    validateOperatingSystem(os);\n    const emulationJson = serializeCustomEmulationOptions(emulation, true);\n    return {\n      kind: \"preset\",\n      browser: DEFAULT_BROWSER,\n      os,\n      ...(emulationJson !== undefined && { emulationJson }),\n    };\n  }\n\n  if (emulation !== undefined) {\n    const emulationJson = serializeCustomEmulationOptions(emulation, false);\n    if (emulationJson === undefined) {\n      throw new RequestError(\n        \"Standalone custom emulation requires at least one of tlsOptions, http1Options, http2Options, headers, or origHeaders\",\n      );\n    }\n    return { kind: \"custom\", emulationJson };\n  }\n\n  return {\n    kind: \"preset\",\n    browser: DEFAULT_BROWSER,\n    os: DEFAULT_OS,\n  };\n}\n\nfunction applyNativeEmulationMode(\n  target: { browser?: BrowserProfile; os?: EmulationOS; emulationJson?: string },\n  mode: ResolvedEmulationMode,\n): void {\n  if (mode.kind === \"custom\") {\n    target.emulationJson = mode.emulationJson;\n    return;\n  }\n\n  target.browser = mode.browser;\n  target.os = mode.os;\n  if (mode.emulationJson !== undefined) {\n    target.emulationJson = mode.emulationJson;\n  }\n}\n\nasync function dispatchRequest(\n  options: NativeRequestOptions,\n  requestUrl: string,\n  signal?: AbortSignal | null,\n): Promise<Response> {\n  // Fast path when no abort signal is provided: avoid Promise.race/allocation overhead.\n  if (!signal) {\n    const requestId = generateRequestId();\n    let payload: NativeResponse;\n\n    try {\n      payload = (await nativeBinding.request(options, requestId, false)) as NativeResponse;\n    } catch (error) {\n      if (error instanceof RequestError) {\n        throw error;\n      }\n      throw new RequestError(String(error));\n    }\n\n    return new Response(payload, requestUrl);\n  }\n\n  const requestId = generateRequestId();\n  const cancelNative = () => {\n    try {\n      nativeBinding.cancelRequest(requestId);\n    } catch {\n      // Cancellation is best-effort; ignore binding errors here.\n    }\n  };\n\n  // setupAbort throws if signal is already aborted and returns null only when signal is falsy\n  // (impossible here since we checked `!signal` above). Cast is safe; avoids non-null assertion lint.\n  const abortHandler = setupAbort(signal, cancelNative) as AbortHandler;\n\n  const pending = Promise.race([nativeBinding.request(options, requestId, true), abortHandler.promise]);\n\n  let payload: NativeResponse;\n\n  try {\n    payload = (await pending) as NativeResponse;\n  } catch (error) {\n    if (isAbortError(error)) {\n      throw error;\n    }\n\n    if (error instanceof RequestError) {\n      throw error;\n    }\n\n    throw new RequestError(String(error));\n  } finally {\n    abortHandler.cleanup();\n  }\n\n  return new Response(payload, requestUrl);\n}\n\n/**\n * Fetch-compatible entry point that adds browser impersonation controls.\n *\n * **Important:** The default fetch path is isolated and non-persistent by design.\n * Each call uses an isolated request context, so cookies are not shared across calls.\n * Connection and TLS reuse behavior is handled by the native layer.\n *\n * **Use {@link createSession} or {@link withSession} if you need:**\n * - Cookie persistence across requests\n * - Shared session defaults across requests\n * - A single session context for multi-step flows\n *\n * **Concurrency:** The core is unthrottled by design. Callers are expected to implement\n * their own concurrency control (e.g., p-limit) if needed. Built-in throttling would\n * reduce performance for high-throughput workloads.\n *\n * @param input - Request URL (string or URL) or a Request object\n * @param init - Fetch-compatible init options\n *\n * @example\n * ```typescript\n * // Isolated request (no state persistence)\n * const response = await fetch('https://example.com');\n *\n * // For persistent cookies and connection reuse, use a session:\n * await withSession(async (session) => {\n *   await session.fetch('https://example.com/login', { method: 'POST', body: loginData });\n *   await session.fetch('https://example.com/protected'); // Cookies from login are sent\n * });\n * ```\n */\nexport async function fetch(input: string | URL | Request, init?: WreqRequestInit): Promise<Response> {\n  const resolved = await resolveFetchArgs(input, init);\n  const url = resolved.url;\n  const config = resolved.init;\n  const sessionContext = resolveSessionContext(config);\n  const sessionDefaults = sessionContext.defaults;\n\n  validateRedirectMode(config.redirect);\n\n  if (config.timeout !== undefined) {\n    validateTimeout(config.timeout);\n  }\n  validateTrustStore(config.trustStore);\n\n  const method = ensureMethod(config.method);\n  const serializedBody = await serializeBody(config.body ?? null);\n  const body = serializedBody.body;\n\n  ensureBodyAllowed(method, body);\n\n  // Only normalize headers when provided; avoids per-request header allocations on hot paths.\n  // If the caller already provides HeaderTuple[], pass it through.\n  let headerTuples = mergeHeaderTuples(sessionDefaults?.defaultHeaders, config.headers);\n  if (serializedBody.contentType && !hasHeaderName(headerTuples, \"content-type\")) {\n    if (!headerTuples) {\n      headerTuples = [];\n    }\n    headerTuples.push([\"Content-Type\", serializedBody.contentType]);\n  }\n\n  const transport = resolveTransportContext(config, sessionDefaults);\n  const timeout = config.timeout ?? sessionDefaults?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\n  const requestOptions: NativeRequestOptions = {\n    url,\n    method,\n    sessionId: sessionContext.sessionId,\n    ephemeral: sessionContext.dropAfterRequest,\n  };\n\n  if (body !== undefined) {\n    requestOptions.body = body;\n  }\n\n  if (transport.captureDiagnostics !== undefined) {\n    requestOptions.captureDiagnostics = transport.captureDiagnostics;\n  }\n  if (config.onRequestEvent !== undefined) {\n    requestOptions.onRequestEvent = config.onRequestEvent;\n  }\n\n  if (transport.transportId) {\n    requestOptions.transportId = transport.transportId;\n  } else {\n    if (transport.mode !== undefined) {\n      applyNativeEmulationMode(requestOptions, transport.mode);\n    }\n    if (transport.proxy !== undefined) {\n      requestOptions.proxy = transport.proxy;\n    }\n    if (transport.insecure !== undefined) {\n      requestOptions.insecure = transport.insecure;\n    }\n    if (transport.trustStore !== undefined) {\n      requestOptions.trustStore = transport.trustStore;\n    }\n  }\n\n  requestOptions.timeout = timeout;\n  if (config.redirect !== undefined) {\n    requestOptions.redirect = config.redirect;\n  }\n  if (config.disableDefaultHeaders !== undefined) {\n    requestOptions.disableDefaultHeaders = config.disableDefaultHeaders;\n  }\n  if (config.compress !== undefined) {\n    requestOptions.compress = config.compress;\n  }\n\n  if (headerTuples && headerTuples.length > 0) {\n    requestOptions.headers = headerTuples;\n  }\n\n  return dispatchRequest(requestOptions, url, config.signal ?? null);\n}\n\nexport async function createTransport(options?: CreateTransportOptions): Promise<Transport> {\n  const mode = resolveEmulationMode(options?.browser, options?.os, options?.emulation);\n  validateTrustStore(options?.trustStore);\n\n  if (options?.poolIdleTimeout !== undefined) {\n    validatePositiveNumber(options.poolIdleTimeout, \"poolIdleTimeout\");\n  }\n  if (options?.poolMaxIdlePerHost !== undefined) {\n    validateNonNegativeInteger(options.poolMaxIdlePerHost, \"poolMaxIdlePerHost\");\n  }\n  if (options?.poolMaxSize !== undefined) {\n    validatePositiveInteger(options.poolMaxSize, \"poolMaxSize\");\n  }\n  if (options?.connectTimeout !== undefined) {\n    validatePositiveNumber(options.connectTimeout, \"connectTimeout\");\n  }\n  if (options?.readTimeout !== undefined) {\n    validatePositiveNumber(options.readTimeout, \"readTimeout\");\n  }\n\n  try {\n    const transportOptions: NativeTransportOptions = {\n      ...(options?.proxy !== undefined && { proxy: options.proxy }),\n      ...(options?.insecure !== undefined && { insecure: options.insecure }),\n      trustStore: options?.trustStore ?? DEFAULT_TRUST_STORE,\n      ...(options?.poolIdleTimeout !== undefined && { poolIdleTimeout: options.poolIdleTimeout }),\n      ...(options?.poolMaxIdlePerHost !== undefined && { poolMaxIdlePerHost: options.poolMaxIdlePerHost }),\n      ...(options?.poolMaxSize !== undefined && { poolMaxSize: options.poolMaxSize }),\n      ...(options?.connectTimeout !== undefined && { connectTimeout: options.connectTimeout }),\n      ...(options?.readTimeout !== undefined && { readTimeout: options.readTimeout }),\n      ...(options?.captureDiagnostics !== undefined && {\n        captureDiagnostics: options.captureDiagnostics,\n      }),\n    };\n    applyNativeEmulationMode(transportOptions, mode);\n\n    const id = nativeBinding.createTransport(transportOptions);\n\n    return new Transport(id);\n  } catch (error) {\n    throw new RequestError(String(error));\n  }\n}\n\nexport async function createSession(options?: CreateSessionOptions): Promise<Session> {\n  const { sessionId, defaults } = normalizeSessionOptions(options);\n\n  let createdId: string;\n  let transportId: string;\n\n  try {\n    const transportOptions: NativeTransportOptions = {\n      ...(defaults.proxy !== undefined && { proxy: defaults.proxy }),\n      ...(defaults.insecure !== undefined && { insecure: defaults.insecure }),\n      trustStore: defaults.trustStore ?? DEFAULT_TRUST_STORE,\n      ...(defaults.captureDiagnostics !== undefined && {\n        captureDiagnostics: defaults.captureDiagnostics,\n      }),\n    };\n    applyNativeEmulationMode(transportOptions, defaults.transportMode);\n    transportId = nativeBinding.createTransport(transportOptions);\n  } catch (error) {\n    throw new RequestError(String(error));\n  }\n\n  try {\n    createdId = nativeBinding.createSession({\n      sessionId,\n    });\n  } catch (error) {\n    try {\n      nativeBinding.dropTransport(transportId);\n    } catch {\n      // Best-effort cleanup; prefer surfacing the original error.\n    }\n    throw new RequestError(String(error));\n  }\n\n  defaults.transportId = transportId;\n  defaults.ownsTransport = true;\n\n  return new Session(createdId, defaults);\n}\n\nexport async function withSession<T>(\n  fn: (session: Session) => Promise<T> | T,\n  options?: CreateSessionOptions,\n): Promise<T> {\n  const session = await createSession(options);\n\n  try {\n    return await fn(session);\n  } finally {\n    await session.close();\n  }\n}\n\n/**\n * @deprecated Use {@link fetch} instead.\n */\nexport async function request(options: RequestOptions): Promise<Response> {\n  if (!options.url) {\n    throw new RequestError(\"URL is required\");\n  }\n\n  const { url, ...rest } = options;\n  const init: WreqRequestInit = {};\n  const legacy = rest as Partial<WreqRequestInit> & { ephemeral?: boolean };\n\n  if (rest.method !== undefined) {\n    init.method = rest.method;\n  }\n\n  if (rest.headers !== undefined) {\n    init.headers = rest.headers;\n  }\n\n  if (rest.body !== undefined) {\n    init.body = rest.body;\n  }\n\n  if (rest.browser !== undefined) {\n    init.browser = rest.browser;\n  }\n\n  if (rest.os !== undefined) {\n    init.os = rest.os;\n  }\n\n  if (rest.emulation !== undefined) {\n    init.emulation = rest.emulation;\n  }\n\n  if (rest.proxy !== undefined) {\n    init.proxy = rest.proxy;\n  }\n\n  if (rest.timeout !== undefined) {\n    init.timeout = rest.timeout;\n  }\n\n  if (rest.sessionId !== undefined) {\n    init.sessionId = rest.sessionId;\n  }\n\n  if (rest.transport !== undefined) {\n    init.transport = rest.transport;\n  }\n\n  if (rest.insecure !== undefined) {\n    init.insecure = rest.insecure;\n  }\n\n  if (rest.trustStore !== undefined) {\n    init.trustStore = rest.trustStore;\n  }\n\n  if (rest.disableDefaultHeaders !== undefined) {\n    init.disableDefaultHeaders = rest.disableDefaultHeaders;\n  }\n\n  if (rest.redirect !== undefined) {\n    init.redirect = rest.redirect;\n  }\n\n  if (legacy.signal !== undefined) {\n    init.signal = legacy.signal;\n  }\n\n  if (legacy.session !== undefined) {\n    init.session = legacy.session;\n  }\n\n  if (legacy.cookieMode !== undefined) {\n    init.cookieMode = legacy.cookieMode;\n  } else if (legacy.ephemeral === true) {\n    init.cookieMode = \"ephemeral\";\n  }\n\n  if (legacy.onRequestEvent !== undefined) {\n    init.onRequestEvent = legacy.onRequestEvent;\n  }\n\n  if (legacy.captureDiagnostics !== undefined) {\n    init.captureDiagnostics = legacy.captureDiagnostics;\n  }\n\n  return fetch(url, init);\n}\n\n/**\n * Get list of available browser profiles\n *\n * @returns Array of browser profile names\n *\n * @example\n * ```typescript\n * import { getProfiles } from 'wreq-js';\n *\n * const profiles = getProfiles();\n * console.log(profiles); // ['chrome_131', 'chrome_142', 'firefox_135', 'safari_18', ...]\n * ```\n */\nexport function getProfiles(): BrowserProfile[] {\n  if (!cachedProfiles) {\n    cachedProfiles = nativeBinding.getProfiles() as BrowserProfile[];\n  }\n\n  return cachedProfiles;\n}\n\nfunction getProfileSet(): Set<string> {\n  if (!cachedProfileSet) {\n    cachedProfileSet = new Set(getProfiles());\n  }\n\n  return cachedProfileSet;\n}\n\n/**\n * Get list of supported operating systems for emulation.\n *\n * @returns Array of operating system identifiers\n */\nexport function getOperatingSystems(): EmulationOS[] {\n  if (!cachedOperatingSystems) {\n    const fromNative = nativeBinding.getOperatingSystems?.() as EmulationOS[] | undefined;\n    cachedOperatingSystems = fromNative && fromNative.length > 0 ? fromNative : [...SUPPORTED_OSES];\n  }\n\n  return cachedOperatingSystems;\n}\n\nfunction getOperatingSystemSet(): Set<string> {\n  if (!cachedOperatingSystemSet) {\n    cachedOperatingSystemSet = new Set(getOperatingSystems());\n  }\n\n  return cachedOperatingSystemSet;\n}\n\n/**\n * Convenience helper for GET requests using {@link fetch}.\n */\nexport async function get(url: string | URL | Request, init?: Omit<WreqRequestInit, \"method\">): Promise<Response> {\n  const config: WreqRequestInit = {};\n  if (init) {\n    Object.assign(config, init);\n  }\n  config.method = \"GET\";\n  return fetch(url, config);\n}\n\n/**\n * Convenience helper for POST requests using {@link fetch}.\n */\nexport async function post(\n  url: string | URL | Request,\n  body?: BodyInit | null,\n  init?: Omit<WreqRequestInit, \"method\" | \"body\">,\n): Promise<Response> {\n  const config: WreqRequestInit = {};\n  if (init) {\n    Object.assign(config, init);\n  }\n  config.method = \"POST\";\n  if (body !== undefined) {\n    config.body = body;\n  }\n\n  return fetch(url, config);\n}\n\nfunction normalizeWebSocketUrl(url: string | URL): string {\n  const normalized = String(url).trim();\n  if (!normalized) {\n    throw new RequestError(\"URL is required\");\n  }\n\n  let parsed: URL;\n  try {\n    parsed = new URL(normalized);\n  } catch (error) {\n    throw new RequestError(String(error));\n  }\n\n  if (parsed.hash) {\n    throw new RequestError(\"WebSocket URL must not include a hash fragment\");\n  }\n\n  if (parsed.protocol === \"http:\") {\n    parsed.protocol = \"ws:\";\n  } else if (parsed.protocol === \"https:\") {\n    parsed.protocol = \"wss:\";\n  }\n\n  if (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n    throw new RequestError(\"expected a ws: or wss: url\");\n  }\n\n  return parsed.toString();\n}\n\nfunction validateWebSocketProtocols(protocols?: string | string[]): void {\n  if (protocols === undefined) {\n    return;\n  }\n\n  const protocolList = typeof protocols === \"string\" ? [protocols] : protocols;\n  const seen = new Set<string>();\n  const validToken = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n  for (const protocol of protocolList) {\n    if (typeof protocol !== \"string\" || protocol.length === 0) {\n      throw new RequestError(\"WebSocket protocol values must be non-empty strings\");\n    }\n    if (!validToken.test(protocol)) {\n      throw new RequestError(`Invalid WebSocket protocol value: ${protocol}`);\n    }\n    if (seen.has(protocol)) {\n      throw new RequestError(`Duplicate WebSocket protocol: ${protocol}`);\n    }\n    seen.add(protocol);\n  }\n}\n\nfunction normalizeWebSocketSizeOption(value: number | undefined, label: string): number | undefined {\n  if (value === undefined) {\n    return undefined;\n  }\n  if (!Number.isSafeInteger(value) || value <= 0) {\n    throw new RequestError(`${label} must be a positive safe integer`);\n  }\n  return value;\n}\n\nfunction normalizeStandaloneWebSocketOptions(options?: Partial<WebSocketOptions>): WebSocketOptions {\n  const normalized: WebSocketOptions = {};\n  if (!options) {\n    return normalized;\n  }\n\n  if (options.browser !== undefined) {\n    normalized.browser = options.browser;\n  }\n  if (options.os !== undefined) {\n    normalized.os = options.os;\n  }\n  if (options.emulation !== undefined) {\n    normalized.emulation = options.emulation;\n  }\n  if (options.headers !== undefined) {\n    normalized.headers = options.headers;\n  }\n  if (options.proxy !== undefined) {\n    normalized.proxy = options.proxy;\n  }\n  if (options.protocols !== undefined) {\n    normalized.protocols = options.protocols;\n  }\n  if (options.maxFrameSize !== undefined) {\n    const maxFrameSize = normalizeWebSocketSizeOption(options.maxFrameSize, \"maxFrameSize\");\n    if (maxFrameSize !== undefined) {\n      normalized.maxFrameSize = maxFrameSize;\n    }\n  }\n  if (options.maxMessageSize !== undefined) {\n    const maxMessageSize = normalizeWebSocketSizeOption(options.maxMessageSize, \"maxMessageSize\");\n    if (maxMessageSize !== undefined) {\n      normalized.maxMessageSize = maxMessageSize;\n    }\n  }\n  if (options.binaryType !== undefined) {\n    if (options.binaryType !== \"nodebuffer\" && options.binaryType !== \"arraybuffer\" && options.binaryType !== \"blob\") {\n      throw new RequestError(\"binaryType must be one of: 'nodebuffer', 'arraybuffer', 'blob'\");\n    }\n    normalized.binaryType = options.binaryType;\n  }\n\n  return normalized;\n}\n\nfunction normalizeSessionWebSocketOptions(options?: Partial<SessionWebSocketOptions>): SessionWebSocketOptions {\n  const normalized: SessionWebSocketOptions = {};\n  if (!options) {\n    return normalized;\n  }\n\n  const optionsWithOverrides = options as Partial<WebSocketOptions>;\n  if (optionsWithOverrides.browser !== undefined) {\n    throw new RequestError(\n      \"`browser` is not supported in session.websocket(); the session controls browser emulation.\",\n    );\n  }\n  if (optionsWithOverrides.os !== undefined) {\n    throw new RequestError(\"`os` is not supported in session.websocket(); the session controls OS emulation.\");\n  }\n  if (optionsWithOverrides.emulation !== undefined) {\n    throw new RequestError(\n      \"`emulation` is not supported in session.websocket(); the session transport controls emulation.\",\n    );\n  }\n  if (optionsWithOverrides.proxy !== undefined) {\n    throw new RequestError(\"`proxy` is not supported in session.websocket(); the session transport controls proxying.\");\n  }\n\n  if (options.headers !== undefined) {\n    normalized.headers = options.headers;\n  }\n  if (options.protocols !== undefined) {\n    normalized.protocols = options.protocols;\n  }\n  if (options.maxFrameSize !== undefined) {\n    const maxFrameSize = normalizeWebSocketSizeOption(options.maxFrameSize, \"maxFrameSize\");\n    if (maxFrameSize !== undefined) {\n      normalized.maxFrameSize = maxFrameSize;\n    }\n  }\n  if (options.maxMessageSize !== undefined) {\n    const maxMessageSize = normalizeWebSocketSizeOption(options.maxMessageSize, \"maxMessageSize\");\n    if (maxMessageSize !== undefined) {\n      normalized.maxMessageSize = maxMessageSize;\n    }\n  }\n  if (options.binaryType !== undefined) {\n    if (options.binaryType !== \"nodebuffer\" && options.binaryType !== \"arraybuffer\" && options.binaryType !== \"blob\") {\n      throw new RequestError(\"binaryType must be one of: 'nodebuffer', 'arraybuffer', 'blob'\");\n    }\n    normalized.binaryType = options.binaryType;\n  }\n\n  return normalized;\n}\n\nfunction extractLegacyWebSocketCallbacks(options: unknown): LegacyWebSocketCallbacks | undefined {\n  if (!isPlainObject(options)) {\n    return undefined;\n  }\n\n  const maybeCallbacks = options as Partial<LegacyWebSocketCallbacks>;\n  const callbacks: LegacyWebSocketCallbacks = {};\n\n  if (typeof maybeCallbacks.onMessage === \"function\") {\n    callbacks.onMessage = maybeCallbacks.onMessage;\n  }\n  if (typeof maybeCallbacks.onClose === \"function\") {\n    callbacks.onClose = maybeCallbacks.onClose;\n  }\n  if (typeof maybeCallbacks.onError === \"function\") {\n    callbacks.onError = maybeCallbacks.onError;\n  }\n\n  return Object.keys(callbacks).length > 0 ? callbacks : undefined;\n}\n\nfunction normalizeWebSocketCloseOptions(code?: number, reason?: string): NativeWebSocketCloseOptions | undefined {\n  if (code === undefined && reason === undefined) {\n    return undefined;\n  }\n\n  if (code === undefined) {\n    throw new RequestError(\"A close code is required when providing a close reason\");\n  }\n\n  if (!Number.isInteger(code)) {\n    throw new RequestError(\"Close code must be an integer\");\n  }\n  if (code !== 1000 && (code < 3000 || code > 4999)) {\n    throw new RequestError(\"Close code must be 1000 or in range 3000-4999\");\n  }\n\n  const normalizedReason = reason ?? \"\";\n  if (Buffer.byteLength(normalizedReason, \"utf8\") > 123) {\n    throw new RequestError(\"Close reason must be 123 bytes or fewer\");\n  }\n\n  return {\n    code,\n    reason: normalizedReason,\n  };\n}\n\ntype WebSocketAnyEvent = WebSocketOpenEvent | WebSocketMessageEvent | WebSocketCloseEvent | WebSocketErrorEvent;\ntype WebSocketFunctionListener = (this: WebSocket, event: WebSocketAnyEvent) => void;\ntype WebSocketObjectListener = { handleEvent: (event: WebSocketAnyEvent) => void };\ntype WebSocketListener = WebSocketFunctionListener | WebSocketObjectListener;\ntype WebSocketAddEventListenerOptions = boolean | { once?: boolean; signal?: AbortSignal | null };\ntype WebSocketListenerType = \"open\" | \"message\" | \"close\" | \"error\";\n\ntype WebSocketListenerDescriptor = {\n  listener: WebSocketListener;\n  order: number;\n  once: boolean;\n  abortSignal?: AbortSignal | null;\n  abortHandler?: () => void;\n};\n\nfunction isWebSocketListenerType(type: string): type is WebSocketListenerType {\n  return type === \"open\" || type === \"message\" || type === \"close\" || type === \"error\";\n}\n\n/**\n * WHATWG-style WebSocket API with async connection establishment.\n */\nexport class WebSocket {\n  static readonly CONNECTING = 0;\n  static readonly OPEN = 1;\n  static readonly CLOSING = 2;\n  static readonly CLOSED = 3;\n\n  readonly url: string;\n  protocol = \"\";\n  extensions = \"\";\n  readyState = WebSocket.CONNECTING;\n  private _binaryType: WebSocketBinaryType = \"nodebuffer\";\n  private _bufferedAmount = 0;\n\n  private _onopen: ((this: WebSocket, event: WebSocketOpenEvent) => void) | null = null;\n  private _onmessage: ((this: WebSocket, event: WebSocketMessageEvent) => void) | null = null;\n  private _onclose: ((this: WebSocket, event: WebSocketCloseEvent) => void) | null = null;\n  private _onerror: ((this: WebSocket, event: WebSocketErrorEvent) => void) | null = null;\n  private _onHandlerOrder = {\n    open: -1,\n    message: -1,\n    close: -1,\n    error: -1,\n  };\n  private _listenerOrderCounter = 0;\n\n  private readonly _listeners = {\n    open: new Map<WebSocketListener, WebSocketListenerDescriptor>(),\n    message: new Map<WebSocketListener, WebSocketListenerDescriptor>(),\n    close: new Map<WebSocketListener, WebSocketListenerDescriptor>(),\n    error: new Map<WebSocketListener, WebSocketListenerDescriptor>(),\n  };\n  private readonly _legacyCallbacks: LegacyWebSocketCallbacks | undefined;\n  private readonly _openDispatchMode: WebSocketOpenDispatchMode;\n  private _connection: NativeWebSocketConnection | undefined;\n  private _connectPromise!: Promise<void>;\n  private _closeOptions: NativeWebSocketCloseOptions | undefined;\n  private _finalizerToken: NativeWebSocketConnection | undefined;\n  private _openEventDispatched = false;\n  private _openEventQueued = false;\n  private _closeEventDispatched = false;\n  private _nativeCloseStarted = false;\n  private _pendingMessages: Array<string | Buffer> = [];\n  private _sendChain: Promise<void> = Promise.resolve();\n\n  constructor(init: InternalWebSocketInit);\n  constructor(url: string | URL, protocols?: string | string[]);\n  constructor(url: string | URL, protocols?: string | string[], options?: WebSocketOptions);\n  constructor(url: string | URL, options?: WebSocketOptions);\n  constructor(\n    urlOrInit: string | URL | InternalWebSocketInit,\n    protocolsOrOptions?: string | string[] | WebSocketOptions,\n    maybeOptions?: WebSocketOptions,\n  ) {\n    let init: InternalWebSocketInit;\n    if (isInternalWebSocketInit(urlOrInit)) {\n      init = urlOrInit;\n    } else {\n      init = WebSocket.buildStandaloneInit(urlOrInit, protocolsOrOptions, maybeOptions);\n    }\n\n    this.url = init.url;\n    this.binaryType = init.options.binaryType ?? \"nodebuffer\";\n    this._legacyCallbacks = init.legacyCallbacks;\n    this._openDispatchMode = init.openDispatchMode;\n    this._connectPromise = this.connect(init.connect);\n    void this._connectPromise.catch(() => undefined);\n  }\n\n  get binaryType(): WebSocketBinaryType {\n    return this._binaryType;\n  }\n\n  set binaryType(value: WebSocketBinaryType) {\n    if (value === \"arraybuffer\" || value === \"blob\" || value === \"nodebuffer\") {\n      this._binaryType = value;\n    }\n  }\n\n  get bufferedAmount(): number {\n    return this._bufferedAmount;\n  }\n\n  get onopen(): ((this: WebSocket, event: WebSocketOpenEvent) => void) | null {\n    return this._onopen;\n  }\n\n  set onopen(listener: ((this: WebSocket, event: WebSocketOpenEvent) => void) | null) {\n    this._onopen = listener;\n    this._onHandlerOrder.open = listener ? ++this._listenerOrderCounter : -1;\n  }\n\n  get onmessage(): ((this: WebSocket, event: WebSocketMessageEvent) => void) | null {\n    return this._onmessage;\n  }\n\n  set onmessage(listener: ((this: WebSocket, event: WebSocketMessageEvent) => void) | null) {\n    this._onmessage = listener;\n    this._onHandlerOrder.message = listener ? ++this._listenerOrderCounter : -1;\n  }\n\n  get onclose(): ((this: WebSocket, event: WebSocketCloseEvent) => void) | null {\n    return this._onclose;\n  }\n\n  set onclose(listener: ((this: WebSocket, event: WebSocketCloseEvent) => void) | null) {\n    this._onclose = listener;\n    this._onHandlerOrder.close = listener ? ++this._listenerOrderCounter : -1;\n  }\n\n  get onerror(): ((this: WebSocket, event: WebSocketErrorEvent) => void) | null {\n    return this._onerror;\n  }\n\n  set onerror(listener: ((this: WebSocket, event: WebSocketErrorEvent) => void) | null) {\n    this._onerror = listener;\n    this._onHandlerOrder.error = listener ? ++this._listenerOrderCounter : -1;\n  }\n\n  static async _connectWithInit(init: InternalWebSocketInit): Promise<WebSocket> {\n    const ws = new WebSocket(init);\n    await ws._waitUntilConnected();\n    ws.scheduleOpenEventAfterAwait();\n    return ws;\n  }\n\n  private static buildStandaloneInit(\n    url: string | URL,\n    protocolsOrOptions?: string | string[] | WebSocketOptions,\n    maybeOptions?: WebSocketOptions,\n  ): InternalWebSocketInit {\n    const optionsCandidate =\n      typeof protocolsOrOptions === \"string\" || Array.isArray(protocolsOrOptions)\n        ? maybeOptions\n        : (protocolsOrOptions ?? maybeOptions);\n    const normalizedOptions = normalizeStandaloneWebSocketOptions(optionsCandidate);\n    validateWebSocketProtocols(\n      typeof protocolsOrOptions === \"string\" || Array.isArray(protocolsOrOptions)\n        ? protocolsOrOptions\n        : normalizedOptions.protocols,\n    );\n    assertNoManualWebSocketProtocolHeader(normalizedOptions.headers);\n    const emulationMode = resolveEmulationMode(\n      normalizedOptions.browser,\n      normalizedOptions.os,\n      normalizedOptions.emulation,\n    );\n    const protocols = normalizeWebSocketProtocolList(\n      typeof protocolsOrOptions === \"string\" || Array.isArray(protocolsOrOptions)\n        ? protocolsOrOptions\n        : normalizedOptions.protocols,\n    );\n\n    return {\n      _internal: true,\n      url: normalizeWebSocketUrl(url),\n      options: normalizedOptions,\n      openDispatchMode: \"automatic\",\n      connect: (callbacks) => {\n        const nativeOptions: NativeWebSocketOptions = {\n          url: normalizeWebSocketUrl(url),\n          headers: headersToTuples(normalizedOptions.headers ?? {}),\n          ...(protocols && protocols.length > 0 && { protocols }),\n          ...(normalizedOptions.proxy !== undefined && { proxy: normalizedOptions.proxy }),\n          ...(normalizedOptions.maxFrameSize !== undefined && { maxFrameSize: normalizedOptions.maxFrameSize }),\n          ...(normalizedOptions.maxMessageSize !== undefined && { maxMessageSize: normalizedOptions.maxMessageSize }),\n          onMessage: callbacks.onMessage,\n          onClose: callbacks.onClose,\n          onError: callbacks.onError,\n        };\n        applyNativeEmulationMode(nativeOptions, emulationMode);\n        return nativeBinding.websocketConnect(nativeOptions);\n      },\n      legacyCallbacks: extractLegacyWebSocketCallbacks(optionsCandidate),\n    };\n  }\n\n  private async connect(\n    connectFn: (callbacks: {\n      onMessage: (data: string | Buffer) => void;\n      onClose: (event: NativeWebSocketCloseEvent) => void;\n      onError: (message: string) => void;\n    }) => Promise<NativeWebSocketConnection>,\n  ): Promise<void> {\n    try {\n      const connection = await connectFn({\n        onMessage: (data) => {\n          this.handleNativeMessage(data);\n        },\n        onClose: (event) => {\n          this.handleNativeClose(event);\n        },\n        onError: (message) => {\n          this.handleNativeError(message);\n        },\n      });\n\n      this._connection = connection;\n      this.protocol = connection.protocol ?? \"\";\n      this.extensions = connection.extensions ?? \"\";\n      if (websocketFinalizer) {\n        this._finalizerToken = connection;\n        websocketFinalizer.register(this, connection, connection);\n      }\n\n      if (this.readyState === WebSocket.CLOSING) {\n        this.startNativeClose();\n        return;\n      }\n\n      this.readyState = WebSocket.OPEN;\n      if (this._openDispatchMode === \"automatic\") {\n        this.scheduleOpenEventAfterConnect();\n      }\n    } catch (error) {\n      this.handleNativeError(String(error));\n      this.finalizeClosed({ code: 1006, reason: \"\" }, false);\n      throw new RequestError(String(error));\n    }\n  }\n\n  private _waitUntilConnected(): Promise<void> {\n    return this._connectPromise;\n  }\n\n  private scheduleOpenEventAfterConnect(): void {\n    this.scheduleOpenEventWithDepth(2);\n  }\n\n  private scheduleOpenEventAfterAwait(): void {\n    this.scheduleOpenEventWithDepth(3);\n  }\n\n  private scheduleOpenEventWithDepth(depth: number): void {\n    if (this._openEventDispatched || this._openEventQueued || this.readyState !== WebSocket.OPEN) {\n      return;\n    }\n    this._openEventQueued = true;\n\n    const queue = (remaining: number) => {\n      if (remaining === 0) {\n        this._openEventQueued = false;\n        if (this._openEventDispatched || this.readyState !== WebSocket.OPEN) {\n          return;\n        }\n        this._openEventDispatched = true;\n        this.dispatchOpenEvent();\n        return;\n      }\n\n      queueMicrotask(() => {\n        queue(remaining - 1);\n      });\n    };\n\n    queue(depth);\n  }\n\n  private releaseConnectionTracking(): void {\n    if (!this._finalizerToken || !websocketFinalizer) {\n      return;\n    }\n    websocketFinalizer.unregister(this._finalizerToken);\n    this._finalizerToken = undefined;\n  }\n\n  private toMessageEventData(data: string | Buffer): string | Buffer | ArrayBuffer | Blob {\n    if (typeof data === \"string\") {\n      return data;\n    }\n    if (this._binaryType === \"arraybuffer\") {\n      const arrayBuffer = new ArrayBuffer(data.byteLength);\n      new Uint8Array(arrayBuffer).set(data);\n      return arrayBuffer;\n    }\n    if (this._binaryType === \"blob\") {\n      return new Blob([data]);\n    }\n    return data;\n  }\n\n  private invokeListener(listener: WebSocketListener, event: WebSocketAnyEvent): void {\n    try {\n      if (typeof listener === \"function\") {\n        listener.call(this, event);\n      } else {\n        listener.handleEvent(event);\n      }\n    } catch {\n      // Event listener errors should not break native callback dispatch.\n    }\n  }\n\n  private createBaseEvent<TType extends WebSocketAnyEvent[\"type\"]>(type: TType) {\n    return {\n      type,\n      isTrusted: false as const,\n      timeStamp: Date.now(),\n      target: this,\n      currentTarget: this,\n    };\n  }\n\n  private getOnHandler(type: WebSocketListenerType): WebSocketFunctionListener | null {\n    switch (type) {\n      case \"open\":\n        return this._onopen as WebSocketFunctionListener | null;\n      case \"message\":\n        return this._onmessage as WebSocketFunctionListener | null;\n      case \"close\":\n        return this._onclose as WebSocketFunctionListener | null;\n      case \"error\":\n        return this._onerror as WebSocketFunctionListener | null;\n      default:\n        return null;\n    }\n  }\n\n  private getOnHandlerOrder(type: WebSocketListenerType): number {\n    return this._onHandlerOrder[type];\n  }\n\n  private getListenerMap(type: WebSocketListenerType): Map<WebSocketListener, WebSocketListenerDescriptor> {\n    return this._listeners[type];\n  }\n\n  private dispatchEvent(type: WebSocketListenerType, event: WebSocketAnyEvent): void {\n    const listenerMap = this.getListenerMap(type);\n    const onHandler = this.getOnHandler(type);\n    if (listenerMap.size === 0 && !onHandler) {\n      return;\n    }\n\n    const ordered: Array<{ order: number; listener: WebSocketListener; once: boolean }> = [];\n    for (const descriptor of listenerMap.values()) {\n      ordered.push({\n        order: descriptor.order,\n        listener: descriptor.listener,\n        once: descriptor.once,\n      });\n    }\n\n    if (onHandler) {\n      ordered.push({\n        order: this.getOnHandlerOrder(type),\n        listener: onHandler,\n        once: false,\n      });\n    }\n\n    ordered.sort((a, b) => a.order - b.order);\n\n    for (const entry of ordered) {\n      if (entry.once) {\n        this.removeEventListener(type, entry.listener);\n      }\n      this.invokeListener(entry.listener, event);\n    }\n  }\n\n  private dispatchOpenEvent(): void {\n    const event: WebSocketOpenEvent = this.createBaseEvent(\"open\");\n    this.dispatchEvent(\"open\", event);\n    if (!this._closeEventDispatched && this._pendingMessages.length > 0) {\n      const pending = this._pendingMessages;\n      this._pendingMessages = [];\n      for (const data of pending) {\n        this.dispatchMessageEvent(this.toMessageEventData(data));\n      }\n    }\n  }\n\n  private dispatchMessageEvent(data: string | Buffer | ArrayBuffer | Blob): void {\n    const event: WebSocketMessageEvent = {\n      ...this.createBaseEvent(\"message\"),\n      data,\n    };\n    this.dispatchEvent(\"message\", event);\n  }\n\n  private dispatchCloseEvent(event: WebSocketCloseEvent): void {\n    this.dispatchEvent(\"close\", event);\n  }\n\n  private dispatchErrorEvent(message?: string): void {\n    const event: WebSocketErrorEvent = {\n      ...this.createBaseEvent(\"error\"),\n      ...(message !== undefined && { message }),\n    };\n    this.dispatchEvent(\"error\", event);\n  }\n\n  private handleNativeMessage(data: string | Buffer): void {\n    if (this._closeEventDispatched) {\n      return;\n    }\n\n    this._legacyCallbacks?.onMessage?.(data);\n    if (!this._openEventDispatched && this.readyState === WebSocket.OPEN) {\n      this._pendingMessages.push(data);\n      return;\n    }\n    this.dispatchMessageEvent(this.toMessageEventData(data));\n  }\n\n  private handleNativeError(message: string): void {\n    this._legacyCallbacks?.onError?.(message);\n    this.dispatchErrorEvent(message);\n  }\n\n  private handleNativeClose(event: NativeWebSocketCloseEvent): void {\n    const wasClean = this.readyState === WebSocket.CLOSING || event.code === 1000;\n    this.finalizeClosed(event, wasClean);\n  }\n\n  private finalizeClosed(event: NativeWebSocketCloseEvent, wasClean: boolean): void {\n    if (this._closeEventDispatched) {\n      return;\n    }\n\n    this.readyState = WebSocket.CLOSED;\n    this._closeEventDispatched = true;\n    this._pendingMessages = [];\n    this.releaseConnectionTracking();\n\n    const closeEvent: WebSocketCloseEvent = {\n      ...this.createBaseEvent(\"close\"),\n      code: event.code,\n      reason: event.reason,\n      wasClean,\n    };\n\n    this._legacyCallbacks?.onClose?.(closeEvent);\n    this.dispatchCloseEvent(closeEvent);\n  }\n\n  private startNativeClose(): void {\n    if (this._nativeCloseStarted || !this._connection) {\n      return;\n    }\n    this._nativeCloseStarted = true;\n    const connection = this._connection;\n    const closeOptions = this._closeOptions;\n\n    void nativeBinding.websocketClose(connection, closeOptions).catch((error) => {\n      this.handleNativeError(String(error));\n      this.finalizeClosed({ code: 1006, reason: \"\" }, false);\n    });\n  }\n\n  addEventListener(\n    type: \"open\",\n    listener: ((event: WebSocketOpenEvent) => void) | null,\n    options?: WebSocketAddEventListenerOptions,\n  ): void;\n  addEventListener(\n    type: \"message\",\n    listener: ((event: WebSocketMessageEvent) => void) | null,\n    options?: WebSocketAddEventListenerOptions,\n  ): void;\n  addEventListener(\n    type: \"close\",\n    listener: ((event: WebSocketCloseEvent) => void) | null,\n    options?: WebSocketAddEventListenerOptions,\n  ): void;\n  addEventListener(\n    type: \"error\",\n    listener: ((event: WebSocketErrorEvent) => void) | null,\n    options?: WebSocketAddEventListenerOptions,\n  ): void;\n  addEventListener(type: string, listener: unknown, options?: WebSocketAddEventListenerOptions): void;\n  addEventListener(type: string, listener: unknown, options?: WebSocketAddEventListenerOptions): void {\n    if (!listener || !isWebSocketListenerType(type)) {\n      return;\n    }\n\n    const normalizedListener = listener as WebSocketListener;\n    if (\n      typeof normalizedListener !== \"function\" &&\n      (typeof normalizedListener !== \"object\" ||\n        normalizedListener === null ||\n        typeof normalizedListener.handleEvent !== \"function\")\n    ) {\n      return;\n    }\n    const listenerMap = this.getListenerMap(type);\n    if (listenerMap.has(normalizedListener)) {\n      return;\n    }\n\n    const parsedOptions = typeof options === \"boolean\" ? {} : (options ?? {});\n    const once = parsedOptions.once === true;\n    const signal = parsedOptions.signal;\n\n    if (signal?.aborted) {\n      return;\n    }\n\n    const descriptor: WebSocketListenerDescriptor = {\n      listener: normalizedListener,\n      order: ++this._listenerOrderCounter,\n      once,\n    };\n\n    if (signal) {\n      const onAbort = () => {\n        this.removeEventListener(type, normalizedListener);\n      };\n      descriptor.abortSignal = signal;\n      descriptor.abortHandler = onAbort;\n      signal.addEventListener(\"abort\", onAbort, { once: true });\n    }\n\n    listenerMap.set(normalizedListener, descriptor);\n  }\n\n  removeEventListener(type: \"open\", listener: ((event: WebSocketOpenEvent) => void) | null): void;\n  removeEventListener(type: \"message\", listener: ((event: WebSocketMessageEvent) => void) | null): void;\n  removeEventListener(type: \"close\", listener: ((event: WebSocketCloseEvent) => void) | null): void;\n  removeEventListener(type: \"error\", listener: ((event: WebSocketErrorEvent) => void) | null): void;\n  removeEventListener(type: string, listener: unknown): void;\n  removeEventListener(type: string, listener: unknown): void {\n    if (!listener || !isWebSocketListenerType(type)) {\n      return;\n    }\n\n    const normalizedListener = listener as WebSocketListener;\n    if (typeof normalizedListener !== \"function\" && typeof normalizedListener !== \"object\") {\n      return;\n    }\n    const listenerMap = this.getListenerMap(type);\n    const descriptor = listenerMap.get(normalizedListener);\n    if (!descriptor) {\n      return;\n    }\n\n    if (descriptor.abortSignal && descriptor.abortHandler) {\n      descriptor.abortSignal.removeEventListener(\"abort\", descriptor.abortHandler);\n    }\n\n    listenerMap.delete(normalizedListener);\n  }\n\n  private getSendByteLength(data: string | Buffer | ArrayBuffer | ArrayBufferView | Blob): number {\n    if (typeof data === \"string\") {\n      return Buffer.byteLength(data);\n    }\n    if (Buffer.isBuffer(data)) {\n      return data.byteLength;\n    }\n    if (data instanceof ArrayBuffer) {\n      return data.byteLength;\n    }\n    if (ArrayBuffer.isView(data)) {\n      return data.byteLength;\n    }\n    if (typeof Blob !== \"undefined\" && data instanceof Blob) {\n      return data.size;\n    }\n\n    throw new TypeError(\"WebSocket data must be a string, Buffer, ArrayBuffer, ArrayBufferView, or Blob\");\n  }\n\n  private async normalizeSendPayload(\n    data: string | Buffer | ArrayBuffer | ArrayBufferView | Blob,\n  ): Promise<string | Buffer> {\n    if (typeof data === \"string\") {\n      return data;\n    }\n    if (Buffer.isBuffer(data)) {\n      return data;\n    }\n    if (data instanceof ArrayBuffer) {\n      return Buffer.from(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n      return Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n    }\n    if (typeof Blob !== \"undefined\" && data instanceof Blob) {\n      return Buffer.from(await data.arrayBuffer());\n    }\n\n    throw new TypeError(\"WebSocket data must be a string, Buffer, ArrayBuffer, ArrayBufferView, or Blob\");\n  }\n\n  send(data: string | Buffer | ArrayBuffer | ArrayBufferView | Blob): void {\n    if (this.readyState !== WebSocket.OPEN || !this._connection) {\n      throw new RequestError(\"WebSocket is not open\");\n    }\n\n    const queuedBytes = this.getSendByteLength(data);\n    const connection = this._connection;\n    this._bufferedAmount += queuedBytes;\n    const sendTask = async () => {\n      try {\n        const payload = await this.normalizeSendPayload(data);\n        await nativeBinding.websocketSend(connection, payload);\n      } catch (error) {\n        this.handleNativeError(String(error));\n        this.finalizeClosed({ code: 1006, reason: \"\" }, false);\n      } finally {\n        this._bufferedAmount = Math.max(0, this._bufferedAmount - queuedBytes);\n      }\n    };\n    this._sendChain = this._sendChain.then(sendTask, sendTask);\n  }\n\n  close(code?: number, reason?: string): void {\n    if (this.readyState === WebSocket.CLOSING || this.readyState === WebSocket.CLOSED) {\n      return;\n    }\n\n    this._closeOptions = normalizeWebSocketCloseOptions(code, reason);\n    this.readyState = WebSocket.CLOSING;\n    this.startNativeClose();\n  }\n}\n\nfunction isInternalWebSocketInit(value: unknown): value is InternalWebSocketInit {\n  if (!isPlainObject(value)) {\n    return false;\n  }\n\n  const candidate = value as Partial<InternalWebSocketInit>;\n  return candidate._internal === true && typeof candidate.url === \"string\" && typeof candidate.connect === \"function\";\n}\n\nfunction normalizeStandaloneWebSocketArgs(\n  urlOrOptions: string | URL | LegacyWebSocketOptions,\n  options?: WebSocketOptions,\n): { url: string; options: WebSocketOptions; legacyCallbacks: LegacyWebSocketCallbacks | undefined } {\n  if (typeof urlOrOptions === \"string\" || urlOrOptions instanceof URL) {\n    const normalizedOptions = normalizeStandaloneWebSocketOptions(options);\n    return {\n      url: normalizeWebSocketUrl(urlOrOptions),\n      options: normalizedOptions,\n      legacyCallbacks: extractLegacyWebSocketCallbacks(options),\n    };\n  }\n\n  const legacy = urlOrOptions;\n  const normalizedOptions = normalizeStandaloneWebSocketOptions(legacy);\n  return {\n    url: normalizeWebSocketUrl(legacy.url),\n    options: normalizedOptions,\n    legacyCallbacks: extractLegacyWebSocketCallbacks(legacy),\n  };\n}\n\nfunction normalizeSessionWebSocketArgs(\n  urlOrOptions: string | URL | LegacySessionWebSocketOptions,\n  options?: SessionWebSocketOptions,\n): { url: string; options: SessionWebSocketOptions; legacyCallbacks: LegacyWebSocketCallbacks | undefined } {\n  if (typeof urlOrOptions === \"string\" || urlOrOptions instanceof URL) {\n    const normalizedOptions = normalizeSessionWebSocketOptions(options);\n    return {\n      url: normalizeWebSocketUrl(urlOrOptions),\n      options: normalizedOptions,\n      legacyCallbacks: extractLegacyWebSocketCallbacks(options),\n    };\n  }\n\n  const legacy = urlOrOptions;\n  const normalizedOptions = normalizeSessionWebSocketOptions(legacy);\n  return {\n    url: normalizeWebSocketUrl(legacy.url),\n    options: normalizedOptions,\n    legacyCallbacks: extractLegacyWebSocketCallbacks(legacy),\n  };\n}\n\n/**\n * Create a WebSocket connection with browser impersonation.\n */\nexport async function websocket(url: string | URL, options?: WebSocketOptions): Promise<WebSocket>;\nexport async function websocket(options: LegacyWebSocketOptions): Promise<WebSocket>;\nexport async function websocket(\n  urlOrOptions: string | URL | LegacyWebSocketOptions,\n  options?: WebSocketOptions,\n): Promise<WebSocket> {\n  const normalized = normalizeStandaloneWebSocketArgs(urlOrOptions, options);\n  validateWebSocketProtocols(normalized.options.protocols);\n  assertNoManualWebSocketProtocolHeader(normalized.options.headers);\n  const emulationMode = resolveEmulationMode(\n    normalized.options.browser,\n    normalized.options.os,\n    normalized.options.emulation,\n  );\n  const protocols = normalizeWebSocketProtocolList(normalized.options.protocols);\n\n  return WebSocket._connectWithInit({\n    _internal: true,\n    url: normalized.url,\n    options: normalized.options,\n    openDispatchMode: \"deferred\",\n    connect: (callbacks) => {\n      const nativeOptions: NativeWebSocketOptions = {\n        url: normalized.url,\n        headers: headersToTuples(normalized.options.headers ?? {}),\n        ...(protocols && protocols.length > 0 && { protocols }),\n        ...(normalized.options.proxy !== undefined && { proxy: normalized.options.proxy }),\n        ...(normalized.options.maxFrameSize !== undefined && { maxFrameSize: normalized.options.maxFrameSize }),\n        ...(normalized.options.maxMessageSize !== undefined && { maxMessageSize: normalized.options.maxMessageSize }),\n        onMessage: callbacks.onMessage,\n        onClose: callbacks.onClose,\n        onError: callbacks.onError,\n      };\n      applyNativeEmulationMode(nativeOptions, emulationMode);\n      return nativeBinding.websocketConnect(nativeOptions);\n    },\n    legacyCallbacks: normalized.legacyCallbacks,\n  });\n}\n\nexport type {\n  AlpnProtocol,\n  AlpsProtocol,\n  BodyInit,\n  BrowserProfile,\n  CookieMode,\n  CreateSessionOptions,\n  CreateTransportOptions,\n  CustomEmulationOptions,\n  CustomHttp1Options,\n  CustomHttp2Options,\n  CustomTlsOptions,\n  EmulationOS,\n  HeadersInit,\n  Http2ExperimentalSetting,\n  Http2Priority,\n  Http2PseudoHeaderId,\n  Http2SettingId,\n  Http2StreamDependency,\n  RequestDiagnostics,\n  RequestEvent,\n  RequestEventType,\n  RequestInit,\n  RequestOptions,\n  SessionHandle,\n  SessionWebSocketOptions,\n  TlsVersion,\n  WebSocketBinaryType,\n  WebSocketCloseEvent,\n  WebSocketErrorEvent,\n  WebSocketEventType,\n  WebSocketMessageEvent,\n  WebSocketOpenEvent,\n  WebSocketOptions,\n} from \"./types.js\";\n\nexport { RequestError };\n\nexport default {\n  fetch,\n  request,\n  get,\n  post,\n  getProfiles,\n  getOperatingSystems,\n  createTransport,\n  createSession,\n  withSession,\n  websocket,\n  WebSocket,\n  Headers,\n  Response,\n  Transport,\n  Session,\n  RequestError,\n};\n"],"mappings":"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"}