{
  "version": 3,
  "sources": ["../../../utils/dist/utils.js", "../src/index.ts"],
  "sourcesContent": ["const testableAccessors = {\n  Node: [\n    \"childNodes\",\n    \"parentNode\",\n    \"parentElement\",\n    \"textContent\",\n    \"ownerDocument\",\n    \"firstChild\",\n    \"lastChild\",\n    \"nextSibling\",\n    \"previousSibling\"\n  ],\n  ShadowRoot: [\"host\", \"styleSheets\"],\n  Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n  MutationObserver: []\n};\nconst testableMethods = {\n  Node: [\"contains\", \"getRootNode\"],\n  ShadowRoot: [\"getSelection\"],\n  Element: [],\n  MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nconst untaintedBaseIframeCleanup = {};\nconst isAngularZonePresent = () => {\n  return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n  if (untaintedBasePrototype[key])\n    return untaintedBasePrototype[key];\n  const defaultObj = globalThis[key];\n  const defaultPrototype = defaultObj.prototype;\n  const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n  const isUntaintedAccessors = Boolean(\n    accessorNames && // @ts-expect-error 2345\n    accessorNames.every(\n      (accessor) => {\n        var _a, _b;\n        return Boolean(\n          (_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n        );\n      }\n    )\n  );\n  const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n  const isUntaintedMethods = Boolean(\n    methodNames && methodNames.every(\n      // @ts-expect-error 2345\n      (method) => {\n        var _a;\n        return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n      }\n    )\n  );\n  if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n    untaintedBasePrototype[key] = defaultObj.prototype;\n    return defaultObj.prototype;\n  }\n  try {\n    const iframeEl = document.createElement(\"iframe\");\n    iframeEl.style.display = \"none\";\n    document.body.appendChild(iframeEl);\n    const win = iframeEl.contentWindow;\n    if (!win) return defaultObj.prototype;\n    const untaintedObject = win[key].prototype;\n    if (!untaintedObject) {\n      iframeEl.remove();\n      return defaultPrototype;\n    }\n    const ua = navigator.userAgent;\n    if (ua.includes(\"Safari\") && !ua.includes(\"Chrome\")) {\n      iframeEl.classList.add(\"rr-block\");\n      iframeEl.setAttribute(\"__rrwebUntaintedMutationObserver\", \"\");\n      untaintedBaseIframeCleanup[key] = () => iframeEl.remove();\n    } else {\n      iframeEl.remove();\n    }\n    return untaintedBasePrototype[key] = untaintedObject;\n  } catch {\n    return defaultPrototype;\n  }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n  var _a, _b;\n  const cached = (_a = untaintedAccessorCache[key]) == null ? void 0 : _a[accessor];\n  if (cached) return cached.call(instance);\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedAccessor = (_b = Object.getOwnPropertyDescriptor(\n    untaintedPrototype,\n    accessor\n  )) == null ? void 0 : _b.get;\n  if (!untaintedAccessor) return instance[accessor];\n  (untaintedAccessorCache[key] || (untaintedAccessorCache[key] = {}))[accessor] = untaintedAccessor;\n  return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n  const cacheKey = `${key}.${String(method)}`;\n  if (untaintedMethodCache[cacheKey])\n    return untaintedMethodCache[cacheKey].bind(\n      instance\n    );\n  const untaintedPrototype = getUntaintedPrototype(key);\n  const untaintedMethod = untaintedPrototype[method];\n  if (typeof untaintedMethod !== \"function\") return instance[method];\n  untaintedMethodCache[cacheKey] = untaintedMethod;\n  return untaintedMethod.bind(instance);\n}\nfunction ownerDocument(n) {\n  return getUntaintedAccessor(\"Node\", n, \"ownerDocument\");\n}\nfunction childNodes(n) {\n  return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n  return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n  return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n  return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction firstChild(n) {\n  return getUntaintedAccessor(\"Node\", n, \"firstChild\");\n}\nfunction lastChild(n) {\n  return getUntaintedAccessor(\"Node\", n, \"lastChild\");\n}\nfunction nextSibling(n) {\n  return getUntaintedAccessor(\"Node\", n, \"nextSibling\");\n}\nfunction previousSibling(n) {\n  return getUntaintedAccessor(\"Node\", n, \"previousSibling\");\n}\nfunction contains(n, other) {\n  return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n  return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n  if (!n || !(\"host\" in n)) return null;\n  return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n  return n.styleSheets;\n}\nfunction shadowRoot(n) {\n  if (!n || !(\"shadowRoot\" in n)) return null;\n  return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n  return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n  return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n  return [\n    getUntaintedPrototype(\"MutationObserver\").constructor,\n    untaintedBaseIframeCleanup[\"MutationObserver\"] ?? (() => {\n    })\n  ];\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n  nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction patch(source, name, replacement) {\n  try {\n    if (!(name in source)) {\n      return () => {\n      };\n    }\n    const original = source[name];\n    const wrapped = replacement(original);\n    if (typeof wrapped === \"function\") {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __rrweb_original__: {\n          enumerable: false,\n          value: original\n        }\n      });\n    }\n    source[name] = wrapped;\n    return () => {\n      source[name] = original;\n    };\n  } catch {\n    return () => {\n    };\n  }\n}\nconst index = {\n  ownerDocument,\n  childNodes,\n  parentNode,\n  parentElement,\n  textContent,\n  firstChild,\n  lastChild,\n  nextSibling,\n  previousSibling,\n  contains,\n  getRootNode,\n  host,\n  styleSheets,\n  shadowRoot,\n  querySelector,\n  querySelectorAll,\n  nowTimestamp,\n  mutationObserverCtor,\n  patch\n};\nexport {\n  childNodes,\n  contains,\n  index as default,\n  firstChild,\n  getRootNode,\n  getUntaintedAccessor,\n  getUntaintedMethod,\n  getUntaintedPrototype,\n  host,\n  isAngularZonePresent,\n  lastChild,\n  mutationObserverCtor,\n  nextSibling,\n  nowTimestamp,\n  ownerDocument,\n  parentElement,\n  parentNode,\n  patch,\n  previousSibling,\n  querySelector,\n  querySelectorAll,\n  shadowRoot,\n  styleSheets,\n  textContent\n};\n//# sourceMappingURL=utils.js.map\n", "import type {\n  listenerHandler,\n  RecordPlugin,\n  IWindow,\n  NetworkBody,\n  NetworkData,\n  NetworkHeaders,\n  NetworkInitiatorType,\n  NetworkRecordOptions,\n  NetworkRequest,\n} from '@rrweb/types';\nimport { patch } from '@rrweb/utils';\n\nexport type {\n  NetworkBody,\n  NetworkData,\n  NetworkHeaders,\n  NetworkInitiatorType,\n  NetworkRecordOptions,\n  NetworkRequest,\n} from '@rrweb/types';\n\nconst defaultNetworkOptions: NetworkRecordOptions = {\n  initiatorTypes: [\n    'audio',\n    'beacon',\n    'body',\n    'css',\n    'early-hint',\n    'embed',\n    'fetch',\n    'frame',\n    'iframe',\n    'icon',\n    'image',\n    'img',\n    'input',\n    'link',\n    'navigation',\n    'object',\n    'ping',\n    'script',\n    'track',\n    'video',\n    'xmlhttprequest',\n  ],\n  transformRequestFn: (request) => request,\n  recordHeaders: false,\n  recordBody: false,\n  recordInitialRequests: false,\n};\n\ntype networkCallback = (data: NetworkData) => void;\n\nconst isNavigationTiming = (\n  entry: PerformanceEntry,\n): entry is PerformanceNavigationTiming => entry.entryType === 'navigation';\nconst isResourceTiming = (\n  entry: PerformanceEntry,\n): entry is PerformanceResourceTiming => entry.entryType === 'resource';\n\ntype ObservedPerformanceEntry = (\n  | PerformanceNavigationTiming\n  | PerformanceResourceTiming\n) & {\n  responseStatus?: number;\n};\n\nfunction getPerformanceEntryInitiatorType(\n  entry: ObservedPerformanceEntry,\n): NetworkInitiatorType {\n  return isNavigationTiming(entry)\n    ? 'navigation'\n    : (entry.initiatorType as NetworkInitiatorType);\n}\n\nfunction shouldRecordPerformanceEntry(\n  entry: PerformanceEntry,\n  options: Required<NetworkRecordOptions>,\n): entry is ObservedPerformanceEntry {\n  return (\n    (isNavigationTiming(entry) || isResourceTiming(entry)) &&\n    options.initiatorTypes.includes(\n      getPerformanceEntryInitiatorType(entry as ObservedPerformanceEntry),\n    )\n  );\n}\n\nfunction initPerformanceObserver(\n  cb: networkCallback,\n  win: IWindow,\n  options: Required<NetworkRecordOptions>,\n) {\n  if (options.recordInitialRequests) {\n    const initialPerformanceEntries = win.performance\n      .getEntries()\n      .filter((entry): entry is ObservedPerformanceEntry =>\n        shouldRecordPerformanceEntry(entry, options),\n      );\n    cb({\n      requests: initialPerformanceEntries.map((entry) => ({\n        initiatorType: getPerformanceEntryInitiatorType(entry),\n        duration: entry.duration,\n        entryType: entry.entryType,\n        name: entry.name,\n        status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n        startTime: Math.round(entry.startTime),\n        endTime: Math.round(entry.responseEnd),\n      })),\n      isInitial: true,\n    });\n  }\n  const observer = new win.PerformanceObserver((entries) => {\n    const shouldRecordViaPerformanceObserver = (\n      entry: ObservedPerformanceEntry,\n    ) =>\n      options.recordBody || options.recordHeaders\n        ? entry.initiatorType !== 'xmlhttprequest' &&\n          entry.initiatorType !== 'fetch'\n        : true;\n    const performanceEntries = entries\n      .getEntries()\n      .filter(\n        (entry): entry is ObservedPerformanceEntry =>\n          shouldRecordPerformanceEntry(entry, options) &&\n          shouldRecordViaPerformanceObserver(entry),\n      );\n    cb({\n      requests: performanceEntries.map((entry) => ({\n        initiatorType: getPerformanceEntryInitiatorType(entry),\n        status: 'responseStatus' in entry ? entry.responseStatus : undefined,\n        startTime: Math.round(entry.startTime),\n        endTime: Math.round(entry.responseEnd),\n        duration: entry.duration,\n        entryType: entry.entryType,\n        name: entry.name,\n      })),\n    });\n  });\n  observer.observe({ entryTypes: ['navigation', 'resource'] });\n  return () => {\n    observer.disconnect();\n  };\n}\n\nfunction shouldRecordHeaders(\n  type: 'request' | 'response',\n  recordHeaders: NetworkRecordOptions['recordHeaders'],\n) {\n  return (\n    !!recordHeaders &&\n    (typeof recordHeaders === 'boolean' || recordHeaders[type])\n  );\n}\n\nfunction shouldRecordBody(\n  type: 'request' | 'response',\n  recordBody: NetworkRecordOptions['recordBody'],\n  headers: NetworkHeaders,\n  url?: string | URL | RequestInfo,\n) {\n  function matchesContentType(contentTypes: string[]) {\n    const contentTypeHeader = Object.keys(headers).find(\n      (key) => key.toLowerCase() === 'content-type',\n    );\n    const contentType = contentTypeHeader && headers[contentTypeHeader];\n    return contentTypes.some((ct) => contentType?.includes(ct));\n  }\n  if (isBlobUrl(url)) return false;\n  if (!recordBody) return false;\n  if (typeof recordBody === 'boolean') return true;\n  if (Array.isArray(recordBody)) return matchesContentType(recordBody);\n  const recordBodyType = recordBody[type];\n  if (typeof recordBodyType === 'boolean') return recordBodyType;\n  return matchesContentType(recordBodyType);\n}\n\nfunction isRequest(value: unknown): value is Request {\n  if (typeof Request === 'undefined') {\n    return false;\n  }\n  if (value instanceof Request) {\n    return true;\n  }\n  try {\n    return Object.prototype.toString.call(value) === '[object Request]';\n  } catch {\n    return false;\n  }\n}\n\nfunction isBlobUrl(url?: string | URL | RequestInfo) {\n  try {\n    if (typeof url === 'string') {\n      return url.startsWith('blob:');\n    }\n    if (url instanceof URL) {\n      return url.protocol === 'blob:';\n    }\n    if (isRequest(url)) {\n      return isBlobUrl(url.url);\n    }\n  } catch {\n    //\n  }\n  return false;\n}\n\nfunction isReadableStreamBody(\n  body: unknown,\n): body is ReadableStream<Uint8Array> {\n  return (\n    typeof body === 'object' &&\n    body !== null &&\n    typeof (body as ReadableStream<Uint8Array>).getReader === 'function' &&\n    typeof (body as ReadableStream<Uint8Array>).tee === 'function'\n  );\n}\n\nfunction stringifyFormData(body: FormData) {\n  const searchParams = new URLSearchParams();\n  body.forEach((value, key) => {\n    searchParams.append(\n      key,\n      typeof File !== 'undefined' && value instanceof File\n        ? value.name\n        : String(value),\n    );\n  });\n  return searchParams.toString();\n}\n\nfunction readXhrBody(\n  body: Document | XMLHttpRequestBodyInit | unknown | null | undefined,\n): NetworkBody {\n  if (body === undefined || body === null) {\n    return null;\n  }\n  if (typeof body === 'string') {\n    return body;\n  }\n  if (body instanceof URLSearchParams) {\n    return body.toString();\n  }\n  if (typeof FormData !== 'undefined' && body instanceof FormData) {\n    return stringifyFormData(body);\n  }\n  if (typeof Document !== 'undefined' && body instanceof Document) {\n    return body.textContent;\n  }\n  if (typeof Blob !== 'undefined' && body instanceof Blob) {\n    return `[rrweb/network] Cannot synchronously read body of type ${body.constructor.name}`;\n  }\n  if (\n    body instanceof ArrayBuffer ||\n    ArrayBuffer.isView(body as ArrayBufferView)\n  ) {\n    return `[rrweb/network] Cannot read binary body`;\n  }\n  try {\n    return JSON.stringify(body);\n  } catch {\n    return `[rrweb/network] Failed to stringify body`;\n  }\n}\n\nasync function readFetchBody(requestOrResponse: Request | Response) {\n  return new Promise<NetworkBody>((resolve) => {\n    const timeout = setTimeout(\n      () => resolve('[rrweb/network] Timeout while reading body'),\n      500,\n    );\n    try {\n      requestOrResponse\n        .clone()\n        .text()\n        .then(\n          (text) => resolve(text),\n          (error: unknown) =>\n            resolve(`[rrweb/network] Failed to read body: ${String(error)}`),\n        )\n        .finally(() => clearTimeout(timeout));\n    } catch {\n      clearTimeout(timeout);\n      resolve('[rrweb/network] Failed to read body');\n    }\n  });\n}\n\nasync function getRequestPerformanceEntry(\n  win: IWindow,\n  initiatorType: string,\n  url: string,\n  after?: number,\n  before?: number,\n  attempt = 0,\n): Promise<PerformanceResourceTiming | null> {\n  if (attempt > 10) {\n    return null;\n  }\n  const urlPerformanceEntries = win.performance.getEntriesByName(\n    url,\n  ) as PerformanceResourceTiming[];\n  const performanceEntry = findLast(\n    urlPerformanceEntries,\n    (entry) =>\n      isResourceTiming(entry) &&\n      entry.initiatorType === initiatorType &&\n      (!after || entry.startTime >= after) &&\n      (!before || entry.startTime <= before),\n  );\n  if (!performanceEntry) {\n    await new Promise((resolve) => setTimeout(resolve, 50 * attempt));\n    return getRequestPerformanceEntry(\n      win,\n      initiatorType,\n      url,\n      after,\n      before,\n      attempt + 1,\n    );\n  }\n  return performanceEntry;\n}\n\nfunction initXhrObserver(\n  cb: networkCallback,\n  win: IWindow,\n  options: Required<NetworkRecordOptions>,\n): listenerHandler {\n  if (!options.initiatorTypes.includes('xmlhttprequest')) {\n    return () => {\n      //\n    };\n  }\n  const recordRequestHeaders = shouldRecordHeaders(\n    'request',\n    options.recordHeaders,\n  );\n  const recordResponseHeaders = shouldRecordHeaders(\n    'response',\n    options.recordHeaders,\n  );\n  const restorePatch = patch(win.XMLHttpRequest.prototype, 'open', ((\n    originalOpen: typeof XMLHttpRequest.prototype.open,\n  ) => {\n    return function (\n      this: XMLHttpRequest,\n      method: string,\n      url: string | URL,\n      async = true,\n      username?: string | null,\n      password?: string | null,\n    ) {\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      const xhr = this;\n      const req = new Request(url, { method });\n      const networkRequest: Partial<NetworkRequest> = {};\n      let after: number | undefined;\n      let before: number | undefined;\n      const requestHeaders: NetworkHeaders = {};\n      const originalSetRequestHeader = xhr.setRequestHeader.bind(xhr);\n      xhr.setRequestHeader = (header: string, value: string) => {\n        requestHeaders[header] = value;\n        return originalSetRequestHeader(header, value);\n      };\n      if (recordRequestHeaders) {\n        networkRequest.requestHeaders = requestHeaders;\n      }\n      const originalSend = xhr.send.bind(xhr);\n      xhr.send = (body) => {\n        if (\n          shouldRecordBody('request', options.recordBody, requestHeaders, url)\n        ) {\n          networkRequest.requestBody = readXhrBody(body);\n        }\n        after = win.performance.now();\n        return originalSend(body);\n      };\n      xhr.addEventListener('readystatechange', () => {\n        if (xhr.readyState !== xhr.DONE) {\n          return;\n        }\n        before = win.performance.now();\n        const responseHeaders: NetworkHeaders = {};\n        const rawHeaders = xhr.getAllResponseHeaders();\n        const headers = rawHeaders.trim().split(/[\\r\\n]+/);\n        headers.forEach((line) => {\n          const parts = line.split(': ');\n          const header = parts.shift();\n          const value = parts.join(': ');\n          if (header) {\n            responseHeaders[header] = value;\n          }\n        });\n        if (recordResponseHeaders) {\n          networkRequest.responseHeaders = responseHeaders;\n        }\n        if (\n          shouldRecordBody('response', options.recordBody, responseHeaders, url)\n        ) {\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n          networkRequest.responseBody = readXhrBody(xhr.response);\n        }\n        getRequestPerformanceEntry(\n          win,\n          'xmlhttprequest',\n          req.url,\n          after,\n          before,\n        )\n          .then((entry) => {\n            if (!entry) {\n              // https://github.com/rrweb-io/rrweb/pull/1105#issuecomment-1953808336\n              const requests = prepareRequestWithoutPerformance(\n                req,\n                networkRequest,\n              );\n              cb({ requests });\n              return;\n            }\n\n            const requests = prepareRequest(\n              entry,\n              method,\n              xhr.status,\n              networkRequest,\n            );\n            cb({ requests });\n          })\n          .catch(() => {\n            //\n          });\n      });\n      originalOpen.call(xhr, method, url, async, username, password);\n    };\n  }) as (...args: unknown[]) => unknown);\n  return () => {\n    restorePatch();\n  };\n}\n\nfunction initFetchObserver(\n  cb: networkCallback,\n  win: IWindow,\n  options: Required<NetworkRecordOptions>,\n): listenerHandler {\n  if (!options.initiatorTypes.includes('fetch')) {\n    return () => {\n      //\n    };\n  }\n  const recordRequestHeaders = shouldRecordHeaders(\n    'request',\n    options.recordHeaders,\n  );\n  const recordResponseHeaders = shouldRecordHeaders(\n    'response',\n    options.recordHeaders,\n  );\n  const restorePatch = patch(win, 'fetch', ((originalFetch: typeof fetch) => {\n    return async function (\n      url: URL | RequestInfo,\n      init?: RequestInit | undefined,\n    ) {\n      const req = new Request(url, init);\n      let res: Response | undefined;\n      const networkRequest: Partial<NetworkRequest> = {};\n      let after: number | undefined;\n      let before: number | undefined;\n      try {\n        const requestHeaders: NetworkHeaders = {};\n        req.headers.forEach((value, header) => {\n          requestHeaders[header] = value;\n        });\n        if (recordRequestHeaders) {\n          networkRequest.requestHeaders = requestHeaders;\n        }\n        if (\n          !isReadableStreamBody(init?.body) &&\n          shouldRecordBody('request', options.recordBody, requestHeaders, url)\n        ) {\n          networkRequest.requestBody = await readFetchBody(req);\n        }\n        after = win.performance.now();\n        res = isRequest(url)\n          ? await originalFetch(req)\n          : await originalFetch(url, init);\n        before = win.performance.now();\n        const responseHeaders: NetworkHeaders = {};\n        res.headers.forEach((value, header) => {\n          responseHeaders[header] = value;\n        });\n        if (recordResponseHeaders) {\n          networkRequest.responseHeaders = responseHeaders;\n        }\n        if (\n          shouldRecordBody('response', options.recordBody, responseHeaders, url)\n        ) {\n          networkRequest.responseBody = await readFetchBody(res);\n        }\n        return res;\n      } finally {\n        getRequestPerformanceEntry(win, 'fetch', req.url, after, before)\n          .then((entry) => {\n            if (!entry) {\n              // https://github.com/rrweb-io/rrweb/pull/1105#issuecomment-1953808336\n              const requests = prepareRequestWithoutPerformance(\n                req,\n                networkRequest,\n              );\n              cb({ requests });\n              return;\n            }\n\n            const requests = prepareRequest(\n              entry,\n              req.method,\n              res?.status,\n              networkRequest,\n            );\n            cb({ requests });\n          })\n          .catch(() => {\n            //\n          });\n      }\n    };\n  }) as (...args: unknown[]) => unknown);\n  return () => {\n    restorePatch();\n  };\n}\n\nfunction initNetworkObserver(\n  callback: networkCallback,\n  win: IWindow, // top window or in an iframe\n  options: NetworkRecordOptions,\n): listenerHandler {\n  if (!('performance' in win)) {\n    return () => {\n      //\n    };\n  }\n  const networkOptions = (\n    options\n      ? Object.assign({}, defaultNetworkOptions, options)\n      : defaultNetworkOptions\n  ) as Required<NetworkRecordOptions>;\n\n  const cb: networkCallback = (data) => {\n    const requests = data.requests\n      .map((request) => networkOptions.transformRequestFn(request))\n      .filter(Boolean) as NetworkRequest[];\n\n    if (requests.length > 0 || data.isInitial) {\n      callback({ ...data, requests });\n    }\n  };\n  const performanceObserver = initPerformanceObserver(cb, win, networkOptions);\n  let xhrObserver: listenerHandler = () => {\n    //\n  };\n  let fetchObserver: listenerHandler = () => {\n    //\n  };\n  if (networkOptions.recordHeaders || networkOptions.recordBody) {\n    xhrObserver = initXhrObserver(cb, win, networkOptions);\n    fetchObserver = initFetchObserver(cb, win, networkOptions);\n  }\n  return () => {\n    performanceObserver();\n    xhrObserver();\n    fetchObserver();\n  };\n}\n\nfunction prepareRequest(\n  entry: PerformanceResourceTiming,\n  method: string | undefined,\n  status: number | undefined,\n  networkRequest: Partial<NetworkRequest>,\n): NetworkRequest[] {\n  const request: NetworkRequest = {\n    method,\n    initiatorType: entry.initiatorType as NetworkInitiatorType,\n    duration: entry.duration,\n    entryType: entry.entryType,\n    name: entry.name,\n    status,\n    startTime: Math.round(entry.startTime),\n    endTime: Math.round(entry.responseEnd),\n    requestHeaders: networkRequest.requestHeaders,\n    requestBody: networkRequest.requestBody,\n    responseHeaders: networkRequest.responseHeaders,\n    responseBody: networkRequest.responseBody,\n  };\n\n  return [request];\n}\n\nfunction prepareRequestWithoutPerformance(\n  req: Request,\n  networkRequest: Partial<NetworkRequest>,\n): NetworkRequest[] {\n  const request: NetworkRequest = {\n    name: req.url,\n    method: req.method,\n    requestHeaders: networkRequest.requestHeaders,\n    requestBody: networkRequest.requestBody,\n    responseHeaders: networkRequest.responseHeaders,\n    responseBody: networkRequest.responseBody,\n  };\n\n  return [request];\n}\n\nfunction findLast<T>(\n  array: Array<T>,\n  predicate: (value: T) => boolean,\n): T | undefined {\n  const length = array.length;\n  for (let i = length - 1; i >= 0; i -= 1) {\n    if (predicate(array[i])) {\n      return array[i];\n    }\n  }\n}\n\nexport const PLUGIN_NAME = 'rrweb/network@1';\n\nexport const getRecordNetworkPlugin: (\n  options?: NetworkRecordOptions,\n) => RecordPlugin = (options) => ({\n  name: PLUGIN_NAME,\n  observer: initNetworkObserver as RecordPlugin['observer'],\n  options: options,\n});\n"],
  "mappings": "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",
  "names": ["patch", "source", "name", "replacement", "original", "wrapped", "e", "defaultNetworkOptions", "request", "isNavigationTiming", "entry", "isResourceTiming", "getPerformanceEntryInitiatorType", "shouldRecordPerformanceEntry", "options", "initPerformanceObserver", "cb", "win", "initialPerformanceEntries", "observer", "entries", "shouldRecordViaPerformanceObserver", "performanceEntries", "shouldRecordHeaders", "type", "recordHeaders", "shouldRecordBody", "recordBody", "headers", "url", "matchesContentType", "contentTypes", "contentTypeHeader", "key", "contentType", "ct", "isBlobUrl", "recordBodyType", "isRequest", "value", "isReadableStreamBody", "body", "stringifyFormData", "searchParams", "readXhrBody", "readFetchBody", "requestOrResponse", "resolve", "timeout", "text", "error", "getRequestPerformanceEntry", "initiatorType", "after", "before", "attempt", "urlPerformanceEntries", "performanceEntry", "findLast", "initXhrObserver", "recordRequestHeaders", "recordResponseHeaders", "restorePatch", "originalOpen", "method", "async", "username", "password", "xhr", "req", "networkRequest", "requestHeaders", "originalSetRequestHeader", "header", "originalSend", "responseHeaders", "line", "parts", "requests", "prepareRequestWithoutPerformance", "prepareRequest", "initFetchObserver", "originalFetch", "init", "res", "initNetworkObserver", "callback", "networkOptions", "data", "__spreadProps", "__spreadValues", "performanceObserver", "xhrObserver", "fetchObserver", "status", "array", "predicate", "length", "i", "PLUGIN_NAME", "getRecordNetworkPlugin"]
}
