Commit Graph

356 Commits

Author SHA1 Message Date
you 09e3a7b4d1 Fix region filter resetting analytics tab to overview
Track current active tab in _currentTab variable so that
loadAnalytics() re-renders the current tab instead of always
resetting to 'overview' when region filter changes.
2026-03-21 07:00:29 +00:00
you 55c45c964b region filter: add label, ARIA, dropdown mode for >4 regions
- Add 'Region:' label before filter controls
- ARIA roles: group with aria-label, checkbox roles on pills, aria-checked
- When >4 regions: render multi-select dropdown with checkboxes
  - Trigger shows summary (All / selected names / N selected)
  - All option at top, click-outside closes
- Pill bar mode unchanged for ≤4 regions (just added label + ARIA)
2026-03-21 06:57:48 +00:00
you 86c6665c6a chore: remove bare channel names from rainbow table — only #channels are valid 2026-03-21 06:48:36 +00:00
you 94854c8d40 channels: only show decrypted messages, hide encrypted garbage
- Filter on decoded.type === 'CHAN' (successful decryption) only
- Skip GRP_TXT packets (failed decryption) entirely
- Channel key = decoded channel name instead of hash byte
- Remove channelHashNames lookup, encrypted field, isCollision logic
- Remove encrypted UI badges/indicators from frontend
- Channels with 0 decrypted messages no longer appear
2026-03-21 06:45:45 +00:00
you 472635ba69 Include channel-rainbow.json in Docker image 2026-03-21 06:38:02 +00:00
you 7ac051d2a9 Add rainbow table of pre-computed channel keys for common MeshCore channels
- channel-rainbow.json: 592 pre-computed SHA256-derived keys for common
  channel names (cities, topics, ham radio, emergency, etc.)
- server.js: Load rainbow table at startup as lowest-priority key source
- config.example.json: Add #LongFast to hashChannels list

Key derivation verified against MeshCore source: SHA256('#name')[:16bytes].
Rainbow table boosted decryption from ~48% to ~88% in testing.
2026-03-21 06:35:14 +00:00
you 1a7145fc46 Use hashChannels for derived keys, keep only hardcoded public key in channelKeys
Channel keys for #test, #sf, #wardrive, #yo, #bot, #queer, #bookclub, #shtf
are all SHA256(channelName).slice(0,32) — no need to hardcode them. Move to
hashChannels array for auto-derivation. Only the MeshCore default public key
(8b3387e9c5cdea6ac9e5edbaa115cd72) needs explicit specification since it's
not derived from its channel name.
2026-03-21 06:22:05 +00:00
you 8ad2348a16 fix: simplify channel key scheme + add CHAN packet detail renderer
- Remove composite key scheme (ch_/unk_ prefixes) that broke URL routing
  due to # in channel names. Use plain numeric channelHash as key instead.
- All packets with same hash byte go in one bucket; name is set from
  first successful decryption.
- Add packet detail renderer for decoded CHAN type showing channel name,
  sender, and sender timestamp.
- Update cache buster for packets.js.
2026-03-21 06:11:01 +00:00
you 6402d291c1 fix: normalize packet hash case for deeplink lookups 2026-03-21 05:50:29 +00:00
you f303b7a4b9 fix: regional filters — proper indexed queries + frontend integration
Fixes Kpa-clawbot/meshcore-analyzer#111
2026-03-21 05:48:54 +00:00
you 378adc03c9 fix: restore channel message decryption — correct hash matching in API
The /api/channels endpoint was returning simple numeric hash (e.g. '45') while
/api/channels/:hash/messages was using composite keys (e.g. 'ch_#LongFast',
'unk_45') internally. This mismatch meant no channel ever matched, so all
messages appeared encrypted.

Fix: return the composite key as the hash field from /api/channels so the
frontend passes the correct identifier. Also add encodeURIComponent() to
channel API calls in the frontend since composite keys can contain '#'.
2026-03-21 05:47:51 +00:00
you cd0a225bc7 fix: rewrite favorites filter — correct packet matching + feed list filtering 2026-03-21 05:43:52 +00:00
you b236b41568 feat: add regional filters to all tabs
Fixes Kpa-clawbot/meshcore-analyzer#111
2026-03-21 05:41:02 +00:00
you 17f8d09f3e fix: favorites filter only affects packet animations, not node markers 2026-03-21 05:37:22 +00:00
you 27f4af3f3b fix: validate ADVERT data to prevent corrupted node entries
Fixes Kpa-clawbot/meshcore-analyzer#112
2026-03-21 05:34:57 +00:00
you edb0331a7c fix: add favorites filter to live map
Fixes Kpa-clawbot/meshcore-analyzer#106
2026-03-21 05:34:51 +00:00
you 81275acff0 Make map default center/zoom configurable via config.json
Adds mapDefaults config option with center and zoom properties.
New /api/config/map endpoint serves the defaults. live.js and map.js
fetch the config with fallback to hardcoded Bay Area defaults.

Fixes Kpa-clawbot/meshcore-analyzer#115
2026-03-21 05:29:05 +00:00
you f9b9a0c07d Fix channel name resolution to use decryption key, not just hash
Channels sharing the same hash prefix but with different keys (e.g. #startrek
and #ai-bot both with hash 2d) now display the correct name by keying on the
actual channel name from decryption rather than just the hash byte.

Fixes Kpa-clawbot/meshcore-analyzer#108
2026-03-21 05:27:02 +00:00
you 1605b78ca8 Display channel hash as hex in analytics pane
Fixes Kpa-clawbot/meshcore-analyzer#103
2026-03-21 05:25:54 +00:00
you 02d00a17bb fix: add hashChannels to config.example.json 2026-03-21 03:52:50 +00:00
you cfdb7e85d0 fix: add paths section to mobile full-screen node view (loadFullNode) 2026-03-21 03:47:32 +00:00
you 8fd3f81e72 feat: add paths-through section to live map node detail panel 2026-03-21 03:38:42 +00:00
you cf26079841 feat: label deconfliction on route view markers 2026-03-21 03:33:17 +00:00
you 9dfb3260c8 fix: skip animations when tab is backgrounded, resume cleanly on return 2026-03-21 02:36:51 +00:00
you 6e0cf0fc3e fix: dedup observations - UNIQUE(hash,observer_id,path_json) + INSERT OR IGNORE
~26% of observations were duplicates from multi-broker MQTT ingestion.
Added UNIQUE index to prevent future dupes, INSERT OR IGNORE to skip
silently, and in-memory dedup check in packet-store.
2026-03-21 02:31:51 +00:00
you 8e373755c8 feat: improved route view - hide default markers, show origin node 2026-03-21 02:23:53 +00:00
you ac44f7fc2a feat: paths through node section on repeater detail page 2026-03-21 02:22:59 +00:00
you 75a1b8fc98 fix: anchor hop disambiguation from sender origin, not just observer
resolve-hops now accepts originLat/originLon params. Forward pass
starts from sender position so first ambiguous hop resolves to the
nearest node to the sender, not the observer.
2026-03-21 02:19:20 +00:00
you 8726026486 fix: raise feed panel bottom to 68px to clear VCR bar, revert z-index 2026-03-21 02:02:55 +00:00
you 56b0217c0d fix: feed detail card z-index above VCR bar (1100 > 1000) 2026-03-21 01:50:46 +00:00
you 221d83da44 feat: replay sends all observations, uses realistic propagation on live map 2026-03-21 01:49:31 +00:00
you d660c03833 feat: realistic packet propagation mode on live map 2026-03-21 01:41:55 +00:00
you ac389f7af6 feat: show packet propagation time in detail pane (spread across observers) 2026-03-21 01:32:00 +00:00
lincomatic 11a7e54614 Fix require statement for db module 2026-03-21 01:29:01 +00:00
lincomatic 98294a533c add hashChannels
(cherry picked from commit e35794c4531f3c16ceeb246fbde6912c7d831671)
2026-03-21 01:29:01 +00:00
you 61afedd5f6 remove self-referential hashtag channel key seeding from DB 2026-03-21 01:28:17 +00:00
Kpa-clawbot 56d84ce11e Merge pull request #109 from lincomatic/prgraceful
graceful shutdown
2026-03-21 01:25:17 +00:00
Kpa-clawbot 4a9e69b207 Merge pull request #105 from lincomatic/https
add https support
2026-03-21 01:25:15 +00:00
you 4bbc61f0b1 fix: move hash prefix labels toggle to Display section 2026-03-21 01:17:57 +00:00
you 3f61713c0e fix: callout lines more visible — red, thicker, with dot at true position 2026-03-21 00:37:24 +00:00
you d48a7e7ab5 feat: show hash prefix in node popup (bold, with byte size) 2026-03-21 00:36:39 +00:00
you 4e7e0b1cd1 fix: deconfliction applies to ALL markers (not just labels), size-aware bounding boxes 2026-03-21 00:35:37 +00:00
you 82eae3f320 fix: rename toggle to 'Hash prefix labels' 2026-03-21 00:34:06 +00:00
you e38d1fa8f8 fix: map labels show short hash ID (e.g. 5B, BEEF), better deconfliction with spiral offsets 2026-03-21 00:30:25 +00:00
you 8a6923c3b3 Fix hash size labels and add label overlap prevention
- Show '?' with grey background for nodes with null hash_size instead of '1B'
- Add collision detection to offset overlapping repeater labels
- Draw callout lines from offset labels back to true position
- Re-deconflict labels on zoom change
2026-03-21 00:25:55 +00:00
you b114cd6eb0 Add hash size labels for repeater markers on map
- Compute hash_size from ADVERT packets in /api/nodes response
- Show colored rectangle markers with hash size (e.g. '2B') for repeaters
- Add 'Hash size labels' toggle in map controls (default ON, saved to localStorage)
- Non-repeater markers unchanged
2026-03-21 00:19:15 +00:00
you 85c356448e fix: switch all user-facing URLs to hash-based for stability across restarts
After dedup migration, packet IDs from the legacy 'packets' table differ
from transmission IDs in the 'transmissions' table. URLs using numeric IDs
became invalid after restart when _loadNormalized() assigned different IDs.

Changes:
- All packet URLs now use 16-char hex hashes instead of numeric IDs
  (#/packets/HASH instead of #/packet/ID)
- selectPacket() accepts hash parameter, uses hash-based URLs
- Copy Link generates hash-based URLs
- Search results link to hash-based URLs
- /api/packets/:id endpoint accepts both numeric IDs and 16-char hashes
- insert() now calls insertTransmission() to get stable transmission IDs
- Added db.getTransmission() for direct transmission table lookup
- Removed redundant byTransmission map (identical to byHash)
- All byTransmission references replaced with byHash
2026-03-21 00:18:11 +00:00
you d621a9f34a Make ADVERT node names clickable links to node detail page 2026-03-21 00:09:30 +00:00
you 8c2d5d770f fix: Advertised Hash Size field shows byte offset 1 (path byte), not payload offset 2026-03-21 00:03:55 +00:00
you 9d65f041d4 fix: check transmission ID before observation ID in packet lookup 2026-03-20 23:58:23 +00:00