Canvas: Rework Deployment/Gateways tab
Change-Id: I938262b9a6ba2af060531e7dcdf91ddd66721385
diff --git a/apps/canvas/back/src/app_manager.ts b/apps/canvas/back/src/app_manager.ts
index 2f62ddd..803192c 100644
--- a/apps/canvas/back/src/app_manager.ts
+++ b/apps/canvas/back/src/app_manager.ts
@@ -1,9 +1,54 @@
import axios from "axios";
import { z } from "zod";
+const accessSchema = z.discriminatedUnion("type", [
+ z.object({
+ type: z.literal("https"),
+ name: z.string(),
+ address: z.string(),
+ }),
+ z.object({
+ type: z.literal("ssh"),
+ name: z.string(),
+ host: z.string(),
+ port: z.number(),
+ }),
+ z.object({
+ type: z.literal("tcp"),
+ name: z.string(),
+ host: z.string(),
+ port: z.number(),
+ }),
+ z.object({
+ type: z.literal("udp"),
+ name: z.string(),
+ host: z.string(),
+ port: z.number(),
+ }),
+ z.object({
+ type: z.literal("postgresql"),
+ name: z.string(),
+ host: z.string(),
+ port: z.number(),
+ database: z.string(),
+ username: z.string(),
+ password: z.string(),
+ }),
+ z.object({
+ type: z.literal("mongodb"),
+ name: z.string(),
+ host: z.string(),
+ port: z.number(),
+ database: z.string(),
+ username: z.string(),
+ password: z.string(),
+ }),
+]);
+
export const DeployResponseSchema = z.object({
id: z.string(),
deployKey: z.string(),
+ access: z.array(accessSchema),
});
export type DeployResponse = z.infer<typeof DeployResponseSchema>;
@@ -24,6 +69,7 @@
if (response.status !== 200) {
throw new Error(`Failed to deploy application: ${response.statusText}`);
}
+ console.log(response.data);
const result = DeployResponseSchema.safeParse(response.data);
if (!result.success) {
throw new Error(`Invalid deploy response format: ${result.error.message}`);
@@ -31,13 +77,20 @@
return result.data;
}
- async update(instanceId: string, config: unknown): Promise<boolean> {
+ async update(instanceId: string, config: unknown): Promise<DeployResponse> {
const response = await axios.request({
url: `${this.baseUrl}/api/dodo-app/${instanceId}`,
method: "put",
data: { config },
});
- return response.status === 200;
+ if (response.status !== 200) {
+ throw new Error(`Failed to update application: ${response.statusText}`);
+ }
+ const result = DeployResponseSchema.safeParse(response.data);
+ if (!result.success) {
+ throw new Error(`Invalid update response format: ${result.error.message}`);
+ }
+ return result.data;
}
async getStatus(instanceId: string): Promise<unknown> {