54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
|
/**
|
||
|
* Send a GraphQL query to the Github API
|
||
|
*/
|
||
|
async function queryGithubApi(query: string) {
|
||
|
const res = await fetch('https://api.github.com/graphql', {
|
||
|
method: 'POST',
|
||
|
headers: {
|
||
|
'Content-Type': 'application/json',
|
||
|
Authorization: 'bearer ' + process.env.GITHUB_API_SECRET,
|
||
|
},
|
||
|
body: JSON.stringify({
|
||
|
query,
|
||
|
}),
|
||
|
})
|
||
|
return await res.json()
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* What is the signed in user's login name?
|
||
|
*/
|
||
|
async function getSignedInUser(): Promise<{ login: 'steveruizok ' }> {
|
||
|
const res = await queryGithubApi(`
|
||
|
query {
|
||
|
viewer {
|
||
|
login
|
||
|
}
|
||
|
}`)
|
||
|
return res?.data?.viewer
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Is user with the login A sponsoring the user with the login B?
|
||
|
*/
|
||
|
async function isASponsoringB(loginA: string, loginB: string) {
|
||
|
const res = await queryGithubApi(`
|
||
|
query {
|
||
|
user(login: "${loginB}") {
|
||
|
isSponsoredBy(accountLogin: "${loginA}")
|
||
|
}
|
||
|
}`)
|
||
|
return res?.data?.user?.isSponsoredBy
|
||
|
}
|
||
|
|
||
|
const whitelist = ['steveruizok']
|
||
|
|
||
|
/**
|
||
|
* Is the current user sponsoring me?
|
||
|
*/
|
||
|
export async function isSignedInUserSponsoringMe() {
|
||
|
const user = await getSignedInUser()
|
||
|
if (whitelist.includes(user.login)) return true
|
||
|
return isASponsoringB('steveruizok', user.login)
|
||
|
}
|