@@ -1605,6 +1605,18 @@ class AppStateProvider extends ChangeNotifier {
16051605 return 'Session has expired. Please reconnect.' ;
16061606 case 'bad_session' :
16071607 return 'Invalid session. Please reconnect.' ;
1608+ case 'outofdate' :
1609+ return 'App version outdated. Please update to the latest version.' ;
1610+ case 'session_invalid' :
1611+ return 'Session is invalid. Please reconnect.' ;
1612+ case 'session_revoked' :
1613+ return 'Session was revoked. Please reconnect.' ;
1614+ case 'invalid_key' :
1615+ return 'Invalid API key. Please check configuration.' ;
1616+ case 'unauthorized' :
1617+ return 'Unauthorized. Please reconnect.' ;
1618+ case 'rate_limited' :
1619+ return 'Rate limited. Please slow down.' ;
16081620 default :
16091621 return serverMessage ?? 'Unknown error occurred.' ;
16101622 }
@@ -1623,6 +1635,13 @@ class AppStateProvider extends ChangeNotifier {
16231635 return ;
16241636 }
16251637
1638+ // Special case: outofdate is a critical error requiring app update
1639+ if (reason == 'outofdate' ) {
1640+ _statusMessageService.setPersistentError (userMessage, StatusColor .error);
1641+ debugLog ('[API] App version outdated - update required' );
1642+ return ;
1643+ }
1644+
16261645 // Log error and add to error log
16271646 debugError ('[API] Auth error: $reason - $userMessage ' );
16281647 logError (userMessage, severity: ErrorSeverity .error);
@@ -1641,12 +1660,42 @@ class AppStateProvider extends ChangeNotifier {
16411660 final userMessage = _getErrorMessage (reason, message);
16421661 debugError ('[API] Session error: $reason - $userMessage ' );
16431662
1663+ // Rate limiting should warn but not disconnect (per PORTED_APP behavior)
1664+ if (reason == 'rate_limited' ) {
1665+ _statusMessageService.setDynamicStatus (userMessage, StatusColor .warning);
1666+ debugLog ('[API] Rate limited - continuing without disconnect' );
1667+ return ;
1668+ }
1669+
16441670 // Show error message
16451671 _statusMessageService.setDynamicStatus (userMessage, StatusColor .error);
16461672 logError (userMessage, severity: ErrorSeverity .error);
16471673
1674+ // Session errors that require disconnect
1675+ const sessionErrors = {
1676+ 'session_expired' ,
1677+ 'session_invalid' ,
1678+ 'session_revoked' ,
1679+ 'bad_session' ,
1680+ };
1681+
1682+ // Authorization errors that require disconnect
1683+ const authErrors = {
1684+ 'invalid_key' ,
1685+ 'unauthorized' ,
1686+ 'bad_key' ,
1687+ };
1688+
1689+ // Zone errors that require disconnect
1690+ const zoneErrors = {
1691+ 'outside_zone' ,
1692+ 'zone_full' ,
1693+ };
1694+
16481695 // Handle errors that require disconnect
1649- if (reason == 'session_expired' || reason == 'bad_session' || reason == 'outside_zone' ) {
1696+ if (sessionErrors.contains (reason) ||
1697+ authErrors.contains (reason) ||
1698+ zoneErrors.contains (reason)) {
16501699 debugLog ('[API] Session error requires disconnect: $reason ' );
16511700 // Don't call requestAuth disconnect - session is already invalid on server
16521701 // Just cleanup locally and disconnect
0 commit comments