From 50b0a5d61c7b67de2d7aaa6481b01133d8eab061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Vandormael?= Date: Tue, 18 Nov 2025 01:58:20 +0100 Subject: [PATCH 001/206] feat(auth): add autocomplete for 2FA OTP input --- apps/dokploy/pages/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/dokploy/pages/index.tsx b/apps/dokploy/pages/index.tsx index 8127b41fd..0e573eec8 100644 --- a/apps/dokploy/pages/index.tsx +++ b/apps/dokploy/pages/index.tsx @@ -328,7 +328,6 @@ export default function Home({ IS_CLOUD }: Props) { onChange={setTwoFactorCode} maxLength={6} pattern={REGEXP_ONLY_DIGITS} - autoComplete="off" autoFocus > From 464d58daaa68843b6b612f750e69d63219fc91d0 Mon Sep 17 00:00:00 2001 From: Nicolas LAURENT Date: Wed, 17 Sep 2025 18:23:21 +0200 Subject: [PATCH 002/206] feat(deployment): add support for Soft Serve webhooks --- .../pages/api/deploy/[refreshToken].ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/apps/dokploy/pages/api/deploy/[refreshToken].ts b/apps/dokploy/pages/api/deploy/[refreshToken].ts index 2ab607736..0ce50cae2 100644 --- a/apps/dokploy/pages/api/deploy/[refreshToken].ts +++ b/apps/dokploy/pages/api/deploy/[refreshToken].ts @@ -159,6 +159,10 @@ export default async function handler( normalizedCommits = req.body?.commits?.flatMap( (commit: any) => commit.modified, ); + } else if (provider === "soft-serve") { + normalizedCommits = req.body?.commits?.flatMap( + (commit: any) => commit.modified, + ); } const shouldDeployPaths = shouldDeploy( @@ -442,6 +446,13 @@ export const extractCommitMessage = (headers: any, body: any) => { : "NEW COMMIT"; } + // Soft Serve + if (headers["x-softserve-event"]) { + return body.commits && body.commits.length > 0 + ? body.commits[0].message + : "NEW COMMIT"; + } + if (headers["user-agent"]?.includes("Go-http-client")) { if (body.push_data && body.repository) { return `DockerHub image pushed: ${body.repository.repo_name}:${body.push_data.tag} by ${body.push_data.pusher}`; @@ -479,6 +490,11 @@ export const extractHash = (headers: any, body: any) => { return body.after || "NEW COMMIT"; } + // Soft Serve + if (headers["x-softserve-event"]) { + return body.after || "NEW COMMIT"; + } + return ""; }; @@ -495,6 +511,10 @@ export const extractBranchName = (headers: any, body: any) => { return body?.push?.changes[0]?.new?.name; } + if (headers["x-softserve-event"]?.includes("push")) { + return body?.ref ? body?.ref.replace("refs/heads/", "") : null; + } + return null; }; @@ -515,6 +535,10 @@ export const getProviderByHeader = (headers: any) => { return "bitbucket"; } + if (headers["x-softserve-event"]) { + return "soft-serve"; + } + return null; }; From f5f21ef195fd98aabbf50492fa7a21242bc8b5c9 Mon Sep 17 00:00:00 2001 From: Nicolas LAURENT Date: Fri, 19 Sep 2025 18:27:53 +0200 Subject: [PATCH 003/206] test(deployment): add Soft Serve tests --- apps/dokploy/__test__/deploy/github.test.ts | 11 +++++ .../__test__/deploy/soft-serve.test.ts | 49 +++++++++++++++++++ .../pages/api/deploy/[refreshToken].ts | 9 ++-- 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 apps/dokploy/__test__/deploy/soft-serve.test.ts diff --git a/apps/dokploy/__test__/deploy/github.test.ts b/apps/dokploy/__test__/deploy/github.test.ts index 46be44883..d2e773dfc 100644 --- a/apps/dokploy/__test__/deploy/github.test.ts +++ b/apps/dokploy/__test__/deploy/github.test.ts @@ -83,6 +83,14 @@ describe("GitHub Webhook Skip CI", () => { { commits: [{ message: "[skip ci] test" }] }, ), ).toBe("[skip ci] test"); + + // Soft Serve + expect( + extractCommitMessage( + { "x-softserve-event": "push" }, + { commits: [{ message: "[skip ci] test" }] }, + ), + ).toBe("[skip ci] test"); }); it("should handle missing commit message", () => { @@ -99,6 +107,9 @@ describe("GitHub Webhook Skip CI", () => { expect(extractCommitMessage({ "x-gitea-event": "push" }, {})).toBe( "NEW COMMIT", ); + expect(extractCommitMessage({ "x-softserve-event": "push" }, {})).toBe( + "NEW COMMIT", + ); }); }); diff --git a/apps/dokploy/__test__/deploy/soft-serve.test.ts b/apps/dokploy/__test__/deploy/soft-serve.test.ts new file mode 100644 index 000000000..609f15dee --- /dev/null +++ b/apps/dokploy/__test__/deploy/soft-serve.test.ts @@ -0,0 +1,49 @@ +import { describe, expect, it } from "vitest"; +import { + extractBranchName, + extractCommitMessage, + extractHash, + getProviderByHeader, +} from "@/pages/api/deploy/[refreshToken]"; + +describe("Soft Serve Webhook", () => { + const mockSoftServeHeaders = { + "x-softserve-event": "push", + }; + + const createMockBody = (message: string, hash: string, branch: string) => ({ + event: "push", + ref: `refs/heads/${branch}`, + after: hash, + commits: [{ message: message }], + }); + const message: string = "feat: add new feature"; + const hash: string = "3c91c24ef9560bddc695bce138bf8a7094ec3df5"; + const branch: string = "feat/add-new"; + const goodWebhook = createMockBody(message, hash, branch); + + it("should properly extract the provider name", () => { + expect(getProviderByHeader(mockSoftServeHeaders)).toBe("soft-serve"); + }); + + it("should properly extract the commit message", () => { + expect(extractCommitMessage(mockSoftServeHeaders, goodWebhook)).toBe( + message, + ); + }); + + it("should properly extract hash", () => { + expect(extractHash(mockSoftServeHeaders, goodWebhook)).toBe(hash); + }); + + it("should properly extract branch name", () => { + expect(extractBranchName(mockSoftServeHeaders, goodWebhook)).toBe(branch); + }); + + it("should gracefully handle invalid webhook", () => { + expect(getProviderByHeader({})).toBeNull(); + expect(extractCommitMessage(mockSoftServeHeaders, {})).toBe("NEW COMMIT"); + expect(extractHash(mockSoftServeHeaders, {})).toBe("NEW COMMIT"); + expect(extractBranchName(mockSoftServeHeaders, {})).toBeNull(); + }); +}); diff --git a/apps/dokploy/pages/api/deploy/[refreshToken].ts b/apps/dokploy/pages/api/deploy/[refreshToken].ts index 0ce50cae2..32ffe63ec 100644 --- a/apps/dokploy/pages/api/deploy/[refreshToken].ts +++ b/apps/dokploy/pages/api/deploy/[refreshToken].ts @@ -503,7 +503,10 @@ export const extractBranchName = (headers: any, body: any) => { return body?.ref?.replace("refs/heads/", ""); } - if (headers["x-gitlab-event"]) { + if ( + headers["x-gitlab-event"] || + headers["x-softserve-event"]?.includes("push") + ) { return body?.ref ? body?.ref.replace("refs/heads/", "") : null; } @@ -511,10 +514,6 @@ export const extractBranchName = (headers: any, body: any) => { return body?.push?.changes[0]?.new?.name; } - if (headers["x-softserve-event"]?.includes("push")) { - return body?.ref ? body?.ref.replace("refs/heads/", "") : null; - } - return null; }; From 0a401843f8c4766956a314e8d96011ae7d51cc80 Mon Sep 17 00:00:00 2001 From: nurikk <1525421+nurikk@users.noreply.github.com> Date: Thu, 8 Jan 2026 21:57:58 +0000 Subject: [PATCH 004/206] core: add ulimits configuration for Docker Swarm deployments Users deploying to Docker Swarm can now configure resource ulimits (nofile, nproc, etc.) to prevent applications from hitting system limits that cause crashes or degraded performance. --- apps/dokploy/__test__/drop/drop.test.ts | 1 + .../server/mechanizeDockerContainer.test.ts | 48 + apps/dokploy/__test__/traefik/traefik.test.ts | 1 + .../application/advanced/show-resources.tsx | 185 +- .../drizzle/0134_oval_shinobi_shaw.sql | 6 + apps/dokploy/drizzle/meta/0134_snapshot.json | 7004 +++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 7 + packages/server/src/db/schema/application.ts | 4 + packages/server/src/db/schema/mariadb.ts | 4 + packages/server/src/db/schema/mongo.ts | 4 + packages/server/src/db/schema/mysql.ts | 4 + packages/server/src/db/schema/postgres.ts | 4 + packages/server/src/db/schema/redis.ts | 4 + packages/server/src/db/schema/shared.ts | 18 + packages/server/src/services/rollbacks.ts | 2 + packages/server/src/utils/builders/index.ts | 3 +- .../server/src/utils/databases/mariadb.ts | 3 +- packages/server/src/utils/databases/mongo.ts | 3 +- packages/server/src/utils/databases/mysql.ts | 3 +- .../server/src/utils/databases/postgres.ts | 3 +- packages/server/src/utils/databases/redis.ts | 2 + packages/server/src/utils/docker/utils.ts | 5 + 22 files changed, 7311 insertions(+), 7 deletions(-) create mode 100644 apps/dokploy/drizzle/0134_oval_shinobi_shaw.sql create mode 100644 apps/dokploy/drizzle/meta/0134_snapshot.json diff --git a/apps/dokploy/__test__/drop/drop.test.ts b/apps/dokploy/__test__/drop/drop.test.ts index 1c0a446a3..adbed084c 100644 --- a/apps/dokploy/__test__/drop/drop.test.ts +++ b/apps/dokploy/__test__/drop/drop.test.ts @@ -146,6 +146,7 @@ const baseApp: ApplicationNested = { dockerContextPath: null, rollbackActive: false, stopGracePeriodSwarm: null, + ulimitsSwarm: null, }; describe("unzipDrop using real zip files", () => { diff --git a/apps/dokploy/__test__/server/mechanizeDockerContainer.test.ts b/apps/dokploy/__test__/server/mechanizeDockerContainer.test.ts index c12a272bc..b212fe34f 100644 --- a/apps/dokploy/__test__/server/mechanizeDockerContainer.test.ts +++ b/apps/dokploy/__test__/server/mechanizeDockerContainer.test.ts @@ -6,6 +6,7 @@ type MockCreateServiceOptions = { TaskTemplate?: { ContainerSpec?: { StopGracePeriod?: number; + Ulimits?: Array<{ Name: string; Soft: number; Hard: number }>; }; }; [key: string]: unknown; @@ -57,6 +58,7 @@ const createApplication = ( }, replicas: 1, stopGracePeriodSwarm: 0n, + ulimitsSwarm: null, serverId: "server-id", ...overrides, }) as unknown as ApplicationNested; @@ -106,4 +108,50 @@ describe("mechanizeDockerContainer", () => { "StopGracePeriod", ); }); + + it("passes ulimits to ContainerSpec when ulimitsSwarm is defined", async () => { + const ulimits = [ + { Name: "nofile", Soft: 10000, Hard: 20000 }, + { Name: "nproc", Soft: 4096, Hard: 8192 }, + ]; + const application = createApplication({ ulimitsSwarm: ulimits }); + + await mechanizeDockerContainer(application); + + expect(createServiceMock).toHaveBeenCalledTimes(1); + const call = createServiceMock.mock.calls[0]; + if (!call) { + throw new Error("createServiceMock should have been called once"); + } + const [settings] = call; + expect(settings.TaskTemplate?.ContainerSpec?.Ulimits).toEqual(ulimits); + }); + + it("omits Ulimits when ulimitsSwarm is null", async () => { + const application = createApplication({ ulimitsSwarm: null }); + + await mechanizeDockerContainer(application); + + expect(createServiceMock).toHaveBeenCalledTimes(1); + const call = createServiceMock.mock.calls[0]; + if (!call) { + throw new Error("createServiceMock should have been called once"); + } + const [settings] = call; + expect(settings.TaskTemplate?.ContainerSpec).not.toHaveProperty("Ulimits"); + }); + + it("omits Ulimits when ulimitsSwarm is an empty array", async () => { + const application = createApplication({ ulimitsSwarm: [] }); + + await mechanizeDockerContainer(application); + + expect(createServiceMock).toHaveBeenCalledTimes(1); + const call = createServiceMock.mock.calls[0]; + if (!call) { + throw new Error("createServiceMock should have been called once"); + } + const [settings] = call; + expect(settings.TaskTemplate?.ContainerSpec).not.toHaveProperty("Ulimits"); + }); }); diff --git a/apps/dokploy/__test__/traefik/traefik.test.ts b/apps/dokploy/__test__/traefik/traefik.test.ts index 8e678413c..41e5451c5 100644 --- a/apps/dokploy/__test__/traefik/traefik.test.ts +++ b/apps/dokploy/__test__/traefik/traefik.test.ts @@ -124,6 +124,7 @@ const baseApp: ApplicationNested = { username: null, dockerContextPath: null, stopGracePeriodSwarm: null, + ulimitsSwarm: null, }; const baseDomain: Domain = { diff --git a/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx b/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx index aea30e49b..509b9bb0d 100644 --- a/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx @@ -1,7 +1,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; -import { InfoIcon } from "lucide-react"; +import { InfoIcon, Plus, Trash2 } from "lucide-react"; import { useEffect } from "react"; -import { useForm } from "react-hook-form"; +import { useFieldArray, useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { AlertBlock } from "@/components/shared/alert-block"; @@ -31,6 +31,14 @@ import { TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; +import { Input } from "@/components/ui/input"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; import { api } from "@/utils/api"; const CPU_STEP = 0.25; @@ -50,13 +58,36 @@ const memoryConverter = createConverter(1024 * 1024, (mb) => { : `${formatNumber(mb)} MB`; }); +const ulimitSchema = z.object({ + Name: z.string().min(1, "Name is required"), + Soft: z.coerce.number().int().min(-1, "Must be >= -1"), + Hard: z.coerce.number().int().min(-1, "Must be >= -1"), +}); + const addResourcesSchema = z.object({ memoryReservation: z.string().optional(), cpuLimit: z.string().optional(), memoryLimit: z.string().optional(), cpuReservation: z.string().optional(), + ulimitsSwarm: z.array(ulimitSchema).optional(), }); +const ULIMIT_PRESETS = [ + { value: "nofile", label: "nofile (Open Files)" }, + { value: "nproc", label: "nproc (Processes)" }, + { value: "memlock", label: "memlock (Locked Memory)" }, + { value: "stack", label: "stack (Stack Size)" }, + { value: "core", label: "core (Core File Size)" }, + { value: "cpu", label: "cpu (CPU Time)" }, + { value: "data", label: "data (Data Segment)" }, + { value: "fsize", label: "fsize (File Size)" }, + { value: "locks", label: "locks (File Locks)" }, + { value: "msgqueue", label: "msgqueue (Message Queues)" }, + { value: "nice", label: "nice (Nice Priority)" }, + { value: "rtprio", label: "rtprio (Real-time Priority)" }, + { value: "sigpending", label: "sigpending (Pending Signals)" }, +]; + export type ServiceType = | "postgres" | "mongo" @@ -107,10 +138,16 @@ export const ShowResources = ({ id, type }: Props) => { cpuReservation: "", memoryLimit: "", memoryReservation: "", + ulimitsSwarm: [], }, resolver: zodResolver(addResourcesSchema), }); + const { fields, append, remove } = useFieldArray({ + control: form.control, + name: "ulimitsSwarm", + }); + useEffect(() => { if (data) { form.reset({ @@ -118,6 +155,7 @@ export const ShowResources = ({ id, type }: Props) => { cpuReservation: data?.cpuReservation || undefined, memoryLimit: data?.memoryLimit || undefined, memoryReservation: data?.memoryReservation || undefined, + ulimitsSwarm: (data as any)?.ulimitsSwarm || [], }); } }, [data, form, form.reset]); @@ -134,6 +172,10 @@ export const ShowResources = ({ id, type }: Props) => { cpuReservation: formData.cpuReservation || null, memoryLimit: formData.memoryLimit || null, memoryReservation: formData.memoryReservation || null, + ulimitsSwarm: + formData.ulimitsSwarm && formData.ulimitsSwarm.length > 0 + ? formData.ulimitsSwarm + : null, }) .then(async () => { toast.success("Resources Updated"); @@ -325,6 +367,145 @@ export const ShowResources = ({ id, type }: Props) => { }} /> + + {/* Ulimits Section */} +
+
+
+ Ulimits + + + + + + +

+ Set resource limits for the container. Each ulimit has + a soft limit (warning threshold) and hard limit + (maximum allowed). Use -1 for unlimited. +

+
+
+
+
+ +
+ + {fields.length > 0 && ( +
+ {fields.map((field, index) => ( +
+ ( + + Type + + + + )} + /> + ( + + + Soft Limit + + + + field.onChange(Number(e.target.value)) + } + /> + + + + )} + /> + ( + + + Hard Limit + + + + field.onChange(Number(e.target.value)) + } + /> + + + + )} + /> + +
+ ))} +
+ )} + + {fields.length === 0 && ( +

+ No ulimits configured. Click "Add Ulimit" to set + resource limits. +

+ )} +
+
diff --git a/apps/dokploy/components/dashboard/application/deployments/clear-deployments.tsx b/apps/dokploy/components/dashboard/application/deployments/clear-deployments.tsx new file mode 100644 index 000000000..d0f695ddb --- /dev/null +++ b/apps/dokploy/components/dashboard/application/deployments/clear-deployments.tsx @@ -0,0 +1,78 @@ +import { Paintbrush } from "lucide-react"; +import { toast } from "sonner"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; +import { Button } from "@/components/ui/button"; +import { api } from "@/utils/api"; + +interface Props { + id: string; + type: "application" | "compose"; +} + +export const ClearDeployments = ({ id, type }: Props) => { + const utils = api.useUtils(); + const { mutateAsync, isLoading } = + type === "application" + ? api.application.clearDeployments.useMutation() + : api.compose.clearDeployments.useMutation(); + const { data: isCloud } = api.settings.isCloud.useQuery(); + + if (isCloud) { + return null; + } + + return ( + + + + + + + + Are you sure you want to clear old deployments? + + + This will delete all old deployment records and logs, keeping only the active deployment (the most recent successful one). + + + + Cancel + { + await mutateAsync({ + applicationId: id || "", + composeId: id || "", + }) + .then(async (result) => { + toast.success(`${result.deletedCount} old deployments cleared successfully`); + // Invalidate deployment queries to refresh the list + await utils.deployment.allByType.invalidate({ + id, + type, + }); + }) + .catch((err) => { + toast.error(err.message); + }); + }} + > + Confirm + + + + + ); +}; diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx index cfe747d27..159b89442 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx @@ -25,6 +25,7 @@ import { import { api, type RouterOutputs } from "@/utils/api"; import { ShowRollbackSettings } from "../rollbacks/show-rollback-settings"; import { CancelQueues } from "./cancel-queues"; +import { ClearDeployments } from "./clear-deployments"; import { KillBuild } from "./kill-build"; import { RefreshToken } from "./refresh-token"; import { ShowDeployment } from "./show-deployment"; @@ -144,6 +145,9 @@ export const ShowDeployments = ({
+ {(type === "application" || type === "compose") && ( + + )} {(type === "application" || type === "compose") && ( )} diff --git a/apps/dokploy/server/api/routers/application.ts b/apps/dokploy/server/api/routers/application.ts index c0666fcc7..71d5dadb3 100644 --- a/apps/dokploy/server/api/routers/application.ts +++ b/apps/dokploy/server/api/routers/application.ts @@ -1,6 +1,7 @@ import { addNewService, checkServiceAccess, + clearOldDeploymentsByApplicationId, createApplication, deleteAllMiddlewares, findApplicationById, @@ -734,6 +735,26 @@ export const applicationRouter = createTRPCRouter({ } await cleanQueuesByApplication(input.applicationId); }), + clearDeployments: protectedProcedure + .input(apiFindOneApplication) + .mutation(async ({ input, ctx }) => { + const application = await findApplicationById(input.applicationId); + if ( + application.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to clear deployments for this application", + }); + } + const result = await clearOldDeploymentsByApplicationId(input.applicationId); + return { + success: true, + message: `${result.deletedCount} old deployments cleared successfully`, + deletedCount: result.deletedCount, + }; + }), killBuild: protectedProcedure .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index 9354988a8..2b548e1f0 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -2,6 +2,7 @@ import { addDomainToCompose, addNewService, checkServiceAccess, + clearOldDeploymentsByComposeId, cloneCompose, createCommand, createCompose, @@ -252,6 +253,26 @@ export const composeRouter = createTRPCRouter({ await cleanQueuesByCompose(input.composeId); return { success: true, message: "Queues cleaned successfully" }; }), + clearDeployments: protectedProcedure + .input(apiFindCompose) + .mutation(async ({ input, ctx }) => { + const compose = await findComposeById(input.composeId); + if ( + compose.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to clear deployments for this compose", + }); + } + const result = await clearOldDeploymentsByComposeId(input.composeId); + return { + success: true, + message: `${result.deletedCount} old deployments cleared successfully`, + deletedCount: result.deletedCount, + }; + }), killBuild: protectedProcedure .input(apiFindCompose) .mutation(async ({ input, ctx }) => { diff --git a/packages/server/src/services/deployment.ts b/packages/server/src/services/deployment.ts index 6244ec8eb..1ba477cf0 100644 --- a/packages/server/src/services/deployment.ts +++ b/packages/server/src/services/deployment.ts @@ -831,3 +831,111 @@ export const findAllDeploymentsByServerId = async (serverId: string) => { }); return deploymentsList; }; + +export const clearOldDeploymentsByApplicationId = async ( + applicationId: string, +) => { + // Get all deployments ordered by creation date (newest first) + const deploymentsList = await db.query.deployments.findMany({ + where: eq(deployments.applicationId, applicationId), + orderBy: desc(deployments.createdAt), + }); + + // Find the most recent successful deployment (status "done") + const activeDeployment = deploymentsList.find( + (deployment) => deployment.status === "done", + ); + + // If there's an active deployment, keep it and remove all others + // If there's no active deployment, keep the most recent one and remove the rest + let deploymentsToKeep: string[] = []; + + if (activeDeployment) { + deploymentsToKeep.push(activeDeployment.deploymentId); + } else if (deploymentsList.length > 0) { + // Keep the most recent deployment even if it's not "done" + deploymentsToKeep.push(deploymentsList[0]!.deploymentId); + } + + const deploymentsToDelete = deploymentsList.filter( + (deployment) => !deploymentsToKeep.includes(deployment.deploymentId), + ); + + // Delete old deployments and their log files + for (const deployment of deploymentsToDelete) { + if (deployment.rollbackId) { + await removeRollbackById(deployment.rollbackId); + } + + // Remove log file if it exists + const logPath = deployment.logPath; + if (logPath && logPath !== "." && existsSync(logPath)) { + try { + await fsPromises.unlink(logPath); + } catch (error) { + console.error(`Error removing log file ${logPath}:`, error); + } + } + + // Delete deployment from database + await removeDeployment(deployment.deploymentId); + } + + return { + deletedCount: deploymentsToDelete.length, + keptDeployment: deploymentsToKeep[0] || null, + }; +}; + +export const clearOldDeploymentsByComposeId = async (composeId: string) => { + // Get all deployments ordered by creation date (newest first) + const deploymentsList = await db.query.deployments.findMany({ + where: eq(deployments.composeId, composeId), + orderBy: desc(deployments.createdAt), + }); + + // Find the most recent successful deployment (status "done") + const activeDeployment = deploymentsList.find( + (deployment) => deployment.status === "done", + ); + + // If there's an active deployment, keep it and remove all others + // If there's no active deployment, keep the most recent one and remove the rest + let deploymentsToKeep: string[] = []; + + if (activeDeployment) { + deploymentsToKeep.push(activeDeployment.deploymentId); + } else if (deploymentsList.length > 0) { + // Keep the most recent deployment even if it's not "done" + deploymentsToKeep.push(deploymentsList[0]!.deploymentId); + } + + const deploymentsToDelete = deploymentsList.filter( + (deployment) => !deploymentsToKeep.includes(deployment.deploymentId), + ); + + // Delete old deployments and their log files + for (const deployment of deploymentsToDelete) { + if (deployment.rollbackId) { + await removeRollbackById(deployment.rollbackId); + } + + // Remove log file if it exists + const logPath = deployment.logPath; + if (logPath && logPath !== "." && existsSync(logPath)) { + try { + await fsPromises.unlink(logPath); + } catch (error) { + console.error(`Error removing log file ${logPath}:`, error); + } + } + + // Delete deployment from database + await removeDeployment(deployment.deploymentId); + } + + return { + deletedCount: deploymentsToDelete.length, + keptDeployment: deploymentsToKeep[0] || null, + }; +}; From 95dd9ddeb61f767e1b8b50f1a9c61bd2eb41355b Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 02:30:23 +0000 Subject: [PATCH 008/206] [autofix.ci] apply automated fixes --- .../deployments/clear-deployments.tsx | 131 +++++++++--------- .../dokploy/server/api/routers/application.ts | 7 +- apps/dokploy/server/api/routers/compose.ts | 3 +- packages/server/src/services/deployment.ts | 12 +- 4 files changed, 80 insertions(+), 73 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/deployments/clear-deployments.tsx b/apps/dokploy/components/dashboard/application/deployments/clear-deployments.tsx index d0f695ddb..70f9d2554 100644 --- a/apps/dokploy/components/dashboard/application/deployments/clear-deployments.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/clear-deployments.tsx @@ -1,78 +1,81 @@ import { Paintbrush } from "lucide-react"; import { toast } from "sonner"; import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogTitle, - AlertDialogTrigger, + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, } from "@/components/ui/alert-dialog"; import { Button } from "@/components/ui/button"; import { api } from "@/utils/api"; interface Props { - id: string; - type: "application" | "compose"; + id: string; + type: "application" | "compose"; } export const ClearDeployments = ({ id, type }: Props) => { - const utils = api.useUtils(); - const { mutateAsync, isLoading } = - type === "application" - ? api.application.clearDeployments.useMutation() - : api.compose.clearDeployments.useMutation(); - const { data: isCloud } = api.settings.isCloud.useQuery(); + const utils = api.useUtils(); + const { mutateAsync, isLoading } = + type === "application" + ? api.application.clearDeployments.useMutation() + : api.compose.clearDeployments.useMutation(); + const { data: isCloud } = api.settings.isCloud.useQuery(); - if (isCloud) { - return null; - } + if (isCloud) { + return null; + } - return ( - - - - - - - - Are you sure you want to clear old deployments? - - - This will delete all old deployment records and logs, keeping only the active deployment (the most recent successful one). - - - - Cancel - { - await mutateAsync({ - applicationId: id || "", - composeId: id || "", - }) - .then(async (result) => { - toast.success(`${result.deletedCount} old deployments cleared successfully`); - // Invalidate deployment queries to refresh the list - await utils.deployment.allByType.invalidate({ - id, - type, - }); - }) - .catch((err) => { - toast.error(err.message); - }); - }} - > - Confirm - - - - - ); + return ( + + + + + + + + Are you sure you want to clear old deployments? + + + This will delete all old deployment records and logs, keeping only + the active deployment (the most recent successful one). + + + + Cancel + { + await mutateAsync({ + applicationId: id || "", + composeId: id || "", + }) + .then(async (result) => { + toast.success( + `${result.deletedCount} old deployments cleared successfully`, + ); + // Invalidate deployment queries to refresh the list + await utils.deployment.allByType.invalidate({ + id, + type, + }); + }) + .catch((err) => { + toast.error(err.message); + }); + }} + > + Confirm + + + + + ); }; diff --git a/apps/dokploy/server/api/routers/application.ts b/apps/dokploy/server/api/routers/application.ts index 71d5dadb3..1cd659644 100644 --- a/apps/dokploy/server/api/routers/application.ts +++ b/apps/dokploy/server/api/routers/application.ts @@ -745,10 +745,13 @@ export const applicationRouter = createTRPCRouter({ ) { throw new TRPCError({ code: "UNAUTHORIZED", - message: "You are not authorized to clear deployments for this application", + message: + "You are not authorized to clear deployments for this application", }); } - const result = await clearOldDeploymentsByApplicationId(input.applicationId); + const result = await clearOldDeploymentsByApplicationId( + input.applicationId, + ); return { success: true, message: `${result.deletedCount} old deployments cleared successfully`, diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index 2b548e1f0..7e5ccf52e 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -263,7 +263,8 @@ export const composeRouter = createTRPCRouter({ ) { throw new TRPCError({ code: "UNAUTHORIZED", - message: "You are not authorized to clear deployments for this compose", + message: + "You are not authorized to clear deployments for this compose", }); } const result = await clearOldDeploymentsByComposeId(input.composeId); diff --git a/packages/server/src/services/deployment.ts b/packages/server/src/services/deployment.ts index 1ba477cf0..279a089aa 100644 --- a/packages/server/src/services/deployment.ts +++ b/packages/server/src/services/deployment.ts @@ -849,7 +849,7 @@ export const clearOldDeploymentsByApplicationId = async ( // If there's an active deployment, keep it and remove all others // If there's no active deployment, keep the most recent one and remove the rest let deploymentsToKeep: string[] = []; - + if (activeDeployment) { deploymentsToKeep.push(activeDeployment.deploymentId); } else if (deploymentsList.length > 0) { @@ -866,7 +866,7 @@ export const clearOldDeploymentsByApplicationId = async ( if (deployment.rollbackId) { await removeRollbackById(deployment.rollbackId); } - + // Remove log file if it exists const logPath = deployment.logPath; if (logPath && logPath !== "." && existsSync(logPath)) { @@ -876,7 +876,7 @@ export const clearOldDeploymentsByApplicationId = async ( console.error(`Error removing log file ${logPath}:`, error); } } - + // Delete deployment from database await removeDeployment(deployment.deploymentId); } @@ -902,7 +902,7 @@ export const clearOldDeploymentsByComposeId = async (composeId: string) => { // If there's an active deployment, keep it and remove all others // If there's no active deployment, keep the most recent one and remove the rest let deploymentsToKeep: string[] = []; - + if (activeDeployment) { deploymentsToKeep.push(activeDeployment.deploymentId); } else if (deploymentsList.length > 0) { @@ -919,7 +919,7 @@ export const clearOldDeploymentsByComposeId = async (composeId: string) => { if (deployment.rollbackId) { await removeRollbackById(deployment.rollbackId); } - + // Remove log file if it exists const logPath = deployment.logPath; if (logPath && logPath !== "." && existsSync(logPath)) { @@ -929,7 +929,7 @@ export const clearOldDeploymentsByComposeId = async (composeId: string) => { console.error(`Error removing log file ${logPath}:`, error); } } - + // Delete deployment from database await removeDeployment(deployment.deploymentId); } From 2be938a695ae6297d97639a9a9644d0b4d21b4a0 Mon Sep 17 00:00:00 2001 From: Marc Fernandez Date: Sun, 21 Dec 2025 16:29:14 +0100 Subject: [PATCH 009/206] feat: add individual deployment deletion --- .../deployments/show-deployments.tsx | 40 ++++++++++++++++++- apps/dokploy/server/api/routers/deployment.ts | 11 +++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx index 159b89442..ffe35cd34 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx @@ -6,6 +6,7 @@ import { RefreshCcw, RocketIcon, Settings, + Trash2, } from "lucide-react"; import React, { useEffect, useMemo, useState } from "react"; import { toast } from "sonner"; @@ -78,6 +79,8 @@ export const ShowDeployments = ({ api.rollback.rollback.useMutation(); const { mutateAsync: killProcess, isLoading: isKillingProcess } = api.deployment.killProcess.useMutation(); + const { mutateAsync: removeDeployment, isLoading: isRemovingDeployment } = + api.deployment.removeDeployment.useMutation(); // Cancel deployment mutations const { @@ -256,7 +259,15 @@ export const ShowDeployments = ({ const isExpanded = expandedDescriptions.has( deployment.deploymentId, ); - + const lastSuccessfulDeployment = deployments?.find( + (d) => d.status === "done" + ); + const isLastSuccessfulDeployment = + lastSuccessfulDeployment?.deploymentId === deployment.deploymentId; + const canDelete = + deployments && + deployments.length > 1 && + !isLastSuccessfulDeployment; return (
+ {canDelete && ( + { + try { + await removeDeployment({ + deploymentId: deployment.deploymentId, + }); + toast.success("Deployment deleted successfully"); + } catch (error) { + toast.error("Error deleting deployment"); + } + }} + > + + + )} + {deployment?.rollback && deployment.status === "done" && type === "application" && ( diff --git a/apps/dokploy/server/api/routers/deployment.ts b/apps/dokploy/server/api/routers/deployment.ts index 9004a0a05..d9fab404f 100644 --- a/apps/dokploy/server/api/routers/deployment.ts +++ b/apps/dokploy/server/api/routers/deployment.ts @@ -8,6 +8,7 @@ import { findComposeById, findDeploymentById, findServerById, + removeDeployment, updateDeploymentStatus, } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; @@ -107,4 +108,14 @@ export const deploymentRouter = createTRPCRouter({ await updateDeploymentStatus(deployment.deploymentId, "error"); }), + + removeDeployment: protectedProcedure + .input( + z.object({ + deploymentId: z.string().min(1), + }), + ) + .mutation(async ({ input }) => { + return await removeDeployment(input.deploymentId); + }), }); From 2be92d20bb43fd78f164bf39865069548441c444 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 9 Jan 2026 06:15:41 +0000 Subject: [PATCH 010/206] [autofix.ci] apply automated fixes --- .../application/deployments/show-deployments.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx index ffe35cd34..294772228 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx @@ -260,13 +260,14 @@ export const ShowDeployments = ({ deployment.deploymentId, ); const lastSuccessfulDeployment = deployments?.find( - (d) => d.status === "done" + (d) => d.status === "done", ); - const isLastSuccessfulDeployment = - lastSuccessfulDeployment?.deploymentId === deployment.deploymentId; - const canDelete = - deployments && - deployments.length > 1 && + const isLastSuccessfulDeployment = + lastSuccessfulDeployment?.deploymentId === + deployment.deploymentId; + const canDelete = + deployments && + deployments.length > 1 && !isLastSuccessfulDeployment; return (
Date: Wed, 28 Jan 2026 13:35:29 +0700 Subject: [PATCH 011/206] feat(compose): update docker-compose command to always pull images --- packages/server/src/utils/builders/compose.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/utils/builders/compose.ts b/packages/server/src/utils/builders/compose.ts index 5eede59d5..7e45a7543 100644 --- a/packages/server/src/utils/builders/compose.ts +++ b/packages/server/src/utils/builders/compose.ts @@ -88,7 +88,7 @@ export const createCommand = (compose: ComposeNested) => { let command = ""; if (composeType === "docker-compose") { - command = `compose -p ${appName} -f ${path} up -d --build --remove-orphans`; + command = `compose -p ${appName} -f ${path} up -d --build --pull always --remove-orphans`; } else if (composeType === "stack") { command = `stack deploy -c ${path} ${appName} --prune --with-registry-auth`; } From 44f8590fe8bd847ac967674018210a389c835c0c Mon Sep 17 00:00:00 2001 From: Vicens Juan Tomas Monserrat Date: Wed, 4 Feb 2026 10:00:03 +0100 Subject: [PATCH 012/206] fix: extract ZIP drop deployment to build server when configured --- packages/server/src/utils/builders/drop.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/server/src/utils/builders/drop.ts b/packages/server/src/utils/builders/drop.ts index 396c52d96..2dd578774 100644 --- a/packages/server/src/utils/builders/drop.ts +++ b/packages/server/src/utils/builders/drop.ts @@ -16,10 +16,13 @@ export const unzipDrop = async (zipFile: File, application: Application) => { try { const { appName } = application; - const { APPLICATIONS_PATH } = paths(!!application.serverId); + // Use buildServerId if set, otherwise fall back to serverId + // This ensures the code is extracted to the server where the build will run + const targetServerId = application.buildServerId || application.serverId; + const { APPLICATIONS_PATH } = paths(!!targetServerId); const outputPath = join(APPLICATIONS_PATH, appName, "code"); - if (application.serverId) { - await recreateDirectoryRemote(outputPath, application.serverId); + if (targetServerId) { + await recreateDirectoryRemote(outputPath, targetServerId); } else { await recreateDirectory(outputPath); } @@ -45,8 +48,8 @@ export const unzipDrop = async (zipFile: File, application: Application) => { ? rootEntries[0]?.entryName.split("/")[0] : ""; - if (application.serverId) { - sftp = await getSFTPConnection(application.serverId); + if (targetServerId) { + sftp = await getSFTPConnection(targetServerId); } for (const entry of zipEntries) { let filePath = entry.entryName; @@ -63,13 +66,13 @@ export const unzipDrop = async (zipFile: File, application: Application) => { const fullPath = path.join(outputPath, filePath).replace(/\\/g, "/"); - if (application.serverId) { + if (targetServerId) { if (!entry.isDirectory) { if (sftp === null) throw new Error("No SFTP connection available"); try { const dirPath = path.dirname(fullPath); await execAsyncRemote( - application.serverId, + targetServerId, `mkdir -p "${dirPath}"`, ); await uploadFileToServer(sftp, entry.getData(), fullPath); From 5c3b7acd54a434935f2c7e03a5f5951e4e9c4c1f Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 09:14:32 +0000 Subject: [PATCH 013/206] [autofix.ci] apply automated fixes --- packages/server/src/utils/builders/drop.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/server/src/utils/builders/drop.ts b/packages/server/src/utils/builders/drop.ts index 2dd578774..e04f2d253 100644 --- a/packages/server/src/utils/builders/drop.ts +++ b/packages/server/src/utils/builders/drop.ts @@ -71,10 +71,7 @@ export const unzipDrop = async (zipFile: File, application: Application) => { if (sftp === null) throw new Error("No SFTP connection available"); try { const dirPath = path.dirname(fullPath); - await execAsyncRemote( - targetServerId, - `mkdir -p "${dirPath}"`, - ); + await execAsyncRemote(targetServerId, `mkdir -p "${dirPath}"`); await uploadFileToServer(sftp, entry.getData(), fullPath); } catch (err) { console.error(`Error uploading file ${fullPath}:`, err); From de2579401cee215eb9fdfd468582544072afb700 Mon Sep 17 00:00:00 2001 From: Fernando Giacomino Date: Wed, 4 Feb 2026 11:10:13 -0300 Subject: [PATCH 014/206] Replace logo.svg with updated SVG design Updated logo.svg with polished stroke and centered space for better fit on apps. --- apps/dokploy/public/logo.svg | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/dokploy/public/logo.svg b/apps/dokploy/public/logo.svg index 7221dc4f2..3fd255832 100644 --- a/apps/dokploy/public/logo.svg +++ b/apps/dokploy/public/logo.svg @@ -1 +1,12 @@ - \ No newline at end of file + + + From ec7bf9fd2f8442f8bdde87e68e430777c37df7b5 Mon Sep 17 00:00:00 2001 From: bdkopen Date: Sat, 27 Dec 2025 12:04:02 -0500 Subject: [PATCH 015/206] chore: update `sha.js` subdependency Resolves https://github.com/browserify/sha.js/security/advisories/GHSA-95m3-7q98-8xr5 --- pnpm-lock.yaml | 126 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 122 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a5d30b8dd..04aa6a616 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4640,6 +4640,10 @@ packages: peerDependencies: postcss: ^8.1.0 + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + axios@1.9.0: resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} @@ -4828,6 +4832,10 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -5192,6 +5200,10 @@ packages: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -5622,6 +5634,10 @@ packages: debug: optional: true + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -5772,6 +5788,9 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -5986,6 +6005,10 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -6055,6 +6078,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} @@ -6063,6 +6090,9 @@ packages: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -6938,6 +6968,10 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -7491,11 +7525,16 @@ packages: set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} hasBin: true shallow-equal@1.2.1: @@ -7816,6 +7855,10 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7905,6 +7948,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + types-ramda@0.30.1: resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==} @@ -8135,6 +8182,10 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -12402,6 +12453,10 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + axios@1.9.0: dependencies: follow-redirects: 1.15.9 @@ -12631,6 +12686,13 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -12956,6 +13018,12 @@ snapshots: defer-to-connect@2.0.1: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + define-lazy-prop@3.0.0: {} defu@6.1.4: {} @@ -13381,6 +13449,10 @@ snapshots: follow-redirects@1.15.9: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -13576,6 +13648,10 @@ snapshots: has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -13815,6 +13891,8 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-callable@1.2.7: {} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -13861,12 +13939,18 @@ snapshots: is-stream@3.0.0: {} + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + is-what@4.1.16: {} is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 + isarray@2.0.5: {} + isexe@2.0.0: {} isexe@3.1.1: @@ -14882,6 +14966,8 @@ snapshots: pngjs@5.0.0: {} + possible-typed-array-names@1.1.0: {} + postcss-import@15.1.0(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -15498,12 +15584,22 @@ snapshots: set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + setprototypeof@1.2.0: {} - sha.js@2.4.11: + sha.js@2.4.12: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + to-buffer: 1.2.2 shallow-equal@1.2.1: {} @@ -15810,7 +15906,7 @@ snapshots: remarkable: 2.0.1 reselect: 5.1.1 serialize-error: 8.1.0 - sha.js: 2.4.11 + sha.js: 2.4.12 swagger-client: 3.35.3 url-parse: 1.5.10 xml: 1.0.1 @@ -15924,6 +16020,12 @@ snapshots: tinyrainbow@3.0.3: {} + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -16001,6 +16103,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + types-ramda@0.30.1: dependencies: ts-toolbelt: 9.6.0 @@ -16218,6 +16326,16 @@ snapshots: which-module@2.0.1: {} + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 From 65767318425e5d861c61ce6a7f96713cbb5b49a3 Mon Sep 17 00:00:00 2001 From: bdkopen Date: Sat, 27 Dec 2025 12:20:44 -0500 Subject: [PATCH 016/206] chore: update `form-data` subdependency Resolves https://github.com/advisories/GHSA-fjxv-7rqg-78g4 --- pnpm-lock.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04aa6a616..75e5789f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5646,8 +5646,8 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} format@0.2.2: @@ -12460,7 +12460,7 @@ snapshots: axios@1.9.0: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.2 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -13460,11 +13460,12 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@4.0.2: + form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 format@0.2.2: {} From 5b2b0db6869eb1dc77a674a5a602878982268fe4 Mon Sep 17 00:00:00 2001 From: bdkopen Date: Sat, 27 Dec 2025 12:25:42 -0500 Subject: [PATCH 017/206] chore: update `jws` subdependency Resolves https://github.com/advisories/GHSA-869p-cjfg-cm3x --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75e5789f1..e27468145 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6211,8 +6211,8 @@ packages: jwa@1.4.2: resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.3: + resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -14007,7 +14007,7 @@ snapshots: jsonwebtoken@9.0.2: dependencies: - jws: 3.2.2 + jws: 3.2.3 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -14116,7 +14116,7 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.2: + jws@3.2.3: dependencies: jwa: 1.4.2 safe-buffer: 5.2.1 From f9eda8e95d72ca667a83f5fae3bae3f3d824e457 Mon Sep 17 00:00:00 2001 From: bdkopen Date: Sat, 10 Jan 2026 00:43:20 -0500 Subject: [PATCH 018/206] chore: update `axios` subdependency Resolves https://github.com/advisories/GHSA-4hjh-wcwx-xvwj --- pnpm-lock.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e27468145..77b8a2bde 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4644,8 +4644,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.9.0: - resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -5625,8 +5625,8 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -11907,7 +11907,7 @@ snapshots: '@swagger-api/apidom-core': 1.0.0-beta.39 '@swagger-api/apidom-error': 1.0.0-beta.39 '@types/ramda': 0.30.2 - axios: 1.9.0 + axios: 1.13.2 minimatch: 7.4.6 process: 0.11.10 ramda: 0.30.1 @@ -12457,9 +12457,9 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axios@1.9.0: + axios@1.13.2: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.15.11 form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -13447,7 +13447,7 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - follow-redirects@1.15.9: {} + follow-redirects@1.15.11: {} for-each@0.3.5: dependencies: From f25ed46dbcc608a7e95256c1a4a048ac6e5e041a Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 03:18:44 -0600 Subject: [PATCH 019/206] feat(migration): add migration entry point and update start script - Added a new entry point for migration in the esbuild configuration. - Updated the start script in package.json to run the migration before starting the server. - Removed the direct migration call from the server initialization process to streamline the workflow. --- apps/dokploy/esbuild.config.ts | 1 + apps/dokploy/package.json | 2 +- apps/dokploy/server/server.ts | 6 ------ 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/dokploy/esbuild.config.ts b/apps/dokploy/esbuild.config.ts index a1747ac55..d2f434255 100644 --- a/apps/dokploy/esbuild.config.ts +++ b/apps/dokploy/esbuild.config.ts @@ -24,6 +24,7 @@ try { .build({ entryPoints: { server: "server/server.ts", + migration: "migration.ts", "reset-password": "reset-password.ts", "reset-2fa": "reset-2fa.ts", }, diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index c1d00d67c..43b1c5ff1 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "build": "npm run build-server && npm run build-next", - "start": "node -r dotenv/config dist/server.mjs", + "start": "node -r dotenv/config dist/migration.mjs && node -r dotenv/config dist/server.mjs", "build-server": "tsx esbuild.config.ts", "build-next": "next build --webpack", "setup": "tsx -r dotenv/config setup.ts && sleep 5 && pnpm run migration:run", diff --git a/apps/dokploy/server/server.ts b/apps/dokploy/server/server.ts index dbd7c2638..5d6d703fa 100644 --- a/apps/dokploy/server/server.ts +++ b/apps/dokploy/server/server.ts @@ -15,7 +15,6 @@ import { } from "@dokploy/server"; import { config } from "dotenv"; import next from "next"; -import { migration } from "@/server/db/migration"; import packageInfo from "../package.json"; import { setupDockerContainerLogsWebSocketServer } from "./wss/docker-container-logs"; import { setupDockerContainerTerminalWebSocketServer } from "./wss/docker-container-terminal"; @@ -60,7 +59,6 @@ void app.prepare().then(async () => { if (process.env.NODE_ENV === "production" && !IS_CLOUD) { createDefaultMiddlewares(); await initializeNetwork(); - await migration(); await initCronJobs(); await initSchedules(); await initCancelDeployments(); @@ -68,10 +66,6 @@ void app.prepare().then(async () => { await sendDokployRestartNotifications(); } - if (IS_CLOUD && process.env.NODE_ENV === "production") { - await migration(); - } - server.listen(PORT, HOST); console.log(`Server Started on: http://${HOST}:${PORT}`); await initEnterpriseBackupCronJobs(); From f78819d81ac9cae9f0f2595038a9b3d045964bac Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 04:02:04 -0600 Subject: [PATCH 020/206] feat(auth): add advanced cookie settings for better security management - Introduced advanced cookie settings in the authentication configuration, including options for secure cookies and default cookie attributes. - This enhancement aims to improve security practices related to cookie handling in the application. --- packages/server/src/lib/auth.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/server/src/lib/auth.ts b/packages/server/src/lib/auth.ts index bf4787a89..32ee7131e 100644 --- a/packages/server/src/lib/auth.ts +++ b/packages/server/src/lib/auth.ts @@ -30,6 +30,15 @@ const { handler, api } = betterAuth({ "/organization/delete", ], secret: BETTER_AUTH_SECRET, + advanced: { + useSecureCookies: false, + defaultCookieAttributes: { + sameSite: "lax", + secure: false, + httpOnly: true, + path: "/", + }, + }, appName: "Dokploy", socialProviders: { github: { From ff55270b5295f5065de9392886e4416c396532f1 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 04:16:03 -0600 Subject: [PATCH 021/206] refactor(auth): conditionally apply advanced cookie settings based on cloud environment - Updated the authentication configuration to conditionally include advanced cookie settings only when not in a cloud environment. - This change enhances flexibility in cookie management while maintaining existing security practices. --- packages/server/src/lib/auth.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/server/src/lib/auth.ts b/packages/server/src/lib/auth.ts index 32ee7131e..b6d52febb 100644 --- a/packages/server/src/lib/auth.ts +++ b/packages/server/src/lib/auth.ts @@ -30,15 +30,19 @@ const { handler, api } = betterAuth({ "/organization/delete", ], secret: BETTER_AUTH_SECRET, - advanced: { - useSecureCookies: false, - defaultCookieAttributes: { - sameSite: "lax", - secure: false, - httpOnly: true, - path: "/", - }, - }, + ...(!IS_CLOUD + ? { + advanced: { + useSecureCookies: false, + defaultCookieAttributes: { + sameSite: "lax", + secure: false, + httpOnly: true, + path: "/", + }, + }, + } + : {}), appName: "Dokploy", socialProviders: { github: { From 08ba24c2520281aa9f76b0f9380ddc640bba50a9 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 13:32:37 -0600 Subject: [PATCH 022/206] fix(auth): update BETTER_AUTH_SECRET default value for legacy support - Changed the default value of BETTER_AUTH_SECRET to ensure compatibility for users who enabled 2FA before the introduction of the new secret. - This update maintains existing authentication functionality while transitioning to a more secure default. close https://github.com/Dokploy/dokploy/issues/3645 --- packages/server/src/constants/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/server/src/constants/index.ts b/packages/server/src/constants/index.ts index 644dabd26..de0e48a2e 100644 --- a/packages/server/src/constants/index.ts +++ b/packages/server/src/constants/index.ts @@ -5,9 +5,10 @@ export const IS_CLOUD = process.env.IS_CLOUD === "true"; export const CLEANUP_CRON_JOB = "50 23 * * *"; export const docker = new Docker(); +// When not set, use the legacy default so 2FA remains working for users who +// enabled it before BETTER_AUTH_SECRET was introduced . export const BETTER_AUTH_SECRET = - process.env.BETTER_AUTH_SECRET || - "RXu/xoLHaA1Xgs+R8a0LjVjCVOEnWISQWxw7nXxlvKo="; + process.env.BETTER_AUTH_SECRET || "better-auth-secret-123456789"; export const paths = (isServer = false) => { const BASE_PATH = From f2e4a961548e3a00ce33e305ff55c4fd49243bea Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 15:43:58 -0600 Subject: [PATCH 023/206] feat(dokploy): add wait-for-postgres script and update Dockerfile and package.json - Introduced a new script to wait for PostgreSQL to be ready before starting the application. - Updated the Dockerfile to include a health check for the application. - Modified the start script in package.json to run the wait-for-postgres script prior to starting the server and migration processes. - Added the wait-for-postgres TypeScript file to handle connection retries to the PostgreSQL database. --- Dockerfile | 6 +- apps/dokploy/esbuild.config.ts | 1 + apps/dokploy/package.json | 4 +- apps/dokploy/server/api/routers/settings.ts | 15 ++-- apps/dokploy/wait-for-postgres.ts | 91 +++++++++++++++++++++ 5 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 apps/dokploy/wait-for-postgres.ts diff --git a/Dockerfile b/Dockerfile index 5d7bb6770..262862ca6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -65,4 +65,8 @@ RUN curl -sSL https://railpack.com/install.sh | bash COPY --from=buildpacksio/pack:0.39.1 /usr/local/bin/pack /usr/local/bin/pack EXPOSE 3000 -CMD [ "pnpm", "start" ] + +HEALTHCHECK --interval=10s --timeout=3s --retries=10 \ + CMD curl -fs http://localhost:3000/api/trpc/settings.health || exit 1 + + CMD ["sh", "-c", "pnpm run wait-for-postgres && exec pnpm start"] diff --git a/apps/dokploy/esbuild.config.ts b/apps/dokploy/esbuild.config.ts index d2f434255..615b2bdc0 100644 --- a/apps/dokploy/esbuild.config.ts +++ b/apps/dokploy/esbuild.config.ts @@ -25,6 +25,7 @@ try { entryPoints: { server: "server/server.ts", migration: "migration.ts", + "wait-for-postgres": "wait-for-postgres.ts", "reset-password": "reset-password.ts", "reset-2fa": "reset-2fa.ts", }, diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index 43b1c5ff1..e6aaf1bda 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -6,10 +6,12 @@ "type": "module", "scripts": { "build": "npm run build-server && npm run build-next", - "start": "node -r dotenv/config dist/migration.mjs && node -r dotenv/config dist/server.mjs", + "start": "node -r dotenv/config dist/wait-for-postgres.mjs && node -r dotenv/config dist/migration.mjs && node -r dotenv/config dist/server.mjs", "build-server": "tsx esbuild.config.ts", "build-next": "next build --webpack", "setup": "tsx -r dotenv/config setup.ts && sleep 5 && pnpm run migration:run", + "wait-for-postgres": "node -r dotenv/config dist/wait-for-postgres.mjs", + "wait-for-postgres-dev": "tsx -r dotenv/config wait-for-postgres.ts", "reset-password": "node -r dotenv/config dist/reset-password.mjs", "reset-2fa": "node -r dotenv/config dist/reset-2fa.mjs", "dev": "tsx -r dotenv/config ./server/server.ts --project tsconfig.server.json ", diff --git a/apps/dokploy/server/api/routers/settings.ts b/apps/dokploy/server/api/routers/settings.ts index 274b9ca0f..bb7269fa7 100644 --- a/apps/dokploy/server/api/routers/settings.ts +++ b/apps/dokploy/server/api/routers/settings.ts @@ -764,16 +764,13 @@ export const settingsRouter = createTRPCRouter({ return haveServers.length > 0 || haveProjects.length > 0; }), health: publicProcedure.query(async () => { - if (IS_CLOUD) { - try { - await db.execute(sql`SELECT 1`); - return { status: "ok" }; - } catch (error) { - console.error("Database connection error:", error); - throw error; - } + try { + await db.execute(sql`SELECT 1`); + return { status: "ok" }; + } catch (error) { + console.error("Database connection error:", error); + throw error; } - return { status: "not_cloud" }; }), setupGPU: adminProcedure .input( diff --git a/apps/dokploy/wait-for-postgres.ts b/apps/dokploy/wait-for-postgres.ts new file mode 100644 index 000000000..3460fe7c3 --- /dev/null +++ b/apps/dokploy/wait-for-postgres.ts @@ -0,0 +1,91 @@ +import net from "node:net"; +import { URL } from "node:url"; +import { dbUrl } from "@dokploy/server/db/constants"; + +const TIMEOUT_MS = Number(process.env.POSTGRES_WAIT_TIMEOUT || 120_000); +const RETRY_DELAY_MS = Number(process.env.POSTGRES_WAIT_RETRY || 2000); + +function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function resolvePostgresTarget(): { host: string; port: number } { + const databaseUrl = dbUrl; + + if (!databaseUrl) { + console.error("[wait-for-postgres] DATABASE_URL is not set"); + process.exit(1); + } + + try { + const url = new URL(databaseUrl); + + const host = url.hostname; + const port = Number(url.port || 5432); + + if (!host) { + throw new Error("DATABASE_URL has no hostname"); + } + + return { host, port }; + } catch (err) { + console.error("[wait-for-postgres] Invalid DATABASE_URL:", databaseUrl); + process.exit(1); + } +} + +function checkTcpConnection(host: string, port: number): Promise { + return new Promise((resolve, reject) => { + const socket = net.createConnection({ host, port }); + + socket.setTimeout(3000); + + socket.on("connect", () => { + socket.end(); + resolve(); + }); + + socket.on("timeout", () => { + socket.destroy(); + reject(new Error("Connection timeout")); + }); + + socket.on("error", reject); + }); +} + +async function waitForPostgres() { + const { host, port } = resolvePostgresTarget(); + const start = Date.now(); + + console.log( + `[wait-for-postgres] Waiting for postgres at ${host}:${port} (timeout ${TIMEOUT_MS}ms)`, + ); + + while (true) { + try { + await checkTcpConnection(host, port); + console.log("[wait-for-postgres] Postgres is reachable ✅"); + return; + } catch { + const elapsed = Date.now() - start; + + if (elapsed > TIMEOUT_MS) { + console.error( + `[wait-for-postgres] Timeout after ${elapsed}ms. Postgres not reachable ❌`, + ); + process.exit(1); + } + + console.log( + `[wait-for-postgres] Postgres not ready yet, retrying in ${RETRY_DELAY_MS}ms...`, + ); + await sleep(RETRY_DELAY_MS); + } + } +} + +waitForPostgres().catch((err) => { + console.error("[wait-for-postgres] Fatal error:", err); + process.exit(1); +}); From ecd81eb7fa0389c00f716962d2b83ffda1d82ffd Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 16:22:26 -0600 Subject: [PATCH 024/206] fix(dokploy): remove wait-for-postgres script from start command in package.json - Updated the start script in package.json to eliminate the wait-for-postgres script, streamlining the application startup process. - This change ensures that the migration and server processes are initiated directly without the wait-for-postgres dependency. --- apps/dokploy/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index e6aaf1bda..dfb039195 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "build": "npm run build-server && npm run build-next", - "start": "node -r dotenv/config dist/wait-for-postgres.mjs && node -r dotenv/config dist/migration.mjs && node -r dotenv/config dist/server.mjs", + "start": "node -r dotenv/config dist/migration.mjs && node -r dotenv/config dist/server.mjs", "build-server": "tsx esbuild.config.ts", "build-next": "next build --webpack", "setup": "tsx -r dotenv/config setup.ts && sleep 5 && pnpm run migration:run", From d420311507e1f445e8181d4ccfa6a5c2a0c1683a Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 23:13:19 -0600 Subject: [PATCH 025/206] docs: Update CONTRIBUTING.md and pull request template for clarity - Corrected a typo in the CONTRIBUTING.md file, changing "comunity" to "community." - Added a new section in CONTRIBUTING.md titled "Important Considerations for Pull Requests" to emphasize the necessity of testing before submission. - Enhanced the pull request template to remind contributors to test their changes locally before submitting, ensuring a smoother review process. --- .github/pull_request_template.md | 2 +- CONTRIBUTING.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d45c3dac0..e210811b0 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -8,7 +8,7 @@ Before submitting this PR, please make sure that: - [ ] You created a dedicated branch based on the `canary` branch. - [ ] You have read the suggestions in the CONTRIBUTING.md file https://github.com/Dokploy/dokploy/blob/canary/CONTRIBUTING.md#pull-request -- [ ] You have tested this PR in your local instance. +- [ ] You have tested this PR in your local instance. If you have not tested it yet, please do so before submitting. This helps avoid wasting maintainers' time reviewing code that has not been verified by you. ## Issues related (if applicable) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4c1f832db..6ac16b14e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ Hey, thanks for your interest in contributing to Dokploy! We appreciate your help and taking your time to contribute. -Before you start, please first discuss the feature/bug you want to add with the owners and comunity via github issues. +Before you start, please first discuss the feature/bug you want to add with the owners and community via github issues. We have a few guidelines to follow when contributing to this project: @@ -11,6 +11,7 @@ We have a few guidelines to follow when contributing to this project: - [Development](#development) - [Build](#build) - [Pull Request](#pull-request) +- [Important Considerations](#important-considerations-for-pull-requests) ## Commit Convention @@ -162,8 +163,9 @@ curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.39.1/pack-v0. - If your pull request fixes an open issue, please reference the issue in the pull request description. - Once your pull request is merged, you will be automatically added as a contributor to the project. -**Important Considerations for Pull Requests:** +### Important Considerations for Pull Requests +- **Testing is Mandatory:** All Pull Requests **must be tested** before submission. You must verify that your changes work as expected in a local development environment (see [Setup](#setup)). **Pull Requests that have not been tested will be closed.** This policy ensures clean contributions and reduces the time maintainers spend reviewing untested or broken code. - **Focus and Scope:** Each Pull Request should ideally address a single, well-defined problem or introduce one new feature. This greatly facilitates review and reduces the chances of introducing unintended side effects. - **Avoid Unfocused Changes:** Please avoid submitting Pull Requests that contain only minor changes such as whitespace adjustments, IDE-generated formatting, or removal of unused variables, unless these are part of a larger, clearly defined refactor or a dedicated "cleanup" Pull Request that addresses a specific `good first issue` or maintenance task. - **Issue Association:** For any significant change, it's highly recommended to open an issue first to discuss the proposed solution with the community and maintainers. This ensures alignment and avoids duplicated effort. If your PR resolves an existing issue, please link it in the description (e.g., `Fixes #123`, `Closes #456`). From 8a335789b36c76df87ade7393a574798007c1d00 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 23:30:05 -0600 Subject: [PATCH 026/206] chore: remove deprecated SQL migration and associated journal entry for ulimits configuration --- .../drizzle/0134_oval_shinobi_shaw.sql | 6 - apps/dokploy/drizzle/meta/0134_snapshot.json | 7004 ----------------- apps/dokploy/drizzle/meta/_journal.json | 7 - 3 files changed, 7017 deletions(-) delete mode 100644 apps/dokploy/drizzle/0134_oval_shinobi_shaw.sql delete mode 100644 apps/dokploy/drizzle/meta/0134_snapshot.json diff --git a/apps/dokploy/drizzle/0134_oval_shinobi_shaw.sql b/apps/dokploy/drizzle/0134_oval_shinobi_shaw.sql deleted file mode 100644 index f1bb42448..000000000 --- a/apps/dokploy/drizzle/0134_oval_shinobi_shaw.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE "application" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint -ALTER TABLE "mariadb" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint -ALTER TABLE "mongo" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint -ALTER TABLE "mysql" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint -ALTER TABLE "postgres" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint -ALTER TABLE "redis" ADD COLUMN "ulimitsSwarm" json; \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0134_snapshot.json b/apps/dokploy/drizzle/meta/0134_snapshot.json deleted file mode 100644 index 0d36ef82a..000000000 --- a/apps/dokploy/drizzle/meta/0134_snapshot.json +++ /dev/null @@ -1,7004 +0,0 @@ -{ - "id": "5c69a366-8619-4b70-92d8-4db5697b71a6", - "prevId": "b5cddb89-e0bc-42fd-8994-6609f672ee0c", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.apikey": { - "name": "apikey", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "start": { - "name": "start", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "key": { - "name": "key", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refill_interval": { - "name": "refill_interval", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "refill_amount": { - "name": "refill_amount", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "last_refill_at": { - "name": "last_refill_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "rate_limit_enabled": { - "name": "rate_limit_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "rate_limit_time_window": { - "name": "rate_limit_time_window", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "rate_limit_max": { - "name": "rate_limit_max", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "request_count": { - "name": "request_count", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "remaining": { - "name": "remaining", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "last_request": { - "name": "last_request", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "permissions": { - "name": "permissions", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "apikey_user_id_user_id_fk": { - "name": "apikey_user_id_user_id_fk", - "tableFrom": "apikey", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.invitation": { - "name": "invitation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "inviter_id": { - "name": "inviter_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "invitation_organization_id_organization_id_fk": { - "name": "invitation_organization_id_organization_id_fk", - "tableFrom": "invitation", - "tableTo": "organization", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "invitation_inviter_id_user_id_fk": { - "name": "invitation_inviter_id_user_id_fk", - "tableFrom": "invitation", - "tableTo": "user", - "columnsFrom": [ - "inviter_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is_default": { - "name": "is_default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteEnvironments": { - "name": "canDeleteEnvironments", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateEnvironments": { - "name": "canCreateEnvironments", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accessedEnvironments": { - "name": "accessedEnvironments", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - } - }, - "indexes": {}, - "foreignKeys": { - "member_organization_id_organization_id_fk": { - "name": "member_organization_id_organization_id_fk", - "tableFrom": "member", - "tableTo": "organization", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_user_id_user_id_fk": { - "name": "member_user_id_user_id_fk", - "tableFrom": "member", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organization": { - "name": "organization", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "organization_owner_id_user_id_fk": { - "name": "organization_owner_id_user_id_fk", - "tableFrom": "organization", - "tableTo": "user", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organization_slug_unique": { - "name": "organization_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.two_factor": { - "name": "two_factor", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "backup_codes": { - "name": "backup_codes", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "two_factor_user_id_user_id_fk": { - "name": "two_factor_user_id_user_id_fk", - "tableFrom": "two_factor", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verification": { - "name": "verification", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ai": { - "name": "ai", - "schema": "", - "columns": { - "aiId": { - "name": "aiId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "apiUrl": { - "name": "apiUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "apiKey": { - "name": "apiKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isEnabled": { - "name": "isEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "ai_organizationId_organization_id_fk": { - "name": "ai_organizationId_organization_id_fk", - "tableFrom": "ai", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "watchPaths": { - "name": "watchPaths", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildSecrets": { - "name": "previewBuildSecrets", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewLabels": { - "name": "previewLabels", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewCustomCertResolver": { - "name": "previewCustomCertResolver", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewRequireCollaboratorPermissions": { - "name": "previewRequireCollaboratorPermissions", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": true - }, - "rollbackActive": { - "name": "rollbackActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildSecrets": { - "name": "buildSecrets", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "args": { - "name": "args", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "cleanCache": { - "name": "cleanCache", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "triggerType": { - "name": "triggerType", - "type": "triggerType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'push'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaRepository": { - "name": "giteaRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaOwner": { - "name": "giteaOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaBranch": { - "name": "giteaBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaBuildPath": { - "name": "giteaBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableSubmodules": { - "name": "enableSubmodules", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "stopGracePeriodSwarm": { - "name": "stopGracePeriodSwarm", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "endpointSpecSwarm": { - "name": "endpointSpecSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "ulimitsSwarm": { - "name": "ulimitsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "railpackVersion": { - "name": "railpackVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'0.2.2'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isStaticSpa": { - "name": "isStaticSpa", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "createEnvFile": { - "name": "createEnvFile", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "rollbackRegistryId": { - "name": "rollbackRegistryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaId": { - "name": "giteaId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildServerId": { - "name": "buildServerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildRegistryId": { - "name": "buildRegistryId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_rollbackRegistryId_registry_registryId_fk": { - "name": "application_rollbackRegistryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "rollbackRegistryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_environmentId_environment_environmentId_fk": { - "name": "application_environmentId_environment_environmentId_fk", - "tableFrom": "application", - "tableTo": "environment", - "columnsFrom": [ - "environmentId" - ], - "columnsTo": [ - "environmentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_giteaId_gitea_giteaId_fk": { - "name": "application_giteaId_gitea_giteaId_fk", - "tableFrom": "application", - "tableTo": "gitea", - "columnsFrom": [ - "giteaId" - ], - "columnsTo": [ - "giteaId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_buildServerId_server_serverId_fk": { - "name": "application_buildServerId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "buildServerId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_buildRegistryId_registry_registryId_fk": { - "name": "application_buildRegistryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "buildRegistryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "keepLatestCount": { - "name": "keepLatestCount", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "backupType": { - "name": "backupType", - "type": "backupType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'database'" - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metadata": { - "name": "metadata", - "type": "jsonb", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_composeId_compose_composeId_fk": { - "name": "backup_composeId_compose_composeId_fk", - "tableFrom": "backup", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_userId_user_id_fk": { - "name": "backup_userId_user_id_fk", - "tableFrom": "backup", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "backup_appName_unique": { - "name": "backup_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketEmail": { - "name": "bitbucketEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "apiToken": { - "name": "apiToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_organizationId_organization_id_fk": { - "name": "certificate_organizationId_organization_id_fk", - "tableFrom": "certificate", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaRepository": { - "name": "giteaRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaOwner": { - "name": "giteaOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaBranch": { - "name": "giteaBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "enableSubmodules": { - "name": "enableSubmodules", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "isolatedDeployment": { - "name": "isolatedDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "isolatedDeploymentsVolume": { - "name": "isolatedDeploymentsVolume", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "triggerType": { - "name": "triggerType", - "type": "triggerType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'push'" - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "watchPaths": { - "name": "watchPaths", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "giteaId": { - "name": "giteaId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_environmentId_environment_environmentId_fk": { - "name": "compose_environmentId_environment_environmentId_fk", - "tableFrom": "compose", - "tableTo": "environment", - "columnsFrom": [ - "environmentId" - ], - "columnsTo": [ - "environmentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_giteaId_gitea_giteaId_fk": { - "name": "compose_giteaId_gitea_giteaId_fk", - "tableFrom": "compose", - "tableTo": "gitea", - "columnsFrom": [ - "giteaId" - ], - "columnsTo": [ - "giteaId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pid": { - "name": "pid", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "startedAt": { - "name": "startedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "scheduleId": { - "name": "scheduleId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "rollbackId": { - "name": "rollbackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeBackupId": { - "name": "volumeBackupId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildServerId": { - "name": "buildServerId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_scheduleId_schedule_scheduleId_fk": { - "name": "deployment_scheduleId_schedule_scheduleId_fk", - "tableFrom": "deployment", - "tableTo": "schedule", - "columnsFrom": [ - "scheduleId" - ], - "columnsTo": [ - "scheduleId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_backupId_backup_backupId_fk": { - "name": "deployment_backupId_backup_backupId_fk", - "tableFrom": "deployment", - "tableTo": "backup", - "columnsFrom": [ - "backupId" - ], - "columnsTo": [ - "backupId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_rollbackId_rollback_rollbackId_fk": { - "name": "deployment_rollbackId_rollback_rollbackId_fk", - "tableFrom": "deployment", - "tableTo": "rollback", - "columnsFrom": [ - "rollbackId" - ], - "columnsTo": [ - "rollbackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_volumeBackupId_volume_backup_volumeBackupId_fk": { - "name": "deployment_volumeBackupId_volume_backup_volumeBackupId_fk", - "tableFrom": "deployment", - "tableTo": "volume_backup", - "columnsFrom": [ - "volumeBackupId" - ], - "columnsTo": [ - "volumeBackupId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_buildServerId_server_serverId_fk": { - "name": "deployment_buildServerId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "buildServerId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "destination_organizationId_organization_id_fk": { - "name": "destination_organizationId_organization_id_fk", - "tableFrom": "destination", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customCertResolver": { - "name": "customCertResolver", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "internalPath": { - "name": "internalPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "stripPath": { - "name": "stripPath", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.environment": { - "name": "environment", - "schema": "", - "columns": { - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isDefault": { - "name": "isDefault", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "environment_projectId_project_projectId_fk": { - "name": "environment_projectId_project_projectId_fk", - "tableFrom": "environment", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_organizationId_organization_id_fk": { - "name": "git_provider_organizationId_organization_id_fk", - "tableFrom": "git_provider", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "git_provider_userId_user_id_fk": { - "name": "git_provider_userId_user_id_fk", - "tableFrom": "git_provider", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitea": { - "name": "gitea", - "schema": "", - "columns": { - "giteaId": { - "name": "giteaId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "giteaUrl": { - "name": "giteaUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitea.com'" - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "client_id": { - "name": "client_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "client_secret": { - "name": "client_secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "scopes": { - "name": "scopes", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'repo,repo:status,read:user,read:org'" - }, - "last_authenticated_at": { - "name": "last_authenticated_at", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "gitea_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitea_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitea", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "args": { - "name": "args", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "stopGracePeriodSwarm": { - "name": "stopGracePeriodSwarm", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "endpointSpecSwarm": { - "name": "endpointSpecSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "ulimitsSwarm": { - "name": "ulimitsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_environmentId_environment_environmentId_fk": { - "name": "mariadb_environmentId_environment_environmentId_fk", - "tableFrom": "mariadb", - "tableTo": "environment", - "columnsFrom": [ - "environmentId" - ], - "columnsTo": [ - "environmentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "args": { - "name": "args", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "stopGracePeriodSwarm": { - "name": "stopGracePeriodSwarm", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "endpointSpecSwarm": { - "name": "endpointSpecSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "ulimitsSwarm": { - "name": "ulimitsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_environmentId_environment_environmentId_fk": { - "name": "mongo_environmentId_environment_environmentId_fk", - "tableFrom": "mongo", - "tableTo": "environment", - "columnsFrom": [ - "environmentId" - ], - "columnsTo": [ - "environmentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "args": { - "name": "args", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "stopGracePeriodSwarm": { - "name": "stopGracePeriodSwarm", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "endpointSpecSwarm": { - "name": "endpointSpecSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "ulimitsSwarm": { - "name": "ulimitsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_environmentId_environment_environmentId_fk": { - "name": "mysql_environmentId_environment_environmentId_fk", - "tableFrom": "mysql", - "tableTo": "environment", - "columnsFrom": [ - "environmentId" - ], - "columnsTo": [ - "environmentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.custom": { - "name": "custom", - "schema": "", - "columns": { - "customId": { - "name": "customId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "headers": { - "name": "headers", - "type": "jsonb", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.lark": { - "name": "lark", - "schema": "", - "columns": { - "larkId": { - "name": "larkId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "volumeBackup": { - "name": "volumeBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ntfyId": { - "name": "ntfyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customId": { - "name": "customId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "larkId": { - "name": "larkId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_ntfyId_ntfy_ntfyId_fk": { - "name": "notification_ntfyId_ntfy_ntfyId_fk", - "tableFrom": "notification", - "tableTo": "ntfy", - "columnsFrom": [ - "ntfyId" - ], - "columnsTo": [ - "ntfyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_customId_custom_customId_fk": { - "name": "notification_customId_custom_customId_fk", - "tableFrom": "notification", - "tableTo": "custom", - "columnsFrom": [ - "customId" - ], - "columnsTo": [ - "customId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_larkId_lark_larkId_fk": { - "name": "notification_larkId_lark_larkId_fk", - "tableFrom": "notification", - "tableTo": "lark", - "columnsFrom": [ - "larkId" - ], - "columnsTo": [ - "larkId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_organizationId_organization_id_fk": { - "name": "notification_organizationId_organization_id_fk", - "tableFrom": "notification", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ntfy": { - "name": "ntfy", - "schema": "", - "columns": { - "ntfyId": { - "name": "ntfyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "topic": { - "name": "topic", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "accessToken": { - "name": "accessToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 3 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "messageThreadId": { - "name": "messageThreadId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "publishMode": { - "name": "publishMode", - "type": "publishModeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'host'" - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "args": { - "name": "args", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "stopGracePeriodSwarm": { - "name": "stopGracePeriodSwarm", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "endpointSpecSwarm": { - "name": "endpointSpecSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "ulimitsSwarm": { - "name": "ulimitsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_environmentId_environment_environmentId_fk": { - "name": "postgres_environmentId_environment_environmentId_fk", - "tableFrom": "postgres", - "tableTo": "environment", - "columnsFrom": [ - "environmentId" - ], - "columnsTo": [ - "environmentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_organizationId_organization_id_fk": { - "name": "project_organizationId_organization_id_fk", - "tableFrom": "project", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "args": { - "name": "args", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "stopGracePeriodSwarm": { - "name": "stopGracePeriodSwarm", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "endpointSpecSwarm": { - "name": "endpointSpecSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "ulimitsSwarm": { - "name": "ulimitsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "environmentId": { - "name": "environmentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_environmentId_environment_environmentId_fk": { - "name": "redis_environmentId_environment_environmentId_fk", - "tableFrom": "redis", - "tableTo": "environment", - "columnsFrom": [ - "environmentId" - ], - "columnsTo": [ - "environmentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_organizationId_organization_id_fk": { - "name": "registry_organizationId_organization_id_fk", - "tableFrom": "registry", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.rollback": { - "name": "rollback", - "schema": "", - "columns": { - "rollbackId": { - "name": "rollbackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "version": { - "name": "version", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fullContext": { - "name": "fullContext", - "type": "jsonb", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "rollback_deploymentId_deployment_deploymentId_fk": { - "name": "rollback_deploymentId_deployment_deploymentId_fk", - "tableFrom": "rollback", - "tableTo": "deployment", - "columnsFrom": [ - "deploymentId" - ], - "columnsTo": [ - "deploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.schedule": { - "name": "schedule", - "schema": "", - "columns": { - "scheduleId": { - "name": "scheduleId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "cronExpression": { - "name": "cronExpression", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "shellType": { - "name": "shellType", - "type": "shellType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'bash'" - }, - "scheduleType": { - "name": "scheduleType", - "type": "scheduleType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "script": { - "name": "script", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "timezone": { - "name": "timezone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "schedule_applicationId_application_applicationId_fk": { - "name": "schedule_applicationId_application_applicationId_fk", - "tableFrom": "schedule", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "schedule_composeId_compose_composeId_fk": { - "name": "schedule_composeId_compose_composeId_fk", - "tableFrom": "schedule", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "schedule_serverId_server_serverId_fk": { - "name": "schedule_serverId_server_serverId_fk", - "tableFrom": "schedule", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "schedule_userId_user_id_fk": { - "name": "schedule_userId_user_id_fk", - "tableFrom": "schedule", - "tableTo": "user", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "serverType": { - "name": "serverType", - "type": "serverType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'deploy'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_organizationId_organization_id_fk": { - "name": "server_organizationId_organization_id_fk", - "tableFrom": "server", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session_temp": { - "name": "session_temp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "impersonated_by": { - "name": "impersonated_by", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "active_organization_id": { - "name": "active_organization_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "session_temp_user_id_user_id_fk": { - "name": "session_temp_user_id_user_id_fk", - "tableFrom": "session_temp", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "session_temp_token_unique": { - "name": "session_temp_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_organizationId_organization_id_fk": { - "name": "ssh-key_organizationId_organization_id_fk", - "tableFrom": "ssh-key", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "firstName": { - "name": "firstName", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "lastName": { - "name": "lastName", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "two_factor_enabled": { - "name": "two_factor_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "banned": { - "name": "banned", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "ban_reason": { - "name": "ban_reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ban_expires": { - "name": "ban_expires", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'user'" - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "allowImpersonation": { - "name": "allowImpersonation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.volume_backup": { - "name": "volume_backup", - "schema": "", - "columns": { - "volumeBackupId": { - "name": "volumeBackupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "turnOff": { - "name": "turnOff", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cronExpression": { - "name": "cronExpression", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "keepLatestCount": { - "name": "keepLatestCount", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "volume_backup_applicationId_application_applicationId_fk": { - "name": "volume_backup_applicationId_application_applicationId_fk", - "tableFrom": "volume_backup", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "volume_backup_postgresId_postgres_postgresId_fk": { - "name": "volume_backup_postgresId_postgres_postgresId_fk", - "tableFrom": "volume_backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "volume_backup_mariadbId_mariadb_mariadbId_fk": { - "name": "volume_backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "volume_backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "volume_backup_mongoId_mongo_mongoId_fk": { - "name": "volume_backup_mongoId_mongo_mongoId_fk", - "tableFrom": "volume_backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "volume_backup_mysqlId_mysql_mysqlId_fk": { - "name": "volume_backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "volume_backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "volume_backup_redisId_redis_redisId_fk": { - "name": "volume_backup_redisId_redis_redisId_fk", - "tableFrom": "volume_backup", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "volume_backup_composeId_compose_composeId_fk": { - "name": "volume_backup_composeId_compose_composeId_fk", - "tableFrom": "volume_backup", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "volume_backup_destinationId_destination_destinationId_fk": { - "name": "volume_backup_destinationId_destination_destinationId_fk", - "tableFrom": "volume_backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.webServerSettings": { - "name": "webServerSettings", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "logCleanupCron": { - "name": "logCleanupCron", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'0 0 * * *'" - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static", - "railpack" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "gitea", - "drop" - ] - }, - "public.backupType": { - "name": "backupType", - "schema": "public", - "values": [ - "database", - "compose" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo", - "web-server" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "gitea", - "raw" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error", - "cancelled" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket", - "gitea" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify", - "ntfy", - "custom", - "lark" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.publishModeType": { - "name": "publishModeType", - "schema": "public", - "values": [ - "ingress", - "host" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.scheduleType": { - "name": "scheduleType", - "schema": "public", - "values": [ - "application", - "compose", - "server", - "dokploy-server" - ] - }, - "public.shellType": { - "name": "shellType", - "schema": "public", - "values": [ - "bash", - "sh" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - }, - "public.serverType": { - "name": "serverType", - "schema": "public", - "values": [ - "deploy", - "build" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none", - "custom" - ] - }, - "public.triggerType": { - "name": "triggerType", - "schema": "public", - "values": [ - "push", - "tag" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/_journal.json b/apps/dokploy/drizzle/meta/_journal.json index 20fd51da0..bd6c62c46 100644 --- a/apps/dokploy/drizzle/meta/_journal.json +++ b/apps/dokploy/drizzle/meta/_journal.json @@ -939,13 +939,6 @@ "when": 1766301478005, "tag": "0133_striped_the_order", "breakpoints": true - }, - { - "idx": 134, - "version": "7", - "when": 1767906421365, - "tag": "0134_oval_shinobi_shaw", - "breakpoints": true } ] } \ No newline at end of file From 65ffc63da4d02953bc81dc224a0954e7b7bd1cd2 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 23:31:22 -0600 Subject: [PATCH 027/206] feat(dokploy): add ulimitsSwarm column to multiple database tables and update journal - Introduced a new column "ulimitsSwarm" of type json to the "application", "mariadb", "mongo", "mysql", "postgres", and "redis" tables. - Added a corresponding entry in the journal for version 7 to track this migration. --- .../dokploy/drizzle/0142_outstanding_tusk.sql | 6 + apps/dokploy/drizzle/meta/0142_snapshot.json | 7284 +++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 7 + 3 files changed, 7297 insertions(+) create mode 100644 apps/dokploy/drizzle/0142_outstanding_tusk.sql create mode 100644 apps/dokploy/drizzle/meta/0142_snapshot.json diff --git a/apps/dokploy/drizzle/0142_outstanding_tusk.sql b/apps/dokploy/drizzle/0142_outstanding_tusk.sql new file mode 100644 index 000000000..f1bb42448 --- /dev/null +++ b/apps/dokploy/drizzle/0142_outstanding_tusk.sql @@ -0,0 +1,6 @@ +ALTER TABLE "application" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint +ALTER TABLE "mariadb" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint +ALTER TABLE "mongo" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint +ALTER TABLE "mysql" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint +ALTER TABLE "postgres" ADD COLUMN "ulimitsSwarm" json;--> statement-breakpoint +ALTER TABLE "redis" ADD COLUMN "ulimitsSwarm" json; \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0142_snapshot.json b/apps/dokploy/drizzle/meta/0142_snapshot.json new file mode 100644 index 000000000..8c9b139ea --- /dev/null +++ b/apps/dokploy/drizzle/meta/0142_snapshot.json @@ -0,0 +1,7284 @@ +{ + "id": "fce8c149-40a8-4279-a432-cfa7538666c6", + "prevId": "80ff2e47-5afe-4770-954f-933cc33591f3", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is2FAEnabled": { + "name": "is2FAEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "resetPasswordToken": { + "name": "resetPasswordToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resetPasswordExpiresAt": { + "name": "resetPasswordExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationToken": { + "name": "confirmationToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationExpiresAt": { + "name": "confirmationExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "inviter_id": { + "name": "inviter_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": [ + "inviter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_default": { + "name": "is_default", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateProjects": { + "name": "canCreateProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToSSHKeys": { + "name": "canAccessToSSHKeys", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateServices": { + "name": "canCreateServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteProjects": { + "name": "canDeleteProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteServices": { + "name": "canDeleteServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToDocker": { + "name": "canAccessToDocker", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToAPI": { + "name": "canAccessToAPI", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToGitProviders": { + "name": "canAccessToGitProviders", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToTraefikFiles": { + "name": "canAccessToTraefikFiles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteEnvironments": { + "name": "canDeleteEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateEnvironments": { + "name": "canCreateEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "accesedProjects": { + "name": "accesedProjects", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedEnvironments": { + "name": "accessedEnvironments", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accesedServices": { + "name": "accesedServices", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner_id": { + "name": "owner_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_owner_id_user_id_fk": { + "name": "organization_owner_id_user_id_fk", + "tableFrom": "organization", + "tableTo": "user", + "columnsFrom": [ + "owner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.two_factor": { + "name": "two_factor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backup_codes": { + "name": "backup_codes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "two_factor_user_id_user_id_fk": { + "name": "two_factor_user_id_user_id_fk", + "tableFrom": "two_factor", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ai": { + "name": "ai", + "schema": "", + "columns": { + "aiId": { + "name": "aiId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiUrl": { + "name": "apiUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isEnabled": { + "name": "isEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ai_organizationId_organization_id_fk": { + "name": "ai_organizationId_organization_id_fk", + "tableFrom": "ai", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.application": { + "name": "application", + "schema": "", + "columns": { + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewEnv": { + "name": "previewEnv", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewBuildArgs": { + "name": "previewBuildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewBuildSecrets": { + "name": "previewBuildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLabels": { + "name": "previewLabels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewWildcard": { + "name": "previewWildcard", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewPort": { + "name": "previewPort", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "previewHttps": { + "name": "previewHttps", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "previewPath": { + "name": "previewPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "previewCustomCertResolver": { + "name": "previewCustomCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLimit": { + "name": "previewLimit", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3 + }, + "isPreviewDeploymentsActive": { + "name": "isPreviewDeploymentsActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewRequireCollaboratorPermissions": { + "name": "previewRequireCollaboratorPermissions", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rollbackActive": { + "name": "rollbackActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "buildArgs": { + "name": "buildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildSecrets": { + "name": "buildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "subtitle": { + "name": "subtitle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "cleanCache": { + "name": "cleanCache", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildPath": { + "name": "buildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBuildPath": { + "name": "gitlabBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBuildPath": { + "name": "giteaBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBuildPath": { + "name": "bitbucketBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBuildPath": { + "name": "customGitBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerfile": { + "name": "dockerfile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerContextPath": { + "name": "dockerContextPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerBuildStage": { + "name": "dockerBuildStage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dropBuildPath": { + "name": "dropBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "buildType": { + "name": "buildType", + "type": "buildType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'nixpacks'" + }, + "railpackVersion": { + "name": "railpackVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0.15.4'" + }, + "herokuVersion": { + "name": "herokuVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'24'" + }, + "publishDirectory": { + "name": "publishDirectory", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isStaticSpa": { + "name": "isStaticSpa", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "createEnvFile": { + "name": "createEnvFile", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackRegistryId": { + "name": "rollbackRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildRegistryId": { + "name": "buildRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "application", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_registryId_registry_registryId_fk": { + "name": "application_registryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "registryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_rollbackRegistryId_registry_registryId_fk": { + "name": "application_rollbackRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "rollbackRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_environmentId_environment_environmentId_fk": { + "name": "application_environmentId_environment_environmentId_fk", + "tableFrom": "application", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_githubId_github_githubId_fk": { + "name": "application_githubId_github_githubId_fk", + "tableFrom": "application", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_gitlabId_gitlab_gitlabId_fk": { + "name": "application_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "application", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_giteaId_gitea_giteaId_fk": { + "name": "application_giteaId_gitea_giteaId_fk", + "tableFrom": "application", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "application_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "application", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_serverId_server_serverId_fk": { + "name": "application_serverId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_buildServerId_server_serverId_fk": { + "name": "application_buildServerId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_buildRegistryId_registry_registryId_fk": { + "name": "application_buildRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "buildRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "application_appName_unique": { + "name": "application_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backup": { + "name": "backup", + "schema": "", + "columns": { + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schedule": { + "name": "schedule", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "database": { + "name": "database", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "backupType": { + "name": "backupType", + "type": "backupType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'database'" + }, + "databaseType": { + "name": "databaseType", + "type": "databaseType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backup_destinationId_destination_destinationId_fk": { + "name": "backup_destinationId_destination_destinationId_fk", + "tableFrom": "backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_composeId_compose_composeId_fk": { + "name": "backup_composeId_compose_composeId_fk", + "tableFrom": "backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_postgresId_postgres_postgresId_fk": { + "name": "backup_postgresId_postgres_postgresId_fk", + "tableFrom": "backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mariadbId_mariadb_mariadbId_fk": { + "name": "backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mysqlId_mysql_mysqlId_fk": { + "name": "backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mongoId_mongo_mongoId_fk": { + "name": "backup_mongoId_mongo_mongoId_fk", + "tableFrom": "backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_userId_user_id_fk": { + "name": "backup_userId_user_id_fk", + "tableFrom": "backup", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "backup_appName_unique": { + "name": "backup_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.bitbucket": { + "name": "bitbucket", + "schema": "", + "columns": { + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "bitbucketUsername": { + "name": "bitbucketUsername", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketEmail": { + "name": "bitbucketEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "appPassword": { + "name": "appPassword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketWorkspaceName": { + "name": "bitbucketWorkspaceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { + "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "bitbucket", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.certificate": { + "name": "certificate", + "schema": "", + "columns": { + "certificateId": { + "name": "certificateId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificateData": { + "name": "certificateData", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificatePath": { + "name": "certificatePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "autoRenew": { + "name": "autoRenew", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "certificate_organizationId_organization_id_fk": { + "name": "certificate_organizationId_organization_id_fk", + "tableFrom": "certificate", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "certificate_serverId_server_serverId_fk": { + "name": "certificate_serverId_server_serverId_fk", + "tableFrom": "certificate", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "certificate_certificatePath_unique": { + "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, + "columns": [ + "certificatePath" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.compose": { + "name": "compose", + "schema": "", + "columns": { + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeFile": { + "name": "composeFile", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceTypeCompose", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "composeType": { + "name": "composeType", + "type": "composeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'docker-compose'" + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "composePath": { + "name": "composePath", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'./docker-compose.yml'" + }, + "suffix": { + "name": "suffix", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "randomize": { + "name": "randomize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeployment": { + "name": "isolatedDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeploymentsVolume": { + "name": "isolatedDeploymentsVolume", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "composeStatus": { + "name": "composeStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "compose", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_environmentId_environment_environmentId_fk": { + "name": "compose_environmentId_environment_environmentId_fk", + "tableFrom": "compose", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "compose_githubId_github_githubId_fk": { + "name": "compose_githubId_github_githubId_fk", + "tableFrom": "compose", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_gitlabId_gitlab_gitlabId_fk": { + "name": "compose_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "compose", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "compose", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_giteaId_gitea_giteaId_fk": { + "name": "compose_giteaId_gitea_giteaId_fk", + "tableFrom": "compose", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_serverId_server_serverId_fk": { + "name": "compose_serverId_server_serverId_fk", + "tableFrom": "compose", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.deployment": { + "name": "deployment", + "schema": "", + "columns": { + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "deploymentStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'running'" + }, + "logPath": { + "name": "logPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pid": { + "name": "pid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isPreviewDeployment": { + "name": "isPreviewDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "startedAt": { + "name": "startedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "errorMessage": { + "name": "errorMessage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "deployment_applicationId_application_applicationId_fk": { + "name": "deployment_applicationId_application_applicationId_fk", + "tableFrom": "deployment", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_composeId_compose_composeId_fk": { + "name": "deployment_composeId_compose_composeId_fk", + "tableFrom": "deployment", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_serverId_server_serverId_fk": { + "name": "deployment_serverId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "deployment", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_scheduleId_schedule_scheduleId_fk": { + "name": "deployment_scheduleId_schedule_scheduleId_fk", + "tableFrom": "deployment", + "tableTo": "schedule", + "columnsFrom": [ + "scheduleId" + ], + "columnsTo": [ + "scheduleId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_backupId_backup_backupId_fk": { + "name": "deployment_backupId_backup_backupId_fk", + "tableFrom": "deployment", + "tableTo": "backup", + "columnsFrom": [ + "backupId" + ], + "columnsTo": [ + "backupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_rollbackId_rollback_rollbackId_fk": { + "name": "deployment_rollbackId_rollback_rollbackId_fk", + "tableFrom": "deployment", + "tableTo": "rollback", + "columnsFrom": [ + "rollbackId" + ], + "columnsTo": [ + "rollbackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_volumeBackupId_volume_backup_volumeBackupId_fk": { + "name": "deployment_volumeBackupId_volume_backup_volumeBackupId_fk", + "tableFrom": "deployment", + "tableTo": "volume_backup", + "columnsFrom": [ + "volumeBackupId" + ], + "columnsTo": [ + "volumeBackupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_buildServerId_server_serverId_fk": { + "name": "deployment_buildServerId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.destination": { + "name": "destination", + "schema": "", + "columns": { + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "accessKey": { + "name": "accessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "secretAccessKey": { + "name": "secretAccessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bucket": { + "name": "bucket", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "region": { + "name": "region", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "destination_organizationId_organization_id_fk": { + "name": "destination_organizationId_organization_id_fk", + "tableFrom": "destination", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.domain": { + "name": "domain", + "schema": "", + "columns": { + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domainType": { + "name": "domainType", + "type": "domainType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'application'" + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customCertResolver": { + "name": "customCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "internalPath": { + "name": "internalPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "stripPath": { + "name": "stripPath", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "domain_composeId_compose_composeId_fk": { + "name": "domain_composeId_compose_composeId_fk", + "tableFrom": "domain", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_applicationId_application_applicationId_fk": { + "name": "domain_applicationId_application_applicationId_fk", + "tableFrom": "domain", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "domain", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.environment": { + "name": "environment", + "schema": "", + "columns": { + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isDefault": { + "name": "isDefault", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "environment_projectId_project_projectId_fk": { + "name": "environment_projectId_project_projectId_fk", + "tableFrom": "environment", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "projectId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.git_provider": { + "name": "git_provider", + "schema": "", + "columns": { + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "providerType": { + "name": "providerType", + "type": "gitProviderType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "git_provider_organizationId_organization_id_fk": { + "name": "git_provider_organizationId_organization_id_fk", + "tableFrom": "git_provider", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "git_provider_userId_user_id_fk": { + "name": "git_provider_userId_user_id_fk", + "tableFrom": "git_provider", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitea": { + "name": "gitea", + "schema": "", + "columns": { + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "giteaUrl": { + "name": "giteaUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitea.com'" + }, + "giteaInternalUrl": { + "name": "giteaInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_id": { + "name": "client_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_secret": { + "name": "client_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "scopes": { + "name": "scopes", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'repo,repo:status,read:user,read:org'" + }, + "last_authenticated_at": { + "name": "last_authenticated_at", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "gitea_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitea_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitea", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.github": { + "name": "github", + "schema": "", + "columns": { + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "githubAppName": { + "name": "githubAppName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubAppId": { + "name": "githubAppId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "githubClientId": { + "name": "githubClientId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubClientSecret": { + "name": "githubClientSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubInstallationId": { + "name": "githubInstallationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubPrivateKey": { + "name": "githubPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubWebhookSecret": { + "name": "githubWebhookSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "github_gitProviderId_git_provider_gitProviderId_fk": { + "name": "github_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "github", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitlab": { + "name": "gitlab", + "schema": "", + "columns": { + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "gitlabUrl": { + "name": "gitlabUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitlab.com'" + }, + "gitlabInternalUrl": { + "name": "gitlabInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "application_id": { + "name": "application_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "group_name": { + "name": "group_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "gitlab_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitlab", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mariadb": { + "name": "mariadb", + "schema": "", + "columns": { + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mariadb_environmentId_environment_environmentId_fk": { + "name": "mariadb_environmentId_environment_environmentId_fk", + "tableFrom": "mariadb", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mariadb_serverId_server_serverId_fk": { + "name": "mariadb_serverId_server_serverId_fk", + "tableFrom": "mariadb", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mariadb_appName_unique": { + "name": "mariadb_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mongo": { + "name": "mongo", + "schema": "", + "columns": { + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "replicaSets": { + "name": "replicaSets", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "mongo_environmentId_environment_environmentId_fk": { + "name": "mongo_environmentId_environment_environmentId_fk", + "tableFrom": "mongo", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mongo_serverId_server_serverId_fk": { + "name": "mongo_serverId_server_serverId_fk", + "tableFrom": "mongo", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mongo_appName_unique": { + "name": "mongo_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mount": { + "name": "mount", + "schema": "", + "columns": { + "mountId": { + "name": "mountId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "mountType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "hostPath": { + "name": "hostPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "mountPath": { + "name": "mountPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mount_applicationId_application_applicationId_fk": { + "name": "mount_applicationId_application_applicationId_fk", + "tableFrom": "mount", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_postgresId_postgres_postgresId_fk": { + "name": "mount_postgresId_postgres_postgresId_fk", + "tableFrom": "mount", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mariadbId_mariadb_mariadbId_fk": { + "name": "mount_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "mount", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mongoId_mongo_mongoId_fk": { + "name": "mount_mongoId_mongo_mongoId_fk", + "tableFrom": "mount", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mysqlId_mysql_mysqlId_fk": { + "name": "mount_mysqlId_mysql_mysqlId_fk", + "tableFrom": "mount", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_redisId_redis_redisId_fk": { + "name": "mount_redisId_redis_redisId_fk", + "tableFrom": "mount", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_composeId_compose_composeId_fk": { + "name": "mount_composeId_compose_composeId_fk", + "tableFrom": "mount", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mysql": { + "name": "mysql", + "schema": "", + "columns": { + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mysql_environmentId_environment_environmentId_fk": { + "name": "mysql_environmentId_environment_environmentId_fk", + "tableFrom": "mysql", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mysql_serverId_server_serverId_fk": { + "name": "mysql_serverId_server_serverId_fk", + "tableFrom": "mysql", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mysql_appName_unique": { + "name": "mysql_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custom": { + "name": "custom", + "schema": "", + "columns": { + "customId": { + "name": "customId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "headers": { + "name": "headers", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.discord": { + "name": "discord", + "schema": "", + "columns": { + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email": { + "name": "email", + "schema": "", + "columns": { + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "smtpServer": { + "name": "smtpServer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "smtpPort": { + "name": "smtpPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gotify": { + "name": "gotify", + "schema": "", + "columns": { + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appToken": { + "name": "appToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lark": { + "name": "lark", + "schema": "", + "columns": { + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification": { + "name": "notification", + "schema": "", + "columns": { + "notificationId": { + "name": "notificationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appDeploy": { + "name": "appDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "appBuildError": { + "name": "appBuildError", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "databaseBackup": { + "name": "databaseBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "volumeBackup": { + "name": "volumeBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dokployRestart": { + "name": "dokployRestart", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerCleanup": { + "name": "dockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "serverThreshold": { + "name": "serverThreshold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "notificationType": { + "name": "notificationType", + "type": "notificationType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customId": { + "name": "customId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "notification_slackId_slack_slackId_fk": { + "name": "notification_slackId_slack_slackId_fk", + "tableFrom": "notification", + "tableTo": "slack", + "columnsFrom": [ + "slackId" + ], + "columnsTo": [ + "slackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_telegramId_telegram_telegramId_fk": { + "name": "notification_telegramId_telegram_telegramId_fk", + "tableFrom": "notification", + "tableTo": "telegram", + "columnsFrom": [ + "telegramId" + ], + "columnsTo": [ + "telegramId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_discordId_discord_discordId_fk": { + "name": "notification_discordId_discord_discordId_fk", + "tableFrom": "notification", + "tableTo": "discord", + "columnsFrom": [ + "discordId" + ], + "columnsTo": [ + "discordId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_emailId_email_emailId_fk": { + "name": "notification_emailId_email_emailId_fk", + "tableFrom": "notification", + "tableTo": "email", + "columnsFrom": [ + "emailId" + ], + "columnsTo": [ + "emailId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_resendId_resend_resendId_fk": { + "name": "notification_resendId_resend_resendId_fk", + "tableFrom": "notification", + "tableTo": "resend", + "columnsFrom": [ + "resendId" + ], + "columnsTo": [ + "resendId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_gotifyId_gotify_gotifyId_fk": { + "name": "notification_gotifyId_gotify_gotifyId_fk", + "tableFrom": "notification", + "tableTo": "gotify", + "columnsFrom": [ + "gotifyId" + ], + "columnsTo": [ + "gotifyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_ntfyId_ntfy_ntfyId_fk": { + "name": "notification_ntfyId_ntfy_ntfyId_fk", + "tableFrom": "notification", + "tableTo": "ntfy", + "columnsFrom": [ + "ntfyId" + ], + "columnsTo": [ + "ntfyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_customId_custom_customId_fk": { + "name": "notification_customId_custom_customId_fk", + "tableFrom": "notification", + "tableTo": "custom", + "columnsFrom": [ + "customId" + ], + "columnsTo": [ + "customId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_larkId_lark_larkId_fk": { + "name": "notification_larkId_lark_larkId_fk", + "tableFrom": "notification", + "tableTo": "lark", + "columnsFrom": [ + "larkId" + ], + "columnsTo": [ + "larkId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_pushoverId_pushover_pushoverId_fk": { + "name": "notification_pushoverId_pushover_pushoverId_fk", + "tableFrom": "notification", + "tableTo": "pushover", + "columnsFrom": [ + "pushoverId" + ], + "columnsTo": [ + "pushoverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_organizationId_organization_id_fk": { + "name": "notification_organizationId_organization_id_fk", + "tableFrom": "notification", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ntfy": { + "name": "ntfy", + "schema": "", + "columns": { + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "topic": { + "name": "topic", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "accessToken": { + "name": "accessToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 3 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pushover": { + "name": "pushover", + "schema": "", + "columns": { + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userKey": { + "name": "userKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "retry": { + "name": "retry", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "expire": { + "name": "expire", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resend": { + "name": "resend", + "schema": "", + "columns": { + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.slack": { + "name": "slack", + "schema": "", + "columns": { + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.telegram": { + "name": "telegram", + "schema": "", + "columns": { + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "botToken": { + "name": "botToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "chatId": { + "name": "chatId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "messageThreadId": { + "name": "messageThreadId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.port": { + "name": "port", + "schema": "", + "columns": { + "portId": { + "name": "portId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "publishedPort": { + "name": "publishedPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "publishMode": { + "name": "publishMode", + "type": "publishModeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'host'" + }, + "targetPort": { + "name": "targetPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "protocol": { + "name": "protocol", + "type": "protocolType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "port_applicationId_application_applicationId_fk": { + "name": "port_applicationId_application_applicationId_fk", + "tableFrom": "port", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.postgres": { + "name": "postgres", + "schema": "", + "columns": { + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "postgres_environmentId_environment_environmentId_fk": { + "name": "postgres_environmentId_environment_environmentId_fk", + "tableFrom": "postgres", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "postgres_serverId_server_serverId_fk": { + "name": "postgres_serverId_server_serverId_fk", + "tableFrom": "postgres", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "postgres_appName_unique": { + "name": "postgres_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.preview_deployments": { + "name": "preview_deployments", + "schema": "", + "columns": { + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestId": { + "name": "pullRequestId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestNumber": { + "name": "pullRequestNumber", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestURL": { + "name": "pullRequestURL", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestTitle": { + "name": "pullRequestTitle", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestCommentId": { + "name": "pullRequestCommentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "previewStatus": { + "name": "previewStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "preview_deployments_applicationId_application_applicationId_fk": { + "name": "preview_deployments_applicationId_application_applicationId_fk", + "tableFrom": "preview_deployments", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "preview_deployments_domainId_domain_domainId_fk": { + "name": "preview_deployments_domainId_domain_domainId_fk", + "tableFrom": "preview_deployments", + "tableTo": "domain", + "columnsFrom": [ + "domainId" + ], + "columnsTo": [ + "domainId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "preview_deployments_appName_unique": { + "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project": { + "name": "project", + "schema": "", + "columns": { + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": { + "project_organizationId_organization_id_fk": { + "name": "project_organizationId_organization_id_fk", + "tableFrom": "project", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redirect": { + "name": "redirect", + "schema": "", + "columns": { + "redirectId": { + "name": "redirectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "regex": { + "name": "regex", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "replacement": { + "name": "replacement", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permanent": { + "name": "permanent", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "redirect_applicationId_application_applicationId_fk": { + "name": "redirect_applicationId_application_applicationId_fk", + "tableFrom": "redirect", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redis": { + "name": "redis", + "schema": "", + "columns": { + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "redis_environmentId_environment_environmentId_fk": { + "name": "redis_environmentId_environment_environmentId_fk", + "tableFrom": "redis", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "redis_serverId_server_serverId_fk": { + "name": "redis_serverId_server_serverId_fk", + "tableFrom": "redis", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "redis_appName_unique": { + "name": "redis_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.registry": { + "name": "registry", + "schema": "", + "columns": { + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "registryName": { + "name": "registryName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "imagePrefix": { + "name": "imagePrefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "selfHosted": { + "name": "selfHosted", + "type": "RegistryType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'cloud'" + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "registry_organizationId_organization_id_fk": { + "name": "registry_organizationId_organization_id_fk", + "tableFrom": "registry", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.rollback": { + "name": "rollback", + "schema": "", + "columns": { + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fullContext": { + "name": "fullContext", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "rollback_deploymentId_deployment_deploymentId_fk": { + "name": "rollback_deploymentId_deployment_deploymentId_fk", + "tableFrom": "rollback", + "tableTo": "deployment", + "columnsFrom": [ + "deploymentId" + ], + "columnsTo": [ + "deploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.schedule": { + "name": "schedule", + "schema": "", + "columns": { + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "shellType": { + "name": "shellType", + "type": "shellType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'bash'" + }, + "scheduleType": { + "name": "scheduleType", + "type": "scheduleType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "script": { + "name": "script", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "timezone": { + "name": "timezone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "schedule_applicationId_application_applicationId_fk": { + "name": "schedule_applicationId_application_applicationId_fk", + "tableFrom": "schedule", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_composeId_compose_composeId_fk": { + "name": "schedule_composeId_compose_composeId_fk", + "tableFrom": "schedule", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_serverId_server_serverId_fk": { + "name": "schedule_serverId_server_serverId_fk", + "tableFrom": "schedule", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_userId_user_id_fk": { + "name": "schedule_userId_user_id_fk", + "tableFrom": "schedule", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.security": { + "name": "security", + "schema": "", + "columns": { + "securityId": { + "name": "securityId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "security_applicationId_application_applicationId_fk": { + "name": "security_applicationId_application_applicationId_fk", + "tableFrom": "security", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "security_username_applicationId_unique": { + "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "applicationId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.server": { + "name": "server", + "schema": "", + "columns": { + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'root'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverStatus": { + "name": "serverStatus", + "type": "serverStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'active'" + }, + "serverType": { + "name": "serverType", + "type": "serverType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'deploy'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + } + }, + "indexes": {}, + "foreignKeys": { + "server_organizationId_organization_id_fk": { + "name": "server_organizationId_organization_id_fk", + "tableFrom": "server", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "server_sshKeyId_ssh-key_sshKeyId_fk": { + "name": "server_sshKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "server", + "tableTo": "ssh-key", + "columnsFrom": [ + "sshKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session_temp": { + "name": "session_temp", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_temp_user_id_user_id_fk": { + "name": "session_temp_user_id_user_id_fk", + "tableFrom": "session_temp", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_temp_token_unique": { + "name": "session_temp_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ssh-key": { + "name": "ssh-key", + "schema": "", + "columns": { + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUsedAt": { + "name": "lastUsedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ssh-key_organizationId_organization_id_fk": { + "name": "ssh-key_organizationId_organization_id_fk", + "tableFrom": "ssh-key", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sso_provider": { + "name": "sso_provider", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "issuer": { + "name": "issuer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oidc_config": { + "name": "oidc_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "saml_config": { + "name": "saml_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "sso_provider_user_id_user_id_fk": { + "name": "sso_provider_user_id_user_id_fk", + "tableFrom": "sso_provider", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "sso_provider_organization_id_organization_id_fk": { + "name": "sso_provider_organization_id_organization_id_fk", + "tableFrom": "sso_provider", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sso_provider_provider_id_unique": { + "name": "sso_provider_provider_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "firstName": { + "name": "firstName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "lastName": { + "name": "lastName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "isRegistered": { + "name": "isRegistered", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "expirationDate": { + "name": "expirationDate", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'user'" + }, + "enablePaidFeatures": { + "name": "enablePaidFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "allowImpersonation": { + "name": "allowImpersonation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enableEnterpriseFeatures": { + "name": "enableEnterpriseFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "licenseKey": { + "name": "licenseKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isValidEnterpriseLicense": { + "name": "isValidEnterpriseLicense", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "stripeCustomerId": { + "name": "stripeCustomerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripeSubscriptionId": { + "name": "stripeSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serversQuantity": { + "name": "serversQuantity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "trustedOrigins": { + "name": "trustedOrigins", + "type": "text[]", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.volume_backup": { + "name": "volume_backup", + "schema": "", + "columns": { + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "turnOff": { + "name": "turnOff", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "volume_backup_applicationId_application_applicationId_fk": { + "name": "volume_backup_applicationId_application_applicationId_fk", + "tableFrom": "volume_backup", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_postgresId_postgres_postgresId_fk": { + "name": "volume_backup_postgresId_postgres_postgresId_fk", + "tableFrom": "volume_backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mariadbId_mariadb_mariadbId_fk": { + "name": "volume_backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "volume_backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mongoId_mongo_mongoId_fk": { + "name": "volume_backup_mongoId_mongo_mongoId_fk", + "tableFrom": "volume_backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mysqlId_mysql_mysqlId_fk": { + "name": "volume_backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "volume_backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_redisId_redis_redisId_fk": { + "name": "volume_backup_redisId_redis_redisId_fk", + "tableFrom": "volume_backup", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_composeId_compose_composeId_fk": { + "name": "volume_backup_composeId_compose_composeId_fk", + "tableFrom": "volume_backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_destinationId_destination_destinationId_fk": { + "name": "volume_backup_destinationId_destination_destinationId_fk", + "tableFrom": "volume_backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.webServerSettings": { + "name": "webServerSettings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverIp": { + "name": "serverIp", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "letsEncryptEmail": { + "name": "letsEncryptEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sshPrivateKey": { + "name": "sshPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "logCleanupCron": { + "name": "logCleanupCron", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0 0 * * *'" + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + }, + "cleanupCacheApplications": { + "name": "cleanupCacheApplications", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnPreviews": { + "name": "cleanupCacheOnPreviews", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnCompose": { + "name": "cleanupCacheOnCompose", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.buildType": { + "name": "buildType", + "schema": "public", + "values": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "public.sourceType": { + "name": "sourceType", + "schema": "public", + "values": [ + "docker", + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "drop" + ] + }, + "public.backupType": { + "name": "backupType", + "schema": "public", + "values": [ + "database", + "compose" + ] + }, + "public.databaseType": { + "name": "databaseType", + "schema": "public", + "values": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server" + ] + }, + "public.composeType": { + "name": "composeType", + "schema": "public", + "values": [ + "docker-compose", + "stack" + ] + }, + "public.sourceTypeCompose": { + "name": "sourceTypeCompose", + "schema": "public", + "values": [ + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "raw" + ] + }, + "public.deploymentStatus": { + "name": "deploymentStatus", + "schema": "public", + "values": [ + "running", + "done", + "error", + "cancelled" + ] + }, + "public.domainType": { + "name": "domainType", + "schema": "public", + "values": [ + "compose", + "application", + "preview" + ] + }, + "public.gitProviderType": { + "name": "gitProviderType", + "schema": "public", + "values": [ + "github", + "gitlab", + "bitbucket", + "gitea" + ] + }, + "public.mountType": { + "name": "mountType", + "schema": "public", + "values": [ + "bind", + "volume", + "file" + ] + }, + "public.serviceType": { + "name": "serviceType", + "schema": "public", + "values": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "public.notificationType": { + "name": "notificationType", + "schema": "public", + "values": [ + "slack", + "telegram", + "discord", + "email", + "resend", + "gotify", + "ntfy", + "pushover", + "custom", + "lark" + ] + }, + "public.protocolType": { + "name": "protocolType", + "schema": "public", + "values": [ + "tcp", + "udp" + ] + }, + "public.publishModeType": { + "name": "publishModeType", + "schema": "public", + "values": [ + "ingress", + "host" + ] + }, + "public.RegistryType": { + "name": "RegistryType", + "schema": "public", + "values": [ + "selfHosted", + "cloud" + ] + }, + "public.scheduleType": { + "name": "scheduleType", + "schema": "public", + "values": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "public.shellType": { + "name": "shellType", + "schema": "public", + "values": [ + "bash", + "sh" + ] + }, + "public.serverStatus": { + "name": "serverStatus", + "schema": "public", + "values": [ + "active", + "inactive" + ] + }, + "public.serverType": { + "name": "serverType", + "schema": "public", + "values": [ + "deploy", + "build" + ] + }, + "public.applicationStatus": { + "name": "applicationStatus", + "schema": "public", + "values": [ + "idle", + "running", + "done", + "error" + ] + }, + "public.certificateType": { + "name": "certificateType", + "schema": "public", + "values": [ + "letsencrypt", + "none", + "custom" + ] + }, + "public.triggerType": { + "name": "triggerType", + "schema": "public", + "values": [ + "push", + "tag" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/_journal.json b/apps/dokploy/drizzle/meta/_journal.json index b94d44562..4af7e6c2b 100644 --- a/apps/dokploy/drizzle/meta/_journal.json +++ b/apps/dokploy/drizzle/meta/_journal.json @@ -995,6 +995,13 @@ "when": 1770490719123, "tag": "0141_plain_earthquake", "breakpoints": true + }, + { + "idx": 142, + "version": "7", + "when": 1770615019498, + "tag": "0142_outstanding_tusk", + "breakpoints": true } ] } \ No newline at end of file From c039e638a6a72154a1e61989bbcb31ef6af5f8c2 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 8 Feb 2026 23:36:20 -0600 Subject: [PATCH 028/206] refactor(dokploy): reorganize imports and simplify ulimitsSwarm assignment - Moved the Tooltip imports to a more appropriate location for better readability. - Simplified the assignment of ulimitsSwarm to ensure it directly accesses the data property. --- .../application/advanced/show-resources.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx b/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx index 509b9bb0d..8978d346a 100644 --- a/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx @@ -21,17 +21,11 @@ import { FormLabel, FormMessage, } from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; import { createConverter, NumberInputWithSteps, } from "@/components/ui/number-input"; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from "@/components/ui/tooltip"; -import { Input } from "@/components/ui/input"; import { Select, SelectContent, @@ -39,6 +33,12 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; import { api } from "@/utils/api"; const CPU_STEP = 0.25; @@ -155,7 +155,7 @@ export const ShowResources = ({ id, type }: Props) => { cpuReservation: data?.cpuReservation || undefined, memoryLimit: data?.memoryLimit || undefined, memoryReservation: data?.memoryReservation || undefined, - ulimitsSwarm: (data as any)?.ulimitsSwarm || [], + ulimitsSwarm: data?.ulimitsSwarm || [], }); } }, [data, form, form.reset]); From f5fa39b97e2ca37cfcd4e4b8f93119810a4d5dae Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 9 Feb 2026 01:15:35 -0600 Subject: [PATCH 029/206] refactor(dokploy): restrict license key access to owners only and enhance validation - Updated the license key settings to ensure only users with the "owner" role can access certain functionalities. - Modified the license key activation input validation to require a non-empty string. - Improved error handling for network issues when validating license keys, providing clearer feedback to users. - Adjusted the dashboard settings to redirect non-owner users appropriately. --- apps/dokploy/components/layouts/side.tsx | 3 +-- .../proprietary/license-keys/license-key.tsx | 7 +++++- .../pages/dashboard/settings/license.tsx | 4 ++-- .../api/routers/proprietary/license-key.ts | 23 ++++++++++++++++++- apps/dokploy/server/utils/enterprise.ts | 22 ++++++++++++++++++ 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/apps/dokploy/components/layouts/side.tsx b/apps/dokploy/components/layouts/side.tsx index 0062c223a..52f8b5bfb 100644 --- a/apps/dokploy/components/layouts/side.tsx +++ b/apps/dokploy/components/layouts/side.tsx @@ -404,8 +404,7 @@ const MENU: Menu = { url: "/dashboard/settings/license", icon: Key, // Only enabled for admins in non-cloud environments - isEnabled: ({ auth }) => - !!(auth?.role === "owner" || auth?.role === "admin"), + isEnabled: ({ auth }) => !!(auth?.role === "owner"), }, { isSingle: true, diff --git a/apps/dokploy/components/proprietary/license-keys/license-key.tsx b/apps/dokploy/components/proprietary/license-keys/license-key.tsx index 89e429ebd..a1b29c6cd 100644 --- a/apps/dokploy/components/proprietary/license-keys/license-key.tsx +++ b/apps/dokploy/components/proprietary/license-keys/license-key.tsx @@ -166,7 +166,12 @@ export function LicenseKeySettings() { {!haveValidLicenseKey && ( + )} + + ))} + + )} +
+ +

+ Click a provider below to link it to your account. You will be + redirected to complete the flow. +

+
+ {!linkedProviderIds.has("google") && ( + + )} + {!linkedProviderIds.has("github") && ( + + )} +
+ +
+ + ); +} diff --git a/apps/dokploy/pages/dashboard/settings/profile.tsx b/apps/dokploy/pages/dashboard/settings/profile.tsx index 34f8126e4..7e0ccdc83 100644 --- a/apps/dokploy/pages/dashboard/settings/profile.tsx +++ b/apps/dokploy/pages/dashboard/settings/profile.tsx @@ -4,6 +4,7 @@ import type { GetServerSidePropsContext } from "next"; import type { ReactElement } from "react"; import superjson from "superjson"; import { ShowApiKeys } from "@/components/dashboard/settings/api/show-api-keys"; +import { LinkingAccount } from "@/components/dashboard/settings/linking-account/linking-account"; import { ProfileForm } from "@/components/dashboard/settings/profile/profile-form"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; @@ -12,17 +13,16 @@ import { getLocale, serverSideTranslations } from "@/utils/i18n"; const Page = () => { const { data } = api.user.get.useQuery(); + const { data: isCloud } = api.settings.isCloud.useQuery(); - // const { data: isCloud } = api.settings.isCloud.useQuery(); return (
-
+
+ {isCloud && } {(data?.canAccessToAPI || data?.role === "owner" || data?.role === "admin") && } - - {/* {isCloud && } */}
); diff --git a/packages/server/src/lib/auth.ts b/packages/server/src/lib/auth.ts index b6d52febb..3d993e692 100644 --- a/packages/server/src/lib/auth.ts +++ b/packages/server/src/lib/auth.ts @@ -43,6 +43,17 @@ const { handler, api } = betterAuth({ }, } : {}), + ...(IS_CLOUD + ? { + account: { + accountLinking: { + enabled: true, + trustedProviders: ["github", "google"], + allowDifferentEmails: true, + }, + }, + } + : {}), appName: "Dokploy", socialProviders: { github: { From d348ad5556c5e6446e092b360ee356cfdc7de2d0 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 9 Feb 2026 02:21:37 -0600 Subject: [PATCH 031/206] fix(dokploy): remove console logs from linking account component - Eliminated unnecessary console log statements in the LinkingAccount component to clean up the code and improve performance. - Ensured that the account listing functionality remains intact while enhancing code readability. --- .../dashboard/settings/linking-account/linking-account.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/linking-account/linking-account.tsx b/apps/dokploy/components/dashboard/settings/linking-account/linking-account.tsx index cb448709a..dcfa0b04f 100644 --- a/apps/dokploy/components/dashboard/settings/linking-account/linking-account.tsx +++ b/apps/dokploy/components/dashboard/settings/linking-account/linking-account.tsx @@ -41,13 +41,11 @@ export function LinkingAccount() { setAccountsLoading(true); try { const { data } = await authClient.listAccounts(); - console.log(data); const list = Array.isArray(data) ? data : ((data && typeof data === "object" && "accounts" in data ? (data as { accounts?: AccountItem[] }).accounts : null) ?? []); - console.log(list); setAccounts(Array.isArray(list) ? list : []); } catch { setAccounts([]); From 21a6657e005c2c2b39d94a270f7cb686134c2222 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 08:33:23 +0000 Subject: [PATCH 032/206] [autofix.ci] apply automated fixes --- apps/dokploy/server/utils/enterprise.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/dokploy/server/utils/enterprise.ts b/apps/dokploy/server/utils/enterprise.ts index d6beeedf8..bd151f4d1 100644 --- a/apps/dokploy/server/utils/enterprise.ts +++ b/apps/dokploy/server/utils/enterprise.ts @@ -8,7 +8,9 @@ function isNetworkError(error: unknown): boolean { if (error.message === "fetch failed") return true; const cause = (error as Error & { cause?: { code?: string } }).cause; const code = cause?.code; - return code === "ECONNREFUSED" || code === "ENOTFOUND" || code === "ETIMEDOUT"; + return ( + code === "ECONNREFUSED" || code === "ENOTFOUND" || code === "ETIMEDOUT" + ); } return false; } From b391abfd5c8465fe7d55bee355facec56efa68e2 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 9 Feb 2026 02:42:15 -0600 Subject: [PATCH 033/206] feat(dokploy): add product IDs for monthly and annual subscriptions in Stripe integration - Introduced PRODUCT_MONTHLY_ID and PRODUCT_ANNUAL_ID constants to manage subscription product IDs. - Updated the Stripe API call to fetch only the specified subscription products, enhancing performance and clarity in product management. --- apps/dokploy/server/api/routers/stripe.ts | 8 +++++++- apps/dokploy/server/utils/stripe.ts | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/dokploy/server/api/routers/stripe.ts b/apps/dokploy/server/api/routers/stripe.ts index be1e94d4a..412c9e3e8 100644 --- a/apps/dokploy/server/api/routers/stripe.ts +++ b/apps/dokploy/server/api/routers/stripe.ts @@ -7,7 +7,12 @@ import { import { TRPCError } from "@trpc/server"; import Stripe from "stripe"; import { z } from "zod"; -import { getStripeItems, WEBSITE_URL } from "@/server/utils/stripe"; +import { + getStripeItems, + PRODUCT_ANNUAL_ID, + PRODUCT_MONTHLY_ID, + WEBSITE_URL, +} from "@/server/utils/stripe"; import { adminProcedure, createTRPCRouter } from "../trpc"; export const stripeRouter = createTRPCRouter({ @@ -22,6 +27,7 @@ export const stripeRouter = createTRPCRouter({ const products = await stripe.products.list({ expand: ["data.default_price"], active: true, + ids: [PRODUCT_MONTHLY_ID, PRODUCT_ANNUAL_ID], }); if (!stripeCustomerId) { diff --git a/apps/dokploy/server/utils/stripe.ts b/apps/dokploy/server/utils/stripe.ts index 9e3e751a4..8d1aebb29 100644 --- a/apps/dokploy/server/utils/stripe.ts +++ b/apps/dokploy/server/utils/stripe.ts @@ -3,9 +3,12 @@ export const WEBSITE_URL = ? "http://localhost:3000" : process.env.SITE_URL; -const BASE_PRICE_MONTHLY_ID = process.env.BASE_PRICE_MONTHLY_ID!; // $4.00 +export const BASE_PRICE_MONTHLY_ID = process.env.BASE_PRICE_MONTHLY_ID!; // $4.00 -const BASE_ANNUAL_MONTHLY_ID = process.env.BASE_ANNUAL_MONTHLY_ID!; // $7.99 +export const BASE_ANNUAL_MONTHLY_ID = process.env.BASE_ANNUAL_MONTHLY_ID!; // $7.99 + +export const PRODUCT_MONTHLY_ID = process.env.PRODUCT_MONTHLY_ID!; +export const PRODUCT_ANNUAL_ID = process.env.PRODUCT_ANNUAL_ID!; export const getStripeItems = (serverQuantity: number, isAnnual: boolean) => { const items = []; From bd5b27ad517abb1e820c1cb9899c071985555bc5 Mon Sep 17 00:00:00 2001 From: "Immanuel Daviel A. Garcia" <34188635+AlexDev404@users.noreply.github.com> Date: Mon, 9 Feb 2026 12:48:28 -0600 Subject: [PATCH 034/206] fix: Update text breaking so that it breaks words properly --- apps/dokploy/components/dashboard/projects/show.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dokploy/components/dashboard/projects/show.tsx b/apps/dokploy/components/dashboard/projects/show.tsx index 8234593e1..b637436fb 100644 --- a/apps/dokploy/components/dashboard/projects/show.tsx +++ b/apps/dokploy/components/dashboard/projects/show.tsx @@ -439,7 +439,7 @@ export const ShowProjects = () => {
- + {project.description} From bee4e4639cb63bed5dff014b687c7758c8db5cee Mon Sep 17 00:00:00 2001 From: "Immanuel Daviel A. Garcia" <34188635+AlexDev404@users.noreply.github.com> Date: Mon, 9 Feb 2026 13:10:50 -0600 Subject: [PATCH 035/206] amend: Apply the proper fix --- apps/dokploy/components/dashboard/projects/show.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/components/dashboard/projects/show.tsx b/apps/dokploy/components/dashboard/projects/show.tsx index b637436fb..07ad68144 100644 --- a/apps/dokploy/components/dashboard/projects/show.tsx +++ b/apps/dokploy/components/dashboard/projects/show.tsx @@ -430,7 +430,7 @@ export const ShowProjects = () => { ) : null} - +
@@ -439,7 +439,7 @@ export const ShowProjects = () => {
- + {project.description} From 00dc3fae11964f9188c24dc2f378fd30cb15f56a Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 10 Feb 2026 00:11:39 -0600 Subject: [PATCH 036/206] refactor(dokploy): improve repository selection UI for version control providers - Updated repository selection logic across Bitbucket, Gitea, GitHub, and GitLab components to display a placeholder when no repository is selected. - Enhanced loading state messages for better user experience, ensuring users are prompted to select an account before loading repositories. - Cleaned up conditional rendering for loading states and account selection prompts in the UI. --- .../generic/save-bitbucket-provider.tsx | 20 +++++++++++-------- .../general/generic/save-gitea-provider.tsx | 20 +++++++++++-------- .../general/generic/save-github-provider.tsx | 20 +++++++++++-------- .../general/generic/save-gitlab-provider.tsx | 20 +++++++++++-------- .../save-bitbucket-provider-compose.tsx | 20 +++++++++++-------- .../generic/save-gitea-provider-compose.tsx | 20 +++++++++++-------- .../generic/save-github-provider-compose.tsx | 20 +++++++++++-------- .../generic/save-gitlab-provider-compose.tsx | 20 +++++++++++-------- 8 files changed, 96 insertions(+), 64 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx index 01db7febc..e32a6cdc4 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx @@ -245,13 +245,13 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -263,11 +263,15 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!bitbucketId ? ( + + Select a Bitbucket account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx index 2198f4a97..a7565ef3c 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx @@ -258,14 +258,14 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo: GiteaRepository) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -277,11 +277,15 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!giteaId ? ( + + Select a Gitea account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx index 80d6850ca..1dcb74f5d 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx @@ -233,13 +233,13 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -251,11 +251,15 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!githubId ? ( + + Select a GitHub account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx index 6197fc49f..df4321a5f 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx @@ -254,13 +254,13 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -272,11 +272,15 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!gitlabId ? ( + + Select a GitLab account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx index c89b9893e..374ec94f5 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx @@ -247,13 +247,13 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -265,11 +265,15 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!bitbucketId ? ( + + Select a Bitbucket account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx index fce562285..f5742d232 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx @@ -244,13 +244,13 @@ export const SaveGiteaProviderCompose = ({ composeId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -261,11 +261,15 @@ export const SaveGiteaProviderCompose = ({ composeId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!giteaId ? ( + + Select a Gitea account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx index 5ad950e4c..f34b5f36c 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx @@ -234,13 +234,13 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -252,11 +252,15 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!githubId ? ( + + Select a GitHub account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx index 98c2afa11..a473d795b 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx @@ -256,13 +256,13 @@ export const SaveGitlabProviderCompose = ({ composeId }: Props) => { !field.value && "text-muted-foreground", )} > - {isLoadingRepositories - ? "Loading...." - : field.value.owner - ? repositories?.find( + {!field.value.owner + ? "Select repository" + : isLoadingRepositories + ? "Loading...." + : repositories?.find( (repo) => repo.name === field.value.repo, - )?.name - : "Select repository"} + )?.name ?? "Select repository"} @@ -274,11 +274,15 @@ export const SaveGitlabProviderCompose = ({ composeId }: Props) => { placeholder="Search repository..." className="h-9" /> - {isLoadingRepositories && ( + {!gitlabId ? ( + + Select a GitLab account first + + ) : isLoadingRepositories ? ( Loading Repositories.... - )} + ) : null} No repositories found. From f4a453048110d18f5c5b2d4db122fab77a0c2183 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 06:12:28 +0000 Subject: [PATCH 037/206] [autofix.ci] apply automated fixes --- .../application/general/generic/save-bitbucket-provider.tsx | 4 ++-- .../application/general/generic/save-gitea-provider.tsx | 4 ++-- .../application/general/generic/save-github-provider.tsx | 4 ++-- .../application/general/generic/save-gitlab-provider.tsx | 4 ++-- .../general/generic/save-bitbucket-provider-compose.tsx | 4 ++-- .../compose/general/generic/save-gitea-provider-compose.tsx | 4 ++-- .../compose/general/generic/save-github-provider-compose.tsx | 4 ++-- .../compose/general/generic/save-gitlab-provider-compose.tsx | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx index e32a6cdc4..f8d5109c8 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx @@ -249,9 +249,9 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx index a7565ef3c..3f7943252 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx @@ -262,10 +262,10 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo: GiteaRepository) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx index 1dcb74f5d..1fa42b9c0 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx @@ -237,9 +237,9 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx index df4321a5f..f5ba24e4c 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx @@ -258,9 +258,9 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx index 374ec94f5..7622906df 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx @@ -251,9 +251,9 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx index f5742d232..5e546d050 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx @@ -248,9 +248,9 @@ export const SaveGiteaProviderCompose = ({ composeId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx index f34b5f36c..b52fa2097 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx @@ -238,9 +238,9 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx index a473d795b..9f9babb3e 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx @@ -260,9 +260,9 @@ export const SaveGitlabProviderCompose = ({ composeId }: Props) => { ? "Select repository" : isLoadingRepositories ? "Loading...." - : repositories?.find( + : (repositories?.find( (repo) => repo.name === field.value.repo, - )?.name ?? "Select repository"} + )?.name ?? "Select repository")} From 0e26c5023b8353015564295cd4d6788ddac54f84 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 06:13:46 +0000 Subject: [PATCH 038/206] [autofix.ci] apply automated fixes --- apps/dokploy/server/utils/enterprise.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/dokploy/server/utils/enterprise.ts b/apps/dokploy/server/utils/enterprise.ts index d6beeedf8..bd151f4d1 100644 --- a/apps/dokploy/server/utils/enterprise.ts +++ b/apps/dokploy/server/utils/enterprise.ts @@ -8,7 +8,9 @@ function isNetworkError(error: unknown): boolean { if (error.message === "fetch failed") return true; const cause = (error as Error & { cause?: { code?: string } }).cause; const code = cause?.code; - return code === "ECONNREFUSED" || code === "ENOTFOUND" || code === "ETIMEDOUT"; + return ( + code === "ECONNREFUSED" || code === "ENOTFOUND" || code === "ETIMEDOUT" + ); } return false; } From 17da1d5b3ca4e32f6e380dc2997f914de9874260 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 10 Feb 2026 00:31:40 -0600 Subject: [PATCH 039/206] fix: Update LICENSE_KEY_URL for production environment - Changed the production license key URL from "https://licenses.dokploy.com" to "https://licenses-api.dokploy.com" for improved API access. --- packages/server/src/utils/crons/enterprise.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/utils/crons/enterprise.ts b/packages/server/src/utils/crons/enterprise.ts index 9dfbae9a7..7b07aaefb 100644 --- a/packages/server/src/utils/crons/enterprise.ts +++ b/packages/server/src/utils/crons/enterprise.ts @@ -7,7 +7,7 @@ import { user as userSchema } from "../../db/schema/user"; export const LICENSE_KEY_URL = process.env.NODE_ENV === "development" ? "http://localhost:4002" - : "https://licenses.dokploy.com"; + : "https://licenses-api.dokploy.com"; export const initEnterpriseBackupCronJobs = async () => { scheduleJob("enterprise-check", "0 0 */3 * *", async () => { From 744ebab15a2220d5449f20445ebd8058eeb8bcbb Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 10 Feb 2026 03:11:33 -0600 Subject: [PATCH 040/206] refactor(deployments): enhance deployment worker and queue handling for cloud environments - Refactored the deployment worker to create a no-op worker when Redis is disabled (e.g., IS_CLOUD), preventing BullMQ connection errors. - Updated queue initialization to use a no-op queue in cloud environments, ensuring compatibility and stability. - Improved error handling and logging for job processing in the deployment worker. --- .../server/queues/deployments-queue.ts | 136 ++++++++++-------- apps/dokploy/server/queues/queueSetup.ts | 41 ++++-- 2 files changed, 102 insertions(+), 75 deletions(-) diff --git a/apps/dokploy/server/queues/deployments-queue.ts b/apps/dokploy/server/queues/deployments-queue.ts index 0474b63e2..e92f4c192 100644 --- a/apps/dokploy/server/queues/deployments-queue.ts +++ b/apps/dokploy/server/queues/deployments-queue.ts @@ -2,6 +2,7 @@ import { deployApplication, deployCompose, deployPreviewApplication, + IS_CLOUD, rebuildApplication, rebuildCompose, rebuildPreviewApplication, @@ -13,70 +14,83 @@ import { type Job, Worker } from "bullmq"; import type { DeploymentJob } from "./queue-types"; import { redisConfig } from "./redis-connection"; -export const deploymentWorker = new Worker( - "deployments", - async (job: Job) => { - try { - if (job.data.applicationType === "application") { - await updateApplicationStatus(job.data.applicationId, "running"); +const createDeploymentWorker = () => + new Worker( + "deployments", + async (job: Job) => { + try { + if (job.data.applicationType === "application") { + await updateApplicationStatus(job.data.applicationId, "running"); - if (job.data.type === "redeploy") { - await rebuildApplication({ - applicationId: job.data.applicationId, - titleLog: job.data.titleLog, - descriptionLog: job.data.descriptionLog, + if (job.data.type === "redeploy") { + await rebuildApplication({ + applicationId: job.data.applicationId, + titleLog: job.data.titleLog, + descriptionLog: job.data.descriptionLog, + }); + } else if (job.data.type === "deploy") { + await deployApplication({ + applicationId: job.data.applicationId, + titleLog: job.data.titleLog, + descriptionLog: job.data.descriptionLog, + }); + } + } else if (job.data.applicationType === "compose") { + await updateCompose(job.data.composeId, { + composeStatus: "running", }); - } else if (job.data.type === "deploy") { - await deployApplication({ - applicationId: job.data.applicationId, - titleLog: job.data.titleLog, - descriptionLog: job.data.descriptionLog, + if (job.data.type === "deploy") { + await deployCompose({ + composeId: job.data.composeId, + titleLog: job.data.titleLog, + descriptionLog: job.data.descriptionLog, + }); + } else if (job.data.type === "redeploy") { + await rebuildCompose({ + composeId: job.data.composeId, + titleLog: job.data.titleLog, + descriptionLog: job.data.descriptionLog, + }); + } + } else if (job.data.applicationType === "application-preview") { + await updatePreviewDeployment(job.data.previewDeploymentId, { + previewStatus: "running", }); - } - } else if (job.data.applicationType === "compose") { - await updateCompose(job.data.composeId, { - composeStatus: "running", - }); - if (job.data.type === "deploy") { - await deployCompose({ - composeId: job.data.composeId, - titleLog: job.data.titleLog, - descriptionLog: job.data.descriptionLog, - }); - } else if (job.data.type === "redeploy") { - await rebuildCompose({ - composeId: job.data.composeId, - titleLog: job.data.titleLog, - descriptionLog: job.data.descriptionLog, - }); - } - } else if (job.data.applicationType === "application-preview") { - await updatePreviewDeployment(job.data.previewDeploymentId, { - previewStatus: "running", - }); - if (job.data.type === "redeploy") { - await rebuildPreviewApplication({ - applicationId: job.data.applicationId, - titleLog: job.data.titleLog, - descriptionLog: job.data.descriptionLog, - previewDeploymentId: job.data.previewDeploymentId, - }); - } else if (job.data.type === "deploy") { - await deployPreviewApplication({ - applicationId: job.data.applicationId, - titleLog: job.data.titleLog, - descriptionLog: job.data.descriptionLog, - previewDeploymentId: job.data.previewDeploymentId, - }); + if (job.data.type === "redeploy") { + await rebuildPreviewApplication({ + applicationId: job.data.applicationId, + titleLog: job.data.titleLog, + descriptionLog: job.data.descriptionLog, + previewDeploymentId: job.data.previewDeploymentId, + }); + } else if (job.data.type === "deploy") { + await deployPreviewApplication({ + applicationId: job.data.applicationId, + titleLog: job.data.titleLog, + descriptionLog: job.data.descriptionLog, + previewDeploymentId: job.data.previewDeploymentId, + }); + } } + } catch (error) { + console.log("Error", error); } - } catch (error) { - console.log("Error", error); - } - }, - { - autorun: false, - connection: redisConfig, - }, -); + }, + { + autorun: false, + connection: redisConfig, + }, + ); + +/** No-op worker when Redis is disabled (e.g. IS_CLOUD). Avoids BullMQ connection errors. */ +const noopWorker = { + run: () => Promise.resolve(), + close: () => Promise.resolve(), + cancelJob: () => Promise.resolve(), + cancelAllJobs: () => Promise.resolve(), +}; + +export const deploymentWorker = !IS_CLOUD + ? createDeploymentWorker() + : (noopWorker as unknown as Worker); diff --git a/apps/dokploy/server/queues/queueSetup.ts b/apps/dokploy/server/queues/queueSetup.ts index 3900a1a77..75d59e079 100644 --- a/apps/dokploy/server/queues/queueSetup.ts +++ b/apps/dokploy/server/queues/queueSetup.ts @@ -1,15 +1,26 @@ +import { IS_CLOUD } from "@dokploy/server"; import { execAsync, execAsyncRemote, } from "@dokploy/server/utils/process/execAsync"; +import type { Job } from "bullmq"; import { Queue } from "bullmq"; import { deploymentWorker } from "./deployments-queue"; import { redisConfig } from "./redis-connection"; -const myQueue = new Queue("deployments", { - connection: redisConfig, +/** No-op queue when Redis is disabled (e.g. IS_CLOUD). Avoids BullMQ connection errors. */ +const createNoopQueue = () => ({ + getJobs: () => Promise.resolve([] as Job[]), + add: () => + Promise.resolve({ id: "noop", remove: () => Promise.resolve() } as Job), + close: () => Promise.resolve(), + on: () => {}, }); +const myQueue = !IS_CLOUD + ? new Queue("deployments", { connection: redisConfig }) + : (createNoopQueue() as unknown as Queue); + export const getJobsByApplicationId = async (applicationId: string) => { const jobs = await myQueue.getJobs(); return jobs.filter((job) => job?.data?.applicationId === applicationId); @@ -20,19 +31,21 @@ export const getJobsByComposeId = async (composeId: string) => { return jobs.filter((job) => job?.data?.composeId === composeId); }; -process.on("SIGTERM", () => { - myQueue.close(); - process.exit(0); -}); +if (!IS_CLOUD) { + process.on("SIGTERM", () => { + myQueue.close(); + process.exit(0); + }); -myQueue.on("error", (error) => { - if ((error as any).code === "ECONNREFUSED") { - console.error( - "Make sure you have installed Redis and it is running.", - error, - ); - } -}); + myQueue.on("error", (error) => { + if ((error as any).code === "ECONNREFUSED") { + console.error( + "Make sure you have installed Redis and it is running.", + error, + ); + } + }); +} export const cleanQueuesByApplication = async (applicationId: string) => { const jobs = await myQueue.getJobs(["waiting", "delayed"]); From ce9ba60902d5d9e8ec279c3f2928e97b83be434c Mon Sep 17 00:00:00 2001 From: user Date: Fri, 30 Jan 2026 20:23:32 +0300 Subject: [PATCH 041/206] impl --- .../__test__/deploy/application.real.test.ts | 126 + .../patches/patch.integration.test.ts | 106 + .../dashboard/application/patches/index.ts | 2 + .../application/patches/patch-editor.tsx | 235 + .../application/patches/show-patches.tsx | 205 + .../servers/actions/show-storage-actions.tsx | 26 +- .../services/application/[applicationId].tsx | 9 + .../services/compose/[composeId].tsx | 10 + apps/dokploy/server/api/root.ts | 2 + apps/dokploy/server/api/routers/patch.ts | 502 + openapi.json | 42831 ++++++++-------- packages/server/src/constants/index.ts | 1 + packages/server/src/db/schema/application.ts | 2 + packages/server/src/db/schema/compose.ts | 2 + packages/server/src/db/schema/index.ts | 1 + packages/server/src/db/schema/patch.ts | 95 + packages/server/src/index.ts | 2 + packages/server/src/services/application.ts | 18 + packages/server/src/services/compose.ts | 24 + packages/server/src/services/patch-repo.ts | 308 + packages/server/src/services/patch.ts | 295 + 21 files changed, 24797 insertions(+), 20005 deletions(-) create mode 100644 apps/dokploy/__test__/patches/patch.integration.test.ts create mode 100644 apps/dokploy/components/dashboard/application/patches/index.ts create mode 100644 apps/dokploy/components/dashboard/application/patches/patch-editor.tsx create mode 100644 apps/dokploy/components/dashboard/application/patches/show-patches.tsx create mode 100644 apps/dokploy/server/api/routers/patch.ts create mode 100644 packages/server/src/db/schema/patch.ts create mode 100644 packages/server/src/services/patch-repo.ts create mode 100644 packages/server/src/services/patch.ts diff --git a/apps/dokploy/__test__/deploy/application.real.test.ts b/apps/dokploy/__test__/deploy/application.real.test.ts index 43ff07836..3831212d7 100644 --- a/apps/dokploy/__test__/deploy/application.real.test.ts +++ b/apps/dokploy/__test__/deploy/application.real.test.ts @@ -1,3 +1,4 @@ + import { existsSync } from "node:fs"; import path from "node:path"; import type { ApplicationNested } from "@dokploy/server"; @@ -8,6 +9,17 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; const REAL_TEST_TIMEOUT = 180000; // 3 minutes +// Mock constants to avoid load error +vi.mock("@dokploy/server/constants", () => ({ + paths: () => ({ + LOGS_PATH: "/tmp/dokploy-test-real/logs", + APPLICATIONS_PATH: "/tmp/dokploy-test-real/applications", + PATCH_REPOS_PATH: "/tmp/dokploy-test-real/patch-repos", + }), + IS_CLOUD: false, + docker: {}, +})); + // Mock ONLY database and notifications vi.mock("@dokploy/server/db", () => { const createChainableMock = (): any => { @@ -67,6 +79,16 @@ vi.mock("@dokploy/server/services/rollbacks", () => ({ createRollback: vi.fn(), })); +vi.mock("@dokploy/server/services/patch", async (importOriginal) => { + const actual = await importOriginal< + typeof import("@dokploy/server/services/patch") + >(); + return { + ...actual, + findPatchesByApplicationId: vi.fn().mockResolvedValue([]), + }; +}); + // NOT mocked (executed for real): // - execAsync // - cloneGitRepository @@ -78,6 +100,11 @@ import * as adminService from "@dokploy/server/services/admin"; import * as applicationService from "@dokploy/server/services/application"; import { deployApplication } from "@dokploy/server/services/application"; import * as deploymentService from "@dokploy/server/services/deployment"; +import * as patchService from "@dokploy/server/services/patch"; +import { generatePatch } from "@dokploy/server/services/patch"; +import { mkdtemp, writeFile } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; const createMockApplication = ( overrides: Partial = {}, @@ -474,6 +501,105 @@ describe( }, REAL_TEST_TIMEOUT, ); + it( + "should REALLY apply patches from database during deployment", + async () => { + // 1. Setup local temporary git repo + const tempRepo = await mkdtemp(join(tmpdir(), "real-patch-repo-")); + // Helper for local git commands + const execLocal = async (cmd: string) => execAsync(cmd, { cwd: tempRepo }); + + await execLocal("git init"); + await execLocal("git config user.email 'test@dokploy.com'"); + await execLocal("git config user.name 'Dokploy Test'"); + + // Create a simple Dockerfile and server script + // We use a simple python server to verify output + await writeFile(join(tempRepo, "app.py"), "print('Original App')\n"); + await writeFile( + join(tempRepo, "Dockerfile"), + "FROM python:3.9-slim\nCOPY app.py .\nCMD [\"python\", \"app.py\"]\n", + ); + + await execLocal("git add ."); + await execLocal("git commit -m 'Initial commit'"); + // Ensure master/main branch exists (git init might create master or main depending on config) + // We force create a branch named 'main' to be consistent + await execLocal("git checkout -b main || git checkout main"); + + // 2. Mock Application to use this local repo + const patchAppName = `real-patch-app-${Date.now()}`; + const patchApp = createMockApplication({ + appName: patchAppName, + buildType: "dockerfile", + customGitUrl: `file://${tempRepo}`, + customGitBranch: "main", + dockerfile: "Dockerfile", + }); + currentAppName = patchAppName; + allTestAppNames.push(patchAppName); + + // Setup standard mocks + vi.mocked(db.query.applications.findFirst).mockResolvedValue( + patchApp as any, + ); + vi.mocked(applicationService.findApplicationById).mockResolvedValue( + patchApp as any, + ); + + // 3. Generate a patch + // We modify the file, generate patch, and then reset. + const newContent = "print('Patched App')\n"; + const patchContent = await generatePatch({ + codePath: tempRepo, + filePath: "app.py", + newContent, + serverId: null, + }); + + // 4. Mock patch service to return this patch + vi.mocked(patchService.findPatchesByApplicationId).mockResolvedValue([ + { + patchId: "test-patch-1", + applicationId: "test-app-id", + composeId: null, + filePath: "app.py", + content: patchContent, + enabled: true, + createdAt: new Date().toISOString(), + } as any, + ]); + + console.log(`\n🚀 Testing deployment with patch: ${currentAppName}`); + + // 5. Deploy + const result = await deployApplication({ + applicationId: "test-app-id", + titleLog: "Real Patch Test", + descriptionLog: "Testing patch application", + }); + + expect(result).toBe(true); + + // 6. Verify Log contains "Applying patch" + const { stdout: logContent } = await execAsync( + `cat ${currentDeployment.logPath}`, + ); + // The implementation logs "Applying patch: ..." + expect(logContent).toContain("Applying patch"); + expect(logContent).toContain("app.py"); + console.log("✅ Verified patch execution logs"); + + // 7. Verify the deployed image contains the patched code + // We run the image and check output + const { stdout: runOutput } = await execAsync( + `docker run --rm ${patchAppName}`, + ); + expect(runOutput.trim()).toBe("Patched App"); + console.log("✅ Verified patched output:", runOutput.trim()); + }, + REAL_TEST_TIMEOUT, + ); }, REAL_TEST_TIMEOUT, ); diff --git a/apps/dokploy/__test__/patches/patch.integration.test.ts b/apps/dokploy/__test__/patches/patch.integration.test.ts new file mode 100644 index 000000000..2e370022e --- /dev/null +++ b/apps/dokploy/__test__/patches/patch.integration.test.ts @@ -0,0 +1,106 @@ + +import { generatePatch } from "@dokploy/server/services/patch"; +import { describe, expect, it, afterEach } from "vitest"; +import { mkdtemp, rm, writeFile, readFile } from "node:fs/promises"; +import { join } from "node:path"; +import { tmpdir } from "node:os"; +import { exec } from "node:child_process"; +import { promisify } from "node:util"; + +const execAsyncLocal = promisify(exec); + +describe("Patch System Integration", () => { + let tempDir: string; + + afterEach(async () => { + if (tempDir) { + await rm(tempDir, { recursive: true, force: true }); + } + }); + + it("should generate a patch that can be successfully applied via git", async () => { + // Setup repo + tempDir = await mkdtemp(join(tmpdir(), "dokploy-patch-test-")); + const fileName = "test.txt"; + const filePath = join(tempDir, fileName); + + await execAsyncLocal("git init", { cwd: tempDir }); + await execAsyncLocal("git config user.email 'test@test.com'", { cwd: tempDir }); + await execAsyncLocal("git config user.name 'Test'", { cwd: tempDir }); + + // Original content + await writeFile(filePath, "line1\nline2\n"); + await execAsyncLocal(`git add ${fileName}`, { cwd: tempDir }); + await execAsyncLocal("git commit -m 'init'", { cwd: tempDir }); + + // Generate patch (modify content) + const newContent = "line1\nline2\nline3\n"; + const patchContent = await generatePatch({ + codePath: tempDir, + filePath: fileName, + newContent, + serverId: null, + }); + + // Verify patch format + expect(patchContent.endsWith("\n")).toBe(true); + + // Reset file (generatePatch does reset, but ensure it) + await execAsyncLocal("git checkout .", { cwd: tempDir }); + const savedContent = await readFile(filePath, "utf-8"); + expect(savedContent).toBe("line1\nline2\n"); + + // Apply patch verification + // We simulate what Deployment Service does: write patch to file and run git apply + const patchFile = join(tempDir, "changes.patch"); + await writeFile(patchFile, patchContent); + + try { + await execAsyncLocal(`git apply --whitespace=fix ${patchFile}`, { cwd: tempDir }); + } catch (e: any) { + console.error("Git apply failed:", e.message); + console.log("Patch content:", JSON.stringify(patchContent)); + throw e; + } + + const appliedContent = await readFile(filePath, "utf-8"); + expect(appliedContent).toBe(newContent); + }); + + it("should handle files created without trailing newline", async () => { + // Setup repo + tempDir = await mkdtemp(join(tmpdir(), "dokploy-patch-test-noline-")); + const fileName = "noline.txt"; + const filePath = join(tempDir, fileName); + + await execAsyncLocal("git init", { cwd: tempDir }); + await execAsyncLocal("git config user.email 'test@test.com'", { cwd: tempDir }); + await execAsyncLocal("git config user.name 'Test'", { cwd: tempDir }); + + // Original content WITHOUT newline + await writeFile(filePath, "line1"); + await execAsyncLocal(`git add ${fileName}`, { cwd: tempDir }); + await execAsyncLocal("git commit -m 'init'", { cwd: tempDir }); + + // Generate patch + const newContent = "line1\nline2"; + const patchContent = await generatePatch({ + codePath: tempDir, + filePath: fileName, + newContent, + serverId: null, + }); + + // Verify patch format + expect(patchContent.endsWith("\n")).toBe(true); + + // Apply patch + const patchFile = join(tempDir, "changes.patch"); + await writeFile(patchFile, patchContent); + + await execAsyncLocal(`git apply --whitespace=fix ${patchFile}`, { cwd: tempDir }); + + const appliedContent = await readFile(filePath, "utf-8"); + expect(appliedContent).toBe(newContent); + }); +}); diff --git a/apps/dokploy/components/dashboard/application/patches/index.ts b/apps/dokploy/components/dashboard/application/patches/index.ts new file mode 100644 index 000000000..1854bd3e5 --- /dev/null +++ b/apps/dokploy/components/dashboard/application/patches/index.ts @@ -0,0 +1,2 @@ +export * from "./show-patches"; +export * from "./patch-editor"; diff --git a/apps/dokploy/components/dashboard/application/patches/patch-editor.tsx b/apps/dokploy/components/dashboard/application/patches/patch-editor.tsx new file mode 100644 index 000000000..bd7e6e83a --- /dev/null +++ b/apps/dokploy/components/dashboard/application/patches/patch-editor.tsx @@ -0,0 +1,235 @@ +import { ArrowLeft, ChevronRight, File, Folder, Loader2, Save } from "lucide-react"; +import { useCallback, useState } from "react"; +import { toast } from "sonner"; +import { CodeEditor } from "@/components/shared/code-editor"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import { api } from "@/utils/api"; +import type { RouterOutputs } from "@/utils/api"; + +interface Props { + applicationId?: string; + composeId?: string; + repoPath: string; + onClose: () => void; +} + +type DirectoryEntry = { + name: string; + path: string; + type: "file" | "directory"; + children?: DirectoryEntry[]; +}; + +export const PatchEditor = ({ + applicationId, + composeId, + repoPath, + onClose, +}: Props) => { + const [selectedFile, setSelectedFile] = useState(null); + const [fileContent, setFileContent] = useState(""); + const [originalContent, setOriginalContent] = useState(""); + const [expandedFolders, setExpandedFolders] = useState>(new Set()); + const [isSaving, setIsSaving] = useState(false); + + // Fetch directory tree + const { data: directories, isLoading: isDirLoading } = + api.patch.readRepoDirectories.useQuery( + { applicationId, composeId, repoPath }, + { enabled: !!repoPath }, + ); + + // Save mutation + const saveAsPatch = api.patch.saveFileAsPatch.useMutation({ + onSuccess: (result) => { + setIsSaving(false); + if (result.deleted) { + toast.success("No changes - patch removed"); + } else { + toast.success("Patch saved"); + } + setOriginalContent(fileContent); + }, + onError: () => { + setIsSaving(false); + toast.error("Failed to save patch"); + }, + }); + + // Read file content when selected + const { data: fileData, isFetching: isFileLoading } = + api.patch.readRepoFile.useQuery( + { + applicationId, + composeId, + repoPath, + filePath: selectedFile || "", + }, + { + enabled: !!selectedFile, + onSuccess: (data) => { + setFileContent(data.content); + setOriginalContent(data.content); + if (data.patchError) { + toast.error(data.patchErrorMessage || "Failed to apply patch"); + } + }, + }, + ); + + const handleFileSelect = (filePath: string) => { + setSelectedFile(filePath); + }; + + const toggleFolder = (path: string) => { + setExpandedFolders((prev) => { + const next = new Set(prev); + if (next.has(path)) { + next.delete(path); + } else { + next.add(path); + } + return next; + }); + }; + + const handleSave = () => { + if (!selectedFile) return; + setIsSaving(true); + saveAsPatch.mutate({ + applicationId, + composeId, + repoPath, + filePath: selectedFile, + content: fileContent, + }); + }; + + const hasChanges = fileContent !== originalContent; + + const renderTree = useCallback( + (entries: DirectoryEntry[], depth = 0) => { + return entries + .sort((a, b) => { + // Directories first, then alphabetically + if (a.type !== b.type) { + return a.type === "directory" ? -1 : 1; + } + return a.name.localeCompare(b.name); + }) + .map((entry) => { + const isExpanded = expandedFolders.has(entry.path); + const isSelected = selectedFile === entry.path; + + if (entry.type === "directory") { + return ( +
+ + {isExpanded && entry.children && ( +
{renderTree(entry.children, depth + 1)}
+ )} +
+ ); + } + + return ( + + ); + }); + }, + [expandedFolders, selectedFile], + ); + + return ( + + +
+ +
+ Edit File + + {selectedFile + ? `Editing: ${selectedFile}` + : "Select a file from the tree to edit"} + +
+
+ {selectedFile && ( + + )} +
+ +
+ {/* File Tree */} +
+ +
+ {isDirLoading ? ( +
+ +
+ ) : directories ? ( + renderTree(directories) + ) : ( +
+ No files found +
+ )} +
+
+
+ {/* Editor */} +
+ {isFileLoading ? ( +
+ +
+ ) : selectedFile ? ( + setFileContent(value || "")} + className="h-full w-full" + wrapperClassName="h-full" + lineWrapping + /> + ) : ( +
+ Select a file to edit +
+ )} +
+
+
+
+ ); +}; diff --git a/apps/dokploy/components/dashboard/application/patches/show-patches.tsx b/apps/dokploy/components/dashboard/application/patches/show-patches.tsx new file mode 100644 index 000000000..e42269886 --- /dev/null +++ b/apps/dokploy/components/dashboard/application/patches/show-patches.tsx @@ -0,0 +1,205 @@ +import { AlertCircle, ChevronRight, File, Folder, Loader2, Power, Trash2 } from "lucide-react"; +import { useState } from "react"; +import { toast } from "sonner"; +import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Switch } from "@/components/ui/switch"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { api } from "@/utils/api"; +import type { RouterOutputs } from "@/utils/api"; +import { PatchEditor } from "./patch-editor"; + +interface Props { + applicationId?: string; + composeId?: string; +} + +type Patch = RouterOutputs["patch"]["byApplicationId"][number]; + +export const ShowPatches = ({ applicationId, composeId }: Props) => { + const [selectedFile, setSelectedFile] = useState(null); + const [repoPath, setRepoPath] = useState(null); + const [isLoadingRepo, setIsLoadingRepo] = useState(false); + + const utils = api.useUtils(); + + // Fetch patches + // Fetch patches + const { data: appPatches, isLoading: isAppPatchesLoading } = + api.patch.byApplicationId.useQuery( + { applicationId: applicationId! }, + { enabled: !!applicationId }, + ); + + const { data: composePatches, isLoading: isComposePatchesLoading } = + api.patch.byComposeId.useQuery( + { composeId: composeId! }, + { enabled: !!composeId }, + ); + + const patches = applicationId ? appPatches : composePatches; + const isPatchesLoading = applicationId + ? isAppPatchesLoading + : isComposePatchesLoading; + + // Mutations + const deletePatch = api.patch.delete.useMutation({ + onSuccess: () => { + toast.success("Patch deleted"); + if (applicationId) { + utils.patch.byApplicationId.invalidate({ applicationId }); + } else if (composeId) { + utils.patch.byComposeId.invalidate({ composeId }); + } + }, + onError: () => { + toast.error("Failed to delete patch"); + }, + }); + + const togglePatch = api.patch.toggleEnabled.useMutation({ + onSuccess: () => { + toast.success("Patch updated"); + if (applicationId) { + utils.patch.byApplicationId.invalidate({ applicationId }); + } else if (composeId) { + utils.patch.byComposeId.invalidate({ composeId }); + } + }, + onError: () => { + toast.error("Failed to update patch"); + }, + }); + + const ensureRepo = api.patch.ensureRepo.useMutation(); + + const handleOpenEditor = async () => { + setIsLoadingRepo(true); + const toastId = toast.loading("Syncing repository..."); + ensureRepo.mutate( + { applicationId, composeId }, + { + onSuccess: (path) => { + setRepoPath(path); + setIsLoadingRepo(false); + toast.dismiss(toastId); + }, + onError: () => { + setIsLoadingRepo(false); + toast.dismiss(toastId); + toast.error("Failed to load repository"); + }, + }, + ); + }; + + const handleDeletePatch = (patchId: string) => { + deletePatch.mutate({ patchId }); + }; + + const handleTogglePatch = (patchId: string, enabled: boolean) => { + togglePatch.mutate({ patchId, enabled }); + }; + + const handleCloseEditor = () => { + setSelectedFile(null); + setRepoPath(null); + if (applicationId) { + utils.patch.byApplicationId.invalidate({ applicationId }); + } else if (composeId) { + utils.patch.byComposeId.invalidate({ composeId }); + } + }; + + if (repoPath) { + return ( + + ); + } + + return ( + + +
+ Patches + + Apply code patches to your repository during build. Patches are applied after + cloning the repository and before building. + +
+ +
+ + {isPatchesLoading ? ( +
+ +
+ ) : !patches || patches.length === 0 ? ( + + + No patches + + No patches have been created for this application yet. Click "Create Patch" + to add modifications to your code during build. + + + ) : ( + + + + File Path + Enabled + Actions + + + + {patches.map((patch: Patch) => ( + + +
+ + {patch.filePath} +
+
+ + + handleTogglePatch(patch.patchId, checked) + } + /> + + + + +
+ ))} +
+
+ )} +
+
+ ); +}; diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx index c80648142..5bf3b8fc6 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx @@ -42,6 +42,9 @@ export const ShowStorageActions = ({ serverId }: Props) => { isLoading: cleanStoppedContainersIsLoading, } = api.settings.cleanStoppedContainers.useMutation(); + const { mutateAsync: cleanPatchRepos, isLoading: cleanPatchReposIsLoading } = + api.patch.cleanPatchRepos.useMutation(); + return ( { cleanDockerBuilderIsLoading || cleanUnusedImagesIsLoading || cleanUnusedVolumesIsLoading || - cleanStoppedContainersIsLoading + cleanStoppedContainersIsLoading || + cleanPatchReposIsLoading } >
+ +
+ +
+
diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/compose/[composeId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/compose/[composeId].tsx index 1d6902c59..5423bb86c 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/compose/[composeId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/compose/[composeId].tsx @@ -19,6 +19,7 @@ import { ShowDomains } from "@/components/dashboard/application/domains/show-dom import { ShowEnvironment } from "@/components/dashboard/application/environment/show-enviroment"; import { ShowSchedules } from "@/components/dashboard/application/schedules/show-schedules"; import { ShowVolumeBackups } from "@/components/dashboard/application/volume-backups/show-volume-backups"; +import { ShowPatches } from "@/components/dashboard/application/patches/show-patches"; import { AddCommandCompose } from "@/components/dashboard/compose/advanced/add-command"; import { IsolatedDeploymentTab } from "@/components/dashboard/compose/advanced/add-isolation"; import { DeleteService } from "@/components/dashboard/compose/delete-service"; @@ -237,6 +238,9 @@ const Service = ( Volume Backups Logs + {data?.sourceType !== "raw" && ( + Patches + )} {((data?.serverId && isCloud) || !data?.server) && ( Monitoring )} @@ -361,6 +365,12 @@ const Service = (
+ +
+ +
+
+
diff --git a/apps/dokploy/server/api/root.ts b/apps/dokploy/server/api/root.ts index c8b4295fe..f123fde85 100644 --- a/apps/dokploy/server/api/root.ts +++ b/apps/dokploy/server/api/root.ts @@ -22,6 +22,7 @@ import { mountRouter } from "./routers/mount"; import { mysqlRouter } from "./routers/mysql"; import { notificationRouter } from "./routers/notification"; import { organizationRouter } from "./routers/organization"; +import { patchRouter } from "./routers/patch"; import { licenseKeyRouter } from "./routers/proprietary/license-key"; import { ssoRouter } from "./routers/proprietary/sso"; import { portRouter } from "./routers/port"; @@ -90,6 +91,7 @@ export const appRouter = createTRPCRouter({ rollback: rollbackRouter, volumeBackups: volumeBackupsRouter, environment: environmentRouter, + patch: patchRouter, }); // export type definition of API diff --git a/apps/dokploy/server/api/routers/patch.ts b/apps/dokploy/server/api/routers/patch.ts new file mode 100644 index 000000000..b3f5455d8 --- /dev/null +++ b/apps/dokploy/server/api/routers/patch.ts @@ -0,0 +1,502 @@ +import { + checkServiceAccess, + cleanPatchRepos, + createPatch, + deletePatch, + ensurePatchRepo, + findApplicationById, + findComposeById, + findPatchById, + findPatchesByApplicationId, + findPatchesByComposeId, + findPatchByFilePath, + generatePatch, + readPatchRepoDirectory, + readPatchRepoFile, + updatePatch, +} from "@dokploy/server"; +import { TRPCError } from "@trpc/server"; +import { z } from "zod"; +import { + adminProcedure, + createTRPCRouter, + protectedProcedure, +} from "@/server/api/trpc"; +import { + apiCreatePatch, + apiDeletePatch, + apiFindPatch, + apiFindPatchesByApplicationId, + apiFindPatchesByComposeId, + apiTogglePatchEnabled, + apiUpdatePatch, +} from "@/server/db/schema"; + +// Helper to get git config from application +const getApplicationGitConfig = (app: Awaited>) => { + switch (app.sourceType) { + case "github": + return { + gitUrl: `https://github.com/${app.owner}/${app.repository}.git`, + gitBranch: app.branch || "main", + sshKeyId: null, + }; + case "gitlab": + return { + gitUrl: `https://gitlab.com/${app.gitlabOwner}/${app.gitlabRepository}.git`, + gitBranch: app.gitlabBranch || "main", + sshKeyId: null, + }; + case "gitea": + return { + gitUrl: app.gitea?.gitUrl + ? `${app.gitea.gitUrl}/${app.giteaOwner}/${app.giteaRepository}.git` + : "", + gitBranch: app.giteaBranch || "main", + sshKeyId: null, + }; + case "bitbucket": + return { + gitUrl: `https://bitbucket.org/${app.bitbucketOwner}/${app.bitbucketRepository}.git`, + gitBranch: app.bitbucketBranch || "main", + sshKeyId: null, + }; + case "git": + return { + gitUrl: app.customGitUrl || "", + gitBranch: app.customGitBranch || "main", + sshKeyId: app.customGitSSHKeyId, + }; + default: + return null; + } +}; + +// Helper to get git config from compose +const getComposeGitConfig = (compose: Awaited>) => { + switch (compose.sourceType) { + case "github": + return { + gitUrl: `https://github.com/${compose.owner}/${compose.repository}.git`, + gitBranch: compose.branch || "main", + sshKeyId: null, + }; + case "gitlab": + return { + gitUrl: `https://gitlab.com/${compose.gitlabOwner}/${compose.gitlabRepository}.git`, + gitBranch: compose.gitlabBranch || "main", + sshKeyId: null, + }; + case "gitea": + return { + gitUrl: compose.gitea?.gitUrl + ? `${compose.gitea.gitUrl}/${compose.giteaOwner}/${compose.giteaRepository}.git` + : "", + gitBranch: compose.giteaBranch || "main", + sshKeyId: null, + }; + case "bitbucket": + return { + gitUrl: `https://bitbucket.org/${compose.bitbucketOwner}/${compose.bitbucketRepository}.git`, + gitBranch: compose.bitbucketBranch || "main", + sshKeyId: null, + }; + case "git": + return { + gitUrl: compose.customGitUrl || "", + gitBranch: compose.customGitBranch || "main", + sshKeyId: compose.customGitSSHKeyId, + }; + default: + return null; + } +}; + +export const patchRouter = createTRPCRouter({ + // CRUD Operations + create: protectedProcedure + .input(apiCreatePatch) + .mutation(async ({ input, ctx }) => { + // Verify access + if (input.applicationId) { + const app = await findApplicationById(input.applicationId); + if ( + app.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this application", + }); + } + if (ctx.user.role === "member") { + await checkServiceAccess( + ctx.user.id, + input.applicationId, + ctx.session.activeOrganizationId, + "access", + ); + } + } else if (input.composeId) { + const compose = await findComposeById(input.composeId); + if ( + compose.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this compose", + }); + } + } + + return await createPatch(input); + }), + + one: protectedProcedure + .input(apiFindPatch) + .query(async ({ input }) => { + return await findPatchById(input.patchId); + }), + + byApplicationId: protectedProcedure + .input(apiFindPatchesByApplicationId) + .query(async ({ input, ctx }) => { + const app = await findApplicationById(input.applicationId); + if ( + app.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this application", + }); + } + + return await findPatchesByApplicationId(input.applicationId); + }), + + byComposeId: protectedProcedure + .input(apiFindPatchesByComposeId) + .query(async ({ input, ctx }) => { + const compose = await findComposeById(input.composeId); + if ( + compose.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this compose", + }); + } + + return await findPatchesByComposeId(input.composeId); + }), + + update: protectedProcedure + .input(apiUpdatePatch) + .mutation(async ({ input }) => { + const { patchId, ...data } = input; + return await updatePatch(patchId, data); + }), + + delete: protectedProcedure + .input(apiDeletePatch) + .mutation(async ({ input }) => { + return await deletePatch(input.patchId); + }), + + toggleEnabled: protectedProcedure + .input(apiTogglePatchEnabled) + .mutation(async ({ input }) => { + return await updatePatch(input.patchId, { enabled: input.enabled }); + }), + + // Repository Operations + ensureRepo: protectedProcedure + .input( + z.object({ + applicationId: z.string().optional(), + composeId: z.string().optional(), + }), + ) + .mutation(async ({ input, ctx }) => { + if (input.applicationId) { + const app = await findApplicationById(input.applicationId); + if ( + app.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this application", + }); + } + + const gitConfig = getApplicationGitConfig(app); + if (!gitConfig || !gitConfig.gitUrl) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Application does not have a git source configured", + }); + } + + return await ensurePatchRepo({ + appName: app.appName, + type: "application", + gitUrl: gitConfig.gitUrl, + gitBranch: gitConfig.gitBranch, + sshKeyId: gitConfig.sshKeyId, + serverId: app.serverId, + }); + } + + if (input.composeId) { + const compose = await findComposeById(input.composeId); + if ( + compose.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this compose", + }); + } + + const gitConfig = getComposeGitConfig(compose); + if (!gitConfig || !gitConfig.gitUrl) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Compose does not have a git source configured", + }); + } + + return await ensurePatchRepo({ + appName: compose.appName, + type: "compose", + gitUrl: gitConfig.gitUrl, + gitBranch: gitConfig.gitBranch, + sshKeyId: gitConfig.sshKeyId, + serverId: compose.serverId, + }); + } + + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Either applicationId or composeId must be provided", + }); + }), + + readRepoDirectories: protectedProcedure + .input( + z.object({ + applicationId: z.string().optional(), + composeId: z.string().optional(), + repoPath: z.string(), + }), + ) + .query(async ({ input, ctx }) => { + if (input.applicationId) { + const app = await findApplicationById(input.applicationId); + if ( + app.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this application", + }); + } + return await readPatchRepoDirectory(input.repoPath, app.serverId); + } + + if (input.composeId) { + const compose = await findComposeById(input.composeId); + if ( + compose.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this compose", + }); + } + return await readPatchRepoDirectory(input.repoPath, compose.serverId); + } + + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Either applicationId or composeId must be provided", + }); + }), + + readRepoFile: protectedProcedure + .input( + z.object({ + applicationId: z.string().optional(), + composeId: z.string().optional(), + repoPath: z.string(), + filePath: z.string(), + }), + ) + .query(async ({ input, ctx }) => { + let serverId: string | null = null; + let patchContent: string | undefined; + + if (input.applicationId) { + const app = await findApplicationById(input.applicationId); + if ( + app.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this application", + }); + } + serverId = app.serverId; + + // Check if patch exists for this file + const existingPatch = await findPatchByFilePath( + input.filePath, + input.applicationId, + undefined, + ); + if (existingPatch?.enabled) { + patchContent = existingPatch.content; + } + } else if (input.composeId) { + const compose = await findComposeById(input.composeId); + if ( + compose.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this compose", + }); + } + serverId = compose.serverId; + + // Check if patch exists for this file + const existingPatch = await findPatchByFilePath( + input.filePath, + undefined, + input.composeId, + ); + if (existingPatch?.enabled) { + patchContent = existingPatch.content; + } + } else { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Either applicationId or composeId must be provided", + }); + } + + return await readPatchRepoFile( + input.repoPath, + input.filePath, + patchContent, + serverId, + ); + }), + + saveFileAsPatch: protectedProcedure + .input( + z.object({ + applicationId: z.string().optional(), + composeId: z.string().optional(), + repoPath: z.string(), + filePath: z.string(), + content: z.string(), + }), + ) + .mutation(async ({ input, ctx }) => { + let serverId: string | null = null; + + if (input.applicationId) { + const app = await findApplicationById(input.applicationId); + if ( + app.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this application", + }); + } + serverId = app.serverId; + } else if (input.composeId) { + const compose = await findComposeById(input.composeId); + if ( + compose.environment.project.organizationId !== + ctx.session.activeOrganizationId + ) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this compose", + }); + } + serverId = compose.serverId; + } else { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Either applicationId or composeId must be provided", + }); + } + + // Generate patch diff + const patchContent = await generatePatch({ + codePath: input.repoPath, + filePath: input.filePath, + newContent: input.content, + serverId, + }); + + if (!patchContent.trim()) { + // No changes - remove existing patch if any + const existingPatch = await findPatchByFilePath( + input.filePath, + input.applicationId, + input.composeId, + ); + if (existingPatch) { + await deletePatch(existingPatch.patchId); + } + return { deleted: true, patchId: null }; + } + + // Check if patch exists + const existingPatch = await findPatchByFilePath( + input.filePath, + input.applicationId, + input.composeId, + ); + + if (existingPatch) { + // Update existing patch + await updatePatch(existingPatch.patchId, { content: patchContent }); + return { deleted: false, patchId: existingPatch.patchId }; + } + + // Create new patch + const newPatch = await createPatch({ + filePath: input.filePath, + content: patchContent, + enabled: true, + applicationId: input.applicationId, + composeId: input.composeId, + }); + + return { deleted: false, patchId: newPatch.patchId }; + }), + + // Cleanup + cleanPatchRepos: adminProcedure + .input(z.object({ serverId: z.string().optional() })) + .mutation(async ({ input }) => { + await cleanPatchRepos(input.serverId); + return true; + }), +}); diff --git a/openapi.json b/openapi.json index 76366bdb2..0a5521d11 100644 --- a/openapi.json +++ b/openapi.json @@ -1,20004 +1,22829 @@ { - "openapi": "3.0.3", - "info": { - "title": "Dokploy API", - "description": "Complete API documentation for Dokploy - Deploy applications, manage databases, and orchestrate your infrastructure. This API allows you to programmatically manage all aspects of your Dokploy instance.", - "version": "1.0.0", - "contact": { - "name": "Dokploy Team", - "url": "https://dokploy.com" - }, - "license": { - "name": "Apache 2.0", - "url": "https://github.com/dokploy/dokploy/blob/canary/LICENSE" - } - }, - "servers": [ - { - "url": "https://your-dokploy-instance.com/api" - } - ], - "paths": { - "/admin.setupMonitoring": { - "post": { - "operationId": "admin-setupMonitoring", - "tags": ["admin"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "metricsConfig": { - "type": "object", - "properties": { - "server": { - "type": "object", - "properties": { - "refreshRate": { - "type": "number", - "minimum": 2 - }, - "port": { - "type": "number", - "minimum": 1 - }, - "token": { - "type": "string" - }, - "urlCallback": { - "type": "string", - "format": "uri" - }, - "retentionDays": { - "type": "number", - "minimum": 1 - }, - "cronJob": { - "type": "string", - "minLength": 1 - }, - "thresholds": { - "type": "object", - "properties": { - "cpu": { - "type": "number", - "minimum": 0 - }, - "memory": { - "type": "number", - "minimum": 0 - } - }, - "required": ["cpu", "memory"], - "additionalProperties": false - } - }, - "required": [ - "refreshRate", - "port", - "token", - "urlCallback", - "retentionDays", - "cronJob", - "thresholds" - ], - "additionalProperties": false - }, - "containers": { - "type": "object", - "properties": { - "refreshRate": { - "type": "number", - "minimum": 2 - }, - "services": { - "type": "object", - "properties": { - "include": { - "type": "array", - "items": { - "type": "string" - } - }, - "exclude": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - } - }, - "required": ["refreshRate", "services"], - "additionalProperties": false - } - }, - "required": ["server", "containers"], - "additionalProperties": false - } - }, - "required": ["metricsConfig"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/docker.getContainers": { - "get": { - "operationId": "docker-getContainers", - "tags": ["docker"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/docker.restartContainer": { - "post": { - "operationId": "docker-restartContainer", - "tags": ["docker"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "containerId": { - "type": "string", - "minLength": 1, - "pattern": "^[a-zA-Z0-9.\\-_]+$" - } - }, - "required": ["containerId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/docker.getConfig": { - "get": { - "operationId": "docker-getConfig", - "tags": ["docker"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "containerId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1, - "pattern": "^[a-zA-Z0-9.\\-_]+$" - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/docker.getContainersByAppNameMatch": { - "get": { - "operationId": "docker-getContainersByAppNameMatch", - "tags": ["docker"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "appType", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "enum": ["stack"] - }, - { - "type": "string", - "enum": ["docker-compose"] - } - ] - } - }, - { - "name": "appName", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1, - "pattern": "^[a-zA-Z0-9.\\-_]+$" - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/docker.getContainersByAppLabel": { - "get": { - "operationId": "docker-getContainersByAppLabel", - "tags": ["docker"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "appName", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1, - "pattern": "^[a-zA-Z0-9.\\-_]+$" - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "type", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": ["standalone", "swarm"] - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/docker.getStackContainersByAppName": { - "get": { - "operationId": "docker-getStackContainersByAppName", - "tags": ["docker"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "appName", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1, - "pattern": "^[a-zA-Z0-9.\\-_]+$" - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/docker.getServiceContainersByAppName": { - "get": { - "operationId": "docker-getServiceContainersByAppName", - "tags": ["docker"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "appName", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1, - "pattern": "^[a-zA-Z0-9.\\-_]+$" - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/project.create": { - "post": { - "operationId": "project-create", - "tags": ["project"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string" - } - }, - "required": ["name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/project.one": { - "get": { - "operationId": "project-one", - "tags": ["project"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "projectId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/project.all": { - "get": { - "operationId": "project-all", - "tags": ["project"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/project.remove": { - "post": { - "operationId": "project-remove", - "tags": ["project"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["projectId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/project.update": { - "post": { - "operationId": "project-update", - "tags": ["project"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "createdAt": { - "type": "string" - }, - "organizationId": { - "type": "string" - }, - "env": { - "type": "string" - } - }, - "required": ["projectId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/project.duplicate": { - "post": { - "operationId": "project-duplicate", - "tags": ["project"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "sourceEnvironmentId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "includeServices": { - "type": "boolean", - "default": true - }, - "selectedServices": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "application", - "postgres", - "mariadb", - "mongo", - "mysql", - "redis", - "compose" - ] - } - }, - "required": ["id", "type"], - "additionalProperties": false - } - }, - "duplicateInSameProject": { - "type": "boolean", - "default": false - } - }, - "required": ["sourceEnvironmentId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.create": { - "post": { - "operationId": "application-create", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "environmentId": { - "type": "string" - }, - "serverId": { - "type": "string", - "nullable": true - } - }, - "required": ["name", "environmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.one": { - "get": { - "operationId": "application-one", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "applicationId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.reload": { - "post": { - "operationId": "application-reload", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appName": { - "type": "string" - }, - "applicationId": { - "type": "string" - } - }, - "required": ["appName", "applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.delete": { - "post": { - "operationId": "application-delete", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.stop": { - "post": { - "operationId": "application-stop", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.start": { - "post": { - "operationId": "application-start", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.redeploy": { - "post": { - "operationId": "application-redeploy", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string", - "minLength": 1 - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveEnvironment": { - "post": { - "operationId": "application-saveEnvironment", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "env": { - "type": "string", - "nullable": true - }, - "buildArgs": { - "type": "string", - "nullable": true - }, - "buildSecrets": { - "type": "string", - "nullable": true - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveBuildType": { - "post": { - "operationId": "application-saveBuildType", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "buildType": { - "type": "string", - "enum": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static", - "railpack" - ] - }, - "dockerfile": { - "type": "string", - "nullable": true - }, - "dockerContextPath": { - "type": "string", - "nullable": true - }, - "dockerBuildStage": { - "type": "string", - "nullable": true - }, - "herokuVersion": { - "type": "string", - "nullable": true - }, - "railpackVersion": { - "type": "string", - "nullable": true - }, - "publishDirectory": { - "type": "string", - "nullable": true - }, - "isStaticSpa": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "applicationId", - "buildType", - "dockerContextPath", - "dockerBuildStage" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveGithubProvider": { - "post": { - "operationId": "application-saveGithubProvider", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "repository": { - "type": "string", - "nullable": true - }, - "branch": { - "type": "string", - "nullable": true - }, - "owner": { - "type": "string", - "nullable": true - }, - "buildPath": { - "type": "string", - "nullable": true - }, - "githubId": { - "type": "string", - "nullable": true - }, - "watchPaths": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "enableSubmodules": { - "type": "boolean" - }, - "triggerType": { - "type": "string", - "enum": ["push", "tag"], - "default": "push" - } - }, - "required": [ - "applicationId", - "owner", - "githubId", - "enableSubmodules" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveGitlabProvider": { - "post": { - "operationId": "application-saveGitlabProvider", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "gitlabBranch": { - "type": "string", - "nullable": true - }, - "gitlabBuildPath": { - "type": "string", - "nullable": true - }, - "gitlabOwner": { - "type": "string", - "nullable": true - }, - "gitlabRepository": { - "type": "string", - "nullable": true - }, - "gitlabId": { - "type": "string", - "nullable": true - }, - "gitlabProjectId": { - "type": "number", - "nullable": true - }, - "gitlabPathNamespace": { - "type": "string", - "nullable": true - }, - "watchPaths": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "enableSubmodules": { - "type": "boolean" - } - }, - "required": [ - "applicationId", - "gitlabBranch", - "gitlabBuildPath", - "gitlabOwner", - "gitlabRepository", - "gitlabId", - "gitlabProjectId", - "gitlabPathNamespace", - "enableSubmodules" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveBitbucketProvider": { - "post": { - "operationId": "application-saveBitbucketProvider", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "bitbucketBranch": { - "type": "string", - "nullable": true - }, - "bitbucketBuildPath": { - "type": "string", - "nullable": true - }, - "bitbucketOwner": { - "type": "string", - "nullable": true - }, - "bitbucketRepository": { - "type": "string", - "nullable": true - }, - "bitbucketId": { - "type": "string", - "nullable": true - }, - "applicationId": { - "type": "string" - }, - "watchPaths": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "enableSubmodules": { - "type": "boolean" - } - }, - "required": [ - "bitbucketBranch", - "bitbucketBuildPath", - "bitbucketOwner", - "bitbucketRepository", - "bitbucketId", - "applicationId", - "enableSubmodules" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveGiteaProvider": { - "post": { - "operationId": "application-saveGiteaProvider", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "giteaBranch": { - "type": "string", - "nullable": true - }, - "giteaBuildPath": { - "type": "string", - "nullable": true - }, - "giteaOwner": { - "type": "string", - "nullable": true - }, - "giteaRepository": { - "type": "string", - "nullable": true - }, - "giteaId": { - "type": "string", - "nullable": true - }, - "watchPaths": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "enableSubmodules": { - "type": "boolean" - } - }, - "required": [ - "applicationId", - "giteaBranch", - "giteaBuildPath", - "giteaOwner", - "giteaRepository", - "giteaId", - "enableSubmodules" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveDockerProvider": { - "post": { - "operationId": "application-saveDockerProvider", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "dockerImage": { - "type": "string", - "nullable": true - }, - "applicationId": { - "type": "string" - }, - "username": { - "type": "string", - "nullable": true - }, - "password": { - "type": "string", - "nullable": true - }, - "registryUrl": { - "type": "string", - "nullable": true - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.saveGitProvider": { - "post": { - "operationId": "application-saveGitProvider", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "customGitBranch": { - "type": "string", - "nullable": true - }, - "applicationId": { - "type": "string" - }, - "customGitBuildPath": { - "type": "string", - "nullable": true - }, - "customGitUrl": { - "type": "string", - "nullable": true - }, - "watchPaths": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "enableSubmodules": { - "type": "boolean" - }, - "customGitSSHKeyId": { - "type": "string", - "nullable": true - } - }, - "required": ["applicationId", "enableSubmodules"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.disconnectGitProvider": { - "post": { - "operationId": "application-disconnectGitProvider", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.markRunning": { - "post": { - "operationId": "application-markRunning", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.update": { - "post": { - "operationId": "application-update", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string", - "nullable": true - }, - "previewEnv": { - "type": "string", - "nullable": true - }, - "watchPaths": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "previewBuildArgs": { - "type": "string", - "nullable": true - }, - "previewBuildSecrets": { - "type": "string", - "nullable": true - }, - "previewLabels": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "previewWildcard": { - "type": "string", - "nullable": true - }, - "previewPort": { - "type": "number", - "nullable": true - }, - "previewHttps": { - "type": "boolean" - }, - "previewPath": { - "type": "string", - "nullable": true - }, - "previewCertificateType": { - "type": "string", - "enum": ["letsencrypt", "none", "custom"] - }, - "previewCustomCertResolver": { - "type": "string", - "nullable": true - }, - "previewLimit": { - "type": "number", - "nullable": true - }, - "isPreviewDeploymentsActive": { - "type": "boolean", - "nullable": true - }, - "previewRequireCollaboratorPermissions": { - "type": "boolean", - "nullable": true - }, - "rollbackActive": { - "type": "boolean", - "nullable": true - }, - "buildArgs": { - "type": "string", - "nullable": true - }, - "buildSecrets": { - "type": "string", - "nullable": true - }, - "memoryReservation": { - "type": "string", - "nullable": true - }, - "memoryLimit": { - "type": "string", - "nullable": true - }, - "cpuReservation": { - "type": "string", - "nullable": true - }, - "cpuLimit": { - "type": "string", - "nullable": true - }, - "title": { - "type": "string", - "nullable": true - }, - "enabled": { - "type": "boolean", - "nullable": true - }, - "subtitle": { - "type": "string", - "nullable": true - }, - "command": { - "type": "string", - "nullable": true - }, - "refreshToken": { - "type": "string", - "nullable": true - }, - "sourceType": { - "type": "string", - "enum": [ - "github", - "docker", - "git", - "gitlab", - "bitbucket", - "gitea", - "drop" - ] - }, - "cleanCache": { - "type": "boolean", - "nullable": true - }, - "repository": { - "type": "string", - "nullable": true - }, - "owner": { - "type": "string", - "nullable": true - }, - "branch": { - "type": "string", - "nullable": true - }, - "buildPath": { - "type": "string", - "nullable": true - }, - "triggerType": { - "type": "string", - "enum": ["push", "tag"], - "nullable": true - }, - "autoDeploy": { - "type": "boolean", - "nullable": true - }, - "gitlabProjectId": { - "type": "number", - "nullable": true - }, - "gitlabRepository": { - "type": "string", - "nullable": true - }, - "gitlabOwner": { - "type": "string", - "nullable": true - }, - "gitlabBranch": { - "type": "string", - "nullable": true - }, - "gitlabBuildPath": { - "type": "string", - "nullable": true - }, - "gitlabPathNamespace": { - "type": "string", - "nullable": true - }, - "giteaRepository": { - "type": "string", - "nullable": true - }, - "giteaOwner": { - "type": "string", - "nullable": true - }, - "giteaBranch": { - "type": "string", - "nullable": true - }, - "giteaBuildPath": { - "type": "string", - "nullable": true - }, - "bitbucketRepository": { - "type": "string", - "nullable": true - }, - "bitbucketOwner": { - "type": "string", - "nullable": true - }, - "bitbucketBranch": { - "type": "string", - "nullable": true - }, - "bitbucketBuildPath": { - "type": "string", - "nullable": true - }, - "username": { - "type": "string", - "nullable": true - }, - "password": { - "type": "string", - "nullable": true - }, - "dockerImage": { - "type": "string", - "nullable": true - }, - "registryUrl": { - "type": "string", - "nullable": true - }, - "customGitUrl": { - "type": "string", - "nullable": true - }, - "customGitBranch": { - "type": "string", - "nullable": true - }, - "customGitBuildPath": { - "type": "string", - "nullable": true - }, - "customGitSSHKeyId": { - "type": "string", - "nullable": true - }, - "enableSubmodules": { - "type": "boolean" - }, - "dockerfile": { - "type": "string", - "nullable": true - }, - "dockerContextPath": { - "type": "string", - "nullable": true - }, - "dockerBuildStage": { - "type": "string", - "nullable": true - }, - "dropBuildPath": { - "type": "string", - "nullable": true - }, - "healthCheckSwarm": { - "type": "object", - "properties": { - "Test": { - "type": "array", - "items": { - "type": "string" - } - }, - "Interval": { - "type": "number" - }, - "Timeout": { - "type": "number" - }, - "StartPeriod": { - "type": "number" - }, - "Retries": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "restartPolicySwarm": { - "type": "object", - "properties": { - "Condition": { - "type": "string" - }, - "Delay": { - "type": "number" - }, - "MaxAttempts": { - "type": "number" - }, - "Window": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "placementSwarm": { - "type": "object", - "properties": { - "Constraints": { - "type": "array", - "items": { - "type": "string" - } - }, - "Preferences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Spread": { - "type": "object", - "properties": { - "SpreadDescriptor": { - "type": "string" - } - }, - "required": ["SpreadDescriptor"], - "additionalProperties": false - } - }, - "required": ["Spread"], - "additionalProperties": false - } - }, - "MaxReplicas": { - "type": "number" - }, - "Platforms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Architecture": { - "type": "string" - }, - "OS": { - "type": "string" - } - }, - "required": ["Architecture", "OS"], - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "updateConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "rollbackConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "modeSwarm": { - "type": "object", - "properties": { - "Replicated": { - "type": "object", - "properties": { - "Replicas": { - "type": "number" - } - }, - "additionalProperties": false - }, - "Global": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "ReplicatedJob": { - "type": "object", - "properties": { - "MaxConcurrent": { - "type": "number" - }, - "TotalCompletions": { - "type": "number" - } - }, - "additionalProperties": false - }, - "GlobalJob": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false, - "nullable": true - }, - "labelsSwarm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "nullable": true - }, - "networkSwarm": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Target": { - "type": "string" - }, - "Aliases": { - "type": "array", - "items": { - "type": "string" - } - }, - "DriverOpts": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "nullable": true - }, - "stopGracePeriodSwarm": { - "type": "integer", - "nullable": true - }, - "endpointSpecSwarm": { - "type": "object", - "properties": { - "Mode": { - "type": "string" - }, - "Ports": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Protocol": { - "type": "string" - }, - "TargetPort": { - "type": "number" - }, - "PublishedPort": { - "type": "number" - }, - "PublishMode": { - "type": "string" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "replicas": { - "type": "number" - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - }, - "buildType": { - "type": "string", - "enum": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static", - "railpack" - ] - }, - "railpackVersion": { - "type": "string", - "nullable": true - }, - "herokuVersion": { - "type": "string", - "nullable": true - }, - "publishDirectory": { - "type": "string", - "nullable": true - }, - "isStaticSpa": { - "type": "boolean", - "nullable": true - }, - "createdAt": { - "type": "string" - }, - "registryId": { - "type": "string", - "nullable": true - }, - "environmentId": { - "type": "string" - }, - "githubId": { - "type": "string", - "nullable": true - }, - "gitlabId": { - "type": "string", - "nullable": true - }, - "giteaId": { - "type": "string", - "nullable": true - }, - "bitbucketId": { - "type": "string", - "nullable": true - }, - "buildServerId": { - "type": "string", - "nullable": true - }, - "buildRegistryId": { - "type": "string", - "nullable": true - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.refreshToken": { - "post": { - "operationId": "application-refreshToken", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.deploy": { - "post": { - "operationId": "application-deploy", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string", - "minLength": 1 - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.cleanQueues": { - "post": { - "operationId": "application-cleanQueues", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.killBuild": { - "post": { - "operationId": "application-killBuild", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.readTraefikConfig": { - "get": { - "operationId": "application-readTraefikConfig", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "applicationId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.updateTraefikConfig": { - "post": { - "operationId": "application-updateTraefikConfig", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "traefikConfig": { - "type": "string" - } - }, - "required": ["applicationId", "traefikConfig"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.readAppMonitoring": { - "get": { - "operationId": "application-readAppMonitoring", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "appName", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.move": { - "post": { - "operationId": "application-move", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "targetEnvironmentId": { - "type": "string" - } - }, - "required": ["applicationId", "targetEnvironmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/application.cancelDeployment": { - "post": { - "operationId": "application-cancelDeployment", - "tags": ["application"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - } - }, - "required": ["applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.create": { - "post": { - "operationId": "mysql-create", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "dockerImage": { - "type": "string", - "default": "mysql:8" - }, - "environmentId": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "databaseName": { - "type": "string", - "minLength": 1 - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "databaseRootPassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "serverId": { - "type": "string", - "nullable": true - } - }, - "required": [ - "name", - "appName", - "environmentId", - "databaseName", - "databaseUser", - "databasePassword", - "databaseRootPassword" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.one": { - "get": { - "operationId": "mysql-one", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "mysqlId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.start": { - "post": { - "operationId": "mysql-start", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - } - }, - "required": ["mysqlId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.stop": { - "post": { - "operationId": "mysql-stop", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - } - }, - "required": ["mysqlId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.saveExternalPort": { - "post": { - "operationId": "mysql-saveExternalPort", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - }, - "externalPort": { - "type": "number", - "nullable": true - } - }, - "required": ["mysqlId", "externalPort"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.deploy": { - "post": { - "operationId": "mysql-deploy", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - } - }, - "required": ["mysqlId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.changeStatus": { - "post": { - "operationId": "mysql-changeStatus", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - } - }, - "required": ["mysqlId", "applicationStatus"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.reload": { - "post": { - "operationId": "mysql-reload", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - }, - "appName": { - "type": "string", - "minLength": 1 - } - }, - "required": ["mysqlId", "appName"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.remove": { - "post": { - "operationId": "mysql-remove", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - } - }, - "required": ["mysqlId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.saveEnvironment": { - "post": { - "operationId": "mysql-saveEnvironment", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - }, - "env": { - "type": "string", - "nullable": true - } - }, - "required": ["mysqlId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.update": { - "post": { - "operationId": "mysql-update", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "databaseName": { - "type": "string", - "minLength": 1 - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "databaseRootPassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "dockerImage": { - "type": "string", - "default": "mysql:8" - }, - "command": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string", - "nullable": true - }, - "memoryReservation": { - "type": "string", - "nullable": true - }, - "memoryLimit": { - "type": "string", - "nullable": true - }, - "cpuReservation": { - "type": "string", - "nullable": true - }, - "cpuLimit": { - "type": "string", - "nullable": true - }, - "externalPort": { - "type": "number", - "nullable": true - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - }, - "healthCheckSwarm": { - "type": "object", - "properties": { - "Test": { - "type": "array", - "items": { - "type": "string" - } - }, - "Interval": { - "type": "number" - }, - "Timeout": { - "type": "number" - }, - "StartPeriod": { - "type": "number" - }, - "Retries": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "restartPolicySwarm": { - "type": "object", - "properties": { - "Condition": { - "type": "string" - }, - "Delay": { - "type": "number" - }, - "MaxAttempts": { - "type": "number" - }, - "Window": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "placementSwarm": { - "type": "object", - "properties": { - "Constraints": { - "type": "array", - "items": { - "type": "string" - } - }, - "Preferences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Spread": { - "type": "object", - "properties": { - "SpreadDescriptor": { - "type": "string" - } - }, - "required": ["SpreadDescriptor"], - "additionalProperties": false - } - }, - "required": ["Spread"], - "additionalProperties": false - } - }, - "MaxReplicas": { - "type": "number" - }, - "Platforms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Architecture": { - "type": "string" - }, - "OS": { - "type": "string" - } - }, - "required": ["Architecture", "OS"], - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "updateConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "rollbackConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "modeSwarm": { - "type": "object", - "properties": { - "Replicated": { - "type": "object", - "properties": { - "Replicas": { - "type": "number" - } - }, - "additionalProperties": false - }, - "Global": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "ReplicatedJob": { - "type": "object", - "properties": { - "MaxConcurrent": { - "type": "number" - }, - "TotalCompletions": { - "type": "number" - } - }, - "additionalProperties": false - }, - "GlobalJob": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false, - "nullable": true - }, - "labelsSwarm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "nullable": true - }, - "networkSwarm": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Target": { - "type": "string" - }, - "Aliases": { - "type": "array", - "items": { - "type": "string" - } - }, - "DriverOpts": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "nullable": true - }, - "stopGracePeriodSwarm": { - "type": "integer", - "nullable": true - }, - "endpointSpecSwarm": { - "type": "object", - "properties": { - "Mode": { - "type": "string" - }, - "Ports": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Protocol": { - "type": "string" - }, - "TargetPort": { - "type": "number" - }, - "PublishedPort": { - "type": "number" - }, - "PublishMode": { - "type": "string" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "replicas": { - "type": "number" - }, - "createdAt": { - "type": "string" - }, - "environmentId": { - "type": "string" - } - }, - "required": ["mysqlId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.move": { - "post": { - "operationId": "mysql-move", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - }, - "targetEnvironmentId": { - "type": "string" - } - }, - "required": ["mysqlId", "targetEnvironmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mysql.rebuild": { - "post": { - "operationId": "mysql-rebuild", - "tags": ["mysql"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mysqlId": { - "type": "string" - } - }, - "required": ["mysqlId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.create": { - "post": { - "operationId": "postgres-create", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string" - }, - "databaseName": { - "type": "string", - "minLength": 1 - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "dockerImage": { - "type": "string", - "default": "postgres:15" - }, - "environmentId": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string", - "nullable": true - } - }, - "required": [ - "name", - "appName", - "databaseName", - "databaseUser", - "databasePassword", - "environmentId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.one": { - "get": { - "operationId": "postgres-one", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "postgresId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.start": { - "post": { - "operationId": "postgres-start", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - } - }, - "required": ["postgresId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.stop": { - "post": { - "operationId": "postgres-stop", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - } - }, - "required": ["postgresId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.saveExternalPort": { - "post": { - "operationId": "postgres-saveExternalPort", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - }, - "externalPort": { - "type": "number", - "nullable": true - } - }, - "required": ["postgresId", "externalPort"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.deploy": { - "post": { - "operationId": "postgres-deploy", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - } - }, - "required": ["postgresId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.changeStatus": { - "post": { - "operationId": "postgres-changeStatus", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - } - }, - "required": ["postgresId", "applicationStatus"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.remove": { - "post": { - "operationId": "postgres-remove", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - } - }, - "required": ["postgresId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.saveEnvironment": { - "post": { - "operationId": "postgres-saveEnvironment", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - }, - "env": { - "type": "string", - "nullable": true - } - }, - "required": ["postgresId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.reload": { - "post": { - "operationId": "postgres-reload", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - }, - "appName": { - "type": "string" - } - }, - "required": ["postgresId", "appName"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.update": { - "post": { - "operationId": "postgres-update", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string" - }, - "databaseName": { - "type": "string", - "minLength": 1 - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "description": { - "type": "string", - "nullable": true - }, - "dockerImage": { - "type": "string", - "default": "postgres:15" - }, - "command": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string", - "nullable": true - }, - "memoryReservation": { - "type": "string", - "nullable": true - }, - "externalPort": { - "type": "number", - "nullable": true - }, - "memoryLimit": { - "type": "string", - "nullable": true - }, - "cpuReservation": { - "type": "string", - "nullable": true - }, - "cpuLimit": { - "type": "string", - "nullable": true - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - }, - "healthCheckSwarm": { - "type": "object", - "properties": { - "Test": { - "type": "array", - "items": { - "type": "string" - } - }, - "Interval": { - "type": "number" - }, - "Timeout": { - "type": "number" - }, - "StartPeriod": { - "type": "number" - }, - "Retries": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "restartPolicySwarm": { - "type": "object", - "properties": { - "Condition": { - "type": "string" - }, - "Delay": { - "type": "number" - }, - "MaxAttempts": { - "type": "number" - }, - "Window": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "placementSwarm": { - "type": "object", - "properties": { - "Constraints": { - "type": "array", - "items": { - "type": "string" - } - }, - "Preferences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Spread": { - "type": "object", - "properties": { - "SpreadDescriptor": { - "type": "string" - } - }, - "required": ["SpreadDescriptor"], - "additionalProperties": false - } - }, - "required": ["Spread"], - "additionalProperties": false - } - }, - "MaxReplicas": { - "type": "number" - }, - "Platforms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Architecture": { - "type": "string" - }, - "OS": { - "type": "string" - } - }, - "required": ["Architecture", "OS"], - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "updateConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "rollbackConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "modeSwarm": { - "type": "object", - "properties": { - "Replicated": { - "type": "object", - "properties": { - "Replicas": { - "type": "number" - } - }, - "additionalProperties": false - }, - "Global": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "ReplicatedJob": { - "type": "object", - "properties": { - "MaxConcurrent": { - "type": "number" - }, - "TotalCompletions": { - "type": "number" - } - }, - "additionalProperties": false - }, - "GlobalJob": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false, - "nullable": true - }, - "labelsSwarm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "nullable": true - }, - "networkSwarm": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Target": { - "type": "string" - }, - "Aliases": { - "type": "array", - "items": { - "type": "string" - } - }, - "DriverOpts": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "nullable": true - }, - "stopGracePeriodSwarm": { - "type": "integer", - "nullable": true - }, - "endpointSpecSwarm": { - "type": "object", - "properties": { - "Mode": { - "type": "string" - }, - "Ports": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Protocol": { - "type": "string" - }, - "TargetPort": { - "type": "number" - }, - "PublishedPort": { - "type": "number" - }, - "PublishMode": { - "type": "string" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "replicas": { - "type": "number" - }, - "createdAt": { - "type": "string" - }, - "environmentId": { - "type": "string" - } - }, - "required": ["postgresId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.move": { - "post": { - "operationId": "postgres-move", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - }, - "targetEnvironmentId": { - "type": "string" - } - }, - "required": ["postgresId", "targetEnvironmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/postgres.rebuild": { - "post": { - "operationId": "postgres-rebuild", - "tags": ["postgres"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "postgresId": { - "type": "string" - } - }, - "required": ["postgresId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.create": { - "post": { - "operationId": "redis-create", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string" - }, - "dockerImage": { - "type": "string", - "default": "redis:8" - }, - "environmentId": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string", - "nullable": true - } - }, - "required": [ - "name", - "appName", - "databasePassword", - "environmentId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.one": { - "get": { - "operationId": "redis-one", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "redisId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.start": { - "post": { - "operationId": "redis-start", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - } - }, - "required": ["redisId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.reload": { - "post": { - "operationId": "redis-reload", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - }, - "appName": { - "type": "string", - "minLength": 1 - } - }, - "required": ["redisId", "appName"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.stop": { - "post": { - "operationId": "redis-stop", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - } - }, - "required": ["redisId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.saveExternalPort": { - "post": { - "operationId": "redis-saveExternalPort", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - }, - "externalPort": { - "type": "number", - "nullable": true - } - }, - "required": ["redisId", "externalPort"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.deploy": { - "post": { - "operationId": "redis-deploy", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - } - }, - "required": ["redisId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.changeStatus": { - "post": { - "operationId": "redis-changeStatus", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - } - }, - "required": ["redisId", "applicationStatus"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.remove": { - "post": { - "operationId": "redis-remove", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - } - }, - "required": ["redisId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.saveEnvironment": { - "post": { - "operationId": "redis-saveEnvironment", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - }, - "env": { - "type": "string", - "nullable": true - } - }, - "required": ["redisId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.update": { - "post": { - "operationId": "redis-update", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "databasePassword": { - "type": "string" - }, - "dockerImage": { - "type": "string", - "default": "redis:8" - }, - "command": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string", - "nullable": true - }, - "memoryReservation": { - "type": "string", - "nullable": true - }, - "memoryLimit": { - "type": "string", - "nullable": true - }, - "cpuReservation": { - "type": "string", - "nullable": true - }, - "cpuLimit": { - "type": "string", - "nullable": true - }, - "externalPort": { - "type": "number", - "nullable": true - }, - "createdAt": { - "type": "string" - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - }, - "healthCheckSwarm": { - "type": "object", - "properties": { - "Test": { - "type": "array", - "items": { - "type": "string" - } - }, - "Interval": { - "type": "number" - }, - "Timeout": { - "type": "number" - }, - "StartPeriod": { - "type": "number" - }, - "Retries": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "restartPolicySwarm": { - "type": "object", - "properties": { - "Condition": { - "type": "string" - }, - "Delay": { - "type": "number" - }, - "MaxAttempts": { - "type": "number" - }, - "Window": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "placementSwarm": { - "type": "object", - "properties": { - "Constraints": { - "type": "array", - "items": { - "type": "string" - } - }, - "Preferences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Spread": { - "type": "object", - "properties": { - "SpreadDescriptor": { - "type": "string" - } - }, - "required": ["SpreadDescriptor"], - "additionalProperties": false - } - }, - "required": ["Spread"], - "additionalProperties": false - } - }, - "MaxReplicas": { - "type": "number" - }, - "Platforms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Architecture": { - "type": "string" - }, - "OS": { - "type": "string" - } - }, - "required": ["Architecture", "OS"], - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "updateConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "rollbackConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "modeSwarm": { - "type": "object", - "properties": { - "Replicated": { - "type": "object", - "properties": { - "Replicas": { - "type": "number" - } - }, - "additionalProperties": false - }, - "Global": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "ReplicatedJob": { - "type": "object", - "properties": { - "MaxConcurrent": { - "type": "number" - }, - "TotalCompletions": { - "type": "number" - } - }, - "additionalProperties": false - }, - "GlobalJob": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false, - "nullable": true - }, - "labelsSwarm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "nullable": true - }, - "networkSwarm": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Target": { - "type": "string" - }, - "Aliases": { - "type": "array", - "items": { - "type": "string" - } - }, - "DriverOpts": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "nullable": true - }, - "stopGracePeriodSwarm": { - "type": "integer", - "nullable": true - }, - "endpointSpecSwarm": { - "type": "object", - "properties": { - "Mode": { - "type": "string" - }, - "Ports": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Protocol": { - "type": "string" - }, - "TargetPort": { - "type": "number" - }, - "PublishedPort": { - "type": "number" - }, - "PublishMode": { - "type": "string" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "replicas": { - "type": "number" - }, - "environmentId": { - "type": "string" - } - }, - "required": ["redisId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.move": { - "post": { - "operationId": "redis-move", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - }, - "targetEnvironmentId": { - "type": "string" - } - }, - "required": ["redisId", "targetEnvironmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redis.rebuild": { - "post": { - "operationId": "redis-rebuild", - "tags": ["redis"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redisId": { - "type": "string" - } - }, - "required": ["redisId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.create": { - "post": { - "operationId": "mongo-create", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "dockerImage": { - "type": "string", - "default": "mongo:15" - }, - "environmentId": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "serverId": { - "type": "string", - "nullable": true - }, - "replicaSets": { - "type": "boolean", - "default": false, - "nullable": true - } - }, - "required": [ - "name", - "appName", - "environmentId", - "databaseUser", - "databasePassword" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.one": { - "get": { - "operationId": "mongo-one", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "mongoId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.start": { - "post": { - "operationId": "mongo-start", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - } - }, - "required": ["mongoId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.stop": { - "post": { - "operationId": "mongo-stop", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - } - }, - "required": ["mongoId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.saveExternalPort": { - "post": { - "operationId": "mongo-saveExternalPort", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - }, - "externalPort": { - "type": "number", - "nullable": true - } - }, - "required": ["mongoId", "externalPort"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.deploy": { - "post": { - "operationId": "mongo-deploy", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - } - }, - "required": ["mongoId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.changeStatus": { - "post": { - "operationId": "mongo-changeStatus", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - } - }, - "required": ["mongoId", "applicationStatus"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.reload": { - "post": { - "operationId": "mongo-reload", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - }, - "appName": { - "type": "string", - "minLength": 1 - } - }, - "required": ["mongoId", "appName"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.remove": { - "post": { - "operationId": "mongo-remove", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - } - }, - "required": ["mongoId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.saveEnvironment": { - "post": { - "operationId": "mongo-saveEnvironment", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - }, - "env": { - "type": "string", - "nullable": true - } - }, - "required": ["mongoId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.update": { - "post": { - "operationId": "mongo-update", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "dockerImage": { - "type": "string", - "default": "mongo:15" - }, - "command": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string", - "nullable": true - }, - "memoryReservation": { - "type": "string", - "nullable": true - }, - "memoryLimit": { - "type": "string", - "nullable": true - }, - "cpuReservation": { - "type": "string", - "nullable": true - }, - "cpuLimit": { - "type": "string", - "nullable": true - }, - "externalPort": { - "type": "number", - "nullable": true - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - }, - "healthCheckSwarm": { - "type": "object", - "properties": { - "Test": { - "type": "array", - "items": { - "type": "string" - } - }, - "Interval": { - "type": "number" - }, - "Timeout": { - "type": "number" - }, - "StartPeriod": { - "type": "number" - }, - "Retries": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "restartPolicySwarm": { - "type": "object", - "properties": { - "Condition": { - "type": "string" - }, - "Delay": { - "type": "number" - }, - "MaxAttempts": { - "type": "number" - }, - "Window": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "placementSwarm": { - "type": "object", - "properties": { - "Constraints": { - "type": "array", - "items": { - "type": "string" - } - }, - "Preferences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Spread": { - "type": "object", - "properties": { - "SpreadDescriptor": { - "type": "string" - } - }, - "required": ["SpreadDescriptor"], - "additionalProperties": false - } - }, - "required": ["Spread"], - "additionalProperties": false - } - }, - "MaxReplicas": { - "type": "number" - }, - "Platforms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Architecture": { - "type": "string" - }, - "OS": { - "type": "string" - } - }, - "required": ["Architecture", "OS"], - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "updateConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "rollbackConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "modeSwarm": { - "type": "object", - "properties": { - "Replicated": { - "type": "object", - "properties": { - "Replicas": { - "type": "number" - } - }, - "additionalProperties": false - }, - "Global": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "ReplicatedJob": { - "type": "object", - "properties": { - "MaxConcurrent": { - "type": "number" - }, - "TotalCompletions": { - "type": "number" - } - }, - "additionalProperties": false - }, - "GlobalJob": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false, - "nullable": true - }, - "labelsSwarm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "nullable": true - }, - "networkSwarm": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Target": { - "type": "string" - }, - "Aliases": { - "type": "array", - "items": { - "type": "string" - } - }, - "DriverOpts": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "nullable": true - }, - "stopGracePeriodSwarm": { - "type": "integer", - "nullable": true - }, - "endpointSpecSwarm": { - "type": "object", - "properties": { - "Mode": { - "type": "string" - }, - "Ports": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Protocol": { - "type": "string" - }, - "TargetPort": { - "type": "number" - }, - "PublishedPort": { - "type": "number" - }, - "PublishMode": { - "type": "string" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "replicas": { - "type": "number" - }, - "createdAt": { - "type": "string" - }, - "environmentId": { - "type": "string" - }, - "replicaSets": { - "type": "boolean", - "default": false, - "nullable": true - } - }, - "required": ["mongoId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.move": { - "post": { - "operationId": "mongo-move", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - }, - "targetEnvironmentId": { - "type": "string" - } - }, - "required": ["mongoId", "targetEnvironmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mongo.rebuild": { - "post": { - "operationId": "mongo-rebuild", - "tags": ["mongo"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mongoId": { - "type": "string" - } - }, - "required": ["mongoId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.create": { - "post": { - "operationId": "mariadb-create", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "dockerImage": { - "type": "string", - "default": "mariadb:6" - }, - "databaseRootPassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "environmentId": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "databaseName": { - "type": "string", - "minLength": 1 - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "serverId": { - "type": "string", - "nullable": true - } - }, - "required": [ - "name", - "appName", - "databaseRootPassword", - "environmentId", - "databaseName", - "databaseUser", - "databasePassword" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.one": { - "get": { - "operationId": "mariadb-one", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "mariadbId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.start": { - "post": { - "operationId": "mariadb-start", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - } - }, - "required": ["mariadbId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.stop": { - "post": { - "operationId": "mariadb-stop", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - } - }, - "required": ["mariadbId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.saveExternalPort": { - "post": { - "operationId": "mariadb-saveExternalPort", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - }, - "externalPort": { - "type": "number", - "nullable": true - } - }, - "required": ["mariadbId", "externalPort"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.deploy": { - "post": { - "operationId": "mariadb-deploy", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - } - }, - "required": ["mariadbId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.changeStatus": { - "post": { - "operationId": "mariadb-changeStatus", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - } - }, - "required": ["mariadbId", "applicationStatus"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.remove": { - "post": { - "operationId": "mariadb-remove", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - } - }, - "required": ["mariadbId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.saveEnvironment": { - "post": { - "operationId": "mariadb-saveEnvironment", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - }, - "env": { - "type": "string", - "nullable": true - } - }, - "required": ["mariadbId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.reload": { - "post": { - "operationId": "mariadb-reload", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - }, - "appName": { - "type": "string", - "minLength": 1 - } - }, - "required": ["mariadbId", "appName"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.update": { - "post": { - "operationId": "mariadb-update", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "databaseName": { - "type": "string", - "minLength": 1 - }, - "databaseUser": { - "type": "string", - "minLength": 1 - }, - "databasePassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "databaseRootPassword": { - "type": "string", - "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" - }, - "dockerImage": { - "type": "string", - "default": "mariadb:6" - }, - "command": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string", - "nullable": true - }, - "memoryReservation": { - "type": "string", - "nullable": true - }, - "memoryLimit": { - "type": "string", - "nullable": true - }, - "cpuReservation": { - "type": "string", - "nullable": true - }, - "cpuLimit": { - "type": "string", - "nullable": true - }, - "externalPort": { - "type": "number", - "nullable": true - }, - "applicationStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - }, - "healthCheckSwarm": { - "type": "object", - "properties": { - "Test": { - "type": "array", - "items": { - "type": "string" - } - }, - "Interval": { - "type": "number" - }, - "Timeout": { - "type": "number" - }, - "StartPeriod": { - "type": "number" - }, - "Retries": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "restartPolicySwarm": { - "type": "object", - "properties": { - "Condition": { - "type": "string" - }, - "Delay": { - "type": "number" - }, - "MaxAttempts": { - "type": "number" - }, - "Window": { - "type": "number" - } - }, - "additionalProperties": false, - "nullable": true - }, - "placementSwarm": { - "type": "object", - "properties": { - "Constraints": { - "type": "array", - "items": { - "type": "string" - } - }, - "Preferences": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Spread": { - "type": "object", - "properties": { - "SpreadDescriptor": { - "type": "string" - } - }, - "required": ["SpreadDescriptor"], - "additionalProperties": false - } - }, - "required": ["Spread"], - "additionalProperties": false - } - }, - "MaxReplicas": { - "type": "number" - }, - "Platforms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Architecture": { - "type": "string" - }, - "OS": { - "type": "string" - } - }, - "required": ["Architecture", "OS"], - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "updateConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "rollbackConfigSwarm": { - "type": "object", - "properties": { - "Parallelism": { - "type": "number" - }, - "Delay": { - "type": "number" - }, - "FailureAction": { - "type": "string" - }, - "Monitor": { - "type": "number" - }, - "MaxFailureRatio": { - "type": "number" - }, - "Order": { - "type": "string" - } - }, - "required": ["Parallelism", "Order"], - "additionalProperties": false, - "nullable": true - }, - "modeSwarm": { - "type": "object", - "properties": { - "Replicated": { - "type": "object", - "properties": { - "Replicas": { - "type": "number" - } - }, - "additionalProperties": false - }, - "Global": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "ReplicatedJob": { - "type": "object", - "properties": { - "MaxConcurrent": { - "type": "number" - }, - "TotalCompletions": { - "type": "number" - } - }, - "additionalProperties": false - }, - "GlobalJob": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false, - "nullable": true - }, - "labelsSwarm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "nullable": true - }, - "networkSwarm": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Target": { - "type": "string" - }, - "Aliases": { - "type": "array", - "items": { - "type": "string" - } - }, - "DriverOpts": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "nullable": true - }, - "stopGracePeriodSwarm": { - "type": "integer", - "nullable": true - }, - "endpointSpecSwarm": { - "type": "object", - "properties": { - "Mode": { - "type": "string" - }, - "Ports": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Protocol": { - "type": "string" - }, - "TargetPort": { - "type": "number" - }, - "PublishedPort": { - "type": "number" - }, - "PublishMode": { - "type": "string" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "nullable": true - }, - "replicas": { - "type": "number" - }, - "createdAt": { - "type": "string" - }, - "environmentId": { - "type": "string" - } - }, - "required": ["mariadbId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.move": { - "post": { - "operationId": "mariadb-move", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - }, - "targetEnvironmentId": { - "type": "string" - } - }, - "required": ["mariadbId", "targetEnvironmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mariadb.rebuild": { - "post": { - "operationId": "mariadb-rebuild", - "tags": ["mariadb"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mariadbId": { - "type": "string" - } - }, - "required": ["mariadbId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.create": { - "post": { - "operationId": "compose-create", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "environmentId": { - "type": "string" - }, - "composeType": { - "type": "string", - "enum": ["docker-compose", "stack"] - }, - "appName": { - "type": "string" - }, - "serverId": { - "type": "string", - "nullable": true - }, - "composeFile": { - "type": "string" - } - }, - "required": ["name", "environmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.one": { - "get": { - "operationId": "compose-one", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "composeId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.update": { - "post": { - "operationId": "compose-update", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "appName": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "env": { - "type": "string", - "nullable": true - }, - "composeFile": { - "type": "string" - }, - "refreshToken": { - "type": "string", - "nullable": true - }, - "sourceType": { - "type": "string", - "enum": [ - "git", - "github", - "gitlab", - "bitbucket", - "gitea", - "raw" - ] - }, - "composeType": { - "type": "string", - "enum": ["docker-compose", "stack"] - }, - "repository": { - "type": "string", - "nullable": true - }, - "owner": { - "type": "string", - "nullable": true - }, - "branch": { - "type": "string", - "nullable": true - }, - "autoDeploy": { - "type": "boolean", - "nullable": true - }, - "gitlabProjectId": { - "type": "number", - "nullable": true - }, - "gitlabRepository": { - "type": "string", - "nullable": true - }, - "gitlabOwner": { - "type": "string", - "nullable": true - }, - "gitlabBranch": { - "type": "string", - "nullable": true - }, - "gitlabPathNamespace": { - "type": "string", - "nullable": true - }, - "bitbucketRepository": { - "type": "string", - "nullable": true - }, - "bitbucketOwner": { - "type": "string", - "nullable": true - }, - "bitbucketBranch": { - "type": "string", - "nullable": true - }, - "giteaRepository": { - "type": "string", - "nullable": true - }, - "giteaOwner": { - "type": "string", - "nullable": true - }, - "giteaBranch": { - "type": "string", - "nullable": true - }, - "customGitUrl": { - "type": "string", - "nullable": true - }, - "customGitBranch": { - "type": "string", - "nullable": true - }, - "customGitSSHKeyId": { - "type": "string", - "nullable": true - }, - "command": { - "type": "string" - }, - "enableSubmodules": { - "type": "boolean" - }, - "composePath": { - "type": "string", - "minLength": 1 - }, - "suffix": { - "type": "string" - }, - "randomize": { - "type": "boolean" - }, - "isolatedDeployment": { - "type": "boolean" - }, - "isolatedDeploymentsVolume": { - "type": "boolean" - }, - "triggerType": { - "type": "string", - "enum": ["push", "tag"], - "nullable": true - }, - "composeStatus": { - "type": "string", - "enum": ["idle", "running", "done", "error"] - }, - "environmentId": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "watchPaths": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "githubId": { - "type": "string", - "nullable": true - }, - "gitlabId": { - "type": "string", - "nullable": true - }, - "bitbucketId": { - "type": "string", - "nullable": true - }, - "giteaId": { - "type": "string", - "nullable": true - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.delete": { - "post": { - "operationId": "compose-delete", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - }, - "deleteVolumes": { - "type": "boolean" - } - }, - "required": ["composeId", "deleteVolumes"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.cleanQueues": { - "post": { - "operationId": "compose-cleanQueues", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.killBuild": { - "post": { - "operationId": "compose-killBuild", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.loadServices": { - "get": { - "operationId": "compose-loadServices", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "composeId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "type", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "not": {} - }, - { - "type": "string", - "enum": ["fetch", "cache"] - } - ], - "default": "cache" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.loadMountsByService": { - "get": { - "operationId": "compose-loadMountsByService", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "composeId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "serviceName", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.fetchSourceType": { - "post": { - "operationId": "compose-fetchSourceType", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.randomizeCompose": { - "post": { - "operationId": "compose-randomizeCompose", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - }, - "suffix": { - "type": "string" - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.isolatedDeployment": { - "post": { - "operationId": "compose-isolatedDeployment", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - }, - "suffix": { - "type": "string" - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.getConvertedCompose": { - "get": { - "operationId": "compose-getConvertedCompose", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "composeId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.deploy": { - "post": { - "operationId": "compose-deploy", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.redeploy": { - "post": { - "operationId": "compose-redeploy", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.stop": { - "post": { - "operationId": "compose-stop", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.start": { - "post": { - "operationId": "compose-start", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.getDefaultCommand": { - "get": { - "operationId": "compose-getDefaultCommand", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "composeId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.refreshToken": { - "post": { - "operationId": "compose-refreshToken", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.deployTemplate": { - "post": { - "operationId": "compose-deployTemplate", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "environmentId": { - "type": "string" - }, - "serverId": { - "type": "string" - }, - "id": { - "type": "string" - }, - "baseUrl": { - "type": "string" - } - }, - "required": ["environmentId", "id"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.templates": { - "get": { - "operationId": "compose-templates", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "baseUrl", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.getTags": { - "get": { - "operationId": "compose-getTags", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "baseUrl", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.disconnectGitProvider": { - "post": { - "operationId": "compose-disconnectGitProvider", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.move": { - "post": { - "operationId": "compose-move", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string" - }, - "targetEnvironmentId": { - "type": "string" - } - }, - "required": ["composeId", "targetEnvironmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.processTemplate": { - "post": { - "operationId": "compose-processTemplate", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "base64": { - "type": "string" - }, - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["base64", "composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.import": { - "post": { - "operationId": "compose-import", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "base64": { - "type": "string" - }, - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["base64", "composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/compose.cancelDeployment": { - "post": { - "operationId": "compose-cancelDeployment", - "tags": ["compose"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "composeId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["composeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.all": { - "get": { - "operationId": "user-all", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.one": { - "get": { - "operationId": "user-one", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "userId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.get": { - "get": { - "operationId": "user-get", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.haveRootAccess": { - "get": { - "operationId": "user-haveRootAccess", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.getBackups": { - "get": { - "operationId": "user-getBackups", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.getServerMetrics": { - "get": { - "operationId": "user-getServerMetrics", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.update": { - "post": { - "operationId": "user-update", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string" - }, - "isRegistered": { - "type": "boolean" - }, - "expirationDate": { - "type": "string" - }, - "createdAt2": { - "type": "string" - }, - "createdAt": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "twoFactorEnabled": { - "type": "boolean", - "nullable": true - }, - "email": { - "type": "string", - "format": "email", - "minLength": 1 - }, - "emailVerified": { - "type": "boolean" - }, - "image": { - "type": "string", - "nullable": true - }, - "banned": { - "type": "boolean", - "nullable": true - }, - "banReason": { - "type": "string", - "nullable": true - }, - "banExpires": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "serverIp": { - "type": "string", - "nullable": true - }, - "certificateType": { - "type": "string", - "enum": ["letsencrypt", "none", "custom"] - }, - "https": { - "type": "boolean" - }, - "host": { - "type": "string", - "nullable": true - }, - "letsEncryptEmail": { - "type": "string", - "nullable": true - }, - "sshPrivateKey": { - "type": "string", - "nullable": true - }, - "enableDockerCleanup": { - "type": "boolean" - }, - "logCleanupCron": { - "type": "string", - "nullable": true - }, - "enablePaidFeatures": { - "type": "boolean" - }, - "allowImpersonation": { - "type": "boolean" - }, - "metricsConfig": { - "type": "object", - "properties": { - "server": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": ["Dokploy", "Remote"] - }, - "refreshRate": { - "type": "number" - }, - "port": { - "type": "number" - }, - "token": { - "type": "string" - }, - "urlCallback": { - "type": "string" - }, - "retentionDays": { - "type": "number" - }, - "cronJob": { - "type": "string" - }, - "thresholds": { - "type": "object", - "properties": { - "cpu": { - "type": "number" - }, - "memory": { - "type": "number" - } - }, - "required": ["cpu", "memory"], - "additionalProperties": false - } - }, - "required": [ - "type", - "refreshRate", - "port", - "token", - "urlCallback", - "retentionDays", - "cronJob", - "thresholds" - ], - "additionalProperties": false - }, - "containers": { - "type": "object", - "properties": { - "refreshRate": { - "type": "number" - }, - "services": { - "type": "object", - "properties": { - "include": { - "type": "array", - "items": { - "type": "string" - } - }, - "exclude": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": ["include", "exclude"], - "additionalProperties": false - } - }, - "required": ["refreshRate", "services"], - "additionalProperties": false - } - }, - "required": ["server", "containers"], - "additionalProperties": false - }, - "cleanupCacheApplications": { - "type": "boolean" - }, - "cleanupCacheOnPreviews": { - "type": "boolean" - }, - "cleanupCacheOnCompose": { - "type": "boolean" - }, - "stripeCustomerId": { - "type": "string", - "nullable": true - }, - "stripeSubscriptionId": { - "type": "string", - "nullable": true - }, - "serversQuantity": { - "type": "number" - }, - "password": { - "type": "string" - }, - "currentPassword": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.getUserByToken": { - "get": { - "operationId": "user-getUserByToken", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "token", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.getMetricsToken": { - "get": { - "operationId": "user-getMetricsToken", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.remove": { - "post": { - "operationId": "user-remove", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "userId": { - "type": "string" - } - }, - "required": ["userId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.assignPermissions": { - "post": { - "operationId": "user-assignPermissions", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "minLength": 1 - }, - "accessedProjects": { - "type": "array", - "items": { - "type": "string" - } - }, - "accessedEnvironments": { - "type": "array", - "items": { - "type": "string" - } - }, - "accessedServices": { - "type": "array", - "items": { - "type": "string" - } - }, - "canCreateProjects": { - "type": "boolean" - }, - "canCreateServices": { - "type": "boolean" - }, - "canDeleteProjects": { - "type": "boolean" - }, - "canDeleteServices": { - "type": "boolean" - }, - "canAccessToDocker": { - "type": "boolean" - }, - "canAccessToTraefikFiles": { - "type": "boolean" - }, - "canAccessToAPI": { - "type": "boolean" - }, - "canAccessToSSHKeys": { - "type": "boolean" - }, - "canAccessToGitProviders": { - "type": "boolean" - }, - "canDeleteEnvironments": { - "type": "boolean" - }, - "canCreateEnvironments": { - "type": "boolean" - } - }, - "required": [ - "id", - "accessedProjects", - "accessedEnvironments", - "accessedServices", - "canCreateProjects", - "canCreateServices", - "canDeleteProjects", - "canDeleteServices", - "canAccessToDocker", - "canAccessToTraefikFiles", - "canAccessToAPI", - "canAccessToSSHKeys", - "canAccessToGitProviders", - "canDeleteEnvironments", - "canCreateEnvironments" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.getInvitations": { - "get": { - "operationId": "user-getInvitations", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.getContainerMetrics": { - "get": { - "operationId": "user-getContainerMetrics", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "url", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "appName", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "dataPoints", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.generateToken": { - "post": { - "operationId": "user-generateToken", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.deleteApiKey": { - "post": { - "operationId": "user-deleteApiKey", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "apiKeyId": { - "type": "string" - } - }, - "required": ["apiKeyId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.createApiKey": { - "post": { - "operationId": "user-createApiKey", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "prefix": { - "type": "string" - }, - "expiresIn": { - "type": "number" - }, - "metadata": { - "type": "object", - "properties": { - "organizationId": { - "type": "string" - } - }, - "required": ["organizationId"], - "additionalProperties": false - }, - "rateLimitEnabled": { - "type": "boolean" - }, - "rateLimitTimeWindow": { - "type": "number" - }, - "rateLimitMax": { - "type": "number" - }, - "remaining": { - "type": "number" - }, - "refillAmount": { - "type": "number" - }, - "refillInterval": { - "type": "number" - } - }, - "required": ["name", "metadata"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.checkUserOrganizations": { - "get": { - "operationId": "user-checkUserOrganizations", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "userId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/user.sendInvitation": { - "post": { - "operationId": "user-sendInvitation", - "tags": ["user"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "minLength": 1 - }, - "notificationId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["invitationId", "notificationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.create": { - "post": { - "operationId": "domain-create", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "host": { - "type": "string", - "minLength": 1 - }, - "path": { - "type": "string", - "minLength": 1, - "nullable": true - }, - "port": { - "type": "number", - "minimum": 1, - "maximum": 65535, - "nullable": true - }, - "https": { - "type": "boolean" - }, - "applicationId": { - "type": "string", - "nullable": true - }, - "certificateType": { - "type": "string", - "enum": ["letsencrypt", "none", "custom"] - }, - "customCertResolver": { - "type": "string", - "nullable": true - }, - "composeId": { - "type": "string", - "nullable": true - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "domainType": { - "type": "string", - "enum": ["compose", "application", "preview"], - "nullable": true - }, - "previewDeploymentId": { - "type": "string", - "nullable": true - }, - "internalPath": { - "type": "string", - "nullable": true - }, - "stripPath": { - "type": "boolean" - } - }, - "required": ["host"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.byApplicationId": { - "get": { - "operationId": "domain-byApplicationId", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "applicationId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.byComposeId": { - "get": { - "operationId": "domain-byComposeId", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "composeId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.generateDomain": { - "post": { - "operationId": "domain-generateDomain", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appName": { - "type": "string" - }, - "serverId": { - "type": "string" - } - }, - "required": ["appName"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.canGenerateTraefikMeDomains": { - "get": { - "operationId": "domain-canGenerateTraefikMeDomains", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.update": { - "post": { - "operationId": "domain-update", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "host": { - "type": "string", - "minLength": 1 - }, - "path": { - "type": "string", - "minLength": 1, - "nullable": true - }, - "port": { - "type": "number", - "minimum": 1, - "maximum": 65535, - "nullable": true - }, - "https": { - "type": "boolean" - }, - "certificateType": { - "type": "string", - "enum": ["letsencrypt", "none", "custom"] - }, - "customCertResolver": { - "type": "string", - "nullable": true - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "domainType": { - "type": "string", - "enum": ["compose", "application", "preview"], - "nullable": true - }, - "internalPath": { - "type": "string", - "nullable": true - }, - "stripPath": { - "type": "boolean" - }, - "domainId": { - "type": "string" - } - }, - "required": ["host", "domainId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.one": { - "get": { - "operationId": "domain-one", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "domainId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.delete": { - "post": { - "operationId": "domain-delete", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "domainId": { - "type": "string" - } - }, - "required": ["domainId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/domain.validateDomain": { - "post": { - "operationId": "domain-validateDomain", - "tags": ["domain"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "domain": { - "type": "string" - }, - "serverIp": { - "type": "string" - } - }, - "required": ["domain"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/destination.create": { - "post": { - "operationId": "destination-create", - "tags": ["destination"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "provider": { - "type": "string", - "nullable": true - }, - "accessKey": { - "type": "string" - }, - "bucket": { - "type": "string" - }, - "region": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "secretAccessKey": { - "type": "string" - }, - "serverId": { - "type": "string" - } - }, - "required": [ - "name", - "provider", - "accessKey", - "bucket", - "region", - "endpoint", - "secretAccessKey" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/destination.testConnection": { - "post": { - "operationId": "destination-testConnection", - "tags": ["destination"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "provider": { - "type": "string", - "nullable": true - }, - "accessKey": { - "type": "string" - }, - "bucket": { - "type": "string" - }, - "region": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "secretAccessKey": { - "type": "string" - }, - "serverId": { - "type": "string" - } - }, - "required": [ - "name", - "provider", - "accessKey", - "bucket", - "region", - "endpoint", - "secretAccessKey" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/destination.one": { - "get": { - "operationId": "destination-one", - "tags": ["destination"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "destinationId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/destination.all": { - "get": { - "operationId": "destination-all", - "tags": ["destination"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/destination.remove": { - "post": { - "operationId": "destination-remove", - "tags": ["destination"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "destinationId": { - "type": "string" - } - }, - "required": ["destinationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/destination.update": { - "post": { - "operationId": "destination-update", - "tags": ["destination"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "accessKey": { - "type": "string" - }, - "bucket": { - "type": "string" - }, - "region": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "secretAccessKey": { - "type": "string" - }, - "destinationId": { - "type": "string" - }, - "provider": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string" - } - }, - "required": [ - "name", - "accessKey", - "bucket", - "region", - "endpoint", - "secretAccessKey", - "destinationId", - "provider" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.create": { - "post": { - "operationId": "backup-create", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "schedule": { - "type": "string" - }, - "enabled": { - "type": "boolean", - "nullable": true - }, - "prefix": { - "type": "string", - "minLength": 1 - }, - "destinationId": { - "type": "string" - }, - "keepLatestCount": { - "type": "number", - "nullable": true - }, - "database": { - "type": "string", - "minLength": 1 - }, - "mariadbId": { - "type": "string", - "nullable": true - }, - "mysqlId": { - "type": "string", - "nullable": true - }, - "postgresId": { - "type": "string", - "nullable": true - }, - "mongoId": { - "type": "string", - "nullable": true - }, - "databaseType": { - "type": "string", - "enum": [ - "postgres", - "mariadb", - "mysql", - "mongo", - "web-server" - ] - }, - "userId": { - "type": "string", - "nullable": true - }, - "backupType": { - "type": "string", - "enum": ["database", "compose"] - }, - "composeId": { - "type": "string", - "nullable": true - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "metadata": { - "nullable": true - } - }, - "required": [ - "schedule", - "prefix", - "destinationId", - "database", - "databaseType" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.one": { - "get": { - "operationId": "backup-one", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "backupId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.update": { - "post": { - "operationId": "backup-update", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "schedule": { - "type": "string" - }, - "enabled": { - "type": "boolean", - "nullable": true - }, - "prefix": { - "type": "string", - "minLength": 1 - }, - "backupId": { - "type": "string" - }, - "destinationId": { - "type": "string" - }, - "database": { - "type": "string", - "minLength": 1 - }, - "keepLatestCount": { - "type": "number", - "nullable": true - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "metadata": { - "nullable": true - }, - "databaseType": { - "type": "string", - "enum": [ - "postgres", - "mariadb", - "mysql", - "mongo", - "web-server" - ] - } - }, - "required": [ - "schedule", - "prefix", - "backupId", - "destinationId", - "database", - "serviceName", - "databaseType" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.remove": { - "post": { - "operationId": "backup-remove", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "backupId": { - "type": "string" - } - }, - "required": ["backupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.manualBackupPostgres": { - "post": { - "operationId": "backup-manualBackupPostgres", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "backupId": { - "type": "string" - } - }, - "required": ["backupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.manualBackupMySql": { - "post": { - "operationId": "backup-manualBackupMySql", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "backupId": { - "type": "string" - } - }, - "required": ["backupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.manualBackupMariadb": { - "post": { - "operationId": "backup-manualBackupMariadb", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "backupId": { - "type": "string" - } - }, - "required": ["backupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.manualBackupCompose": { - "post": { - "operationId": "backup-manualBackupCompose", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "backupId": { - "type": "string" - } - }, - "required": ["backupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.manualBackupMongo": { - "post": { - "operationId": "backup-manualBackupMongo", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "backupId": { - "type": "string" - } - }, - "required": ["backupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.manualBackupWebServer": { - "post": { - "operationId": "backup-manualBackupWebServer", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "backupId": { - "type": "string" - } - }, - "required": ["backupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/backup.listBackupFiles": { - "get": { - "operationId": "backup-listBackupFiles", - "tags": ["backup"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "destinationId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "search", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/deployment.all": { - "get": { - "operationId": "deployment-all", - "tags": ["deployment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "applicationId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/deployment.allByCompose": { - "get": { - "operationId": "deployment-allByCompose", - "tags": ["deployment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "composeId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/deployment.allByServer": { - "get": { - "operationId": "deployment-allByServer", - "tags": ["deployment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/deployment.allByType": { - "get": { - "operationId": "deployment-allByType", - "tags": ["deployment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "id", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "type", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": [ - "application", - "compose", - "server", - "schedule", - "previewDeployment", - "backup", - "volumeBackup" - ] - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/deployment.killProcess": { - "post": { - "operationId": "deployment-killProcess", - "tags": ["deployment"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "deploymentId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["deploymentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/previewDeployment.all": { - "get": { - "operationId": "previewDeployment-all", - "tags": ["previewDeployment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "applicationId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/previewDeployment.delete": { - "post": { - "operationId": "previewDeployment-delete", - "tags": ["previewDeployment"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "previewDeploymentId": { - "type": "string" - } - }, - "required": ["previewDeploymentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/previewDeployment.one": { - "get": { - "operationId": "previewDeployment-one", - "tags": ["previewDeployment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "previewDeploymentId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mounts.create": { - "post": { - "operationId": "mounts-create", - "tags": ["mounts"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": ["bind", "volume", "file"] - }, - "hostPath": { - "type": "string", - "nullable": true - }, - "volumeName": { - "type": "string", - "nullable": true - }, - "content": { - "type": "string", - "nullable": true - }, - "mountPath": { - "type": "string", - "minLength": 1 - }, - "serviceType": { - "type": "string", - "enum": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ], - "default": "application" - }, - "filePath": { - "type": "string", - "nullable": true - }, - "serviceId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["type", "mountPath", "serviceId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mounts.remove": { - "post": { - "operationId": "mounts-remove", - "tags": ["mounts"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mountId": { - "type": "string" - } - }, - "required": ["mountId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mounts.one": { - "get": { - "operationId": "mounts-one", - "tags": ["mounts"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "mountId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mounts.update": { - "post": { - "operationId": "mounts-update", - "tags": ["mounts"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "mountId": { - "type": "string", - "minLength": 1 - }, - "type": { - "type": "string", - "enum": ["bind", "volume", "file"] - }, - "hostPath": { - "type": "string", - "nullable": true - }, - "volumeName": { - "type": "string", - "nullable": true - }, - "filePath": { - "type": "string", - "nullable": true - }, - "content": { - "type": "string", - "nullable": true - }, - "serviceType": { - "type": "string", - "enum": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ], - "default": "application" - }, - "mountPath": { - "type": "string", - "minLength": 1 - }, - "applicationId": { - "type": "string", - "nullable": true - }, - "postgresId": { - "type": "string", - "nullable": true - }, - "mariadbId": { - "type": "string", - "nullable": true - }, - "mongoId": { - "type": "string", - "nullable": true - }, - "mysqlId": { - "type": "string", - "nullable": true - }, - "redisId": { - "type": "string", - "nullable": true - }, - "composeId": { - "type": "string", - "nullable": true - } - }, - "required": ["mountId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/mounts.allNamedByApplicationId": { - "get": { - "operationId": "mounts-allNamedByApplicationId", - "tags": ["mounts"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "applicationId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/certificates.create": { - "post": { - "operationId": "certificates-create", - "tags": ["certificates"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "certificateId": { - "type": "string" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "certificateData": { - "type": "string", - "minLength": 1 - }, - "privateKey": { - "type": "string", - "minLength": 1 - }, - "certificatePath": { - "type": "string" - }, - "autoRenew": { - "type": "boolean", - "nullable": true - }, - "organizationId": { - "type": "string" - }, - "serverId": { - "type": "string", - "nullable": true - } - }, - "required": [ - "name", - "certificateData", - "privateKey", - "organizationId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/certificates.one": { - "get": { - "operationId": "certificates-one", - "tags": ["certificates"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "certificateId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/certificates.remove": { - "post": { - "operationId": "certificates-remove", - "tags": ["certificates"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "certificateId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["certificateId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/certificates.all": { - "get": { - "operationId": "certificates-all", - "tags": ["certificates"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.reloadServer": { - "post": { - "operationId": "settings-reloadServer", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanRedis": { - "post": { - "operationId": "settings-cleanRedis", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.reloadRedis": { - "post": { - "operationId": "settings-reloadRedis", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.reloadTraefik": { - "post": { - "operationId": "settings-reloadTraefik", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.toggleDashboard": { - "post": { - "operationId": "settings-toggleDashboard", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "enableDashboard": { - "type": "boolean" - }, - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanUnusedImages": { - "post": { - "operationId": "settings-cleanUnusedImages", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanUnusedVolumes": { - "post": { - "operationId": "settings-cleanUnusedVolumes", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanStoppedContainers": { - "post": { - "operationId": "settings-cleanStoppedContainers", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanDockerBuilder": { - "post": { - "operationId": "settings-cleanDockerBuilder", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanDockerPrune": { - "post": { - "operationId": "settings-cleanDockerPrune", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanAll": { - "post": { - "operationId": "settings-cleanAll", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanMonitoring": { - "post": { - "operationId": "settings-cleanMonitoring", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.saveSSHPrivateKey": { - "post": { - "operationId": "settings-saveSSHPrivateKey", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "sshPrivateKey": { - "type": "string", - "nullable": true - } - }, - "required": ["sshPrivateKey"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.assignDomainServer": { - "post": { - "operationId": "settings-assignDomainServer", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "host": { - "type": "string", - "nullable": true - }, - "certificateType": { - "type": "string", - "enum": ["letsencrypt", "none", "custom"] - }, - "letsEncryptEmail": { - "type": "string", - "nullable": true - }, - "https": { - "type": "boolean" - } - }, - "required": ["host", "certificateType"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.cleanSSHPrivateKey": { - "post": { - "operationId": "settings-cleanSSHPrivateKey", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateDockerCleanup": { - "post": { - "operationId": "settings-updateDockerCleanup", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "enableDockerCleanup": { - "type": "boolean" - }, - "serverId": { - "type": "string" - } - }, - "required": ["enableDockerCleanup"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.readTraefikConfig": { - "get": { - "operationId": "settings-readTraefikConfig", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateTraefikConfig": { - "post": { - "operationId": "settings-updateTraefikConfig", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "traefikConfig": { - "type": "string", - "minLength": 1 - } - }, - "required": ["traefikConfig"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.readWebServerTraefikConfig": { - "get": { - "operationId": "settings-readWebServerTraefikConfig", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateWebServerTraefikConfig": { - "post": { - "operationId": "settings-updateWebServerTraefikConfig", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "traefikConfig": { - "type": "string", - "minLength": 1 - } - }, - "required": ["traefikConfig"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.readMiddlewareTraefikConfig": { - "get": { - "operationId": "settings-readMiddlewareTraefikConfig", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateMiddlewareTraefikConfig": { - "post": { - "operationId": "settings-updateMiddlewareTraefikConfig", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "traefikConfig": { - "type": "string", - "minLength": 1 - } - }, - "required": ["traefikConfig"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getUpdateData": { - "post": { - "operationId": "settings-getUpdateData", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateServer": { - "post": { - "operationId": "settings-updateServer", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getDokployVersion": { - "get": { - "operationId": "settings-getDokployVersion", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getReleaseTag": { - "get": { - "operationId": "settings-getReleaseTag", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.readDirectories": { - "get": { - "operationId": "settings-readDirectories", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateTraefikFile": { - "post": { - "operationId": "settings-updateTraefikFile", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "path": { - "type": "string", - "minLength": 1 - }, - "traefikConfig": { - "type": "string", - "minLength": 1 - }, - "serverId": { - "type": "string" - } - }, - "required": ["path", "traefikConfig"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.readTraefikFile": { - "get": { - "operationId": "settings-readTraefikFile", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "path", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getIp": { - "get": { - "operationId": "settings-getIp", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getOpenApiDocument": { - "get": { - "operationId": "settings-getOpenApiDocument", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.readTraefikEnv": { - "get": { - "operationId": "settings-readTraefikEnv", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.writeTraefikEnv": { - "post": { - "operationId": "settings-writeTraefikEnv", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "env": { - "type": "string" - }, - "serverId": { - "type": "string" - } - }, - "required": ["env"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.haveTraefikDashboardPortEnabled": { - "get": { - "operationId": "settings-haveTraefikDashboardPortEnabled", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.haveActivateRequests": { - "get": { - "operationId": "settings-haveActivateRequests", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.toggleRequests": { - "post": { - "operationId": "settings-toggleRequests", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "enable": { - "type": "boolean" - } - }, - "required": ["enable"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.isCloud": { - "get": { - "operationId": "settings-isCloud", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.isUserSubscribed": { - "get": { - "operationId": "settings-isUserSubscribed", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.health": { - "get": { - "operationId": "settings-health", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.setupGPU": { - "post": { - "operationId": "settings-setupGPU", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.checkGPUStatus": { - "get": { - "operationId": "settings-checkGPUStatus", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateTraefikPorts": { - "post": { - "operationId": "settings-updateTraefikPorts", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string" - }, - "additionalPorts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "targetPort": { - "type": "number" - }, - "publishedPort": { - "type": "number" - }, - "protocol": { - "type": "string", - "enum": ["tcp", "udp", "sctp"] - } - }, - "required": ["targetPort", "publishedPort", "protocol"], - "additionalProperties": false - } - } - }, - "required": ["additionalPorts"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getTraefikPorts": { - "get": { - "operationId": "settings-getTraefikPorts", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.updateLogCleanup": { - "post": { - "operationId": "settings-updateLogCleanup", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "cronExpression": { - "type": "string", - "nullable": true - } - }, - "required": ["cronExpression"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getLogCleanupStatus": { - "get": { - "operationId": "settings-getLogCleanupStatus", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/settings.getDokployCloudIps": { - "get": { - "operationId": "settings-getDokployCloudIps", - "tags": ["settings"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/security.create": { - "post": { - "operationId": "security-create", - "tags": ["security"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "applicationId": { - "type": "string" - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - } - }, - "required": ["applicationId", "username", "password"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/security.one": { - "get": { - "operationId": "security-one", - "tags": ["security"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "securityId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/security.delete": { - "post": { - "operationId": "security-delete", - "tags": ["security"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "securityId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["securityId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/security.update": { - "post": { - "operationId": "security-update", - "tags": ["security"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "securityId": { - "type": "string", - "minLength": 1 - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - } - }, - "required": ["securityId", "username", "password"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redirects.create": { - "post": { - "operationId": "redirects-create", - "tags": ["redirects"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "regex": { - "type": "string", - "minLength": 1 - }, - "replacement": { - "type": "string", - "minLength": 1 - }, - "permanent": { - "type": "boolean" - }, - "applicationId": { - "type": "string" - } - }, - "required": [ - "regex", - "replacement", - "permanent", - "applicationId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redirects.one": { - "get": { - "operationId": "redirects-one", - "tags": ["redirects"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "redirectId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redirects.delete": { - "post": { - "operationId": "redirects-delete", - "tags": ["redirects"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redirectId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["redirectId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/redirects.update": { - "post": { - "operationId": "redirects-update", - "tags": ["redirects"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "redirectId": { - "type": "string", - "minLength": 1 - }, - "regex": { - "type": "string", - "minLength": 1 - }, - "replacement": { - "type": "string", - "minLength": 1 - }, - "permanent": { - "type": "boolean" - } - }, - "required": ["redirectId", "regex", "replacement", "permanent"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/port.create": { - "post": { - "operationId": "port-create", - "tags": ["port"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "publishedPort": { - "type": "number" - }, - "publishMode": { - "type": "string", - "enum": ["ingress", "host"], - "default": "ingress" - }, - "targetPort": { - "type": "number" - }, - "protocol": { - "type": "string", - "enum": ["tcp", "udp"], - "default": "tcp" - }, - "applicationId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["publishedPort", "targetPort", "applicationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/port.one": { - "get": { - "operationId": "port-one", - "tags": ["port"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "portId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/port.delete": { - "post": { - "operationId": "port-delete", - "tags": ["port"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "portId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["portId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/port.update": { - "post": { - "operationId": "port-update", - "tags": ["port"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "portId": { - "type": "string", - "minLength": 1 - }, - "publishedPort": { - "type": "number" - }, - "publishMode": { - "type": "string", - "enum": ["ingress", "host"], - "default": "ingress" - }, - "targetPort": { - "type": "number" - }, - "protocol": { - "type": "string", - "enum": ["tcp", "udp"], - "default": "tcp" - } - }, - "required": ["portId", "publishedPort", "targetPort"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/registry.create": { - "post": { - "operationId": "registry-create", - "tags": ["registry"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "registryName": { - "type": "string", - "minLength": 1 - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "registryUrl": { - "type": "string" - }, - "registryType": { - "type": "string", - "enum": ["cloud"] - }, - "imagePrefix": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string" - } - }, - "required": [ - "registryName", - "username", - "password", - "registryUrl", - "registryType", - "imagePrefix" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/registry.remove": { - "post": { - "operationId": "registry-remove", - "tags": ["registry"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "registryId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["registryId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/registry.update": { - "post": { - "operationId": "registry-update", - "tags": ["registry"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "registryId": { - "type": "string", - "minLength": 1 - }, - "registryName": { - "type": "string", - "minLength": 1 - }, - "imagePrefix": { - "type": "string", - "nullable": true - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "registryUrl": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "registryType": { - "type": "string", - "enum": ["cloud"] - }, - "organizationId": { - "type": "string", - "minLength": 1 - }, - "serverId": { - "type": "string" - } - }, - "required": ["registryId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/registry.all": { - "get": { - "operationId": "registry-all", - "tags": ["registry"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/registry.one": { - "get": { - "operationId": "registry-one", - "tags": ["registry"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "registryId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/registry.testRegistry": { - "post": { - "operationId": "registry-testRegistry", - "tags": ["registry"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "registryName": { - "type": "string" - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "registryUrl": { - "type": "string" - }, - "registryType": { - "type": "string", - "enum": ["cloud"] - }, - "imagePrefix": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string" - } - }, - "required": [ - "username", - "password", - "registryUrl", - "registryType" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/cluster.getNodes": { - "get": { - "operationId": "cluster-getNodes", - "tags": ["cluster"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/cluster.removeWorker": { - "post": { - "operationId": "cluster-removeWorker", - "tags": ["cluster"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "nodeId": { - "type": "string" - }, - "serverId": { - "type": "string" - } - }, - "required": ["nodeId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/cluster.addWorker": { - "get": { - "operationId": "cluster-addWorker", - "tags": ["cluster"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/cluster.addManager": { - "get": { - "operationId": "cluster-addManager", - "tags": ["cluster"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.createSlack": { - "post": { - "operationId": "notification-createSlack", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "webhookUrl": { - "type": "string", - "minLength": 1 - }, - "channel": { - "type": "string" - } - }, - "required": [ - "appBuildError", - "databaseBackup", - "dokployRestart", - "name", - "appDeploy", - "dockerCleanup", - "serverThreshold", - "webhookUrl", - "channel" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.updateSlack": { - "post": { - "operationId": "notification-updateSlack", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "webhookUrl": { - "type": "string", - "minLength": 1 - }, - "channel": { - "type": "string" - }, - "notificationId": { - "type": "string", - "minLength": 1 - }, - "slackId": { - "type": "string" - }, - "organizationId": { - "type": "string" - } - }, - "required": ["notificationId", "slackId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.testSlackConnection": { - "post": { - "operationId": "notification-testSlackConnection", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "webhookUrl": { - "type": "string", - "minLength": 1 - }, - "channel": { - "type": "string" - } - }, - "required": ["webhookUrl", "channel"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.createTelegram": { - "post": { - "operationId": "notification-createTelegram", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "botToken": { - "type": "string", - "minLength": 1 - }, - "chatId": { - "type": "string", - "minLength": 1 - }, - "messageThreadId": { - "type": "string" - } - }, - "required": [ - "appBuildError", - "databaseBackup", - "dokployRestart", - "name", - "appDeploy", - "dockerCleanup", - "serverThreshold", - "botToken", - "chatId", - "messageThreadId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.updateTelegram": { - "post": { - "operationId": "notification-updateTelegram", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "botToken": { - "type": "string", - "minLength": 1 - }, - "chatId": { - "type": "string", - "minLength": 1 - }, - "messageThreadId": { - "type": "string" - }, - "notificationId": { - "type": "string", - "minLength": 1 - }, - "telegramId": { - "type": "string", - "minLength": 1 - }, - "organizationId": { - "type": "string" - } - }, - "required": ["notificationId", "telegramId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.testTelegramConnection": { - "post": { - "operationId": "notification-testTelegramConnection", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "botToken": { - "type": "string", - "minLength": 1 - }, - "chatId": { - "type": "string", - "minLength": 1 - }, - "messageThreadId": { - "type": "string" - } - }, - "required": ["botToken", "chatId", "messageThreadId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.createDiscord": { - "post": { - "operationId": "notification-createDiscord", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "webhookUrl": { - "type": "string", - "minLength": 1 - }, - "decoration": { - "type": "boolean" - } - }, - "required": [ - "appBuildError", - "databaseBackup", - "dokployRestart", - "name", - "appDeploy", - "dockerCleanup", - "serverThreshold", - "webhookUrl", - "decoration" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.updateDiscord": { - "post": { - "operationId": "notification-updateDiscord", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "webhookUrl": { - "type": "string", - "minLength": 1 - }, - "decoration": { - "type": "boolean" - }, - "notificationId": { - "type": "string", - "minLength": 1 - }, - "discordId": { - "type": "string", - "minLength": 1 - }, - "organizationId": { - "type": "string" - } - }, - "required": ["notificationId", "discordId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.testDiscordConnection": { - "post": { - "operationId": "notification-testDiscordConnection", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "webhookUrl": { - "type": "string", - "minLength": 1 - }, - "decoration": { - "type": "boolean" - } - }, - "required": ["webhookUrl"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.createEmail": { - "post": { - "operationId": "notification-createEmail", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "smtpServer": { - "type": "string", - "minLength": 1 - }, - "smtpPort": { - "type": "number", - "minimum": 1 - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "fromAddress": { - "type": "string", - "minLength": 1 - }, - "toAddresses": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1 - } - }, - "required": [ - "appBuildError", - "databaseBackup", - "dokployRestart", - "name", - "appDeploy", - "dockerCleanup", - "serverThreshold", - "smtpServer", - "smtpPort", - "username", - "password", - "fromAddress", - "toAddresses" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.updateEmail": { - "post": { - "operationId": "notification-updateEmail", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "smtpServer": { - "type": "string", - "minLength": 1 - }, - "smtpPort": { - "type": "number", - "minimum": 1 - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "fromAddress": { - "type": "string", - "minLength": 1 - }, - "toAddresses": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1 - }, - "notificationId": { - "type": "string", - "minLength": 1 - }, - "emailId": { - "type": "string", - "minLength": 1 - }, - "organizationId": { - "type": "string" - } - }, - "required": ["notificationId", "emailId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.testEmailConnection": { - "post": { - "operationId": "notification-testEmailConnection", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "smtpServer": { - "type": "string", - "minLength": 1 - }, - "smtpPort": { - "type": "number", - "minimum": 1 - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "toAddresses": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1 - }, - "fromAddress": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "smtpServer", - "smtpPort", - "username", - "password", - "toAddresses", - "fromAddress" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.remove": { - "post": { - "operationId": "notification-remove", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "notificationId": { - "type": "string" - } - }, - "required": ["notificationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.one": { - "get": { - "operationId": "notification-one", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "notificationId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.all": { - "get": { - "operationId": "notification-all", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.receiveNotification": { - "post": { - "operationId": "notification-receiveNotification", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "ServerType": { - "type": "string", - "enum": ["Dokploy", "Remote"], - "default": "Dokploy" - }, - "Type": { - "type": "string", - "enum": ["Memory", "CPU"] - }, - "Value": { - "type": "number" - }, - "Threshold": { - "type": "number" - }, - "Message": { - "type": "string" - }, - "Timestamp": { - "type": "string" - }, - "Token": { - "type": "string" - } - }, - "required": [ - "Type", - "Value", - "Threshold", - "Message", - "Timestamp", - "Token" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.createGotify": { - "post": { - "operationId": "notification-createGotify", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverUrl": { - "type": "string", - "minLength": 1 - }, - "appToken": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "number", - "minimum": 1 - }, - "decoration": { - "type": "boolean" - } - }, - "required": [ - "appBuildError", - "databaseBackup", - "dokployRestart", - "name", - "appDeploy", - "dockerCleanup", - "serverUrl", - "appToken", - "priority", - "decoration" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.updateGotify": { - "post": { - "operationId": "notification-updateGotify", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverUrl": { - "type": "string", - "minLength": 1 - }, - "appToken": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "number", - "minimum": 1 - }, - "decoration": { - "type": "boolean" - }, - "notificationId": { - "type": "string", - "minLength": 1 - }, - "gotifyId": { - "type": "string", - "minLength": 1 - }, - "organizationId": { - "type": "string" - } - }, - "required": ["notificationId", "gotifyId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.testGotifyConnection": { - "post": { - "operationId": "notification-testGotifyConnection", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverUrl": { - "type": "string", - "minLength": 1 - }, - "appToken": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "number", - "minimum": 1 - }, - "decoration": { - "type": "boolean" - } - }, - "required": ["serverUrl", "appToken", "priority"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.createNtfy": { - "post": { - "operationId": "notification-createNtfy", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverUrl": { - "type": "string", - "minLength": 1 - }, - "topic": { - "type": "string", - "minLength": 1 - }, - "accessToken": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "number", - "minimum": 1 - } - }, - "required": [ - "appBuildError", - "databaseBackup", - "dokployRestart", - "name", - "appDeploy", - "dockerCleanup", - "serverUrl", - "topic", - "accessToken", - "priority" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.updateNtfy": { - "post": { - "operationId": "notification-updateNtfy", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverUrl": { - "type": "string", - "minLength": 1 - }, - "topic": { - "type": "string", - "minLength": 1 - }, - "accessToken": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "number", - "minimum": 1 - }, - "notificationId": { - "type": "string", - "minLength": 1 - }, - "ntfyId": { - "type": "string", - "minLength": 1 - }, - "organizationId": { - "type": "string" - } - }, - "required": ["notificationId", "ntfyId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.testNtfyConnection": { - "post": { - "operationId": "notification-testNtfyConnection", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverUrl": { - "type": "string", - "minLength": 1 - }, - "topic": { - "type": "string", - "minLength": 1 - }, - "accessToken": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "number", - "minimum": 1 - } - }, - "required": ["serverUrl", "topic", "accessToken", "priority"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.createLark": { - "post": { - "operationId": "notification-createLark", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "webhookUrl": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "appBuildError", - "databaseBackup", - "dokployRestart", - "name", - "appDeploy", - "dockerCleanup", - "serverThreshold", - "webhookUrl" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.updateLark": { - "post": { - "operationId": "notification-updateLark", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "appBuildError": { - "type": "boolean" - }, - "databaseBackup": { - "type": "boolean" - }, - "dokployRestart": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "appDeploy": { - "type": "boolean" - }, - "dockerCleanup": { - "type": "boolean" - }, - "serverThreshold": { - "type": "boolean" - }, - "webhookUrl": { - "type": "string", - "minLength": 1 - }, - "notificationId": { - "type": "string", - "minLength": 1 - }, - "larkId": { - "type": "string", - "minLength": 1 - }, - "organizationId": { - "type": "string" - } - }, - "required": ["notificationId", "larkId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.testLarkConnection": { - "post": { - "operationId": "notification-testLarkConnection", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "webhookUrl": { - "type": "string", - "minLength": 1 - } - }, - "required": ["webhookUrl"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/notification.getEmailProviders": { - "get": { - "operationId": "notification-getEmailProviders", - "tags": ["notification"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/sshKey.create": { - "post": { - "operationId": "sshKey-create", - "tags": ["sshKey"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "privateKey": { - "type": "string" - }, - "publicKey": { - "type": "string" - }, - "organizationId": { - "type": "string" - } - }, - "required": [ - "name", - "privateKey", - "publicKey", - "organizationId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/sshKey.remove": { - "post": { - "operationId": "sshKey-remove", - "tags": ["sshKey"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "sshKeyId": { - "type": "string" - } - }, - "required": ["sshKeyId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/sshKey.one": { - "get": { - "operationId": "sshKey-one", - "tags": ["sshKey"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "sshKeyId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/sshKey.all": { - "get": { - "operationId": "sshKey-all", - "tags": ["sshKey"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/sshKey.generate": { - "post": { - "operationId": "sshKey-generate", - "tags": ["sshKey"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": ["rsa", "ed25519"] - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/sshKey.update": { - "post": { - "operationId": "sshKey-update", - "tags": ["sshKey"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "lastUsedAt": { - "type": "string", - "nullable": true - }, - "sshKeyId": { - "type": "string" - } - }, - "required": ["sshKeyId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitProvider.getAll": { - "get": { - "operationId": "gitProvider-getAll", - "tags": ["gitProvider"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitProvider.remove": { - "post": { - "operationId": "gitProvider-remove", - "tags": ["gitProvider"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "gitProviderId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["gitProviderId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.create": { - "post": { - "operationId": "gitea-create", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "giteaId": { - "type": "string" - }, - "giteaUrl": { - "type": "string", - "minLength": 1 - }, - "redirectUri": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "gitProviderId": { - "type": "string" - }, - "accessToken": { - "type": "string" - }, - "refreshToken": { - "type": "string" - }, - "expiresAt": { - "type": "number" - }, - "scopes": { - "type": "string" - }, - "lastAuthenticatedAt": { - "type": "number" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "giteaUsername": { - "type": "string" - }, - "organizationName": { - "type": "string" - } - }, - "required": ["giteaUrl", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.one": { - "get": { - "operationId": "gitea-one", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "giteaId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.giteaProviders": { - "get": { - "operationId": "gitea-giteaProviders", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.getGiteaRepositories": { - "get": { - "operationId": "gitea-getGiteaRepositories", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "giteaId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.getGiteaBranches": { - "get": { - "operationId": "gitea-getGiteaBranches", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "owner", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "repositoryName", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "giteaId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.testConnection": { - "post": { - "operationId": "gitea-testConnection", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "giteaId": { - "type": "string" - }, - "organizationName": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.update": { - "post": { - "operationId": "gitea-update", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "giteaId": { - "type": "string", - "minLength": 1 - }, - "giteaUrl": { - "type": "string", - "minLength": 1 - }, - "redirectUri": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "gitProviderId": { - "type": "string" - }, - "accessToken": { - "type": "string" - }, - "refreshToken": { - "type": "string" - }, - "expiresAt": { - "type": "number" - }, - "scopes": { - "type": "string" - }, - "lastAuthenticatedAt": { - "type": "number" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "giteaUsername": { - "type": "string" - }, - "organizationName": { - "type": "string" - } - }, - "required": ["giteaId", "giteaUrl", "gitProviderId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitea.getGiteaUrl": { - "get": { - "operationId": "gitea-getGiteaUrl", - "tags": ["gitea"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "giteaId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/bitbucket.create": { - "post": { - "operationId": "bitbucket-create", - "tags": ["bitbucket"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "bitbucketId": { - "type": "string" - }, - "bitbucketUsername": { - "type": "string" - }, - "bitbucketEmail": { - "type": "string", - "format": "email" - }, - "appPassword": { - "type": "string" - }, - "apiToken": { - "type": "string" - }, - "bitbucketWorkspaceName": { - "type": "string" - }, - "gitProviderId": { - "type": "string" - }, - "authId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": ["authId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/bitbucket.one": { - "get": { - "operationId": "bitbucket-one", - "tags": ["bitbucket"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "bitbucketId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/bitbucket.bitbucketProviders": { - "get": { - "operationId": "bitbucket-bitbucketProviders", - "tags": ["bitbucket"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/bitbucket.getBitbucketRepositories": { - "get": { - "operationId": "bitbucket-getBitbucketRepositories", - "tags": ["bitbucket"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "bitbucketId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/bitbucket.getBitbucketBranches": { - "get": { - "operationId": "bitbucket-getBitbucketBranches", - "tags": ["bitbucket"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "owner", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "repo", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "bitbucketId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/bitbucket.testConnection": { - "post": { - "operationId": "bitbucket-testConnection", - "tags": ["bitbucket"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "bitbucketId": { - "type": "string", - "minLength": 1 - }, - "bitbucketUsername": { - "type": "string" - }, - "bitbucketEmail": { - "type": "string", - "format": "email" - }, - "workspaceName": { - "type": "string" - }, - "apiToken": { - "type": "string" - }, - "appPassword": { - "type": "string" - } - }, - "required": ["bitbucketId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/bitbucket.update": { - "post": { - "operationId": "bitbucket-update", - "tags": ["bitbucket"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "bitbucketId": { - "type": "string", - "minLength": 1 - }, - "bitbucketUsername": { - "type": "string" - }, - "bitbucketEmail": { - "type": "string", - "format": "email" - }, - "appPassword": { - "type": "string" - }, - "apiToken": { - "type": "string" - }, - "bitbucketWorkspaceName": { - "type": "string" - }, - "gitProviderId": { - "type": "string" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "organizationId": { - "type": "string" - } - }, - "required": ["bitbucketId", "gitProviderId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitlab.create": { - "post": { - "operationId": "gitlab-create", - "tags": ["gitlab"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "gitlabId": { - "type": "string" - }, - "gitlabUrl": { - "type": "string", - "minLength": 1 - }, - "applicationId": { - "type": "string" - }, - "redirectUri": { - "type": "string" - }, - "secret": { - "type": "string" - }, - "accessToken": { - "type": "string", - "nullable": true - }, - "refreshToken": { - "type": "string", - "nullable": true - }, - "groupName": { - "type": "string" - }, - "expiresAt": { - "type": "number", - "nullable": true - }, - "gitProviderId": { - "type": "string" - }, - "authId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": ["gitlabUrl", "authId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitlab.one": { - "get": { - "operationId": "gitlab-one", - "tags": ["gitlab"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "gitlabId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitlab.gitlabProviders": { - "get": { - "operationId": "gitlab-gitlabProviders", - "tags": ["gitlab"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitlab.getGitlabRepositories": { - "get": { - "operationId": "gitlab-getGitlabRepositories", - "tags": ["gitlab"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "gitlabId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitlab.getGitlabBranches": { - "get": { - "operationId": "gitlab-getGitlabBranches", - "tags": ["gitlab"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "id", - "in": "query", - "required": false, - "schema": { - "type": "number" - } - }, - { - "name": "owner", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "repo", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "gitlabId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitlab.testConnection": { - "post": { - "operationId": "gitlab-testConnection", - "tags": ["gitlab"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "gitlabId": { - "type": "string" - }, - "groupName": { - "type": "string" - } - }, - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/gitlab.update": { - "post": { - "operationId": "gitlab-update", - "tags": ["gitlab"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "gitlabId": { - "type": "string", - "minLength": 1 - }, - "gitlabUrl": { - "type": "string", - "minLength": 1 - }, - "applicationId": { - "type": "string" - }, - "redirectUri": { - "type": "string" - }, - "secret": { - "type": "string" - }, - "accessToken": { - "type": "string", - "nullable": true - }, - "refreshToken": { - "type": "string", - "nullable": true - }, - "groupName": { - "type": "string" - }, - "expiresAt": { - "type": "number", - "nullable": true - }, - "gitProviderId": { - "type": "string" - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": ["gitlabId", "gitlabUrl", "gitProviderId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/github.one": { - "get": { - "operationId": "github-one", - "tags": ["github"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "githubId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/github.getGithubRepositories": { - "get": { - "operationId": "github-getGithubRepositories", - "tags": ["github"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "githubId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/github.getGithubBranches": { - "get": { - "operationId": "github-getGithubBranches", - "tags": ["github"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "repo", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "owner", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "githubId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/github.githubProviders": { - "get": { - "operationId": "github-githubProviders", - "tags": ["github"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/github.testConnection": { - "post": { - "operationId": "github-testConnection", - "tags": ["github"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "githubId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["githubId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/github.update": { - "post": { - "operationId": "github-update", - "tags": ["github"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "githubId": { - "type": "string", - "minLength": 1 - }, - "githubAppName": { - "type": "string", - "minLength": 1 - }, - "githubAppId": { - "type": "number", - "nullable": true - }, - "githubClientId": { - "type": "string", - "nullable": true - }, - "githubClientSecret": { - "type": "string", - "nullable": true - }, - "githubInstallationId": { - "type": "string", - "nullable": true - }, - "githubPrivateKey": { - "type": "string", - "nullable": true - }, - "githubWebhookSecret": { - "type": "string", - "nullable": true - }, - "gitProviderId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "githubId", - "githubAppName", - "gitProviderId", - "name" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.create": { - "post": { - "operationId": "server-create", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "ipAddress": { - "type": "string" - }, - "port": { - "type": "number" - }, - "username": { - "type": "string" - }, - "sshKeyId": { - "type": "string", - "nullable": true - }, - "serverType": { - "type": "string", - "enum": ["deploy", "build"] - } - }, - "required": [ - "name", - "ipAddress", - "port", - "username", - "sshKeyId", - "serverType" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.one": { - "get": { - "operationId": "server-one", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.getDefaultCommand": { - "get": { - "operationId": "server-getDefaultCommand", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.all": { - "get": { - "operationId": "server-all", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.count": { - "get": { - "operationId": "server-count", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.withSSHKey": { - "get": { - "operationId": "server-withSSHKey", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.buildServers": { - "get": { - "operationId": "server-buildServers", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.setup": { - "post": { - "operationId": "server-setup", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["serverId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.validate": { - "get": { - "operationId": "server-validate", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.security": { - "get": { - "operationId": "server-security", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.setupMonitoring": { - "post": { - "operationId": "server-setupMonitoring", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string", - "minLength": 1 - }, - "metricsConfig": { - "type": "object", - "properties": { - "server": { - "type": "object", - "properties": { - "refreshRate": { - "type": "number", - "minimum": 2 - }, - "port": { - "type": "number", - "minimum": 1 - }, - "token": { - "type": "string" - }, - "urlCallback": { - "type": "string", - "format": "uri" - }, - "retentionDays": { - "type": "number", - "minimum": 1 - }, - "cronJob": { - "type": "string", - "minLength": 1 - }, - "thresholds": { - "type": "object", - "properties": { - "cpu": { - "type": "number", - "minimum": 0 - }, - "memory": { - "type": "number", - "minimum": 0 - } - }, - "required": ["cpu", "memory"], - "additionalProperties": false - } - }, - "required": [ - "refreshRate", - "port", - "token", - "urlCallback", - "retentionDays", - "cronJob", - "thresholds" - ], - "additionalProperties": false - }, - "containers": { - "type": "object", - "properties": { - "refreshRate": { - "type": "number", - "minimum": 2 - }, - "services": { - "type": "object", - "properties": { - "include": { - "type": "array", - "items": { - "type": "string" - } - }, - "exclude": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - } - }, - "required": ["refreshRate", "services"], - "additionalProperties": false - } - }, - "required": ["server", "containers"], - "additionalProperties": false - } - }, - "required": ["serverId", "metricsConfig"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.remove": { - "post": { - "operationId": "server-remove", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "serverId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["serverId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.update": { - "post": { - "operationId": "server-update", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string", - "minLength": 1 - }, - "ipAddress": { - "type": "string" - }, - "port": { - "type": "number" - }, - "username": { - "type": "string" - }, - "sshKeyId": { - "type": "string", - "nullable": true - }, - "serverType": { - "type": "string", - "enum": ["deploy", "build"] - }, - "command": { - "type": "string" - } - }, - "required": [ - "name", - "serverId", - "ipAddress", - "port", - "username", - "sshKeyId", - "serverType" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.publicIp": { - "get": { - "operationId": "server-publicIp", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.getServerTime": { - "get": { - "operationId": "server-getServerTime", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/server.getServerMetrics": { - "get": { - "operationId": "server-getServerMetrics", - "tags": ["server"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "url", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "dataPoints", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/stripe.getProducts": { - "get": { - "operationId": "stripe-getProducts", - "tags": ["stripe"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/stripe.createCheckoutSession": { - "post": { - "operationId": "stripe-createCheckoutSession", - "tags": ["stripe"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "productId": { - "type": "string" - }, - "serverQuantity": { - "type": "number", - "minimum": 1 - }, - "isAnnual": { - "type": "boolean" - } - }, - "required": ["productId", "serverQuantity", "isAnnual"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/stripe.createCustomerPortalSession": { - "post": { - "operationId": "stripe-createCustomerPortalSession", - "tags": ["stripe"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/stripe.canCreateMoreServers": { - "get": { - "operationId": "stripe-canCreateMoreServers", - "tags": ["stripe"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/swarm.getNodes": { - "get": { - "operationId": "swarm-getNodes", - "tags": ["swarm"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/swarm.getNodeInfo": { - "get": { - "operationId": "swarm-getNodeInfo", - "tags": ["swarm"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "nodeId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/swarm.getNodeApps": { - "get": { - "operationId": "swarm-getNodeApps", - "tags": ["swarm"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "serverId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.one": { - "get": { - "operationId": "ai-one", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "aiId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.getModels": { - "get": { - "operationId": "ai-getModels", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "apiUrl", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "apiKey", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.create": { - "post": { - "operationId": "ai-create", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "apiUrl": { - "type": "string", - "format": "uri" - }, - "apiKey": { - "type": "string" - }, - "model": { - "type": "string", - "minLength": 1 - }, - "isEnabled": { - "type": "boolean" - } - }, - "required": ["name", "apiUrl", "apiKey", "model", "isEnabled"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.update": { - "post": { - "operationId": "ai-update", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "aiId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "apiUrl": { - "type": "string", - "format": "uri" - }, - "apiKey": { - "type": "string" - }, - "model": { - "type": "string", - "minLength": 1 - }, - "isEnabled": { - "type": "boolean" - }, - "createdAt": { - "type": "string" - } - }, - "required": ["aiId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.getAll": { - "get": { - "operationId": "ai-getAll", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.get": { - "get": { - "operationId": "ai-get", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "aiId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.delete": { - "post": { - "operationId": "ai-delete", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "aiId": { - "type": "string" - } - }, - "required": ["aiId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.suggest": { - "post": { - "operationId": "ai-suggest", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "aiId": { - "type": "string" - }, - "input": { - "type": "string" - }, - "serverId": { - "type": "string" - } - }, - "required": ["aiId", "input"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/ai.deploy": { - "post": { - "operationId": "ai-deploy", - "tags": ["ai"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "environmentId": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "string", - "minLength": 1 - }, - "dockerCompose": { - "type": "string", - "minLength": 1 - }, - "envVariables": { - "type": "string" - }, - "serverId": { - "type": "string" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string" - }, - "domains": { - "type": "array", - "items": { - "type": "object", - "properties": { - "host": { - "type": "string", - "minLength": 1 - }, - "port": { - "type": "number", - "minimum": 1 - }, - "serviceName": { - "type": "string", - "minLength": 1 - } - }, - "required": ["host", "port", "serviceName"], - "additionalProperties": false - } - }, - "configFiles": { - "type": "array", - "items": { - "type": "object", - "properties": { - "filePath": { - "type": "string", - "minLength": 1 - }, - "content": { - "type": "string", - "minLength": 1 - } - }, - "required": ["filePath", "content"], - "additionalProperties": false - } - } - }, - "required": [ - "environmentId", - "id", - "dockerCompose", - "envVariables", - "name", - "description" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.create": { - "post": { - "operationId": "organization-create", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "logo": { - "type": "string" - } - }, - "required": ["name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.all": { - "get": { - "operationId": "organization-all", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.one": { - "get": { - "operationId": "organization-one", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "organizationId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.update": { - "post": { - "operationId": "organization-update", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "organizationId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "logo": { - "type": "string" - } - }, - "required": ["organizationId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.delete": { - "post": { - "operationId": "organization-delete", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "organizationId": { - "type": "string" - } - }, - "required": ["organizationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.allInvitations": { - "get": { - "operationId": "organization-allInvitations", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.removeInvitation": { - "post": { - "operationId": "organization-removeInvitation", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "invitationId": { - "type": "string" - } - }, - "required": ["invitationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/organization.setDefault": { - "post": { - "operationId": "organization-setDefault", - "tags": ["organization"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["organizationId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/schedule.create": { - "post": { - "operationId": "schedule-create", - "tags": ["schedule"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "scheduleId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "cronExpression": { - "type": "string" - }, - "appName": { - "type": "string" - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "shellType": { - "type": "string", - "enum": ["bash", "sh"] - }, - "scheduleType": { - "type": "string", - "enum": [ - "application", - "compose", - "server", - "dokploy-server" - ] - }, - "command": { - "type": "string" - }, - "script": { - "type": "string", - "nullable": true - }, - "applicationId": { - "type": "string", - "nullable": true - }, - "composeId": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string", - "nullable": true - }, - "userId": { - "type": "string", - "nullable": true - }, - "enabled": { - "type": "boolean" - }, - "createdAt": { - "type": "string" - } - }, - "required": ["name", "cronExpression", "command"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/schedule.update": { - "post": { - "operationId": "schedule-update", - "tags": ["schedule"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "scheduleId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string" - }, - "cronExpression": { - "type": "string" - }, - "appName": { - "type": "string" - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "shellType": { - "type": "string", - "enum": ["bash", "sh"] - }, - "scheduleType": { - "type": "string", - "enum": [ - "application", - "compose", - "server", - "dokploy-server" - ] - }, - "command": { - "type": "string" - }, - "script": { - "type": "string", - "nullable": true - }, - "applicationId": { - "type": "string", - "nullable": true - }, - "composeId": { - "type": "string", - "nullable": true - }, - "serverId": { - "type": "string", - "nullable": true - }, - "userId": { - "type": "string", - "nullable": true - }, - "enabled": { - "type": "boolean" - }, - "createdAt": { - "type": "string" - } - }, - "required": ["scheduleId", "name", "cronExpression", "command"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/schedule.delete": { - "post": { - "operationId": "schedule-delete", - "tags": ["schedule"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "scheduleId": { - "type": "string" - } - }, - "required": ["scheduleId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/schedule.list": { - "get": { - "operationId": "schedule-list", - "tags": ["schedule"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "id", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "scheduleType", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": ["application", "compose", "server", "dokploy-server"] - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/schedule.one": { - "get": { - "operationId": "schedule-one", - "tags": ["schedule"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "scheduleId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/schedule.runManually": { - "post": { - "operationId": "schedule-runManually", - "tags": ["schedule"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "scheduleId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["scheduleId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/rollback.delete": { - "post": { - "operationId": "rollback-delete", - "tags": ["rollback"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "rollbackId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["rollbackId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/rollback.rollback": { - "post": { - "operationId": "rollback-rollback", - "tags": ["rollback"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "rollbackId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["rollbackId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/volumeBackups.list": { - "get": { - "operationId": "volumeBackups-list", - "tags": ["volumeBackups"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "id", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - }, - { - "name": "volumeBackupType", - "in": "query", - "required": true, - "schema": { - "type": "string", - "enum": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/volumeBackups.create": { - "post": { - "operationId": "volumeBackups-create", - "tags": ["volumeBackups"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "volumeName": { - "type": "string" - }, - "prefix": { - "type": "string" - }, - "serviceType": { - "type": "string", - "enum": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "appName": { - "type": "string" - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "turnOff": { - "type": "boolean" - }, - "cronExpression": { - "type": "string" - }, - "keepLatestCount": { - "type": "number", - "nullable": true - }, - "enabled": { - "type": "boolean", - "nullable": true - }, - "applicationId": { - "type": "string", - "nullable": true - }, - "postgresId": { - "type": "string", - "nullable": true - }, - "mariadbId": { - "type": "string", - "nullable": true - }, - "mongoId": { - "type": "string", - "nullable": true - }, - "mysqlId": { - "type": "string", - "nullable": true - }, - "redisId": { - "type": "string", - "nullable": true - }, - "composeId": { - "type": "string", - "nullable": true - }, - "createdAt": { - "type": "string" - }, - "destinationId": { - "type": "string" - } - }, - "required": [ - "name", - "volumeName", - "prefix", - "cronExpression", - "destinationId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/volumeBackups.one": { - "get": { - "operationId": "volumeBackups-one", - "tags": ["volumeBackups"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "volumeBackupId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/volumeBackups.delete": { - "post": { - "operationId": "volumeBackups-delete", - "tags": ["volumeBackups"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "volumeBackupId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["volumeBackupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/volumeBackups.update": { - "post": { - "operationId": "volumeBackups-update", - "tags": ["volumeBackups"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "volumeName": { - "type": "string" - }, - "prefix": { - "type": "string" - }, - "serviceType": { - "type": "string", - "enum": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "appName": { - "type": "string" - }, - "serviceName": { - "type": "string", - "nullable": true - }, - "turnOff": { - "type": "boolean" - }, - "cronExpression": { - "type": "string" - }, - "keepLatestCount": { - "type": "number", - "nullable": true - }, - "enabled": { - "type": "boolean", - "nullable": true - }, - "applicationId": { - "type": "string", - "nullable": true - }, - "postgresId": { - "type": "string", - "nullable": true - }, - "mariadbId": { - "type": "string", - "nullable": true - }, - "mongoId": { - "type": "string", - "nullable": true - }, - "mysqlId": { - "type": "string", - "nullable": true - }, - "redisId": { - "type": "string", - "nullable": true - }, - "composeId": { - "type": "string", - "nullable": true - }, - "createdAt": { - "type": "string" - }, - "destinationId": { - "type": "string" - }, - "volumeBackupId": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "name", - "volumeName", - "prefix", - "cronExpression", - "destinationId", - "volumeBackupId" - ], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/volumeBackups.runManually": { - "post": { - "operationId": "volumeBackups-runManually", - "tags": ["volumeBackups"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "volumeBackupId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["volumeBackupId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/environment.create": { - "post": { - "operationId": "environment-create", - "tags": ["environment"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "projectId": { - "type": "string" - } - }, - "required": ["name", "projectId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/environment.one": { - "get": { - "operationId": "environment-one", - "tags": ["environment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "environmentId", - "in": "query", - "required": true, - "schema": { - "type": "string", - "minLength": 1 - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/environment.byProjectId": { - "get": { - "operationId": "environment-byProjectId", - "tags": ["environment"], - "security": [ - { - "Authorization": [] - } - ], - "parameters": [ - { - "name": "projectId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/environment.remove": { - "post": { - "operationId": "environment-remove", - "tags": ["environment"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "environmentId": { - "type": "string", - "minLength": 1 - } - }, - "required": ["environmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/environment.update": { - "post": { - "operationId": "environment-update", - "tags": ["environment"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "environmentId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - }, - "createdAt": { - "type": "string" - }, - "env": { - "type": "string" - }, - "projectId": { - "type": "string" - } - }, - "required": ["environmentId"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - }, - "/environment.duplicate": { - "post": { - "operationId": "environment-duplicate", - "tags": ["environment"], - "security": [ - { - "Authorization": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "environmentId": { - "type": "string", - "minLength": 1 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "nullable": true - } - }, - "required": ["environmentId", "name"], - "additionalProperties": false - } - } - } - }, - "parameters": [], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": {} - } - }, - "default": { - "$ref": "#/components/responses/error" - } - } - } - } - }, - "components": { - "securitySchemes": { - "apiKey": { - "type": "apiKey", - "in": "header", - "name": "x-api-key", - "description": "API key authentication. Generate an API key from your Dokploy dashboard under Settings > API Keys." - } - }, - "responses": { - "error": { - "description": "Error response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "code": { - "type": "string" - }, - "issues": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"], - "additionalProperties": false - } - } - }, - "required": ["message", "code"], - "additionalProperties": false - } - } - } - } - } - }, - "tags": [ - { - "name": "admin" - }, - { - "name": "docker" - }, - { - "name": "compose" - }, - { - "name": "registry" - }, - { - "name": "cluster" - }, - { - "name": "user" - }, - { - "name": "domain" - }, - { - "name": "destination" - }, - { - "name": "backup" - }, - { - "name": "deployment" - }, - { - "name": "mounts" - }, - { - "name": "certificates" - }, - { - "name": "settings" - }, - { - "name": "security" - }, - { - "name": "redirects" - }, - { - "name": "port" - }, - { - "name": "project" - }, - { - "name": "application" - }, - { - "name": "mysql" - }, - { - "name": "postgres" - }, - { - "name": "redis" - }, - { - "name": "mongo" - }, - { - "name": "mariadb" - }, - { - "name": "sshRouter" - }, - { - "name": "gitProvider" - }, - { - "name": "bitbucket" - }, - { - "name": "github" - }, - { - "name": "gitlab" - }, - { - "name": "gitea" - }, - { - "name": "server" - }, - { - "name": "swarm" - }, - { - "name": "ai" - }, - { - "name": "organization" - }, - { - "name": "schedule" - }, - { - "name": "rollback" - }, - { - "name": "volumeBackups" - }, - { - "name": "environment" - } - ], - "externalDocs": { - "description": "Full documentation", - "url": "https://docs.dokploy.com" - }, - "security": [ - { - "apiKey": [] - } - ] -} + "openapi": "3.0.3", + "info": { + "title": "Dokploy API", + "description": "Complete API documentation for Dokploy - Deploy applications, manage databases, and orchestrate your infrastructure. This API allows you to programmatically manage all aspects of your Dokploy instance.", + "version": "1.0.0", + "contact": { + "name": "Dokploy Team", + "url": "https://dokploy.com" + }, + "license": { + "name": "Apache 2.0", + "url": "https://github.com/dokploy/dokploy/blob/canary/LICENSE" + } + }, + "servers": [ + { + "url": "https://your-dokploy-instance.com/api" + } + ], + "paths": { + "/admin.setupMonitoring": { + "post": { + "operationId": "admin-setupMonitoring", + "tags": [ + "admin" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "metricsConfig": { + "type": "object", + "properties": { + "server": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number", + "minimum": 2 + }, + "port": { + "type": "number", + "minimum": 1 + }, + "token": { + "type": "string" + }, + "urlCallback": { + "type": "string", + "format": "uri" + }, + "retentionDays": { + "type": "number", + "minimum": 1 + }, + "cronJob": { + "type": "string", + "minLength": 1 + }, + "thresholds": { + "type": "object", + "properties": { + "cpu": { + "type": "number", + "minimum": 0 + }, + "memory": { + "type": "number", + "minimum": 0 + } + }, + "required": [ + "cpu", + "memory" + ], + "additionalProperties": false + } + }, + "required": [ + "refreshRate", + "port", + "token", + "urlCallback", + "retentionDays", + "cronJob", + "thresholds" + ], + "additionalProperties": false + }, + "containers": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number", + "minimum": 2 + }, + "services": { + "type": "object", + "properties": { + "include": { + "type": "array", + "items": { + "type": "string" + } + }, + "exclude": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "required": [ + "refreshRate", + "services" + ], + "additionalProperties": false + } + }, + "required": [ + "server", + "containers" + ], + "additionalProperties": false + } + }, + "required": [ + "metricsConfig" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/docker.getContainers": { + "get": { + "operationId": "docker-getContainers", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/docker.restartContainer": { + "post": { + "operationId": "docker-restartContainer", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "containerId": { + "type": "string", + "minLength": 1, + "pattern": "^[a-zA-Z0-9.\\-_]+$" + } + }, + "required": [ + "containerId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/docker.getConfig": { + "get": { + "operationId": "docker-getConfig", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "containerId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1, + "pattern": "^[a-zA-Z0-9.\\-_]+$" + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/docker.getContainersByAppNameMatch": { + "get": { + "operationId": "docker-getContainersByAppNameMatch", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "appType", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "enum": [ + "stack" + ] + }, + { + "type": "string", + "enum": [ + "docker-compose" + ] + } + ] + } + }, + { + "name": "appName", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1, + "pattern": "^[a-zA-Z0-9.\\-_]+$" + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/docker.getContainersByAppLabel": { + "get": { + "operationId": "docker-getContainersByAppLabel", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "appName", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1, + "pattern": "^[a-zA-Z0-9.\\-_]+$" + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ + "standalone", + "swarm" + ] + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/docker.getStackContainersByAppName": { + "get": { + "operationId": "docker-getStackContainersByAppName", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "appName", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1, + "pattern": "^[a-zA-Z0-9.\\-_]+$" + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/docker.getServiceContainersByAppName": { + "get": { + "operationId": "docker-getServiceContainersByAppName", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "appName", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1, + "pattern": "^[a-zA-Z0-9.\\-_]+$" + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/project.create": { + "post": { + "operationId": "project-create", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "env": { + "type": "string" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/project.one": { + "get": { + "operationId": "project-one", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "projectId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/project.all": { + "get": { + "operationId": "project-all", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/project.remove": { + "post": { + "operationId": "project-remove", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "projectId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/project.update": { + "post": { + "operationId": "project-update", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "env": { + "type": "string" + } + }, + "required": [ + "projectId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/project.duplicate": { + "post": { + "operationId": "project-duplicate", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sourceEnvironmentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "includeServices": { + "type": "boolean", + "default": true + }, + "selectedServices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "application", + "postgres", + "mariadb", + "mongo", + "mysql", + "redis", + "compose" + ] + } + }, + "required": [ + "id", + "type" + ], + "additionalProperties": false + } + }, + "duplicateInSameProject": { + "type": "boolean", + "default": false + } + }, + "required": [ + "sourceEnvironmentId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.create": { + "post": { + "operationId": "application-create", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "environmentId": { + "type": "string" + }, + "serverId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "name", + "environmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.one": { + "get": { + "operationId": "application-one", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.reload": { + "post": { + "operationId": "application-reload", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appName": { + "type": "string" + }, + "applicationId": { + "type": "string" + } + }, + "required": [ + "appName", + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.delete": { + "post": { + "operationId": "application-delete", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.stop": { + "post": { + "operationId": "application-stop", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.start": { + "post": { + "operationId": "application-start", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.redeploy": { + "post": { + "operationId": "application-redeploy", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string", + "minLength": 1 + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveEnvironment": { + "post": { + "operationId": "application-saveEnvironment", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "env": { + "type": "string", + "nullable": true + }, + "buildArgs": { + "type": "string", + "nullable": true + }, + "buildSecrets": { + "type": "string", + "nullable": true + }, + "createEnvFile": { + "type": "boolean" + } + }, + "required": [ + "applicationId", + "createEnvFile" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveBuildType": { + "post": { + "operationId": "application-saveBuildType", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "buildType": { + "type": "string", + "enum": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "dockerfile": { + "type": "string", + "nullable": true + }, + "dockerContextPath": { + "type": "string", + "nullable": true + }, + "dockerBuildStage": { + "type": "string", + "nullable": true + }, + "herokuVersion": { + "type": "string", + "nullable": true + }, + "railpackVersion": { + "type": "string", + "nullable": true + }, + "publishDirectory": { + "type": "string", + "nullable": true + }, + "isStaticSpa": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "applicationId", + "buildType", + "dockerContextPath", + "dockerBuildStage" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveGithubProvider": { + "post": { + "operationId": "application-saveGithubProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "repository": { + "type": "string", + "nullable": true + }, + "branch": { + "type": "string", + "nullable": true + }, + "owner": { + "type": "string", + "nullable": true + }, + "buildPath": { + "type": "string", + "nullable": true + }, + "githubId": { + "type": "string", + "nullable": true + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "enableSubmodules": { + "type": "boolean" + }, + "triggerType": { + "type": "string", + "enum": [ + "push", + "tag" + ], + "default": "push" + } + }, + "required": [ + "applicationId", + "owner", + "githubId", + "enableSubmodules" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveGitlabProvider": { + "post": { + "operationId": "application-saveGitlabProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "gitlabBranch": { + "type": "string", + "nullable": true + }, + "gitlabBuildPath": { + "type": "string", + "nullable": true + }, + "gitlabOwner": { + "type": "string", + "nullable": true + }, + "gitlabRepository": { + "type": "string", + "nullable": true + }, + "gitlabId": { + "type": "string", + "nullable": true + }, + "gitlabProjectId": { + "type": "number", + "nullable": true + }, + "gitlabPathNamespace": { + "type": "string", + "nullable": true + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "enableSubmodules": { + "type": "boolean" + } + }, + "required": [ + "applicationId", + "gitlabBranch", + "gitlabBuildPath", + "gitlabOwner", + "gitlabRepository", + "gitlabId", + "gitlabProjectId", + "gitlabPathNamespace", + "enableSubmodules" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveBitbucketProvider": { + "post": { + "operationId": "application-saveBitbucketProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketBranch": { + "type": "string", + "nullable": true + }, + "bitbucketBuildPath": { + "type": "string", + "nullable": true + }, + "bitbucketOwner": { + "type": "string", + "nullable": true + }, + "bitbucketRepository": { + "type": "string", + "nullable": true + }, + "bitbucketRepositorySlug": { + "type": "string", + "nullable": true + }, + "bitbucketId": { + "type": "string", + "nullable": true + }, + "applicationId": { + "type": "string" + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "enableSubmodules": { + "type": "boolean" + } + }, + "required": [ + "bitbucketBranch", + "bitbucketBuildPath", + "bitbucketOwner", + "bitbucketRepository", + "bitbucketRepositorySlug", + "bitbucketId", + "applicationId", + "enableSubmodules" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveGiteaProvider": { + "post": { + "operationId": "application-saveGiteaProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "giteaBranch": { + "type": "string", + "nullable": true + }, + "giteaBuildPath": { + "type": "string", + "nullable": true + }, + "giteaOwner": { + "type": "string", + "nullable": true + }, + "giteaRepository": { + "type": "string", + "nullable": true + }, + "giteaId": { + "type": "string", + "nullable": true + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "enableSubmodules": { + "type": "boolean" + } + }, + "required": [ + "applicationId", + "giteaBranch", + "giteaBuildPath", + "giteaOwner", + "giteaRepository", + "giteaId", + "enableSubmodules" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveDockerProvider": { + "post": { + "operationId": "application-saveDockerProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "dockerImage": { + "type": "string", + "nullable": true + }, + "applicationId": { + "type": "string" + }, + "username": { + "type": "string", + "nullable": true + }, + "password": { + "type": "string", + "nullable": true + }, + "registryUrl": { + "type": "string", + "nullable": true + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.saveGitProvider": { + "post": { + "operationId": "application-saveGitProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "customGitBranch": { + "type": "string", + "nullable": true + }, + "applicationId": { + "type": "string" + }, + "customGitBuildPath": { + "type": "string", + "nullable": true + }, + "customGitUrl": { + "type": "string", + "nullable": true + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "enableSubmodules": { + "type": "boolean" + }, + "customGitSSHKeyId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "applicationId", + "enableSubmodules" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.disconnectGitProvider": { + "post": { + "operationId": "application-disconnectGitProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.markRunning": { + "post": { + "operationId": "application-markRunning", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.update": { + "post": { + "operationId": "application-update", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "env": { + "type": "string", + "nullable": true + }, + "previewEnv": { + "type": "string", + "nullable": true + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "previewBuildArgs": { + "type": "string", + "nullable": true + }, + "previewBuildSecrets": { + "type": "string", + "nullable": true + }, + "previewLabels": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "previewWildcard": { + "type": "string", + "nullable": true + }, + "previewPort": { + "type": "number", + "nullable": true + }, + "previewHttps": { + "type": "boolean" + }, + "previewPath": { + "type": "string", + "nullable": true + }, + "previewCertificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "previewCustomCertResolver": { + "type": "string", + "nullable": true + }, + "previewLimit": { + "type": "number", + "nullable": true + }, + "isPreviewDeploymentsActive": { + "type": "boolean", + "nullable": true + }, + "previewRequireCollaboratorPermissions": { + "type": "boolean", + "nullable": true + }, + "rollbackActive": { + "type": "boolean", + "nullable": true + }, + "buildArgs": { + "type": "string", + "nullable": true + }, + "buildSecrets": { + "type": "string", + "nullable": true + }, + "memoryReservation": { + "type": "string", + "nullable": true + }, + "memoryLimit": { + "type": "string", + "nullable": true + }, + "cpuReservation": { + "type": "string", + "nullable": true + }, + "cpuLimit": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "enabled": { + "type": "boolean", + "nullable": true + }, + "subtitle": { + "type": "string", + "nullable": true + }, + "command": { + "type": "string", + "nullable": true + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "refreshToken": { + "type": "string", + "nullable": true + }, + "sourceType": { + "type": "string", + "enum": [ + "github", + "docker", + "git", + "gitlab", + "bitbucket", + "gitea", + "drop" + ] + }, + "cleanCache": { + "type": "boolean", + "nullable": true + }, + "repository": { + "type": "string", + "nullable": true + }, + "owner": { + "type": "string", + "nullable": true + }, + "branch": { + "type": "string", + "nullable": true + }, + "buildPath": { + "type": "string", + "nullable": true + }, + "triggerType": { + "type": "string", + "enum": [ + "push", + "tag" + ], + "nullable": true + }, + "autoDeploy": { + "type": "boolean", + "nullable": true + }, + "gitlabProjectId": { + "type": "number", + "nullable": true + }, + "gitlabRepository": { + "type": "string", + "nullable": true + }, + "gitlabOwner": { + "type": "string", + "nullable": true + }, + "gitlabBranch": { + "type": "string", + "nullable": true + }, + "gitlabBuildPath": { + "type": "string", + "nullable": true + }, + "gitlabPathNamespace": { + "type": "string", + "nullable": true + }, + "giteaRepository": { + "type": "string", + "nullable": true + }, + "giteaOwner": { + "type": "string", + "nullable": true + }, + "giteaBranch": { + "type": "string", + "nullable": true + }, + "giteaBuildPath": { + "type": "string", + "nullable": true + }, + "bitbucketRepository": { + "type": "string", + "nullable": true + }, + "bitbucketRepositorySlug": { + "type": "string", + "nullable": true + }, + "bitbucketOwner": { + "type": "string", + "nullable": true + }, + "bitbucketBranch": { + "type": "string", + "nullable": true + }, + "bitbucketBuildPath": { + "type": "string", + "nullable": true + }, + "username": { + "type": "string", + "nullable": true + }, + "password": { + "type": "string", + "nullable": true + }, + "dockerImage": { + "type": "string", + "nullable": true + }, + "registryUrl": { + "type": "string", + "nullable": true + }, + "customGitUrl": { + "type": "string", + "nullable": true + }, + "customGitBranch": { + "type": "string", + "nullable": true + }, + "customGitBuildPath": { + "type": "string", + "nullable": true + }, + "customGitSSHKeyId": { + "type": "string", + "nullable": true + }, + "enableSubmodules": { + "type": "boolean" + }, + "dockerfile": { + "type": "string", + "nullable": true + }, + "dockerContextPath": { + "type": "string", + "nullable": true + }, + "dockerBuildStage": { + "type": "string", + "nullable": true + }, + "dropBuildPath": { + "type": "string", + "nullable": true + }, + "healthCheckSwarm": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "restartPolicySwarm": { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "placementSwarm": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ], + "additionalProperties": false + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "updateConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "rollbackConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "modeSwarm": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false, + "nullable": true + }, + "labelsSwarm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "networkSwarm": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "nullable": true + }, + "stopGracePeriodSwarm": { + "type": "integer", + "nullable": true + }, + "endpointSpecSwarm": { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "replicas": { + "type": "number" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "buildType": { + "type": "string", + "enum": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "railpackVersion": { + "type": "string", + "nullable": true + }, + "herokuVersion": { + "type": "string", + "nullable": true + }, + "publishDirectory": { + "type": "string", + "nullable": true + }, + "isStaticSpa": { + "type": "boolean", + "nullable": true + }, + "createEnvFile": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "registryId": { + "type": "string", + "nullable": true + }, + "rollbackRegistryId": { + "type": "string", + "nullable": true + }, + "environmentId": { + "type": "string" + }, + "githubId": { + "type": "string", + "nullable": true + }, + "gitlabId": { + "type": "string", + "nullable": true + }, + "giteaId": { + "type": "string", + "nullable": true + }, + "bitbucketId": { + "type": "string", + "nullable": true + }, + "buildServerId": { + "type": "string", + "nullable": true + }, + "buildRegistryId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.refreshToken": { + "post": { + "operationId": "application-refreshToken", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.deploy": { + "post": { + "operationId": "application-deploy", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string", + "minLength": 1 + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.cleanQueues": { + "post": { + "operationId": "application-cleanQueues", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.killBuild": { + "post": { + "operationId": "application-killBuild", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.readTraefikConfig": { + "get": { + "operationId": "application-readTraefikConfig", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.updateTraefikConfig": { + "post": { + "operationId": "application-updateTraefikConfig", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "traefikConfig": { + "type": "string" + } + }, + "required": [ + "applicationId", + "traefikConfig" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.readAppMonitoring": { + "get": { + "operationId": "application-readAppMonitoring", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "appName", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.move": { + "post": { + "operationId": "application-move", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "applicationId", + "targetEnvironmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/application.cancelDeployment": { + "post": { + "operationId": "application-cancelDeployment", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.create": { + "post": { + "operationId": "mysql-create", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "dockerImage": { + "type": "string", + "default": "mysql:8" + }, + "environmentId": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "databaseName": { + "type": "string", + "minLength": 1 + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "databaseRootPassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "serverId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "name", + "appName", + "environmentId", + "databaseName", + "databaseUser", + "databasePassword", + "databaseRootPassword" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.one": { + "get": { + "operationId": "mysql-one", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "mysqlId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.start": { + "post": { + "operationId": "mysql-start", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.stop": { + "post": { + "operationId": "mysql-stop", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.saveExternalPort": { + "post": { + "operationId": "mysql-saveExternalPort", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "externalPort": { + "type": "number", + "nullable": true + } + }, + "required": [ + "mysqlId", + "externalPort" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.deploy": { + "post": { + "operationId": "mysql-deploy", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.changeStatus": { + "post": { + "operationId": "mysql-changeStatus", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "mysqlId", + "applicationStatus" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.reload": { + "post": { + "operationId": "mysql-reload", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "appName": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "mysqlId", + "appName" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.remove": { + "post": { + "operationId": "mysql-remove", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.saveEnvironment": { + "post": { + "operationId": "mysql-saveEnvironment", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "env": { + "type": "string", + "nullable": true + } + }, + "required": [ + "mysqlId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.update": { + "post": { + "operationId": "mysql-update", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "databaseName": { + "type": "string", + "minLength": 1 + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "databaseRootPassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "dockerImage": { + "type": "string", + "default": "mysql:8" + }, + "command": { + "type": "string", + "nullable": true + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "env": { + "type": "string", + "nullable": true + }, + "memoryReservation": { + "type": "string", + "nullable": true + }, + "memoryLimit": { + "type": "string", + "nullable": true + }, + "cpuReservation": { + "type": "string", + "nullable": true + }, + "cpuLimit": { + "type": "string", + "nullable": true + }, + "externalPort": { + "type": "number", + "nullable": true + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "restartPolicySwarm": { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "placementSwarm": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ], + "additionalProperties": false + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "updateConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "rollbackConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "modeSwarm": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false, + "nullable": true + }, + "labelsSwarm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "networkSwarm": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "nullable": true + }, + "stopGracePeriodSwarm": { + "type": "integer", + "nullable": true + }, + "endpointSpecSwarm": { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.move": { + "post": { + "operationId": "mysql-move", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "mysqlId", + "targetEnvironmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mysql.rebuild": { + "post": { + "operationId": "mysql-rebuild", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.create": { + "post": { + "operationId": "postgres-create", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string" + }, + "databaseName": { + "type": "string", + "minLength": 1 + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "dockerImage": { + "type": "string", + "default": "postgres:18" + }, + "environmentId": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "name", + "appName", + "databaseName", + "databaseUser", + "databasePassword", + "environmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.one": { + "get": { + "operationId": "postgres-one", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "postgresId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.start": { + "post": { + "operationId": "postgres-start", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.stop": { + "post": { + "operationId": "postgres-stop", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.saveExternalPort": { + "post": { + "operationId": "postgres-saveExternalPort", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "externalPort": { + "type": "number", + "nullable": true + } + }, + "required": [ + "postgresId", + "externalPort" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.deploy": { + "post": { + "operationId": "postgres-deploy", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.changeStatus": { + "post": { + "operationId": "postgres-changeStatus", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "postgresId", + "applicationStatus" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.remove": { + "post": { + "operationId": "postgres-remove", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.saveEnvironment": { + "post": { + "operationId": "postgres-saveEnvironment", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "env": { + "type": "string", + "nullable": true + } + }, + "required": [ + "postgresId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.reload": { + "post": { + "operationId": "postgres-reload", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "appName": { + "type": "string" + } + }, + "required": [ + "postgresId", + "appName" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.update": { + "post": { + "operationId": "postgres-update", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string" + }, + "databaseName": { + "type": "string", + "minLength": 1 + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "description": { + "type": "string", + "nullable": true + }, + "dockerImage": { + "type": "string", + "default": "postgres:18" + }, + "command": { + "type": "string", + "nullable": true + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "env": { + "type": "string", + "nullable": true + }, + "memoryReservation": { + "type": "string", + "nullable": true + }, + "externalPort": { + "type": "number", + "nullable": true + }, + "memoryLimit": { + "type": "string", + "nullable": true + }, + "cpuReservation": { + "type": "string", + "nullable": true + }, + "cpuLimit": { + "type": "string", + "nullable": true + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "restartPolicySwarm": { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "placementSwarm": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ], + "additionalProperties": false + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "updateConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "rollbackConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "modeSwarm": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false, + "nullable": true + }, + "labelsSwarm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "networkSwarm": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "nullable": true + }, + "stopGracePeriodSwarm": { + "type": "integer", + "nullable": true + }, + "endpointSpecSwarm": { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.move": { + "post": { + "operationId": "postgres-move", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "postgresId", + "targetEnvironmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/postgres.rebuild": { + "post": { + "operationId": "postgres-rebuild", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.create": { + "post": { + "operationId": "redis-create", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string" + }, + "dockerImage": { + "type": "string", + "default": "redis:8" + }, + "environmentId": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "name", + "appName", + "databasePassword", + "environmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.one": { + "get": { + "operationId": "redis-one", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "redisId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.start": { + "post": { + "operationId": "redis-start", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.reload": { + "post": { + "operationId": "redis-reload", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "appName": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "redisId", + "appName" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.stop": { + "post": { + "operationId": "redis-stop", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.saveExternalPort": { + "post": { + "operationId": "redis-saveExternalPort", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "externalPort": { + "type": "number", + "nullable": true + } + }, + "required": [ + "redisId", + "externalPort" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.deploy": { + "post": { + "operationId": "redis-deploy", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.changeStatus": { + "post": { + "operationId": "redis-changeStatus", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "redisId", + "applicationStatus" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.remove": { + "post": { + "operationId": "redis-remove", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.saveEnvironment": { + "post": { + "operationId": "redis-saveEnvironment", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "env": { + "type": "string", + "nullable": true + } + }, + "required": [ + "redisId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.update": { + "post": { + "operationId": "redis-update", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "databasePassword": { + "type": "string" + }, + "dockerImage": { + "type": "string", + "default": "redis:8" + }, + "command": { + "type": "string", + "nullable": true + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "env": { + "type": "string", + "nullable": true + }, + "memoryReservation": { + "type": "string", + "nullable": true + }, + "memoryLimit": { + "type": "string", + "nullable": true + }, + "cpuReservation": { + "type": "string", + "nullable": true + }, + "cpuLimit": { + "type": "string", + "nullable": true + }, + "externalPort": { + "type": "number", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "restartPolicySwarm": { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "placementSwarm": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ], + "additionalProperties": false + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "updateConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "rollbackConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "modeSwarm": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false, + "nullable": true + }, + "labelsSwarm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "networkSwarm": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "nullable": true + }, + "stopGracePeriodSwarm": { + "type": "integer", + "nullable": true + }, + "endpointSpecSwarm": { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "replicas": { + "type": "number" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "redisId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.move": { + "post": { + "operationId": "redis-move", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "redisId", + "targetEnvironmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redis.rebuild": { + "post": { + "operationId": "redis-rebuild", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.create": { + "post": { + "operationId": "mongo-create", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "dockerImage": { + "type": "string", + "default": "mongo:15" + }, + "environmentId": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "serverId": { + "type": "string", + "nullable": true + }, + "replicaSets": { + "type": "boolean", + "default": false, + "nullable": true + } + }, + "required": [ + "name", + "appName", + "environmentId", + "databaseUser", + "databasePassword" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.one": { + "get": { + "operationId": "mongo-one", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "mongoId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.start": { + "post": { + "operationId": "mongo-start", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.stop": { + "post": { + "operationId": "mongo-stop", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.saveExternalPort": { + "post": { + "operationId": "mongo-saveExternalPort", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "externalPort": { + "type": "number", + "nullable": true + } + }, + "required": [ + "mongoId", + "externalPort" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.deploy": { + "post": { + "operationId": "mongo-deploy", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.changeStatus": { + "post": { + "operationId": "mongo-changeStatus", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "mongoId", + "applicationStatus" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.reload": { + "post": { + "operationId": "mongo-reload", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "appName": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "mongoId", + "appName" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.remove": { + "post": { + "operationId": "mongo-remove", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.saveEnvironment": { + "post": { + "operationId": "mongo-saveEnvironment", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "env": { + "type": "string", + "nullable": true + } + }, + "required": [ + "mongoId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.update": { + "post": { + "operationId": "mongo-update", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "dockerImage": { + "type": "string", + "default": "mongo:15" + }, + "command": { + "type": "string", + "nullable": true + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "env": { + "type": "string", + "nullable": true + }, + "memoryReservation": { + "type": "string", + "nullable": true + }, + "memoryLimit": { + "type": "string", + "nullable": true + }, + "cpuReservation": { + "type": "string", + "nullable": true + }, + "cpuLimit": { + "type": "string", + "nullable": true + }, + "externalPort": { + "type": "number", + "nullable": true + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "restartPolicySwarm": { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "placementSwarm": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ], + "additionalProperties": false + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "updateConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "rollbackConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "modeSwarm": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false, + "nullable": true + }, + "labelsSwarm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "networkSwarm": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "nullable": true + }, + "stopGracePeriodSwarm": { + "type": "integer", + "nullable": true + }, + "endpointSpecSwarm": { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "replicaSets": { + "type": "boolean", + "default": false, + "nullable": true + } + }, + "required": [ + "mongoId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.move": { + "post": { + "operationId": "mongo-move", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "mongoId", + "targetEnvironmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mongo.rebuild": { + "post": { + "operationId": "mongo-rebuild", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.create": { + "post": { + "operationId": "mariadb-create", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "dockerImage": { + "type": "string", + "default": "mariadb:6" + }, + "databaseRootPassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "environmentId": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "databaseName": { + "type": "string", + "minLength": 1 + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "serverId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "name", + "appName", + "databaseRootPassword", + "environmentId", + "databaseName", + "databaseUser", + "databasePassword" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.one": { + "get": { + "operationId": "mariadb-one", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "mariadbId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.start": { + "post": { + "operationId": "mariadb-start", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.stop": { + "post": { + "operationId": "mariadb-stop", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.saveExternalPort": { + "post": { + "operationId": "mariadb-saveExternalPort", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "externalPort": { + "type": "number", + "nullable": true + } + }, + "required": [ + "mariadbId", + "externalPort" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.deploy": { + "post": { + "operationId": "mariadb-deploy", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.changeStatus": { + "post": { + "operationId": "mariadb-changeStatus", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "mariadbId", + "applicationStatus" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.remove": { + "post": { + "operationId": "mariadb-remove", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.saveEnvironment": { + "post": { + "operationId": "mariadb-saveEnvironment", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "env": { + "type": "string", + "nullable": true + } + }, + "required": [ + "mariadbId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.reload": { + "post": { + "operationId": "mariadb-reload", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "appName": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "mariadbId", + "appName" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.update": { + "post": { + "operationId": "mariadb-update", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "databaseName": { + "type": "string", + "minLength": 1 + }, + "databaseUser": { + "type": "string", + "minLength": 1 + }, + "databasePassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "databaseRootPassword": { + "type": "string", + "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" + }, + "dockerImage": { + "type": "string", + "default": "mariadb:6" + }, + "command": { + "type": "string", + "nullable": true + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "env": { + "type": "string", + "nullable": true + }, + "memoryReservation": { + "type": "string", + "nullable": true + }, + "memoryLimit": { + "type": "string", + "nullable": true + }, + "cpuReservation": { + "type": "string", + "nullable": true + }, + "cpuLimit": { + "type": "string", + "nullable": true + }, + "externalPort": { + "type": "number", + "nullable": true + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "restartPolicySwarm": { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false, + "nullable": true + }, + "placementSwarm": { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ], + "additionalProperties": false + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "updateConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "rollbackConfigSwarm": { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false, + "nullable": true + }, + "modeSwarm": { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false, + "nullable": true + }, + "labelsSwarm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "networkSwarm": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "nullable": true + }, + "stopGracePeriodSwarm": { + "type": "integer", + "nullable": true + }, + "endpointSpecSwarm": { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "nullable": true + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.move": { + "post": { + "operationId": "mariadb-move", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "mariadbId", + "targetEnvironmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mariadb.rebuild": { + "post": { + "operationId": "mariadb-rebuild", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.create": { + "post": { + "operationId": "compose-create", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "environmentId": { + "type": "string" + }, + "composeType": { + "type": "string", + "enum": [ + "docker-compose", + "stack" + ] + }, + "appName": { + "type": "string" + }, + "serverId": { + "type": "string", + "nullable": true + }, + "composeFile": { + "type": "string" + } + }, + "required": [ + "name", + "environmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.one": { + "get": { + "operationId": "compose-one", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.update": { + "post": { + "operationId": "compose-update", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "appName": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "env": { + "type": "string", + "nullable": true + }, + "composeFile": { + "type": "string" + }, + "refreshToken": { + "type": "string", + "nullable": true + }, + "sourceType": { + "type": "string", + "enum": [ + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "raw" + ] + }, + "composeType": { + "type": "string", + "enum": [ + "docker-compose", + "stack" + ] + }, + "repository": { + "type": "string", + "nullable": true + }, + "owner": { + "type": "string", + "nullable": true + }, + "branch": { + "type": "string", + "nullable": true + }, + "autoDeploy": { + "type": "boolean", + "nullable": true + }, + "gitlabProjectId": { + "type": "number", + "nullable": true + }, + "gitlabRepository": { + "type": "string", + "nullable": true + }, + "gitlabOwner": { + "type": "string", + "nullable": true + }, + "gitlabBranch": { + "type": "string", + "nullable": true + }, + "gitlabPathNamespace": { + "type": "string", + "nullable": true + }, + "bitbucketRepository": { + "type": "string", + "nullable": true + }, + "bitbucketRepositorySlug": { + "type": "string", + "nullable": true + }, + "bitbucketOwner": { + "type": "string", + "nullable": true + }, + "bitbucketBranch": { + "type": "string", + "nullable": true + }, + "giteaRepository": { + "type": "string", + "nullable": true + }, + "giteaOwner": { + "type": "string", + "nullable": true + }, + "giteaBranch": { + "type": "string", + "nullable": true + }, + "customGitUrl": { + "type": "string", + "nullable": true + }, + "customGitBranch": { + "type": "string", + "nullable": true + }, + "customGitSSHKeyId": { + "type": "string", + "nullable": true + }, + "command": { + "type": "string" + }, + "enableSubmodules": { + "type": "boolean" + }, + "composePath": { + "type": "string", + "minLength": 1 + }, + "suffix": { + "type": "string" + }, + "randomize": { + "type": "boolean" + }, + "isolatedDeployment": { + "type": "boolean" + }, + "isolatedDeploymentsVolume": { + "type": "boolean" + }, + "triggerType": { + "type": "string", + "enum": [ + "push", + "tag" + ], + "nullable": true + }, + "composeStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "environmentId": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "watchPaths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "githubId": { + "type": "string", + "nullable": true + }, + "gitlabId": { + "type": "string", + "nullable": true + }, + "bitbucketId": { + "type": "string", + "nullable": true + }, + "giteaId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.delete": { + "post": { + "operationId": "compose-delete", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + }, + "deleteVolumes": { + "type": "boolean" + } + }, + "required": [ + "composeId", + "deleteVolumes" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.cleanQueues": { + "post": { + "operationId": "compose-cleanQueues", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.killBuild": { + "post": { + "operationId": "compose-killBuild", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.loadServices": { + "get": { + "operationId": "compose-loadServices", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "not": {} + }, + { + "type": "string", + "enum": [ + "fetch", + "cache" + ] + } + ], + "default": "cache" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.loadMountsByService": { + "get": { + "operationId": "compose-loadMountsByService", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "serviceName", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.fetchSourceType": { + "post": { + "operationId": "compose-fetchSourceType", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.randomizeCompose": { + "post": { + "operationId": "compose-randomizeCompose", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + }, + "suffix": { + "type": "string" + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.isolatedDeployment": { + "post": { + "operationId": "compose-isolatedDeployment", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + }, + "suffix": { + "type": "string" + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.getConvertedCompose": { + "get": { + "operationId": "compose-getConvertedCompose", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.deploy": { + "post": { + "operationId": "compose-deploy", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.redeploy": { + "post": { + "operationId": "compose-redeploy", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.stop": { + "post": { + "operationId": "compose-stop", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.start": { + "post": { + "operationId": "compose-start", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.getDefaultCommand": { + "get": { + "operationId": "compose-getDefaultCommand", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.refreshToken": { + "post": { + "operationId": "compose-refreshToken", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.deployTemplate": { + "post": { + "operationId": "compose-deployTemplate", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string" + }, + "serverId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "baseUrl": { + "type": "string" + } + }, + "required": [ + "environmentId", + "id" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.templates": { + "get": { + "operationId": "compose-templates", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "baseUrl", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.getTags": { + "get": { + "operationId": "compose-getTags", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "baseUrl", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.disconnectGitProvider": { + "post": { + "operationId": "compose-disconnectGitProvider", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.move": { + "post": { + "operationId": "compose-move", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "composeId", + "targetEnvironmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.processTemplate": { + "post": { + "operationId": "compose-processTemplate", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "base64": { + "type": "string" + }, + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "base64", + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.import": { + "post": { + "operationId": "compose-import", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "base64": { + "type": "string" + }, + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "base64", + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/compose.cancelDeployment": { + "post": { + "operationId": "compose-cancelDeployment", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "composeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.all": { + "get": { + "operationId": "user-all", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.one": { + "get": { + "operationId": "user-one", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "userId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.get": { + "get": { + "operationId": "user-get", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.haveRootAccess": { + "get": { + "operationId": "user-haveRootAccess", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.getBackups": { + "get": { + "operationId": "user-getBackups", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.getServerMetrics": { + "get": { + "operationId": "user-getServerMetrics", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.update": { + "post": { + "operationId": "user-update", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "isRegistered": { + "type": "boolean" + }, + "expirationDate": { + "type": "string" + }, + "createdAt2": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "twoFactorEnabled": { + "type": "boolean", + "nullable": true + }, + "email": { + "type": "string", + "format": "email", + "minLength": 1 + }, + "emailVerified": { + "type": "boolean" + }, + "image": { + "type": "string", + "nullable": true + }, + "banned": { + "type": "boolean", + "nullable": true + }, + "banReason": { + "type": "string", + "nullable": true + }, + "banExpires": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "enablePaidFeatures": { + "type": "boolean" + }, + "allowImpersonation": { + "type": "boolean" + }, + "stripeCustomerId": { + "type": "string", + "nullable": true + }, + "stripeSubscriptionId": { + "type": "string", + "nullable": true + }, + "serversQuantity": { + "type": "number" + }, + "password": { + "type": "string" + }, + "currentPassword": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.getUserByToken": { + "get": { + "operationId": "user-getUserByToken", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "token", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.getMetricsToken": { + "get": { + "operationId": "user-getMetricsToken", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.remove": { + "post": { + "operationId": "user-remove", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userId": { + "type": "string" + } + }, + "required": [ + "userId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.assignPermissions": { + "post": { + "operationId": "user-assignPermissions", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + }, + "accessedProjects": { + "type": "array", + "items": { + "type": "string" + } + }, + "accessedEnvironments": { + "type": "array", + "items": { + "type": "string" + } + }, + "accessedServices": { + "type": "array", + "items": { + "type": "string" + } + }, + "canCreateProjects": { + "type": "boolean" + }, + "canCreateServices": { + "type": "boolean" + }, + "canDeleteProjects": { + "type": "boolean" + }, + "canDeleteServices": { + "type": "boolean" + }, + "canAccessToDocker": { + "type": "boolean" + }, + "canAccessToTraefikFiles": { + "type": "boolean" + }, + "canAccessToAPI": { + "type": "boolean" + }, + "canAccessToSSHKeys": { + "type": "boolean" + }, + "canAccessToGitProviders": { + "type": "boolean" + }, + "canDeleteEnvironments": { + "type": "boolean" + }, + "canCreateEnvironments": { + "type": "boolean" + } + }, + "required": [ + "id", + "accessedProjects", + "accessedEnvironments", + "accessedServices", + "canCreateProjects", + "canCreateServices", + "canDeleteProjects", + "canDeleteServices", + "canAccessToDocker", + "canAccessToTraefikFiles", + "canAccessToAPI", + "canAccessToSSHKeys", + "canAccessToGitProviders", + "canDeleteEnvironments", + "canCreateEnvironments" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.getInvitations": { + "get": { + "operationId": "user-getInvitations", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.getContainerMetrics": { + "get": { + "operationId": "user-getContainerMetrics", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "url", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "appName", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "dataPoints", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.generateToken": { + "post": { + "operationId": "user-generateToken", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.deleteApiKey": { + "post": { + "operationId": "user-deleteApiKey", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "apiKeyId": { + "type": "string" + } + }, + "required": [ + "apiKeyId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.createApiKey": { + "post": { + "operationId": "user-createApiKey", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "prefix": { + "type": "string" + }, + "expiresIn": { + "type": "number" + }, + "metadata": { + "type": "object", + "properties": { + "organizationId": { + "type": "string" + } + }, + "required": [ + "organizationId" + ], + "additionalProperties": false + }, + "rateLimitEnabled": { + "type": "boolean" + }, + "rateLimitTimeWindow": { + "type": "number" + }, + "rateLimitMax": { + "type": "number" + }, + "remaining": { + "type": "number" + }, + "refillAmount": { + "type": "number" + }, + "refillInterval": { + "type": "number" + } + }, + "required": [ + "name", + "metadata" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.checkUserOrganizations": { + "get": { + "operationId": "user-checkUserOrganizations", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "userId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/user.sendInvitation": { + "post": { + "operationId": "user-sendInvitation", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "minLength": 1 + }, + "notificationId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "invitationId", + "notificationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.create": { + "post": { + "operationId": "domain-create", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "host": { + "type": "string", + "minLength": 1 + }, + "path": { + "type": "string", + "minLength": 1, + "nullable": true + }, + "port": { + "type": "number", + "minimum": 1, + "maximum": 65535, + "nullable": true + }, + "https": { + "type": "boolean" + }, + "applicationId": { + "type": "string", + "nullable": true + }, + "certificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "customCertResolver": { + "type": "string", + "nullable": true + }, + "composeId": { + "type": "string", + "nullable": true + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "domainType": { + "type": "string", + "enum": [ + "compose", + "application", + "preview" + ], + "nullable": true + }, + "previewDeploymentId": { + "type": "string", + "nullable": true + }, + "internalPath": { + "type": "string", + "nullable": true + }, + "stripPath": { + "type": "boolean" + } + }, + "required": [ + "host" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.byApplicationId": { + "get": { + "operationId": "domain-byApplicationId", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.byComposeId": { + "get": { + "operationId": "domain-byComposeId", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.generateDomain": { + "post": { + "operationId": "domain-generateDomain", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appName": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "appName" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.canGenerateTraefikMeDomains": { + "get": { + "operationId": "domain-canGenerateTraefikMeDomains", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.update": { + "post": { + "operationId": "domain-update", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "host": { + "type": "string", + "minLength": 1 + }, + "path": { + "type": "string", + "minLength": 1, + "nullable": true + }, + "port": { + "type": "number", + "minimum": 1, + "maximum": 65535, + "nullable": true + }, + "https": { + "type": "boolean" + }, + "certificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "customCertResolver": { + "type": "string", + "nullable": true + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "domainType": { + "type": "string", + "enum": [ + "compose", + "application", + "preview" + ], + "nullable": true + }, + "internalPath": { + "type": "string", + "nullable": true + }, + "stripPath": { + "type": "boolean" + }, + "domainId": { + "type": "string" + } + }, + "required": [ + "host", + "domainId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.one": { + "get": { + "operationId": "domain-one", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "domainId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.delete": { + "post": { + "operationId": "domain-delete", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "domainId": { + "type": "string" + } + }, + "required": [ + "domainId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/domain.validateDomain": { + "post": { + "operationId": "domain-validateDomain", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "serverIp": { + "type": "string" + } + }, + "required": [ + "domain" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/destination.create": { + "post": { + "operationId": "destination-create", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "provider": { + "type": "string", + "nullable": true + }, + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "region": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "secretAccessKey": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "name", + "provider", + "accessKey", + "bucket", + "region", + "endpoint", + "secretAccessKey" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/destination.testConnection": { + "post": { + "operationId": "destination-testConnection", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "provider": { + "type": "string", + "nullable": true + }, + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "region": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "secretAccessKey": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "name", + "provider", + "accessKey", + "bucket", + "region", + "endpoint", + "secretAccessKey" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/destination.one": { + "get": { + "operationId": "destination-one", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "destinationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/destination.all": { + "get": { + "operationId": "destination-all", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/destination.remove": { + "post": { + "operationId": "destination-remove", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "destinationId": { + "type": "string" + } + }, + "required": [ + "destinationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/destination.update": { + "post": { + "operationId": "destination-update", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "region": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "secretAccessKey": { + "type": "string" + }, + "destinationId": { + "type": "string" + }, + "provider": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "name", + "accessKey", + "bucket", + "region", + "endpoint", + "secretAccessKey", + "destinationId", + "provider" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.create": { + "post": { + "operationId": "backup-create", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "schedule": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "nullable": true + }, + "prefix": { + "type": "string", + "minLength": 1 + }, + "destinationId": { + "type": "string" + }, + "keepLatestCount": { + "type": "number", + "nullable": true + }, + "database": { + "type": "string", + "minLength": 1 + }, + "mariadbId": { + "type": "string", + "nullable": true + }, + "mysqlId": { + "type": "string", + "nullable": true + }, + "postgresId": { + "type": "string", + "nullable": true + }, + "mongoId": { + "type": "string", + "nullable": true + }, + "databaseType": { + "type": "string", + "enum": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server" + ] + }, + "userId": { + "type": "string", + "nullable": true + }, + "backupType": { + "type": "string", + "enum": [ + "database", + "compose" + ] + }, + "composeId": { + "type": "string", + "nullable": true + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "metadata": { + "nullable": true + } + }, + "required": [ + "schedule", + "prefix", + "destinationId", + "database", + "databaseType" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.one": { + "get": { + "operationId": "backup-one", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "backupId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.update": { + "post": { + "operationId": "backup-update", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "schedule": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "nullable": true + }, + "prefix": { + "type": "string", + "minLength": 1 + }, + "backupId": { + "type": "string" + }, + "destinationId": { + "type": "string" + }, + "database": { + "type": "string", + "minLength": 1 + }, + "keepLatestCount": { + "type": "number", + "nullable": true + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "metadata": { + "nullable": true + }, + "databaseType": { + "type": "string", + "enum": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server" + ] + } + }, + "required": [ + "schedule", + "prefix", + "backupId", + "destinationId", + "database", + "serviceName", + "databaseType" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.remove": { + "post": { + "operationId": "backup-remove", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.manualBackupPostgres": { + "post": { + "operationId": "backup-manualBackupPostgres", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.manualBackupMySql": { + "post": { + "operationId": "backup-manualBackupMySql", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.manualBackupMariadb": { + "post": { + "operationId": "backup-manualBackupMariadb", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.manualBackupCompose": { + "post": { + "operationId": "backup-manualBackupCompose", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.manualBackupMongo": { + "post": { + "operationId": "backup-manualBackupMongo", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.manualBackupWebServer": { + "post": { + "operationId": "backup-manualBackupWebServer", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/backup.listBackupFiles": { + "get": { + "operationId": "backup-listBackupFiles", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "destinationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "search", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/deployment.all": { + "get": { + "operationId": "deployment-all", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/deployment.allByCompose": { + "get": { + "operationId": "deployment-allByCompose", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/deployment.allByServer": { + "get": { + "operationId": "deployment-allByServer", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/deployment.allByType": { + "get": { + "operationId": "deployment-allByType", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "type", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "schedule", + "previewDeployment", + "backup", + "volumeBackup" + ] + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/deployment.killProcess": { + "post": { + "operationId": "deployment-killProcess", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "deploymentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/previewDeployment.all": { + "get": { + "operationId": "previewDeployment-all", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/previewDeployment.delete": { + "post": { + "operationId": "previewDeployment-delete", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "previewDeploymentId": { + "type": "string" + } + }, + "required": [ + "previewDeploymentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/previewDeployment.one": { + "get": { + "operationId": "previewDeployment-one", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "previewDeploymentId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/previewDeployment.redeploy": { + "post": { + "operationId": "previewDeployment-redeploy", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "previewDeploymentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "previewDeploymentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mounts.create": { + "post": { + "operationId": "mounts-create", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "bind", + "volume", + "file" + ] + }, + "hostPath": { + "type": "string", + "nullable": true + }, + "volumeName": { + "type": "string", + "nullable": true + }, + "content": { + "type": "string", + "nullable": true + }, + "mountPath": { + "type": "string", + "minLength": 1 + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ], + "default": "application" + }, + "filePath": { + "type": "string", + "nullable": true + }, + "serviceId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "type", + "mountPath", + "serviceId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mounts.remove": { + "post": { + "operationId": "mounts-remove", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mountId": { + "type": "string" + } + }, + "required": [ + "mountId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mounts.one": { + "get": { + "operationId": "mounts-one", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "mountId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mounts.update": { + "post": { + "operationId": "mounts-update", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mountId": { + "type": "string", + "minLength": 1 + }, + "type": { + "type": "string", + "enum": [ + "bind", + "volume", + "file" + ] + }, + "hostPath": { + "type": "string", + "nullable": true + }, + "volumeName": { + "type": "string", + "nullable": true + }, + "filePath": { + "type": "string", + "nullable": true + }, + "content": { + "type": "string", + "nullable": true + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ], + "default": "application" + }, + "mountPath": { + "type": "string", + "minLength": 1 + }, + "applicationId": { + "type": "string", + "nullable": true + }, + "postgresId": { + "type": "string", + "nullable": true + }, + "mariadbId": { + "type": "string", + "nullable": true + }, + "mongoId": { + "type": "string", + "nullable": true + }, + "mysqlId": { + "type": "string", + "nullable": true + }, + "redisId": { + "type": "string", + "nullable": true + }, + "composeId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "mountId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/mounts.allNamedByApplicationId": { + "get": { + "operationId": "mounts-allNamedByApplicationId", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/certificates.create": { + "post": { + "operationId": "certificates-create", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "certificateId": { + "type": "string" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "certificateData": { + "type": "string", + "minLength": 1 + }, + "privateKey": { + "type": "string", + "minLength": 1 + }, + "certificatePath": { + "type": "string" + }, + "autoRenew": { + "type": "boolean", + "nullable": true + }, + "organizationId": { + "type": "string" + }, + "serverId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "name", + "certificateData", + "privateKey", + "organizationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/certificates.one": { + "get": { + "operationId": "certificates-one", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "certificateId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/certificates.remove": { + "post": { + "operationId": "certificates-remove", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "certificateId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "certificateId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/certificates.all": { + "get": { + "operationId": "certificates-all", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getWebServerSettings": { + "get": { + "operationId": "settings-getWebServerSettings", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.reloadServer": { + "post": { + "operationId": "settings-reloadServer", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanRedis": { + "post": { + "operationId": "settings-cleanRedis", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.reloadRedis": { + "post": { + "operationId": "settings-reloadRedis", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.reloadTraefik": { + "post": { + "operationId": "settings-reloadTraefik", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.toggleDashboard": { + "post": { + "operationId": "settings-toggleDashboard", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enableDashboard": { + "type": "boolean" + }, + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanUnusedImages": { + "post": { + "operationId": "settings-cleanUnusedImages", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanUnusedVolumes": { + "post": { + "operationId": "settings-cleanUnusedVolumes", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanStoppedContainers": { + "post": { + "operationId": "settings-cleanStoppedContainers", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanDockerBuilder": { + "post": { + "operationId": "settings-cleanDockerBuilder", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanDockerPrune": { + "post": { + "operationId": "settings-cleanDockerPrune", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanAll": { + "post": { + "operationId": "settings-cleanAll", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanMonitoring": { + "post": { + "operationId": "settings-cleanMonitoring", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.saveSSHPrivateKey": { + "post": { + "operationId": "settings-saveSSHPrivateKey", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sshPrivateKey": { + "type": "string" + } + }, + "required": [ + "sshPrivateKey" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.assignDomainServer": { + "post": { + "operationId": "settings-assignDomainServer", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "certificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "letsEncryptEmail": { + "anyOf": [ + { + "type": "string", + "format": "email" + }, + { + "type": "string", + "enum": [ + "" + ] + } + ], + "nullable": true + }, + "https": { + "type": "boolean" + } + }, + "required": [ + "host", + "certificateType" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.cleanSSHPrivateKey": { + "post": { + "operationId": "settings-cleanSSHPrivateKey", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateDockerCleanup": { + "post": { + "operationId": "settings-updateDockerCleanup", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enableDockerCleanup": { + "type": "boolean" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "enableDockerCleanup" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.readTraefikConfig": { + "get": { + "operationId": "settings-readTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateTraefikConfig": { + "post": { + "operationId": "settings-updateTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "traefikConfig": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "traefikConfig" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.readWebServerTraefikConfig": { + "get": { + "operationId": "settings-readWebServerTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateWebServerTraefikConfig": { + "post": { + "operationId": "settings-updateWebServerTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "traefikConfig": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "traefikConfig" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.readMiddlewareTraefikConfig": { + "get": { + "operationId": "settings-readMiddlewareTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateMiddlewareTraefikConfig": { + "post": { + "operationId": "settings-updateMiddlewareTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "traefikConfig": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "traefikConfig" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getUpdateData": { + "post": { + "operationId": "settings-getUpdateData", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateServer": { + "post": { + "operationId": "settings-updateServer", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getDokployVersion": { + "get": { + "operationId": "settings-getDokployVersion", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getReleaseTag": { + "get": { + "operationId": "settings-getReleaseTag", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.readDirectories": { + "get": { + "operationId": "settings-readDirectories", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateTraefikFile": { + "post": { + "operationId": "settings-updateTraefikFile", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "path": { + "type": "string", + "minLength": 1 + }, + "traefikConfig": { + "type": "string", + "minLength": 1 + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "path", + "traefikConfig" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.readTraefikFile": { + "get": { + "operationId": "settings-readTraefikFile", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "path", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getIp": { + "get": { + "operationId": "settings-getIp", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateServerIp": { + "post": { + "operationId": "settings-updateServerIp", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverIp": { + "type": "string" + } + }, + "required": [ + "serverIp" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getOpenApiDocument": { + "get": { + "operationId": "settings-getOpenApiDocument", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.readTraefikEnv": { + "get": { + "operationId": "settings-readTraefikEnv", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.writeTraefikEnv": { + "post": { + "operationId": "settings-writeTraefikEnv", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "env": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.haveTraefikDashboardPortEnabled": { + "get": { + "operationId": "settings-haveTraefikDashboardPortEnabled", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.haveActivateRequests": { + "get": { + "operationId": "settings-haveActivateRequests", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.toggleRequests": { + "post": { + "operationId": "settings-toggleRequests", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enable": { + "type": "boolean" + } + }, + "required": [ + "enable" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.isCloud": { + "get": { + "operationId": "settings-isCloud", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.isUserSubscribed": { + "get": { + "operationId": "settings-isUserSubscribed", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.health": { + "get": { + "operationId": "settings-health", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.setupGPU": { + "post": { + "operationId": "settings-setupGPU", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.checkGPUStatus": { + "get": { + "operationId": "settings-checkGPUStatus", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateTraefikPorts": { + "post": { + "operationId": "settings-updateTraefikPorts", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + }, + "additionalPorts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "targetPort": { + "type": "number" + }, + "publishedPort": { + "type": "number" + }, + "protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "required": [ + "targetPort", + "publishedPort", + "protocol" + ], + "additionalProperties": false + } + } + }, + "required": [ + "additionalPorts" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getTraefikPorts": { + "get": { + "operationId": "settings-getTraefikPorts", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.updateLogCleanup": { + "post": { + "operationId": "settings-updateLogCleanup", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "cronExpression": { + "type": "string", + "nullable": true + } + }, + "required": [ + "cronExpression" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getLogCleanupStatus": { + "get": { + "operationId": "settings-getLogCleanupStatus", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/settings.getDokployCloudIps": { + "get": { + "operationId": "settings-getDokployCloudIps", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/security.create": { + "post": { + "operationId": "security-create", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "applicationId", + "username", + "password" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/security.one": { + "get": { + "operationId": "security-one", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "securityId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/security.delete": { + "post": { + "operationId": "security-delete", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "securityId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "securityId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/security.update": { + "post": { + "operationId": "security-update", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "securityId": { + "type": "string", + "minLength": 1 + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "securityId", + "username", + "password" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redirects.create": { + "post": { + "operationId": "redirects-create", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "regex": { + "type": "string", + "minLength": 1 + }, + "replacement": { + "type": "string", + "minLength": 1 + }, + "permanent": { + "type": "boolean" + }, + "applicationId": { + "type": "string" + } + }, + "required": [ + "regex", + "replacement", + "permanent", + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redirects.one": { + "get": { + "operationId": "redirects-one", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "redirectId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redirects.delete": { + "post": { + "operationId": "redirects-delete", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redirectId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "redirectId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/redirects.update": { + "post": { + "operationId": "redirects-update", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redirectId": { + "type": "string", + "minLength": 1 + }, + "regex": { + "type": "string", + "minLength": 1 + }, + "replacement": { + "type": "string", + "minLength": 1 + }, + "permanent": { + "type": "boolean" + } + }, + "required": [ + "redirectId", + "regex", + "replacement", + "permanent" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/port.create": { + "post": { + "operationId": "port-create", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "publishedPort": { + "type": "number" + }, + "publishMode": { + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress" + }, + "targetPort": { + "type": "number" + }, + "protocol": { + "type": "string", + "enum": [ + "tcp", + "udp" + ], + "default": "tcp" + }, + "applicationId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "publishedPort", + "targetPort", + "applicationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/port.one": { + "get": { + "operationId": "port-one", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "portId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/port.delete": { + "post": { + "operationId": "port-delete", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "portId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "portId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/port.update": { + "post": { + "operationId": "port-update", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "portId": { + "type": "string", + "minLength": 1 + }, + "publishedPort": { + "type": "number" + }, + "publishMode": { + "type": "string", + "enum": [ + "ingress", + "host" + ], + "default": "ingress" + }, + "targetPort": { + "type": "number" + }, + "protocol": { + "type": "string", + "enum": [ + "tcp", + "udp" + ], + "default": "tcp" + } + }, + "required": [ + "portId", + "publishedPort", + "targetPort" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/registry.create": { + "post": { + "operationId": "registry-create", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryName": { + "type": "string", + "minLength": 1 + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + }, + "registryUrl": { + "type": "string" + }, + "registryType": { + "type": "string", + "enum": [ + "cloud" + ] + }, + "imagePrefix": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "registryName", + "username", + "password", + "registryUrl", + "registryType", + "imagePrefix" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/registry.remove": { + "post": { + "operationId": "registry-remove", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "registryId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/registry.update": { + "post": { + "operationId": "registry-update", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryId": { + "type": "string", + "minLength": 1 + }, + "registryName": { + "type": "string", + "minLength": 1 + }, + "imagePrefix": { + "type": "string", + "nullable": true + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + }, + "registryUrl": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "registryType": { + "type": "string", + "enum": [ + "cloud" + ] + }, + "organizationId": { + "type": "string", + "minLength": 1 + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "registryId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/registry.all": { + "get": { + "operationId": "registry-all", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/registry.one": { + "get": { + "operationId": "registry-one", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "registryId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/registry.testRegistry": { + "post": { + "operationId": "registry-testRegistry", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryName": { + "type": "string" + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + }, + "registryUrl": { + "type": "string" + }, + "registryType": { + "type": "string", + "enum": [ + "cloud" + ] + }, + "imagePrefix": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "username", + "password", + "registryUrl", + "registryType" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/registry.testRegistryById": { + "post": { + "operationId": "registry-testRegistryById", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryId": { + "type": "string", + "minLength": 1 + }, + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/cluster.getNodes": { + "get": { + "operationId": "cluster-getNodes", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/cluster.removeWorker": { + "post": { + "operationId": "cluster-removeWorker", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nodeId": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "nodeId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/cluster.addWorker": { + "get": { + "operationId": "cluster-addWorker", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/cluster.addManager": { + "get": { + "operationId": "cluster-addManager", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createSlack": { + "post": { + "operationId": "notification-createSlack", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string", + "minLength": 1 + }, + "channel": { + "type": "string" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "webhookUrl", + "channel" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateSlack": { + "post": { + "operationId": "notification-updateSlack", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string", + "minLength": 1 + }, + "channel": { + "type": "string" + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "slackId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "slackId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testSlackConnection": { + "post": { + "operationId": "notification-testSlackConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "webhookUrl": { + "type": "string", + "minLength": 1 + }, + "channel": { + "type": "string" + } + }, + "required": [ + "webhookUrl", + "channel" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createTelegram": { + "post": { + "operationId": "notification-createTelegram", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "botToken": { + "type": "string", + "minLength": 1 + }, + "chatId": { + "type": "string", + "minLength": 1 + }, + "messageThreadId": { + "type": "string" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "botToken", + "chatId", + "messageThreadId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateTelegram": { + "post": { + "operationId": "notification-updateTelegram", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "botToken": { + "type": "string", + "minLength": 1 + }, + "chatId": { + "type": "string", + "minLength": 1 + }, + "messageThreadId": { + "type": "string" + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "telegramId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "telegramId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testTelegramConnection": { + "post": { + "operationId": "notification-testTelegramConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "botToken": { + "type": "string", + "minLength": 1 + }, + "chatId": { + "type": "string", + "minLength": 1 + }, + "messageThreadId": { + "type": "string" + } + }, + "required": [ + "botToken", + "chatId", + "messageThreadId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createDiscord": { + "post": { + "operationId": "notification-createDiscord", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string", + "minLength": 1 + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "webhookUrl", + "decoration" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateDiscord": { + "post": { + "operationId": "notification-updateDiscord", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string", + "minLength": 1 + }, + "decoration": { + "type": "boolean" + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "discordId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "discordId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testDiscordConnection": { + "post": { + "operationId": "notification-testDiscordConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "webhookUrl": { + "type": "string", + "minLength": 1 + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "webhookUrl" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createEmail": { + "post": { + "operationId": "notification-createEmail", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "smtpServer": { + "type": "string", + "minLength": 1 + }, + "smtpPort": { + "type": "number", + "minimum": 1 + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + }, + "fromAddress": { + "type": "string", + "minLength": 1 + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "smtpServer", + "smtpPort", + "username", + "password", + "fromAddress", + "toAddresses" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateEmail": { + "post": { + "operationId": "notification-updateEmail", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "smtpServer": { + "type": "string", + "minLength": 1 + }, + "smtpPort": { + "type": "number", + "minimum": 1 + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + }, + "fromAddress": { + "type": "string", + "minLength": 1 + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "emailId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "emailId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testEmailConnection": { + "post": { + "operationId": "notification-testEmailConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "smtpServer": { + "type": "string", + "minLength": 1 + }, + "smtpPort": { + "type": "number", + "minimum": 1 + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "fromAddress": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "smtpServer", + "smtpPort", + "username", + "password", + "toAddresses", + "fromAddress" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.remove": { + "post": { + "operationId": "notification-remove", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notificationId": { + "type": "string" + } + }, + "required": [ + "notificationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.one": { + "get": { + "operationId": "notification-one", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "notificationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.all": { + "get": { + "operationId": "notification-all", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.receiveNotification": { + "post": { + "operationId": "notification-receiveNotification", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ServerType": { + "type": "string", + "enum": [ + "Dokploy", + "Remote" + ], + "default": "Dokploy" + }, + "Type": { + "type": "string", + "enum": [ + "Memory", + "CPU" + ] + }, + "Value": { + "type": "number" + }, + "Threshold": { + "type": "number" + }, + "Message": { + "type": "string" + }, + "Timestamp": { + "type": "string" + }, + "Token": { + "type": "string" + } + }, + "required": [ + "Type", + "Value", + "Threshold", + "Message", + "Timestamp", + "Token" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createGotify": { + "post": { + "operationId": "notification-createGotify", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string", + "minLength": 1 + }, + "appToken": { + "type": "string", + "minLength": 1 + }, + "priority": { + "type": "number", + "minimum": 1 + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverUrl", + "appToken", + "priority", + "decoration" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateGotify": { + "post": { + "operationId": "notification-updateGotify", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string", + "minLength": 1 + }, + "appToken": { + "type": "string", + "minLength": 1 + }, + "priority": { + "type": "number", + "minimum": 1 + }, + "decoration": { + "type": "boolean" + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "gotifyId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "gotifyId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testGotifyConnection": { + "post": { + "operationId": "notification-testGotifyConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverUrl": { + "type": "string", + "minLength": 1 + }, + "appToken": { + "type": "string", + "minLength": 1 + }, + "priority": { + "type": "number", + "minimum": 1 + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "serverUrl", + "appToken", + "priority" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createNtfy": { + "post": { + "operationId": "notification-createNtfy", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string", + "minLength": 1 + }, + "topic": { + "type": "string", + "minLength": 1 + }, + "accessToken": { + "type": "string" + }, + "priority": { + "type": "number", + "minimum": 1 + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverUrl", + "topic", + "accessToken", + "priority" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateNtfy": { + "post": { + "operationId": "notification-updateNtfy", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string", + "minLength": 1 + }, + "topic": { + "type": "string", + "minLength": 1 + }, + "accessToken": { + "type": "string" + }, + "priority": { + "type": "number", + "minimum": 1 + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "ntfyId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "ntfyId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testNtfyConnection": { + "post": { + "operationId": "notification-testNtfyConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverUrl": { + "type": "string", + "minLength": 1 + }, + "topic": { + "type": "string", + "minLength": 1 + }, + "accessToken": { + "type": "string" + }, + "priority": { + "type": "number", + "minimum": 1 + } + }, + "required": [ + "serverUrl", + "topic", + "accessToken", + "priority" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createCustom": { + "post": { + "operationId": "notification-createCustom", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "endpoint": { + "type": "string", + "minLength": 1 + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "name", + "endpoint" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateCustom": { + "post": { + "operationId": "notification-updateCustom", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "endpoint": { + "type": "string", + "minLength": 1 + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "customId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "customId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testCustomConnection": { + "post": { + "operationId": "notification-testCustomConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "endpoint": { + "type": "string", + "minLength": 1 + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "endpoint" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createLark": { + "post": { + "operationId": "notification-createLark", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "webhookUrl" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updateLark": { + "post": { + "operationId": "notification-updateLark", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string", + "minLength": 1 + }, + "notificationId": { + "type": "string", + "minLength": 1 + }, + "larkId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "larkId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testLarkConnection": { + "post": { + "operationId": "notification-testLarkConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "webhookUrl": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "webhookUrl" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.createPushover": { + "post": { + "operationId": "notification-createPushover", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "userKey": { + "type": "string", + "minLength": 1 + }, + "apiToken": { + "type": "string", + "minLength": 1 + }, + "priority": { + "type": "number", + "minimum": -2, + "maximum": 2, + "default": 0 + }, + "retry": { + "type": "number", + "minimum": 30, + "nullable": true + }, + "expire": { + "type": "number", + "minimum": 1, + "maximum": 10800, + "nullable": true + } + }, + "required": [ + "name", + "userKey", + "apiToken" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.updatePushover": { + "post": { + "operationId": "notification-updatePushover", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notificationId": { + "type": "string", + "minLength": 1 + }, + "pushoverId": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + }, + "userKey": { + "type": "string", + "minLength": 1 + }, + "apiToken": { + "type": "string", + "minLength": 1 + }, + "priority": { + "type": "number", + "minimum": -2, + "maximum": 2 + }, + "retry": { + "type": "number", + "minimum": 30, + "nullable": true + }, + "expire": { + "type": "number", + "minimum": 1, + "maximum": 10800, + "nullable": true + }, + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + } + }, + "required": [ + "notificationId", + "pushoverId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.testPushoverConnection": { + "post": { + "operationId": "notification-testPushoverConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userKey": { + "type": "string", + "minLength": 1 + }, + "apiToken": { + "type": "string", + "minLength": 1 + }, + "priority": { + "type": "number", + "minimum": -2, + "maximum": 2 + }, + "retry": { + "type": "number", + "minimum": 30, + "nullable": true + }, + "expire": { + "type": "number", + "minimum": 1, + "maximum": 10800, + "nullable": true + } + }, + "required": [ + "userKey", + "apiToken", + "priority" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/notification.getEmailProviders": { + "get": { + "operationId": "notification-getEmailProviders", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/sshKey.create": { + "post": { + "operationId": "sshKey-create", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "privateKey": { + "type": "string" + }, + "publicKey": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "name", + "privateKey", + "publicKey", + "organizationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/sshKey.remove": { + "post": { + "operationId": "sshKey-remove", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sshKeyId": { + "type": "string" + } + }, + "required": [ + "sshKeyId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/sshKey.one": { + "get": { + "operationId": "sshKey-one", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "sshKeyId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/sshKey.all": { + "get": { + "operationId": "sshKey-all", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/sshKey.generate": { + "post": { + "operationId": "sshKey-generate", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "rsa", + "ed25519" + ] + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/sshKey.update": { + "post": { + "operationId": "sshKey-update", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "lastUsedAt": { + "type": "string", + "nullable": true + }, + "sshKeyId": { + "type": "string" + } + }, + "required": [ + "sshKeyId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitProvider.getAll": { + "get": { + "operationId": "gitProvider-getAll", + "tags": [ + "gitProvider" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitProvider.remove": { + "post": { + "operationId": "gitProvider-remove", + "tags": [ + "gitProvider" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "gitProviderId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "gitProviderId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.create": { + "post": { + "operationId": "gitea-create", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "giteaId": { + "type": "string" + }, + "giteaUrl": { + "type": "string", + "minLength": 1 + }, + "redirectUri": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "accessToken": { + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "expiresAt": { + "type": "number" + }, + "scopes": { + "type": "string" + }, + "lastAuthenticatedAt": { + "type": "number" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "giteaUsername": { + "type": "string" + }, + "organizationName": { + "type": "string" + } + }, + "required": [ + "giteaUrl", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.one": { + "get": { + "operationId": "gitea-one", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "giteaId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.giteaProviders": { + "get": { + "operationId": "gitea-giteaProviders", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.getGiteaRepositories": { + "get": { + "operationId": "gitea-getGiteaRepositories", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "giteaId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.getGiteaBranches": { + "get": { + "operationId": "gitea-getGiteaBranches", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "owner", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "repositoryName", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "giteaId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.testConnection": { + "post": { + "operationId": "gitea-testConnection", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "giteaId": { + "type": "string" + }, + "organizationName": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.update": { + "post": { + "operationId": "gitea-update", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "giteaId": { + "type": "string", + "minLength": 1 + }, + "giteaUrl": { + "type": "string", + "minLength": 1 + }, + "redirectUri": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "accessToken": { + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "expiresAt": { + "type": "number" + }, + "scopes": { + "type": "string" + }, + "lastAuthenticatedAt": { + "type": "number" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "giteaUsername": { + "type": "string" + }, + "organizationName": { + "type": "string" + } + }, + "required": [ + "giteaId", + "giteaUrl", + "gitProviderId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitea.getGiteaUrl": { + "get": { + "operationId": "gitea-getGiteaUrl", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "giteaId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/bitbucket.create": { + "post": { + "operationId": "bitbucket-create", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketId": { + "type": "string" + }, + "bitbucketUsername": { + "type": "string" + }, + "bitbucketEmail": { + "type": "string", + "format": "email" + }, + "appPassword": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "bitbucketWorkspaceName": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "authId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "authId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/bitbucket.one": { + "get": { + "operationId": "bitbucket-one", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "bitbucketId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/bitbucket.bitbucketProviders": { + "get": { + "operationId": "bitbucket-bitbucketProviders", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/bitbucket.getBitbucketRepositories": { + "get": { + "operationId": "bitbucket-getBitbucketRepositories", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "bitbucketId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/bitbucket.getBitbucketBranches": { + "get": { + "operationId": "bitbucket-getBitbucketBranches", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "owner", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "bitbucketId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/bitbucket.testConnection": { + "post": { + "operationId": "bitbucket-testConnection", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketId": { + "type": "string", + "minLength": 1 + }, + "bitbucketUsername": { + "type": "string" + }, + "bitbucketEmail": { + "type": "string", + "format": "email" + }, + "workspaceName": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "appPassword": { + "type": "string" + } + }, + "required": [ + "bitbucketId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/bitbucket.update": { + "post": { + "operationId": "bitbucket-update", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketId": { + "type": "string", + "minLength": 1 + }, + "bitbucketUsername": { + "type": "string" + }, + "bitbucketEmail": { + "type": "string", + "format": "email" + }, + "appPassword": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "bitbucketWorkspaceName": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "bitbucketId", + "gitProviderId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitlab.create": { + "post": { + "operationId": "gitlab-create", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "gitlabId": { + "type": "string" + }, + "gitlabUrl": { + "type": "string", + "minLength": 1 + }, + "applicationId": { + "type": "string" + }, + "redirectUri": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "accessToken": { + "type": "string", + "nullable": true + }, + "refreshToken": { + "type": "string", + "nullable": true + }, + "groupName": { + "type": "string" + }, + "expiresAt": { + "type": "number", + "nullable": true + }, + "gitProviderId": { + "type": "string" + }, + "authId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "gitlabUrl", + "authId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitlab.one": { + "get": { + "operationId": "gitlab-one", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "gitlabId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitlab.gitlabProviders": { + "get": { + "operationId": "gitlab-gitlabProviders", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitlab.getGitlabRepositories": { + "get": { + "operationId": "gitlab-getGitlabRepositories", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "gitlabId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitlab.getGitlabBranches": { + "get": { + "operationId": "gitlab-getGitlabBranches", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "query", + "required": false, + "schema": { + "type": "number" + } + }, + { + "name": "owner", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "gitlabId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitlab.testConnection": { + "post": { + "operationId": "gitlab-testConnection", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "gitlabId": { + "type": "string" + }, + "groupName": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/gitlab.update": { + "post": { + "operationId": "gitlab-update", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "gitlabId": { + "type": "string", + "minLength": 1 + }, + "gitlabUrl": { + "type": "string", + "minLength": 1 + }, + "applicationId": { + "type": "string" + }, + "redirectUri": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "accessToken": { + "type": "string", + "nullable": true + }, + "refreshToken": { + "type": "string", + "nullable": true + }, + "groupName": { + "type": "string" + }, + "expiresAt": { + "type": "number", + "nullable": true + }, + "gitProviderId": { + "type": "string" + }, + "name": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "gitlabId", + "gitlabUrl", + "gitProviderId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/github.one": { + "get": { + "operationId": "github-one", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "githubId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/github.getGithubRepositories": { + "get": { + "operationId": "github-getGithubRepositories", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "githubId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/github.getGithubBranches": { + "get": { + "operationId": "github-getGithubBranches", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "repo", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "owner", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "githubId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/github.githubProviders": { + "get": { + "operationId": "github-githubProviders", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/github.testConnection": { + "post": { + "operationId": "github-testConnection", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "githubId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "githubId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/github.update": { + "post": { + "operationId": "github-update", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "githubId": { + "type": "string", + "minLength": 1 + }, + "githubAppName": { + "type": "string", + "minLength": 1 + }, + "githubAppId": { + "type": "number", + "nullable": true + }, + "githubClientId": { + "type": "string", + "nullable": true + }, + "githubClientSecret": { + "type": "string", + "nullable": true + }, + "githubInstallationId": { + "type": "string", + "nullable": true + }, + "githubPrivateKey": { + "type": "string", + "nullable": true + }, + "githubWebhookSecret": { + "type": "string", + "nullable": true + }, + "gitProviderId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "githubId", + "githubAppName", + "gitProviderId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.create": { + "post": { + "operationId": "server-create", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "ipAddress": { + "type": "string" + }, + "port": { + "type": "number" + }, + "username": { + "type": "string" + }, + "sshKeyId": { + "type": "string", + "nullable": true + }, + "serverType": { + "type": "string", + "enum": [ + "deploy", + "build" + ] + } + }, + "required": [ + "name", + "ipAddress", + "port", + "username", + "sshKeyId", + "serverType" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.one": { + "get": { + "operationId": "server-one", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.getDefaultCommand": { + "get": { + "operationId": "server-getDefaultCommand", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.all": { + "get": { + "operationId": "server-all", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.count": { + "get": { + "operationId": "server-count", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.withSSHKey": { + "get": { + "operationId": "server-withSSHKey", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.buildServers": { + "get": { + "operationId": "server-buildServers", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.setup": { + "post": { + "operationId": "server-setup", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "serverId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.validate": { + "get": { + "operationId": "server-validate", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.security": { + "get": { + "operationId": "server-security", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.setupMonitoring": { + "post": { + "operationId": "server-setupMonitoring", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string", + "minLength": 1 + }, + "metricsConfig": { + "type": "object", + "properties": { + "server": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number", + "minimum": 2 + }, + "port": { + "type": "number", + "minimum": 1 + }, + "token": { + "type": "string" + }, + "urlCallback": { + "type": "string", + "format": "uri" + }, + "retentionDays": { + "type": "number", + "minimum": 1 + }, + "cronJob": { + "type": "string", + "minLength": 1 + }, + "thresholds": { + "type": "object", + "properties": { + "cpu": { + "type": "number", + "minimum": 0 + }, + "memory": { + "type": "number", + "minimum": 0 + } + }, + "required": [ + "cpu", + "memory" + ], + "additionalProperties": false + } + }, + "required": [ + "refreshRate", + "port", + "token", + "urlCallback", + "retentionDays", + "cronJob", + "thresholds" + ], + "additionalProperties": false + }, + "containers": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number", + "minimum": 2 + }, + "services": { + "type": "object", + "properties": { + "include": { + "type": "array", + "items": { + "type": "string" + } + }, + "exclude": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "required": [ + "refreshRate", + "services" + ], + "additionalProperties": false + } + }, + "required": [ + "server", + "containers" + ], + "additionalProperties": false + } + }, + "required": [ + "serverId", + "metricsConfig" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.remove": { + "post": { + "operationId": "server-remove", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "serverId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.update": { + "post": { + "operationId": "server-update", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string", + "minLength": 1 + }, + "ipAddress": { + "type": "string" + }, + "port": { + "type": "number" + }, + "username": { + "type": "string" + }, + "sshKeyId": { + "type": "string", + "nullable": true + }, + "serverType": { + "type": "string", + "enum": [ + "deploy", + "build" + ] + }, + "command": { + "type": "string" + } + }, + "required": [ + "name", + "serverId", + "ipAddress", + "port", + "username", + "sshKeyId", + "serverType" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.publicIp": { + "get": { + "operationId": "server-publicIp", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.getServerTime": { + "get": { + "operationId": "server-getServerTime", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/server.getServerMetrics": { + "get": { + "operationId": "server-getServerMetrics", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "url", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "dataPoints", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/stripe.getProducts": { + "get": { + "operationId": "stripe-getProducts", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/stripe.createCheckoutSession": { + "post": { + "operationId": "stripe-createCheckoutSession", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "productId": { + "type": "string" + }, + "serverQuantity": { + "type": "number", + "minimum": 1 + }, + "isAnnual": { + "type": "boolean" + } + }, + "required": [ + "productId", + "serverQuantity", + "isAnnual" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/stripe.createCustomerPortalSession": { + "post": { + "operationId": "stripe-createCustomerPortalSession", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/stripe.canCreateMoreServers": { + "get": { + "operationId": "stripe-canCreateMoreServers", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/stripe.getInvoices": { + "get": { + "operationId": "stripe-getInvoices", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/swarm.getNodes": { + "get": { + "operationId": "swarm-getNodes", + "tags": [ + "swarm" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/swarm.getNodeInfo": { + "get": { + "operationId": "swarm-getNodeInfo", + "tags": [ + "swarm" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "nodeId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/swarm.getNodeApps": { + "get": { + "operationId": "swarm-getNodeApps", + "tags": [ + "swarm" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "serverId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.one": { + "get": { + "operationId": "ai-one", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "aiId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.getModels": { + "get": { + "operationId": "ai-getModels", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "apiUrl", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "apiKey", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.create": { + "post": { + "operationId": "ai-create", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "apiUrl": { + "type": "string", + "format": "uri" + }, + "apiKey": { + "type": "string" + }, + "model": { + "type": "string", + "minLength": 1 + }, + "isEnabled": { + "type": "boolean" + } + }, + "required": [ + "name", + "apiUrl", + "apiKey", + "model", + "isEnabled" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.update": { + "post": { + "operationId": "ai-update", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "aiId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "apiUrl": { + "type": "string", + "format": "uri" + }, + "apiKey": { + "type": "string" + }, + "model": { + "type": "string", + "minLength": 1 + }, + "isEnabled": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + } + }, + "required": [ + "aiId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.getAll": { + "get": { + "operationId": "ai-getAll", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.get": { + "get": { + "operationId": "ai-get", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "aiId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.delete": { + "post": { + "operationId": "ai-delete", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "aiId": { + "type": "string" + } + }, + "required": [ + "aiId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.suggest": { + "post": { + "operationId": "ai-suggest", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "aiId": { + "type": "string" + }, + "input": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "aiId", + "input" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ai.deploy": { + "post": { + "operationId": "ai-deploy", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string", + "minLength": 1 + }, + "id": { + "type": "string", + "minLength": 1 + }, + "dockerCompose": { + "type": "string", + "minLength": 1 + }, + "envVariables": { + "type": "string" + }, + "serverId": { + "type": "string" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string" + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "type": "string", + "minLength": 1 + }, + "port": { + "type": "number", + "minimum": 1 + }, + "serviceName": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "host", + "port", + "serviceName" + ], + "additionalProperties": false + } + }, + "configFiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "filePath": { + "type": "string", + "minLength": 1 + }, + "content": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "filePath", + "content" + ], + "additionalProperties": false + } + } + }, + "required": [ + "environmentId", + "id", + "dockerCompose", + "envVariables", + "name", + "description" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.create": { + "post": { + "operationId": "organization-create", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "logo": { + "type": "string" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.all": { + "get": { + "operationId": "organization-all", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.one": { + "get": { + "operationId": "organization-one", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "organizationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.update": { + "post": { + "operationId": "organization-update", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "logo": { + "type": "string" + } + }, + "required": [ + "organizationId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.delete": { + "post": { + "operationId": "organization-delete", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string" + } + }, + "required": [ + "organizationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.allInvitations": { + "get": { + "operationId": "organization-allInvitations", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.removeInvitation": { + "post": { + "operationId": "organization-removeInvitation", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "invitationId": { + "type": "string" + } + }, + "required": [ + "invitationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.updateMemberRole": { + "post": { + "operationId": "organization-updateMemberRole", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "memberId": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member" + ] + } + }, + "required": [ + "memberId", + "role" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/organization.setDefault": { + "post": { + "operationId": "organization-setDefault", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "organizationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/schedule.create": { + "post": { + "operationId": "schedule-create", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "cronExpression": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "shellType": { + "type": "string", + "enum": [ + "bash", + "sh" + ] + }, + "scheduleType": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "command": { + "type": "string" + }, + "script": { + "type": "string", + "nullable": true + }, + "applicationId": { + "type": "string", + "nullable": true + }, + "composeId": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + }, + "enabled": { + "type": "boolean" + }, + "timezone": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + } + }, + "required": [ + "name", + "cronExpression", + "command" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/schedule.update": { + "post": { + "operationId": "schedule-update", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string" + }, + "cronExpression": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "shellType": { + "type": "string", + "enum": [ + "bash", + "sh" + ] + }, + "scheduleType": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "command": { + "type": "string" + }, + "script": { + "type": "string", + "nullable": true + }, + "applicationId": { + "type": "string", + "nullable": true + }, + "composeId": { + "type": "string", + "nullable": true + }, + "serverId": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + }, + "enabled": { + "type": "boolean" + }, + "timezone": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + } + }, + "required": [ + "scheduleId", + "name", + "cronExpression", + "command" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/schedule.delete": { + "post": { + "operationId": "schedule-delete", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string" + } + }, + "required": [ + "scheduleId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/schedule.list": { + "get": { + "operationId": "schedule-list", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "scheduleType", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "dokploy-server" + ] + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/schedule.one": { + "get": { + "operationId": "schedule-one", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "scheduleId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/schedule.runManually": { + "post": { + "operationId": "schedule-runManually", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "scheduleId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/rollback.delete": { + "post": { + "operationId": "rollback-delete", + "tags": [ + "rollback" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "rollbackId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "rollbackId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/rollback.rollback": { + "post": { + "operationId": "rollback-rollback", + "tags": [ + "rollback" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "rollbackId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "rollbackId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/volumeBackups.list": { + "get": { + "operationId": "volumeBackups-list", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + }, + { + "name": "volumeBackupType", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/volumeBackups.create": { + "post": { + "operationId": "volumeBackups-create", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "volumeName": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "appName": { + "type": "string" + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "turnOff": { + "type": "boolean" + }, + "cronExpression": { + "type": "string" + }, + "keepLatestCount": { + "type": "number", + "nullable": true + }, + "enabled": { + "type": "boolean", + "nullable": true + }, + "applicationId": { + "type": "string", + "nullable": true + }, + "postgresId": { + "type": "string", + "nullable": true + }, + "mariadbId": { + "type": "string", + "nullable": true + }, + "mongoId": { + "type": "string", + "nullable": true + }, + "mysqlId": { + "type": "string", + "nullable": true + }, + "redisId": { + "type": "string", + "nullable": true + }, + "composeId": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "destinationId": { + "type": "string" + } + }, + "required": [ + "name", + "volumeName", + "prefix", + "cronExpression", + "destinationId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/volumeBackups.one": { + "get": { + "operationId": "volumeBackups-one", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "volumeBackupId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/volumeBackups.delete": { + "post": { + "operationId": "volumeBackups-delete", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "volumeBackupId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "volumeBackupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/volumeBackups.update": { + "post": { + "operationId": "volumeBackups-update", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "volumeName": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "appName": { + "type": "string" + }, + "serviceName": { + "type": "string", + "nullable": true + }, + "turnOff": { + "type": "boolean" + }, + "cronExpression": { + "type": "string" + }, + "keepLatestCount": { + "type": "number", + "nullable": true + }, + "enabled": { + "type": "boolean", + "nullable": true + }, + "applicationId": { + "type": "string", + "nullable": true + }, + "postgresId": { + "type": "string", + "nullable": true + }, + "mariadbId": { + "type": "string", + "nullable": true + }, + "mongoId": { + "type": "string", + "nullable": true + }, + "mysqlId": { + "type": "string", + "nullable": true + }, + "redisId": { + "type": "string", + "nullable": true + }, + "composeId": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "destinationId": { + "type": "string" + }, + "volumeBackupId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "name", + "volumeName", + "prefix", + "cronExpression", + "destinationId", + "volumeBackupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/volumeBackups.runManually": { + "post": { + "operationId": "volumeBackups-runManually", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "volumeBackupId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "volumeBackupId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/environment.create": { + "post": { + "operationId": "environment-create", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "name", + "projectId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/environment.one": { + "get": { + "operationId": "environment-one", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "environmentId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/environment.byProjectId": { + "get": { + "operationId": "environment-byProjectId", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "projectId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/environment.remove": { + "post": { + "operationId": "environment-remove", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "environmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/environment.update": { + "post": { + "operationId": "environment-update", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string" + }, + "env": { + "type": "string" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "environmentId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/environment.duplicate": { + "post": { + "operationId": "environment-duplicate", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string", + "minLength": 1 + }, + "name": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "nullable": true + } + }, + "required": [ + "environmentId", + "name" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.create": { + "post": { + "operationId": "patch-create", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "filePath": { + "type": "string", + "minLength": 1 + }, + "content": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "applicationId": { + "type": "string", + "nullable": true + }, + "composeId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "filePath", + "content" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.one": { + "get": { + "operationId": "patch-one", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "patchId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.byApplicationId": { + "get": { + "operationId": "patch-byApplicationId", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.byComposeId": { + "get": { + "operationId": "patch-byComposeId", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "composeId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "minLength": 1 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.update": { + "post": { + "operationId": "patch-update", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patchId": { + "type": "string", + "minLength": 1 + }, + "filePath": { + "type": "string", + "minLength": 1 + }, + "enabled": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string", + "nullable": true + } + }, + "required": [ + "patchId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.delete": { + "post": { + "operationId": "patch-delete", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patchId": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "patchId" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.toggleEnabled": { + "post": { + "operationId": "patch-toggleEnabled", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patchId": { + "type": "string", + "minLength": 1 + }, + "enabled": { + "type": "boolean" + } + }, + "required": [ + "patchId", + "enabled" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.ensureRepo": { + "post": { + "operationId": "patch-ensureRepo", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "composeId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.readRepoDirectories": { + "get": { + "operationId": "patch-readRepoDirectories", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "composeId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "repoPath", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.readRepoFile": { + "get": { + "operationId": "patch-readRepoFile", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "composeId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "repoPath", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "filePath", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.saveFileAsPatch": { + "post": { + "operationId": "patch-saveFileAsPatch", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "composeId": { + "type": "string" + }, + "repoPath": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "content": { + "type": "string" + } + }, + "required": [ + "repoPath", + "filePath", + "content" + ], + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/patch.cleanPatchRepos": { + "post": { + "operationId": "patch-cleanPatchRepos", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "additionalProperties": false + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": {} + } + }, + "default": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "securitySchemes": { + "apiKey": { + "type": "apiKey", + "in": "header", + "name": "x-api-key", + "description": "API key authentication. Generate an API key from your Dokploy dashboard under Settings > API Keys." + } + }, + "responses": { + "error": { + "description": "Error response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "issues": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "additionalProperties": false + } + } + }, + "required": [ + "message", + "code" + ], + "additionalProperties": false + } + } + } + } + } + }, + "tags": [ + { + "name": "admin" + }, + { + "name": "docker" + }, + { + "name": "compose" + }, + { + "name": "registry" + }, + { + "name": "cluster" + }, + { + "name": "user" + }, + { + "name": "domain" + }, + { + "name": "destination" + }, + { + "name": "backup" + }, + { + "name": "deployment" + }, + { + "name": "mounts" + }, + { + "name": "certificates" + }, + { + "name": "settings" + }, + { + "name": "security" + }, + { + "name": "redirects" + }, + { + "name": "port" + }, + { + "name": "project" + }, + { + "name": "application" + }, + { + "name": "mysql" + }, + { + "name": "postgres" + }, + { + "name": "redis" + }, + { + "name": "mongo" + }, + { + "name": "mariadb" + }, + { + "name": "sshRouter" + }, + { + "name": "gitProvider" + }, + { + "name": "bitbucket" + }, + { + "name": "github" + }, + { + "name": "gitlab" + }, + { + "name": "gitea" + }, + { + "name": "server" + }, + { + "name": "swarm" + }, + { + "name": "ai" + }, + { + "name": "organization" + }, + { + "name": "schedule" + }, + { + "name": "rollback" + }, + { + "name": "volumeBackups" + }, + { + "name": "environment" + } + ], + "externalDocs": { + "description": "Full documentation", + "url": "https://docs.dokploy.com" + }, + "security": [ + { + "apiKey": [] + } + ] +} \ No newline at end of file diff --git a/packages/server/src/constants/index.ts b/packages/server/src/constants/index.ts index de0e48a2e..745264f24 100644 --- a/packages/server/src/constants/index.ts +++ b/packages/server/src/constants/index.ts @@ -32,5 +32,6 @@ export const paths = (isServer = false) => { SCHEDULES_PATH: `${BASE_PATH}/schedules`, VOLUME_BACKUPS_PATH: `${BASE_PATH}/volume-backups`, VOLUME_BACKUP_LOCK_PATH: `${BASE_PATH}/volume-backup-lock`, + PATCH_REPOS_PATH: `${BASE_PATH}/patch-repos`, }; }; diff --git a/packages/server/src/db/schema/application.ts b/packages/server/src/db/schema/application.ts index 3d912654c..2697e8de8 100644 --- a/packages/server/src/db/schema/application.ts +++ b/packages/server/src/db/schema/application.ts @@ -19,6 +19,7 @@ import { gitea } from "./gitea"; import { github } from "./github"; import { gitlab } from "./gitlab"; import { mounts } from "./mount"; +import { patch } from "./patch"; import { ports } from "./port"; import { previewDeployments } from "./preview-deployments"; import { redirects } from "./redirects"; @@ -286,6 +287,7 @@ export const applicationsRelations = relations( references: [registry.registryId], relationName: "applicationRollbackRegistry", }), + patches: many(patch), }), ); diff --git a/packages/server/src/db/schema/compose.ts b/packages/server/src/db/schema/compose.ts index 02bd60f0b..0c9b1ba28 100644 --- a/packages/server/src/db/schema/compose.ts +++ b/packages/server/src/db/schema/compose.ts @@ -12,6 +12,7 @@ import { gitea } from "./gitea"; import { github } from "./github"; import { gitlab } from "./gitlab"; import { mounts } from "./mount"; +import { patch } from "./patch"; import { schedules } from "./schedule"; import { server } from "./server"; import { applicationStatus, triggerType } from "./shared"; @@ -143,6 +144,7 @@ export const composeRelations = relations(compose, ({ one, many }) => ({ }), backups: many(backups), schedules: many(schedules), + patches: many(patch), })); const createSchema = createInsertSchema(compose, { diff --git a/packages/server/src/db/schema/index.ts b/packages/server/src/db/schema/index.ts index 5bbf58a5c..fece17f02 100644 --- a/packages/server/src/db/schema/index.ts +++ b/packages/server/src/db/schema/index.ts @@ -18,6 +18,7 @@ export * from "./mongo"; export * from "./mount"; export * from "./mysql"; export * from "./notification"; +export * from "./patch"; export * from "./port"; export * from "./postgres"; export * from "./preview-deployments"; diff --git a/packages/server/src/db/schema/patch.ts b/packages/server/src/db/schema/patch.ts new file mode 100644 index 000000000..3ba28cbc4 --- /dev/null +++ b/packages/server/src/db/schema/patch.ts @@ -0,0 +1,95 @@ +import { relations } from "drizzle-orm"; +import { boolean, pgTable, text, unique } from "drizzle-orm/pg-core"; +import { createInsertSchema } from "drizzle-zod"; +import { nanoid } from "nanoid"; +import { z } from "zod"; +import { applications } from "./application"; +import { compose } from "./compose"; + +export const patch = pgTable( + "patch", + { + patchId: text("patchId") + .notNull() + .primaryKey() + .$defaultFn(() => nanoid()), + filePath: text("filePath").notNull(), + enabled: boolean("enabled").notNull().default(true), + content: text("content").notNull(), + createdAt: text("createdAt") + .notNull() + .$defaultFn(() => new Date().toISOString()), + updatedAt: text("updatedAt").$defaultFn(() => new Date().toISOString()), + // Relations - one of these must be set + applicationId: text("applicationId").references( + () => applications.applicationId, + { onDelete: "cascade" }, + ), + composeId: text("composeId").references(() => compose.composeId, { + onDelete: "cascade", + }), + }, + (table) => [ + // Unique constraint: one patch per file per application/compose + unique("patch_filepath_application_unique").on( + table.filePath, + table.applicationId, + ), + unique("patch_filepath_compose_unique").on(table.filePath, table.composeId), + ], +); + +export const patchRelations = relations(patch, ({ one }) => ({ + application: one(applications, { + fields: [patch.applicationId], + references: [applications.applicationId], + }), + compose: one(compose, { + fields: [patch.composeId], + references: [compose.composeId], + }), +})); + +const createSchema = createInsertSchema(patch, { + filePath: z.string().min(1), + content: z.string(), + enabled: z.boolean().optional(), + applicationId: z.string().optional(), + composeId: z.string().optional(), +}); + +export const apiCreatePatch = createSchema.pick({ + filePath: true, + content: true, + enabled: true, + applicationId: true, + composeId: true, +}); + +export const apiFindPatch = z.object({ + patchId: z.string().min(1), +}); + +export const apiFindPatchesByApplicationId = z.object({ + applicationId: z.string().min(1), +}); + +export const apiFindPatchesByComposeId = z.object({ + composeId: z.string().min(1), +}); + +export const apiUpdatePatch = createSchema + .partial() + .extend({ + patchId: z.string().min(1), + }) + .omit({ applicationId: true, composeId: true }); + +export const apiDeletePatch = z.object({ + patchId: z.string().min(1), +}); + +export const apiTogglePatchEnabled = z.object({ + patchId: z.string().min(1), + enabled: z.boolean(), +}); diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 7bfc5553b..1dd4f2b8b 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -27,6 +27,8 @@ export * from "./services/mongo"; export * from "./services/mount"; export * from "./services/mysql"; export * from "./services/notification"; +export * from "./services/patch"; +export * from "./services/patch-repo"; export * from "./services/port"; export * from "./services/postgres"; export * from "./services/preview-deployment"; diff --git a/packages/server/src/services/application.ts b/packages/server/src/services/application.ts index 11cff15a4..89db288d1 100644 --- a/packages/server/src/services/application.ts +++ b/packages/server/src/services/application.ts @@ -44,6 +44,10 @@ import { issueCommentExists, updateIssueComment, } from "./github"; +import { + findPatchesByApplicationId, + generateApplyPatchesCommand, +} from "./patch"; import { findPreviewDeploymentById, updatePreviewDeployment, @@ -202,6 +206,20 @@ export const deployApplication = async ({ command += await buildRemoteDocker(application); } + // Apply patches after cloning (for non-docker sources only) + if (application.sourceType !== "docker") { + const patches = await findPatchesByApplicationId(application.applicationId); + const enabledPatches = patches.filter(p => p.enabled); + if (enabledPatches.length > 0) { + command += generateApplyPatchesCommand({ + appName: application.appName, + type: "application", + serverId, + patches: enabledPatches, + }); + } + } + command += await getBuildCommand(application); const commandWithLog = `(${command}) >> ${deployment.logPath} 2>&1`; diff --git a/packages/server/src/services/compose.ts b/packages/server/src/services/compose.ts index 89a12a156..953b6fec9 100644 --- a/packages/server/src/services/compose.ts +++ b/packages/server/src/services/compose.ts @@ -40,6 +40,10 @@ import { updateDeployment, updateDeploymentStatus, } from "./deployment"; +import { + findPatchesByComposeId, + generateApplyPatchesCommand, +} from "./patch"; import { validUniqueServerAppName } from "./project"; export type Compose = typeof compose.$inferSelect; @@ -248,6 +252,26 @@ export const deployCompose = async ({ await execAsync(commandWithLog); } + // Apply patches after cloning (for non-raw sources only) + if (compose.sourceType !== "raw") { + const patches = await findPatchesByComposeId(compose.composeId); + const enabledPatches = patches.filter(p => p.enabled); + if (enabledPatches.length > 0) { + const patchCommand = generateApplyPatchesCommand({ + appName: compose.appName, + type: "compose", + serverId: compose.serverId, + patches: enabledPatches, + }); + const patchCommandWithLog = `(${patchCommand}) >> ${deployment.logPath} 2>&1`; + if (compose.serverId) { + await execAsyncRemote(compose.serverId, patchCommandWithLog); + } else { + await execAsync(patchCommandWithLog); + } + } + } + command = "set -e;"; command += await getBuildComposeCommand(entity); commandWithLog = `(${command}) >> ${deployment.logPath} 2>&1`; diff --git a/packages/server/src/services/patch-repo.ts b/packages/server/src/services/patch-repo.ts new file mode 100644 index 000000000..ba7273b22 --- /dev/null +++ b/packages/server/src/services/patch-repo.ts @@ -0,0 +1,308 @@ +import path, { join } from "node:path"; +import { paths } from "@dokploy/server/constants"; +import { findSSHKeyById } from "@dokploy/server/services/ssh-key"; +import { TRPCError } from "@trpc/server"; +import { execAsync, execAsyncRemote } from "../utils/process/execAsync"; + +interface PatchRepoConfig { + appName: string; + type: "application" | "compose"; + gitUrl: string; + gitBranch: string; + sshKeyId?: string | null; + serverId?: string | null; +} + +/** + * Ensure patch repo exists and is up-to-date + * Returns path to the repo + */ +export const ensurePatchRepo = async ({ + appName, + type, + gitUrl, + gitBranch, + sshKeyId, + serverId, +}: PatchRepoConfig): Promise => { + const { PATCH_REPOS_PATH, SSH_PATH } = paths(!!serverId); + const repoPath = join(PATCH_REPOS_PATH, type, appName); + const knownHostsPath = path.join(SSH_PATH, "known_hosts"); + + // Check if repo exists + const checkCommand = `test -d "${repoPath}/.git" && echo "exists" || echo "not_exists"`; + + let exists = false; + if (serverId) { + const result = await execAsyncRemote(serverId, checkCommand); + exists = result.stdout.trim() === "exists"; + } else { + const result = await execAsync(checkCommand); + exists = result.stdout.trim() === "exists"; + } + + // Setup SSH if needed + let sshSetup = ""; + if (sshKeyId) { + const sshKey = await findSSHKeyById(sshKeyId); + const temporalKeyPath = "/tmp/patch_repo_id_rsa"; + sshSetup = ` +echo "${sshKey.privateKey}" > ${temporalKeyPath}; +chmod 600 ${temporalKeyPath}; +export GIT_SSH_COMMAND="ssh -i ${temporalKeyPath} -o UserKnownHostsFile=${knownHostsPath} -o StrictHostKeyChecking=accept-new"; +`; + } + + if (!exists) { + // Clone the repo + const cloneCommand = ` +set -e; +${sshSetup} +mkdir -p "${repoPath}"; +git clone --branch ${gitBranch} --progress "${gitUrl}" "${repoPath}"; +echo "Repository cloned successfully"; +`; + + try { + if (serverId) { + await execAsyncRemote(serverId, cloneCommand); + } else { + await execAsync(cloneCommand); + } + } catch (error) { + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: `Failed to clone repository: ${error}`, + }); + } + } else { + // Repo exists - check if on correct branch and update + const updateCommand = ` +set -e; +cd "${repoPath}"; +${sshSetup} + +# Fetch all updates including tags +git fetch origin --tags --force + +# Checkout the target (branch or tag) - this handles switching branches/tags +git checkout --force "${gitBranch}" + +# If it's a branch that corresponds to a remote branch, hard reset to match remote +# This ensures we pull the latest changes for that branch. +# If it's a tag, we are already at the correct commit after checkout. +if git rev-parse --verify "origin/${gitBranch}" >/dev/null 2>&1; then + git reset --hard "origin/${gitBranch}" +fi + +echo "Updated repository to ${gitBranch}" +`; + + try { + if (serverId) { + await execAsyncRemote(serverId, updateCommand); + } else { + await execAsync(updateCommand); + } + } catch (error) { + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: `Failed to update repository: ${error}`, + }); + } + } + + return repoPath; +}; + +interface DirectoryEntry { + name: string; + path: string; + type: "file" | "directory"; + children?: DirectoryEntry[]; +} + +/** + * Read directory tree of the patch repo + */ +export const readPatchRepoDirectory = async ( + repoPath: string, + serverId?: string | null, +): Promise => { + // Use git ls-tree to get tracked files only + const command = `cd "${repoPath}" && git ls-tree -r --name-only HEAD`; + + let stdout: string; + try { + if (serverId) { + const result = await execAsyncRemote(serverId, command); + stdout = result.stdout; + } else { + const result = await execAsync(command); + stdout = result.stdout; + } + } catch (error) { + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: `Failed to read repository: ${error}`, + }); + } + + const files = stdout.trim().split("\n").filter(Boolean); + + // Build tree structure + const root: DirectoryEntry[] = []; + const dirMap = new Map(); + + for (const filePath of files) { + const parts = filePath.split("/"); + let currentPath = ""; + + for (let i = 0; i < parts.length; i++) { + const part = parts[i]; + if (!part) continue; + + const isFile = i === parts.length - 1; + const parentPath = currentPath; + currentPath = currentPath ? `${currentPath}/${part}` : part; + + if (!dirMap.has(currentPath)) { + const entry: DirectoryEntry = { + name: part, + path: currentPath, + type: isFile ? "file" : "directory", + children: isFile ? undefined : [], + }; + + dirMap.set(currentPath, entry); + + if (parentPath) { + const parent = dirMap.get(parentPath); + parent?.children?.push(entry); + } else { + root.push(entry); + } + } + } + } + + return root; +}; + +interface ReadFileResult { + content: string; + patchError?: boolean; + patchErrorMessage?: string; +} + +/** + * Read file content from patch repo, optionally with patch applied + */ +export const readPatchRepoFile = async ( + repoPath: string, + filePath: string, + patchContent?: string, + serverId?: string | null, +): Promise => { + const fullPath = join(repoPath, filePath); + + // Read original file + const command = `cat "${fullPath}" 2>/dev/null || echo "__FILE_NOT_FOUND__"`; + + let content: string; + try { + if (serverId) { + const result = await execAsyncRemote(serverId, command); + content = result.stdout; + } else { + const result = await execAsync(command); + content = result.stdout; + } + } catch (error) { + throw new TRPCError({ + code: "NOT_FOUND", + message: `File not found: ${filePath}`, + }); + } + + if (content.trim() === "__FILE_NOT_FOUND__") { + throw new TRPCError({ + code: "NOT_FOUND", + message: `File not found: ${filePath}`, + }); + } + + // If no patch, return original content + if (!patchContent) { + return { content }; + } + + // Try to apply patch + const tempDir = `/tmp/patch_apply_${Date.now()}`; + const encodedContent = Buffer.from(content).toString("base64"); + const encodedPatch = Buffer.from(patchContent).toString("base64"); + + // We need to recreate the file structure for git apply to work + // git diff usually uses paths relative to repo root + const applyCommand = ` +set -e; +mkdir -p "${tempDir}"; +cd "${tempDir}"; +git init -q; +# Create file with correct path +mkdir -p "$(dirname "${filePath}")"; +echo "${encodedContent}" | base64 -d > "${filePath}"; +# Save patch +echo "${encodedPatch}" | base64 -d > "patch.diff"; +# Apply patch +git apply --ignore-space-change --ignore-whitespace patch.diff; +# Read result +cat "${filePath}"; +rm -rf "${tempDir}"; +`; + + try { + let patchedContent: string; + if (serverId) { + const result = await execAsyncRemote(serverId, applyCommand); + patchedContent = result.stdout; + } else { + const result = await execAsync(applyCommand); + patchedContent = result.stdout; + } + return { content: patchedContent }; + } catch (error) { + // Patch failed - return original content with error + const cleanupCommand = `rm -rf "${tempDir}" 2>/dev/null || true`; + try { + if (serverId) { + await execAsyncRemote(serverId, cleanupCommand); + } else { + await execAsync(cleanupCommand); + } + } catch { + // Ignore cleanup errors + } + + return { + content, + patchError: true, + patchErrorMessage: `Failed to apply patch: ${error}`, + }; + } +}; + +/** + * Clean all patch repos + */ +export const cleanPatchRepos = async (serverId?: string | null): Promise => { + const { PATCH_REPOS_PATH } = paths(!!serverId); + + const command = `rm -rf "${PATCH_REPOS_PATH}"/* 2>/dev/null || true`; + + if (serverId) { + await execAsyncRemote(serverId, command); + } else { + await execAsync(command); + } +}; diff --git a/packages/server/src/services/patch.ts b/packages/server/src/services/patch.ts new file mode 100644 index 000000000..8fdac516a --- /dev/null +++ b/packages/server/src/services/patch.ts @@ -0,0 +1,295 @@ +import { join } from "node:path"; +import { paths } from "@dokploy/server/constants"; +import { db } from "@dokploy/server/db"; +import { + type apiCreatePatch, + patch, +} from "@dokploy/server/db/schema"; +import { + execAsync, + execAsyncRemote, +} from "@dokploy/server/utils/process/execAsync"; +import { TRPCError } from "@trpc/server"; +import { and, eq, isNotNull } from "drizzle-orm"; + +export type Patch = typeof patch.$inferSelect; + +// CRUD Operations + +export const createPatch = async (input: typeof apiCreatePatch._type) => { + if (!input.applicationId && !input.composeId) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Either applicationId or composeId must be provided", + }); + } + + const newPatch = await db + .insert(patch) + .values({ + ...input, + content: input.content.endsWith("\n") + ? input.content + : `${input.content}\n`, + }) + .returning() + .then((value) => value[0]); + + if (!newPatch) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Error creating the patch", + }); + } + + return newPatch; +}; + +export const findPatchById = async (patchId: string) => { + const result = await db.query.patch.findFirst({ + where: eq(patch.patchId, patchId), + }); + + if (!result) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Patch not found", + }); + } + + return result; +}; + +export const findPatchesByApplicationId = async (applicationId: string) => { + return await db.query.patch.findMany({ + where: and( + eq(patch.applicationId, applicationId), + isNotNull(patch.applicationId), + ), + orderBy: (patch, { asc }) => [asc(patch.filePath)], + }); +}; + +export const findPatchesByComposeId = async (composeId: string) => { + return await db.query.patch.findMany({ + where: and(eq(patch.composeId, composeId), isNotNull(patch.composeId)), + orderBy: (patch, { asc }) => [asc(patch.filePath)], + }); +}; + +export const findPatchByFilePath = async ( + filePath: string, + applicationId?: string, + composeId?: string, +) => { + if (applicationId) { + return await db.query.patch.findFirst({ + where: and( + eq(patch.filePath, filePath), + eq(patch.applicationId, applicationId), + ), + }); + } + if (composeId) { + return await db.query.patch.findFirst({ + where: and(eq(patch.filePath, filePath), eq(patch.composeId, composeId)), + }); + } + return null; +}; + +export const updatePatch = async ( + patchId: string, + data: Partial, +) => { + const result = await db + .update(patch) + .set({ + ...data, + ...(data.content && { + content: data.content.endsWith("\n") + ? data.content + : `${data.content}\n`, + }), + updatedAt: new Date().toISOString(), + }) + .where(eq(patch.patchId, patchId)) + .returning(); + + return result[0]; +}; + +export const deletePatch = async (patchId: string) => { + const result = await db + .delete(patch) + .where(eq(patch.patchId, patchId)) + .returning(); + + return result[0]; +}; + +// Patch Application Functions + +interface ApplyPatchesOptions { + appName: string; + type: "application" | "compose"; + serverId: string | null; + patches: Patch[]; +} + +/** + * Generate shell commands to apply patches to cloned repository + * Uses git apply to apply unified diff patches + */ +export const generateApplyPatchesCommand = ({ + appName, + type, + patches, + serverId, +}: ApplyPatchesOptions): string => { + if (patches.length === 0) { + return ""; + } + + const { COMPOSE_PATH, APPLICATIONS_PATH } = paths(!!serverId); + const basePath = type === "compose" ? COMPOSE_PATH : APPLICATIONS_PATH; + const codePath = join(basePath, appName, "code"); + + let command = `echo "Applying ${patches.length} patch(es)...";`; + + for (const p of patches) { + // Create a temporary patch file and apply it + const patchFileName = `/tmp/patch_${p.patchId}.patch`; + // Escape content for shell - use base64 encoding + const encodedContent = Buffer.from(p.content).toString("base64"); + + command += ` +echo "${encodedContent}" | base64 -d > ${patchFileName}; +cd ${codePath} && git apply --whitespace=fix ${patchFileName} && echo "✅ Applied patch for: ${p.filePath}" || echo "⚠️ Warning: Failed to apply patch for: ${p.filePath}"; +rm -f ${patchFileName}; +`; + } + + return command; +}; + +/** + * Apply patches during build process + */ +export const applyPatches = async ({ + appName, + type, + serverId, + patches, +}: ApplyPatchesOptions): Promise => { + const enabledPatches = patches.filter((p) => p.enabled); + + if (enabledPatches.length === 0) { + return; + } + + const command = generateApplyPatchesCommand({ + appName, + type, + serverId, + patches: enabledPatches, + }); + + if (serverId) { + await execAsyncRemote(serverId, command); + } else { + await execAsync(command); + } +}; + +interface GeneratePatchOptions { + codePath: string; + filePath: string; + newContent: string; + serverId?: string | null; +} + +/** + * Generate a patch from modified file content using git diff + */ +export const generatePatch = async ({ + codePath, + filePath, + newContent, + serverId, +}: GeneratePatchOptions): Promise => { + const fullPath = join(codePath, filePath); + + // Write new content to the file + const encodedContent = Buffer.from(newContent).toString("base64"); + const writeCommand = `echo "${encodedContent}" | base64 -d > "${fullPath}"`; + + if (serverId) { + await execAsyncRemote(serverId, writeCommand); + } else { + await execAsync(writeCommand); + } + + // Generate diff + const diffCommand = `cd "${codePath}" && git diff -- "${filePath}"`; + + let diffResult: string; + if (serverId) { + const result = await execAsyncRemote(serverId, diffCommand); + diffResult = result.stdout; + } else { + const result = await execAsync(diffCommand); + diffResult = result.stdout; + } + + // Reset the file to original state + const resetCommand = `cd "${codePath}" && git checkout -- "${filePath}"`; + if (serverId) { + await execAsyncRemote(serverId, resetCommand); + } else { + await execAsync(resetCommand); + } + + return diffResult; +}; + +interface ApplyPatchToContentOptions { + originalContent: string; + patchContent: string; +} + +/** + * Apply a patch to content in memory (for preview purposes) + * Returns the patched content or throws an error if patch fails + */ +export const applyPatchToContent = async ({ + originalContent, + patchContent, +}: ApplyPatchToContentOptions): Promise => { + // Create temp files and apply patch + const tempDir = "/tmp/patch_preview_" + Date.now(); + const tempFile = `${tempDir}/file`; + const patchFile = `${tempDir}/patch.diff`; + + const encodedOriginal = Buffer.from(originalContent).toString("base64"); + const encodedPatch = Buffer.from(patchContent).toString("base64"); + + const command = ` +mkdir -p "${tempDir}"; +echo "${encodedOriginal}" | base64 -d > "${tempFile}"; +echo "${encodedPatch}" | base64 -d > "${patchFile}"; +cd "${tempDir}" && patch -p0 < "${patchFile}" 2>/dev/null; +cat "${tempFile}"; +rm -rf "${tempDir}"; +`; + + try { + const result = await execAsync(command); + return result.stdout; + } catch { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Failed to apply patch to content", + }); + } +}; From a4eb0bfea14bac47dd596d494dd03917edcbcb10 Mon Sep 17 00:00:00 2001 From: user Date: Tue, 10 Feb 2026 23:45:34 +0300 Subject: [PATCH 042/206] migration --- apps/dokploy/drizzle/0143_cute_forge.sql | 15 + apps/dokploy/drizzle/meta/0143_snapshot.json | 7390 ++++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 7 + 3 files changed, 7412 insertions(+) create mode 100644 apps/dokploy/drizzle/0143_cute_forge.sql create mode 100644 apps/dokploy/drizzle/meta/0143_snapshot.json diff --git a/apps/dokploy/drizzle/0143_cute_forge.sql b/apps/dokploy/drizzle/0143_cute_forge.sql new file mode 100644 index 000000000..0c9216d55 --- /dev/null +++ b/apps/dokploy/drizzle/0143_cute_forge.sql @@ -0,0 +1,15 @@ +CREATE TABLE "patch" ( + "patchId" text PRIMARY KEY NOT NULL, + "filePath" text NOT NULL, + "enabled" boolean DEFAULT true NOT NULL, + "content" text NOT NULL, + "createdAt" text NOT NULL, + "updatedAt" text, + "applicationId" text, + "composeId" text, + CONSTRAINT "patch_filepath_application_unique" UNIQUE("filePath","applicationId"), + CONSTRAINT "patch_filepath_compose_unique" UNIQUE("filePath","composeId") +); +--> statement-breakpoint +ALTER TABLE "patch" ADD CONSTRAINT "patch_applicationId_application_applicationId_fk" FOREIGN KEY ("applicationId") REFERENCES "public"."application"("applicationId") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "patch" ADD CONSTRAINT "patch_composeId_compose_composeId_fk" FOREIGN KEY ("composeId") REFERENCES "public"."compose"("composeId") ON DELETE cascade ON UPDATE no action; \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0143_snapshot.json b/apps/dokploy/drizzle/meta/0143_snapshot.json new file mode 100644 index 000000000..296c14e4c --- /dev/null +++ b/apps/dokploy/drizzle/meta/0143_snapshot.json @@ -0,0 +1,7390 @@ +{ + "id": "3c3f9c63-32c2-479a-aa45-9726bed6281e", + "prevId": "fce8c149-40a8-4279-a432-cfa7538666c6", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is2FAEnabled": { + "name": "is2FAEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "resetPasswordToken": { + "name": "resetPasswordToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resetPasswordExpiresAt": { + "name": "resetPasswordExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationToken": { + "name": "confirmationToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationExpiresAt": { + "name": "confirmationExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "inviter_id": { + "name": "inviter_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": [ + "inviter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_default": { + "name": "is_default", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateProjects": { + "name": "canCreateProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToSSHKeys": { + "name": "canAccessToSSHKeys", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateServices": { + "name": "canCreateServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteProjects": { + "name": "canDeleteProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteServices": { + "name": "canDeleteServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToDocker": { + "name": "canAccessToDocker", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToAPI": { + "name": "canAccessToAPI", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToGitProviders": { + "name": "canAccessToGitProviders", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToTraefikFiles": { + "name": "canAccessToTraefikFiles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteEnvironments": { + "name": "canDeleteEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateEnvironments": { + "name": "canCreateEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "accesedProjects": { + "name": "accesedProjects", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedEnvironments": { + "name": "accessedEnvironments", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accesedServices": { + "name": "accesedServices", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner_id": { + "name": "owner_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_owner_id_user_id_fk": { + "name": "organization_owner_id_user_id_fk", + "tableFrom": "organization", + "tableTo": "user", + "columnsFrom": [ + "owner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.two_factor": { + "name": "two_factor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backup_codes": { + "name": "backup_codes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "two_factor_user_id_user_id_fk": { + "name": "two_factor_user_id_user_id_fk", + "tableFrom": "two_factor", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ai": { + "name": "ai", + "schema": "", + "columns": { + "aiId": { + "name": "aiId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiUrl": { + "name": "apiUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isEnabled": { + "name": "isEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ai_organizationId_organization_id_fk": { + "name": "ai_organizationId_organization_id_fk", + "tableFrom": "ai", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.application": { + "name": "application", + "schema": "", + "columns": { + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewEnv": { + "name": "previewEnv", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewBuildArgs": { + "name": "previewBuildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewBuildSecrets": { + "name": "previewBuildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLabels": { + "name": "previewLabels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewWildcard": { + "name": "previewWildcard", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewPort": { + "name": "previewPort", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "previewHttps": { + "name": "previewHttps", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "previewPath": { + "name": "previewPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "previewCustomCertResolver": { + "name": "previewCustomCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLimit": { + "name": "previewLimit", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3 + }, + "isPreviewDeploymentsActive": { + "name": "isPreviewDeploymentsActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewRequireCollaboratorPermissions": { + "name": "previewRequireCollaboratorPermissions", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rollbackActive": { + "name": "rollbackActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "buildArgs": { + "name": "buildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildSecrets": { + "name": "buildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "subtitle": { + "name": "subtitle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "cleanCache": { + "name": "cleanCache", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildPath": { + "name": "buildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBuildPath": { + "name": "gitlabBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBuildPath": { + "name": "giteaBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBuildPath": { + "name": "bitbucketBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBuildPath": { + "name": "customGitBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerfile": { + "name": "dockerfile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerContextPath": { + "name": "dockerContextPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerBuildStage": { + "name": "dockerBuildStage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dropBuildPath": { + "name": "dropBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "buildType": { + "name": "buildType", + "type": "buildType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'nixpacks'" + }, + "railpackVersion": { + "name": "railpackVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0.15.4'" + }, + "herokuVersion": { + "name": "herokuVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'24'" + }, + "publishDirectory": { + "name": "publishDirectory", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isStaticSpa": { + "name": "isStaticSpa", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "createEnvFile": { + "name": "createEnvFile", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackRegistryId": { + "name": "rollbackRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildRegistryId": { + "name": "buildRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "application", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_registryId_registry_registryId_fk": { + "name": "application_registryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "registryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_rollbackRegistryId_registry_registryId_fk": { + "name": "application_rollbackRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "rollbackRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_environmentId_environment_environmentId_fk": { + "name": "application_environmentId_environment_environmentId_fk", + "tableFrom": "application", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_githubId_github_githubId_fk": { + "name": "application_githubId_github_githubId_fk", + "tableFrom": "application", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_gitlabId_gitlab_gitlabId_fk": { + "name": "application_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "application", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_giteaId_gitea_giteaId_fk": { + "name": "application_giteaId_gitea_giteaId_fk", + "tableFrom": "application", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "application_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "application", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_serverId_server_serverId_fk": { + "name": "application_serverId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_buildServerId_server_serverId_fk": { + "name": "application_buildServerId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_buildRegistryId_registry_registryId_fk": { + "name": "application_buildRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "buildRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "application_appName_unique": { + "name": "application_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backup": { + "name": "backup", + "schema": "", + "columns": { + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schedule": { + "name": "schedule", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "database": { + "name": "database", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "backupType": { + "name": "backupType", + "type": "backupType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'database'" + }, + "databaseType": { + "name": "databaseType", + "type": "databaseType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backup_destinationId_destination_destinationId_fk": { + "name": "backup_destinationId_destination_destinationId_fk", + "tableFrom": "backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_composeId_compose_composeId_fk": { + "name": "backup_composeId_compose_composeId_fk", + "tableFrom": "backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_postgresId_postgres_postgresId_fk": { + "name": "backup_postgresId_postgres_postgresId_fk", + "tableFrom": "backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mariadbId_mariadb_mariadbId_fk": { + "name": "backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mysqlId_mysql_mysqlId_fk": { + "name": "backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mongoId_mongo_mongoId_fk": { + "name": "backup_mongoId_mongo_mongoId_fk", + "tableFrom": "backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_userId_user_id_fk": { + "name": "backup_userId_user_id_fk", + "tableFrom": "backup", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "backup_appName_unique": { + "name": "backup_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.bitbucket": { + "name": "bitbucket", + "schema": "", + "columns": { + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "bitbucketUsername": { + "name": "bitbucketUsername", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketEmail": { + "name": "bitbucketEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "appPassword": { + "name": "appPassword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketWorkspaceName": { + "name": "bitbucketWorkspaceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { + "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "bitbucket", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.certificate": { + "name": "certificate", + "schema": "", + "columns": { + "certificateId": { + "name": "certificateId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificateData": { + "name": "certificateData", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificatePath": { + "name": "certificatePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "autoRenew": { + "name": "autoRenew", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "certificate_organizationId_organization_id_fk": { + "name": "certificate_organizationId_organization_id_fk", + "tableFrom": "certificate", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "certificate_serverId_server_serverId_fk": { + "name": "certificate_serverId_server_serverId_fk", + "tableFrom": "certificate", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "certificate_certificatePath_unique": { + "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, + "columns": [ + "certificatePath" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.compose": { + "name": "compose", + "schema": "", + "columns": { + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeFile": { + "name": "composeFile", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceTypeCompose", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "composeType": { + "name": "composeType", + "type": "composeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'docker-compose'" + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "composePath": { + "name": "composePath", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'./docker-compose.yml'" + }, + "suffix": { + "name": "suffix", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "randomize": { + "name": "randomize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeployment": { + "name": "isolatedDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeploymentsVolume": { + "name": "isolatedDeploymentsVolume", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "composeStatus": { + "name": "composeStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "compose", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_environmentId_environment_environmentId_fk": { + "name": "compose_environmentId_environment_environmentId_fk", + "tableFrom": "compose", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "compose_githubId_github_githubId_fk": { + "name": "compose_githubId_github_githubId_fk", + "tableFrom": "compose", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_gitlabId_gitlab_gitlabId_fk": { + "name": "compose_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "compose", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "compose", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_giteaId_gitea_giteaId_fk": { + "name": "compose_giteaId_gitea_giteaId_fk", + "tableFrom": "compose", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_serverId_server_serverId_fk": { + "name": "compose_serverId_server_serverId_fk", + "tableFrom": "compose", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.deployment": { + "name": "deployment", + "schema": "", + "columns": { + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "deploymentStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'running'" + }, + "logPath": { + "name": "logPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pid": { + "name": "pid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isPreviewDeployment": { + "name": "isPreviewDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "startedAt": { + "name": "startedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "errorMessage": { + "name": "errorMessage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "deployment_applicationId_application_applicationId_fk": { + "name": "deployment_applicationId_application_applicationId_fk", + "tableFrom": "deployment", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_composeId_compose_composeId_fk": { + "name": "deployment_composeId_compose_composeId_fk", + "tableFrom": "deployment", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_serverId_server_serverId_fk": { + "name": "deployment_serverId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "deployment", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_scheduleId_schedule_scheduleId_fk": { + "name": "deployment_scheduleId_schedule_scheduleId_fk", + "tableFrom": "deployment", + "tableTo": "schedule", + "columnsFrom": [ + "scheduleId" + ], + "columnsTo": [ + "scheduleId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_backupId_backup_backupId_fk": { + "name": "deployment_backupId_backup_backupId_fk", + "tableFrom": "deployment", + "tableTo": "backup", + "columnsFrom": [ + "backupId" + ], + "columnsTo": [ + "backupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_rollbackId_rollback_rollbackId_fk": { + "name": "deployment_rollbackId_rollback_rollbackId_fk", + "tableFrom": "deployment", + "tableTo": "rollback", + "columnsFrom": [ + "rollbackId" + ], + "columnsTo": [ + "rollbackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_volumeBackupId_volume_backup_volumeBackupId_fk": { + "name": "deployment_volumeBackupId_volume_backup_volumeBackupId_fk", + "tableFrom": "deployment", + "tableTo": "volume_backup", + "columnsFrom": [ + "volumeBackupId" + ], + "columnsTo": [ + "volumeBackupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_buildServerId_server_serverId_fk": { + "name": "deployment_buildServerId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.destination": { + "name": "destination", + "schema": "", + "columns": { + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "accessKey": { + "name": "accessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "secretAccessKey": { + "name": "secretAccessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bucket": { + "name": "bucket", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "region": { + "name": "region", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "destination_organizationId_organization_id_fk": { + "name": "destination_organizationId_organization_id_fk", + "tableFrom": "destination", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.domain": { + "name": "domain", + "schema": "", + "columns": { + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domainType": { + "name": "domainType", + "type": "domainType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'application'" + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customCertResolver": { + "name": "customCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "internalPath": { + "name": "internalPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "stripPath": { + "name": "stripPath", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "domain_composeId_compose_composeId_fk": { + "name": "domain_composeId_compose_composeId_fk", + "tableFrom": "domain", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_applicationId_application_applicationId_fk": { + "name": "domain_applicationId_application_applicationId_fk", + "tableFrom": "domain", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "domain", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.environment": { + "name": "environment", + "schema": "", + "columns": { + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isDefault": { + "name": "isDefault", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "environment_projectId_project_projectId_fk": { + "name": "environment_projectId_project_projectId_fk", + "tableFrom": "environment", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "projectId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.git_provider": { + "name": "git_provider", + "schema": "", + "columns": { + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "providerType": { + "name": "providerType", + "type": "gitProviderType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "git_provider_organizationId_organization_id_fk": { + "name": "git_provider_organizationId_organization_id_fk", + "tableFrom": "git_provider", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "git_provider_userId_user_id_fk": { + "name": "git_provider_userId_user_id_fk", + "tableFrom": "git_provider", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitea": { + "name": "gitea", + "schema": "", + "columns": { + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "giteaUrl": { + "name": "giteaUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitea.com'" + }, + "giteaInternalUrl": { + "name": "giteaInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_id": { + "name": "client_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_secret": { + "name": "client_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "scopes": { + "name": "scopes", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'repo,repo:status,read:user,read:org'" + }, + "last_authenticated_at": { + "name": "last_authenticated_at", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "gitea_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitea_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitea", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.github": { + "name": "github", + "schema": "", + "columns": { + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "githubAppName": { + "name": "githubAppName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubAppId": { + "name": "githubAppId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "githubClientId": { + "name": "githubClientId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubClientSecret": { + "name": "githubClientSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubInstallationId": { + "name": "githubInstallationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubPrivateKey": { + "name": "githubPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubWebhookSecret": { + "name": "githubWebhookSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "github_gitProviderId_git_provider_gitProviderId_fk": { + "name": "github_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "github", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitlab": { + "name": "gitlab", + "schema": "", + "columns": { + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "gitlabUrl": { + "name": "gitlabUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitlab.com'" + }, + "gitlabInternalUrl": { + "name": "gitlabInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "application_id": { + "name": "application_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "group_name": { + "name": "group_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "gitlab_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitlab", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mariadb": { + "name": "mariadb", + "schema": "", + "columns": { + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mariadb_environmentId_environment_environmentId_fk": { + "name": "mariadb_environmentId_environment_environmentId_fk", + "tableFrom": "mariadb", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mariadb_serverId_server_serverId_fk": { + "name": "mariadb_serverId_server_serverId_fk", + "tableFrom": "mariadb", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mariadb_appName_unique": { + "name": "mariadb_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mongo": { + "name": "mongo", + "schema": "", + "columns": { + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "replicaSets": { + "name": "replicaSets", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "mongo_environmentId_environment_environmentId_fk": { + "name": "mongo_environmentId_environment_environmentId_fk", + "tableFrom": "mongo", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mongo_serverId_server_serverId_fk": { + "name": "mongo_serverId_server_serverId_fk", + "tableFrom": "mongo", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mongo_appName_unique": { + "name": "mongo_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mount": { + "name": "mount", + "schema": "", + "columns": { + "mountId": { + "name": "mountId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "mountType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "hostPath": { + "name": "hostPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "mountPath": { + "name": "mountPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mount_applicationId_application_applicationId_fk": { + "name": "mount_applicationId_application_applicationId_fk", + "tableFrom": "mount", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_postgresId_postgres_postgresId_fk": { + "name": "mount_postgresId_postgres_postgresId_fk", + "tableFrom": "mount", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mariadbId_mariadb_mariadbId_fk": { + "name": "mount_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "mount", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mongoId_mongo_mongoId_fk": { + "name": "mount_mongoId_mongo_mongoId_fk", + "tableFrom": "mount", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mysqlId_mysql_mysqlId_fk": { + "name": "mount_mysqlId_mysql_mysqlId_fk", + "tableFrom": "mount", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_redisId_redis_redisId_fk": { + "name": "mount_redisId_redis_redisId_fk", + "tableFrom": "mount", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_composeId_compose_composeId_fk": { + "name": "mount_composeId_compose_composeId_fk", + "tableFrom": "mount", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mysql": { + "name": "mysql", + "schema": "", + "columns": { + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mysql_environmentId_environment_environmentId_fk": { + "name": "mysql_environmentId_environment_environmentId_fk", + "tableFrom": "mysql", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mysql_serverId_server_serverId_fk": { + "name": "mysql_serverId_server_serverId_fk", + "tableFrom": "mysql", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mysql_appName_unique": { + "name": "mysql_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custom": { + "name": "custom", + "schema": "", + "columns": { + "customId": { + "name": "customId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "headers": { + "name": "headers", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.discord": { + "name": "discord", + "schema": "", + "columns": { + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email": { + "name": "email", + "schema": "", + "columns": { + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "smtpServer": { + "name": "smtpServer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "smtpPort": { + "name": "smtpPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gotify": { + "name": "gotify", + "schema": "", + "columns": { + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appToken": { + "name": "appToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lark": { + "name": "lark", + "schema": "", + "columns": { + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification": { + "name": "notification", + "schema": "", + "columns": { + "notificationId": { + "name": "notificationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appDeploy": { + "name": "appDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "appBuildError": { + "name": "appBuildError", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "databaseBackup": { + "name": "databaseBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "volumeBackup": { + "name": "volumeBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dokployRestart": { + "name": "dokployRestart", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerCleanup": { + "name": "dockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "serverThreshold": { + "name": "serverThreshold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "notificationType": { + "name": "notificationType", + "type": "notificationType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customId": { + "name": "customId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "notification_slackId_slack_slackId_fk": { + "name": "notification_slackId_slack_slackId_fk", + "tableFrom": "notification", + "tableTo": "slack", + "columnsFrom": [ + "slackId" + ], + "columnsTo": [ + "slackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_telegramId_telegram_telegramId_fk": { + "name": "notification_telegramId_telegram_telegramId_fk", + "tableFrom": "notification", + "tableTo": "telegram", + "columnsFrom": [ + "telegramId" + ], + "columnsTo": [ + "telegramId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_discordId_discord_discordId_fk": { + "name": "notification_discordId_discord_discordId_fk", + "tableFrom": "notification", + "tableTo": "discord", + "columnsFrom": [ + "discordId" + ], + "columnsTo": [ + "discordId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_emailId_email_emailId_fk": { + "name": "notification_emailId_email_emailId_fk", + "tableFrom": "notification", + "tableTo": "email", + "columnsFrom": [ + "emailId" + ], + "columnsTo": [ + "emailId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_resendId_resend_resendId_fk": { + "name": "notification_resendId_resend_resendId_fk", + "tableFrom": "notification", + "tableTo": "resend", + "columnsFrom": [ + "resendId" + ], + "columnsTo": [ + "resendId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_gotifyId_gotify_gotifyId_fk": { + "name": "notification_gotifyId_gotify_gotifyId_fk", + "tableFrom": "notification", + "tableTo": "gotify", + "columnsFrom": [ + "gotifyId" + ], + "columnsTo": [ + "gotifyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_ntfyId_ntfy_ntfyId_fk": { + "name": "notification_ntfyId_ntfy_ntfyId_fk", + "tableFrom": "notification", + "tableTo": "ntfy", + "columnsFrom": [ + "ntfyId" + ], + "columnsTo": [ + "ntfyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_customId_custom_customId_fk": { + "name": "notification_customId_custom_customId_fk", + "tableFrom": "notification", + "tableTo": "custom", + "columnsFrom": [ + "customId" + ], + "columnsTo": [ + "customId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_larkId_lark_larkId_fk": { + "name": "notification_larkId_lark_larkId_fk", + "tableFrom": "notification", + "tableTo": "lark", + "columnsFrom": [ + "larkId" + ], + "columnsTo": [ + "larkId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_pushoverId_pushover_pushoverId_fk": { + "name": "notification_pushoverId_pushover_pushoverId_fk", + "tableFrom": "notification", + "tableTo": "pushover", + "columnsFrom": [ + "pushoverId" + ], + "columnsTo": [ + "pushoverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_organizationId_organization_id_fk": { + "name": "notification_organizationId_organization_id_fk", + "tableFrom": "notification", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ntfy": { + "name": "ntfy", + "schema": "", + "columns": { + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "topic": { + "name": "topic", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "accessToken": { + "name": "accessToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 3 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pushover": { + "name": "pushover", + "schema": "", + "columns": { + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userKey": { + "name": "userKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "retry": { + "name": "retry", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "expire": { + "name": "expire", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resend": { + "name": "resend", + "schema": "", + "columns": { + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.slack": { + "name": "slack", + "schema": "", + "columns": { + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.telegram": { + "name": "telegram", + "schema": "", + "columns": { + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "botToken": { + "name": "botToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "chatId": { + "name": "chatId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "messageThreadId": { + "name": "messageThreadId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.patch": { + "name": "patch", + "schema": "", + "columns": { + "patchId": { + "name": "patchId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "updatedAt": { + "name": "updatedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "patch_applicationId_application_applicationId_fk": { + "name": "patch_applicationId_application_applicationId_fk", + "tableFrom": "patch", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "patch_composeId_compose_composeId_fk": { + "name": "patch_composeId_compose_composeId_fk", + "tableFrom": "patch", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "patch_filepath_application_unique": { + "name": "patch_filepath_application_unique", + "nullsNotDistinct": false, + "columns": [ + "filePath", + "applicationId" + ] + }, + "patch_filepath_compose_unique": { + "name": "patch_filepath_compose_unique", + "nullsNotDistinct": false, + "columns": [ + "filePath", + "composeId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.port": { + "name": "port", + "schema": "", + "columns": { + "portId": { + "name": "portId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "publishedPort": { + "name": "publishedPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "publishMode": { + "name": "publishMode", + "type": "publishModeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'host'" + }, + "targetPort": { + "name": "targetPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "protocol": { + "name": "protocol", + "type": "protocolType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "port_applicationId_application_applicationId_fk": { + "name": "port_applicationId_application_applicationId_fk", + "tableFrom": "port", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.postgres": { + "name": "postgres", + "schema": "", + "columns": { + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "postgres_environmentId_environment_environmentId_fk": { + "name": "postgres_environmentId_environment_environmentId_fk", + "tableFrom": "postgres", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "postgres_serverId_server_serverId_fk": { + "name": "postgres_serverId_server_serverId_fk", + "tableFrom": "postgres", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "postgres_appName_unique": { + "name": "postgres_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.preview_deployments": { + "name": "preview_deployments", + "schema": "", + "columns": { + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestId": { + "name": "pullRequestId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestNumber": { + "name": "pullRequestNumber", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestURL": { + "name": "pullRequestURL", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestTitle": { + "name": "pullRequestTitle", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestCommentId": { + "name": "pullRequestCommentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "previewStatus": { + "name": "previewStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "preview_deployments_applicationId_application_applicationId_fk": { + "name": "preview_deployments_applicationId_application_applicationId_fk", + "tableFrom": "preview_deployments", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "preview_deployments_domainId_domain_domainId_fk": { + "name": "preview_deployments_domainId_domain_domainId_fk", + "tableFrom": "preview_deployments", + "tableTo": "domain", + "columnsFrom": [ + "domainId" + ], + "columnsTo": [ + "domainId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "preview_deployments_appName_unique": { + "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project": { + "name": "project", + "schema": "", + "columns": { + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": { + "project_organizationId_organization_id_fk": { + "name": "project_organizationId_organization_id_fk", + "tableFrom": "project", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redirect": { + "name": "redirect", + "schema": "", + "columns": { + "redirectId": { + "name": "redirectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "regex": { + "name": "regex", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "replacement": { + "name": "replacement", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permanent": { + "name": "permanent", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "redirect_applicationId_application_applicationId_fk": { + "name": "redirect_applicationId_application_applicationId_fk", + "tableFrom": "redirect", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redis": { + "name": "redis", + "schema": "", + "columns": { + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "redis_environmentId_environment_environmentId_fk": { + "name": "redis_environmentId_environment_environmentId_fk", + "tableFrom": "redis", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "redis_serverId_server_serverId_fk": { + "name": "redis_serverId_server_serverId_fk", + "tableFrom": "redis", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "redis_appName_unique": { + "name": "redis_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.registry": { + "name": "registry", + "schema": "", + "columns": { + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "registryName": { + "name": "registryName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "imagePrefix": { + "name": "imagePrefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "selfHosted": { + "name": "selfHosted", + "type": "RegistryType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'cloud'" + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "registry_organizationId_organization_id_fk": { + "name": "registry_organizationId_organization_id_fk", + "tableFrom": "registry", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.rollback": { + "name": "rollback", + "schema": "", + "columns": { + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fullContext": { + "name": "fullContext", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "rollback_deploymentId_deployment_deploymentId_fk": { + "name": "rollback_deploymentId_deployment_deploymentId_fk", + "tableFrom": "rollback", + "tableTo": "deployment", + "columnsFrom": [ + "deploymentId" + ], + "columnsTo": [ + "deploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.schedule": { + "name": "schedule", + "schema": "", + "columns": { + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "shellType": { + "name": "shellType", + "type": "shellType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'bash'" + }, + "scheduleType": { + "name": "scheduleType", + "type": "scheduleType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "script": { + "name": "script", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "timezone": { + "name": "timezone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "schedule_applicationId_application_applicationId_fk": { + "name": "schedule_applicationId_application_applicationId_fk", + "tableFrom": "schedule", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_composeId_compose_composeId_fk": { + "name": "schedule_composeId_compose_composeId_fk", + "tableFrom": "schedule", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_serverId_server_serverId_fk": { + "name": "schedule_serverId_server_serverId_fk", + "tableFrom": "schedule", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_userId_user_id_fk": { + "name": "schedule_userId_user_id_fk", + "tableFrom": "schedule", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.security": { + "name": "security", + "schema": "", + "columns": { + "securityId": { + "name": "securityId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "security_applicationId_application_applicationId_fk": { + "name": "security_applicationId_application_applicationId_fk", + "tableFrom": "security", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "security_username_applicationId_unique": { + "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "applicationId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.server": { + "name": "server", + "schema": "", + "columns": { + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'root'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverStatus": { + "name": "serverStatus", + "type": "serverStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'active'" + }, + "serverType": { + "name": "serverType", + "type": "serverType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'deploy'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + } + }, + "indexes": {}, + "foreignKeys": { + "server_organizationId_organization_id_fk": { + "name": "server_organizationId_organization_id_fk", + "tableFrom": "server", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "server_sshKeyId_ssh-key_sshKeyId_fk": { + "name": "server_sshKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "server", + "tableTo": "ssh-key", + "columnsFrom": [ + "sshKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session_temp": { + "name": "session_temp", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_temp_user_id_user_id_fk": { + "name": "session_temp_user_id_user_id_fk", + "tableFrom": "session_temp", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_temp_token_unique": { + "name": "session_temp_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ssh-key": { + "name": "ssh-key", + "schema": "", + "columns": { + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUsedAt": { + "name": "lastUsedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ssh-key_organizationId_organization_id_fk": { + "name": "ssh-key_organizationId_organization_id_fk", + "tableFrom": "ssh-key", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sso_provider": { + "name": "sso_provider", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "issuer": { + "name": "issuer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oidc_config": { + "name": "oidc_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "saml_config": { + "name": "saml_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "sso_provider_user_id_user_id_fk": { + "name": "sso_provider_user_id_user_id_fk", + "tableFrom": "sso_provider", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "sso_provider_organization_id_organization_id_fk": { + "name": "sso_provider_organization_id_organization_id_fk", + "tableFrom": "sso_provider", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sso_provider_provider_id_unique": { + "name": "sso_provider_provider_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "firstName": { + "name": "firstName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "lastName": { + "name": "lastName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "isRegistered": { + "name": "isRegistered", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "expirationDate": { + "name": "expirationDate", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'user'" + }, + "enablePaidFeatures": { + "name": "enablePaidFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "allowImpersonation": { + "name": "allowImpersonation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enableEnterpriseFeatures": { + "name": "enableEnterpriseFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "licenseKey": { + "name": "licenseKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isValidEnterpriseLicense": { + "name": "isValidEnterpriseLicense", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "stripeCustomerId": { + "name": "stripeCustomerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripeSubscriptionId": { + "name": "stripeSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serversQuantity": { + "name": "serversQuantity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "trustedOrigins": { + "name": "trustedOrigins", + "type": "text[]", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.volume_backup": { + "name": "volume_backup", + "schema": "", + "columns": { + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "turnOff": { + "name": "turnOff", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "volume_backup_applicationId_application_applicationId_fk": { + "name": "volume_backup_applicationId_application_applicationId_fk", + "tableFrom": "volume_backup", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_postgresId_postgres_postgresId_fk": { + "name": "volume_backup_postgresId_postgres_postgresId_fk", + "tableFrom": "volume_backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mariadbId_mariadb_mariadbId_fk": { + "name": "volume_backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "volume_backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mongoId_mongo_mongoId_fk": { + "name": "volume_backup_mongoId_mongo_mongoId_fk", + "tableFrom": "volume_backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mysqlId_mysql_mysqlId_fk": { + "name": "volume_backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "volume_backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_redisId_redis_redisId_fk": { + "name": "volume_backup_redisId_redis_redisId_fk", + "tableFrom": "volume_backup", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_composeId_compose_composeId_fk": { + "name": "volume_backup_composeId_compose_composeId_fk", + "tableFrom": "volume_backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_destinationId_destination_destinationId_fk": { + "name": "volume_backup_destinationId_destination_destinationId_fk", + "tableFrom": "volume_backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.webServerSettings": { + "name": "webServerSettings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverIp": { + "name": "serverIp", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "letsEncryptEmail": { + "name": "letsEncryptEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sshPrivateKey": { + "name": "sshPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "logCleanupCron": { + "name": "logCleanupCron", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0 0 * * *'" + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + }, + "cleanupCacheApplications": { + "name": "cleanupCacheApplications", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnPreviews": { + "name": "cleanupCacheOnPreviews", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnCompose": { + "name": "cleanupCacheOnCompose", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.buildType": { + "name": "buildType", + "schema": "public", + "values": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "public.sourceType": { + "name": "sourceType", + "schema": "public", + "values": [ + "docker", + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "drop" + ] + }, + "public.backupType": { + "name": "backupType", + "schema": "public", + "values": [ + "database", + "compose" + ] + }, + "public.databaseType": { + "name": "databaseType", + "schema": "public", + "values": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server" + ] + }, + "public.composeType": { + "name": "composeType", + "schema": "public", + "values": [ + "docker-compose", + "stack" + ] + }, + "public.sourceTypeCompose": { + "name": "sourceTypeCompose", + "schema": "public", + "values": [ + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "raw" + ] + }, + "public.deploymentStatus": { + "name": "deploymentStatus", + "schema": "public", + "values": [ + "running", + "done", + "error", + "cancelled" + ] + }, + "public.domainType": { + "name": "domainType", + "schema": "public", + "values": [ + "compose", + "application", + "preview" + ] + }, + "public.gitProviderType": { + "name": "gitProviderType", + "schema": "public", + "values": [ + "github", + "gitlab", + "bitbucket", + "gitea" + ] + }, + "public.mountType": { + "name": "mountType", + "schema": "public", + "values": [ + "bind", + "volume", + "file" + ] + }, + "public.serviceType": { + "name": "serviceType", + "schema": "public", + "values": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "public.notificationType": { + "name": "notificationType", + "schema": "public", + "values": [ + "slack", + "telegram", + "discord", + "email", + "resend", + "gotify", + "ntfy", + "pushover", + "custom", + "lark" + ] + }, + "public.protocolType": { + "name": "protocolType", + "schema": "public", + "values": [ + "tcp", + "udp" + ] + }, + "public.publishModeType": { + "name": "publishModeType", + "schema": "public", + "values": [ + "ingress", + "host" + ] + }, + "public.RegistryType": { + "name": "RegistryType", + "schema": "public", + "values": [ + "selfHosted", + "cloud" + ] + }, + "public.scheduleType": { + "name": "scheduleType", + "schema": "public", + "values": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "public.shellType": { + "name": "shellType", + "schema": "public", + "values": [ + "bash", + "sh" + ] + }, + "public.serverStatus": { + "name": "serverStatus", + "schema": "public", + "values": [ + "active", + "inactive" + ] + }, + "public.serverType": { + "name": "serverType", + "schema": "public", + "values": [ + "deploy", + "build" + ] + }, + "public.applicationStatus": { + "name": "applicationStatus", + "schema": "public", + "values": [ + "idle", + "running", + "done", + "error" + ] + }, + "public.certificateType": { + "name": "certificateType", + "schema": "public", + "values": [ + "letsencrypt", + "none", + "custom" + ] + }, + "public.triggerType": { + "name": "triggerType", + "schema": "public", + "values": [ + "push", + "tag" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/_journal.json b/apps/dokploy/drizzle/meta/_journal.json index 4af7e6c2b..5bd81eda1 100644 --- a/apps/dokploy/drizzle/meta/_journal.json +++ b/apps/dokploy/drizzle/meta/_journal.json @@ -1002,6 +1002,13 @@ "when": 1770615019498, "tag": "0142_outstanding_tusk", "breakpoints": true + }, + { + "idx": 143, + "version": "7", + "when": 1770756316554, + "tag": "0143_cute_forge", + "breakpoints": true } ] } \ No newline at end of file From fe807ae2a6092ef6b939106e3eadae96efc938c6 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 10 Feb 2026 17:52:41 -0600 Subject: [PATCH 043/206] feat(sso): implement management for trusted origins in SSO settings - Added functionality to add, edit, and remove trusted origins for SSO callbacks. - Introduced new API mutations for managing trusted origins. - Enhanced the SSO settings UI to include a dialog for managing trusted origins, with appropriate state handling and user feedback via toast notifications. --- .../proprietary/sso/sso-settings.tsx | 230 +++++++++++++++++- .../server/api/routers/proprietary/sso.ts | 59 +++++ 2 files changed, 280 insertions(+), 9 deletions(-) diff --git a/apps/dokploy/components/proprietary/sso/sso-settings.tsx b/apps/dokploy/components/proprietary/sso/sso-settings.tsx index 830745e01..db5e934ec 100644 --- a/apps/dokploy/components/proprietary/sso/sso-settings.tsx +++ b/apps/dokploy/components/proprietary/sso/sso-settings.tsx @@ -1,6 +1,6 @@ "use client"; -import { Eye, Loader2, LogIn, Trash2 } from "lucide-react"; +import { Eye, Loader2, LogIn, Pencil, Plus, Shield, Trash2 } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "sonner"; import { DialogAction } from "@/components/shared/dialog-action"; @@ -21,6 +21,7 @@ import { DialogHeader, DialogTitle, } from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; import { api } from "@/utils/api"; import { RegisterOidcDialog } from "./register-oidc-dialog"; import { RegisterSamlDialog } from "./register-saml-dialog"; @@ -68,6 +69,10 @@ export const SSOSettings = () => { const [detailsProvider, setDetailsProvider] = useState(null); const [baseURL, setBaseURL] = useState(""); + const [manageOriginsOpen, setManageOriginsOpen] = useState(false); + const [editingOrigin, setEditingOrigin] = useState(null); + const [editingValue, setEditingValue] = useState(""); + const [newOriginInput, setNewOriginInput] = useState(""); useEffect(() => { if (typeof window !== "undefined") { @@ -76,20 +81,101 @@ export const SSOSettings = () => { }, []); const { data: providers, isLoading } = api.sso.listProviders.useQuery(); + const { data: userData } = api.user.get.useQuery(undefined, { + enabled: manageOriginsOpen, + }); const { mutateAsync: deleteProvider, isLoading: isDeleting } = api.sso.deleteProvider.useMutation(); + const { mutateAsync: addTrustedOrigin, isLoading: isAddingOrigin } = + api.sso.addTrustedOrigin.useMutation(); + const { mutateAsync: removeTrustedOrigin, isLoading: isRemovingOrigin } = + api.sso.removeTrustedOrigin.useMutation(); + const { mutateAsync: updateTrustedOrigin, isLoading: isUpdatingOrigin } = + api.sso.updateTrustedOrigin.useMutation(); + + const trustedOrigins = userData?.user?.trustedOrigins ?? []; + + const handleAddOrigin = async () => { + const value = newOriginInput.trim(); + if (!value) return; + try { + await addTrustedOrigin({ origin: value }); + toast.success("Trusted origin added"); + setNewOriginInput(""); + await utils.user.get.invalidate(); + } catch (err) { + toast.error( + err instanceof Error ? err.message : "Failed to add trusted origin", + ); + } + }; + + const handleRemoveOrigin = async (origin: string) => { + try { + await removeTrustedOrigin({ origin }); + toast.success("Trusted origin removed"); + if (editingOrigin === origin) setEditingOrigin(null); + await utils.user.get.invalidate(); + } catch (err) { + toast.error( + err instanceof Error ? err.message : "Failed to remove trusted origin", + ); + } + }; + + const handleStartEdit = (origin: string) => { + setEditingOrigin(origin); + setEditingValue(origin); + }; + + const handleSaveEdit = async () => { + if (editingOrigin == null || !editingValue.trim()) { + setEditingOrigin(null); + return; + } + try { + await updateTrustedOrigin({ + oldOrigin: editingOrigin, + newOrigin: editingValue.trim(), + }); + toast.success("Trusted origin updated"); + setEditingOrigin(null); + setEditingValue(""); + await utils.user.get.invalidate(); + } catch (err) { + toast.error( + err instanceof Error ? err.message : "Failed to update trusted origin", + ); + } + }; + + const handleCancelEdit = () => { + setEditingOrigin(null); + setEditingValue(""); + }; return (
-
-
- - Single Sign-On (SSO) +
+
+
+ + Single Sign-On (SSO) +
+ + Configure OIDC or SAML identity providers for enterprise sign-in. + Users can sign in with their organization's IdP. +
- - Configure OIDC or SAML identity providers for enterprise sign-in. - Users can sign in with their organization's IdP. - +
{isLoading ? ( @@ -366,6 +452,132 @@ export const SSOSettings = () => { )} + + + + + + + Trusted origins + + + Manage allowed origins for SSO callbacks. Add, edit, or remove + origins for your account. + + +
+
+ Current origins + {trustedOrigins.length === 0 ? ( +

+ No trusted origins yet. Add one below. +

+ ) : ( +
    + {trustedOrigins.map((origin) => ( +
  • + {editingOrigin === origin ? ( + <> + setEditingValue(e.target.value)} + placeholder="https://..." + className="flex-1 font-mono text-sm" + autoFocus + /> + + + + ) : ( + <> + + {origin} + + + + handleRemoveOrigin(origin) + } + > + + + + )} +
  • + ))} +
+ )} +
+
+ Add trusted origin +
+ setNewOriginInput(e.target.value)} + placeholder="https://example.com" + className="font-mono text-sm" + onKeyDown={(e) => { + if (e.key === "Enter") { + e.preventDefault(); + void handleAddOrigin(); + } + }} + /> + +
+
+
+ + + +
+
); }; diff --git a/apps/dokploy/server/api/routers/proprietary/sso.ts b/apps/dokploy/server/api/routers/proprietary/sso.ts index 040d36721..e80a2139f 100644 --- a/apps/dokploy/server/api/routers/proprietary/sso.ts +++ b/apps/dokploy/server/api/routers/proprietary/sso.ts @@ -177,4 +177,63 @@ export const ssoRouter = createTRPCRouter({ }); return { success: true }; }), + addTrustedOrigin: enterpriseProcedure + .input(z.object({ origin: z.string().min(1) })) + .mutation(async ({ ctx, input }) => { + const normalized = normalizeTrustedOrigin(input.origin); + const currentUser = await db.query.user.findFirst({ + where: eq(user.id, ctx.session.userId), + columns: { trustedOrigins: true }, + }); + const existing = currentUser?.trustedOrigins || []; + if (existing.some((o) => o.toLowerCase() === normalized.toLowerCase())) { + return { success: true }; + } + const next = Array.from(new Set([...existing, normalized])); + await db + .update(user) + .set({ trustedOrigins: next }) + .where(eq(user.id, ctx.session.userId)); + return { success: true }; + }), + removeTrustedOrigin: enterpriseProcedure + .input(z.object({ origin: z.string().min(1) })) + .mutation(async ({ ctx, input }) => { + const normalized = normalizeTrustedOrigin(input.origin); + const currentUser = await db.query.user.findFirst({ + where: eq(user.id, ctx.session.userId), + columns: { trustedOrigins: true }, + }); + const existing = currentUser?.trustedOrigins || []; + const next = existing.filter((o) => o.toLowerCase() !== normalized.toLowerCase()); + await db + .update(user) + .set({ trustedOrigins: next }) + .where(eq(user.id, ctx.session.userId)); + return { success: true }; + }), + updateTrustedOrigin: enterpriseProcedure + .input( + z.object({ + oldOrigin: z.string().min(1), + newOrigin: z.string().min(1), + }), + ) + .mutation(async ({ ctx, input }) => { + const oldNorm = normalizeTrustedOrigin(input.oldOrigin); + const newNorm = normalizeTrustedOrigin(input.newOrigin); + const currentUser = await db.query.user.findFirst({ + where: eq(user.id, ctx.session.userId), + columns: { trustedOrigins: true }, + }); + const existing = currentUser?.trustedOrigins || []; + const next = existing.map((o) => + o.toLowerCase() === oldNorm.toLowerCase() ? newNorm : o, + ); + await db + .update(user) + .set({ trustedOrigins: next }) + .where(eq(user.id, ctx.session.userId)); + return { success: true }; + }), }); From 59f843f8a01e0f3b448a5facaf37ba79bdb1ebda Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 10 Feb 2026 17:55:50 -0600 Subject: [PATCH 044/206] fix(stripe): filter products to include only monthly and annual subscriptions - Updated the Stripe API response to return only the monthly and annual subscription products. - Enhanced the product listing logic to filter out unnecessary products, improving data handling in the application. --- apps/dokploy/server/api/routers/stripe.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/dokploy/server/api/routers/stripe.ts b/apps/dokploy/server/api/routers/stripe.ts index 412c9e3e8..963ec8c5b 100644 --- a/apps/dokploy/server/api/routers/stripe.ts +++ b/apps/dokploy/server/api/routers/stripe.ts @@ -27,12 +27,17 @@ export const stripeRouter = createTRPCRouter({ const products = await stripe.products.list({ expand: ["data.default_price"], active: true, - ids: [PRODUCT_MONTHLY_ID, PRODUCT_ANNUAL_ID], + }); + + const filteredProducts = products.data.filter((product) => { + return ( + product.id === PRODUCT_MONTHLY_ID || product.id === PRODUCT_ANNUAL_ID + ); }); if (!stripeCustomerId) { return { - products: products.data, + products: filteredProducts, subscriptions: [], }; } @@ -44,7 +49,7 @@ export const stripeRouter = createTRPCRouter({ }); return { - products: products.data, + products: filteredProducts, subscriptions: subscriptions.data, }; }), From 1326d14a001ba213d31e7d349700163c9ed638c5 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 23:59:10 +0000 Subject: [PATCH 045/206] [autofix.ci] apply automated fixes --- .../proprietary/sso/sso-settings.tsx | 18 +++++++++++------- .../server/api/routers/proprietary/sso.ts | 4 +++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/apps/dokploy/components/proprietary/sso/sso-settings.tsx b/apps/dokploy/components/proprietary/sso/sso-settings.tsx index db5e934ec..842c5d87d 100644 --- a/apps/dokploy/components/proprietary/sso/sso-settings.tsx +++ b/apps/dokploy/components/proprietary/sso/sso-settings.tsx @@ -1,6 +1,14 @@ "use client"; -import { Eye, Loader2, LogIn, Pencil, Plus, Shield, Trash2 } from "lucide-react"; +import { + Eye, + Loader2, + LogIn, + Pencil, + Plus, + Shield, + Trash2, +} from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "sonner"; import { DialogAction } from "@/components/shared/dialog-action"; @@ -491,9 +499,7 @@ export const SSOSettings = () => { @@ -522,9 +528,7 @@ export const SSOSettings = () => { title="Remove trusted origin" description={`Remove "${origin}" from trusted origins?`} type="destructive" - onClick={async () => - handleRemoveOrigin(origin) - } + onClick={async () => handleRemoveOrigin(origin)} > diff --git a/apps/dokploy/components/proprietary/sso/sso-settings.tsx b/apps/dokploy/components/proprietary/sso/sso-settings.tsx index 842c5d87d..d6f46471e 100644 --- a/apps/dokploy/components/proprietary/sso/sso-settings.tsx +++ b/apps/dokploy/components/proprietary/sso/sso-settings.tsx @@ -271,6 +271,16 @@ export const SSOSettings = () => { View details + {isOidc && ( + + + + )} { SSO provider details - View-only. To change settings, remove this provider and add it - again with the new values. + OIDC providers can be updated via Edit. SAML providers must be + removed and re-added to change settings.
diff --git a/apps/dokploy/server/api/routers/proprietary/sso.ts b/apps/dokploy/server/api/routers/proprietary/sso.ts index b7f15c9e5..78422ba02 100644 --- a/apps/dokploy/server/api/routers/proprietary/sso.ts +++ b/apps/dokploy/server/api/routers/proprietary/sso.ts @@ -58,6 +58,130 @@ export const ssoRouter = createTRPCRouter({ }); return providers; }), + one: enterpriseProcedure + .input(z.object({ providerId: z.string().min(1) })) + .query(async ({ ctx, input }) => { + const provider = await db.query.ssoProvider.findFirst({ + where: and( + eq(ssoProvider.providerId, input.providerId), + eq(ssoProvider.organizationId, ctx.session.activeOrganizationId), + eq(ssoProvider.userId, ctx.session.userId), + ), + columns: { + id: true, + providerId: true, + issuer: true, + domain: true, + oidcConfig: true, + samlConfig: true, + organizationId: true, + }, + }); + if (!provider) { + throw new TRPCError({ + code: "NOT_FOUND", + message: + "SSO provider not found or you do not have permission to access it", + }); + } + return provider; + }), + update: enterpriseProcedure + .input(ssoProviderBodySchema) + .mutation(async ({ ctx, input }) => { + const existing = await db.query.ssoProvider.findFirst({ + where: and( + eq(ssoProvider.providerId, input.providerId), + eq(ssoProvider.organizationId, ctx.session.activeOrganizationId), + eq(ssoProvider.userId, ctx.session.userId), + ), + columns: { + id: true, + issuer: true, + domain: true, + }, + }); + + if (!existing) { + throw new TRPCError({ + code: "NOT_FOUND", + message: + "SSO provider not found or you do not have permission to update it", + }); + } + + const providers = await db.query.ssoProvider.findMany({ + where: eq(ssoProvider.organizationId, ctx.session.activeOrganizationId), + columns: { providerId: true, domain: true }, + }); + + for (const provider of providers) { + if (provider.providerId === input.providerId) continue; + const providerDomains = provider.domain + .split(",") + .map((d) => d.trim().toLowerCase()); + for (const domain of input.domains) { + if (providerDomains.includes(domain)) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: `Domain ${domain} is already registered for another provider`, + }); + } + } + } + + const issuerChanged = + normalizeTrustedOrigin(existing.issuer) !== + normalizeTrustedOrigin(input.issuer); + if (issuerChanged) { + const currentUser = await db.query.user.findFirst({ + where: eq(user.id, ctx.session.userId), + columns: { trustedOrigins: true }, + }); + const trustedOrigins = currentUser?.trustedOrigins ?? []; + const newOrigin = normalizeTrustedOrigin(input.issuer); + const isInTrustedOrigins = trustedOrigins.some( + (o) => o.toLowerCase() === newOrigin.toLowerCase(), + ); + if (!isInTrustedOrigins) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: + "The new Issuer URL is not in your trusted origins list. Please add it in Manage origins before saving.", + }); + } + } + + const domain = input.domains.join(","); + + const updatePayload: { + issuer: string; + domain: string; + oidcConfig?: string; + samlConfig?: string; + } = { + issuer: input.issuer, + domain, + }; + if (input.oidcConfig != null) { + updatePayload.oidcConfig = JSON.stringify(input.oidcConfig); + } + if (input.samlConfig != null) { + updatePayload.samlConfig = JSON.stringify(input.samlConfig); + } + + await db + .update(ssoProvider) + .set(updatePayload) + .where( + and( + eq(ssoProvider.providerId, input.providerId), + eq(ssoProvider.organizationId, ctx.session.activeOrganizationId), + eq(ssoProvider.userId, ctx.session.userId), + ), + ); + return { success: true }; + }), deleteProvider: enterpriseProcedure .input(z.object({ providerId: z.string().min(1) })) .mutation(async ({ ctx, input }) => { @@ -102,24 +226,6 @@ export const ssoRouter = createTRPCRouter({ }); } - const currentUser = await db.query.user.findFirst({ - where: eq(user.id, ctx.session.userId), - columns: { - trustedOrigins: true, - }, - }); - - if (currentUser?.trustedOrigins) { - const issuerOrigin = normalizeTrustedOrigin(providerToDelete.issuer); - const updatedOrigins = currentUser.trustedOrigins.filter( - (origin) => origin.toLowerCase() !== issuerOrigin.toLowerCase(), - ); - - await db - .update(user) - .set({ trustedOrigins: updatedOrigins }) - .where(eq(user.id, ctx.session.userId)); - } return { success: true }; }), register: enterpriseProcedure @@ -147,25 +253,6 @@ export const ssoRouter = createTRPCRouter({ } } const domain = input.domains.join(","); - const currentUser = await db.query.user.findFirst({ - where: eq(user.id, ctx.session.userId), - columns: { - trustedOrigins: true, - }, - }); - - const existingOrigins = currentUser?.trustedOrigins || []; - - const issuerOrigin = normalizeTrustedOrigin(input.issuer); - - const newOrigins = Array.from( - new Set([...existingOrigins, issuerOrigin]), - ); - - await db - .update(user) - .set({ trustedOrigins: newOrigins }) - .where(eq(user.id, ctx.session.userId)); await auth.registerSSOProvider({ body: { From 60f5ab304a92c99a8f1240f51a001cb22741cf5b Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Thu, 12 Feb 2026 23:49:27 -0600 Subject: [PATCH 056/206] feat(sso): enhance SAML provider registration and editing experience - Added support for editing existing SAML providers, allowing users to update issuer, domains, entry point, and certificate. - Introduced a new function to parse SAML configuration from JSON. - Updated the UI to reflect changes in the registration dialog based on whether the user is adding or editing a provider. - Improved user feedback with success messages tailored for registration and updates. - Added a new column `created_at` to the `sso_provider` table for better tracking of provider creation times. --- .../proprietary/sso/register-saml-dialog.tsx | 81 +- .../proprietary/sso/sso-settings.tsx | 13 +- apps/dokploy/drizzle/0143_brown_ultron.sql | 1 + apps/dokploy/drizzle/meta/0143_snapshot.json | 7291 +++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 7 + .../server/api/routers/proprietary/sso.ts | 1 + packages/server/src/db/schema/sso.ts | 3 +- 7 files changed, 7387 insertions(+), 10 deletions(-) create mode 100644 apps/dokploy/drizzle/0143_brown_ultron.sql create mode 100644 apps/dokploy/drizzle/meta/0143_snapshot.json diff --git a/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx b/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx index 4835eb6b8..bb3a2ea21 100644 --- a/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx +++ b/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx @@ -58,6 +58,7 @@ const samlProviderSchema = z.object({ type SamlProviderForm = z.infer; interface RegisterSamlDialogProps { + providerId?: string; children: React.ReactNode; } @@ -70,10 +71,45 @@ const formDefaultValues: SamlProviderForm = { idpMetadataXml: "", }; -export function RegisterSamlDialog({ children }: RegisterSamlDialogProps) { +function parseSamlConfig(samlConfig: string | null): { + entryPoint?: string; + cert?: string; + idpMetadataXml?: string; +} | null { + if (!samlConfig) return null; + try { + const parsed = JSON.parse(samlConfig) as { + entryPoint?: string; + cert?: string; + idpMetadata?: { metadata?: string }; + }; + return { + entryPoint: parsed.entryPoint, + cert: parsed.cert, + idpMetadataXml: parsed.idpMetadata?.metadata, + }; + } catch { + return null; + } +} + +export function RegisterSamlDialog({ + providerId, + children, +}: RegisterSamlDialogProps) { const utils = api.useUtils(); const [open, setOpen] = useState(false); - const { mutateAsync, isLoading } = api.sso.register.useMutation(); + + const { data } = api.sso.one.useQuery( + { providerId: providerId ?? "" }, + { enabled: !!providerId && open }, + ); + const registerMutation = api.sso.register.useMutation(); + const updateMutation = api.sso.update.useMutation(); + + const isEdit = !!providerId; + const mutateAsync = isEdit ? updateMutation.mutateAsync : registerMutation.mutateAsync; + const isLoading = isEdit ? updateMutation.isLoading : registerMutation.isLoading; const [baseURL, setBaseURL] = useState(""); @@ -88,6 +124,23 @@ export function RegisterSamlDialog({ children }: RegisterSamlDialogProps) { defaultValues: formDefaultValues, }); + useEffect(() => { + if (!data || !open) return; + const domains = data.domain + ? data.domain.split(",").map((d) => d.trim()).filter(Boolean) + : [""]; + if (domains.length === 0) domains.push(""); + const saml = parseSamlConfig(data.samlConfig); + form.reset({ + providerId: data.providerId, + issuer: data.issuer, + domains, + entryPoint: saml?.entryPoint ?? "", + cert: saml?.cert ?? "", + idpMetadataXml: saml?.idpMetadataXml ?? "", + }); + }, [data, open, form]); + const { fields, append, remove } = useFieldArray({ control: form.control, name: "domains" as FieldArrayPath, @@ -133,7 +186,11 @@ export function RegisterSamlDialog({ children }: RegisterSamlDialogProps) { }, }); - toast.success("SAML provider registered successfully"); + toast.success( + isEdit + ? "SAML provider updated successfully" + : "SAML provider registered successfully", + ); form.reset(formDefaultValues); setOpen(false); await utils.sso.listProviders.invalidate(); @@ -149,10 +206,13 @@ export function RegisterSamlDialog({ children }: RegisterSamlDialogProps) { {children} - Register SAML provider + + {isEdit ? "Update SAML provider" : "Register SAML provider"} + - Add a SAML 2.0 identity provider (e.g. Okta SAML, Azure AD SAML, - OneLogin). You need the IdP's SSO URL and signing certificate. + {isEdit + ? "Change issuer, domains, entry point or certificate. Provider ID cannot be changed." + : "Add a SAML 2.0 identity provider (e.g. Okta SAML, Azure AD SAML, OneLogin). You need the IdP's SSO URL and signing certificate."}
@@ -167,8 +227,15 @@ export function RegisterSamlDialog({ children }: RegisterSamlDialogProps) { + {isEdit && ( + + Cannot be changed when editing. + + )} )} @@ -317,7 +384,7 @@ export function RegisterSamlDialog({ children }: RegisterSamlDialogProps) { Cancel diff --git a/apps/dokploy/components/proprietary/sso/sso-settings.tsx b/apps/dokploy/components/proprietary/sso/sso-settings.tsx index d6f46471e..d08939366 100644 --- a/apps/dokploy/components/proprietary/sso/sso-settings.tsx +++ b/apps/dokploy/components/proprietary/sso/sso-settings.tsx @@ -281,6 +281,16 @@ export const SSOSettings = () => { )} + {isSaml && ( + + + + )} { SSO provider details - OIDC providers can be updated via Edit. SAML providers must be - removed and re-added to change settings. + Use Edit to change provider settings (OIDC or SAML).
diff --git a/apps/dokploy/drizzle/0143_brown_ultron.sql b/apps/dokploy/drizzle/0143_brown_ultron.sql new file mode 100644 index 000000000..4aca676cf --- /dev/null +++ b/apps/dokploy/drizzle/0143_brown_ultron.sql @@ -0,0 +1 @@ +ALTER TABLE "sso_provider" ADD COLUMN "created_at" timestamp DEFAULT now() NOT NULL; \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0143_snapshot.json b/apps/dokploy/drizzle/meta/0143_snapshot.json new file mode 100644 index 000000000..c2618576d --- /dev/null +++ b/apps/dokploy/drizzle/meta/0143_snapshot.json @@ -0,0 +1,7291 @@ +{ + "id": "c03ebeca-bf0f-4d72-8b4f-9a4dccb9f143", + "prevId": "fce8c149-40a8-4279-a432-cfa7538666c6", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is2FAEnabled": { + "name": "is2FAEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "resetPasswordToken": { + "name": "resetPasswordToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resetPasswordExpiresAt": { + "name": "resetPasswordExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationToken": { + "name": "confirmationToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationExpiresAt": { + "name": "confirmationExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_user_id_user_id_fk": { + "name": "apikey_user_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "inviter_id": { + "name": "inviter_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": [ + "inviter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_default": { + "name": "is_default", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateProjects": { + "name": "canCreateProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToSSHKeys": { + "name": "canAccessToSSHKeys", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateServices": { + "name": "canCreateServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteProjects": { + "name": "canDeleteProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteServices": { + "name": "canDeleteServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToDocker": { + "name": "canAccessToDocker", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToAPI": { + "name": "canAccessToAPI", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToGitProviders": { + "name": "canAccessToGitProviders", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToTraefikFiles": { + "name": "canAccessToTraefikFiles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteEnvironments": { + "name": "canDeleteEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateEnvironments": { + "name": "canCreateEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "accesedProjects": { + "name": "accesedProjects", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedEnvironments": { + "name": "accessedEnvironments", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accesedServices": { + "name": "accesedServices", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner_id": { + "name": "owner_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_owner_id_user_id_fk": { + "name": "organization_owner_id_user_id_fk", + "tableFrom": "organization", + "tableTo": "user", + "columnsFrom": [ + "owner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.two_factor": { + "name": "two_factor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backup_codes": { + "name": "backup_codes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "two_factor_user_id_user_id_fk": { + "name": "two_factor_user_id_user_id_fk", + "tableFrom": "two_factor", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ai": { + "name": "ai", + "schema": "", + "columns": { + "aiId": { + "name": "aiId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiUrl": { + "name": "apiUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isEnabled": { + "name": "isEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ai_organizationId_organization_id_fk": { + "name": "ai_organizationId_organization_id_fk", + "tableFrom": "ai", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.application": { + "name": "application", + "schema": "", + "columns": { + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewEnv": { + "name": "previewEnv", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewBuildArgs": { + "name": "previewBuildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewBuildSecrets": { + "name": "previewBuildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLabels": { + "name": "previewLabels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewWildcard": { + "name": "previewWildcard", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewPort": { + "name": "previewPort", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "previewHttps": { + "name": "previewHttps", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "previewPath": { + "name": "previewPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "previewCustomCertResolver": { + "name": "previewCustomCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLimit": { + "name": "previewLimit", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3 + }, + "isPreviewDeploymentsActive": { + "name": "isPreviewDeploymentsActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewRequireCollaboratorPermissions": { + "name": "previewRequireCollaboratorPermissions", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rollbackActive": { + "name": "rollbackActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "buildArgs": { + "name": "buildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildSecrets": { + "name": "buildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "subtitle": { + "name": "subtitle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "cleanCache": { + "name": "cleanCache", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildPath": { + "name": "buildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBuildPath": { + "name": "gitlabBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBuildPath": { + "name": "giteaBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBuildPath": { + "name": "bitbucketBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBuildPath": { + "name": "customGitBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerfile": { + "name": "dockerfile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerContextPath": { + "name": "dockerContextPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerBuildStage": { + "name": "dockerBuildStage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dropBuildPath": { + "name": "dropBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "buildType": { + "name": "buildType", + "type": "buildType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'nixpacks'" + }, + "railpackVersion": { + "name": "railpackVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0.15.4'" + }, + "herokuVersion": { + "name": "herokuVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'24'" + }, + "publishDirectory": { + "name": "publishDirectory", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isStaticSpa": { + "name": "isStaticSpa", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "createEnvFile": { + "name": "createEnvFile", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackRegistryId": { + "name": "rollbackRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildRegistryId": { + "name": "buildRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "application", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_registryId_registry_registryId_fk": { + "name": "application_registryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "registryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_rollbackRegistryId_registry_registryId_fk": { + "name": "application_rollbackRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "rollbackRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_environmentId_environment_environmentId_fk": { + "name": "application_environmentId_environment_environmentId_fk", + "tableFrom": "application", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_githubId_github_githubId_fk": { + "name": "application_githubId_github_githubId_fk", + "tableFrom": "application", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_gitlabId_gitlab_gitlabId_fk": { + "name": "application_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "application", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_giteaId_gitea_giteaId_fk": { + "name": "application_giteaId_gitea_giteaId_fk", + "tableFrom": "application", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "application_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "application", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_serverId_server_serverId_fk": { + "name": "application_serverId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_buildServerId_server_serverId_fk": { + "name": "application_buildServerId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_buildRegistryId_registry_registryId_fk": { + "name": "application_buildRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "buildRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "application_appName_unique": { + "name": "application_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backup": { + "name": "backup", + "schema": "", + "columns": { + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schedule": { + "name": "schedule", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "database": { + "name": "database", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "backupType": { + "name": "backupType", + "type": "backupType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'database'" + }, + "databaseType": { + "name": "databaseType", + "type": "databaseType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backup_destinationId_destination_destinationId_fk": { + "name": "backup_destinationId_destination_destinationId_fk", + "tableFrom": "backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_composeId_compose_composeId_fk": { + "name": "backup_composeId_compose_composeId_fk", + "tableFrom": "backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_postgresId_postgres_postgresId_fk": { + "name": "backup_postgresId_postgres_postgresId_fk", + "tableFrom": "backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mariadbId_mariadb_mariadbId_fk": { + "name": "backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mysqlId_mysql_mysqlId_fk": { + "name": "backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mongoId_mongo_mongoId_fk": { + "name": "backup_mongoId_mongo_mongoId_fk", + "tableFrom": "backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_userId_user_id_fk": { + "name": "backup_userId_user_id_fk", + "tableFrom": "backup", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "backup_appName_unique": { + "name": "backup_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.bitbucket": { + "name": "bitbucket", + "schema": "", + "columns": { + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "bitbucketUsername": { + "name": "bitbucketUsername", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketEmail": { + "name": "bitbucketEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "appPassword": { + "name": "appPassword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketWorkspaceName": { + "name": "bitbucketWorkspaceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { + "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "bitbucket", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.certificate": { + "name": "certificate", + "schema": "", + "columns": { + "certificateId": { + "name": "certificateId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificateData": { + "name": "certificateData", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificatePath": { + "name": "certificatePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "autoRenew": { + "name": "autoRenew", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "certificate_organizationId_organization_id_fk": { + "name": "certificate_organizationId_organization_id_fk", + "tableFrom": "certificate", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "certificate_serverId_server_serverId_fk": { + "name": "certificate_serverId_server_serverId_fk", + "tableFrom": "certificate", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "certificate_certificatePath_unique": { + "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, + "columns": [ + "certificatePath" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.compose": { + "name": "compose", + "schema": "", + "columns": { + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeFile": { + "name": "composeFile", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceTypeCompose", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "composeType": { + "name": "composeType", + "type": "composeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'docker-compose'" + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "composePath": { + "name": "composePath", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'./docker-compose.yml'" + }, + "suffix": { + "name": "suffix", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "randomize": { + "name": "randomize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeployment": { + "name": "isolatedDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeploymentsVolume": { + "name": "isolatedDeploymentsVolume", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "composeStatus": { + "name": "composeStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "compose", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_environmentId_environment_environmentId_fk": { + "name": "compose_environmentId_environment_environmentId_fk", + "tableFrom": "compose", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "compose_githubId_github_githubId_fk": { + "name": "compose_githubId_github_githubId_fk", + "tableFrom": "compose", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_gitlabId_gitlab_gitlabId_fk": { + "name": "compose_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "compose", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "compose", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_giteaId_gitea_giteaId_fk": { + "name": "compose_giteaId_gitea_giteaId_fk", + "tableFrom": "compose", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_serverId_server_serverId_fk": { + "name": "compose_serverId_server_serverId_fk", + "tableFrom": "compose", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.deployment": { + "name": "deployment", + "schema": "", + "columns": { + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "deploymentStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'running'" + }, + "logPath": { + "name": "logPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pid": { + "name": "pid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isPreviewDeployment": { + "name": "isPreviewDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "startedAt": { + "name": "startedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "errorMessage": { + "name": "errorMessage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "deployment_applicationId_application_applicationId_fk": { + "name": "deployment_applicationId_application_applicationId_fk", + "tableFrom": "deployment", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_composeId_compose_composeId_fk": { + "name": "deployment_composeId_compose_composeId_fk", + "tableFrom": "deployment", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_serverId_server_serverId_fk": { + "name": "deployment_serverId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "deployment", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_scheduleId_schedule_scheduleId_fk": { + "name": "deployment_scheduleId_schedule_scheduleId_fk", + "tableFrom": "deployment", + "tableTo": "schedule", + "columnsFrom": [ + "scheduleId" + ], + "columnsTo": [ + "scheduleId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_backupId_backup_backupId_fk": { + "name": "deployment_backupId_backup_backupId_fk", + "tableFrom": "deployment", + "tableTo": "backup", + "columnsFrom": [ + "backupId" + ], + "columnsTo": [ + "backupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_rollbackId_rollback_rollbackId_fk": { + "name": "deployment_rollbackId_rollback_rollbackId_fk", + "tableFrom": "deployment", + "tableTo": "rollback", + "columnsFrom": [ + "rollbackId" + ], + "columnsTo": [ + "rollbackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_volumeBackupId_volume_backup_volumeBackupId_fk": { + "name": "deployment_volumeBackupId_volume_backup_volumeBackupId_fk", + "tableFrom": "deployment", + "tableTo": "volume_backup", + "columnsFrom": [ + "volumeBackupId" + ], + "columnsTo": [ + "volumeBackupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_buildServerId_server_serverId_fk": { + "name": "deployment_buildServerId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.destination": { + "name": "destination", + "schema": "", + "columns": { + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "accessKey": { + "name": "accessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "secretAccessKey": { + "name": "secretAccessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bucket": { + "name": "bucket", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "region": { + "name": "region", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "destination_organizationId_organization_id_fk": { + "name": "destination_organizationId_organization_id_fk", + "tableFrom": "destination", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.domain": { + "name": "domain", + "schema": "", + "columns": { + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domainType": { + "name": "domainType", + "type": "domainType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'application'" + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customCertResolver": { + "name": "customCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "internalPath": { + "name": "internalPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "stripPath": { + "name": "stripPath", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "domain_composeId_compose_composeId_fk": { + "name": "domain_composeId_compose_composeId_fk", + "tableFrom": "domain", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_applicationId_application_applicationId_fk": { + "name": "domain_applicationId_application_applicationId_fk", + "tableFrom": "domain", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "domain", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.environment": { + "name": "environment", + "schema": "", + "columns": { + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isDefault": { + "name": "isDefault", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "environment_projectId_project_projectId_fk": { + "name": "environment_projectId_project_projectId_fk", + "tableFrom": "environment", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "projectId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.git_provider": { + "name": "git_provider", + "schema": "", + "columns": { + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "providerType": { + "name": "providerType", + "type": "gitProviderType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "git_provider_organizationId_organization_id_fk": { + "name": "git_provider_organizationId_organization_id_fk", + "tableFrom": "git_provider", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "git_provider_userId_user_id_fk": { + "name": "git_provider_userId_user_id_fk", + "tableFrom": "git_provider", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitea": { + "name": "gitea", + "schema": "", + "columns": { + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "giteaUrl": { + "name": "giteaUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitea.com'" + }, + "giteaInternalUrl": { + "name": "giteaInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_id": { + "name": "client_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_secret": { + "name": "client_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "scopes": { + "name": "scopes", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'repo,repo:status,read:user,read:org'" + }, + "last_authenticated_at": { + "name": "last_authenticated_at", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "gitea_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitea_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitea", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.github": { + "name": "github", + "schema": "", + "columns": { + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "githubAppName": { + "name": "githubAppName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubAppId": { + "name": "githubAppId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "githubClientId": { + "name": "githubClientId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubClientSecret": { + "name": "githubClientSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubInstallationId": { + "name": "githubInstallationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubPrivateKey": { + "name": "githubPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubWebhookSecret": { + "name": "githubWebhookSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "github_gitProviderId_git_provider_gitProviderId_fk": { + "name": "github_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "github", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitlab": { + "name": "gitlab", + "schema": "", + "columns": { + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "gitlabUrl": { + "name": "gitlabUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitlab.com'" + }, + "gitlabInternalUrl": { + "name": "gitlabInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "application_id": { + "name": "application_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "group_name": { + "name": "group_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "gitlab_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitlab", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mariadb": { + "name": "mariadb", + "schema": "", + "columns": { + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mariadb_environmentId_environment_environmentId_fk": { + "name": "mariadb_environmentId_environment_environmentId_fk", + "tableFrom": "mariadb", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mariadb_serverId_server_serverId_fk": { + "name": "mariadb_serverId_server_serverId_fk", + "tableFrom": "mariadb", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mariadb_appName_unique": { + "name": "mariadb_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mongo": { + "name": "mongo", + "schema": "", + "columns": { + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "replicaSets": { + "name": "replicaSets", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "mongo_environmentId_environment_environmentId_fk": { + "name": "mongo_environmentId_environment_environmentId_fk", + "tableFrom": "mongo", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mongo_serverId_server_serverId_fk": { + "name": "mongo_serverId_server_serverId_fk", + "tableFrom": "mongo", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mongo_appName_unique": { + "name": "mongo_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mount": { + "name": "mount", + "schema": "", + "columns": { + "mountId": { + "name": "mountId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "mountType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "hostPath": { + "name": "hostPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "mountPath": { + "name": "mountPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mount_applicationId_application_applicationId_fk": { + "name": "mount_applicationId_application_applicationId_fk", + "tableFrom": "mount", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_postgresId_postgres_postgresId_fk": { + "name": "mount_postgresId_postgres_postgresId_fk", + "tableFrom": "mount", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mariadbId_mariadb_mariadbId_fk": { + "name": "mount_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "mount", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mongoId_mongo_mongoId_fk": { + "name": "mount_mongoId_mongo_mongoId_fk", + "tableFrom": "mount", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mysqlId_mysql_mysqlId_fk": { + "name": "mount_mysqlId_mysql_mysqlId_fk", + "tableFrom": "mount", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_redisId_redis_redisId_fk": { + "name": "mount_redisId_redis_redisId_fk", + "tableFrom": "mount", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_composeId_compose_composeId_fk": { + "name": "mount_composeId_compose_composeId_fk", + "tableFrom": "mount", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mysql": { + "name": "mysql", + "schema": "", + "columns": { + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mysql_environmentId_environment_environmentId_fk": { + "name": "mysql_environmentId_environment_environmentId_fk", + "tableFrom": "mysql", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mysql_serverId_server_serverId_fk": { + "name": "mysql_serverId_server_serverId_fk", + "tableFrom": "mysql", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mysql_appName_unique": { + "name": "mysql_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custom": { + "name": "custom", + "schema": "", + "columns": { + "customId": { + "name": "customId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "headers": { + "name": "headers", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.discord": { + "name": "discord", + "schema": "", + "columns": { + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email": { + "name": "email", + "schema": "", + "columns": { + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "smtpServer": { + "name": "smtpServer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "smtpPort": { + "name": "smtpPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gotify": { + "name": "gotify", + "schema": "", + "columns": { + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appToken": { + "name": "appToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lark": { + "name": "lark", + "schema": "", + "columns": { + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification": { + "name": "notification", + "schema": "", + "columns": { + "notificationId": { + "name": "notificationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appDeploy": { + "name": "appDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "appBuildError": { + "name": "appBuildError", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "databaseBackup": { + "name": "databaseBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "volumeBackup": { + "name": "volumeBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dokployRestart": { + "name": "dokployRestart", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerCleanup": { + "name": "dockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "serverThreshold": { + "name": "serverThreshold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "notificationType": { + "name": "notificationType", + "type": "notificationType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customId": { + "name": "customId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "notification_slackId_slack_slackId_fk": { + "name": "notification_slackId_slack_slackId_fk", + "tableFrom": "notification", + "tableTo": "slack", + "columnsFrom": [ + "slackId" + ], + "columnsTo": [ + "slackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_telegramId_telegram_telegramId_fk": { + "name": "notification_telegramId_telegram_telegramId_fk", + "tableFrom": "notification", + "tableTo": "telegram", + "columnsFrom": [ + "telegramId" + ], + "columnsTo": [ + "telegramId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_discordId_discord_discordId_fk": { + "name": "notification_discordId_discord_discordId_fk", + "tableFrom": "notification", + "tableTo": "discord", + "columnsFrom": [ + "discordId" + ], + "columnsTo": [ + "discordId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_emailId_email_emailId_fk": { + "name": "notification_emailId_email_emailId_fk", + "tableFrom": "notification", + "tableTo": "email", + "columnsFrom": [ + "emailId" + ], + "columnsTo": [ + "emailId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_resendId_resend_resendId_fk": { + "name": "notification_resendId_resend_resendId_fk", + "tableFrom": "notification", + "tableTo": "resend", + "columnsFrom": [ + "resendId" + ], + "columnsTo": [ + "resendId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_gotifyId_gotify_gotifyId_fk": { + "name": "notification_gotifyId_gotify_gotifyId_fk", + "tableFrom": "notification", + "tableTo": "gotify", + "columnsFrom": [ + "gotifyId" + ], + "columnsTo": [ + "gotifyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_ntfyId_ntfy_ntfyId_fk": { + "name": "notification_ntfyId_ntfy_ntfyId_fk", + "tableFrom": "notification", + "tableTo": "ntfy", + "columnsFrom": [ + "ntfyId" + ], + "columnsTo": [ + "ntfyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_customId_custom_customId_fk": { + "name": "notification_customId_custom_customId_fk", + "tableFrom": "notification", + "tableTo": "custom", + "columnsFrom": [ + "customId" + ], + "columnsTo": [ + "customId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_larkId_lark_larkId_fk": { + "name": "notification_larkId_lark_larkId_fk", + "tableFrom": "notification", + "tableTo": "lark", + "columnsFrom": [ + "larkId" + ], + "columnsTo": [ + "larkId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_pushoverId_pushover_pushoverId_fk": { + "name": "notification_pushoverId_pushover_pushoverId_fk", + "tableFrom": "notification", + "tableTo": "pushover", + "columnsFrom": [ + "pushoverId" + ], + "columnsTo": [ + "pushoverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_organizationId_organization_id_fk": { + "name": "notification_organizationId_organization_id_fk", + "tableFrom": "notification", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ntfy": { + "name": "ntfy", + "schema": "", + "columns": { + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "topic": { + "name": "topic", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "accessToken": { + "name": "accessToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 3 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pushover": { + "name": "pushover", + "schema": "", + "columns": { + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userKey": { + "name": "userKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "retry": { + "name": "retry", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "expire": { + "name": "expire", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resend": { + "name": "resend", + "schema": "", + "columns": { + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.slack": { + "name": "slack", + "schema": "", + "columns": { + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.telegram": { + "name": "telegram", + "schema": "", + "columns": { + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "botToken": { + "name": "botToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "chatId": { + "name": "chatId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "messageThreadId": { + "name": "messageThreadId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.port": { + "name": "port", + "schema": "", + "columns": { + "portId": { + "name": "portId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "publishedPort": { + "name": "publishedPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "publishMode": { + "name": "publishMode", + "type": "publishModeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'host'" + }, + "targetPort": { + "name": "targetPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "protocol": { + "name": "protocol", + "type": "protocolType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "port_applicationId_application_applicationId_fk": { + "name": "port_applicationId_application_applicationId_fk", + "tableFrom": "port", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.postgres": { + "name": "postgres", + "schema": "", + "columns": { + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "postgres_environmentId_environment_environmentId_fk": { + "name": "postgres_environmentId_environment_environmentId_fk", + "tableFrom": "postgres", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "postgres_serverId_server_serverId_fk": { + "name": "postgres_serverId_server_serverId_fk", + "tableFrom": "postgres", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "postgres_appName_unique": { + "name": "postgres_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.preview_deployments": { + "name": "preview_deployments", + "schema": "", + "columns": { + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestId": { + "name": "pullRequestId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestNumber": { + "name": "pullRequestNumber", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestURL": { + "name": "pullRequestURL", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestTitle": { + "name": "pullRequestTitle", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestCommentId": { + "name": "pullRequestCommentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "previewStatus": { + "name": "previewStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "preview_deployments_applicationId_application_applicationId_fk": { + "name": "preview_deployments_applicationId_application_applicationId_fk", + "tableFrom": "preview_deployments", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "preview_deployments_domainId_domain_domainId_fk": { + "name": "preview_deployments_domainId_domain_domainId_fk", + "tableFrom": "preview_deployments", + "tableTo": "domain", + "columnsFrom": [ + "domainId" + ], + "columnsTo": [ + "domainId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "preview_deployments_appName_unique": { + "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project": { + "name": "project", + "schema": "", + "columns": { + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": { + "project_organizationId_organization_id_fk": { + "name": "project_organizationId_organization_id_fk", + "tableFrom": "project", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redirect": { + "name": "redirect", + "schema": "", + "columns": { + "redirectId": { + "name": "redirectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "regex": { + "name": "regex", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "replacement": { + "name": "replacement", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permanent": { + "name": "permanent", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "redirect_applicationId_application_applicationId_fk": { + "name": "redirect_applicationId_application_applicationId_fk", + "tableFrom": "redirect", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redis": { + "name": "redis", + "schema": "", + "columns": { + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "redis_environmentId_environment_environmentId_fk": { + "name": "redis_environmentId_environment_environmentId_fk", + "tableFrom": "redis", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "redis_serverId_server_serverId_fk": { + "name": "redis_serverId_server_serverId_fk", + "tableFrom": "redis", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "redis_appName_unique": { + "name": "redis_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.registry": { + "name": "registry", + "schema": "", + "columns": { + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "registryName": { + "name": "registryName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "imagePrefix": { + "name": "imagePrefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "selfHosted": { + "name": "selfHosted", + "type": "RegistryType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'cloud'" + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "registry_organizationId_organization_id_fk": { + "name": "registry_organizationId_organization_id_fk", + "tableFrom": "registry", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.rollback": { + "name": "rollback", + "schema": "", + "columns": { + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fullContext": { + "name": "fullContext", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "rollback_deploymentId_deployment_deploymentId_fk": { + "name": "rollback_deploymentId_deployment_deploymentId_fk", + "tableFrom": "rollback", + "tableTo": "deployment", + "columnsFrom": [ + "deploymentId" + ], + "columnsTo": [ + "deploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.schedule": { + "name": "schedule", + "schema": "", + "columns": { + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "shellType": { + "name": "shellType", + "type": "shellType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'bash'" + }, + "scheduleType": { + "name": "scheduleType", + "type": "scheduleType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "script": { + "name": "script", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "timezone": { + "name": "timezone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "schedule_applicationId_application_applicationId_fk": { + "name": "schedule_applicationId_application_applicationId_fk", + "tableFrom": "schedule", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_composeId_compose_composeId_fk": { + "name": "schedule_composeId_compose_composeId_fk", + "tableFrom": "schedule", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_serverId_server_serverId_fk": { + "name": "schedule_serverId_server_serverId_fk", + "tableFrom": "schedule", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_userId_user_id_fk": { + "name": "schedule_userId_user_id_fk", + "tableFrom": "schedule", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.security": { + "name": "security", + "schema": "", + "columns": { + "securityId": { + "name": "securityId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "security_applicationId_application_applicationId_fk": { + "name": "security_applicationId_application_applicationId_fk", + "tableFrom": "security", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "security_username_applicationId_unique": { + "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "applicationId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.server": { + "name": "server", + "schema": "", + "columns": { + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'root'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverStatus": { + "name": "serverStatus", + "type": "serverStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'active'" + }, + "serverType": { + "name": "serverType", + "type": "serverType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'deploy'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + } + }, + "indexes": {}, + "foreignKeys": { + "server_organizationId_organization_id_fk": { + "name": "server_organizationId_organization_id_fk", + "tableFrom": "server", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "server_sshKeyId_ssh-key_sshKeyId_fk": { + "name": "server_sshKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "server", + "tableTo": "ssh-key", + "columnsFrom": [ + "sshKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session_temp": { + "name": "session_temp", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_temp_user_id_user_id_fk": { + "name": "session_temp_user_id_user_id_fk", + "tableFrom": "session_temp", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_temp_token_unique": { + "name": "session_temp_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ssh-key": { + "name": "ssh-key", + "schema": "", + "columns": { + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUsedAt": { + "name": "lastUsedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ssh-key_organizationId_organization_id_fk": { + "name": "ssh-key_organizationId_organization_id_fk", + "tableFrom": "ssh-key", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sso_provider": { + "name": "sso_provider", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "issuer": { + "name": "issuer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oidc_config": { + "name": "oidc_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "saml_config": { + "name": "saml_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "sso_provider_user_id_user_id_fk": { + "name": "sso_provider_user_id_user_id_fk", + "tableFrom": "sso_provider", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "sso_provider_organization_id_organization_id_fk": { + "name": "sso_provider_organization_id_organization_id_fk", + "tableFrom": "sso_provider", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sso_provider_provider_id_unique": { + "name": "sso_provider_provider_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "firstName": { + "name": "firstName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "lastName": { + "name": "lastName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "isRegistered": { + "name": "isRegistered", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "expirationDate": { + "name": "expirationDate", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'user'" + }, + "enablePaidFeatures": { + "name": "enablePaidFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "allowImpersonation": { + "name": "allowImpersonation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enableEnterpriseFeatures": { + "name": "enableEnterpriseFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "licenseKey": { + "name": "licenseKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isValidEnterpriseLicense": { + "name": "isValidEnterpriseLicense", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "stripeCustomerId": { + "name": "stripeCustomerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripeSubscriptionId": { + "name": "stripeSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serversQuantity": { + "name": "serversQuantity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "trustedOrigins": { + "name": "trustedOrigins", + "type": "text[]", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.volume_backup": { + "name": "volume_backup", + "schema": "", + "columns": { + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "turnOff": { + "name": "turnOff", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "volume_backup_applicationId_application_applicationId_fk": { + "name": "volume_backup_applicationId_application_applicationId_fk", + "tableFrom": "volume_backup", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_postgresId_postgres_postgresId_fk": { + "name": "volume_backup_postgresId_postgres_postgresId_fk", + "tableFrom": "volume_backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mariadbId_mariadb_mariadbId_fk": { + "name": "volume_backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "volume_backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mongoId_mongo_mongoId_fk": { + "name": "volume_backup_mongoId_mongo_mongoId_fk", + "tableFrom": "volume_backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mysqlId_mysql_mysqlId_fk": { + "name": "volume_backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "volume_backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_redisId_redis_redisId_fk": { + "name": "volume_backup_redisId_redis_redisId_fk", + "tableFrom": "volume_backup", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_composeId_compose_composeId_fk": { + "name": "volume_backup_composeId_compose_composeId_fk", + "tableFrom": "volume_backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_destinationId_destination_destinationId_fk": { + "name": "volume_backup_destinationId_destination_destinationId_fk", + "tableFrom": "volume_backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.webServerSettings": { + "name": "webServerSettings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverIp": { + "name": "serverIp", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "letsEncryptEmail": { + "name": "letsEncryptEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sshPrivateKey": { + "name": "sshPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "logCleanupCron": { + "name": "logCleanupCron", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0 0 * * *'" + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + }, + "cleanupCacheApplications": { + "name": "cleanupCacheApplications", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnPreviews": { + "name": "cleanupCacheOnPreviews", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnCompose": { + "name": "cleanupCacheOnCompose", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.buildType": { + "name": "buildType", + "schema": "public", + "values": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "public.sourceType": { + "name": "sourceType", + "schema": "public", + "values": [ + "docker", + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "drop" + ] + }, + "public.backupType": { + "name": "backupType", + "schema": "public", + "values": [ + "database", + "compose" + ] + }, + "public.databaseType": { + "name": "databaseType", + "schema": "public", + "values": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server" + ] + }, + "public.composeType": { + "name": "composeType", + "schema": "public", + "values": [ + "docker-compose", + "stack" + ] + }, + "public.sourceTypeCompose": { + "name": "sourceTypeCompose", + "schema": "public", + "values": [ + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "raw" + ] + }, + "public.deploymentStatus": { + "name": "deploymentStatus", + "schema": "public", + "values": [ + "running", + "done", + "error", + "cancelled" + ] + }, + "public.domainType": { + "name": "domainType", + "schema": "public", + "values": [ + "compose", + "application", + "preview" + ] + }, + "public.gitProviderType": { + "name": "gitProviderType", + "schema": "public", + "values": [ + "github", + "gitlab", + "bitbucket", + "gitea" + ] + }, + "public.mountType": { + "name": "mountType", + "schema": "public", + "values": [ + "bind", + "volume", + "file" + ] + }, + "public.serviceType": { + "name": "serviceType", + "schema": "public", + "values": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "public.notificationType": { + "name": "notificationType", + "schema": "public", + "values": [ + "slack", + "telegram", + "discord", + "email", + "resend", + "gotify", + "ntfy", + "pushover", + "custom", + "lark" + ] + }, + "public.protocolType": { + "name": "protocolType", + "schema": "public", + "values": [ + "tcp", + "udp" + ] + }, + "public.publishModeType": { + "name": "publishModeType", + "schema": "public", + "values": [ + "ingress", + "host" + ] + }, + "public.RegistryType": { + "name": "RegistryType", + "schema": "public", + "values": [ + "selfHosted", + "cloud" + ] + }, + "public.scheduleType": { + "name": "scheduleType", + "schema": "public", + "values": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "public.shellType": { + "name": "shellType", + "schema": "public", + "values": [ + "bash", + "sh" + ] + }, + "public.serverStatus": { + "name": "serverStatus", + "schema": "public", + "values": [ + "active", + "inactive" + ] + }, + "public.serverType": { + "name": "serverType", + "schema": "public", + "values": [ + "deploy", + "build" + ] + }, + "public.applicationStatus": { + "name": "applicationStatus", + "schema": "public", + "values": [ + "idle", + "running", + "done", + "error" + ] + }, + "public.certificateType": { + "name": "certificateType", + "schema": "public", + "values": [ + "letsencrypt", + "none", + "custom" + ] + }, + "public.triggerType": { + "name": "triggerType", + "schema": "public", + "values": [ + "push", + "tag" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/_journal.json b/apps/dokploy/drizzle/meta/_journal.json index 4af7e6c2b..b83e50548 100644 --- a/apps/dokploy/drizzle/meta/_journal.json +++ b/apps/dokploy/drizzle/meta/_journal.json @@ -1002,6 +1002,13 @@ "when": 1770615019498, "tag": "0142_outstanding_tusk", "breakpoints": true + }, + { + "idx": 143, + "version": "7", + "when": 1770961667210, + "tag": "0143_brown_ultron", + "breakpoints": true } ] } \ No newline at end of file diff --git a/apps/dokploy/server/api/routers/proprietary/sso.ts b/apps/dokploy/server/api/routers/proprietary/sso.ts index 78422ba02..59691c20d 100644 --- a/apps/dokploy/server/api/routers/proprietary/sso.ts +++ b/apps/dokploy/server/api/routers/proprietary/sso.ts @@ -55,6 +55,7 @@ export const ssoRouter = createTRPCRouter({ samlConfig: true, organizationId: true, }, + orderBy: [asc(ssoProvider.createdAt)], }); return providers; }), diff --git a/packages/server/src/db/schema/sso.ts b/packages/server/src/db/schema/sso.ts index 58f21ffac..e95872fd4 100644 --- a/packages/server/src/db/schema/sso.ts +++ b/packages/server/src/db/schema/sso.ts @@ -1,5 +1,5 @@ import { relations } from "drizzle-orm"; -import { pgTable, text } from "drizzle-orm/pg-core"; +import { pgTable, text, timestamp } from "drizzle-orm/pg-core"; import { z } from "zod"; import { organization } from "./account"; import { user } from "./user"; @@ -15,6 +15,7 @@ export const ssoProvider = pgTable("sso_provider", { onDelete: "cascade", }), domain: text("domain").notNull(), + createdAt: timestamp("created_at").notNull().defaultNow(), }); export const ssoProviderRelations = relations(ssoProvider, ({ one }) => ({ From edbc98aea7bade0d6513aced2b009fea0f21da2d Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 05:50:01 +0000 Subject: [PATCH 057/206] [autofix.ci] apply automated fixes --- .../proprietary/sso/register-oidc-dialog.tsx | 22 ++++++++++++++----- .../proprietary/sso/register-saml-dialog.tsx | 13 ++++++++--- .../proprietary/sso/sso-settings.tsx | 8 ++----- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/apps/dokploy/components/proprietary/sso/register-oidc-dialog.tsx b/apps/dokploy/components/proprietary/sso/register-oidc-dialog.tsx index 63b2c0c52..d0f44429c 100644 --- a/apps/dokploy/components/proprietary/sso/register-oidc-dialog.tsx +++ b/apps/dokploy/components/proprietary/sso/register-oidc-dialog.tsx @@ -93,7 +93,10 @@ function parseOidcConfig(oidcConfig: string | null): { } } -export function RegisterOidcDialog({ providerId, children }: RegisterOidcDialogProps) { +export function RegisterOidcDialog({ + providerId, + children, +}: RegisterOidcDialogProps) { const utils = api.useUtils(); const [open, setOpen] = useState(false); @@ -105,8 +108,12 @@ export function RegisterOidcDialog({ providerId, children }: RegisterOidcDialogP const updateMutation = api.sso.update.useMutation(); const isEdit = !!providerId; - const mutateAsync = isEdit ? updateMutation.mutateAsync : registerMutation.mutateAsync; - const isLoading = isEdit ? updateMutation.isLoading : registerMutation.isLoading; + const mutateAsync = isEdit + ? updateMutation.mutateAsync + : registerMutation.mutateAsync; + const isLoading = isEdit + ? updateMutation.isLoading + : registerMutation.isLoading; const form = useForm({ resolver: zodResolver(oidcProviderSchema), @@ -116,7 +123,10 @@ export function RegisterOidcDialog({ providerId, children }: RegisterOidcDialogP useEffect(() => { if (!data || !open) return; const domains = data.domain - ? data.domain.split(",").map((d) => d.trim()).filter(Boolean) + ? data.domain + .split(",") + .map((d) => d.trim()) + .filter(Boolean) : [""]; if (domains.length === 0) domains.push(""); const oidc = parseOidcConfig(data.oidcConfig); @@ -127,7 +137,9 @@ export function RegisterOidcDialog({ providerId, children }: RegisterOidcDialogP clientId: oidc?.clientId ?? "", clientSecret: oidc?.clientSecret ?? "", scopes: - oidc?.scopes && oidc.scopes.length > 0 ? oidc.scopes : [...DEFAULT_SCOPES], + oidc?.scopes && oidc.scopes.length > 0 + ? oidc.scopes + : [...DEFAULT_SCOPES], }); }, [data, open, form]); diff --git a/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx b/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx index bb3a2ea21..521344882 100644 --- a/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx +++ b/apps/dokploy/components/proprietary/sso/register-saml-dialog.tsx @@ -108,8 +108,12 @@ export function RegisterSamlDialog({ const updateMutation = api.sso.update.useMutation(); const isEdit = !!providerId; - const mutateAsync = isEdit ? updateMutation.mutateAsync : registerMutation.mutateAsync; - const isLoading = isEdit ? updateMutation.isLoading : registerMutation.isLoading; + const mutateAsync = isEdit + ? updateMutation.mutateAsync + : registerMutation.mutateAsync; + const isLoading = isEdit + ? updateMutation.isLoading + : registerMutation.isLoading; const [baseURL, setBaseURL] = useState(""); @@ -127,7 +131,10 @@ export function RegisterSamlDialog({ useEffect(() => { if (!data || !open) return; const domains = data.domain - ? data.domain.split(",").map((d) => d.trim()).filter(Boolean) + ? data.domain + .split(",") + .map((d) => d.trim()) + .filter(Boolean) : [""]; if (domains.length === 0) domains.push(""); const saml = parseSamlConfig(data.samlConfig); diff --git a/apps/dokploy/components/proprietary/sso/sso-settings.tsx b/apps/dokploy/components/proprietary/sso/sso-settings.tsx index d08939366..d5fbe88a6 100644 --- a/apps/dokploy/components/proprietary/sso/sso-settings.tsx +++ b/apps/dokploy/components/proprietary/sso/sso-settings.tsx @@ -272,9 +272,7 @@ export const SSOSettings = () => { View details {isOidc && ( - +
+
+ - ) : ( - - )} - - {org.ownerId === session?.user?.id && ( - <> - - { - await deleteOrganization({ - organizationId: org.id, +
+ + +
+ + {org.ownerId === session?.user?.id && ( + <> + + { + await deleteOrganization({ + organizationId: org.id, }) - .catch((error) => { - toast.error( - error?.message || - "Error deleting organization", - ); - }); - }} - > - - - - )} + + + + )} +
-
- ); - })} + ); + })}
{(user?.role === "owner" || user?.role === "admin" || From e8bec0ae03448be1f44022297769e3580eeaa7fa Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 15 Feb 2026 21:57:06 -0600 Subject: [PATCH 062/206] fix(compose): correct command string for docker-compose execution --- packages/server/src/utils/builders/compose.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/utils/builders/compose.ts b/packages/server/src/utils/builders/compose.ts index 7e45a7543..5eede59d5 100644 --- a/packages/server/src/utils/builders/compose.ts +++ b/packages/server/src/utils/builders/compose.ts @@ -88,7 +88,7 @@ export const createCommand = (compose: ComposeNested) => { let command = ""; if (composeType === "docker-compose") { - command = `compose -p ${appName} -f ${path} up -d --build --pull always --remove-orphans`; + command = `compose -p ${appName} -f ${path} up -d --build --remove-orphans`; } else if (composeType === "stack") { command = `stack deploy -c ${path} ${appName} --prune --with-registry-auth`; } From 8aab8dd2a5491fd43bdebab0f45af11e53ec17fa Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 16 Feb 2026 02:09:33 -0600 Subject: [PATCH 063/206] chore(dependencies): update zod version across multiple packages to 3.25.76 and remove unused i18next dependencies - Updated zod version from 3.25.32 to 3.25.76 in pnpm-lock.yaml, package.json files for api, dokploy, schedules, and server. - Removed i18next and related localization code from the dokploy application to streamline the codebase. --- apps/api/package.json | 2 +- .../settings/profile/profile-form.tsx | 20 +- .../servers/actions/show-dokploy-actions.tsx | 14 +- .../servers/actions/show-storage-actions.tsx | 18 +- .../servers/actions/show-traefik-actions.tsx | 14 +- .../settings/servers/handle-servers.tsx | 8 +- .../settings/servers/show-servers.tsx | 2 - .../dashboard/settings/web-domain.tsx | 14 +- .../dashboard/settings/web-server.tsx | 10 +- .../web-server/local-server-config.tsx | 11 +- .../web-server/manage-traefik-ports.tsx | 10 +- apps/dokploy/components/layouts/user-nav.tsx | 56 +-- apps/dokploy/lib/languages.ts | 29 -- apps/dokploy/next.config.mjs | 9 - apps/dokploy/package.json | 5 +- apps/dokploy/pages/_app.tsx | 14 +- apps/dokploy/pages/dashboard/settings/ai.tsx | 3 - .../pages/dashboard/settings/license.tsx | 3 - .../pages/dashboard/settings/profile.tsx | 3 - .../pages/dashboard/settings/server.tsx | 3 - .../pages/dashboard/settings/servers.tsx | 3 - apps/dokploy/pages/dashboard/settings/sso.tsx | 3 - apps/dokploy/tsconfig.json | 3 +- apps/dokploy/utils/hooks/use-locale.ts | 16 - apps/dokploy/utils/i18n.ts | 23 -- apps/schedules/package.json | 2 +- packages/server/package.json | 2 +- pnpm-lock.yaml | 340 +++++++----------- 28 files changed, 191 insertions(+), 449 deletions(-) delete mode 100644 apps/dokploy/lib/languages.ts delete mode 100644 apps/dokploy/utils/hooks/use-locale.ts delete mode 100644 apps/dokploy/utils/i18n.ts diff --git a/apps/api/package.json b/apps/api/package.json index 70c8aaac8..71d948076 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -20,7 +20,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "redis": "4.7.0", - "zod": "^3.25.32" + "zod": "^3.25.76" }, "devDependencies": { "@types/node": "^20.16.0", diff --git a/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx b/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx index 461a4c17c..6a8381279 100644 --- a/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx +++ b/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx @@ -1,6 +1,5 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { Loader2, Palette, User } from "lucide-react"; -import { useTranslation } from "next-i18next"; import { useEffect, useMemo, useRef, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -73,7 +72,6 @@ export const ProfileForm = () => { isError, error, } = api.user.update.useMutation(); - const { t } = useTranslation("settings"); const [gravatarHash, setGravatarHash] = useState(null); const colorInputRef = useRef(null); @@ -157,10 +155,10 @@ export const ProfileForm = () => {
- {t("settings.profile.title")} + Account - {t("settings.profile.description")} + Change the details of your profile here.
@@ -213,10 +211,10 @@ export const ProfileForm = () => { name="email" render={({ field }) => ( - {t("settings.profile.email")} + Email @@ -233,7 +231,7 @@ export const ProfileForm = () => { @@ -248,12 +246,12 @@ export const ProfileForm = () => { render={({ field }) => ( - {t("settings.profile.password")} + Password @@ -269,7 +267,7 @@ export const ProfileForm = () => { render={({ field }) => ( - {t("settings.profile.avatar")} + Avatar {
diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx index 42b73cf59..59e1684d7 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx @@ -1,4 +1,3 @@ -import { useTranslation } from "next-i18next"; import { toast } from "sonner"; import { UpdateServerIp } from "@/components/dashboard/settings/web-server/update-server-ip"; import { Button } from "@/components/ui/button"; @@ -17,7 +16,6 @@ import { TerminalModal } from "../../web-server/terminal-modal"; import { GPUSupportModal } from "../gpu-support-modal"; export const ShowDokployActions = () => { - const { t } = useTranslation("settings"); const { mutateAsync: reloadServer, isLoading } = api.settings.reloadServer.useMutation(); @@ -30,12 +28,12 @@ export const ShowDokployActions = () => { - {t("settings.server.webServer.actions")} + Actions @@ -51,17 +49,17 @@ export const ShowDokployActions = () => { }} className="cursor-pointer" > - {t("settings.server.webServer.reload")} + Reload - {t("settings.common.enterTerminal")} + Terminal e.preventDefault()} > - {t("settings.server.webServer.watchLogs")} + View Logs @@ -70,7 +68,7 @@ export const ShowDokployActions = () => { className="cursor-pointer" onSelect={(e) => e.preventDefault()} > - {t("settings.server.webServer.updateServerIp")} + Update Server IP diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx index c80648142..4467246ec 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx @@ -1,4 +1,3 @@ -import { useTranslation } from "next-i18next"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { @@ -16,7 +15,6 @@ interface Props { serverId?: string; } export const ShowStorageActions = ({ serverId }: Props) => { - const { t } = useTranslation("settings"); const { mutateAsync: cleanAll, isLoading: cleanAllIsLoading } = api.settings.cleanAll.useMutation(); @@ -64,12 +62,12 @@ export const ShowStorageActions = ({ serverId }: Props) => { } variant="outline" > - {t("settings.server.webServer.storage.label")} + Space - {t("settings.server.webServer.actions")} + Actions @@ -88,7 +86,7 @@ export const ShowStorageActions = ({ serverId }: Props) => { }} > - {t("settings.server.webServer.storage.cleanUnusedImages")} + Clean unused images { }} > - {t("settings.server.webServer.storage.cleanUnusedVolumes")} + Clean unused volumes @@ -125,7 +123,7 @@ export const ShowStorageActions = ({ serverId }: Props) => { }} > - {t("settings.server.webServer.storage.cleanStoppedContainers")} + Clean stopped containers @@ -144,7 +142,7 @@ export const ShowStorageActions = ({ serverId }: Props) => { }} > - {t("settings.server.webServer.storage.cleanDockerBuilder")} + Clean Docker Builder & System {!serverId && ( @@ -161,7 +159,7 @@ export const ShowStorageActions = ({ serverId }: Props) => { }} > - {t("settings.server.webServer.storage.cleanMonitoring")} + Clean Monitoring )} @@ -180,7 +178,7 @@ export const ShowStorageActions = ({ serverId }: Props) => { }); }} > - {t("settings.server.webServer.storage.cleanAll")} + Clean all diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx index 5b4d751ff..a169bcde9 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx @@ -1,4 +1,3 @@ -import { useTranslation } from "next-i18next"; import { toast } from "sonner"; import { AlertBlock } from "@/components/shared/alert-block"; import { DialogAction } from "@/components/shared/dialog-action"; @@ -22,7 +21,6 @@ interface Props { serverId?: string; } export const ShowTraefikActions = ({ serverId }: Props) => { - const { t } = useTranslation("settings"); const { mutateAsync: reloadTraefik, isLoading: reloadTraefikIsLoading } = api.settings.reloadTraefik.useMutation(); @@ -75,12 +73,12 @@ export const ShowTraefikActions = ({ serverId }: Props) => { } variant="outline" > - {t("settings.server.webServer.traefik.label")} + Traefik - {t("settings.server.webServer.actions")} + Actions @@ -100,7 +98,7 @@ export const ShowTraefikActions = ({ serverId }: Props) => { className="cursor-pointer" disabled={isReloadHealthCheckExecuting} > - {t("settings.server.webServer.reload")} + Reload { onSelect={(e) => e.preventDefault()} className="cursor-pointer" > - {t("settings.server.webServer.watchLogs")} + View Logs @@ -119,7 +117,7 @@ export const ShowTraefikActions = ({ serverId }: Props) => { onSelect={(e) => e.preventDefault()} className="cursor-pointer" > - {t("settings.server.webServer.traefik.modifyEnv")} + Modify Environment @@ -176,7 +174,7 @@ export const ShowTraefikActions = ({ serverId }: Props) => { onSelect={(e) => e.preventDefault()} className="cursor-pointer" > - {t("settings.server.webServer.traefik.managePorts")} + Additional Port Mappings diff --git a/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx b/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx index 99804ba6b..bb68dc52c 100644 --- a/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx @@ -1,7 +1,6 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { Pencil, PlusIcon } from "lucide-react"; import Link from "next/link"; -import { useTranslation } from "next-i18next"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -63,7 +62,6 @@ interface Props { } export const HandleServers = ({ serverId, asButton = false }: Props) => { - const { t } = useTranslation("settings"); const utils = api.useUtils(); const [isOpen, setIsOpen] = useState(false); @@ -365,7 +363,7 @@ export const HandleServers = ({ serverId, asButton = false }: Props) => { name="ipAddress" render={({ field }) => ( - {t("settings.terminal.ipAddress")} + IP Address @@ -379,7 +377,7 @@ export const HandleServers = ({ serverId, asButton = false }: Props) => { name="port" render={({ field }) => ( - {t("settings.terminal.port")} + Port { name="username" render={({ field }) => ( - {t("settings.terminal.username")} + Username diff --git a/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx b/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx index 92d6fc5c3..657ac2453 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx @@ -13,7 +13,6 @@ import { } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/router"; -import { useTranslation } from "next-i18next"; import { toast } from "sonner"; import { AlertBlock } from "@/components/shared/alert-block"; import { DialogAction } from "@/components/shared/dialog-action"; @@ -52,7 +51,6 @@ import { ShowTraefikFileSystemModal } from "./show-traefik-file-system-modal"; import { WelcomeSuscription } from "./welcome-stripe/welcome-suscription"; export const ShowServers = () => { - const { t } = useTranslation("settings"); const router = useRouter(); const query = router.query; const { data, refetch, isLoading } = api.server.all.useQuery(); diff --git a/apps/dokploy/components/dashboard/settings/web-domain.tsx b/apps/dokploy/components/dashboard/settings/web-domain.tsx index e0be5c7f3..159d950d4 100644 --- a/apps/dokploy/components/dashboard/settings/web-domain.tsx +++ b/apps/dokploy/components/dashboard/settings/web-domain.tsx @@ -1,6 +1,5 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { GlobeIcon } from "lucide-react"; -import { useTranslation } from "next-i18next"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -66,7 +65,6 @@ const addServerDomain = z type AddServerDomain = z.infer; export const WebDomain = () => { - const { t } = useTranslation("settings"); const { data, refetch } = api.settings.getWebServerSettings.useQuery(); const { mutateAsync, isLoading } = api.settings.assignDomainServer.useMutation(); @@ -119,10 +117,10 @@ export const WebDomain = () => {
- {t("settings.server.domain.title")} + Server Domain - {t("settings.server.domain.description")} + Add a domain to your server application.
@@ -152,7 +150,7 @@ export const WebDomain = () => { return ( - {t("settings.server.domain.form.domain")} + Domain { return ( - {t("settings.server.domain.form.letsEncryptEmail")} + Let's Encrypt Email { return ( - {t("settings.server.domain.form.certificate.label")} + Certificate Provider { name="username" render={({ field }) => ( - {t("settings.terminal.username")} + Username @@ -142,7 +139,7 @@ const LocalServerConfig = ({ onSave }: Props) => { className="ml-auto" disabled={!form.formState.isDirty} > - {t("settings.common.save")} + Save diff --git a/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx b/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx index 73973ef06..59dfca9ee 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx @@ -1,6 +1,5 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { ArrowRightLeft, Plus, Trash2 } from "lucide-react"; -import { useTranslation } from "next-i18next"; import { useHealthCheckAfterMutation } from "@/hooks/use-health-check-after-mutation"; import type React from "react"; import { useEffect, useState } from "react"; @@ -56,7 +55,6 @@ const TraefikPortsSchema = z.object({ type TraefikPortsForm = z.infer; export const ManageTraefikPorts = ({ children, serverId }: Props) => { - const { t } = useTranslation("settings"); const [open, setOpen] = useState(false); const form = useForm({ @@ -84,7 +82,7 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => { isExecuting: isHealthCheckExecuting, } = useHealthCheckAfterMutation({ initialDelay: 5000, - successMessage: t("settings.server.webServer.traefik.portsUpdated"), + successMessage: "Ports updated successfully", onSuccess: () => { refetchPorts(); setOpen(false); @@ -129,14 +127,12 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => { - {t("settings.server.webServer.traefik.managePorts")} + Additional Port Mappings
- {t( - "settings.server.webServer.traefik.managePortsDescription", - )} + Add or remove additional ports for Traefik {fields.length} port mapping{fields.length !== 1 ? "s" : ""}{" "} configured diff --git a/apps/dokploy/components/layouts/user-nav.tsx b/apps/dokploy/components/layouts/user-nav.tsx index cc952150b..141ee5cce 100644 --- a/apps/dokploy/components/layouts/user-nav.tsx +++ b/apps/dokploy/components/layouts/user-nav.tsx @@ -10,18 +10,9 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; import { authClient } from "@/lib/auth-client"; -import { Languages } from "@/lib/languages"; import { getFallbackAvatarInitials } from "@/lib/utils"; import { api } from "@/utils/api"; -import useLocale from "@/utils/hooks/use-locale"; import { ModeToggle } from "../ui/modeToggle"; import { SidebarMenuButton } from "../ui/sidebar"; @@ -32,7 +23,6 @@ export const UserNav = () => { const { data } = api.user.get.useQuery(); const { data: isCloud } = api.settings.isCloud.useQuery(); - const { locale, setLocale } = useLocale(); // const { mutateAsync } = api.auth.logout.useMutation(); return ( @@ -155,39 +145,19 @@ export const UserNav = () => { )} -
- { - await authClient.signOut().then(() => { - router.push("/"); - }); - // await mutateAsync().then(() => { - // router.push("/"); - // }); - }} - > - Log out - -
- -
-
+ { + await authClient.signOut().then(() => { + router.push("/"); + }); + // await mutateAsync().then(() => { + // router.push("/"); + // }); + }} + > + Log out + ); diff --git a/apps/dokploy/lib/languages.ts b/apps/dokploy/lib/languages.ts deleted file mode 100644 index 7a4d54fa5..000000000 --- a/apps/dokploy/lib/languages.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Sorted list based off of population of the country / speakers of the language. - */ -export const Languages = { - english: { code: "en", name: "English" }, - spanish: { code: "es", name: "Español" }, - chineseSimplified: { code: "zh-Hans", name: "简体中文" }, - chineseTraditional: { code: "zh-Hant", name: "繁體中文" }, - portuguese: { code: "pt-br", name: "Português" }, - russian: { code: "ru", name: "Русский" }, - japanese: { code: "ja", name: "日本語" }, - german: { code: "de", name: "Deutsch" }, - korean: { code: "ko", name: "한국어" }, - french: { code: "fr", name: "Français" }, - turkish: { code: "tr", name: "Türkçe" }, - italian: { code: "it", name: "Italiano" }, - polish: { code: "pl", name: "Polski" }, - ukrainian: { code: "uk", name: "Українська" }, - persian: { code: "fa", name: "فارسی" }, - dutch: { code: "nl", name: "Nederlands" }, - indonesian: { code: "id", name: "Bahasa Indonesia" }, - kazakh: { code: "kz", name: "Қазақ" }, - norwegian: { code: "no", name: "Norsk" }, - azerbaijani: { code: "az", name: "Azərbaycan" }, - malayalam: { code: "ml", name: "മലയാളം" }, -}; - -export type Language = keyof typeof Languages; -export type LanguageCode = (typeof Languages)[keyof typeof Languages]["code"]; diff --git a/apps/dokploy/next.config.mjs b/apps/dokploy/next.config.mjs index 48231114a..2f12eccee 100644 --- a/apps/dokploy/next.config.mjs +++ b/apps/dokploy/next.config.mjs @@ -10,15 +10,6 @@ const nextConfig = { ignoreBuildErrors: true, }, transpilePackages: ["@dokploy/server"], - /** - * If you are using `appDir` then you must comment the below `i18n` config out. - * - * @see https://github.com/vercel/next.js/issues/41980 - */ - i18n: { - locales: ["en"], - defaultLocale: "en", - }, async headers() { return [ { diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index 4566c71de..1dbd0a3bc 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -113,7 +113,6 @@ "drizzle-orm": "^0.41.0", "drizzle-zod": "0.5.1", "fancy-ansi": "^0.1.3", - "i18next": "^23.16.8", "input-otp": "^1.4.2", "js-cookie": "^3.0.5", "lodash": "4.17.21", @@ -121,7 +120,6 @@ "micromatch": "4.0.8", "nanoid": "3.3.11", "next": "^16.1.6", - "next-i18next": "^15.4.2", "next-themes": "^0.2.1", "nextjs-toploader": "^3.9.17", "node-os-utils": "2.0.1", @@ -139,7 +137,6 @@ "react-day-picker": "8.10.1", "react-dom": "18.2.0", "react-hook-form": "^7.56.4", - "react-i18next": "^15.5.2", "react-markdown": "^9.1.0", "recharts": "^2.15.3", "slugify": "^1.6.6", @@ -156,7 +153,7 @@ "ws": "8.16.0", "xterm-addon-fit": "^0.8.0", "yaml": "2.8.1", - "zod": "^3.25.32", + "zod": "^3.25.76", "zod-form-data": "^2.0.7", "semver": "7.7.3" }, diff --git a/apps/dokploy/pages/_app.tsx b/apps/dokploy/pages/_app.tsx index 78e9862d0..ad6f8d336 100644 --- a/apps/dokploy/pages/_app.tsx +++ b/apps/dokploy/pages/_app.tsx @@ -4,13 +4,11 @@ import type { NextPage } from "next"; import type { AppProps } from "next/app"; import { Inter } from "next/font/google"; import Head from "next/head"; -import { appWithTranslation } from "next-i18next"; import { ThemeProvider } from "next-themes"; import NextTopLoader from "nextjs-toploader"; import type { ReactElement, ReactNode } from "react"; import { SearchCommand } from "@/components/dashboard/search-command"; import { Toaster } from "@/components/ui/sonner"; -import { Languages } from "@/lib/languages"; import { api } from "@/utils/api"; const inter = Inter({ subsets: ["latin"] }); @@ -58,14 +56,4 @@ const MyApp = ({ ); }; -export default api.withTRPC( - appWithTranslation(MyApp, { - i18n: { - defaultLocale: "en", - locales: Object.values(Languages).map((language) => language.code), - localeDetection: false, - }, - fallbackLng: "en", - keySeparator: false, - }), -); +export default api.withTRPC(MyApp); diff --git a/apps/dokploy/pages/dashboard/settings/ai.tsx b/apps/dokploy/pages/dashboard/settings/ai.tsx index 925bc561a..0dc9b203e 100644 --- a/apps/dokploy/pages/dashboard/settings/ai.tsx +++ b/apps/dokploy/pages/dashboard/settings/ai.tsx @@ -6,7 +6,6 @@ import superjson from "superjson"; import { AiForm } from "@/components/dashboard/settings/ai-form"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; -import { getLocale, serverSideTranslations } from "@/utils/i18n"; const Page = () => { return ( @@ -26,7 +25,6 @@ export async function getServerSideProps( ) { const { req, res } = ctx; const { user, session } = await validateRequest(req); - const locale = getLocale(req.cookies); const helpers = createServerSideHelpers({ router: appRouter, @@ -55,7 +53,6 @@ export async function getServerSideProps( return { props: { trpcState: helpers.dehydrate(), - ...(await serverSideTranslations(locale, ["settings"])), }, }; } diff --git a/apps/dokploy/pages/dashboard/settings/license.tsx b/apps/dokploy/pages/dashboard/settings/license.tsx index 28e0d54ae..6a0f0f854 100644 --- a/apps/dokploy/pages/dashboard/settings/license.tsx +++ b/apps/dokploy/pages/dashboard/settings/license.tsx @@ -7,7 +7,6 @@ import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { LicenseKeySettings } from "@/components/proprietary/license-keys/license-key"; import { Card } from "@/components/ui/card"; import { appRouter } from "@/server/api/root"; -import { getLocale, serverSideTranslations } from "@/utils/i18n"; const Page = () => { return ( @@ -35,7 +34,6 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const locale = await getLocale(req.cookies); const { user, session } = await validateRequest(ctx.req); if (!user) { return { @@ -70,7 +68,6 @@ export async function getServerSideProps( return { props: { trpcState: helpers.dehydrate(), - ...(await serverSideTranslations(locale, ["settings"])), }, }; } diff --git a/apps/dokploy/pages/dashboard/settings/profile.tsx b/apps/dokploy/pages/dashboard/settings/profile.tsx index 7e0ccdc83..22077fb41 100644 --- a/apps/dokploy/pages/dashboard/settings/profile.tsx +++ b/apps/dokploy/pages/dashboard/settings/profile.tsx @@ -9,7 +9,6 @@ import { ProfileForm } from "@/components/dashboard/settings/profile/profile-for import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; import { api } from "@/utils/api"; -import { getLocale, serverSideTranslations } from "@/utils/i18n"; const Page = () => { const { data } = api.user.get.useQuery(); @@ -37,7 +36,6 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const locale = getLocale(req.cookies); const { user, session } = await validateRequest(req); const helpers = createServerSideHelpers({ @@ -67,7 +65,6 @@ export async function getServerSideProps( return { props: { trpcState: helpers.dehydrate(), - ...(await serverSideTranslations(locale, ["settings"])), }, }; } diff --git a/apps/dokploy/pages/dashboard/settings/server.tsx b/apps/dokploy/pages/dashboard/settings/server.tsx index dbe4917dd..eba6c8764 100644 --- a/apps/dokploy/pages/dashboard/settings/server.tsx +++ b/apps/dokploy/pages/dashboard/settings/server.tsx @@ -10,7 +10,6 @@ import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { Card } from "@/components/ui/card"; import { appRouter } from "@/server/api/root"; import { api } from "@/utils/api"; -import { getLocale, serverSideTranslations } from "@/utils/i18n"; const Page = () => { const { data: user } = api.user.get.useQuery(); @@ -42,7 +41,6 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const locale = await getLocale(req.cookies); if (IS_CLOUD) { return { redirect: { @@ -85,7 +83,6 @@ export async function getServerSideProps( return { props: { trpcState: helpers.dehydrate(), - ...(await serverSideTranslations(locale, ["settings"])), }, }; } diff --git a/apps/dokploy/pages/dashboard/settings/servers.tsx b/apps/dokploy/pages/dashboard/settings/servers.tsx index 5562f460b..9912f1e82 100644 --- a/apps/dokploy/pages/dashboard/settings/servers.tsx +++ b/apps/dokploy/pages/dashboard/settings/servers.tsx @@ -6,7 +6,6 @@ import superjson from "superjson"; import { ShowServers } from "@/components/dashboard/settings/servers/show-servers"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; -import { getLocale, serverSideTranslations } from "@/utils/i18n"; const Page = () => { return ( @@ -25,7 +24,6 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const locale = await getLocale(req.cookies); const { user, session } = await validateRequest(req); if (!user) { return { @@ -61,7 +59,6 @@ export async function getServerSideProps( return { props: { trpcState: helpers.dehydrate(), - ...(await serverSideTranslations(locale, ["settings"])), }, }; } diff --git a/apps/dokploy/pages/dashboard/settings/sso.tsx b/apps/dokploy/pages/dashboard/settings/sso.tsx index 164e2c3da..4203d7725 100644 --- a/apps/dokploy/pages/dashboard/settings/sso.tsx +++ b/apps/dokploy/pages/dashboard/settings/sso.tsx @@ -8,7 +8,6 @@ import { EnterpriseFeatureGate } from "@/components/proprietary/enterprise-featu import { SSOSettings } from "@/components/proprietary/sso/sso-settings"; import { Card } from "@/components/ui/card"; import { appRouter } from "@/server/api/root"; -import { getLocale, serverSideTranslations } from "@/utils/i18n"; const Page = () => { return ( @@ -43,7 +42,6 @@ Page.getLayout = (page: ReactElement) => { export async function getServerSideProps(ctx: GetServerSidePropsContext) { const { req, res } = ctx; - const locale = await getLocale(req.cookies); const { user, session } = await validateRequest(ctx.req); if (!user) { return { @@ -78,7 +76,6 @@ export async function getServerSideProps(ctx: GetServerSidePropsContext) { return { props: { trpcState: helpers.dehydrate(), - ...(await serverSideTranslations(locale, ["settings"])), }, }; } diff --git a/apps/dokploy/tsconfig.json b/apps/dokploy/tsconfig.json index 9f664e78a..de0d647d2 100644 --- a/apps/dokploy/tsconfig.json +++ b/apps/dokploy/tsconfig.json @@ -39,8 +39,7 @@ "**/*.js", ".next/types/**/*.ts", "env.js", - "next.config.mjs", - "next-i18next.config.mjs" + "next.config.mjs" ], "exclude": [ "node_modules", diff --git a/apps/dokploy/utils/hooks/use-locale.ts b/apps/dokploy/utils/hooks/use-locale.ts deleted file mode 100644 index 0d6ac9b55..000000000 --- a/apps/dokploy/utils/hooks/use-locale.ts +++ /dev/null @@ -1,16 +0,0 @@ -import Cookies from "js-cookie"; -import type { LanguageCode } from "@/lib/languages"; - -export default function useLocale() { - const currentLocale = (Cookies.get("DOKPLOY_LOCALE") ?? "en") as LanguageCode; - - const setLocale = (locale: LanguageCode) => { - Cookies.set("DOKPLOY_LOCALE", locale, { expires: 365 }); - window.location.reload(); - }; - - return { - locale: currentLocale, - setLocale, - }; -} diff --git a/apps/dokploy/utils/i18n.ts b/apps/dokploy/utils/i18n.ts deleted file mode 100644 index c56673d28..000000000 --- a/apps/dokploy/utils/i18n.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { NextApiRequestCookies } from "next/dist/server/api-utils"; - -export function getLocale(cookies: NextApiRequestCookies) { - const locale = cookies.DOKPLOY_LOCALE ?? "en"; - return locale; -} - -import { serverSideTranslations as originalServerSideTranslations } from "next-i18next/serverSideTranslations"; -import { Languages } from "@/lib/languages"; - -export const serverSideTranslations = ( - locale: string, - namespaces = ["common"], -) => - originalServerSideTranslations(locale, namespaces, { - fallbackLng: "en", - keySeparator: false, - i18n: { - defaultLocale: "en", - locales: Object.values(Languages).map((language) => language.code), - localeDetection: false, - }, - }); diff --git a/apps/schedules/package.json b/apps/schedules/package.json index 620b73f92..52e91470d 100644 --- a/apps/schedules/package.json +++ b/apps/schedules/package.json @@ -20,7 +20,7 @@ "pino-pretty": "11.2.2", "react": "18.2.0", "react-dom": "18.2.0", - "zod": "^3.25.32" + "zod": "^3.25.76" }, "devDependencies": { "@types/node": "^20.16.0", diff --git a/packages/server/package.json b/packages/server/package.json index bf7a43ab3..b45ee287f 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -81,7 +81,7 @@ "ssh2": "1.15.0", "toml": "3.0.0", "ws": "8.16.0", - "zod": "^3.25.32", + "zod": "^3.25.76", "semver": "7.7.3" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 788d6c5fa..6342503db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,7 +41,7 @@ importers: version: 1.14.3(hono@4.11.7) '@hono/zod-validator': specifier: 0.3.0 - version: 0.3.0(hono@4.11.7)(zod@3.25.32) + version: 0.3.0(hono@4.11.7)(zod@3.25.76) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -67,8 +67,8 @@ importers: specifier: 4.7.0 version: 4.7.0 zod: - specifier: ^3.25.32 - version: 3.25.32 + specifier: ^3.25.76 + version: 3.25.76 devDependencies: '@types/node': specifier: ^20.16.0 @@ -90,25 +90,25 @@ importers: dependencies: '@ai-sdk/anthropic': specifier: ^2.0.5 - version: 2.0.5(zod@3.25.32) + version: 2.0.5(zod@3.25.76) '@ai-sdk/azure': specifier: ^2.0.16 - version: 2.0.16(zod@3.25.32) + version: 2.0.16(zod@3.25.76) '@ai-sdk/cohere': specifier: ^2.0.4 - version: 2.0.4(zod@3.25.32) + version: 2.0.4(zod@3.25.76) '@ai-sdk/deepinfra': specifier: ^1.0.10 - version: 1.0.10(zod@3.25.32) + version: 1.0.10(zod@3.25.76) '@ai-sdk/mistral': specifier: ^2.0.7 - version: 2.0.7(zod@3.25.32) + version: 2.0.7(zod@3.25.76) '@ai-sdk/openai': specifier: ^2.0.16 - version: 2.0.16(zod@3.25.32) + version: 2.0.16(zod@3.25.76) '@ai-sdk/openai-compatible': specifier: ^1.0.10 - version: 1.0.10(zod@3.25.32) + version: 1.0.10(zod@3.25.76) '@better-auth/sso': specifier: 1.4.18 version: 1.4.18(@better-auth/utils@0.3.0)(better-auth@1.4.18(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.6.2)(drizzle-kit@0.31.8)(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(pg@8.17.2)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1))) @@ -135,7 +135,7 @@ importers: version: link:../../packages/server '@dokploy/trpc-openapi': specifier: 0.0.4 - version: 0.0.4(@trpc/server@10.45.2)(@types/node@20.17.51)(zod@3.25.32) + version: 0.0.4(@trpc/server@10.45.2)(@types/node@20.17.51)(zod@3.25.76) '@faker-js/faker': specifier: ^8.4.1 version: 8.4.1 @@ -255,10 +255,10 @@ importers: version: 0.5.16 ai: specifier: ^5.0.17 - version: 5.0.17(zod@3.25.32) + version: 5.0.17(zod@3.25.76) ai-sdk-ollama: specifier: ^0.5.1 - version: 0.5.1(zod@3.25.32) + version: 0.5.1(zod@3.25.76) bcrypt: specifier: 5.1.1 version: 5.1.1 @@ -300,13 +300,10 @@ importers: version: 0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0) drizzle-zod: specifier: 0.5.1 - version: 0.5.1(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(zod@3.25.32) + version: 0.5.1(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(zod@3.25.76) fancy-ansi: specifier: ^0.1.3 version: 0.1.3 - i18next: - specifier: ^23.16.8 - version: 23.16.8 input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -328,9 +325,6 @@ importers: next: specifier: ^16.1.6 version: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - next-i18next: - specifier: ^15.4.2 - version: 15.4.2(i18next@23.16.8)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-i18next@15.5.2(i18next@23.16.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3))(react@18.2.0) next-themes: specifier: ^0.2.1 version: 0.2.1(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -382,9 +376,6 @@ importers: react-hook-form: specifier: ^7.56.4 version: 7.56.4(react@18.2.0) - react-i18next: - specifier: ^15.5.2 - version: 15.5.2(i18next@23.16.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) react-markdown: specifier: ^9.1.0 version: 9.1.0(@types/react@18.3.5)(react@18.2.0) @@ -443,11 +434,11 @@ importers: specifier: 2.8.1 version: 2.8.1 zod: - specifier: ^3.25.32 - version: 3.25.32 + specifier: ^3.25.76 + version: 3.25.76 zod-form-data: specifier: ^2.0.7 - version: 2.0.7(zod@3.25.32) + version: 2.0.7(zod@3.25.76) devDependencies: '@types/adm-zip': specifier: ^0.5.7 @@ -499,7 +490,7 @@ importers: version: 8.5.10 autoprefixer: specifier: 10.4.12 - version: 10.4.12(postcss@8.5.3) + version: 10.4.12(postcss@8.5.6) drizzle-kit: specifier: ^0.31.4 version: 0.31.8 @@ -538,7 +529,7 @@ importers: version: 1.14.3(hono@4.11.7) '@hono/zod-validator': specifier: 0.3.0 - version: 0.3.0(hono@4.11.7)(zod@3.25.32) + version: 0.3.0(hono@4.11.7)(zod@3.25.76) bullmq: specifier: 5.67.3 version: 5.67.3 @@ -567,8 +558,8 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) zod: - specifier: ^3.25.32 - version: 3.25.32 + specifier: ^3.25.76 + version: 3.25.76 devDependencies: '@types/node': specifier: ^20.16.0 @@ -590,25 +581,25 @@ importers: dependencies: '@ai-sdk/anthropic': specifier: ^2.0.5 - version: 2.0.5(zod@3.25.32) + version: 2.0.5(zod@3.25.76) '@ai-sdk/azure': specifier: ^2.0.16 - version: 2.0.16(zod@3.25.32) + version: 2.0.16(zod@3.25.76) '@ai-sdk/cohere': specifier: ^2.0.4 - version: 2.0.4(zod@3.25.32) + version: 2.0.4(zod@3.25.76) '@ai-sdk/deepinfra': specifier: ^1.0.10 - version: 1.0.10(zod@3.25.32) + version: 1.0.10(zod@3.25.76) '@ai-sdk/mistral': specifier: ^2.0.7 - version: 2.0.7(zod@3.25.32) + version: 2.0.7(zod@3.25.76) '@ai-sdk/openai': specifier: ^2.0.16 - version: 2.0.16(zod@3.25.32) + version: 2.0.16(zod@3.25.76) '@ai-sdk/openai-compatible': specifier: ^1.0.10 - version: 1.0.10(zod@3.25.32) + version: 1.0.10(zod@3.25.76) '@better-auth/sso': specifier: 1.4.18 version: 1.4.18(@better-auth/utils@0.3.0)(better-auth@1.4.18(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.6.2)(drizzle-kit@0.31.8)(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(pg@8.17.2)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1))) @@ -641,10 +632,10 @@ importers: version: 0.5.16 ai: specifier: ^5.0.17 - version: 5.0.17(zod@3.25.32) + version: 5.0.17(zod@3.25.76) ai-sdk-ollama: specifier: ^0.5.1 - version: 0.5.1(zod@3.25.32) + version: 0.5.1(zod@3.25.76) bcrypt: specifier: 5.1.1 version: 5.1.1 @@ -674,7 +665,7 @@ importers: version: 0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0) drizzle-zod: specifier: 0.5.1 - version: 0.5.1(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(zod@3.25.32) + version: 0.5.1(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(zod@3.25.76) lodash: specifier: 4.17.21 version: 4.17.21 @@ -745,12 +736,12 @@ importers: specifier: 2.8.1 version: 2.8.1 zod: - specifier: ^3.25.32 - version: 3.25.32 + specifier: ^3.25.76 + version: 3.25.76 devDependencies: '@better-auth/cli': specifier: 1.4.18 - version: 1.4.18(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-call@1.1.8(zod@3.25.32))(drizzle-kit@0.31.8)(gel@2.1.0)(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)) + version: 1.4.18(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-call@1.1.8(zod@3.25.76))(drizzle-kit@0.31.8)(gel@2.1.0)(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)) '@types/adm-zip': specifier: ^0.5.7 version: 0.5.7 @@ -4311,9 +4302,6 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/hoist-non-react-statics@3.3.6': - resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} - '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} @@ -5072,9 +5060,6 @@ packages: core-js-pure@3.42.0: resolution: {integrity: sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==} - core-js@3.42.0: - resolution: {integrity: sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==} - cpu-features@0.0.10: resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} engines: {node: '>=10.0.0'} @@ -5843,9 +5828,6 @@ packages: resolution: {integrity: sha512-l7qMiNee7t82bH3SeyUCt9UF15EVmaBvsppY2zQtrbIhl/yzBTny+YUxsVjSjQ6gaqaeVtZmGocom8TzBlA4Yw==} engines: {node: '>=16.9.0'} - html-parse-stringify@3.0.1: - resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} - html-to-text@9.0.5: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} @@ -5886,12 +5868,6 @@ packages: hyphenate-style-name@1.1.0: resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} - i18next-fs-backend@2.6.0: - resolution: {integrity: sha512-3ZlhNoF9yxnM8pa8bWp5120/Ob6t4lVl1l/tbLmkml/ei3ud8IWySCHt2lrY5xWRlSU5D9IV2sm5bEbGuTqwTw==} - - i18next@23.16.8: - resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -6601,15 +6577,6 @@ packages: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} - next-i18next@15.4.2: - resolution: {integrity: sha512-zgRxWf7kdXtM686ecGIBQL+Bq0+DqAhRlasRZ3vVF0TmrNTWkVhs52n//oU3Fj5O7r/xOKkECDUwfOuXVwTK/g==} - engines: {node: '>=14'} - peerDependencies: - i18next: '>= 23.7.13' - next: '>= 12.0.0' - react: '>= 17.0.2' - react-i18next: '>= 13.5.0' - next-themes@0.2.1: resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: @@ -7215,22 +7182,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-i18next@15.5.2: - resolution: {integrity: sha512-ePODyXgmZQAOYTbZXQn5rRsSBu3Gszo69jxW6aKmlSgxKAI1fOhDwSu6bT4EKHciWPKQ7v7lPrjeiadR6Gi+1A==} - peerDependencies: - i18next: '>= 23.2.3' - react: '>= 16.8.0' - react-dom: '*' - react-native: '*' - typescript: ^5 - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - typescript: - optional: true - react-immutable-proptypes@2.2.0: resolution: {integrity: sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==} peerDependencies: @@ -8170,10 +8121,6 @@ packages: jsdom: optional: true - void-elements@3.1.0: - resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} - engines: {node: '>=0.10.0'} - w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -8355,8 +8302,8 @@ packages: zod@3.22.5: resolution: {integrity: sha512-HqnGsCdVZ2xc0qWPLdO25WnseXThh0kEYKIdV5F/hTHO75hNZFp8thxSeHhiPrHZKrFTo1SOgkAj9po5bexZlw==} - zod@3.25.32: - resolution: {integrity: sha512-OSm2xTIRfW8CV5/QKgngwmQW/8aPfGdaQFlrGoErlgg/Epm7cjb6K6VEyExfe65a3VybUOnu381edLb0dfJl0g==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -8366,63 +8313,63 @@ packages: snapshots: - '@ai-sdk/anthropic@2.0.5(zod@3.25.32)': + '@ai-sdk/anthropic@2.0.5(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/azure@2.0.16(zod@3.25.32)': + '@ai-sdk/azure@2.0.16(zod@3.25.76)': dependencies: - '@ai-sdk/openai': 2.0.16(zod@3.25.32) + '@ai-sdk/openai': 2.0.16(zod@3.25.76) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/cohere@2.0.4(zod@3.25.32)': + '@ai-sdk/cohere@2.0.4(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/deepinfra@1.0.10(zod@3.25.32)': + '@ai-sdk/deepinfra@1.0.10(zod@3.25.76)': dependencies: - '@ai-sdk/openai-compatible': 1.0.10(zod@3.25.32) + '@ai-sdk/openai-compatible': 1.0.10(zod@3.25.76) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/gateway@1.0.8(zod@3.25.32)': + '@ai-sdk/gateway@1.0.8(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/mistral@2.0.7(zod@3.25.32)': + '@ai-sdk/mistral@2.0.7(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/openai-compatible@1.0.10(zod@3.25.32)': + '@ai-sdk/openai-compatible@1.0.10(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/openai@2.0.16(zod@3.25.32)': + '@ai-sdk/openai@2.0.16(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - zod: 3.25.32 + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.4(zod@3.25.32)': + '@ai-sdk/provider-utils@3.0.4(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.0.0 eventsource-parser: 3.0.5 - zod: 3.25.32 - zod-to-json-schema: 3.24.5(zod@3.25.32) + zod: 3.25.76 + zod-to-json-schema: 3.24.5(zod@3.25.76) '@ai-sdk/provider@2.0.0': dependencies: @@ -8671,13 +8618,13 @@ snapshots: '@balena/dockerignore@1.0.2': {} - '@better-auth/cli@1.4.18(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-call@1.1.8(zod@3.25.32))(drizzle-kit@0.31.8)(gel@2.1.0)(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1))': + '@better-auth/cli@1.4.18(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-call@1.1.8(zod@3.25.76))(drizzle-kit@0.31.8)(gel@2.1.0)(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.6 '@babel/preset-react': 7.28.5(@babel/core@7.28.6) '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6) - '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) - '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)) + '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) + '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)) '@better-auth/utils': 0.3.0 '@clack/prompts': 0.11.0 '@mrleebo/prisma-ast': 0.13.1 @@ -8743,12 +8690,12 @@ snapshots: - vitest - vue - '@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)': + '@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)': dependencies: '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@standard-schema/spec': 1.0.0 - better-call: 1.1.8(zod@3.25.32) + better-call: 1.1.8(zod@3.25.76) jose: 6.1.3 kysely: 0.28.7 nanostores: 1.1.0 @@ -8774,9 +8721,9 @@ snapshots: samlify: 2.10.2 zod: 4.3.6 - '@better-auth/telemetry@1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0))': + '@better-auth/telemetry@1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0))': dependencies: - '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) + '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 @@ -8924,7 +8871,7 @@ snapshots: style-mod: 4.1.2 w3c-keyname: 2.2.8 - '@dokploy/trpc-openapi@0.0.4(@trpc/server@10.45.2)(@types/node@20.17.51)(zod@3.25.32)': + '@dokploy/trpc-openapi@0.0.4(@trpc/server@10.45.2)(@types/node@20.17.51)(zod@3.25.76)': dependencies: '@trpc/server': 10.45.2 co-body: 6.2.0 @@ -8932,8 +8879,8 @@ snapshots: lodash.clonedeep: 4.5.0 node-mocks-http: 1.17.2(@types/node@20.17.51) openapi-types: 12.1.3 - zod: 3.25.32 - zod-to-json-schema: 3.24.5(zod@3.25.32) + zod: 3.25.76 + zod-to-json-schema: 3.24.5(zod@3.25.76) transitivePeerDependencies: - '@types/express' - '@types/node' @@ -9358,10 +9305,10 @@ snapshots: dependencies: hono: 4.11.7 - '@hono/zod-validator@0.3.0(hono@4.11.7)(zod@3.25.32)': + '@hono/zod-validator@0.3.0(hono@4.11.7)(zod@3.25.76)': dependencies: hono: 4.11.7 - zod: 3.25.32 + zod: 3.25.76 '@hookform/resolvers@3.10.0(react-hook-form@7.56.4(react@18.2.0))': dependencies: @@ -12116,11 +12063,6 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/hoist-non-react-statics@3.3.6': - dependencies: - '@types/react': 18.3.5 - hoist-non-react-statics: 3.3.2 - '@types/http-cache-semantics@4.0.4': {} '@types/js-cookie@3.0.6': {} @@ -12378,22 +12320,22 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ai-sdk-ollama@0.5.1(zod@3.25.32): + ai-sdk-ollama@0.5.1(zod@3.25.76): dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) - ai: 5.0.17(zod@3.25.32) + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) + ai: 5.0.17(zod@3.25.76) ollama: 0.5.17 transitivePeerDependencies: - zod - ai@5.0.17(zod@3.25.32): + ai@5.0.17(zod@3.25.76): dependencies: - '@ai-sdk/gateway': 1.0.8(zod@3.25.32) + '@ai-sdk/gateway': 1.0.8(zod@3.25.76) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.4(zod@3.25.32) + '@ai-sdk/provider-utils': 3.0.4(zod@3.25.76) '@opentelemetry/api': 1.9.0 - zod: 3.25.32 + zod: 3.25.76 ansi-align@3.0.1: dependencies: @@ -12459,14 +12401,14 @@ snapshots: dependencies: tslib: 2.8.1 - autoprefixer@10.4.12(postcss@8.5.3): + autoprefixer@10.4.12(postcss@8.5.6): dependencies: browserslist: 4.24.5 caniuse-lite: 1.0.30001718 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -12505,8 +12447,34 @@ snapshots: better-auth@1.4.18(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.6.2)(drizzle-kit@0.31.8)(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(pg@8.17.2)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)): dependencies: - '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) - '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)) + '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) + '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)) + '@better-auth/utils': 0.3.0 + '@better-fetch/fetch': 1.1.21 + '@noble/ciphers': 2.1.1 + '@noble/hashes': 2.0.1 + better-call: 1.1.8(zod@3.25.76) + defu: 6.1.4 + jose: 6.1.3 + kysely: 0.28.7 + nanostores: 1.1.0 + zod: 4.3.6 + optionalDependencies: + '@prisma/client': 5.22.0(prisma@5.22.0) + better-sqlite3: 12.6.2 + drizzle-kit: 0.31.8 + drizzle-orm: 0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0) + next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + pg: 8.17.2 + prisma: 5.22.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1) + + better-auth@1.4.18(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.6.2)(drizzle-kit@0.31.8)(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(pg@8.17.2)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)): + dependencies: + '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) + '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 @@ -12529,40 +12497,14 @@ snapshots: react-dom: 18.2.0(react@18.2.0) vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1) - better-auth@1.4.18(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.6.2)(drizzle-kit@0.31.8)(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(pg@8.17.2)(prisma@5.22.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)): - dependencies: - '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0) - '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@3.25.32))(jose@6.1.3)(kysely@0.28.7)(nanostores@1.1.0)) - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 - '@noble/ciphers': 2.1.1 - '@noble/hashes': 2.0.1 - better-call: 1.1.8(zod@3.25.32) - defu: 6.1.4 - jose: 6.1.3 - kysely: 0.28.7 - nanostores: 1.1.0 - zod: 4.3.6 - optionalDependencies: - '@prisma/client': 5.22.0(prisma@5.22.0) - better-sqlite3: 12.6.2 - drizzle-kit: 0.31.8 - drizzle-orm: 0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0) - next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - pg: 8.17.2 - prisma: 5.22.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.17.51)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1) - - better-call@1.1.8(zod@3.25.32): + better-call@1.1.8(zod@3.25.76): dependencies: '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 rou3: 0.7.12 set-cookie-parser: 2.7.1 optionalDependencies: - zod: 3.25.32 + zod: 3.25.76 better-call@1.1.8(zod@4.3.6): dependencies: @@ -12915,8 +12857,6 @@ snapshots: core-js-pure@3.42.0: {} - core-js@3.42.0: {} - cpu-features@0.0.10: dependencies: buildcheck: 0.0.6 @@ -13163,10 +13103,10 @@ snapshots: postgres: 3.4.4 prisma: 5.22.0 - drizzle-zod@0.5.1(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(zod@3.25.32): + drizzle-zod@0.5.1(drizzle-orm@0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0))(zod@3.25.76): dependencies: drizzle-orm: 0.41.0(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(gel@2.1.0)(kysely@0.28.7)(pg@8.17.2)(postgres@3.4.4)(prisma@5.22.0) - zod: 3.25.32 + zod: 3.25.76 dunder-proto@1.0.1: dependencies: @@ -13731,10 +13671,6 @@ snapshots: hono@4.11.7: {} - html-parse-stringify@3.0.1: - dependencies: - void-elements: 3.1.0 - html-to-text@9.0.5: dependencies: '@selderee/plugin-htmlparser2': 0.11.0 @@ -13787,12 +13723,6 @@ snapshots: hyphenate-style-name@1.1.0: {} - i18next-fs-backend@2.6.0: {} - - i18next@23.16.8: - dependencies: - '@babel/runtime': 7.27.3 - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -14619,18 +14549,6 @@ snapshots: neotraverse@0.6.18: {} - next-i18next@15.4.2(i18next@23.16.8)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-i18next@15.5.2(i18next@23.16.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3))(react@18.2.0): - dependencies: - '@babel/runtime': 7.27.3 - '@types/hoist-non-react-statics': 3.3.6 - core-js: 3.42.0 - hoist-non-react-statics: 3.3.2 - i18next: 23.16.8 - i18next-fs-backend: 2.6.0 - next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react: 18.2.0 - react-i18next: 15.5.2(i18next@23.16.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - next-themes@0.2.1(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -15240,16 +15158,6 @@ snapshots: dependencies: react: 18.2.0 - react-i18next@15.5.2(i18next@23.16.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3): - dependencies: - '@babel/runtime': 7.27.3 - html-parse-stringify: 3.0.1 - i18next: 23.16.8 - react: 18.2.0 - optionalDependencies: - react-dom: 18.2.0(react@18.2.0) - typescript: 5.8.3 - react-immutable-proptypes@2.2.0(immutable@3.8.2): dependencies: immutable: 3.8.2 @@ -16338,8 +16246,6 @@ snapshots: - tsx - yaml - void-elements@3.1.0: {} - w3c-keyname@2.2.8: {} web-streams-polyfill@3.3.3: {} @@ -16499,18 +16405,18 @@ snapshots: zenscroll@4.0.2: {} - zod-form-data@2.0.7(zod@3.25.32): + zod-form-data@2.0.7(zod@3.25.76): dependencies: '@rvf/set-get': 7.0.1 - zod: 3.25.32 + zod: 3.25.76 - zod-to-json-schema@3.24.5(zod@3.25.32): + zod-to-json-schema@3.24.5(zod@3.25.76): dependencies: - zod: 3.25.32 + zod: 3.25.76 zod@3.22.5: {} - zod@3.25.32: {} + zod@3.25.76: {} zod@4.3.6: {} From 53ae08cec4a4164db3f922108c24fb5e76c3692c Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 08:10:23 +0000 Subject: [PATCH 064/206] [autofix.ci] apply automated fixes --- .../settings/profile/profile-form.tsx | 13 +++------- .../servers/actions/show-dokploy-actions.tsx | 4 +--- .../servers/actions/show-storage-actions.tsx | 24 +++++-------------- .../servers/actions/show-traefik-actions.tsx | 4 +--- .../settings/servers/handle-servers.tsx | 1 - .../dashboard/settings/web-domain.tsx | 12 +++------- .../dashboard/settings/web-server.tsx | 4 +--- .../web-server/local-server-config.tsx | 4 +--- 8 files changed, 16 insertions(+), 50 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx b/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx index 6a8381279..8540835c8 100644 --- a/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx +++ b/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx @@ -213,10 +213,7 @@ export const ProfileForm = () => { Email - + @@ -245,9 +242,7 @@ export const ProfileForm = () => { name="password" render={({ field }) => ( - - Password - + Password { name="image" render={({ field }) => ( - - Avatar - + Avatar { diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx index 59e1684d7..b4a9ff946 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx @@ -32,9 +32,7 @@ export const ShowDokployActions = () => { - - Actions - + Actions { - - Actions - + Actions { }); }} > - - Clean unused images - + Clean unused images { }); }} > - - Clean unused volumes - + Clean unused volumes { }); }} > - - Clean stopped containers - + Clean stopped containers { }); }} > - - Clean Docker Builder & System - + Clean Docker Builder & System {!serverId && ( { }); }} > - - Clean Monitoring - + Clean Monitoring )} diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx index a169bcde9..11c3c19c8 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx @@ -77,9 +77,7 @@ export const ShowTraefikActions = ({ serverId }: Props) => { - - Actions - + Actions { - const utils = api.useUtils(); const [isOpen, setIsOpen] = useState(false); const { data: canCreateMoreServers, refetch } = diff --git a/apps/dokploy/components/dashboard/settings/web-domain.tsx b/apps/dokploy/components/dashboard/settings/web-domain.tsx index 159d950d4..191b5f147 100644 --- a/apps/dokploy/components/dashboard/settings/web-domain.tsx +++ b/apps/dokploy/components/dashboard/settings/web-domain.tsx @@ -149,9 +149,7 @@ export const WebDomain = () => { render={({ field }) => { return ( - - Domain - + Domain { render={({ field }) => { return ( - - Let's Encrypt Email - + Let's Encrypt Email { render={({ field }) => { return ( - - Certificate Provider - + Certificate Provider diff --git a/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx b/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx index 59dfca9ee..9d29c1937 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx @@ -175,9 +175,7 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => { render={({ field }) => ( - {t( - "settings.server.webServer.traefik.targetPort", - )} + Target Port { render={({ field }) => ( - {t( - "settings.server.webServer.traefik.publishedPort", - )} + Published Port Date: Mon, 16 Feb 2026 08:16:18 +0000 Subject: [PATCH 066/206] [autofix.ci] apply automated fixes --- apps/dokploy/components/dashboard/settings/web-domain.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/web-domain.tsx b/apps/dokploy/components/dashboard/settings/web-domain.tsx index 98791e196..f593d2b10 100644 --- a/apps/dokploy/components/dashboard/settings/web-domain.tsx +++ b/apps/dokploy/components/dashboard/settings/web-domain.tsx @@ -217,15 +217,11 @@ export const WebDomain = () => { > - + - - None - + None Let's Encrypt From 4fd06b00a0e05a11d6bc2d03b3a1ea1447c9454c Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 16 Feb 2026 02:23:35 -0600 Subject: [PATCH 067/206] chore(dokploy): simplify build-next command in package.json - Removed the unnecessary --webpack flag from the build-next script, streamlining the build process. --- apps/dokploy/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index 1dbd0a3bc..a7e5c324a 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -8,7 +8,7 @@ "build": "npm run build-server && npm run build-next", "start": "node -r dotenv/config dist/migration.mjs && node -r dotenv/config dist/server.mjs", "build-server": "tsx esbuild.config.ts", - "build-next": "next build --webpack", + "build-next": "next build", "setup": "tsx -r dotenv/config setup.ts && sleep 5 && pnpm run migration:run", "wait-for-postgres": "node -r dotenv/config dist/wait-for-postgres.mjs", "wait-for-postgres-dev": "tsx -r dotenv/config wait-for-postgres.ts", From c04dd63db8d618cc487ebc57a8e23dabe9e93a39 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 16 Feb 2026 12:50:34 -0600 Subject: [PATCH 068/206] chore(dependencies): update ai-sdk packages and other dependencies - Upgraded @ai-sdk dependencies to versions 3.0.44, 3.0.30, 3.0.21, 2.0.34, 3.0.20, and 3.0.29 in package.json files for both server and dokploy. - Updated ai package to version 6.0.86 and ai-sdk-ollama to version 3.7.0. - Updated swagger-ui-react to version 5.31.1. - Added a new DEBUG-BUILD.md file for debugging build issues in the server package. - Introduced tsconfig.server.no-decl.json to manage TypeScript compilation options without declaration files. - Modified tsconfig.json to include .next directory for TypeScript compilation. --- apps/dokploy/package.json | 20 +- packages/server/DEBUG-BUILD.md | 27 + packages/server/package.json | 24 +- packages/server/src/services/ai.ts | 334 +- packages/server/tsconfig.json | 1 + packages/server/tsconfig.server.no-decl.json | 7 + pnpm-lock.yaml | 4389 +++++++++--------- 7 files changed, 2517 insertions(+), 2285 deletions(-) create mode 100644 packages/server/DEBUG-BUILD.md create mode 100644 packages/server/tsconfig.server.no-decl.json diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index a7e5c324a..45a50563b 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -41,13 +41,13 @@ "dependencies": { "resend": "^6.0.2", "@better-auth/sso": "1.4.18", - "@ai-sdk/anthropic": "^2.0.5", - "@ai-sdk/azure": "^2.0.16", - "@ai-sdk/cohere": "^2.0.4", - "@ai-sdk/deepinfra": "^1.0.10", - "@ai-sdk/mistral": "^2.0.7", - "@ai-sdk/openai": "^2.0.16", - "@ai-sdk/openai-compatible": "^1.0.10", + "@ai-sdk/anthropic": "^3.0.44", + "@ai-sdk/azure": "^3.0.30", + "@ai-sdk/cohere": "^3.0.21", + "@ai-sdk/deepinfra": "^2.0.34", + "@ai-sdk/mistral": "^3.0.20", + "@ai-sdk/openai": "^3.0.29", + "@ai-sdk/openai-compatible": "^2.0.30", "@codemirror/autocomplete": "^6.18.6", "@codemirror/lang-json": "^6.0.1", "@codemirror/lang-yaml": "^6.1.2", @@ -95,8 +95,8 @@ "@xterm/addon-clipboard": "0.1.0", "@xterm/xterm": "^5.5.0", "adm-zip": "^0.5.16", - "ai": "^5.0.17", - "ai-sdk-ollama": "^0.5.1", + "ai": "^6.0.86", + "ai-sdk-ollama": "^3.7.0", "bcrypt": "5.1.1", "better-auth": "1.4.18", "bl": "6.0.11", @@ -144,7 +144,7 @@ "ssh2": "1.15.0", "stripe": "17.2.0", "superjson": "^2.2.2", - "swagger-ui-react": "^5.22.0", + "swagger-ui-react": "^5.31.1", "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7", "toml": "3.0.0", diff --git a/packages/server/DEBUG-BUILD.md b/packages/server/DEBUG-BUILD.md new file mode 100644 index 000000000..f092645a7 --- /dev/null +++ b/packages/server/DEBUG-BUILD.md @@ -0,0 +1,27 @@ +# Debug build OOM – orden para probar + +Ejecuta desde `packages/server` (o `pnpm --filter=@dokploy/server run