From f0f42ef5ebae52cf2a88710e081619b8a71f2af5 Mon Sep 17 00:00:00 2001 From: Jack Misner Date: Fri, 28 Nov 2025 18:47:14 +0000 Subject: [PATCH 1/2] Add axios error codes to the UserCacheService to hopefully better detect when API errors are network related --- android/app/build.gradle | 4 ++-- android/app/src/main/res/values/strings.xml | 2 +- app.json | 6 +++--- package-lock.json | 4 ++-- package.json | 2 +- src/services/offlineV2/UserCacheService.ts | 2 ++ 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 1427a7f..4f82bcb 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -92,8 +92,8 @@ android { applicationId 'com.brewtracker.android' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 189 - versionName "3.2.4" + versionCode 190 + versionName "3.2.5" buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" } diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 8a338c6..15ad49b 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ BrewTracker automatic - 3.2.4 + 3.2.5 contain false \ No newline at end of file diff --git a/app.json b/app.json index 9c93a4f..efc68f0 100644 --- a/app.json +++ b/app.json @@ -3,7 +3,7 @@ "name": "BrewTracker", "slug": "brewtracker-android", "orientation": "portrait", - "version": "3.2.4", + "version": "3.2.5", "icon": "./assets/images/BrewTrackerAndroidLogo.png", "scheme": "brewtracker", "userInterfaceStyle": "automatic", @@ -16,7 +16,7 @@ }, "edgeToEdgeEnabled": true, "package": "com.brewtracker.android", - "versionCode": 189, + "versionCode": 190, "permissions": [ "CAMERA", "VIBRATE", @@ -58,7 +58,7 @@ } }, "owner": "jackmisner", - "runtimeVersion": "3.2.4", + "runtimeVersion": "3.2.5", "updates": { "url": "https://u.expo.dev/edf222a8-b532-4d12-9b69-4e7fbb1d41c2" } diff --git a/package-lock.json b/package-lock.json index cd7487e..b19a2d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "brewtracker", - "version": "3.2.4", + "version": "3.2.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "brewtracker", - "version": "3.2.4", + "version": "3.2.5", "license": "GPL-3.0-or-later", "dependencies": { "@expo/metro-runtime": "~6.1.2", diff --git a/package.json b/package.json index 5ac745d..536c73a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "brewtracker", "main": "expo-router/entry", - "version": "3.2.4", + "version": "3.2.5", "license": "GPL-3.0-or-later", "scripts": { "start": "expo start", diff --git a/src/services/offlineV2/UserCacheService.ts b/src/services/offlineV2/UserCacheService.ts index d79c8b7..4e50ca9 100644 --- a/src/services/offlineV2/UserCacheService.ts +++ b/src/services/offlineV2/UserCacheService.ts @@ -2106,6 +2106,8 @@ export class UserCacheService { const isOfflineError = errorMessage.includes("Simulated offline mode") || errorMessage.includes("Network request failed") || + errorMessage.includes("Network Error") || // Axios network error + errorMessage.includes("ERR_NETWORK") || // Axios error code errorMessage.includes("offline") || errorMessage.includes("ECONNREFUSED") || errorMessage.includes("DEPENDENCY_ERROR") || From 2c8b3be1c731c3c915be25d8d155d069626f0751 Mon Sep 17 00:00:00 2001 From: Jack Misner Date: Fri, 28 Nov 2025 18:53:17 +0000 Subject: [PATCH 2/2] Improved Network Error Detection --- src/services/offlineV2/UserCacheService.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/services/offlineV2/UserCacheService.ts b/src/services/offlineV2/UserCacheService.ts index 4e50ca9..8fc3d9f 100644 --- a/src/services/offlineV2/UserCacheService.ts +++ b/src/services/offlineV2/UserCacheService.ts @@ -2103,15 +2103,20 @@ export class UserCacheService { ); // Check if this is an offline/network error - these shouldn't count as retries + // Check both error message and axios error code property + const axiosErrorCode = (error as any)?.code; const isOfflineError = errorMessage.includes("Simulated offline mode") || errorMessage.includes("Network request failed") || - errorMessage.includes("Network Error") || // Axios network error - errorMessage.includes("ERR_NETWORK") || // Axios error code + errorMessage.includes("Network Error") || // Axios network error message errorMessage.includes("offline") || errorMessage.includes("ECONNREFUSED") || errorMessage.includes("DEPENDENCY_ERROR") || - errorMessage.includes("Parent brew session not synced yet"); + errorMessage.includes("Parent brew session not synced yet") || + axiosErrorCode === "ERR_NETWORK" || // Axios error code property + axiosErrorCode === "ECONNREFUSED" || + axiosErrorCode === "ETIMEDOUT" || + axiosErrorCode === "ENOTFOUND"; if (isOfflineError) { // Offline error - don't increment retry count, just stop syncing