blob: f234788fcea0f143ce2d0dcd6ab89343cd34bd33 [file] [log] [blame]
import axios from 'axios';
import { z } from 'zod';
export const GithubRepositorySchema = z.object({
id: z.number(),
name: z.string(),
full_name: z.string(),
html_url: z.string(),
ssh_url: z.string(),
});
export type GithubRepository = z.infer<typeof GithubRepositorySchema>;
export class GithubClient {
private token: string;
constructor(token: string) {
this.token = token;
}
private getHeaders() {
return {
"Authorization": `Bearer ${this.token}`,
"Accept": "application/vnd.github.v3+json",
};
}
async getRepositories(): Promise<GithubRepository[]> {
const response = await axios.get("https://api.github.com/user/repos", {
headers: this.getHeaders(),
});
return z.array(GithubRepositorySchema).parse(response.data);
}
async addDeployKey(repoPath: string, key: string) {
const sshUrl = repoPath;
const repoOwnerAndName = sshUrl.replace('git@github.com:', '').replace('.git', '');
await axios.post(
`https://api.github.com/repos/${repoOwnerAndName}/keys`,
{
title: "dodo",
key: key,
read_only: true
},
{
headers: this.getHeaders(),
}
);
}
}