import fetch from 'node-fetch' ; import { createCodeHandler } from './utils' ; const { GITHUB_OAUTH_CLIENT_ID = '' , GITHUB_OAUTH_CLIENT_SECRET = '' } = process . env ; async function oauth ( code ) { const res = await fetch ( 'https://github.com/login/oauth/access_token' , { headers : { 'Content-Type' : 'application/json' , Accept : 'application/json' , } , redirect : 'follow' , method : 'post' , body : JSON . stringify ( { code , client_id : GITHUB_OAUTH_CLIENT_ID , client_secret : GITHUB_OAUTH_CLIENT_SECRET , } ) , } ) ; const body = await res . json ( ) ; const { access_token : accessToken , scope , error_description : errorDescription } = body ; if ( errorDescription ) { throw new Error ( errorDescription ) ; } else if ( scope !== 'repo' || ! accessToken || ! ( typeof accessToken === 'string' ) ) { console . log ( JSON . stringify ( body ) ) ; throw new Error ( `Cannot resolve response from GitHub` ) ; } return accessToken ; } export default createCodeHandler ( oauth ) ;