import { registerCleanup } from '../utils/shutdown.js' import { onCotChange, pruneStaleEntities } from '../utils/cotStore.js' import { getCotSnapshotOpts } from '../utils/cotSnapshot.js' import { notifySubscribersForEntity, notifySubscribersRemove, } from '../utils/cotSubscribers.js' import { COT_PRUNE_INTERVAL_MS } from '../utils/constants.js' let pruneTimer = null let offChange = () => {} export default defineNitroPlugin(() => { offChange = onCotChange((changeEvent, payload) => { if (changeEvent === 'update' && payload?.entity) { notifySubscribersForEntity('update', { entity: payload.entity }, payload.entity).catch(() => {}) } else if (changeEvent === 'remove' && payload?.id) { notifySubscribersRemove(payload.id).catch(() => {}) } }) pruneTimer = setInterval(() => { pruneStaleEntities(getCotSnapshotOpts()).catch(() => {}) }, COT_PRUNE_INTERVAL_MS) registerCleanup(() => { offChange() if (pruneTimer) clearInterval(pruneTimer) pruneTimer = null }) })