@embrace-io/web-sdk
Version:
56 lines (55 loc) • 1.47 kB
JavaScript
import { ATTR_URL_FULL, ATTR_URL_PATH, ATTR_URL_QUERY } from "@opentelemetry/semantic-conventions";
//#region src/sdk/defaultAttributeScrubbers.ts
const HOST_CREDENTIALS_REGEX = /\/\/(.+):(.+)@(.+)\//;
const DEFAULT_SENSITIVE_TOKENS = [
"AWSAccessKeyId",
"Signature",
"sig",
"`X-Goog-Signature",
"password",
"auth",
"pw",
"token"
];
const scrubURL = ({ value, queryParamRegex, scrubPath, scrubQuery }) => {
let scrubbed = value;
if (scrubPath) scrubbed = scrubbed.replace(HOST_CREDENTIALS_REGEX, "//REDACTED:REDACTED@$3/");
if (scrubQuery) scrubbed = scrubbed.replaceAll(queryParamRegex, "$1$2=REDACTED");
return scrubbed;
};
const getDefaultAttributeScrubbers = (additionalSensitiveQueryTokens) => {
const sensitiveQueryTokens = [...DEFAULT_SENSITIVE_TOKENS, ...additionalSensitiveQueryTokens || []];
const queryParamRegex = new RegExp(`(^|&|\\?)(${sensitiveQueryTokens.join("|")})=[^&]+`, "g");
return [
{
key: ATTR_URL_FULL,
scrub: (value) => scrubURL({
value,
queryParamRegex,
scrubPath: true,
scrubQuery: true
})
},
{
key: ATTR_URL_PATH,
scrub: (value) => scrubURL({
value,
queryParamRegex,
scrubPath: true,
scrubQuery: false
})
},
{
key: ATTR_URL_QUERY,
scrub: (value) => scrubURL({
value,
queryParamRegex,
scrubPath: false,
scrubQuery: true
})
}
];
};
//#endregion
export { getDefaultAttributeScrubbers };
//# sourceMappingURL=defaultAttributeScrubbers.js.map