Add error bubble-up

This commit is contained in:
Jack Kingsman
2026-02-04 19:24:07 -08:00
parent fcbab3bf72
commit 31bccfb957
8 changed files with 22 additions and 15 deletions

View File

@@ -538,10 +538,11 @@ async def send_repeater_command(public_key: str, request: CommandRequest) -> Com
@router.post("/{public_key}/trace", response_model=TraceResponse)
async def request_trace(public_key: str) -> TraceResponse:
"""Send a direct (zero-hop) trace to a contact and wait for the result.
"""Send a single-hop trace to a contact and wait for the result.
This sends a trace with no path (direct only, no repeaters) and waits
up to 15 seconds for the TRACE_DATA response.
The trace path contains the contact's 1-byte pubkey hash as the sole hop
(no intermediate repeaters). The radio firmware requires at least one
node in the path.
"""
mc = require_connected()
@@ -550,6 +551,8 @@ async def request_trace(public_key: str) -> TraceResponse:
raise HTTPException(status_code=404, detail="Contact not found")
tag = random.randint(1, 0xFFFFFFFF)
# First 2 hex chars of pubkey = 1-byte hash used by the trace protocol
contact_hash = contact.public_key[:2]
# Note: unlike command/telemetry endpoints, trace does NOT need
# stop/start_auto_message_fetching because the response arrives as a
@@ -558,8 +561,10 @@ async def request_trace(public_key: str) -> TraceResponse:
# Ensure contact is on radio so the trace can reach them
await mc.commands.add_contact(contact.to_radio_dict())
logger.info("Sending direct trace to %s (tag=%d)", contact.public_key[:12], tag)
result = await mc.commands.send_trace(path=None, tag=tag)
logger.info(
"Sending trace to %s (tag=%d, hash=%s)", contact.public_key[:12], tag, contact_hash
)
result = await mc.commands.send_trace(path=contact_hash, tag=tag)
if result.type == EventType.ERROR:
raise HTTPException(status_code=500, detail=f"Failed to send trace: {result.payload}")

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -13,7 +13,7 @@
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
<script type="module" crossorigin src="/assets/index-Bns2erWl.js"></script>
<script type="module" crossorigin src="/assets/index-AkYO4-QT.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DJA5wYVF.css">
</head>
<body>

View File

@@ -704,8 +704,10 @@ export function App() {
if (result.local_snr !== null) parts.push(`Local SNR: ${result.local_snr.toFixed(1)} dB`);
const detail = parts.join(', ');
toast.success(detail ? `Trace complete! ${detail}` : 'Trace complete!');
} catch {
toast.error('No trace response heard');
} catch (err) {
toast.error('Trace failed', {
description: err instanceof Error ? err.message : 'Unknown error',
});
}
}, [activeConversation]);