Canvas: Handle repo diff

Refactor github and appmanager clients.
Remove dev mode ports/ingress definitions.

Change-Id: I0ca15cec897d5a8cfa1c89b8ec9c09c408686c64
diff --git a/apps/canvas/front/src/lib/config.ts b/apps/canvas/front/src/lib/config.ts
index 60d9966..63f6642 100644
--- a/apps/canvas/front/src/lib/config.ts
+++ b/apps/canvas/front/src/lib/config.ts
@@ -59,6 +59,7 @@
 	preBuildCommands?: { bin: string }[];
 	dev?: {
 		enabled: boolean;
+		username?: string;
 		ssh?: Domain;
 		codeServer?: Domain;
 	};
@@ -99,8 +100,12 @@
 			return null;
 		}
 		const networkMap = new Map(env.networks.map((n) => [n.domain, n.name]));
-		const ingressNodes = nodes.filter((n) => n.type === "gateway-https").filter((n) => n.data.https !== undefined);
-		const tcpNodes = nodes.filter((n) => n.type === "gateway-tcp").filter((n) => n.data.exposed !== undefined);
+		const ingressNodes = nodes
+			.filter((n) => n.type === "gateway-https")
+			.filter((n) => n.data.https !== undefined && !n.data.readonly);
+		const tcpNodes = nodes
+			.filter((n) => n.type === "gateway-tcp")
+			.filter((n) => n.data.exposed !== undefined && !n.data.readonly);
 		const findExpose = (n: AppNode): PortDomain[] => {
 			return n.data.ports
 				.map((p) => [n.id, p.id, p.name])
@@ -134,11 +139,13 @@
 							branch: n.data.repository.branch,
 							rootDir: n.data.repository.rootDir,
 						},
-						ports: (n.data.ports || []).map((p) => ({
-							name: p.name,
-							value: p.value,
-							protocol: "TCP", // TODO(gio)
-						})),
+						ports: (n.data.ports || [])
+							.filter((p) => !n.data.dev?.enabled || (p.value != 22 && p.value != 9090))
+							.map((p) => ({
+								name: p.name,
+								value: p.value,
+								protocol: "TCP", // TODO(gio)
+							})),
 						env: (n.data.envVars || [])
 							.filter((e) => "name" in e)
 							.map((e) => ({
@@ -172,17 +179,18 @@
 							: [],
 						dev: {
 							enabled: n.data.dev ? n.data.dev.enabled : false,
+							username: n.data.dev && n.data.dev.enabled ? env.user.username : undefined,
 							codeServer:
 								n.data.dev?.enabled && n.data.dev.expose != null
 									? {
-											network: n.data.dev.expose.network,
+											network: networkMap.get(n.data.dev.expose.network)!,
 											subdomain: n.data.dev.expose.subdomain,
 										}
 									: undefined,
 							ssh:
 								n.data.dev?.enabled && n.data.dev.expose != null
 									? {
-											network: n.data.dev.expose.network,
+											network: networkMap.get(n.data.dev.expose.network)!,
 											subdomain: n.data.dev.expose.subdomain,
 										}
 									: undefined,
diff --git a/apps/canvas/front/src/lib/state.ts b/apps/canvas/front/src/lib/state.ts
index 6e04e4c..7060327 100644
--- a/apps/canvas/front/src/lib/state.ts
+++ b/apps/canvas/front/src/lib/state.ts
@@ -361,6 +361,10 @@
 		github: z.boolean(),
 	}),
 	services: z.array(z.string()),
+	user: z.object({
+		id: z.string(),
+		username: z.string(),
+	}),
 });
 
 export type Env = z.infer<typeof envSchema>;
@@ -373,6 +377,10 @@
 		github: false,
 	},
 	services: [],
+	user: {
+		id: "",
+		username: "",
+	},
 };
 
 export type Project = {