diff --git a/Sources/Push/PushClient.swift b/Sources/Push/PushClient.swift index 16633af..06285fd 100644 --- a/Sources/Push/PushClient.swift +++ b/Sources/Push/PushClient.swift @@ -145,41 +145,12 @@ public final class PushClient { var request = URLRequest(url: server.appendingPathComponent(route.rawValue)) request.httpBody = bodyData request.httpMethod = "POST" - - if #available(iOS 15.0, *) { - return await post(request) - } else { - return await withCheckedContinuation { continuation in - postRequest(request) { data in - continuation.resume(returning: data) - } - } - } + return await post(request) } - private func postRequest(_ request: URLRequest, completion: @escaping (Data?) -> Void) { - URLSession.shared.dataTask(with: request) { data, response, error in - if let error = error { - print("Failed with error: \(error)") - completion(nil) - } - guard let httpResponse = response as? HTTPURLResponse else { - completion(nil) - return - } - guard httpResponse.statusCode == 200 else { - print("Failed with code: \(httpResponse.statusCode)") - completion(nil) - return - } - completion(data) - }.resume() - } - - @available(iOS 15.0, *) private func post(_ request: URLRequest) async -> Data? { do { - let (data, response) : (Data, URLResponse) = try await URLSession.shared.data(for: request) + let (data, response) : (Data, URLResponse) = try await data(for: request) guard let httpResponse = response as? HTTPURLResponse else { return nil } @@ -194,8 +165,37 @@ public final class PushClient { } } + private func data(for request: URLRequest) async throws -> (Data, URLResponse) { +#if !canImport(FoundationNetworking) + if #available(iOS 15.0, *) { + return try await URLSession.shared.data(for: request) + } +#endif + return try await URLSession.shared.dataRequest(request) + } + private func hash(_ masterKey: String) -> Data { Data(SHA256.hash(data: masterKey.data(using: .utf8)!)) } } + +private extension URLSession { + + func dataRequest(_ request: URLRequest) async throws -> (Data, URLResponse) { + try await withCheckedThrowingContinuation { continuation in + dataTask(with: request) { data, response, error in + if let error = error { + print("Failed with error: \(error)") + continuation.resume(throwing: error) + return + } + guard let data = data, let response = response else { + continuation.resume(throwing: URLError(.unknown)) + return + } + continuation.resume(returning: (data, response)) + }.resume() + } + } +}