{"version":3,"sources":["node_modules/@newrelic/browser-agent/dist/esm/common/deny-list/deny-list.js"],"sourcesContent":["/** An array of filter objects {hostname, pathname} for identifying XHR events to be excluded from collection.\n * @see {@link https://docs.newrelic.com/docs/browser/new-relic-browser/configuration/filter-ajax-request-events/ Filter AjaxRequest events}\n * @type {Array.<{hostname: string, pathname: string}>}\n */\nvar denyList = [];\n\n/**\n * Evaluates whether an XHR event should be included for collection based on the {@link denyList|AjaxRequest deny list}.\n * @param {Object} params - object with properties of the XHR event\n * @returns {boolean} `true` if request does not match any entries of {@link denyList|deny list}; else `false`\n */\nexport function shouldCollectEvent(params) {\n if (!params || hasUndefinedHostname(params)) return false;\n if (denyList.length === 0) return true;\n for (var i = 0; i < denyList.length; i++) {\n var parsed = denyList[i];\n if (parsed.hostname === '*') {\n return false;\n }\n if (domainMatchesPattern(parsed.hostname, params.hostname) && comparePath(parsed.pathname, params.pathname)) {\n return false;\n }\n }\n return true;\n}\nexport function hasUndefinedHostname(params) {\n return params.hostname === undefined; // requests with an undefined hostname (e.g., data URLs) should not be collected.\n}\n\n/**\n * Initializes the {@link denyList|XHR deny list} by extracting hostname and pathname from an array of filter strings.\n * @param {string[]} denyListConfig - array of URL filters to identify XHR requests to be excluded from collection\n */\nexport function setDenyList(denyListConfig) {\n denyList = [];\n if (!denyListConfig || !denyListConfig.length) {\n return;\n }\n for (var i = 0; i < denyListConfig.length; i++) {\n let url = denyListConfig[i];\n if (!url) continue; // ignore bad values like undefined or empty strings\n\n if (url.indexOf('http://') === 0) {\n url = url.substring(7);\n } else if (url.indexOf('https://') === 0) {\n url = url.substring(8);\n }\n const firstSlash = url.indexOf('/');\n let host, pathname;\n if (firstSlash > 0) {\n host = url.substring(0, firstSlash);\n pathname = url.substring(firstSlash);\n } else {\n host = url;\n pathname = '';\n }\n let [hostname] = host.split(':');\n denyList.push({\n hostname,\n pathname\n });\n }\n}\n/**\n * Returns true if the right side of `domain` (end of string) matches `pattern`.\n * @param {string} pattern - a string to be matched against the end of `domain` string\n * @param {string} domain - a domain string with no protocol or path (e.g., app1.example.com)\n * @returns {boolean} `true` if domain matches pattern; else `false`\n */\nfunction domainMatchesPattern(pattern, domain) {\n if (pattern.length > domain.length) {\n return false;\n }\n return domain.indexOf(pattern) === domain.length - pattern.length;\n}\n\n/**\n * Returns true if a URL path matches a pattern string, disregarding leading slashes.\n * @param {string} pattern - a string to compare with path (e.g., api/v1)\n * @param {string} path - a string representing a URL path (e.g., /api/v1)\n * @returns {boolean} `true` if path and pattern are an exact string match (except for leading slashes); else `false`\n */\nfunction comparePath(pattern, path) {\n if (pattern.indexOf('/') === 0) {\n pattern = pattern.substring(1);\n }\n if (path.indexOf('/') === 0) {\n path = path.substring(1);\n }\n\n // No path in pattern means match all paths.\n if (pattern === '') {\n return true;\n }\n return pattern === path;\n}"],"mappings":"AAIA,IAAIA,EAAW,CAAC,EAOT,SAASC,EAAmBC,EAAQ,CACzC,GAAI,CAACA,GAAUC,EAAqBD,CAAM,EAAG,MAAO,GACpD,GAAIF,EAAS,SAAW,EAAG,MAAO,GAClC,QAASI,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAASL,EAASI,CAAC,EAIvB,GAHIC,EAAO,WAAa,KAGpBC,EAAqBD,EAAO,SAAUH,EAAO,QAAQ,GAAKK,EAAYF,EAAO,SAAUH,EAAO,QAAQ,EACxG,MAAO,EAEX,CACA,MAAO,EACT,CACO,SAASC,EAAqBD,EAAQ,CAC3C,OAAOA,EAAO,WAAa,MAC7B,CAMO,SAASM,EAAYC,EAAgB,CAE1C,GADAT,EAAW,CAAC,EACR,GAACS,GAAkB,CAACA,EAAe,QAGvC,QAASL,EAAI,EAAGA,EAAIK,EAAe,OAAQL,IAAK,CAC9C,IAAIM,EAAMD,EAAeL,CAAC,EAC1B,GAAI,CAACM,EAAK,SAENA,EAAI,QAAQ,SAAS,IAAM,EAC7BA,EAAMA,EAAI,UAAU,CAAC,EACZA,EAAI,QAAQ,UAAU,IAAM,IACrCA,EAAMA,EAAI,UAAU,CAAC,GAEvB,IAAMC,EAAaD,EAAI,QAAQ,GAAG,EAC9BE,EAAMC,EACNF,EAAa,GACfC,EAAOF,EAAI,UAAU,EAAGC,CAAU,EAClCE,EAAWH,EAAI,UAAUC,CAAU,IAEnCC,EAAOF,EACPG,EAAW,IAEb,GAAI,CAACC,CAAQ,EAAIF,EAAK,MAAM,GAAG,EAC/BZ,EAAS,KAAK,CACZ,SAAAc,EACA,SAAAD,CACF,CAAC,CACH,CACF,CAOA,SAASP,EAAqBS,EAASC,EAAQ,CAC7C,OAAID,EAAQ,OAASC,EAAO,OACnB,GAEFA,EAAO,QAAQD,CAAO,IAAMC,EAAO,OAASD,EAAQ,MAC7D,CAQA,SAASR,EAAYQ,EAASE,EAAM,CASlC,OARIF,EAAQ,QAAQ,GAAG,IAAM,IAC3BA,EAAUA,EAAQ,UAAU,CAAC,GAE3BE,EAAK,QAAQ,GAAG,IAAM,IACxBA,EAAOA,EAAK,UAAU,CAAC,GAIrBF,IAAY,GACP,GAEFA,IAAYE,CACrB","names":["denyList","shouldCollectEvent","params","hasUndefinedHostname","i","parsed","domainMatchesPattern","comparePath","setDenyList","denyListConfig","url","firstSlash","host","pathname","hostname","pattern","domain","path"],"x_google_ignoreList":[0]}