UNPKG

@energica-city/shared-amplify-utils

Version:

Shared utilities for AWS Amplify projects

81 lines 9.58 kB
/** * Shared sanitization utilities for middleware logging */ /** * Checks if a field name indicates sensitive data */ function isSensitiveField(fieldName) { const lowerKey = fieldName.toLowerCase(); return (lowerKey.includes('password') || lowerKey.includes('token') || lowerKey.includes('secret') || lowerKey.includes('key') || lowerKey.includes('auth')); } /** * Sanitizes an array by recursively sanitizing each item */ function sanitizeArray(obj, config, currentDepth) { return obj.map(item => sanitizeObject(item, config, currentDepth + 1)); } /** * Sanitizes an object's properties */ function sanitizeObjectProperties(obj, config, currentDepth) { const { excludeFields = [] } = config; const sanitized = {}; for (const [key, value] of Object.entries(obj)) { if (excludeFields.includes(key)) { sanitized[key] = '[REDACTED]'; } else if (isSensitiveField(key)) { sanitized[key] = '[REDACTED]'; } else if (key === 'body' && typeof value === 'string') { try { const parsedBody = JSON.parse(value); const sanitizedBody = sanitizeObject(parsedBody, config, currentDepth + 1); sanitized[key] = JSON.stringify(sanitizedBody); } catch { // Not a valid JSON string, treat as a regular field sanitized[key] = sanitizeObject(value, config, currentDepth + 1); } } else { sanitized[key] = sanitizeObject(value, config, currentDepth + 1); } } return sanitized; } /** * Checks if a value is a primitive type */ function isPrimitive(obj) { return (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean'); } /** * Sanitizes an object by removing sensitive fields and limiting depth */ export function sanitizeObject(obj, config = {}, currentDepth = 0) { const { maxDepth = 3 } = config; if (currentDepth >= maxDepth) { return '[Object: max depth reached]'; } if (obj === null || obj === undefined) { return obj; } if (isPrimitive(obj)) { return obj; } if (Array.isArray(obj)) { return sanitizeArray(obj, config, currentDepth); } if (typeof obj === 'object') { return sanitizeObjectProperties(obj, config, currentDepth); } return '[Unknown type]'; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbWlkZGxld2FyZS91dGlscy9zYW5pdGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFVSDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsU0FBaUI7SUFDekMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLE9BQU8sQ0FDTCxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUM3QixRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUMxQixRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUMzQixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN4QixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUMxQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxhQUFhLENBQ3BCLEdBQWMsRUFDZCxNQUEwQixFQUMxQixZQUFvQjtJQUVwQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHdCQUF3QixDQUMvQixHQUE0QixFQUM1QixNQUEwQixFQUMxQixZQUFvQjtJQUVwQixNQUFNLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN0QyxNQUFNLFNBQVMsR0FBNEIsRUFBRSxDQUFDO0lBRTlDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDL0MsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUNoQyxDQUFDO2FBQU0sSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDaEMsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUNsQyxVQUFVLEVBQ1YsTUFBTSxFQUNOLFlBQVksR0FBRyxDQUFDLENBQ2pCLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxvREFBb0Q7Z0JBQ3BELFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEdBQVk7SUFDL0IsT0FBTyxDQUNMLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFDdkIsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixPQUFPLEdBQUcsS0FBSyxTQUFTLENBQ3pCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUFZLEVBQ1osU0FBNkIsRUFBRSxFQUMvQixZQUFZLEdBQUcsQ0FBQztJQUVoQixNQUFNLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVoQyxJQUFJLFlBQVksSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLHdCQUF3QixDQUM3QixHQUE4QixFQUM5QixNQUFNLEVBQ04sWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgc2FuaXRpemF0aW9uIHV0aWxpdGllcyBmb3IgbWlkZGxld2FyZSBsb2dnaW5nXG4gKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzYW5pdGl6YXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW5pdGl6YXRpb25Db25maWcge1xuICBleGNsdWRlRmllbGRzPzogc3RyaW5nW107XG4gIG1heERlcHRoPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpZWxkIG5hbWUgaW5kaWNhdGVzIHNlbnNpdGl2ZSBkYXRhXG4gKi9cbmZ1bmN0aW9uIGlzU2Vuc2l0aXZlRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbG93ZXJLZXkgPSBmaWVsZE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChcbiAgICBsb3dlcktleS5pbmNsdWRlcygncGFzc3dvcmQnKSB8fFxuICAgIGxvd2VyS2V5LmluY2x1ZGVzKCd0b2tlbicpIHx8XG4gICAgbG93ZXJLZXkuaW5jbHVkZXMoJ3NlY3JldCcpIHx8XG4gICAgbG93ZXJLZXkuaW5jbHVkZXMoJ2tleScpIHx8XG4gICAgbG93ZXJLZXkuaW5jbHVkZXMoJ2F1dGgnKVxuICApO1xufVxuXG4vKipcbiAqIFNhbml0aXplcyBhbiBhcnJheSBieSByZWN1cnNpdmVseSBzYW5pdGl6aW5nIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZUFycmF5KFxuICBvYmo6IHVua25vd25bXSxcbiAgY29uZmlnOiBTYW5pdGl6YXRpb25Db25maWcsXG4gIGN1cnJlbnREZXB0aDogbnVtYmVyLFxuKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIG9iai5tYXAoaXRlbSA9PiBzYW5pdGl6ZU9iamVjdChpdGVtLCBjb25maWcsIGN1cnJlbnREZXB0aCArIDEpKTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZXMgYW4gb2JqZWN0J3MgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBzYW5pdGl6ZU9iamVjdFByb3BlcnRpZXMoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbmZpZzogU2FuaXRpemF0aW9uQ29uZmlnLFxuICBjdXJyZW50RGVwdGg6IG51bWJlcixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgeyBleGNsdWRlRmllbGRzID0gW10gfSA9IGNvbmZpZztcbiAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBpZiAoZXhjbHVkZUZpZWxkcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBzYW5pdGl6ZWRba2V5XSA9ICdbUkVEQUNURURdJztcbiAgICB9IGVsc2UgaWYgKGlzU2Vuc2l0aXZlRmllbGQoa2V5KSkge1xuICAgICAgc2FuaXRpemVkW2tleV0gPSAnW1JFREFDVEVEXSc7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdib2R5JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZEJvZHkgPSBzYW5pdGl6ZU9iamVjdChcbiAgICAgICAgICBwYXJzZWRCb2R5LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjdXJyZW50RGVwdGggKyAxLFxuICAgICAgICApO1xuICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IEpTT04uc3RyaW5naWZ5KHNhbml0aXplZEJvZHkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIE5vdCBhIHZhbGlkIEpTT04gc3RyaW5nLCB0cmVhdCBhcyBhIHJlZ3VsYXIgZmllbGRcbiAgICAgICAgc2FuaXRpemVkW2tleV0gPSBzYW5pdGl6ZU9iamVjdCh2YWx1ZSwgY29uZmlnLCBjdXJyZW50RGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2FuaXRpemVkW2tleV0gPSBzYW5pdGl6ZU9iamVjdCh2YWx1ZSwgY29uZmlnLCBjdXJyZW50RGVwdGggKyAxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2FuaXRpemVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgcHJpbWl0aXZlIHR5cGVcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUob2JqOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiBvYmogPT09ICdib29sZWFuJ1xuICApO1xufVxuXG4vKipcbiAqIFNhbml0aXplcyBhbiBvYmplY3QgYnkgcmVtb3Zpbmcgc2Vuc2l0aXZlIGZpZWxkcyBhbmQgbGltaXRpbmcgZGVwdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplT2JqZWN0KFxuICBvYmo6IHVua25vd24sXG4gIGNvbmZpZzogU2FuaXRpemF0aW9uQ29uZmlnID0ge30sXG4gIGN1cnJlbnREZXB0aCA9IDAsXG4pOiB1bmtub3duIHtcbiAgY29uc3QgeyBtYXhEZXB0aCA9IDMgfSA9IGNvbmZpZztcblxuICBpZiAoY3VycmVudERlcHRoID49IG1heERlcHRoKSB7XG4gICAgcmV0dXJuICdbT2JqZWN0OiBtYXggZGVwdGggcmVhY2hlZF0nO1xuICB9XG5cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoaXNQcmltaXRpdmUob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIHNhbml0aXplQXJyYXkob2JqLCBjb25maWcsIGN1cnJlbnREZXB0aCk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gc2FuaXRpemVPYmplY3RQcm9wZXJ0aWVzKFxuICAgICAgb2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgY29uZmlnLFxuICAgICAgY3VycmVudERlcHRoLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gJ1tVbmtub3duIHR5cGVdJztcbn1cbiJdfQ==