From 69d3286aafa4d9cff6bba234d7dacd2b3b2c0a4b Mon Sep 17 00:00:00 2001 From: Yandi Date: Sun, 22 Feb 2026 20:07:31 +0700 Subject: [PATCH 01/25] fix: replace index-only keys with stable composite keys in mapped lists --- .../application/deployments/show-deployment.tsx | 12 ++++++++++-- .../general/generic/save-github-provider.tsx | 2 +- .../general/generic/save-gitlab-provider.tsx | 2 +- .../dashboard/docker/logs/docker-logs-id.tsx | 2 +- .../dashboard/settings/profile/configure-2fa.tsx | 2 +- .../dashboard/settings/profile/enable-2fa.tsx | 2 +- .../servers/welcome-stripe/welcome-suscription.tsx | 4 ++-- apps/dokploy/components/shared/drawer-logs.tsx | 6 +++++- 8 files changed, 22 insertions(+), 10 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx index 0d403ecd2..4285f04c4 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx @@ -194,13 +194,21 @@ export const ShowDeployment = ({ {" "} {filteredLogs.length > 0 ? ( filteredLogs.map((log: LogLine, index: number) => ( - + )) ) : ( <> {optionalErrors.length > 0 ? ( optionalErrors.map((log: LogLine, index: number) => ( - + )) ) : (
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 1fa42b9c0..00df2d63b 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 @@ -459,7 +459,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => {
{field.value?.map((path, index) => ( 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 f5ba24e4c..779919b46 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 @@ -448,7 +448,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => {
{field.value?.map((path, index) => ( diff --git a/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx b/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx index bf0173956..59b939008 100644 --- a/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx +++ b/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx @@ -402,7 +402,7 @@ export const DockerLogsId: React.FC = ({ {filteredLogs.length > 0 ? ( filteredLogs.map((filteredLog: LogLine, index: number) => ( {
{backupCodes.map((code, index) => ( {code} diff --git a/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx b/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx index 656b27401..541869aae 100644 --- a/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx +++ b/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx @@ -401,7 +401,7 @@ export const Enable2FA = () => {
{backupCodes.map((code, index) => ( {code} diff --git a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/welcome-suscription.tsx b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/welcome-suscription.tsx index 3c1004143..004f79f74 100644 --- a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/welcome-suscription.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/welcome-suscription.tsx @@ -307,9 +307,9 @@ export const WelcomeSuscription = () => {
- {features.map((feature, index) => ( + {features.map((feature) => (
{feature.icon}
diff --git a/apps/dokploy/components/shared/drawer-logs.tsx b/apps/dokploy/components/shared/drawer-logs.tsx index bc383cb19..38f8b5db4 100644 --- a/apps/dokploy/components/shared/drawer-logs.tsx +++ b/apps/dokploy/components/shared/drawer-logs.tsx @@ -60,7 +60,11 @@ export const DrawerLogs = ({ isOpen, onClose, filteredLogs }: Props) => { {" "} {filteredLogs.length > 0 ? ( filteredLogs.map((log: LogLine, index: number) => ( - + )) ) : (
From 29fc8bfa97cd2a549a5e16b9b53fadbc8fcbe7e6 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Fri, 27 Feb 2026 00:11:00 -0600 Subject: [PATCH 02/25] fix: update documentation links for server setup and SSH key creation components --- .../settings/servers/setup-server.tsx | 2 +- .../servers/welcome-stripe/create-ssh-key.tsx | 2 +- .../components/layouts/dashboard-layout.tsx | 19 +++++++++---------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx b/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx index 13ff2d6e4..e4af05376 100644 --- a/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx @@ -190,7 +190,7 @@ export const SetupServer = ({ serverId, asButton = false }: Props) => { Automatic process diff --git a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx index a0312562e..5924bba50 100644 --- a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx @@ -172,7 +172,7 @@ export const CreateSSHKey = () => { etc.)

diff --git a/apps/dokploy/components/layouts/dashboard-layout.tsx b/apps/dokploy/components/layouts/dashboard-layout.tsx index 727649922..222f69b9e 100644 --- a/apps/dokploy/components/layouts/dashboard-layout.tsx +++ b/apps/dokploy/components/layouts/dashboard-layout.tsx @@ -11,20 +11,19 @@ interface Props { export const DashboardLayout = ({ children }: Props) => { const { data: haveRootAccess } = api.user.haveRootAccess.useQuery(); const { data: isCloud } = api.settings.isCloud.useQuery(); - const { data: isUserSubscribed } = api.settings.isUserSubscribed.useQuery( - undefined, - { - enabled: isCloud === true, - refetchOnWindowFocus: false, - refetchOnMount: false, - refetchOnReconnect: false, - }, - ); + const { data: currentPlan } = api.stripe.getCurrentPlan.useQuery(undefined, { + enabled: isCloud === true, + refetchOnWindowFocus: false, + refetchOnMount: false, + refetchOnReconnect: false, + }); + + const isChatEnabled = isCloud === true && currentPlan === "startup"; return ( <> {children} - {isCloud === true && isUserSubscribed === true && ( + {isChatEnabled && ( <> From 55c04b1323e7fb36901df49a70a2e766731400f9 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Fri, 27 Feb 2026 00:20:20 -0600 Subject: [PATCH 03/25] feat: add current billing plan retrieval and enhance SSH error messages with user-friendly guidance --- apps/dokploy/server/api/routers/stripe.ts | 44 ++++++++++++++++++- packages/server/src/setup/server-setup.ts | 38 +++++++++++++--- .../server/src/utils/process/execAsync.ts | 29 +++++++++--- 3 files changed, 98 insertions(+), 13 deletions(-) diff --git a/apps/dokploy/server/api/routers/stripe.ts b/apps/dokploy/server/api/routers/stripe.ts index c910b1d58..109f2aac3 100644 --- a/apps/dokploy/server/api/routers/stripe.ts +++ b/apps/dokploy/server/api/routers/stripe.ts @@ -21,9 +21,51 @@ import { STARTUP_PRODUCT_ID, WEBSITE_URL, } from "@/server/utils/stripe"; -import { adminProcedure, createTRPCRouter } from "../trpc"; +import { adminProcedure, createTRPCRouter, protectedProcedure } from "../trpc"; export const stripeRouter = createTRPCRouter({ + /** Returns the current billing plan for the user's organization. Used to gate features like chat (Startup only). */ + getCurrentPlan: protectedProcedure.query(async ({ ctx }) => { + if (!IS_CLOUD) return null; + const owner = await findUserById(ctx.user.ownerId); + if (!owner?.stripeCustomerId) return null; + + const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { + apiVersion: "2024-09-30.acacia", + }); + const subscriptions = await stripe.subscriptions.list({ + customer: owner.stripeCustomerId, + status: "active", + expand: ["data.items.data.price"], + }); + const activeSub = subscriptions.data[0]; + if (!activeSub) return null; + + const priceIds = activeSub.items.data.map( + (item) => (item.price as Stripe.Price).id, + ); + if ( + priceIds.some( + (id) => + id === STARTUP_BASE_PRICE_MONTHLY_ID || + id === STARTUP_BASE_PRICE_ANNUAL_ID, + ) + ) { + return "startup" as const; + } + if ( + priceIds.some( + (id) => id === HOBBY_PRICE_MONTHLY_ID || id === HOBBY_PRICE_ANNUAL_ID, + ) + ) { + return "hobby" as const; + } + if (priceIds.some((id) => LEGACY_PRICE_IDS.includes(id))) { + return "legacy" as const; + } + return null; + }), + getProducts: adminProcedure.query(async ({ ctx }) => { const user = await findUserById(ctx.user.ownerId); const stripeCustomerId = user.stripeCustomerId; diff --git a/packages/server/src/setup/server-setup.ts b/packages/server/src/setup/server-setup.ts index 32e5e4a7e..c15856dc3 100644 --- a/packages/server/src/setup/server-setup.ts +++ b/packages/server/src/setup/server-setup.ts @@ -281,17 +281,43 @@ const installRequirements = async ( .on("error", (err) => { client.end(); if (err.level === "client-authentication") { - onData?.( - `Authentication failed: Invalid SSH private key. ❌ Error: ${err.message} ${err.level}`, - ); + const technicalDetail = `Error: ${err.message} ${err.level}`; + const friendlyMessage = [ + "", + "❌ Couldn't connect to your server — the SSH key was not accepted.", + "", + "This usually means the key doesn't match what's on the server, or the key format is invalid.", + "", + `Technical details: ${technicalDetail}`, + "", + "💡 Hints:", + " • Check that the SSH key you added in Dokploy is the same one installed on the server (e.g. in ~/.ssh/authorized_keys).", + " • Try generating a new SSH key in Dokploy and add only the public key to the server, then try again.", + " • Make sure to follow the instructions on the Setup Server Button on the SSH Keys tab", + ].join("\n"); + onData?.(friendlyMessage); reject( new Error( - `Authentication failed: Invalid SSH private key. ❌ Error: ${err.message} ${err.level}`, + `Authentication failed: Invalid SSH private key. ${technicalDetail}`, ), ); } else { - onData?.(`SSH connection error: ${err.message} ${err.level}`); - reject(new Error(`SSH connection error: ${err.message}`)); + const technicalDetail = `${err.message} ${err.level ?? ""}`.trim(); + const friendlyMessage = [ + "", + "❌ Couldn't connect to your server.", + "", + "The connection failed before setup could run. Common causes: wrong IP or port, firewall blocking access, or the server is offline.", + "", + `Technical details: ${technicalDetail}`, + "", + "💡 Hints:", + " • Check that the server IP address and SSH port are correct and the server is powered on.", + " • If the server is in a private network, ensure Dokploy can reach it (VPN, firewall rules, or correct security groups).", + " • Make sure the SSH port (usually 22) is open and the SSH service is running on the server.", + ].join("\n"); + onData?.(friendlyMessage); + reject(new Error(`SSH connection error: ${technicalDetail}`)); } }) .connect({ diff --git a/packages/server/src/utils/process/execAsync.ts b/packages/server/src/utils/process/execAsync.ts index cd0249000..d44e3ccaf 100644 --- a/packages/server/src/utils/process/execAsync.ts +++ b/packages/server/src/utils/process/execAsync.ts @@ -201,14 +201,31 @@ export const execAsyncRemote = async ( .on("error", (err) => { conn.end(); if (err.level === "client-authentication") { + const technicalDetail = `Error: ${err.message} ${err.level}`; + const friendlyMessage = [ + "", + "❌ Couldn't connect to your server — the SSH key was not accepted.", + "", + "This usually means the key doesn't match what's on the server, or the key format is invalid.", + "", + `Technical details: ${technicalDetail}`, + "", + "💡 Hints:", + " • Check that the SSH key you added in Dokploy is the same one installed on the server (e.g. in ~/.ssh/authorized_keys).", + " • Try generating a new SSH key in Dokploy and add only the public key to the server, then try again.", + " • Make sure to follow the instructions on the Setup Server Button on the SSH Keys tab and then click on deployments tab and check the logs for more details.", + ].join("\n"); const errorMsg = `Authentication failed: Invalid SSH private key. ❌ Error: ${err.message} ${err.level}`; - onData?.(errorMsg); + onData?.(friendlyMessage); reject( - new ExecError(errorMsg, { - command, - serverId, - originalError: err, - }), + new ExecError( + `Authentication failed: Invalid SSH private key. ${friendlyMessage}`, + { + command, + serverId, + originalError: err, + }, + ), ); } else { const errorMsg = `SSH connection error: ${err.message}`; From 7e6e8153752eb929d315c667b78f0d3b3afc5840 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Fri, 27 Feb 2026 13:54:58 -0600 Subject: [PATCH 04/25] chore: update @dokploy/trpc-openapi to version 0.0.17 and adjust OpenAPI document URL in settings router --- apps/dokploy/package.json | 2 +- apps/dokploy/server/api/routers/settings.ts | 4 ++-- pnpm-lock.yaml | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index 9165d09b6..f735810fc 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -55,7 +55,7 @@ "@codemirror/legacy-modes": "6.4.0", "@codemirror/view": "6.29.0", "@dokploy/server": "workspace:*", - "@dokploy/trpc-openapi": "0.0.16", + "@dokploy/trpc-openapi": "0.0.17", "@faker-js/faker": "^8.4.1", "@hookform/resolvers": "^5.2.2", "@octokit/auth-app": "^6.1.3", diff --git a/apps/dokploy/server/api/routers/settings.ts b/apps/dokploy/server/api/routers/settings.ts index a3cc97e6b..fee7f2f5d 100644 --- a/apps/dokploy/server/api/routers/settings.ts +++ b/apps/dokploy/server/api/routers/settings.ts @@ -530,12 +530,12 @@ export const settingsRouter = createTRPCRouter({ getOpenApiDocument: protectedProcedure.query( async ({ ctx }): Promise => { const protocol = ctx.req.headers["x-forwarded-proto"]; - const url = `${protocol}://${ctx.req.headers.host}/api/trpc`; + const url = `${protocol}://${ctx.req.headers.host}/api`; const openApiDocument = generateOpenApiDocument(appRouter, { title: "tRPC OpenAPI", version: packageInfo.version, baseUrl: url, - docsUrl: `${url}/trpc/settings.getOpenApiDocument`, + docsUrl: `${url}/settings.getOpenApiDocument`, tags: [ "admin", "docker", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e8369280..efd3780e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,8 +138,8 @@ importers: specifier: workspace:* version: link:../../packages/server '@dokploy/trpc-openapi': - specifier: 0.0.16 - version: 0.0.16(@trpc/server@11.10.0(typescript@5.9.3))(zod-openapi@5.4.6(zod@4.3.6))(zod@4.3.6) + specifier: 0.0.17 + version: 0.0.17(@trpc/server@11.10.0(typescript@5.9.3))(zod-openapi@5.4.6(zod@4.3.6))(zod@4.3.6) '@faker-js/faker': specifier: ^8.4.1 version: 8.4.1 @@ -1291,8 +1291,8 @@ packages: '@codemirror/view@6.39.15': resolution: {integrity: sha512-aCWjgweIIXLBHh7bY6cACvXuyrZ0xGafjQ2VInjp4RM4gMfscK5uESiNdrH0pE+e1lZr2B4ONGsjchl2KsKZzg==} - '@dokploy/trpc-openapi@0.0.16': - resolution: {integrity: sha512-95pukFwMkSKLfnUB21OnYVwmR832NVD6ewI65ZgpxYxTrmdVGCUzvphqs85fiq4UKV3qcuUSq3nn47d3Sh09zg==} + '@dokploy/trpc-openapi@0.0.17': + resolution: {integrity: sha512-pXWbqx2W0MoWav/wehEqcXzORLgn7PhnmLsZza1v6+lOSo0Vwuu47PrITbRYKQ2zZcR1nTL18TrgPuMzXK23Iw==} peerDependencies: '@trpc/server': ^11.1.0 zod: ^4.3.6 @@ -8867,7 +8867,7 @@ snapshots: style-mod: 4.1.3 w3c-keyname: 2.2.8 - '@dokploy/trpc-openapi@0.0.16(@trpc/server@11.10.0(typescript@5.9.3))(zod-openapi@5.4.6(zod@4.3.6))(zod@4.3.6)': + '@dokploy/trpc-openapi@0.0.17(@trpc/server@11.10.0(typescript@5.9.3))(zod-openapi@5.4.6(zod@4.3.6))(zod@4.3.6)': dependencies: '@trpc/server': 11.10.0(typescript@5.9.3) co-body: 6.2.0 From d33e16487674e128402f02d9c2da718509c83703 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Fri, 27 Feb 2026 13:55:18 -0600 Subject: [PATCH 05/25] chore: bump version to v0.28.1 in package.json --- 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 f735810fc..75952aad6 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -1,6 +1,6 @@ { "name": "dokploy", - "version": "v0.28.0", + "version": "v0.28.1", "private": true, "license": "Apache-2.0", "type": "module", From 81ee8f653ad37eabaa1a0de4132d6914a5016519 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Fri, 27 Feb 2026 14:00:35 -0600 Subject: [PATCH 06/25] feat: add state management for dialog visibility in MariaDB, MySQL, and Redis update components --- .../dokploy/components/dashboard/mariadb/update-mariadb.tsx | 6 ++++-- apps/dokploy/components/dashboard/mysql/update-mysql.tsx | 6 ++++-- apps/dokploy/components/dashboard/redis/update-redis.tsx | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx index e2ef904a4..edf1294a0 100644 --- a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx @@ -1,6 +1,6 @@ import { standardSchemaResolver as zodResolver } from "@hookform/resolvers/standard-schema"; import { PenBoxIcon } from "lucide-react"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; @@ -41,6 +41,7 @@ interface Props { } export const UpdateMariadb = ({ mariadbId }: Props) => { + const [isOpen, setIsOpen] = useState(false); const utils = api.useUtils(); const { mutateAsync, error, isError, isPending } = api.mariadb.update.useMutation(); @@ -79,6 +80,7 @@ export const UpdateMariadb = ({ mariadbId }: Props) => { utils.mariadb.one.invalidate({ mariadbId: mariadbId, }); + setIsOpen(false); }) .catch(() => { toast.error("Error updating the Mariadb"); @@ -87,7 +89,7 @@ export const UpdateMariadb = ({ mariadbId }: Props) => { }; return ( - + - - e.stopPropagation()} - > - {project.environments.some( - (env) => env.applications.length > 0, - ) && ( - - - Applications - - {project.environments.map((env) => - env.applications.map((app) => ( -
- - - - {app.name} - - - - {app.domains.map((domain) => ( - - - - {domain.host} - - - - - ))} - -
- )), - )} -
- )} - {project.environments.some( - (env) => env.compose.length > 0, - ) && ( - - - Compose - - {project.environments.map((env) => - env.compose.map((comp) => ( -
- - - - {comp.name} - - - - {comp.domains.map((domain) => ( - - - - {domain.host} - - - - - ))} - -
- )), - )} -
- )} -
- - ) : null} diff --git a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx index eb3ca3f7a..d0a2a26fa 100644 --- a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx +++ b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx @@ -33,7 +33,6 @@ type ProjectForPermissions = RouterOutputs["project"]["allForPermissions"][number]; type EnvironmentForPermissions = ProjectForPermissions["environments"][number]; -type Project = ProjectForPermissions; type Environment = EnvironmentForPermissions; export type Services = { diff --git a/apps/dokploy/server/api/routers/project.ts b/apps/dokploy/server/api/routers/project.ts index 395530c43..b026b6d2c 100644 --- a/apps/dokploy/server/api/routers/project.ts +++ b/apps/dokploy/server/api/routers/project.ts @@ -284,11 +284,10 @@ export const projectRouter = createTRPCRouter({ environments: { with: { applications: { - with: { - domains: true, - }, columns: { applicationId: true, + name: true, + applicationStatus: true, }, }, mariadb: { @@ -317,11 +316,10 @@ export const projectRouter = createTRPCRouter({ }, }, compose: { - with: { - domains: true, - }, columns: { composeId: true, + name: true, + composeStatus: true, }, }, }, From cc3b902d1e359e8746285ead0f48f9bd7734003a Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 1 Mar 2026 14:20:08 -0600 Subject: [PATCH 25/25] feat: include project name in API response columns Added the 'name' column to the project API response structure to enhance the data returned for project queries. This change improves the clarity and usability of the API by ensuring that project names are included in the response, facilitating better data handling for clients. --- apps/dokploy/server/api/routers/project.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/server/api/routers/project.ts b/apps/dokploy/server/api/routers/project.ts index b026b6d2c..e270ee4b4 100644 --- a/apps/dokploy/server/api/routers/project.ts +++ b/apps/dokploy/server/api/routers/project.ts @@ -223,27 +223,34 @@ export const projectRouter = createTRPCRouter({ applications.applicationId, accessedServices, ), - with: { domains: true }, columns: { applicationId: true, + name: true, + applicationStatus: true, }, }, mariadb: { where: buildServiceFilter(mariadb.mariadbId, accessedServices), columns: { mariadbId: true, + name: true, + applicationStatus: true, }, }, mongo: { where: buildServiceFilter(mongo.mongoId, accessedServices), columns: { mongoId: true, + name: true, + applicationStatus: true, }, }, mysql: { where: buildServiceFilter(mysql.mysqlId, accessedServices), columns: { mysqlId: true, + name: true, + applicationStatus: true, }, }, postgres: { @@ -253,25 +260,31 @@ export const projectRouter = createTRPCRouter({ ), columns: { postgresId: true, + name: true, + applicationStatus: true, }, }, redis: { where: buildServiceFilter(redis.redisId, accessedServices), columns: { redisId: true, + name: true, + applicationStatus: true, }, }, compose: { where: buildServiceFilter(compose.composeId, accessedServices), - with: { domains: true }, columns: { composeId: true, + name: true, + composeStatus: true, }, }, }, columns: { environmentId: true, isDefault: true, + name: true, }, }, }, @@ -324,6 +337,7 @@ export const projectRouter = createTRPCRouter({ }, }, columns: { + name: true, environmentId: true, isDefault: true, },