From be08efeca32365981f300c143a90b23fe9e8451a Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 7 Jul 2025 06:15:51 -0500 Subject: [PATCH] iOS update retry request handler to handle string bodies --- ios/App/App/plugins/AbsDatabase.swift | 2 +- ios/App/Shared/util/ApiClient.swift | 33 ++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/ios/App/App/plugins/AbsDatabase.swift b/ios/App/App/plugins/AbsDatabase.swift index 2ba5a1c1..aa9dfc43 100644 --- a/ios/App/App/plugins/AbsDatabase.swift +++ b/ios/App/App/plugins/AbsDatabase.swift @@ -102,7 +102,7 @@ public class AbsDatabase: CAPPlugin, CAPBridgedPlugin { let id = call.getString("serverConnectionConfigId", "") // Remove refresh token if it exists - secureStorage.removeRefreshToken(serverConnectionConfigId: id) + _ = secureStorage.removeRefreshToken(serverConnectionConfigId: id) Database.shared.deleteServerConnectionConfig(id: id) call.resolve() diff --git a/ios/App/Shared/util/ApiClient.swift b/ios/App/Shared/util/ApiClient.swift index 9b1804e6..ab368988 100644 --- a/ios/App/Shared/util/ApiClient.swift +++ b/ios/App/Shared/util/ApiClient.swift @@ -275,12 +275,33 @@ class ApiClient { return } - retryRequest.responseDecodable(of: decodable) { response in - switch response.result { - case .success(let obj): - callback?(obj) - case .failure(let error): - logger.error("retryOriginalRequest: Retry request failed: \(error)") + // Handle the response + retryRequest.response { response in + if let statusCode = response.response?.statusCode, (200...299).contains(statusCode) { + // Check if response has data + if let data = response.data, !data.isEmpty { + // If it is a string return nil (e.g. express returns OK for 200 status codes) + if let responseString = String(data: data, encoding: .utf8) { + logger.log("retryOriginalRequest: Got string response '\(responseString)'") + callback?(nil) + return + } + + // If not a string, try JSON + do { + let decodedObject = try JSONDecoder().decode(decodable, from: data) + callback?(decodedObject) + } catch { + logger.error("retryOriginalRequest: JSON decode failed: \(error)") + callback?(nil) + } + } else { + // Empty response + logger.log("retryOriginalRequest: Empty response with success status \(statusCode)") + callback?(nil) + } + } else { + logger.error("retryOriginalRequest: Request failed with status \(response.response?.statusCode ?? 0)") callback?(nil) } }