2020-05-20 15:49:46 +00:00
|
|
|
import got from './got'
|
|
|
|
import { BadgenError } from './create-badgen-handler'
|
|
|
|
|
|
|
|
const rand = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)]
|
|
|
|
|
2023-03-18 03:13:50 +00:00
|
|
|
// request github api (rest)
|
2023-03-18 05:09:19 +00:00
|
|
|
export function restGithub<T = any>(path: string, searchParams?: Record<string, string>) {
|
2020-05-20 15:49:46 +00:00
|
|
|
const headers = {
|
2023-03-18 03:13:50 +00:00
|
|
|
authorization: `Bearer ${pickGithubToken()}`,
|
|
|
|
accept: `application/vnd.github+json`,
|
|
|
|
'X-GitHub-Api-Version': '2022-11-28',
|
2020-05-20 15:49:46 +00:00
|
|
|
}
|
2020-07-15 06:37:18 +00:00
|
|
|
const prefixUrl = process.env.GITHUB_API || 'https://api.github.com/'
|
2023-03-18 05:09:19 +00:00
|
|
|
return got.get(path, { prefixUrl, headers, searchParams }).json<T>()
|
2020-05-20 15:49:46 +00:00
|
|
|
}
|
|
|
|
|
2023-03-18 03:13:50 +00:00
|
|
|
// request github api (graphql)
|
2020-05-20 15:49:46 +00:00
|
|
|
export function queryGithub<T = any>(query) {
|
|
|
|
const headers = {
|
|
|
|
authorization: `token ${pickGithubToken()}`,
|
|
|
|
accept: 'application/vnd.github.hawkgirl-preview+json'
|
|
|
|
}
|
|
|
|
const json = { query }
|
2020-07-15 06:37:18 +00:00
|
|
|
const endpoint =
|
|
|
|
process.env.GITHUB_API_GRAPHQL || 'https://api.github.com/graphql'
|
|
|
|
return got.post(endpoint, { json, headers }).json<T>()
|
2020-05-20 15:49:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function pickGithubToken() {
|
2020-07-15 06:37:18 +00:00
|
|
|
const { GH_TOKENS, GITHUB_TOKENS } = process.env
|
|
|
|
const githubTokens = GITHUB_TOKENS || GH_TOKENS
|
|
|
|
if (!githubTokens) {
|
2020-05-20 15:49:46 +00:00
|
|
|
throw new BadgenError({ status: 'token required' })
|
|
|
|
}
|
2020-07-15 06:37:18 +00:00
|
|
|
const tokens = githubTokens.split(',').map(segment => segment.trim())
|
2020-05-20 15:49:46 +00:00
|
|
|
return rand(tokens)
|
|
|
|
}
|