Files
ukmesh/backend/package.json
T
gadgethd 1ebc496965 Map UI redesign, live-path visibility, feed latency, and security hardening (#19)
* Fix map node freshness consistency

* Harden output, ingest, caches, and WebSocket limits

* Enforce public visibility across derived data

* Harden proxy and operator deployment boundary

* Make owner grants authoritative and reconcile ACLs safely

* Bound path, spam, and statistics analysis

* Make link and coverage jobs crash-safe

* Implement strategic security remediation

* Fix production cutover configuration

* Fix disabled viewshed worker health signal

* Serve stale stats during background refresh

* Retain stale stats through refresh windows

* Bound analytics work to protect ingestion

* Prioritize summary warmup over chart scans

* Throttle path history rebuilds

* Bound path history result memory

* Stream path history aggregation

* Give bounded path rebuild one CPU

* Serve stale charts during bounded refresh

* Prioritize startup stats before chart scans

* Bound path history segment cardinality

* Pin path rebuild context to privacy generation

* Self-host original frontend fonts

* Allow bounded path rebuild to complete

* Improve live map UI and low-latency group feed

- Dock node details on the right with selection highlight and collapsible layers
- Add node legend, 24h activity sparkline, copy-link, and layout/overlap fixes
- Keep all repeaters visible during Live Path focus
- Send GroupText feed packets immediately over WebSocket (no batch delay)
- Cache expensive stats/observer activity more aggressively to protect ingest
- Remove stale local planning/audit markdown from the tree

* fix(ci): supply OPERATOR_SITE_TOKEN for compose validation

Workers/Compose CI failed because docker-compose requires
OPERATOR_SITE_TOKEN. Add CI placeholders for that and MQTT_PASSWORD.
2026-07-27 02:39:12 +01:00

44 lines
1.3 KiB
JSON

{
"name": "meshcore-analytics-backend",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"build": "tsc",
"dev": "tsx watch src/index.ts",
"spam:recompute": "node dist/tools/recomputeSpamSuspects.js",
"spam:messages": "node dist/tools/recomputeSpamMessages.js",
"db:migrate": "node dist/tools/migrate.js",
"stats:backfill-rollups": "node dist/tools/backfillStatsRollups.js",
"owner-auth:inventory": "node dist/tools/inventoryOwnerAuthorization.js",
"bench:decode": "tsx src/tools/benchmarkPacketDecode.ts",
"load:realtime": "tsx src/tools/loadRealtime.ts",
"test": "node --import tsx --test $(find src -name '*.test.ts' -print)",
"typecheck": "tsc --noEmit",
"start": "node dist/index.js"
},
"dependencies": {
"@michaelhart/meshcore-decoder": "^0.3.0",
"compression": "^1.7.4",
"cors": "^2.8.5",
"dockerode": "^5.0.1",
"express": "^4.19.2",
"express-rate-limit": "^7.4.1",
"ioredis": "^5.4.1",
"mqtt": "^5.10.1",
"pg": "^8.13.1",
"ws": "^8.18.0"
},
"devDependencies": {
"@types/compression": "^1.7.5",
"@types/cors": "^2.8.17",
"@types/dockerode": "^4.0.1",
"@types/express": "^4.17.21",
"@types/node": "^20.17.6",
"@types/pg": "^8.11.10",
"@types/ws": "^8.5.12",
"tsx": "^4.19.1",
"typescript": "^5.6.3"
}
}