Canvas: Generate Github nodes out of the dodo-app config

Change-Id: Ifc5b09deb39352a3025f7ea66ce39b421daac94d
diff --git a/apps/canvas/back/src/github.ts b/apps/canvas/back/src/github.ts
index 7657043..df8eacf 100644
--- a/apps/canvas/back/src/github.ts
+++ b/apps/canvas/back/src/github.ts
@@ -1,34 +1,11 @@
 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(),
-});
-
-const DeployKeysSchema = z.array(
-	z.object({
-		id: z.number(),
-		key: z.string(),
-	}),
-);
-
-const WebhookSchema = z.object({
-	id: z.number(),
-	config: z.object({
-		url: z.string().optional(), // url might not always be present
-		content_type: z.string().optional(),
-	}),
-	events: z.array(z.string()),
-	active: z.boolean(),
-});
-
-const ListWebhooksResponseSchema = z.array(WebhookSchema);
-
-export type GithubRepository = z.infer<typeof GithubRepositorySchema>;
+import {
+	GithubRepository,
+	GithubRepositoriesSchema,
+	DeployKeysSchema,
+	ListWebhooksResponseSchema,
+	DeployKeys,
+} from "config";
 
 export class GithubClient {
 	private token: string;
@@ -49,13 +26,13 @@
 		const response = await axios.get("https://api.github.com/user/repos", {
 			headers: this.getHeaders(),
 		});
-		return z.array(GithubRepositorySchema).parse(response.data);
+		return GithubRepositoriesSchema.parse(response.data);
 	}
 
 	async addDeployKey(repoPath: string, key: string) {
 		const sshUrl = repoPath;
 		const repoOwnerAndName = sshUrl.replace("git@github.com:", "").replace(".git", "");
-		let existingKeys: z.infer<typeof DeployKeysSchema> = [];
+		let existingKeys: DeployKeys = [];
 		const response = await axios.get(`https://api.github.com/repos/${repoOwnerAndName}/keys`, {
 			headers: this.getHeaders(),
 		});