UNPKG

@bitrix24/b24jssdk

Version:

Bitrix24 REST API JavaScript SDK

86 lines (83 loc) 2.78 kB
/** * @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/ */ 'use strict'; 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