@@ -3,12 +3,17 @@ import Foundation
3
3
public final class FunctionsClient {
4
4
let url : URL
5
5
var headers : [ String : String ]
6
+ let http : FunctionsHTTPClient
6
7
7
- private let session : URLSession = . shared
8
-
9
- public init ( url: URL , headers: [ String : String ] = [ : ] ) {
8
+ public init (
9
+ url: URL ,
10
+ headers: [ String : String ] = [ : ] ,
11
+ http: FunctionsHTTPClient ? = nil
12
+ ) {
10
13
self . url = url
11
14
self . headers = headers
15
+ self . http = http ?? DefaultFunctionsHTTPClient ( )
16
+
12
17
self . headers [ " X-Client-Info " ] = " functions-swift/ \( version) "
13
18
}
14
19
@@ -74,20 +79,16 @@ public final class FunctionsClient {
74
79
request. httpBody = body
75
80
request. allHTTPHeaderFields = invokeHeaders. merging ( headers) { invokeHeader, _ in invokeHeader }
76
81
77
- let ( data, response) = try await session. data ( for: request)
78
- guard let httpResponse = response as? HTTPURLResponse else {
79
- throw URLError ( . badServerResponse)
80
- }
81
-
82
- guard 200 ..< 300 ~= httpResponse. statusCode else {
83
- throw FunctionsError . httpError ( code: httpResponse. statusCode, data: data)
82
+ let ( data, response) = try await http. execute ( request, client: self )
83
+ guard 200 ..< 300 ~= response. statusCode else {
84
+ throw FunctionsError . httpError ( code: response. statusCode, data: data)
84
85
}
85
86
86
- let isRelayError = httpResponse . value ( forHTTPHeaderField: " x-relay-error " ) == " true "
87
+ let isRelayError = response . value ( forHTTPHeaderField: " x-relay-error " ) == " true "
87
88
if isRelayError {
88
89
throw FunctionsError . relayError
89
90
}
90
91
91
- return ( data, httpResponse )
92
+ return ( data, response )
92
93
}
93
94
}
0 commit comments