MrAlders0n
5ccb1a2ce3
fix(api): warn on untrusted proxies and tighten config validation
...
Warn at startup when limits are on without trusted_proxies, and once when a
request carries forwarding headers Beacon ignores. Reject short or whitespace
admin keys and negative durations. Key default-window stats by hour, return
500 for scope lookup failures, and validate IATA path params.
2026-10-02 16:53:32 -04:00
MrAlders0n
98006a9364
feat(stats): serve historical stats from hourly rollups
...
Stats endpoints read hourly rollup tables filled once per closed hour by one
advisory-locked task, instead of materialized views that re-scanned every
observation on each refresh. IATA-set tables give exact distinct counts for any
IATA set or region. Cleanup holds raw rows for unrolled hours (up to 24h).
Adds /stats/series; ingest keeps packet observation counts, observer last IATA,
channel message counts and trace tag summaries. 001_baseline.sql is rewritten,
so pre-release 2.0 databases must be recreated. See docs/historical-stats.md.
2026-10-02 07:43:56 -04:00
MrAlders0n
7392fdd2d6
fix(meshmapper): create group member IATAs and import zone names and centers
2026-09-30 23:21:44 -04:00
MrAlders0n
f8ee1ac884
feat(meshmapper): import regional channels and scope channel lists by region
2026-09-30 23:09:40 -04:00
MrAlders0n
38b1a206b1
fix(meshmapper): respect MeshMapper's per-endpoint rate limits
2026-09-30 22:56:10 -04:00
MrAlders0n
a970484b00
feat(meshmapper): import zone groups as regions
2026-09-30 22:56:10 -04:00
MrAlders0n
bfda0d5281
feat(meshmapper): discover scope sources from the zone list
2026-09-30 22:46:00 -04:00
MrAlders0n
9a4e17b270
feat(meshmapper): import zones for every known IATA
2026-09-30 22:23:37 -04:00
MrAlders0n
e2b64f2a36
chore: version bump v2.0.0
2026-09-30 22:14:11 -04:00
MrAlders0n
2f49ffb3a3
feat(api): filter scope lists by region and catalogue membership
...
Region-filtered /scopes and /stats/scopes now list manual scopes configured
for the region and imported scopes whose MeshMapper catalogue includes the
IATA, instead of inferring membership from observed traffic. Filtered
/scopes returns string[] like the unfiltered call.
Manual scopes now require a region in config.
2026-09-30 22:05:04 -04:00
MrAlders0n
0e242574fb
feat(meshmapper): import region boundaries from the Zones API
...
Imported boundaries override borderFile on the border map and for foreign marking, falling back to the manual border when MeshMapper has none.
2026-09-30 12:38:36 -04:00
MrAlders0n
d733975165
fix(backup): abort exports on shutdown and sweep stale staging dirs
...
srv.Shutdown never cancelled the request context, so a SIGTERM mid-export left the plaintext dump and pg_service.conf in TMPDIR. The handler now derives its context from the app context and the router removes staging dirs older than 20 minutes at startup.
2026-09-30 10:31:08 -04:00
MrAlders0n
5cf060114a
feat: add bounded CPU profiling ( #182 )
...
* feat: add bounded CPU profiling
* fix(profiling): defer cooldown-skipped samples and configure triggers
2026-09-30 07:52:59 -04:00
n30nex
c18e059e0d
feat(scopes): import cached regional MeshMapper catalogues
2026-09-30 07:19:03 -04:00
MrAlders0n
1887fccb8d
perf(ingest): reduce database work and buffer MQTT bursts ( #179 )
2026-09-27 22:56:03 -04:00
MrAlders0n
dec643a2ad
feat(ws): opt-in allowed origins and observer key ( #170 )
2026-09-27 11:41:11 -04:00
n30nex
20691dc5a3
feat(backup): verify native archives offline without extraction ( #160 )
2026-09-23 20:18:45 -04:00
n30nex
a25e2675c8
feat(backup): add protected database and config download ( #154 )
2026-09-23 20:13:40 -04:00
n30nex
4d2642abec
feat(admin): add protected account lifecycle endpoints ( #149 )
2026-09-23 20:10:35 -04:00
n30nex
951b79bf6e
refactor(api): stabilize router settings and admin route wiring ( #155 )
2026-09-19 21:10:45 -04:00
n30nex
6aba17c75e
feat(nodes): indicate repeaters outside configured local borders ( #153 )
2026-09-19 15:27:34 -04:00
n30nex
c7ace0ce0e
feat(ws): limit connection attempts and signal capacity shedding ( #141 )
2026-09-19 13:28:47 -04:00
n30nex
6540b9253d
feat(admin): expose selected startup configuration ( #147 )
2026-09-19 10:36:30 -04:00
n30nex
dab228e9bb
feat(logging): configure levels and structured runtime output ( #144 )
...
* feat(logging): configure levels and structured runtime output
* fix(logging): bound request-derived log fields
* fix(logging): retain malformed IATA source attributes safely
* test(logging): capture structured REST rate-limit records
2026-09-19 10:36:26 -04:00
n30nex
595ef4442b
feat(api): rate limit REST requests by trusted client IP ( #140 )
2026-09-19 08:43:24 -04:00
n30nex
93f85cab51
feat(auth): protect the admin subtree with a bearer key ( #146 )
2026-09-18 06:18:27 -04:00
n30nex
9164659544
feat(backup): export private database and saved-config bundles ( #151 )
...
* feat(backup): export bounded database and saved-config bundles
* test(backup): preserve synthetic channel keys in exports
* fix(backup): check writable file closure before publication
2026-09-18 06:17:52 -04:00
n30nex
22410cf4a6
fix(api): trust client IP headers only from configured proxies ( #133 )
2026-09-09 20:42:35 -04:00
n30nex
88bc0dc88a
feat(retention): age out unreferenced observers when enabled ( #126 )
2026-09-09 18:45:08 -04:00
MrAlders0n
7d759d0a0f
perf: known_routes retention, digest identity, and a working batched reconfirm ( #98 )
...
* fix: cascade channel_messages on packet delete
* rebuild known_routes keyed on (iata, path_key)
* add route retention delete, batch reconfirm, path_key upsert
* compute route path_key in store, add DeleteOldRoutes
* add routes retention config
* wire route retention into cleanup, batch reconfirm
* prune routes in reconfirm task, not cleanup
* expand routes retention docs in example config
2026-08-12 09:30:03 -04:00
Enot (ded) Skelly
201cd9e364
chore: version bump v1.6.0
2026-07-24 13:31:23 -07:00
Enot (ded) Skelly
3cad2dfda1
feat: process messages for new channels at boot
...
any new channel added to config will get backfilled if there
are any messages to decrypt
closes : #68
2026-07-24 13:27:27 -07:00
Enot (ded) Skelly
99d7eb0bab
feat: add node stale/delete config
...
closes : #93
2026-07-24 13:09:51 -07:00
Enot (ded) Skelly
8e2798612b
feat: add clock drift tracking
...
closes #71
2026-07-23 13:34:41 -07:00
MrAlders0n
d113036414
feat(beacon): route ingest through the presence coalescer
2026-07-20 08:55:18 -07:00
Enot (ded) Skelly
4860921e90
chore: version bump v1.5.4
2026-06-24 08:04:54 -07:00
Enot (ded) Skelly
86b0549c75
chore: version bump v1.5.3
2026-06-20 10:33:54 -07:00
Enot (ded) Skelly
3d43600632
fix: forgot swagger
2026-06-20 10:28:51 -07:00
Enot (ded) Skelly
82ede1e124
chore: version bump v1.5.1
2026-06-20 10:26:13 -07:00
Enot (ded) Skelly
5fdd97f478
chore: version bump 1.4.1 to 1.5.0
...
lots of tests and some small refactors
2026-06-15 15:12:22 -07:00
Enot (ded) Skelly
3105eba8e0
chore(keystore): move entryExists into keystore and add tests
2026-06-15 14:38:48 -07:00
Enot (ded) Skelly
ecde7957f7
feat(config): pull out resolution into package and add tests
...
also adds a string method for pretty config printing
2026-06-15 14:35:14 -07:00
Enot (ded) Skelly
94fbab0294
chore: version bump v1.4.1
2026-06-12 11:16:50 -07:00
Enot (ded) Skelly
41bccb10b1
docs: document binary builds
2026-06-12 11:15:01 -07:00
Enot (ded) Skelly
eb8a76efca
chore: version bump v1.4.0
2026-06-12 10:58:22 -07:00
Enot (ded) Skelly
4ebe4c869b
feat: add route and neighbor reconfirmation task
...
prunes stale and ambiguous routes and neighbors
keep that data clean
2026-06-12 10:54:06 -07:00
Enot (ded) Skelly
044aecbd3c
feat: background task scheduler
...
move refresh views and delete tasks to scheduler
add new config for refresh and cleanup intervals
new deployments can set these in minutes to see data faster
2026-06-12 10:28:32 -07:00
Enot (ded) Skelly
c86bad3875
chore: typo in refresh view comment and add note about node type func
...
NodeTypeName is fine as is with possible concatenation
of the value as there is unlikely to be more than 256
node types
2026-06-12 08:49:41 -07:00
Enot (ded) Skelly
061f629c37
feat: add graceful shutdown timeout to prevent possible hangs
2026-06-12 08:40:22 -07:00
Enot (ded) Skelly
432cfe8c57
chore: rename mustEnv to getEnv
...
more clear as it only logs not fails
2026-06-12 08:34:39 -07:00