Skip to content

Commit 147fb8a

Browse files
committed
Refactor error handling in API and app state provider to include additional session and authorization error cases
1 parent ca589d5 commit 147fb8a

File tree

4 files changed

+64
-4
lines changed

4 files changed

+64
-4
lines changed

ios/Flutter/Generated.xcconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ FLUTTER_BUILD_NAME=1.0.0
88
FLUTTER_BUILD_NUMBER=1
99
EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
1010
EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
11-
DART_DEFINES=QVBQLTE3NjkyMDM1NzA=,RkxVVFRFUl9WRVJTSU9OPTMuMzguNw==,RkxVVFRFUl9DSEFOTkVMPXN0YWJsZQ==,RkxVVFRFUl9HSVRfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIuZ2l0,RkxVVFRFUl9GUkFNRVdPUktfUkVWSVNJT049M2I2MmVmYzJhMw==,RkxVVFRFUl9FTkdJTkVfUkVWSVNJT049NzhmYzMwMTJlNA==,RkxVVFRFUl9EQVJUX1ZFUlNJT049My4xMC43
11+
DART_DEFINES=RkxVVFRFUl9WRVJTSU9OPTMuMzguNw==,RkxVVFRFUl9DSEFOTkVMPXN0YWJsZQ==,RkxVVFRFUl9HSVRfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIuZ2l0,RkxVVFRFUl9GUkFNRVdPUktfUkVWSVNJT049M2I2MmVmYzJhMw==,RkxVVFRFUl9FTkdJTkVfUkVWSVNJT049NzhmYzMwMTJlNA==,RkxVVFRFUl9EQVJUX1ZFUlNJT049My4xMC43
1212
DART_OBFUSCATION=false
1313
TRACK_WIDGET_CREATION=true
1414
TREE_SHAKE_ICONS=false

ios/Flutter/flutter_export_environment.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export "FLUTTER_TARGET=/Users/schnobbc/Documents/Github/MeshMapper_Flutter_App/l
77
export "FLUTTER_BUILD_DIR=build"
88
export "FLUTTER_BUILD_NAME=1.0.0"
99
export "FLUTTER_BUILD_NUMBER=1"
10-
export "DART_DEFINES=QVBQLTE3NjkyMDM1NzA=,RkxVVFRFUl9WRVJTSU9OPTMuMzguNw==,RkxVVFRFUl9DSEFOTkVMPXN0YWJsZQ==,RkxVVFRFUl9HSVRfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIuZ2l0,RkxVVFRFUl9GUkFNRVdPUktfUkVWSVNJT049M2I2MmVmYzJhMw==,RkxVVFRFUl9FTkdJTkVfUkVWSVNJT049NzhmYzMwMTJlNA==,RkxVVFRFUl9EQVJUX1ZFUlNJT049My4xMC43"
10+
export "DART_DEFINES=RkxVVFRFUl9WRVJTSU9OPTMuMzguNw==,RkxVVFRFUl9DSEFOTkVMPXN0YWJsZQ==,RkxVVFRFUl9HSVRfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIuZ2l0,RkxVVFRFUl9GUkFNRVdPUktfUkVWSVNJT049M2I2MmVmYzJhMw==,RkxVVFRFUl9FTkdJTkVfUkVWSVNJT049NzhmYzMwMTJlNA==,RkxVVFRFUl9EQVJUX1ZFUlNJT049My4xMC43"
1111
export "DART_OBFUSCATION=false"
1212
export "TRACK_WIDGET_CREATION=true"
1313
export "TREE_SHAKE_ICONS=false"

lib/providers/app_state_provider.dart

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

lib/services/api_service.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,18 @@ class ApiService {
358358

359359
// Check for session errors that require disconnect
360360
final reason = result['reason'] as String?;
361-
if (reason == 'session_expired' || reason == 'bad_session' || reason == 'outside_zone') {
361+
362+
// All errors that require session invalidation and disconnect
363+
const criticalErrors = {
364+
// Session errors
365+
'session_expired', 'session_invalid', 'session_revoked', 'bad_session',
366+
// Auth errors
367+
'invalid_key', 'unauthorized', 'bad_key',
368+
// Zone errors
369+
'outside_zone', 'zone_full',
370+
};
371+
372+
if (criticalErrors.contains(reason)) {
362373
debugError('[API] Upload batch session error: $reason');
363374
final message = result['message'] as String?;
364375
// Clear session locally since it's invalid on server

0 commit comments

Comments
 (0)