@clipwhisperer/common
Version:
ClipWhisperer Common - Shared library providing core utilities, database schemas, authentication, bucket management, and common functionality across all ClipWhisperer microservices
73 lines (72 loc) • 2.06 kB
JavaScript
;
/**
* Metadata Utilities
* Centralized metadata handling and sanitization functions
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.sanitizeMetadataValue = sanitizeMetadataValue;
exports.createMetadata = createMetadata;
exports.mergeMetadata = mergeMetadata;
exports.extractCommonMetadata = extractCommonMetadata;
exports.createRequestMetadata = createRequestMetadata;
/**
* Sanitize metadata value for safe storage
*/
function sanitizeMetadataValue(value) {
if (!value)
return "";
// Remove potentially problematic characters
return value
.replace(/[\r\n\t]/g, " ") // Replace newlines and tabs with spaces
.replace(/[^\x20-\x7E]/g, "") // Remove non-printable characters
.trim()
.substring(0, 1000); // Limit length to prevent storage issues
}
/**
* Create standardized metadata object
*/
function createMetadata(data) {
const metadata = {};
for (const [key, value] of Object.entries(data)) {
if (value !== undefined && value !== null) {
metadata[key] = sanitizeMetadataValue(String(value));
}
}
return metadata;
}
/**
* Merge metadata objects safely
*/
function mergeMetadata(...metadataObjects) {
const result = {};
for (const metadata of metadataObjects) {
if (metadata) {
Object.assign(result, metadata);
}
}
return result;
}
/**
* Extract common metadata fields
*/
function extractCommonMetadata(source) {
return createMetadata({
id: source.id,
title: source.title,
description: source.description,
createdAt: source.createdAt || new Date().toISOString(),
updatedAt: source.updatedAt || new Date().toISOString(),
duration: source.duration,
fileSize: source.fileSize,
});
}
/**
* Create request metadata
*/
function createRequestMetadata(requestId, additionalData) {
return createMetadata({
requestId,
timestamp: new Date().toISOString(),
...additionalData,
});
}