UNPKG

@embrace-io/web-sdk

Version:
1 lines 3.84 kB
{"version":3,"file":"defaultAttributeScrubbers.cjs","names":["ATTR_URL_FULL","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} 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 // 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":";;;AAOA,MAAM,yBAAyB;AAG/B,MAAM,2BAA2B;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AASA,MAAM,YAAY,EAChB,OACA,iBACA,WACA,iBACe;CACf,IAAI,WAAW;CAEf,IAAI,WAEF,WAAW,SAAS,QAClB,wBACA,yBACF;CAGF,IAAI,YAEF,WAAW,SAAS,WAAW,iBAAiB,eAAe;CAGjE,OAAO;AACT;AAEA,MAAa,gCACX,mCACwB;CACxB,MAAM,uBAAuB,CAC3B,GAAG,0BACH,GAAI,kCAAkC,CAAC,CACzC;CAEA,MAAM,kBAAkB,IAAI,OAC1B,aAAa,qBAAqB,KAAK,GAAG,EAAE,UAC5C,GACF;CAEA,OAAO;EACL;GAEE,KAAKA,oCAAAA;GACL,QAAQ,UACN,SAAS;IAAE;IAAO;IAAiB,WAAW;IAAM,YAAY;GAAK,CAAC;EAC1E;EACA;GAEE,KAAKC,oCAAAA;GACL,QAAQ,UACN,SAAS;IACP;IACA;IACA,WAAW;IACX,YAAY;GACd,CAAC;EACL;EACA;GAEE,KAAKC,oCAAAA;GACL,QAAQ,UACN,SAAS;IACP;IACA;IACA,WAAW;IACX,YAAY;GACd,CAAC;EACL;CAKF;AACF"}