Commit graph

846 commits

Author SHA1 Message Date
62ada761cd
refactor: improve code quality and fix potential issues
- Remove duplicate time formatting function in components.ex
  - Use existing time_ago_in_words from TimeHelpers instead of custom format_time_ago
- Remove unnecessary Float multiplication in format_coordinates
  - Changed Float.round(lat * 1.0, 4) to Float.round(lat, 4)
- Fix TypeScript type safety issues
  - Add pendingMarkers to LiveViewHookContext interface
  - Add initializationTimeout property for proper cleanup
- Add cleanup for map initialization retry timeout
  - Prevent memory leak by clearing timeout in destroyed() method
- Format code with mix format

All changes maintain backward compatibility while improving code quality.
2025-10-12 14:02:27 -05:00
8a70011679
fix: add safety checks for marker cluster removal
- Check if markerClusterGroup is ready before removing markers
- Verify _map and _topClusterLevel exist in cluster group
- Add try-catch blocks to handle removal errors gracefully
- Clean up tracking maps even if layer removal fails
- Prevents 'can't access property "_childClusters"' errors
2025-10-12 12:50:06 -05:00
81d8605dc8
fix: prevent map initialization race condition
- Add marker queuing system for markers that arrive before map is ready
- Check map._container and getZoom to ensure internal structures exist
- Process pending markers after map.whenReady() callback
- Fix typo: bindTooltip -> bindTooltip
2025-10-12 12:44:16 -05:00
06a881d63f
fix: pass required map data attributes to map component
The map component requires data-center and data-zoom attributes
for proper initialization.
2025-10-12 12:36:36 -05:00
ff636f6e5e
fix: use correct APRSMap hook name in map component 2025-10-12 12:17:11 -05:00
5491bafc31
fix: remove invalid empty state from stream container
The phx-update="stream" directive requires all direct children to have IDs.
Removed the conditional empty state message that was causing client-side errors.
2025-10-12 12:16:27 -05:00
1a92b89ca8
fix: correct toggle_button class attribute syntax
Fixed incorrect class attribute syntax in toggle_button that was using tuple notation (hidden: @slideover_open) instead of proper conditional.
2025-10-12 12:09:43 -05:00
533061c261
fix: correct remaining class attribute syntax errors
Fixed another incorrect class attribute syntax in connection_indicator component that was causing Protocol.UndefinedError.
2025-10-12 12:04:39 -05:00
1905c6b41a
fix: correct class attribute syntax in components
Fixed incorrect class attribute syntax that was using tuple notation instead of proper conditional class lists. This was causing Protocol.UndefinedError for String.Chars.
2025-10-12 11:58:16 -05:00
5b874185e9
fix: change streams.packets to packets in template
The template was trying to access @streams.packets but LiveView streams were not implemented. Changed to use @packets which is the correct assign.
2025-10-12 11:51:35 -05:00
72eab2aa91
fix: add missing assigns for LiveView components
The recent refactor removed loading and connection_status assigns which were required by the slideover_panel component, causing the app to crash on startup. This adds back the missing assigns with default values.
2025-10-12 11:47:05 -05:00
070b8870df
refactor 2025-10-12 10:56:49 -05:00
265c58b9ff
Fix aprs-is variables 2025-10-12 10:32:12 -05:00
5dfd682142
fix: exclude APRS-IS paths from RF path visualization
Previously, packets sent via APRS-IS (Internet) would incorrectly show
RF path lines to the uploader's callsign. This fix filters out paths
containing TCPIP, NOGATE, or qA* indicators, which indicate Internet-only
transmission rather than actual RF digipeating.

For example, AE5PL-S packets posted by AE5PL via Internet will no longer
show a misleading RF path line between them.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 16:57:21 -05:00
0528a99f36
fix: remove problematic errorTileUrl to resolve tile loading errors
The errorTileUrl was set to a base64 data URL of a transparent 1x1 PNG,
which caused browsers to fail when trying to use it as a tile replacement.
Removing this option allows Leaflet to handle tile errors with its
default behavior, which is more robust and prevents console errors.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 16:52:41 -05:00
6761518144
bump phoenix_live_view 2025-10-07 15:37:23 -05:00
93e19ff517
Remove all external dependencies and Sentry integration
- Remove external Leaflet CDN links from info page (now uses vendor bundles)
- Remove all Sentry error tracking integration:
  - Remove sentry dependency from mix.exs
  - Remove Sentry plugs from endpoint.ex
  - Remove Sentry logger handler from application.ex
  - Remove Sentry configs from dev.exs and prod.exs
  - Remove Sentry domains from runtime.exs check_origin
  - Remove Sentry JavaScript initialization
  - Delete sentry_filter.ex module
  - Remove Sentry loader script from root layout

The application now loads all assets locally with no external runtime dependencies.
2025-10-03 12:53:47 -05:00
5ca07bcbe0
Fix info page to show last known position when latest packet has no location data
For stations that send both position and status packets, the info page would show empty location data if the most recent packet was a status packet. This fix ensures the page displays the last known position from the most recent position packet while still showing the latest activity timestamp.
2025-10-03 12:37:45 -05:00
9db39e91f7
update geo 2025-10-03 12:29:40 -05:00
5e5c933b8a
update deps 2025-10-03 12:27:51 -05:00
b93da46e4e
Fix K3s API TLS verification for Tailscale connection
Add insecure-skip-tls-verify flag to kubectl config to bypass certificate
validation when connecting via Tailscale IP. The K3s certificates don't
include the Tailscale IP in their SANs, causing TLS verification to fail.
2025-09-08 09:36:15 -05:00
577d05b4ee
Fix posresolution type error by converting integers to floats
Add posresolution and rain_midnight to the list of float fields in
normalize_numeric_types to ensure integer values are converted to floats
before database insertion. This fixes the Ecto.ChangeError that was
preventing many APRS packets from being stored in the database.
2025-09-08 09:20:40 -05:00
130f9a39d2
updates 2025-09-06 11:12:06 -05:00
bc9341387e
parser update 2025-08-13 09:40:22 -05:00
c2fcf534dd
update and format 2025-08-13 09:39:39 -05:00
a95fca7dd1
update claude readme 2025-08-11 13:03:11 -05:00
42b8c144f4
update deps and wx charts 2025-08-09 17:22:25 -04:00
282948db98
fix: resolve Chart.js date adapter error for weather charts
- Combine Chart.js and date adapter into single bundle to ensure proper loading order
- Add validation to skip chart rendering when insufficient weather data (< 2 points)
- Update vendor loader to not load date adapter separately
- Prevents date adapter errors when weather stations have limited data
2025-08-09 17:20:27 -04:00
706721b06f
fix: resolve VARCHAR(255) database errors by migrating to TEXT fields
- Create migration to change string fields from VARCHAR(255) to TEXT type
- Add PacketSanitizer module for UTF-8 safe string truncation
- Update PacketConsumer to sanitize data before database insertion
- Prevents database errors from overly long packet data fields
2025-08-09 16:54:38 -04:00
a636410171
add safe config file 2025-08-06 09:10:52 -05:00
ea4992d2a1
parser update 2025-08-06 08:31:55 -05:00
8bc5d35e2e
fix: move sendMapReadyEvents definition before whenReady callback
The function was being called before it was defined, causing a runtime error.
Moving the function definition before the whenReady callback ensures it's
available when the callback executes.
2025-08-05 13:59:24 -05:00
44bc802f9d
refactor: simplify map.ts code with helper functions
- Add isValidCoordinate() helper to reduce duplicate coordinate validation
- Add createDivIcon() helper to standardize marker icon creation
- Simplify map ready event handling with sendMapReadyEvents() helper
- Fix typo: bindTooltip -> bindTooltip
- Reduce code duplication throughout the file
2025-08-05 13:51:33 -05:00
537ddec4d6
fix: improve RF path line cleanup to prevent persistent lines
- Add clearRfPathLines() method for centralized cleanup logic
- Clear RF paths when clearing all markers
- Clear RF paths in destroyed() lifecycle hook
- Add error handling to prevent failures during cleanup
- Fix issue where path lines could persist after hover ends
2025-08-05 13:43:46 -05:00
db456f84a6
fix: prevent map reload on packet updates in info page
- Add DOM existence check before reinitializing map
- Implement initialization flag to prevent race conditions
- Improve cleanup in destroyed() to prevent memory leaks
- Map now only updates marker position when location changes
2025-08-05 13:37:36 -05:00
657a0dd703
add gleam parser to test 2025-08-05 13:18:31 -05:00
808ba2dd30
cleanu p test 2025-08-05 13:00:35 -05:00
3216481c53
SAFE scan update 2025-08-05 09:45:51 -05:00
4c0a33f144
SAFE scan update 2025-08-05 09:41:38 -05:00
8015964dea
fix test 2025-08-04 21:32:57 -05:00
01bfb11ab4
fix: Convert integer timestamps to strings for database insertion
The APRS parser is sending timestamp as integer (Unix timestamp) but our
schema expects a string. This was causing Ecto.ChangeError in production
preventing packet insertion.

Convert integer timestamps to strings in the field conversion pipeline.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 11:43:15 -05:00
b56a988e52
fix: Implement comprehensive field whitelist to prevent unknown field errors
Instead of playing whack-a-mole with individual fields, this implements a
proper whitelist approach that only allows fields defined in the Packet schema.

- Created PacketFieldWhitelist module with all 78 valid packet fields
- Filters out ANY field not in the schema, preventing future errors
- Handles both atom and string keys
- Includes debug helpers to identify filtered fields

This definitively fixes packet insertion failures by ensuring only valid
database fields are passed to Repo.insert_all, regardless of what the
APRS parser sends.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 10:52:53 -05:00
c68eaee85a
update safe scanner to build elixir 2025-08-04 10:36:28 -05:00
68e484a24a
update safe scanner to build elixir 2025-08-04 10:35:16 -05:00
49e647e609
fix: Handle additional parser fields causing insertion failures
The parser is sending fields with different names than our schema:
- aprs_messaging? (with question mark) -> convert to aprs_messaging
- raw_data -> remove (not in schema)

This should fix the remaining packet insertion failures in production.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 10:30:52 -05:00
a7c4993a0b
update artifact version for safe scanner 2025-08-04 10:28:47 -05:00
b8000115a6
update artifact version for safe scanner 2025-08-04 10:27:18 -05:00
2a6fd443ab
add SAFE vuln scanner 2025-08-04 10:25:58 -05:00
cd79c3df7e
feat: Add database support for APRS items/objects and DAO extension
- Added item_name, object_name fields to store names
- Added is_item, is_object boolean flags for filtering
- Added dao field to store DAO extension data for extra position precision
- Automatic detection during packet processing to populate these fields
- Added database indexes for efficient queries
- Now preserving itemname as item_name and dao data instead of discarding

This enables future features like:
- Showing/hiding items and objects separately from stations
- Querying for specific objects (events, repeaters, etc.)
- Using DAO data for high-precision applications

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 10:19:34 -05:00
b63c3c547d
fix: Add missing field removals for dao, itemname, and coordinate conversion
Production logs showed additional fields causing insertion failures:
- dao: DAO extension data
- itemname: Item name field
- longitude/latitude: Parser uses these but our schema uses lon/lat

Added conversion step to map latitude->lat and longitude->lon before processing.
This ensures packets can be properly saved to the database.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-04 10:16:23 -05:00