import cacheManager from '@server/lib/cache' ;
import logger from '@server/logger' ;
import ExternalAPI from './externalapi' ;
interface GitHubRelease {
url : string ;
assets_url : string ;
upload_url : string ;
html_url : string ;
id : number ;
node_id : string ;
tag_name : string ;
target_commitish : string ;
name : string ;
draft : boolean ;
prerelease : boolean ;
created_at : string ;
published_at : string ;
tarball_url : string ;
zipball_url : string ;
body : string ;
}
interface GithubCommit {
sha : string ;
node_id : string ;
commit : {
author : {
name : string ;
email : string ;
date : string ;
} ;
committer : {
name : string ;
email : string ;
date : string ;
} ;
message : string ;
tree : {
sha : string ;
url : string ;
} ;
url : string ;
comment_count : number ;
verification : {
verified : boolean ;
reason : string ;
signature : string ;
payload : string ;
} ;
} ;
url : string ;
html_url : string ;
comments_url : string ;
parents : [
{
sha : string ;
url : string ;
html_url : string ;
}
] ;
}
class GithubAPI extends ExternalAPI {
constructor ( ) {
super (
'https://api.github.com' ,
{ } ,
{
headers : {
'Content-Type' : 'application/json' ,
Accept : 'application/json' ,
} ,
nodeCache : cacheManager.getCache ( 'github' ) . data ,
}
) ;
}
public async getOverseerrReleases ( {
take = 20 ,
} : {
take? : number ;
} = { } ) : Promise < GitHubRelease [ ] > {
try {
const data = await this . get < GitHubRelease [ ] > (
'/repos/sct/overseerr/releases' ,
{
params : {
per_page : take ,
} ,
}
) ;
return data ;
} catch ( e ) {
logger . warn (
"Failed to retrieve GitHub releases. This may be an issue on GitHub's end. Overseerr can't check if it's on the latest version." ,
{ label : 'GitHub API' , errorMessage : e.message }
) ;
return [ ] ;
}
}
public async getOverseerrCommits ( {
take = 20 ,
branch = 'develop' ,
} : {
take? : number ;
branch? : string ;
} = { } ) : Promise < GithubCommit [ ] > {
try {
const data = await this . get < GithubCommit [ ] > (
'/repos/sct/overseerr/commits' ,
{
params : {
per_page : take ,
branch ,
} ,
}
) ;
return data ;
} catch ( e ) {
logger . warn (
"Failed to retrieve GitHub commits. This may be an issue on GitHub's end. Overseerr can't check if it's on the latest version." ,
{ label : 'GitHub API' , errorMessage : e.message }
) ;
return [ ] ;
}
}
}
export default GithubAPI ;