xypriss-security
Version:
XyPriss Security is an advanced JavaScript security library designed for enterprise applications. It provides military-grade encryption, secure data structures, quantum-resistant cryptography, and comprehensive security utilities for modern web applicatio
184 lines (181 loc) • 4.82 kB
JavaScript
;
/**
* Metadata Manager Module
* Handles metadata tracking for SecureObject values
*/
/**
* Manages metadata for SecureObject values
*/
class MetadataManager {
constructor() {
this.metadata = new Map();
}
/**
* Updates metadata for a key
*/
update(key, type, isSecure, isAccess = false) {
const existing = this.metadata.get(key);
const now = new Date();
if (existing && isAccess) {
existing.lastAccessed = now;
existing.accessCount++;
}
else {
this.metadata.set(key, {
type,
isSecure,
created: existing?.created ?? now,
lastAccessed: now,
accessCount: (existing?.accessCount ?? 0) + 1,
});
}
}
/**
* Gets metadata for a specific key
*/
get(key) {
return this.metadata.get(key);
}
/**
* Gets all metadata
*/
getAll() {
return new Map(this.metadata);
}
/**
* Checks if metadata exists for a key
*/
has(key) {
return this.metadata.has(key);
}
/**
* Deletes metadata for a key
*/
delete(key) {
return this.metadata.delete(key);
}
/**
* Clears all metadata
*/
clear() {
this.metadata.clear();
}
/**
* Gets the number of metadata entries
*/
get size() {
return this.metadata.size;
}
/**
* Gets all keys that have metadata
*/
keys() {
return Array.from(this.metadata.keys());
}
/**
* Gets all metadata values
*/
values() {
return Array.from(this.metadata.values());
}
/**
* Gets all metadata entries as [key, metadata] pairs
*/
entries() {
return Array.from(this.metadata.entries());
}
/**
* Gets statistics about the metadata
*/
getStats() {
const entries = this.values();
if (entries.length === 0) {
return {
totalEntries: 0,
secureEntries: 0,
totalAccesses: 0,
averageAccesses: 0,
oldestEntry: null,
newestEntry: null,
};
}
const secureEntries = entries.filter(meta => meta.isSecure).length;
const totalAccesses = entries.reduce((sum, meta) => sum + meta.accessCount, 0);
const averageAccesses = totalAccesses / entries.length;
const dates = entries.map(meta => meta.created);
const oldestEntry = new Date(Math.min(...dates.map(d => d.getTime())));
const newestEntry = new Date(Math.max(...dates.map(d => d.getTime())));
return {
totalEntries: entries.length,
secureEntries,
totalAccesses,
averageAccesses,
oldestEntry,
newestEntry,
};
}
/**
* Filters metadata by criteria
*/
filter(predicate) {
const filtered = new Map();
for (const [key, metadata] of this.metadata.entries()) {
if (predicate(key, metadata)) {
filtered.set(key, metadata);
}
}
return filtered;
}
/**
* Gets metadata for secure values only
*/
getSecureMetadata() {
return this.filter((_, metadata) => metadata.isSecure);
}
/**
* Gets metadata for non-secure values only
*/
getNonSecureMetadata() {
return this.filter((_, metadata) => !metadata.isSecure);
}
/**
* Gets the most accessed keys
*/
getMostAccessed(limit = 10) {
return this.entries()
.sort(([, a], [, b]) => b.accessCount - a.accessCount)
.slice(0, limit);
}
/**
* Gets the least accessed keys
*/
getLeastAccessed(limit = 10) {
return this.entries()
.sort(([, a], [, b]) => a.accessCount - b.accessCount)
.slice(0, limit);
}
/**
* Converts metadata to a plain object for serialization
*/
toObject() {
return Object.fromEntries(this.metadata.entries());
}
/**
* Creates a MetadataManager from a plain object
*/
static fromObject(obj) {
const manager = new MetadataManager();
for (const [key, metadata] of Object.entries(obj)) {
// Ensure dates are properly converted
const convertedMetadata = {
...metadata,
created: new Date(metadata.created),
lastAccessed: new Date(metadata.lastAccessed),
};
manager.metadata.set(key, convertedMetadata);
}
return manager;
}
}
exports.MetadataManager = MetadataManager;
//# sourceMappingURL=metadata-manager.js.map