@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
86 lines (83 loc) • 2.78 kB
JavaScript
/**
* @package @bitrix24/b24jssdk
* @version 2.0.0
* @copyright (c) 2026 Bitrix24
* @license MIT
* @see https://github.com/bitrix24/b24jssdk
* @see https://bitrix24.github.io/b24jssdk/
*/
;
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
const SENSITIVE_PARAM_KEYS = [
"auth",
"password",
"token",
"secret",
"access_token",
"refresh_token",
"client_secret",
"application_token",
"sessid",
"key",
"signature"
];
const REDACTED_PLACEHOLDER = "***REDACTED***";
const QS_SENSITIVE_RE = new RegExp(
`([?&]|^)(${SENSITIVE_PARAM_KEYS.join("|")})=[^&#;]*`,
"gi"
);
function isPlainObject(value) {
return value !== null && typeof value === "object" && !Array.isArray(value);
}
__name(isPlainObject, "isPlainObject");
function redactQueryString(value) {
if (!value.includes("=")) return value;
return value.replace(
QS_SENSITIVE_RE,
(_match, sep, key) => `${sep}${key}=${REDACTED_PLACEHOLDER}`
);
}
__name(redactQueryString, "redactQueryString");
function redactValue(value, depth) {
if (typeof value === "string") return redactQueryString(value);
if (depth <= 0) return value;
if (isPlainObject(value)) return redactObject(value, depth - 1);
if (Array.isArray(value)) return value.map((item) => redactValue(item, depth));
return value;
}
__name(redactValue, "redactValue");
function redactObject(source, depth) {
const sanitized = { ...source };
for (const key of Object.keys(sanitized)) {
if (SENSITIVE_PARAM_KEYS.includes(key.toLowerCase())) {
sanitized[key] = REDACTED_PLACEHOLDER;
continue;
}
sanitized[key] = redactValue(sanitized[key], depth);
}
return sanitized;
}
__name(redactObject, "redactObject");
const DEFAULT_REDACT_DEPTH = 2;
function redactSensitiveParams(params) {
if (!isPlainObject(params)) return params;
return redactObject(params, DEFAULT_REDACT_DEPTH);
}
__name(redactSensitiveParams, "redactSensitiveParams");
function redactSensitiveUrl(url, extraKeys = []) {
if (typeof url !== "string" || !url.includes("=")) return url;
if (extraKeys.length === 0) return redactQueryString(url);
const escaped = extraKeys.map((key) => key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
const re = new RegExp(
`([?&]|^)(${[...SENSITIVE_PARAM_KEYS, ...escaped].join("|")})=[^&#;]*`,
"gi"
);
return url.replace(re, (_match, sep, key) => `${sep}${key}=${REDACTED_PLACEHOLDER}`);
}
__name(redactSensitiveUrl, "redactSensitiveUrl");
exports.REDACTED_PLACEHOLDER = REDACTED_PLACEHOLDER;
exports.SENSITIVE_PARAM_KEYS = SENSITIVE_PARAM_KEYS;
exports.redactSensitiveParams = redactSensitiveParams;
exports.redactSensitiveUrl = redactSensitiveUrl;
//# sourceMappingURL=redact.cjs.map