{"version":3,"file":"defaultAttributeScrubbers.cjs","names":["ATTR_URL_FULL","SEMATTRS_HTTP_URL","ATTR_URL_PATH","ATTR_URL_QUERY"],"sources":["../../src/sdk/defaultAttributeScrubbers.ts"],"sourcesContent":["import {\n  ATTR_URL_FULL,\n  ATTR_URL_PATH,\n  ATTR_URL_QUERY,\n  SEMATTRS_HTTP_URL,\n} from '@opentelemetry/semantic-conventions';\nimport type { AttributeScrubber } from '../common/index.ts';\n\nconst HOST_CREDENTIALS_REGEX = /\\/\\/(.+):(.+)@(.+)\\//;\n\n// https://github.com/open-telemetry/semantic-conventions/blob/3b64cb31022feaacb410bfd6e571c1f19b5fbce0/docs/registry/attributes/url.md?plain=1#L41\nconst DEFAULT_SENSITIVE_TOKENS = [\n  'AWSAccessKeyId',\n  'Signature',\n  'sig',\n  '`X-Goog-Signature',\n  'password',\n  'auth',\n  'pw',\n  'token',\n];\n\ntype scrubArgs = {\n  value: string;\n  queryParamRegex: RegExp;\n  scrubPath: boolean;\n  scrubQuery: boolean;\n};\n\nconst scrubURL = ({\n  value,\n  queryParamRegex,\n  scrubPath,\n  scrubQuery,\n}: scrubArgs) => {\n  let scrubbed = value;\n\n  if (scrubPath) {\n    // scrub credentials passed via URL in form of `https://username:password@www.example.com/`\n    scrubbed = scrubbed.replace(\n      HOST_CREDENTIALS_REGEX,\n      '//REDACTED:REDACTED@$3/',\n    );\n  }\n\n  if (scrubQuery) {\n    // scrub query string parameters of the form \"key=sensitiveValue\"\n    scrubbed = scrubbed.replaceAll(queryParamRegex, '$1$2=REDACTED');\n  }\n\n  return scrubbed;\n};\n\nexport const getDefaultAttributeScrubbers = (\n  additionalSensitiveQueryTokens?: string[],\n): AttributeScrubber[] => {\n  const sensitiveQueryTokens = [\n    ...DEFAULT_SENSITIVE_TOKENS,\n    ...(additionalSensitiveQueryTokens || []),\n  ];\n\n  const queryParamRegex = new RegExp(\n    `(^|&|\\\\?)(${sensitiveQueryTokens.join('|')})=[^&]+`,\n    'g',\n  );\n\n  return [\n    {\n      // https://github.com/open-telemetry/semantic-conventions/blob/3b64cb31022feaacb410bfd6e571c1f19b5fbce0/docs/registry/attributes/url.md?plain=1#L30\n      key: ATTR_URL_FULL,\n      scrub: (value: string) =>\n        scrubURL({ value, queryParamRegex, scrubPath: true, scrubQuery: true }),\n    },\n    {\n      // Adding to catch the deprecated attribute that was replaced by ATTR_URL_FULL\n      key: SEMATTRS_HTTP_URL,\n      scrub: (value: string) =>\n        scrubURL({ value, queryParamRegex, scrubPath: true, scrubQuery: true }),\n    },\n    {\n      // https://github.com/open-telemetry/semantic-conventions/blob/3b64cb31022feaacb410bfd6e571c1f19b5fbce0/docs/registry/attributes/url.md?plain=1#L57\n      key: ATTR_URL_PATH,\n      scrub: (value: string) =>\n        scrubURL({\n          value,\n          queryParamRegex,\n          scrubPath: true,\n          scrubQuery: false,\n        }),\n    },\n    {\n      // https://github.com/open-telemetry/semantic-conventions/blob/3b64cb31022feaacb410bfd6e571c1f19b5fbce0/docs/registry/attributes/url.md?plain=1#L59\n      key: ATTR_URL_QUERY,\n      scrub: (value: string) =>\n        scrubURL({\n          value,\n          queryParamRegex,\n          scrubPath: false,\n          scrubQuery: true,\n        }),\n    },\n\n    // NOTE that url.original could contain sensitive information however this is intentionally not scrubbed as per the\n    // semantic convention:\n    // https://github.com/open-telemetry/semantic-conventions/blob/3b64cb31022feaacb410bfd6e571c1f19b5fbce0/docs/registry/attributes/url.md?plain=1#L54\n  ];\n};\n"],"mappings":";;;;AAQA,MAAM,yBAAyB;AAG/B,MAAM,2BAA2B;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AASD,MAAM,YAAY,EAChB,OACA,iBACA,WACA,iBACe;CACf,IAAI,WAAW;AAEf,KAAI,UAEF,YAAW,SAAS,QAClB,wBACA,0BACD;AAGH,KAAI,WAEF,YAAW,SAAS,WAAW,iBAAiB,gBAAgB;AAGlE,QAAO;;AAGT,MAAa,gCACX,mCACwB;CACxB,MAAM,uBAAuB,CAC3B,GAAG,0BACH,GAAI,kCAAkC,EAAE,CACzC;CAED,MAAM,kBAAkB,IAAI,OAC1B,aAAa,qBAAqB,KAAK,IAAI,CAAC,UAC5C,IACD;AAED,QAAO;EACL;GAEE,KAAKA,oCAAAA;GACL,QAAQ,UACN,SAAS;IAAE;IAAO;IAAiB,WAAW;IAAM,YAAY;IAAM,CAAC;GAC1E;EACD;GAEE,KAAKC,oCAAAA;GACL,QAAQ,UACN,SAAS;IAAE;IAAO;IAAiB,WAAW;IAAM,YAAY;IAAM,CAAC;GAC1E;EACD;GAEE,KAAKC,oCAAAA;GACL,QAAQ,UACN,SAAS;IACP;IACA;IACA,WAAW;IACX,YAAY;IACb,CAAC;GACL;EACD;GAEE,KAAKC,oCAAAA;GACL,QAAQ,UACN,SAAS;IACP;IACA;IACA,WAAW;IACX,YAAY;IACb,CAAC;GACL;EAKF"}