monitor/core/modules/ConfigStore/changelog.ts
2025-04-16 22:30:27 +07:00

31 lines
923 B
TypeScript

import { z } from "zod";
// Configs
const daysMs = 24 * 60 * 60 * 1000;
export const CCLOG_SIZE_LIMIT = 32;
export const CCLOG_RETENTION = 120 * daysMs;
export const CCLOG_VERSION = 1;
//Schemas
const ConfigChangelogEntrySchema = z.object({
author: z.string().min(1),
ts: z.number().int().nonnegative(),
keys: z.string().array(),
});
export const ConfigChangelogFileSchema = z.object({
version: z.literal(1),
log: z.array(ConfigChangelogEntrySchema),
});
export type ConfigChangelogEntry = z.infer<typeof ConfigChangelogEntrySchema>;
export type ConfigChangelogFile = z.infer<typeof ConfigChangelogFileSchema>;
//Optimizer
export const truncateConfigChangelog = (log: ConfigChangelogEntry[]): ConfigChangelogEntry[] => {
if (!log.length) return [];
const now = Date.now();
return log
.filter(entry => (now - entry.ts) <= CCLOG_RETENTION)
.slice(-CCLOG_SIZE_LIMIT);
}