@@ -37,15 +37,6 @@ enum Github {
3737 return decoder
3838 }
3939
40- @available ( * , deprecated)
41- static func rateLimit( response: ClientResponse ) -> Int ? {
42- guard
43- let header = response. headers. first ( name: " X-RateLimit-Remaining " ) ,
44- let limit = Int ( header)
45- else { return nil }
46- return limit
47- }
48-
4940 static func rateLimit( response: HTTPClient . Response ) -> Int ? {
5041 guard
5142 let header = response. headers. first ( name: " X-RateLimit-Remaining " ) ,
@@ -54,13 +45,6 @@ enum Github {
5445 return limit
5546 }
5647
57- @available ( * , deprecated)
58- static func isRateLimited( _ response: ClientResponse ) -> Bool {
59- guard let limit = rateLimit ( response: response) else { return false }
60- AppMetrics . githubRateLimitRemainingCount? . set ( limit)
61- return response. status == . forbidden && limit == 0
62- }
63-
6448 static func isRateLimited( _ response: HTTPClient . Response ) -> Bool {
6549 guard let limit = rateLimit ( response: response) else { return false }
6650 AppMetrics . githubRateLimitRemainingCount? . set ( limit)
@@ -95,36 +79,29 @@ extension Github {
9579 case readme
9680 }
9781
98- @available ( * , deprecated)
99- static func apiUri( owner: String , repository: String , resource: Resource ) -> URI {
100- switch resource {
101- case . license, . readme:
102- return URI ( string: " https://api.github.com/repos/ \( owner) / \( repository) / \( resource. rawValue) " )
103- }
104- }
105-
10682 static func apiURL( owner: String , repository: String , resource: Resource ) -> String {
10783 switch resource {
10884 case . license, . readme:
10985 return " https://api.github.com/repos/ \( owner) / \( repository) / \( resource. rawValue) "
11086 }
11187 }
11288
113- @available ( * , deprecated)
114- static func fetch( client: Client , uri: URI , headers: [ ( String , String ) ] = [ ] ) async throws -> ( content: String , etag: String ? ) {
89+ static func fetch( url: String , headers: [ ( String , String ) ] = [ ] ) async throws -> ( content: String , etag: String ? ) {
11590 guard let token = Current . githubToken ( ) else {
11691 throw Error . missingToken
11792 }
11893
119- let response = try await client. get ( uri, headers: defaultHeaders ( with: token) . adding ( contentsOf: headers) )
94+ @Dependency ( \. httpClient) var httpClient
95+
96+ let response = try await httpClient. get ( url: url, headers: defaultHeaders ( with: token) . adding ( contentsOf: headers) )
12097
12198 guard !isRateLimited( response) else {
122- Current . logger ( ) . critical ( " rate limited while fetching uri \( uri ) " )
99+ Current . logger ( ) . critical ( " rate limited while fetching \( url ) " )
123100 throw Error . requestFailed ( . tooManyRequests)
124101 }
125102
126103 guard response. status == . ok else {
127- Current . logger ( ) . warning ( " Github.fetch of ' \( uri . path ) ' failed with status \( response. status) " )
104+ Current . logger ( ) . warning ( " Github.fetch of ' \( url ) ' failed with status \( response. status) " )
128105 throw Error . requestFailed ( response. status)
129106 }
130107
@@ -136,26 +113,6 @@ extension Github {
136113 return ( body. asString ( ) , response. headers. first ( name: . eTag) )
137114 }
138115
139- @available ( * , deprecated)
140- static func fetchResource< T: Decodable > ( _ type: T . Type , client: Client , uri: URI ) async throws -> T {
141- guard let token = Current . githubToken ( ) else {
142- throw Error . missingToken
143- }
144-
145- let response = try await client. get ( uri, headers: defaultHeaders ( with: token) )
146-
147- guard !isRateLimited( response) else {
148- Current . logger ( ) . critical ( " rate limited while fetching resource \( uri) " )
149- throw Error . requestFailed ( . tooManyRequests)
150- }
151-
152- guard response. status == . ok else {
153- throw Error . requestFailed ( response. status)
154- }
155-
156- return try response. content. decode ( T . self, using: decoder)
157- }
158-
159116 static func fetchResource< T: Decodable > ( _ type: T . Type , url: String ) async throws -> T {
160117 guard let token = Current . githubToken ( ) else {
161118 throw Error . missingToken
@@ -181,11 +138,11 @@ extension Github {
181138 return try ? await Github . fetchResource ( Github . License. self, url: url)
182139 }
183140
184- static func fetchReadme( client : Client , owner: String , repository: String ) async -> Readme ? {
185- let uri = Github . apiUri ( owner: owner, repository: repository, resource: . readme)
141+ static func fetchReadme( owner: String , repository: String ) async -> Readme ? {
142+ let url = Github . apiURL ( owner: owner, repository: repository, resource: . readme)
186143
187144 // Fetch readme html content
188- let readme = try ? await Github . fetch ( client : client , uri : uri , headers: [
145+ let readme = try ? await Github . fetch ( url : url , headers: [
189146 ( " Accept " , " application/vnd.github.html+json " )
190147 ] )
191148 guard var html = readme? . content else { return nil }
@@ -195,7 +152,7 @@ extension Github {
195152 struct Response : Decodable {
196153 var htmlUrl : String
197154 }
198- return try ? await Github . fetchResource ( Response . self, client : client , uri : uri ) . htmlUrl
155+ return try ? await Github . fetchResource ( Response . self, url : url ) . htmlUrl
199156 } ( )
200157 guard let htmlUrl else { return nil }
201158
@@ -212,46 +169,12 @@ extension Github {
212169
213170extension Github {
214171
215- @available ( * , deprecated)
216- static let graphQLApiUri = URI ( string: " https://api.github.com/graphql " )
217172 static let graphQLApiURL = " https://api.github.com/graphql "
218173
219174 struct GraphQLQuery : Content {
220175 var query : String
221176 }
222177
223- @available ( * , deprecated)
224- static func fetchResource< T: Decodable > ( _ type: T . Type , client: Client , query: GraphQLQuery ) async throws ( Github. Error) -> T {
225- guard let token = Current . githubToken ( ) else {
226- throw Error . missingToken
227- }
228-
229- let response : ClientResponse
230- do {
231- response = try await client. post ( Self . graphQLApiUri, headers: defaultHeaders ( with: token) ) {
232- try $0. content. encode ( query)
233- }
234- } catch {
235- throw . postRequestFailed( graphQLApiUri. string, error)
236- }
237-
238- guard !isRateLimited( response) else {
239- Current . logger ( ) . critical ( " rate limited while fetching resource \( T . self) " )
240- throw Error . requestFailed ( . tooManyRequests)
241- }
242-
243- guard response. status == . ok else {
244- Current . logger ( ) . warning ( " fetchResource< \( T . self) > request failed with status \( response. status) " )
245- throw Error . requestFailed ( response. status)
246- }
247-
248- do {
249- return try response. content. decode ( T . self, using: decoder)
250- } catch {
251- throw . decodeContentFailed( graphQLApiUri. string, error)
252- }
253- }
254-
255178 static func fetchResource< T: Decodable > ( _ type: T . Type , query: GraphQLQuery ) async throws ( Github. Error) -> T {
256179 guard let token = Current . githubToken ( ) else {
257180 throw Error . missingToken
0 commit comments