blob: 850185deda5026cde5158749077995aaf70e37b7 [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(),
},
);
}
}