import { ApiResponse , create as apicreate } from "apisauce" ; export interface GithubApi { getRoot : ( ) => Promise < ApiResponse < { } > > ; getRate : ( ) => Promise < ApiResponse < { } > > ; getUser : ( username : string ) => Promise < ApiResponse < GithubResponse > > ; } export interface GithubUser { login : string ; id : number ; avatar_url : string ; gravatar_id : string ; url : string ; html_url : string ; followers_url : string ; following_url : string ; gists_url : string ; starred_url : string ; subscriptions_url : string ; organizations_url : string ; repos_url : string ; events_url : string ; received_events_url : string ; type : "User" ; site_admin : boolean ; score : number ; } export interface GithubResponse { total_count : number ; incomplete_results : false ; items : GithubUser [ ] ; } export const createAPI = ( baseURL = "https://api.github.com/" ) : GithubApi => { const api = apicreate ( { baseURL , headers : { "Cache-Control" : "no-cache" , } , timeout : 10000 , } ) ; const getRoot = ( ) => api . get < GithubResponse > ( "" ) ; const getRate = ( ) => api . get < GithubResponse > ( "rate_limit" ) ; const getUser = ( username ) => api . get < GithubResponse > ( "search/users" , { q : username } ) ; return { getRoot , getRate , getUser , } ; } ; export default { createAPI , } ;