{"version":3,"sources":["../src/next-pages-router.ts","../src/core/redactor.ts"],"sourcesContent":["import type { RumInstance, RumOptions } from './types';\nimport { redactUrl } from './core/redactor';\n\nexport interface NextPagesRouterOptions {\n  redact?: RumOptions['redact'];\n}\n\nexport async function enableNextPagesRouter(rum: RumInstance, options: NextPagesRouterOptions = {}): Promise<() => void> {\n  const mod = await import('next/router');\n  const router = mod.default;\n  let active: ReturnType<RumInstance['startSpan']> | undefined;\n  const redactRouteUrl = (url: string) => redactUrl(url, options.redact?.urlQueryKeys);\n  const onStart = (url: string) => {\n    active?.setStatus('ERROR', 'Navigation superseded');\n    active?.end();\n    active = rum.startSpan('routeChange', { 'next.router': 'pages', 'route.url': redactRouteUrl(url) });\n  };\n  const onComplete = (url: string) => {\n    active?.setAttribute('route.url', redactRouteUrl(url));\n    active?.end();\n    active = undefined;\n  };\n  const onError = (err: Error, url: string) => {\n    active?.setAttribute('route.url', redactRouteUrl(url));\n    active?.setStatus('ERROR', err.message);\n    active?.end();\n    active = undefined;\n  };\n  router.events.on('routeChangeStart', onStart);\n  router.events.on('routeChangeComplete', onComplete);\n  router.events.on('routeChangeError', onError);\n  return () => {\n    router.events.off('routeChangeStart', onStart);\n    router.events.off('routeChangeComplete', onComplete);\n    router.events.off('routeChangeError', onError);\n  };\n}\n","const DEFAULT_QUERY_KEYS = ['password', 'token', 'secret', 'api_key', 'authorization'];\n\nexport function redactUrl(rawUrl: string, extraKeys: string[] = []): string {\n  const sensitive = new Set([...DEFAULT_QUERY_KEYS, ...extraKeys].map((key) => key.toLowerCase()));\n  try {\n    const url = new URL(rawUrl, typeof location !== 'undefined' ? location.href : 'https://example.invalid');\n    url.searchParams.forEach((_value, key) => {\n      if (sensitive.has(key.toLowerCase())) url.searchParams.set(key, '[REDACTED]');\n    });\n    return rawUrl.startsWith('http') ? url.toString() : `${url.pathname}${url.search}${url.hash}`;\n  } catch {\n    return rawUrl;\n  }\n}\n\nexport function redactHeaders(headers: Record<string, string>, keys: string[] = []): Record<string, string> {\n  const sensitive = new Set(keys.map((key) => key.toLowerCase()));\n  return Object.fromEntries(Object.entries(headers).filter(([key]) => !sensitive.has(key.toLowerCase())));\n}\n\nexport function redactStackTrace(stack: string, extraKeys: string[] = []): string {\n  return stack.replace(/https?:\\/\\/[^\\s\"'<>]+/g, (match) => {\n    const trailing = match.match(/[)\\].,;]+$/)?.[0] ?? '';\n    const url = trailing ? match.slice(0, -trailing.length) : match;\n    return `${redactUrl(url, extraKeys)}${trailing}`;\n  });\n}\n\nexport function redactInteractionText(element: Element | null, text: string): string {\n  if (element instanceof HTMLInputElement) {\n    const type = element.type.toLowerCase();\n    if (type === 'password' || type === 'email' || type === 'tel' || type === 'credit-card') {\n      return '[REDACTED]';\n    }\n  }\n  return text.length > 100 ? text.slice(0, 100) : text;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAM,qBAAqB,CAAC,YAAY,SAAS,UAAU,WAAW,eAAe;AAE9E,SAAS,UAAU,QAAgB,YAAsB,CAAC,GAAW;AAC1E,QAAM,YAAY,IAAI,IAAI,CAAC,GAAG,oBAAoB,GAAG,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;AAC/F,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,QAAQ,OAAO,aAAa,cAAc,SAAS,OAAO,yBAAyB;AACvG,QAAI,aAAa,QAAQ,CAAC,QAAQ,QAAQ;AACxC,UAAI,UAAU,IAAI,IAAI,YAAY,CAAC,EAAG,KAAI,aAAa,IAAI,KAAK,YAAY;AAAA,IAC9E,CAAC;AACD,WAAO,OAAO,WAAW,MAAM,IAAI,IAAI,SAAS,IAAI,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM,GAAG,IAAI,IAAI;AAAA,EAC7F,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ADNA,eAAsB,sBAAsB,KAAkB,UAAkC,CAAC,GAAwB;AACvH,QAAM,MAAM,MAAM,OAAO,aAAa;AACtC,QAAM,SAAS,IAAI;AACnB,MAAI;AACJ,QAAM,iBAAiB,CAAC,QAAa;AAXvC;AAW0C,qBAAU,MAAK,aAAQ,WAAR,mBAAgB,YAAY;AAAA;AACnF,QAAM,UAAU,CAAC,QAAgB;AAC/B,qCAAQ,UAAU,SAAS;AAC3B,qCAAQ;AACR,aAAS,IAAI,UAAU,eAAe,EAAE,eAAe,SAAS,aAAa,eAAe,GAAG,EAAE,CAAC;AAAA,EACpG;AACA,QAAM,aAAa,CAAC,QAAgB;AAClC,qCAAQ,aAAa,aAAa,eAAe,GAAG;AACpD,qCAAQ;AACR,aAAS;AAAA,EACX;AACA,QAAM,UAAU,CAAC,KAAY,QAAgB;AAC3C,qCAAQ,aAAa,aAAa,eAAe,GAAG;AACpD,qCAAQ,UAAU,SAAS,IAAI;AAC/B,qCAAQ;AACR,aAAS;AAAA,EACX;AACA,SAAO,OAAO,GAAG,oBAAoB,OAAO;AAC5C,SAAO,OAAO,GAAG,uBAAuB,UAAU;AAClD,SAAO,OAAO,GAAG,oBAAoB,OAAO;AAC5C,SAAO,MAAM;AACX,WAAO,OAAO,IAAI,oBAAoB,OAAO;AAC7C,WAAO,OAAO,IAAI,uBAAuB,UAAU;AACnD,WAAO,OAAO,IAAI,oBAAoB,OAAO;AAAA,EAC/C;AACF;","names":[]}