UNPKG

@grept/octokit

Version:

Octokit adapter module for other grt plugins

61 lines (48 loc) 1.52 kB
import * as Octokit from '@octokit/rest'; import * as RetryPlugin from '@octokit/plugin-retry'; import { Memoize } from 'lodash-decorators'; import { injectable } from 'inversify'; import { OctokitError } from './octokit.error'; @injectable() export class OctokitService { @Memoize() public getOctokit(token?: string) { return new (Octokit.plugin(RetryPlugin))({ auth: token, retry: { doNotRetry: [404], } }); } public async getFileContent(owner, repo, path, token?: string) { const octokit = await this.getOctokit(token); try { const response = await octokit.repos.getContents({ owner, repo, path, }); let buff = Buffer.from(response.data.content, 'base64'); let text = buff.toString('ascii'); return text; } catch (e) { throw new OctokitError(e.status); } } public async getPackageJson(owner, repo, token?: string) { return JSON.parse(await this.getFileContent(owner, repo, 'package.json', token)); } public async getRepos({ org, user, token }: { org: string, user: string, token?: string }): Promise<string[] | null> { const octokit = await this.getOctokit(token); const options = org ? octokit.repos.listForOrg.endpoint.merge({ org }) : octokit.repos.listForUser.endpoint.merge({ username: user }); try { const repos = await octokit.paginate(options); return repos.map(repo => repo.name); } catch (e) { return null; } } }