@@ -145,16 +145,25 @@ const APP_VERSION = "UNKNOWN"; // Placeholder - replaced during build
145145// ---- Auth Reason Messages ----
146146// Maps API reason codes to user-facing error messages
147147const REASON_MESSAGES = {
148+ // Auth/connect errors
148149 outofdate : "App out of date, please update" ,
149150 unknown_device : "Unknown device - advertise on mesh first" ,
150- outside_zone : "Outside zone - cannot connect " ,
151+ outside_zone : "Outside zone" ,
151152 zone_disabled : "Zone is disabled" ,
152- zone_full : "TX slots full - RX only " ,
153+ zone_full : "Zone at capacity " ,
153154 bad_key : "Invalid API key" ,
154155 gps_stale : "GPS data too old - try again" ,
155156 gps_inaccurate : "GPS accuracy too low - try again" ,
157+ // Session errors (wardrive API)
156158 bad_session : "Invalid session" ,
157- session_expired : "Session expired - reconnect" ,
159+ session_expired : "Session expired" ,
160+ session_invalid : "Session invalid" ,
161+ session_revoked : "Session revoked" ,
162+ // Authorization errors (wardrive API)
163+ invalid_key : "Invalid API key" ,
164+ unauthorized : "Unauthorized" ,
165+ // Rate limiting (wardrive API)
166+ rate_limited : "Rate limited - slow down" ,
158167} ;
159168
160169// ---- UI helpers ----
@@ -2712,65 +2721,42 @@ function handleWardriveApiError(reason, message) {
27122721 case "session_expired" :
27132722 case "session_invalid" :
27142723 case "session_revoked" :
2715- // Session is no longer valid - disconnect
2724+ case "bad_session" :
2725+ // Session is no longer valid - disconnect immediately
2726+ // Error message will be shown by BLE disconnect handler using REASON_MESSAGES
27162727 debugError ( `[WARDRIVE API] Session error (${ reason } ): triggering disconnect` ) ;
2717- setDynamicStatus ( "Session expired" , STATUS_COLORS . error ) ;
27182728 state . disconnectReason = reason ;
2719- setTimeout ( ( ) => {
2720- disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
2721- } , 1500 ) ;
2722- break ;
2723-
2724- case "bad_session" :
2725- // Session ID is invalid or doesn't match API key - disconnect
2726- debugError ( `[WARDRIVE API] Bad session: triggering disconnect` ) ;
2727- setDynamicStatus ( "Invalid session" , STATUS_COLORS . error ) ;
2728- state . disconnectReason = reason ;
2729- setTimeout ( ( ) => {
2730- disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
2731- } , 1500 ) ;
2729+ disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
27322730 break ;
27332731
27342732 case "invalid_key" :
27352733 case "unauthorized" :
27362734 case "bad_key" :
2737- // API key issue - disconnect
2735+ // API key issue - disconnect immediately
27382736 debugError ( `[WARDRIVE API] Authorization error (${ reason } ): triggering disconnect` ) ;
2739- setDynamicStatus ( "Authorization failed" , STATUS_COLORS . error ) ;
27402737 state . disconnectReason = reason ;
2741- setTimeout ( ( ) => {
2742- disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
2743- } , 1500 ) ;
2738+ disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
27442739 break ;
27452740
27462741 case "session_id_missing" :
2747- // Missing session - disconnect
2742+ // Missing session - disconnect immediately
27482743 debugError ( `[WARDRIVE API] Missing session_id: triggering disconnect` ) ;
2749- setDynamicStatus ( "Missing session ID" , STATUS_COLORS . error ) ;
27502744 state . disconnectReason = "session_id_error" ;
2751- setTimeout ( ( ) => {
2752- disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after missing session_id failed: ${ err . message } ` ) ) ;
2753- } , 1500 ) ;
2745+ disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after missing session_id failed: ${ err . message } ` ) ) ;
27542746 break ;
27552747
27562748 case "outside_zone" :
2757- // User has moved outside their assigned zone - disconnect
2749+ // User has moved outside their assigned zone - disconnect immediately
27582750 debugError ( `[WARDRIVE API] Outside zone: triggering disconnect` ) ;
2759- setDynamicStatus ( "Outside zone" , STATUS_COLORS . error ) ;
27602751 state . disconnectReason = reason ;
2761- setTimeout ( ( ) => {
2762- disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
2763- } , 1500 ) ;
2752+ disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
27642753 break ;
27652754
27662755 case "zone_full" :
2767- // Zone capacity changed during active session - disconnect
2756+ // Zone capacity changed during active session - disconnect immediately
27682757 debugError ( `[WARDRIVE API] Zone full during wardrive: triggering disconnect` ) ;
2769- setDynamicStatus ( "Zone capacity changed" , STATUS_COLORS . error ) ;
27702758 state . disconnectReason = reason ;
2771- setTimeout ( ( ) => {
2772- disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
2773- } , 1500 ) ;
2759+ disconnect ( ) . catch ( err => debugError ( `[BLE] Disconnect after ${ reason } failed: ${ err . message } ` ) ) ;
27742760 break ;
27752761
27762762 case "rate_limited" :
0 commit comments