import { AuthenticationSession , authentication , window } from 'vscode' ; import { Agent , globalAgent } from 'https' ; import { Octokit } from '@octokit/rest' ; import { httpsOverHttp } from 'tunnel' ; import { URL } from 'url' ; function getAgent ( url = process . env . HTTPS_PROXY ) { if ( ! url ) { return globalAgent ; } try { const { hostname , port , username , password } = new URL ( url ) ; const auth = username && password && `${ username }:${ password }` ; return httpsOverHttp ( { proxy : { host : hostname , port , proxyAuth : auth } } ) ; } catch ( e ) { window . showErrorMessage ( `HTTPS_PROXY environment variable ignored: ${ e . message }` ) ; return globalAgent ; } } const scopes = [ 'repo' , 'workflow' ] ; export async function getSession ( ) { return await authentication . getSession ( 'github' , scopes , { createIfNone : true } ) ; } let _octokit ; export function getOctokit ( ) { if ( ! _octokit ) { _octokit = getSession ( ) . then ( async ( session ) => { const token = session . accessToken ; const agent = getAgent ( ) ; const { Octokit } = await import ( '@octokit/rest' ) ; return new Octokit ( { request : { agent } , userAgent : 'GitHub VSCode' , auth : `token ${ token }` } ) ; } ) . then ( null , async ( err ) => { _octokit = undefined ; throw err ; } ) ; } return _octokit ; }