Files
kestrelos/server/plugins/cotLifecycle.js
T
Madison Grubb aa8a0bd83f
PR / lint (pull_request) Failing after 31s
PR / test (pull_request) Successful in 45s
PR / docker-build (pull_request) Successful in 1m3s
PR / e2e (pull_request) Successful in 1m33s
Add ADS-B, AIS, and ALPR map layers with live CoT streaming.
Ingest aircraft and vessel tracks via OSINT feeds and tactical CoT, expose viewport-filtered SSE to the map, and add an OSM ALPR layer with tiled caching and performant marker sync.
2026-06-24 16:24:41 -04:00

33 lines
1.0 KiB
JavaScript

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
})
})