Fix default URL for map upload. Closes #190.

This commit is contained in:
Jack Kingsman
2026-04-16 11:39:17 -07:00
parent d1f657342a
commit 64502c4ca2
4 changed files with 13 additions and 12 deletions

View File

@@ -144,8 +144,8 @@ Amazon SQS delivery. Config blob:
- Supports both decoded messages and raw packets via normal scope selection
### map_upload (map_upload.py)
Uploads heard repeater and room-server advertisements to map.meshcore.dev. Config blob:
- `api_url` (optional, default `""`) — upload endpoint; empty falls back to the public map.meshcore.dev API
Uploads heard repeater and room-server advertisements to map.meshcore.io. Config blob:
- `api_url` (optional, default `""`) — upload endpoint; empty falls back to the public map.meshcore.io API
- `dry_run` (bool, default `true`) — when true, logs the payload at INFO level without sending
- `geofence_enabled` (bool, default `false`) — when true, only uploads nodes within `geofence_radius_km` of the radio's own configured lat/lon
- `geofence_radius_km` (float, default `0`) — filter radius in kilometres

View File

@@ -1,6 +1,7 @@
"""Fanout module for uploading heard advert packets to map.meshcore.dev.
"""Fanout module for uploading heard advert packets to map.meshcore.io.
Mirrors the logic of the standalone map.meshcore.dev-uploader project:
Mirrors the logic of the standalone map.meshcore.dev-uploader project
(historical name; the live service is now hosted at map.meshcore.io):
- Listens on raw RF packets via on_raw
- Filters for ADVERT packets, only processes repeaters (role 2) and rooms (role 3)
- Skips nodes with no valid location (lat/lon None)
@@ -16,7 +17,7 @@ the raw hex link.
Config keys
-----------
api_url : str, default ""
Upload endpoint. Empty string falls back to the public map.meshcore.dev API.
Upload endpoint. Empty string falls back to the public map.meshcore.io API.
dry_run : bool, default True
When True, log the payload at INFO level instead of sending it.
geofence_enabled : bool, default False
@@ -46,7 +47,7 @@ from app.services.radio_runtime import radio_runtime
logger = logging.getLogger(__name__)
_DEFAULT_API_URL = "https://map.meshcore.dev/api/v1/uploader/node"
_DEFAULT_API_URL = "https://map.meshcore.io/api/v1/uploader/node"
# Re-upload guard: skip re-uploading a pubkey seen within this window (AU parity)
_REUPLOAD_SECONDS = 3600

View File

@@ -325,7 +325,7 @@ const CREATE_INTEGRATION_DEFINITIONS: readonly CreateIntegrationDefinition[] = [
label: 'Map Upload',
section: 'Community Sharing',
description:
'Upload repeaters and room servers to map.meshcore.dev or a compatible map API endpoint.',
'Upload repeaters and room servers to map.meshcore.io or a compatible map API endpoint.',
defaultName: 'Map Upload',
nameMode: 'counted',
defaults: {
@@ -1668,12 +1668,12 @@ function MapUploadConfigEditor({
<p className="text-xs text-muted-foreground">
Automatically upload heard repeater and room server advertisements to{' '}
<a
href="https://map.meshcore.dev"
href="https://map.meshcore.io"
target="_blank"
rel="noopener noreferrer"
className="underline hover:text-foreground"
>
map.meshcore.dev
map.meshcore.io
</a>
. Requires the radio&apos;s private key to be available (firmware must have{' '}
<code>ENABLE_PRIVATE_KEY_EXPORT=1</code>). Only raw RF packets are shared &mdash; never
@@ -1710,12 +1710,12 @@ function MapUploadConfigEditor({
<Input
id="fanout-map-api-url"
type="url"
placeholder="https://map.meshcore.dev/api/v1/uploader/node"
placeholder="https://map.meshcore.io/api/v1/uploader/node"
value={(config.api_url as string) || ''}
onChange={(e) => onChange({ ...config, api_url: e.target.value })}
/>
<p className="text-xs text-muted-foreground">
Leave blank to use the default <code>map.meshcore.dev</code> endpoint.
Leave blank to use the default <code>map.meshcore.io</code> endpoint.
</p>
</div>

View File

@@ -479,7 +479,7 @@ class TestLiveSend:
@pytest.mark.asyncio
async def test_live_send_defaults_to_map_url(self):
"""Empty api_url should default to the map.meshcore.dev endpoint."""
"""Empty api_url should default to the map.meshcore.io endpoint."""
mod = _make_module({"dry_run": False, "api_url": ""})
await mod.start()