diff --git a/Dockerfile b/Dockerfile index c41df8c73..4d18a99ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ # syntax=docker/dockerfile:1 -FROM node:20.9-slim AS base +FROM node:20.16.0-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable +RUN corepack prepare pnpm@9.12.0 --activate FROM base AS build COPY . /usr/src/app diff --git a/Dockerfile.cloud b/Dockerfile.cloud index c234259dc..8e4bac215 100644 --- a/Dockerfile.cloud +++ b/Dockerfile.cloud @@ -1,8 +1,9 @@ # syntax=docker/dockerfile:1 -FROM node:20.9-slim AS base +FROM node:20.16.0-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable +RUN corepack prepare pnpm@9.12.0 --activate FROM base AS build COPY . /usr/src/app diff --git a/Dockerfile.schedule b/Dockerfile.schedule index 70976523c..ecb125e09 100644 --- a/Dockerfile.schedule +++ b/Dockerfile.schedule @@ -1,8 +1,9 @@ # syntax=docker/dockerfile:1 -FROM node:20.9-slim AS base +FROM node:20.16.0-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable +RUN corepack prepare pnpm@9.12.0 --activate FROM base AS build COPY . /usr/src/app diff --git a/Dockerfile.server b/Dockerfile.server index e911c8780..ea6b372e8 100644 --- a/Dockerfile.server +++ b/Dockerfile.server @@ -1,8 +1,9 @@ # syntax=docker/dockerfile:1 -FROM node:20.9-slim AS base +FROM node:20.16.0-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable +RUN corepack prepare pnpm@9.12.0 --activate FROM base AS build COPY . /usr/src/app diff --git a/README.md b/README.md index 8c4c7c6e9..bd27474e0 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,6 @@ For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com).
Hostinger LX Aer - Mandarin - Lightnode
@@ -89,25 +87,18 @@ For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com). ### Supporting Members 🥉
- Lightspeed.run + Cloudblast.io - Startupfame - Itsdb-center - Openalternative + Synexa
### Community Backers 🤝 -
- Steamsets.com - Rivo.gg - Rivo.gg -
#### Organizations: -[![Sponsors on Open Collective](https://opencollective.com/dokploy/organizations.svg?width=890)](https://opencollective.com/dokploy) +[Sponsors on Open Collective](https://opencollective.com/dokploy) #### Individuals: diff --git a/apps/api/package.json b/apps/api/package.json index 65f9d4ad9..98fcea0d3 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -10,24 +10,24 @@ }, "dependencies": { "@dokploy/server": "workspace:*", - "@hono/node-server": "^1.12.1", + "@hono/node-server": "^1.14.3", "@hono/zod-validator": "0.3.0", "@nerimity/mimiqueue": "1.2.3", - "dotenv": "^16.3.1", - "hono": "^4.5.8", + "dotenv": "^16.4.5", + "hono": "^4.7.10", "pino": "9.4.0", "pino-pretty": "11.2.2", "react": "18.2.0", "react-dom": "18.2.0", "redis": "4.7.0", - "zod": "^3.23.4" + "zod": "^3.25.32" }, "devDependencies": { - "@types/node": "^20.11.17", + "@types/node": "^20.17.51", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", - "tsx": "^4.7.1", - "typescript": "^5.4.2" + "tsx": "^4.16.2", + "typescript": "^5.8.3" }, "packageManager": "pnpm@9.5.0" } diff --git a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx index ae30a799d..b8a272e15 100644 --- a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx @@ -270,8 +270,8 @@ export const AddSwarmSettings = ({ applicationId }: Props) => { Swarm Settings - - + + Swarm Settings Update certain settings using a json object. @@ -753,7 +753,7 @@ export const AddSwarmSettings = ({ applicationId }: Props) => { )} /> - + - + Template Information diff --git a/apps/dokploy/components/dashboard/application/advanced/ports/handle-ports.tsx b/apps/dokploy/components/dashboard/application/advanced/ports/handle-ports.tsx index ad0c0ac3c..81c1f32c5 100644 --- a/apps/dokploy/components/dashboard/application/advanced/ports/handle-ports.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/ports/handle-ports.tsx @@ -124,7 +124,7 @@ export const HandlePorts = ({ )} - + Ports diff --git a/apps/dokploy/components/dashboard/application/advanced/redirects/handle-redirect.tsx b/apps/dokploy/components/dashboard/application/advanced/redirects/handle-redirect.tsx index 5d91d580d..253a8c24d 100644 --- a/apps/dokploy/components/dashboard/application/advanced/redirects/handle-redirect.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/redirects/handle-redirect.tsx @@ -179,7 +179,7 @@ export const HandleRedirect = ({ )} - + Redirects diff --git a/apps/dokploy/components/dashboard/application/advanced/security/handle-security.tsx b/apps/dokploy/components/dashboard/application/advanced/security/handle-security.tsx index e7bc0cd1f..1808f7873 100644 --- a/apps/dokploy/components/dashboard/application/advanced/security/handle-security.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/security/handle-security.tsx @@ -114,7 +114,7 @@ export const HandleSecurity = ({ )} - + Security diff --git a/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx b/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx index 58601fb49..9653721a2 100644 --- a/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/traefik/show-traefik-config.tsx @@ -48,7 +48,7 @@ export const ShowTraefikConfig = ({ applicationId }: Props) => { ) : (
-
+
{ - + Update traefik config Update the traefik config diff --git a/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx b/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx index 639410bb4..84c864e3a 100644 --- a/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx @@ -151,7 +151,7 @@ export const AddVolumes = ({ - + Volumes / Mounts diff --git a/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx b/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx index d185b2160..2a692f100 100644 --- a/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx @@ -186,7 +186,7 @@ export const UpdateVolume = ({ - + Update Update the mount diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx index e6fdb38be..83a4b46f4 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx @@ -124,7 +124,7 @@ export const ShowDeployment = ({ } }} > - + Deployment @@ -158,7 +158,7 @@ export const ShowDeployment = ({
{" "} {filteredLogs.length > 0 ? ( diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployments-modal.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployments-modal.tsx index 24446902d..4631a066e 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployments-modal.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployments-modal.tsx @@ -50,7 +50,7 @@ export const ShowDeploymentsModal = ({ )} - + { - + diff --git a/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx b/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx index c8522f5f5..9069542d9 100644 --- a/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx +++ b/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx @@ -292,7 +292,7 @@ export const AddDomain = ({ id, type, domainId = "", children }: Props) => { {children} - + Domain {dictionary.dialogDescription} 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 3b054fc99..2995e45f3 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 @@ -43,7 +43,7 @@ import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { CheckIcon, ChevronsUpDown, HelpCircle, Plus, X } from "lucide-react"; import Link from "next/link"; -import { useEffect } from "react"; +import { useEffect, useMemo } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; @@ -96,6 +96,16 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { const repository = form.watch("repository"); const gitlabId = form.watch("gitlabId"); + const gitlabUrl = useMemo(() => { + const url = gitlabProviders?.find( + (provider) => provider.gitlabId === gitlabId, + )?.gitlabUrl; + + const gitlabUrl = url?.replace(/\/$/, ""); + + return gitlabUrl || "https://gitlab.com"; + }, [gitlabId, gitlabProviders]); + const { data: repositories, isLoading: isLoadingRepositories, @@ -224,7 +234,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { Repository {field.value.owner && field.value.repo && ( { setSab(e as TabState); }} > -
- +
+ {children} - + Domain {dictionary.dialogDescription} diff --git a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx index 4c5068eee..ae93ebcc4 100644 --- a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx +++ b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx @@ -138,7 +138,7 @@ export const ShowPreviewSettings = ({ applicationId }: Props) => { Configure - + Preview Deployment Settings diff --git a/apps/dokploy/components/dashboard/application/schedules/handle-schedules.tsx b/apps/dokploy/components/dashboard/application/schedules/handle-schedules.tsx index 2d26d7a94..077c289b8 100644 --- a/apps/dokploy/components/dashboard/application/schedules/handle-schedules.tsx +++ b/apps/dokploy/components/dashboard/application/schedules/handle-schedules.tsx @@ -4,6 +4,7 @@ import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, + DialogDescription, DialogHeader, DialogTitle, DialogTrigger, @@ -232,14 +233,17 @@ export const HandleSchedules = ({ id, scheduleId, scheduleType }: Props) => { {scheduleId ? "Edit" : "Create"} Schedule + + {scheduleId ? "Manage" : "Create"} a schedule to run a task at a + specific time or interval. +
diff --git a/apps/dokploy/components/dashboard/application/schedules/show-schedules.tsx b/apps/dokploy/components/dashboard/application/schedules/show-schedules.tsx index ecef0deeb..2f2ebc85a 100644 --- a/apps/dokploy/components/dashboard/application/schedules/show-schedules.tsx +++ b/apps/dokploy/components/dashboard/application/schedules/show-schedules.tsx @@ -91,7 +91,7 @@ export const ShowSchedules = ({ id, scheduleType = "application" }: Props) => { return (
diff --git a/apps/dokploy/components/dashboard/application/update-application.tsx b/apps/dokploy/components/dashboard/application/update-application.tsx index 934a596df..4d4190fa2 100644 --- a/apps/dokploy/components/dashboard/application/update-application.tsx +++ b/apps/dokploy/components/dashboard/application/update-application.tsx @@ -99,7 +99,7 @@ export const UpdateApplication = ({ applicationId }: Props) => { - + Modify Application Update the application data diff --git a/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx b/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx index bebea61b8..c66b05850 100644 --- a/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx +++ b/apps/dokploy/components/dashboard/application/volume-backups/handle-volume-backups.tsx @@ -257,7 +257,7 @@ export const HandleVolumeBackups = ({ { Restore Volume Backup - + diff --git a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx index bb071947e..083f45252 100644 --- a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx +++ b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx @@ -113,7 +113,7 @@ export const ShowVolumeBackups = ({ return (
diff --git a/apps/dokploy/components/dashboard/compose/delete-service.tsx b/apps/dokploy/components/dashboard/compose/delete-service.tsx index 212b5ac73..65689afd1 100644 --- a/apps/dokploy/components/dashboard/compose/delete-service.tsx +++ b/apps/dokploy/components/dashboard/compose/delete-service.tsx @@ -126,7 +126,7 @@ export const DeleteService = ({ id, type }: Props) => { - + Are you absolutely sure? diff --git a/apps/dokploy/components/dashboard/compose/general/generic/show.tsx b/apps/dokploy/components/dashboard/compose/general/generic/show.tsx index cd510ad69..4ea1104bb 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/show.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/show.tsx @@ -142,8 +142,8 @@ export const ShowProviderFormCompose = ({ composeId }: Props) => { setSab(e as TabState); }} > -
- +
+ { Preview Compose - + Converted Compose diff --git a/apps/dokploy/components/dashboard/compose/general/show-utilities.tsx b/apps/dokploy/components/dashboard/compose/general/show-utilities.tsx index 214102ce9..6df800494 100644 --- a/apps/dokploy/components/dashboard/compose/general/show-utilities.tsx +++ b/apps/dokploy/components/dashboard/compose/general/show-utilities.tsx @@ -23,7 +23,7 @@ export const ShowUtilities = ({ composeId }: Props) => { - + Utilities Modify the application data diff --git a/apps/dokploy/components/dashboard/compose/update-compose.tsx b/apps/dokploy/components/dashboard/compose/update-compose.tsx index c89618601..f9c38a6bc 100644 --- a/apps/dokploy/components/dashboard/compose/update-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/update-compose.tsx @@ -99,7 +99,7 @@ export const UpdateCompose = ({ composeId }: Props) => { - + Modify Compose Update the compose data diff --git a/apps/dokploy/components/dashboard/database/backups/handle-backup.tsx b/apps/dokploy/components/dashboard/database/backups/handle-backup.tsx index ca2cd27fb..4c5bbe628 100644 --- a/apps/dokploy/components/dashboard/database/backups/handle-backup.tsx +++ b/apps/dokploy/components/dashboard/database/backups/handle-backup.tsx @@ -329,7 +329,7 @@ export const HandleBackup = ({ )} - + {backupId ? "Update Backup" : "Create Backup"} diff --git a/apps/dokploy/components/dashboard/database/backups/restore-backup.tsx b/apps/dokploy/components/dashboard/database/backups/restore-backup.tsx index 76ab7b6cf..a173f85ad 100644 --- a/apps/dokploy/components/dashboard/database/backups/restore-backup.tsx +++ b/apps/dokploy/components/dashboard/database/backups/restore-backup.tsx @@ -324,7 +324,7 @@ export const RestoreBackup = ({ Restore Backup - + diff --git a/apps/dokploy/components/dashboard/docker/config/show-container-config.tsx b/apps/dokploy/components/dashboard/docker/config/show-container-config.tsx index 1f1591c9d..07c9556f7 100644 --- a/apps/dokploy/components/dashboard/docker/config/show-container-config.tsx +++ b/apps/dokploy/components/dashboard/docker/config/show-container-config.tsx @@ -42,7 +42,7 @@ export const ShowContainerConfig = ({ containerId, serverId }: Props) => { See in detail the config of this container -
+
 							 = ({
 					
{filteredLogs.length > 0 ? ( filteredLogs.map((filteredLog: LogLine, index: number) => ( diff --git a/apps/dokploy/components/dashboard/docker/logs/line-count-filter.tsx b/apps/dokploy/components/dashboard/docker/logs/line-count-filter.tsx index dd7b63af5..23b273c86 100644 --- a/apps/dokploy/components/dashboard/docker/logs/line-count-filter.tsx +++ b/apps/dokploy/components/dashboard/docker/logs/line-count-filter.tsx @@ -138,7 +138,7 @@ export function LineCountFilter({ }} />
- + {lineCountOptions.map((option) => { const isSelected = value === option.value; diff --git a/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-logs.tsx b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-logs.tsx index 619b25d0c..fc2fb8f67 100644 --- a/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-logs.tsx +++ b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-logs.tsx @@ -40,7 +40,7 @@ export const ShowDockerModalLogs = ({ {children} - + View Logs View the logs for {containerId} diff --git a/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx index 36719bb07..669369348 100644 --- a/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx +++ b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx @@ -40,7 +40,7 @@ export const ShowDockerModalStackLogs = ({ {children} - + View Logs View the logs for {containerId} diff --git a/apps/dokploy/components/dashboard/docker/terminal/docker-terminal-modal.tsx b/apps/dokploy/components/dashboard/docker/terminal/docker-terminal-modal.tsx index 90aa2b406..97d9f16e8 100644 --- a/apps/dokploy/components/dashboard/docker/terminal/docker-terminal-modal.tsx +++ b/apps/dokploy/components/dashboard/docker/terminal/docker-terminal-modal.tsx @@ -60,7 +60,7 @@ export const DockerTerminalModal = ({ event.preventDefault()} > diff --git a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx index 64705b693..9d29d1ac4 100644 --- a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx @@ -97,7 +97,7 @@ export const UpdateMariadb = ({ mariadbId }: Props) => { - + Modify MariaDB Update the MariaDB data diff --git a/apps/dokploy/components/dashboard/mongo/update-mongo.tsx b/apps/dokploy/components/dashboard/mongo/update-mongo.tsx index d42f406f0..48dbcf4d7 100644 --- a/apps/dokploy/components/dashboard/mongo/update-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/update-mongo.tsx @@ -99,7 +99,7 @@ export const UpdateMongo = ({ mongoId }: Props) => { - + Modify MongoDB Update the MongoDB data diff --git a/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx b/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx index 3b189c2ac..c9cefa4c3 100644 --- a/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx +++ b/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx @@ -123,7 +123,7 @@ export const ContainerPaidMonitoring = ({ appName, baseUrl, token }: Props) => { ? queryError.message : "Failed to fetch metrics, Please check your monitoring Instance is Configured correctly."}

-

URL: {baseUrl}

+

URL: {baseUrl}

); diff --git a/apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx b/apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx index e92ce03fc..492abc9e0 100644 --- a/apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx +++ b/apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx @@ -143,7 +143,7 @@ export const ShowPaidMonitoring = ({ ? queryError.message : "Failed to fetch metrics, Please check your monitoring Instance is Configured correctly."}

-

URL: {BASE_URL}

+

URL: {BASE_URL}

); diff --git a/apps/dokploy/components/dashboard/mysql/update-mysql.tsx b/apps/dokploy/components/dashboard/mysql/update-mysql.tsx index ec3c1b454..9b1296478 100644 --- a/apps/dokploy/components/dashboard/mysql/update-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/update-mysql.tsx @@ -97,7 +97,7 @@ export const UpdateMysql = ({ mysqlId }: Props) => { - + Modify MySQL Update the MySQL data diff --git a/apps/dokploy/components/dashboard/organization/handle-organization.tsx b/apps/dokploy/components/dashboard/organization/handle-organization.tsx index 014c37df1..394f3d018 100644 --- a/apps/dokploy/components/dashboard/organization/handle-organization.tsx +++ b/apps/dokploy/components/dashboard/organization/handle-organization.tsx @@ -155,7 +155,7 @@ export function AddOrganization({ organizationId }: Props) { control={form.control} name="logo" render={({ field }) => ( - + Logo URL )} /> - + diff --git a/apps/dokploy/components/dashboard/postgres/update-postgres.tsx b/apps/dokploy/components/dashboard/postgres/update-postgres.tsx index f70cd8c90..2695953cd 100644 --- a/apps/dokploy/components/dashboard/postgres/update-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/update-postgres.tsx @@ -99,7 +99,7 @@ export const UpdatePostgres = ({ postgresId }: Props) => { - + Modify Postgres Update the Postgres data diff --git a/apps/dokploy/components/dashboard/project/add-application.tsx b/apps/dokploy/components/dashboard/project/add-application.tsx index 6b0a690db..9ed31464a 100644 --- a/apps/dokploy/components/dashboard/project/add-application.tsx +++ b/apps/dokploy/components/dashboard/project/add-application.tsx @@ -119,7 +119,7 @@ export const AddApplication = ({ projectId, projectName }: Props) => { Application - + Create diff --git a/apps/dokploy/components/dashboard/project/add-compose.tsx b/apps/dokploy/components/dashboard/project/add-compose.tsx index 5f2bb137f..a60bfdd70 100644 --- a/apps/dokploy/components/dashboard/project/add-compose.tsx +++ b/apps/dokploy/components/dashboard/project/add-compose.tsx @@ -124,7 +124,7 @@ export const AddCompose = ({ projectId, projectName }: Props) => { Compose - + Create Compose diff --git a/apps/dokploy/components/dashboard/project/add-database.tsx b/apps/dokploy/components/dashboard/project/add-database.tsx index 2420e603f..b4ac685dc 100644 --- a/apps/dokploy/components/dashboard/project/add-database.tsx +++ b/apps/dokploy/components/dashboard/project/add-database.tsx @@ -283,7 +283,7 @@ export const AddDatabase = ({ projectId, projectName }: Props) => { Database - + Databases diff --git a/apps/dokploy/components/dashboard/project/add-template.tsx b/apps/dokploy/components/dashboard/project/add-template.tsx index 8e9de54d9..53ae30141 100644 --- a/apps/dokploy/components/dashboard/project/add-template.tsx +++ b/apps/dokploy/components/dashboard/project/add-template.tsx @@ -148,7 +148,7 @@ export const AddTemplate = ({ projectId, baseUrl }: Props) => { Template - +
diff --git a/apps/dokploy/components/dashboard/project/ai/step-two.tsx b/apps/dokploy/components/dashboard/project/ai/step-two.tsx index 14a929fce..7b4deb30e 100644 --- a/apps/dokploy/components/dashboard/project/ai/step-two.tsx +++ b/apps/dokploy/components/dashboard/project/ai/step-two.tsx @@ -259,7 +259,7 @@ export const StepTwo = ({ templateInfo, setTemplateInfo }: StepProps) => { Description - + {selectedVariant?.description} @@ -289,7 +289,7 @@ export const StepTwo = ({ templateInfo, setTemplateInfo }: StepProps) => { Environment Variables - +
{selectedVariant?.envVariables.map((env, index) => (
{ Domains - +
{selectedVariant?.domains.map((domain, index) => (
{ AI Assistant - + AI Assistant diff --git a/apps/dokploy/components/dashboard/project/duplicate-project.tsx b/apps/dokploy/components/dashboard/project/duplicate-project.tsx index ffcfeba87..74001bd41 100644 --- a/apps/dokploy/components/dashboard/project/duplicate-project.tsx +++ b/apps/dokploy/components/dashboard/project/duplicate-project.tsx @@ -167,7 +167,7 @@ export const DuplicateProject = ({
-
+
{selectedServices.map((service) => (
diff --git a/apps/dokploy/components/dashboard/projects/project-environment.tsx b/apps/dokploy/components/dashboard/projects/project-environment.tsx index e43d1af87..21c2c9b58 100644 --- a/apps/dokploy/components/dashboard/projects/project-environment.tsx +++ b/apps/dokploy/components/dashboard/projects/project-environment.tsx @@ -94,7 +94,7 @@ export const ProjectEnvironment = ({ projectId, children }: Props) => { )} - + Project Environment diff --git a/apps/dokploy/components/dashboard/projects/show.tsx b/apps/dokploy/components/dashboard/projects/show.tsx index 03ebe7a85..2de242e63 100644 --- a/apps/dokploy/components/dashboard/projects/show.tsx +++ b/apps/dokploy/components/dashboard/projects/show.tsx @@ -157,7 +157,7 @@ export const ShowProjects = () => { e.stopPropagation()} > {project.applications.length > 0 && ( @@ -265,7 +265,7 @@ export const ShowProjects = () => { e.stopPropagation()} > diff --git a/apps/dokploy/components/dashboard/redis/update-redis.tsx b/apps/dokploy/components/dashboard/redis/update-redis.tsx index 8d720703e..b04e1ff45 100644 --- a/apps/dokploy/components/dashboard/redis/update-redis.tsx +++ b/apps/dokploy/components/dashboard/redis/update-redis.tsx @@ -97,7 +97,7 @@ export const UpdateRedis = ({ redisId }: Props) => { - + Modify Redis Update the redis data diff --git a/apps/dokploy/components/dashboard/requests/columns.tsx b/apps/dokploy/components/dashboard/requests/columns.tsx index 2c0391f80..7bedb42e2 100644 --- a/apps/dokploy/components/dashboard/requests/columns.tsx +++ b/apps/dokploy/components/dashboard/requests/columns.tsx @@ -47,7 +47,7 @@ export const columns: ColumnDef[] = [ cell: ({ row }) => { const log = row.original; return ( -
+
{log.RequestMethod}{" "}
@@ -86,7 +86,7 @@ export const columns: ColumnDef[] = [ cell: ({ row }) => { const log = row.original; return ( -
+
{format(new Date(log.StartUTC), "yyyy-MM-dd HH:mm:ss")}
diff --git a/apps/dokploy/components/dashboard/settings/api/add-api-key.tsx b/apps/dokploy/components/dashboard/settings/api/add-api-key.tsx index 568b86e94..2baa0ff6b 100644 --- a/apps/dokploy/components/dashboard/settings/api/add-api-key.tsx +++ b/apps/dokploy/components/dashboard/settings/api/add-api-key.tsx @@ -142,7 +142,7 @@ export const AddApiKey = () => { - + Generate API Key diff --git a/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx b/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx index 2c20bb81d..1e0e5d3df 100644 --- a/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx +++ b/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx @@ -171,7 +171,7 @@ export const ShowBilling = () => { )} {isAnnual ? (
-

+

${" "} {calculatePrice( serverQuantity, @@ -180,7 +180,7 @@ export const ShowBilling = () => { USD

| -

+

${" "} {( calculatePrice(serverQuantity, isAnnual) / 12 @@ -189,7 +189,7 @@ export const ShowBilling = () => {

) : ( -

+

${" "} {calculatePrice(serverQuantity, isAnnual).toFixed( 2, diff --git a/apps/dokploy/components/dashboard/settings/billing/show-welcome-dokploy.tsx b/apps/dokploy/components/dashboard/settings/billing/show-welcome-dokploy.tsx index 64362b25c..845cbe49d 100644 --- a/apps/dokploy/components/dashboard/settings/billing/show-welcome-dokploy.tsx +++ b/apps/dokploy/components/dashboard/settings/billing/show-welcome-dokploy.tsx @@ -41,7 +41,7 @@ export const ShowWelcomeDokploy = () => { return ( <>

- + Welcome to Dokploy Cloud 🎉 diff --git a/apps/dokploy/components/dashboard/settings/certificates/add-certificate.tsx b/apps/dokploy/components/dashboard/settings/certificates/add-certificate.tsx index 58cad7910..c0d059992 100644 --- a/apps/dokploy/components/dashboard/settings/certificates/add-certificate.tsx +++ b/apps/dokploy/components/dashboard/settings/certificates/add-certificate.tsx @@ -106,7 +106,7 @@ export const AddCertificate = () => { Add Certificate - + Add New Certificate @@ -222,7 +222,7 @@ export const AddCertificate = () => { /> - + - + Add Node diff --git a/apps/dokploy/components/dashboard/settings/cluster/nodes/show-node-data.tsx b/apps/dokploy/components/dashboard/settings/cluster/nodes/show-node-data.tsx index e2adbed76..86635810c 100644 --- a/apps/dokploy/components/dashboard/settings/cluster/nodes/show-node-data.tsx +++ b/apps/dokploy/components/dashboard/settings/cluster/nodes/show-node-data.tsx @@ -24,7 +24,7 @@ export const ShowNodeData = ({ data }: Props) => { View Config - + Node Config diff --git a/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes-modal.tsx b/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes-modal.tsx index 5f0b32fc3..3ba0a8567 100644 --- a/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/cluster/nodes/show-nodes-modal.tsx @@ -20,7 +20,7 @@ export const ShowNodesModal = ({ serverId }: Props) => { Show Swarm Nodes - +
diff --git a/apps/dokploy/components/dashboard/settings/cluster/registry/handle-registry.tsx b/apps/dokploy/components/dashboard/settings/cluster/registry/handle-registry.tsx index d30ad6dda..ab51ab579 100644 --- a/apps/dokploy/components/dashboard/settings/cluster/registry/handle-registry.tsx +++ b/apps/dokploy/components/dashboard/settings/cluster/registry/handle-registry.tsx @@ -161,7 +161,7 @@ export const HandleRegistry = ({ registryId }: Props) => { )} - + Add a external registry @@ -316,7 +316,7 @@ export const HandleRegistry = ({ registryId }: Props) => { />
- +
)} - + {destinationId ? "Update" : "Add"} Destination @@ -359,7 +359,7 @@ export const HandleDestinations = ({ destinationId }: Props) => { {isCloud ? ( diff --git a/apps/dokploy/components/dashboard/settings/git/bitbucket/add-bitbucket-provider.tsx b/apps/dokploy/components/dashboard/settings/git/bitbucket/add-bitbucket-provider.tsx index 0df2d0610..bd4179009 100644 --- a/apps/dokploy/components/dashboard/settings/git/bitbucket/add-bitbucket-provider.tsx +++ b/apps/dokploy/components/dashboard/settings/git/bitbucket/add-bitbucket-provider.tsx @@ -97,7 +97,7 @@ export const AddBitbucketProvider = () => { Bitbucket - + Bitbucket Provider diff --git a/apps/dokploy/components/dashboard/settings/git/bitbucket/edit-bitbucket-provider.tsx b/apps/dokploy/components/dashboard/settings/git/bitbucket/edit-bitbucket-provider.tsx index e5a7f7529..12744b7cb 100644 --- a/apps/dokploy/components/dashboard/settings/git/bitbucket/edit-bitbucket-provider.tsx +++ b/apps/dokploy/components/dashboard/settings/git/bitbucket/edit-bitbucket-provider.tsx @@ -105,7 +105,7 @@ export const EditBitbucketProvider = ({ bitbucketId }: Props) => { - + Update Bitbucket diff --git a/apps/dokploy/components/dashboard/settings/git/gitea/add-gitea-provider.tsx b/apps/dokploy/components/dashboard/settings/git/gitea/add-gitea-provider.tsx index 13c65bdf3..81530549c 100644 --- a/apps/dokploy/components/dashboard/settings/git/gitea/add-gitea-provider.tsx +++ b/apps/dokploy/components/dashboard/settings/git/gitea/add-gitea-provider.tsx @@ -143,7 +143,7 @@ export const AddGiteaProvider = () => { Gitea - + Gitea Provider diff --git a/apps/dokploy/components/dashboard/settings/git/github/edit-github-provider.tsx b/apps/dokploy/components/dashboard/settings/git/github/edit-github-provider.tsx index 28c6e1233..e04d3e718 100644 --- a/apps/dokploy/components/dashboard/settings/git/github/edit-github-provider.tsx +++ b/apps/dokploy/components/dashboard/settings/git/github/edit-github-provider.tsx @@ -92,7 +92,7 @@ export const EditGithubProvider = ({ githubId }: Props) => { - + Update Github diff --git a/apps/dokploy/components/dashboard/settings/git/gitlab/add-gitlab-provider.tsx b/apps/dokploy/components/dashboard/settings/git/gitlab/add-gitlab-provider.tsx index 023e46ed2..3b4fc60f6 100644 --- a/apps/dokploy/components/dashboard/settings/git/gitlab/add-gitlab-provider.tsx +++ b/apps/dokploy/components/dashboard/settings/git/gitlab/add-gitlab-provider.tsx @@ -115,7 +115,7 @@ export const AddGitlabProvider = () => { GitLab - + GitLab Provider diff --git a/apps/dokploy/components/dashboard/settings/git/gitlab/edit-gitlab-provider.tsx b/apps/dokploy/components/dashboard/settings/git/gitlab/edit-gitlab-provider.tsx index 5142a3fe4..a2e33cdfb 100644 --- a/apps/dokploy/components/dashboard/settings/git/gitlab/edit-gitlab-provider.tsx +++ b/apps/dokploy/components/dashboard/settings/git/gitlab/edit-gitlab-provider.tsx @@ -105,7 +105,7 @@ export const EditGitlabProvider = ({ gitlabId }: Props) => { - + Update GitLab diff --git a/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx b/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx index 35d9ef0d7..05273ca2a 100644 --- a/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx +++ b/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx @@ -53,7 +53,7 @@ export const ShowGitProviders = () => { return (
- +
@@ -73,14 +73,14 @@ export const ShowGitProviders = () => { ) : ( <> {data?.length === 0 ? ( -
+
Create your first Git Provider
-
+
@@ -90,13 +90,13 @@ export const ShowGitProviders = () => {
) : ( -
+
Available Providers
-
+
@@ -158,7 +158,7 @@ export const ShowGitProviders = () => {
{!haveGithubRequirements && isGithub && ( -
+
{
)} {haveGithubRequirements && isGithub && ( -
+
{
)} {!haveGitlabRequirements && isGitlab && ( -
+
{ )} - + {notificationId ? "Update" : "Add"} Notification @@ -907,7 +907,7 @@ export const HandleNotifications = ({ notificationId }: Props) => { control={form.control} name="appBuildError" render={({ field }) => ( - +
App Build Error @@ -928,7 +928,7 @@ export const HandleNotifications = ({ notificationId }: Props) => { control={form.control} name="databaseBackup" render={({ field }) => ( - +
Database Backup @@ -949,7 +949,7 @@ export const HandleNotifications = ({ notificationId }: Props) => { control={form.control} name="dockerCleanup" render={({ field }) => ( - +
Docker Cleanup @@ -972,7 +972,7 @@ export const HandleNotifications = ({ notificationId }: Props) => { control={form.control} name="dokployRestart" render={({ field }) => ( - +
Dokploy Restart @@ -995,7 +995,7 @@ export const HandleNotifications = ({ notificationId }: Props) => { control={form.control} name="serverThreshold" render={({ field }) => ( - +
Server Threshold diff --git a/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx b/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx index afc859f41..5fd8ffc9c 100644 --- a/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx +++ b/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx @@ -186,7 +186,7 @@ export const Enable2FA = () => { Enable 2FA - + 2FA Setup diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-server-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-server-actions.tsx index fcc0e315f..054ef66b2 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-server-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-server-actions.tsx @@ -26,7 +26,7 @@ export const ShowServerActions = ({ serverId }: Props) => { View Actions - +
Web server settings Reload or clean the web server. diff --git a/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx b/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx index 6225ee771..02ea9b7d1 100644 --- a/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx @@ -99,7 +99,7 @@ export const EditScript = ({ serverId }: Props) => { - + Modify Script diff --git a/apps/dokploy/components/dashboard/settings/servers/gpu-support-modal.tsx b/apps/dokploy/components/dashboard/settings/servers/gpu-support-modal.tsx index 9cf858cd3..9196869d5 100644 --- a/apps/dokploy/components/dashboard/settings/servers/gpu-support-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/gpu-support-modal.tsx @@ -22,7 +22,7 @@ export const GPUSupportModal = () => { GPU Setup - + Dokploy Server GPU Setup diff --git a/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx b/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx index 751167a42..85c63adb6 100644 --- a/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx @@ -88,7 +88,7 @@ export const SetupServer = ({ serverId }: Props) => { Setup Server - +
@@ -147,12 +147,12 @@ export const SetupServer = ({ serverId }: Props) => {
  • 2. Add The SSH Key to Server Manually
  • -
    +
    Copy Public Key ({server?.sshKey?.name})
    diff --git a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx index b86311840..c0047a9ea 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx @@ -20,7 +20,7 @@ export const ShowSwarmOverviewModal = ({ serverId }: Props) => { Show Swarm Overview - +
    diff --git a/apps/dokploy/components/dashboard/settings/servers/show-traefik-file-system-modal.tsx b/apps/dokploy/components/dashboard/settings/servers/show-traefik-file-system-modal.tsx index 0c5763605..74b700b6e 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-traefik-file-system-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-traefik-file-system-modal.tsx @@ -20,7 +20,7 @@ export const ShowTraefikFileSystemModal = ({ serverId }: Props) => { Show Traefik File System - + diff --git a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx index 24d01553b..3a112af20 100644 --- a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx @@ -265,7 +265,7 @@ export const CreateServer = ({ stepper }: Props) => { /> - + )} - + SSH Key diff --git a/apps/dokploy/components/dashboard/settings/users/add-invitation.tsx b/apps/dokploy/components/dashboard/settings/users/add-invitation.tsx index 24e8f34e6..c09d11784 100644 --- a/apps/dokploy/components/dashboard/settings/users/add-invitation.tsx +++ b/apps/dokploy/components/dashboard/settings/users/add-invitation.tsx @@ -108,7 +108,7 @@ export const AddInvitation = () => { Add Invitation - + Add Invitation Invite a new user diff --git a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx index 51d73b1f9..b3476392c 100644 --- a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx +++ b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx @@ -123,7 +123,7 @@ export const AddUserPermissions = ({ userId }: Props) => { Add Permissions - + Permissions Add or remove permissions @@ -140,7 +140,7 @@ export const AddUserPermissions = ({ userId }: Props) => { control={form.control} name="canCreateProjects" render={({ field }) => ( - +
    Create Projects diff --git a/apps/dokploy/components/dashboard/settings/web-server/docker-terminal-modal.tsx b/apps/dokploy/components/dashboard/settings/web-server/docker-terminal-modal.tsx index 44dda0d36..e4ee83753 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/docker-terminal-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/docker-terminal-modal.tsx @@ -83,7 +83,7 @@ export const DockerTerminalModal = ({ children, appName, serverId }: Props) => { {children} event.preventDefault()} > diff --git a/apps/dokploy/components/dashboard/settings/web-server/edit-traefik-env.tsx b/apps/dokploy/components/dashboard/settings/web-server/edit-traefik-env.tsx index 07dc24078..5332fbf78 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/edit-traefik-env.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/edit-traefik-env.tsx @@ -78,7 +78,7 @@ export const EditTraefikEnv = ({ children, serverId }: Props) => { return ( {children} - + Update Traefik Environment diff --git a/apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx b/apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx index e30408e6d..ae9158453 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx @@ -77,7 +77,7 @@ const LocalServerConfig = ({ onSave }: Props) => {
    - + {t("settings.terminal.connectionSettings")}
    diff --git a/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx b/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx index aa7a33979..524b29616 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx @@ -67,7 +67,7 @@ export const ShowModalLogs = ({ return ( {children} - + View Logs View the logs for {appName} diff --git a/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx b/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx index 7c64ebc09..af5ce06c1 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx @@ -53,7 +53,7 @@ export const TerminalModal = ({ children, serverId }: Props) => { event.preventDefault()} > diff --git a/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx b/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx index 7e0f25fed..626e2a282 100644 --- a/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx +++ b/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx @@ -87,7 +87,7 @@ export const ShowNodeApplications = ({ serverId }: Props) => { Services - + Node Applications diff --git a/apps/dokploy/components/dashboard/swarm/details/show-node-config.tsx b/apps/dokploy/components/dashboard/swarm/details/show-node-config.tsx index 7f27fe3bf..6f92a2aa7 100644 --- a/apps/dokploy/components/dashboard/swarm/details/show-node-config.tsx +++ b/apps/dokploy/components/dashboard/swarm/details/show-node-config.tsx @@ -29,7 +29,7 @@ export const ShowNodeConfig = ({ nodeId, serverId }: Props) => { Config - + Node Config diff --git a/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx b/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx index 5ab936102..8e1618bea 100644 --- a/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx +++ b/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx @@ -128,7 +128,7 @@ export default function SwarmMonitorCard({ serverId }: Props) {
    -
    +
    {activeNodes.map((node) => (
    {node.Hostname} @@ -162,7 +162,7 @@ export default function SwarmMonitorCard({ serverId }: Props) {
    -
    +
    {managerNodes.map((node) => (
    {node.Hostname} diff --git a/apps/dokploy/components/shared/code-editor.tsx b/apps/dokploy/components/shared/code-editor.tsx index 23e26e887..fe50e8b4a 100644 --- a/apps/dokploy/components/shared/code-editor.tsx +++ b/apps/dokploy/components/shared/code-editor.tsx @@ -147,7 +147,7 @@ export const CodeEditor = ({ }: Props) => { const { resolvedTheme } = useTheme(); return ( -
    +
    - {props.disabled && ( -
    - )} + > + {props.disabled && ( +
    + )} +
    ); }; diff --git a/apps/dokploy/components/ui/dialog.tsx b/apps/dokploy/components/ui/dialog.tsx index 37e8f685f..f3b6fedbd 100644 --- a/apps/dokploy/components/ui/dialog.tsx +++ b/apps/dokploy/components/ui/dialog.tsx @@ -1,10 +1,28 @@ +import { cn } from "@/lib/utils"; import * as DialogPrimitive from "@radix-ui/react-dialog"; import { X } from "lucide-react"; import * as React from "react"; -import { cn } from "@/lib/utils"; +const DialogContext = React.createContext<{ + onOpenChange?: (open: boolean) => void; + open?: boolean; +}>({}); -const Dialog = DialogPrimitive.Root; +const Dialog = ({ + onOpenChange, + open, + ...props +}: React.ComponentPropsWithoutRef) => ( + + + +); +Dialog.displayName = DialogPrimitive.Root.displayName; const DialogTrigger = DialogPrimitive.Trigger; @@ -30,25 +48,103 @@ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; const DialogContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - -
    {children}
    - - - Close - -
    -
    -)); +>(({ className, children, ...props }, ref) => { + const contentRef = React.useRef(null); + const { onOpenChange, open } = React.useContext(DialogContext); + + React.useEffect(() => { + if (!open) return; + + const scrollbarWidth = + window.innerWidth - document.documentElement.clientWidth; + const body = document.body; + const originalPaddingRight = body.style.paddingRight; + const originalOverflow = body.style.overflow; + + body.style.overflow = "hidden"; + if (scrollbarWidth > 0) { + body.style.paddingRight = `${scrollbarWidth}px`; + } + + return () => { + body.style.overflow = originalOverflow; + body.style.paddingRight = originalPaddingRight; + }; + }, [open]); + + // Handle outside interactions properly with Command components + const handleInteractOutside = React.useCallback( + (_e: Event) => { + if (onOpenChange) { + onOpenChange(false); + } + }, + [onOpenChange], + ); + + const hasPaddingOverride = className?.includes("p-0"); + + // Separate DialogFooter from other children for proper layout + const childrenArray = React.Children.toArray(children); + const dialogFooter = childrenArray.find( + (child) => React.isValidElement(child) && child.type === DialogFooter, + ); + const otherChildren = childrenArray.filter( + (child) => !(React.isValidElement(child) && child.type === DialogFooter), + ); + + return ( + + {/* Custom overlay for modal=false - no click handler to avoid Command conflicts */} +
    + { + const target = e.target as HTMLElement; + // Don't close when clicking inside popovers, dropdowns, or command components + if ( + target.closest("[data-radix-popper-content-wrapper]") || + target.closest("[cmdk-root]") || + target.closest("[data-radix-command-root]") + ) { + e.preventDefault(); + return; + } + // Use our custom handler for modal=false behavior + handleInteractOutside(e); + }} + {...props} + > +
    + {otherChildren} +
    + + {/* DialogFooter outside scrollable area with proper spacing */} + {dialogFooter && ( +
    + {dialogFooter} +
    + )} + + + + Close + +
    + + ); +}); DialogContent.displayName = DialogPrimitive.Content.displayName; const DialogHeader = ({ @@ -57,7 +153,7 @@ const DialogHeader = ({ }: React.HTMLAttributes) => (
    ) => ( ) : (
    -
    +
    {filteredServices?.map((service) => (
    - +
    -
    +
    @@ -218,17 +218,8 @@ const Service = ( router.push(newPath); }} > -
    - +
    + General Environment Domains @@ -308,7 +299,7 @@ const Service = ( -
    +
    -
    +
    -
    +
    -
    +
    - +
    -
    +
    @@ -211,17 +211,8 @@ const Service = ( router.push(newPath); }} > -
    - +
    + General Environment Domains @@ -340,7 +331,7 @@ const Service = ( -
    +
    {
    {isError && ( -
    +
    {error} diff --git a/apps/dokploy/server/api/routers/gitlab.ts b/apps/dokploy/server/api/routers/gitlab.ts index 4232860b1..8f6373139 100644 --- a/apps/dokploy/server/api/routers/gitlab.ts +++ b/apps/dokploy/server/api/routers/gitlab.ts @@ -76,6 +76,7 @@ export const gitlabRouter = createTRPCRouter({ gitProvider: { ...provider.gitProvider, }, + gitlabUrl: provider.gitlabUrl, }; }); diff --git a/apps/dokploy/server/api/routers/project.ts b/apps/dokploy/server/api/routers/project.ts index 66e0928f5..5744a103e 100644 --- a/apps/dokploy/server/api/routers/project.ts +++ b/apps/dokploy/server/api/routers/project.ts @@ -360,11 +360,17 @@ export const projectRouter = createTRPCRouter({ redirects, previewDeployments, mounts, + appName, ...application } = await findApplicationById(id); + const newAppName = appName.substring( + 0, + appName.lastIndexOf("-"), + ); const newApplication = await createApplication({ ...application, + appName: newAppName, name: input.duplicateInSameProject ? `${application.name} (copy)` : application.name, @@ -424,11 +430,17 @@ export const projectRouter = createTRPCRouter({ break; } case "postgres": { - const { postgresId, mounts, backups, ...postgres } = + const { postgresId, mounts, backups, appName, ...postgres } = await findPostgresById(id); + const newAppName = appName.substring( + 0, + appName.lastIndexOf("-"), + ); + const newPostgres = await createPostgres({ ...postgres, + appName: newAppName, name: input.duplicateInSameProject ? `${postgres.name} (copy)` : postgres.name, @@ -454,10 +466,17 @@ export const projectRouter = createTRPCRouter({ break; } case "mariadb": { - const { mariadbId, mounts, backups, ...mariadb } = + const { mariadbId, mounts, backups, appName, ...mariadb } = await findMariadbById(id); + + const newAppName = appName.substring( + 0, + appName.lastIndexOf("-"), + ); + const newMariadb = await createMariadb({ ...mariadb, + appName: newAppName, name: input.duplicateInSameProject ? `${mariadb.name} (copy)` : mariadb.name, @@ -483,10 +502,17 @@ export const projectRouter = createTRPCRouter({ break; } case "mongo": { - const { mongoId, mounts, backups, ...mongo } = + const { mongoId, mounts, backups, appName, ...mongo } = await findMongoById(id); + + const newAppName = appName.substring( + 0, + appName.lastIndexOf("-"), + ); + const newMongo = await createMongo({ ...mongo, + appName: newAppName, name: input.duplicateInSameProject ? `${mongo.name} (copy)` : mongo.name, @@ -512,10 +538,17 @@ export const projectRouter = createTRPCRouter({ break; } case "mysql": { - const { mysqlId, mounts, backups, ...mysql } = + const { mysqlId, mounts, backups, appName, ...mysql } = await findMySqlById(id); + + const newAppName = appName.substring( + 0, + appName.lastIndexOf("-"), + ); + const newMysql = await createMysql({ ...mysql, + appName: newAppName, name: input.duplicateInSameProject ? `${mysql.name} (copy)` : mysql.name, @@ -541,9 +574,17 @@ export const projectRouter = createTRPCRouter({ break; } case "redis": { - const { redisId, mounts, ...redis } = await findRedisById(id); + const { redisId, mounts, appName, ...redis } = + await findRedisById(id); + + const newAppName = appName.substring( + 0, + appName.lastIndexOf("-"), + ); + const newRedis = await createRedis({ ...redis, + appName: newAppName, name: input.duplicateInSameProject ? `${redis.name} (copy)` : redis.name, @@ -562,10 +603,17 @@ export const projectRouter = createTRPCRouter({ break; } case "compose": { - const { composeId, mounts, domains, ...compose } = + const { composeId, mounts, domains, appName, ...compose } = await findComposeById(id); + + const newAppName = appName.substring( + 0, + appName.lastIndexOf("-"), + ); + const newCompose = await createCompose({ ...compose, + appName: newAppName, name: input.duplicateInSameProject ? `${compose.name} (copy)` : compose.name, diff --git a/apps/dokploy/tailwind.config.ts b/apps/dokploy/tailwind.config.ts index 4a7ec8ac0..15ea693d3 100644 --- a/apps/dokploy/tailwind.config.ts +++ b/apps/dokploy/tailwind.config.ts @@ -23,7 +23,7 @@ const config = { sans: ["var(--font-inter)", ...defaultTheme.fontFamily.sans], }, screens: { - "3xl": "120rem", + "3xl": "1920px", }, maxWidth: { "2xl": "40rem", diff --git a/apps/schedules/package.json b/apps/schedules/package.json index c7f458d20..c7823f112 100644 --- a/apps/schedules/package.json +++ b/apps/schedules/package.json @@ -9,25 +9,25 @@ }, "dependencies": { "@dokploy/server": "workspace:*", - "@hono/node-server": "^1.12.1", + "@hono/node-server": "^1.14.3", "@hono/zod-validator": "0.3.0", "bullmq": "5.4.2", - "dotenv": "^16.3.1", - "drizzle-orm": "^0.39.1", - "hono": "^4.5.8", + "dotenv": "^16.4.5", + "drizzle-orm": "^0.39.3", + "hono": "^4.7.10", "ioredis": "5.4.1", "pino": "9.4.0", "pino-pretty": "11.2.2", "react": "18.2.0", "react-dom": "18.2.0", - "zod": "^3.23.4" + "zod": "^3.25.32" }, "devDependencies": { - "@types/node": "^20.11.17", - "@types/react": "^18.2.37", - "@types/react-dom": "^18.2.15", - "tsx": "^4.7.1", - "typescript": "^5.4.2" + "@types/node": "^20.17.51", + "@types/react": "^18.3.5", + "@types/react-dom": "^18.3.0", + "tsx": "^4.16.2", + "typescript": "^5.8.3" }, "packageManager": "pnpm@9.5.0" } diff --git a/package.json b/package.json index 53ff00643..f628e09fd 100644 --- a/package.json +++ b/package.json @@ -21,13 +21,13 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@commitlint/cli": "^19.3.0", - "@commitlint/config-conventional": "^19.2.2", - "@types/node": "^18.17.0", + "@commitlint/cli": "^19.8.1", + "@commitlint/config-conventional": "^19.8.1", + "@types/node": "^18.19.104", "dotenv": "16.4.5", "esbuild": "0.20.2", "lefthook": "1.8.4", - "lint-staged": "^15.2.7", + "lint-staged": "^15.5.2", "tsx": "4.16.2" }, "packageManager": "pnpm@9.5.0", diff --git a/packages/server/package.json b/packages/server/package.json index 782d67a00..fcc4622d0 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -28,23 +28,23 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@ai-sdk/anthropic": "^1.0.6", - "@ai-sdk/azure": "^1.0.15", - "@ai-sdk/cohere": "^1.0.6", + "@ai-sdk/anthropic": "^1.2.12", + "@ai-sdk/azure": "^1.3.23", + "@ai-sdk/cohere": "^1.2.10", "@ai-sdk/deepinfra": "^0.0.4", - "@ai-sdk/mistral": "^1.0.6", - "@ai-sdk/openai": "^1.0.12", + "@ai-sdk/mistral": "^1.2.8", + "@ai-sdk/openai": "^1.3.22", "@ai-sdk/openai-compatible": "^0.0.13", "@better-auth/utils": "0.2.4", "@faker-js/faker": "^8.4.1", - "@octokit/auth-app": "^6.0.4", - "@octokit/rest": "^20.0.2", + "@octokit/auth-app": "^6.1.3", + "@octokit/rest": "^20.1.2", "@oslojs/crypto": "1.0.1", "@oslojs/encoding": "1.1.0", "@react-email/components": "^0.0.21", - "@trpc/server": "^10.43.6", - "adm-zip": "^0.5.14", - "ai": "^4.0.23", + "@trpc/server": "^10.45.2", + "adm-zip": "^0.5.16", + "ai": "^4.3.16", "bcrypt": "5.1.1", "better-auth": "v1.2.8-beta.7", "bl": "6.0.11", @@ -53,25 +53,25 @@ "dockerode": "4.0.2", "dotenv": "16.4.5", "drizzle-dbml-generator": "0.10.0", - "drizzle-orm": "^0.39.1", + "drizzle-orm": "^0.39.3", "drizzle-zod": "0.5.1", "hi-base32": "^0.5.1", "js-yaml": "4.1.0", "lodash": "4.17.21", "micromatch": "4.0.8", - "nanoid": "3", + "nanoid": "3.3.11", "node-os-utils": "1.3.7", "node-pty": "1.0.0", "node-schedule": "2.1.1", "nodemailer": "6.9.14", "octokit": "3.1.2", - "ollama-ai-provider": "^1.1.0", - "otpauth": "^9.2.3", + "ollama-ai-provider": "^1.2.0", + "otpauth": "^9.4.0", "pino": "9.4.0", "pino-pretty": "11.2.2", "postgres": "3.4.4", "public-ip": "6.0.2", - "qrcode": "^1.5.3", + "qrcode": "^1.5.4", "react": "18.2.0", "react-dom": "18.2.0", "rotating-file-stream": "3.2.3", @@ -79,31 +79,31 @@ "ssh2": "1.15.0", "toml": "3.0.0", "ws": "8.16.0", - "zod": "^3.23.4" + "zod": "^3.25.32" }, "devDependencies": { - "@types/adm-zip": "^0.5.5", + "@types/adm-zip": "^0.5.7", "@types/bcrypt": "5.0.2", "@types/dockerode": "3.3.23", "@types/js-yaml": "4.0.9", "@types/lodash": "4.17.4", "@types/micromatch": "4.0.9", - "@types/node": "^18.17.0", + "@types/node": "^18.19.104", "@types/node-os-utils": "1.3.4", "@types/node-schedule": "2.1.6", - "@types/nodemailer": "^6.4.15", + "@types/nodemailer": "^6.4.17", "@types/qrcode": "^1.5.5", - "@types/react": "^18.2.37", - "@types/react-dom": "^18.2.15", + "@types/react": "^18.3.5", + "@types/react-dom": "^18.3.0", "@types/ssh2": "1.15.1", "@types/ws": "8.5.10", - "drizzle-kit": "^0.30.4", + "drizzle-kit": "^0.30.6", "esbuild": "0.20.2", "esbuild-plugin-alias": "0.2.1", - "postcss": "^8.4.31", - "tailwindcss": "^3.4.1", + "postcss": "^8.5.3", + "tailwindcss": "^3.4.17", "tsc-alias": "1.8.10", - "tsx": "^4.7.1", - "typescript": "^5.4.2" + "tsx": "^4.16.2", + "typescript": "^5.8.3" } } \ No newline at end of file diff --git a/packages/server/src/setup/monitoring-setup.ts b/packages/server/src/setup/monitoring-setup.ts index 6e56b31cc..20055be9a 100644 --- a/packages/server/src/setup/monitoring-setup.ts +++ b/packages/server/src/setup/monitoring-setup.ts @@ -30,6 +30,9 @@ export const setupMonitoring = async (serverId: string) => { // PidMode: "host", // CapAdd: ["NET_ADMIN", "SYS_ADMIN"], // Privileged: true, + RestartPolicy: { + Name: "always", + }, PortBindings: { [`${server.metricsConfig.server.port}/tcp`]: [ { @@ -103,6 +106,9 @@ export const setupWebMonitoring = async (userId: string) => { // PidMode: "host", // CapAdd: ["NET_ADMIN", "SYS_ADMIN"], // Privileged: true, + RestartPolicy: { + Name: "always", + }, PortBindings: { [`${user?.metricsConfig?.server?.port}/tcp`]: [ { diff --git a/packages/server/src/utils/providers/gitlab.ts b/packages/server/src/utils/providers/gitlab.ts index 7f14e008a..369951699 100644 --- a/packages/server/src/utils/providers/gitlab.ts +++ b/packages/server/src/utils/providers/gitlab.ts @@ -84,6 +84,24 @@ export type ApplicationWithGitlab = InferResultType< export type ComposeWithGitlab = InferResultType<"compose", { gitlab: true }>; +export type GitlabInfo = + | ApplicationWithGitlab["gitlab"] + | ComposeWithGitlab["gitlab"]; + +const getGitlabRepoClone = ( + gitlab: GitlabInfo, + gitlabPathNamespace: string | null, +) => { + const repoClone = `${gitlab?.gitlabUrl.replace(/^https?:\/\//, "")}/${gitlabPathNamespace}.git`; + return repoClone; +}; + +const getGitlabCloneUrl = (gitlab: GitlabInfo, repoClone: string) => { + const isSecure = gitlab?.gitlabUrl.startsWith("https://"); + const cloneUrl = `http${isSecure ? "s" : ""}://oauth2:${gitlab?.accessToken}@${repoClone}`; + return cloneUrl; +}; + export const cloneGitlabRepository = async ( entity: ApplicationWithGitlab | ComposeWithGitlab, logPath: string, @@ -128,11 +146,10 @@ export const cloneGitlabRepository = async ( const basePath = isCompose ? COMPOSE_PATH : APPLICATIONS_PATH; const outputPath = join(basePath, appName, "code"); await recreateDirectory(outputPath); - const repoclone = `${gitlab?.gitlabUrl.replace(/^https?:\/\//, "")}/${gitlabPathNamespace}.git`; - const cloneUrl = `https://oauth2:${gitlab?.accessToken}@${repoclone}`; - + const repoClone = getGitlabRepoClone(gitlab, gitlabPathNamespace); + const cloneUrl = getGitlabCloneUrl(gitlab, repoClone); try { - writeStream.write(`\nCloning Repo ${repoclone} to ${outputPath}: ✅\n`); + writeStream.write(`\nCloning Repo ${repoClone} to ${outputPath}: ✅\n`); const cloneArgs = [ "clone", "--branch", @@ -150,7 +167,7 @@ export const cloneGitlabRepository = async ( writeStream.write(data); } }); - writeStream.write(`\nCloned ${repoclone}: ✅\n`); + writeStream.write(`\nCloned ${repoClone}: ✅\n`); } catch (error) { writeStream.write(`ERROR Cloning: ${error}: ❌`); throw error; @@ -221,17 +238,16 @@ export const getGitlabCloneCommand = async ( const basePath = isCompose ? COMPOSE_PATH : APPLICATIONS_PATH; const outputPath = join(basePath, appName, "code"); await recreateDirectory(outputPath); - const repoclone = `${gitlab?.gitlabUrl.replace(/^https?:\/\//, "")}/${gitlabPathNamespace}.git`; - const cloneUrl = `https://oauth2:${gitlab?.accessToken}@${repoclone}`; - + const repoClone = getGitlabRepoClone(gitlab, gitlabPathNamespace); + const cloneUrl = getGitlabCloneUrl(gitlab, repoClone); const cloneCommand = ` rm -rf ${outputPath}; mkdir -p ${outputPath}; if ! git clone --branch ${gitlabBranch} --depth 1 ${enableSubmodules ? "--recurse-submodules" : ""} --progress ${cloneUrl} ${outputPath} >> ${logPath} 2>&1; then - echo "❌ [ERROR] Fail to clone the repository ${repoclone}" >> ${logPath}; + echo "❌ [ERROR] Fail to clone the repository ${repoClone}" >> ${logPath}; exit 1; fi -echo "Cloned ${repoclone} to ${outputPath}: ✅" >> ${logPath}; +echo "Cloned ${repoClone} to ${outputPath}: ✅" >> ${logPath}; `; return cloneCommand; @@ -340,11 +356,8 @@ export const cloneRawGitlabRepository = async (entity: Compose) => { const basePath = COMPOSE_PATH; const outputPath = join(basePath, appName, "code"); await recreateDirectory(outputPath); - const gitlabUrl = gitlabProvider.gitlabUrl; - // What happen with oauth in self hosted instances? - const repoclone = `${gitlabUrl.replace(/^https?:\/\//, "")}/${gitlabPathNamespace}.git`; - const cloneUrl = `https://oauth2:${gitlabProvider?.accessToken}@${repoclone}`; - + const repoClone = getGitlabRepoClone(gitlabProvider, gitlabPathNamespace); + const cloneUrl = getGitlabCloneUrl(gitlabProvider, repoClone); try { const cloneArgs = [ "clone", @@ -390,8 +403,8 @@ export const cloneRawGitlabRepositoryRemote = async (compose: Compose) => { await refreshGitlabToken(gitlabId); const basePath = COMPOSE_PATH; const outputPath = join(basePath, appName, "code"); - const repoclone = `${gitlabProvider.gitlabUrl.replace(/^https?:\/\//, "")}/${gitlabPathNamespace}.git`; - const cloneUrl = `https://oauth2:${gitlabProvider?.accessToken}@${repoclone}`; + const repoClone = getGitlabRepoClone(gitlabProvider, gitlabPathNamespace); + const cloneUrl = getGitlabCloneUrl(gitlabProvider, repoClone); try { const command = ` rm -rf ${outputPath}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2236ef5ad..46ef96acc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,13 +16,13 @@ importers: specifier: 1.9.4 version: 1.9.4 '@commitlint/cli': - specifier: ^19.3.0 + specifier: ^19.8.1 version: 19.8.1(@types/node@18.19.104)(typescript@5.8.3) '@commitlint/config-conventional': - specifier: ^19.2.2 + specifier: ^19.8.1 version: 19.8.1 '@types/node': - specifier: ^18.17.0 + specifier: ^18.19.104 version: 18.19.104 dotenv: specifier: 16.4.5 @@ -34,7 +34,7 @@ importers: specifier: 1.8.4 version: 1.8.4 lint-staged: - specifier: ^15.2.7 + specifier: ^15.5.2 version: 15.5.2 tsx: specifier: 4.16.2 @@ -46,7 +46,7 @@ importers: specifier: workspace:* version: link:../../packages/server '@hono/node-server': - specifier: ^1.12.1 + specifier: ^1.14.3 version: 1.14.3(hono@4.7.10) '@hono/zod-validator': specifier: 0.3.0 @@ -55,10 +55,10 @@ importers: specifier: 1.2.3 version: 1.2.3(redis@4.7.0) dotenv: - specifier: ^16.3.1 + specifier: ^16.4.5 version: 16.4.5 hono: - specifier: ^4.5.8 + specifier: ^4.7.10 version: 4.7.10 pino: specifier: 9.4.0 @@ -76,11 +76,11 @@ importers: specifier: 4.7.0 version: 4.7.0 zod: - specifier: ^3.23.4 + specifier: ^3.25.32 version: 3.25.32 devDependencies: '@types/node': - specifier: ^20.11.17 + specifier: ^20.17.51 version: 20.17.51 '@types/react': specifier: 18.3.5 @@ -89,31 +89,31 @@ importers: specifier: 18.3.0 version: 18.3.0 tsx: - specifier: ^4.7.1 + specifier: ^4.16.2 version: 4.16.2 typescript: - specifier: ^5.4.2 + specifier: ^5.8.3 version: 5.8.3 apps/dokploy: dependencies: '@ai-sdk/anthropic': - specifier: ^1.0.6 + specifier: ^1.2.12 version: 1.2.12(zod@3.25.32) '@ai-sdk/azure': - specifier: ^1.0.15 + specifier: ^1.3.23 version: 1.3.23(zod@3.25.32) '@ai-sdk/cohere': - specifier: ^1.0.6 + specifier: ^1.2.10 version: 1.2.10(zod@3.25.32) '@ai-sdk/deepinfra': specifier: ^0.0.4 version: 0.0.4(zod@3.25.32) '@ai-sdk/mistral': - specifier: ^1.0.6 + specifier: ^1.2.8 version: 1.2.8(zod@3.25.32) '@ai-sdk/openai': - specifier: ^1.0.12 + specifier: ^1.3.22 version: 1.3.22(zod@3.25.32) '@ai-sdk/openai-compatible': specifier: ^0.0.13 @@ -125,10 +125,10 @@ importers: specifier: ^6.0.1 version: 6.0.1 '@codemirror/lang-yaml': - specifier: ^6.1.1 + specifier: ^6.1.2 version: 6.1.2 '@codemirror/language': - specifier: ^6.10.1 + specifier: ^6.11.0 version: 6.11.0 '@codemirror/legacy-modes': specifier: 6.4.0 @@ -146,70 +146,70 @@ importers: specifier: ^8.4.1 version: 8.4.1 '@hookform/resolvers': - specifier: ^3.9.0 + specifier: ^3.10.0 version: 3.10.0(react-hook-form@7.56.4(react@18.2.0)) '@octokit/auth-app': - specifier: ^6.0.4 + specifier: ^6.1.3 version: 6.1.3 '@octokit/webhooks': - specifier: ^13.2.7 + specifier: ^13.9.0 version: 13.9.0 '@radix-ui/react-accordion': specifier: 1.1.2 version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-alert-dialog': - specifier: ^1.0.5 + specifier: ^1.1.14 version: 1.1.14(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-avatar': - specifier: ^1.0.4 + specifier: ^1.1.10 version: 1.1.10(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-checkbox': - specifier: ^1.0.4 + specifier: ^1.3.2 version: 1.3.2(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-collapsible': - specifier: ^1.1.1 + specifier: ^1.1.11 version: 1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-dialog': - specifier: ^1.1.1 + specifier: ^1.1.14 version: 1.1.14(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-dropdown-menu': - specifier: ^2.0.6 + specifier: ^2.1.15 version: 2.1.15(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-label': - specifier: ^2.1.0 + specifier: ^2.1.7 version: 2.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-popover': - specifier: ^1.0.7 + specifier: ^1.1.14 version: 1.1.14(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-progress': - specifier: ^1.0.3 + specifier: ^1.1.7 version: 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-radio-group': - specifier: ^1.2.0 + specifier: ^1.3.7 version: 1.3.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-scroll-area': - specifier: ^1.1.0 + specifier: ^1.2.9 version: 1.2.9(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-select': - specifier: ^2.1.1 + specifier: ^2.2.5 version: 2.2.5(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-separator': - specifier: ^1.1.0 + specifier: ^1.1.7 version: 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': - specifier: ^1.1.0 + specifier: ^1.2.3 version: 1.2.3(@types/react@18.3.5)(react@18.2.0) '@radix-ui/react-switch': - specifier: ^1.0.3 + specifier: ^1.2.5 version: 1.2.5(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-tabs': - specifier: ^1.0.4 + specifier: ^1.1.12 version: 1.1.12(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-toggle': - specifier: ^1.0.3 + specifier: ^1.1.9 version: 1.1.9(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-tooltip': - specifier: ^1.0.7 + specifier: ^1.2.7 version: 1.2.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-email/components': specifier: ^0.0.21 @@ -227,25 +227,25 @@ importers: specifier: ^4.36.1 version: 4.36.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-table': - specifier: ^8.16.0 + specifier: ^8.21.3 version: 8.21.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@trpc/client': - specifier: ^10.43.6 + specifier: ^10.45.2 version: 10.45.2(@trpc/server@10.45.2) '@trpc/next': - specifier: ^10.43.6 + specifier: ^10.45.2 version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/server@10.45.2)(next@15.3.2(@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) '@trpc/react-query': - specifier: ^10.43.6 + specifier: ^10.45.2 version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@trpc/server': - specifier: ^10.43.6 + specifier: ^10.45.2 version: 10.45.2 '@uiw/codemirror-theme-github': - specifier: ^4.22.1 + specifier: ^4.23.12 version: 4.23.12(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.29.0) '@uiw/react-codemirror': - specifier: ^4.22.1 + specifier: ^4.23.12 version: 4.23.12(@babel/runtime@7.27.3)(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.29.0)(codemirror@6.0.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@xterm/addon-attach': specifier: 0.10.0 @@ -254,13 +254,13 @@ importers: specifier: 0.1.0 version: 0.1.0(@xterm/xterm@5.5.0) '@xterm/xterm': - specifier: ^5.4.0 + specifier: ^5.5.0 version: 5.5.0 adm-zip: - specifier: ^0.5.14 + specifier: ^0.5.16 version: 0.5.16 ai: - specifier: ^4.0.23 + specifier: ^4.3.16 version: 4.3.16(react@18.2.0)(zod@3.25.32) bcrypt: specifier: 5.1.1 @@ -278,13 +278,13 @@ importers: specifier: 5.4.2 version: 5.4.2 class-variance-authority: - specifier: ^0.7.0 + specifier: ^0.7.1 version: 0.7.1 clsx: - specifier: ^2.1.0 + specifier: ^2.1.1 version: 2.1.1 cmdk: - specifier: ^0.2.0 + specifier: ^0.2.1 version: 0.2.1(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) copy-to-clipboard: specifier: ^3.3.3 @@ -299,7 +299,7 @@ importers: specifier: 16.4.5 version: 16.4.5 drizzle-orm: - specifier: ^0.39.1 + specifier: ^0.39.3 version: 0.39.3(@opentelemetry/api@1.9.0)(kysely@0.28.2)(postgres@3.4.4) drizzle-zod: specifier: 0.5.1 @@ -311,10 +311,10 @@ importers: specifier: ^0.5.1 version: 0.5.1 i18next: - specifier: ^23.16.4 + specifier: ^23.16.8 version: 23.16.8 input-otp: - specifier: ^1.2.4 + specifier: ^1.4.2 version: 1.4.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) js-cookie: specifier: ^3.0.5 @@ -332,13 +332,13 @@ importers: specifier: 4.0.8 version: 4.0.8 nanoid: - specifier: '3' + specifier: 3.3.11 version: 3.3.11 next: - specifier: ^15.2.4 + specifier: ^15.3.2 version: 15.3.2(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) next-i18next: - specifier: ^15.3.1 + specifier: ^15.4.2 version: 15.4.2(i18next@23.16.8)(next@15.3.2(@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 @@ -359,10 +359,10 @@ importers: specifier: 3.1.2 version: 3.1.2 ollama-ai-provider: - specifier: ^1.1.0 + specifier: ^1.2.0 version: 1.2.0(zod@3.25.32) otpauth: - specifier: ^9.2.3 + specifier: ^9.4.0 version: 9.4.0 pino: specifier: 9.4.0 @@ -377,7 +377,7 @@ importers: specifier: 6.0.2 version: 6.0.2 qrcode: - specifier: ^1.5.3 + specifier: ^1.5.4 version: 1.5.4 react: specifier: 18.2.0 @@ -392,16 +392,16 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) react-hook-form: - specifier: ^7.52.1 + specifier: ^7.56.4 version: 7.56.4(react@18.2.0) react-i18next: - specifier: ^15.1.0 + 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.0.1 + specifier: ^9.1.0 version: 9.1.0(@types/react@18.3.5)(react@18.2.0) recharts: - specifier: ^2.12.7 + specifier: ^2.15.3 version: 2.15.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) rotating-file-stream: specifier: 3.2.3 @@ -410,7 +410,7 @@ importers: specifier: ^1.6.6 version: 1.6.6 sonner: - specifier: ^1.5.0 + specifier: ^1.7.4 version: 1.7.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) ssh2: specifier: 1.15.0 @@ -419,13 +419,13 @@ importers: specifier: 17.2.0 version: 17.2.0 superjson: - specifier: ^2.2.1 + specifier: ^2.2.2 version: 2.2.2 swagger-ui-react: - specifier: ^5.17.14 + specifier: ^5.22.0 version: 5.22.0(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) tailwind-merge: - specifier: ^2.2.0 + specifier: ^2.6.0 version: 2.6.0 tailwindcss-animate: specifier: ^1.0.7 @@ -434,7 +434,7 @@ importers: specifier: 3.0.0 version: 3.0.0 undici: - specifier: ^6.19.2 + specifier: ^6.21.3 version: 6.21.3 use-resize-observer: specifier: 9.1.0 @@ -446,14 +446,14 @@ importers: specifier: ^0.8.0 version: 0.8.0(xterm@5.3.0) zod: - specifier: ^3.23.4 + specifier: ^3.25.32 version: 3.25.32 zod-form-data: - specifier: ^2.0.2 + specifier: ^2.0.7 version: 2.0.7(zod@3.25.32) devDependencies: '@types/adm-zip': - specifier: ^0.5.5 + specifier: ^0.5.7 version: 0.5.7 '@types/bcrypt': specifier: 5.0.2 @@ -471,7 +471,7 @@ importers: specifier: 4.0.9 version: 4.0.9 '@types/node': - specifier: ^18.17.0 + specifier: ^18.19.104 version: 18.19.104 '@types/node-os-utils': specifier: 1.3.4 @@ -480,7 +480,7 @@ importers: specifier: 2.1.6 version: 2.1.6 '@types/nodemailer': - specifier: ^6.4.15 + specifier: ^6.4.17 version: 6.4.17 '@types/qrcode': specifier: ^1.5.5 @@ -495,7 +495,7 @@ importers: specifier: 1.15.1 version: 1.15.1 '@types/swagger-ui-react': - specifier: ^4.18.3 + specifier: ^4.19.0 version: 4.19.0 '@types/ws': specifier: 8.5.10 @@ -504,31 +504,31 @@ importers: specifier: 10.4.12 version: 10.4.12(postcss@8.5.3) drizzle-kit: - specifier: ^0.30.4 + specifier: ^0.30.6 version: 0.30.6 esbuild: specifier: 0.20.2 version: 0.20.2 lint-staged: - specifier: ^15.2.7 + specifier: ^15.5.2 version: 15.5.2 memfs: - specifier: ^4.11.0 + specifier: ^4.17.2 version: 4.17.2 tailwindcss: - specifier: ^3.4.1 + specifier: ^3.4.17 version: 3.4.17 tsx: - specifier: ^4.7.0 + specifier: ^4.16.2 version: 4.16.2 typescript: - specifier: ^5.4.2 + specifier: ^5.8.3 version: 5.8.3 vite-tsconfig-paths: specifier: 4.3.2 version: 4.3.2(typescript@5.8.3)(vite@5.4.19(@types/node@18.19.104)) vitest: - specifier: ^1.6.0 + specifier: ^1.6.1 version: 1.6.1(@types/node@18.19.104) apps/schedules: @@ -537,7 +537,7 @@ importers: specifier: workspace:* version: link:../../packages/server '@hono/node-server': - specifier: ^1.12.1 + specifier: ^1.14.3 version: 1.14.3(hono@4.7.10) '@hono/zod-validator': specifier: 0.3.0 @@ -546,13 +546,13 @@ importers: specifier: 5.4.2 version: 5.4.2 dotenv: - specifier: ^16.3.1 + specifier: ^16.4.5 version: 16.4.5 drizzle-orm: - specifier: ^0.39.1 + specifier: ^0.39.3 version: 0.39.3(@opentelemetry/api@1.9.0)(kysely@0.28.2)(postgres@3.4.4) hono: - specifier: ^4.5.8 + specifier: ^4.7.10 version: 4.7.10 ioredis: specifier: 5.4.1 @@ -570,11 +570,11 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) zod: - specifier: ^3.23.4 + specifier: ^3.25.32 version: 3.25.32 devDependencies: '@types/node': - specifier: ^20.11.17 + specifier: ^20.17.51 version: 20.17.51 '@types/react': specifier: 18.3.5 @@ -583,31 +583,31 @@ importers: specifier: 18.3.0 version: 18.3.0 tsx: - specifier: ^4.7.1 + specifier: ^4.16.2 version: 4.16.2 typescript: - specifier: ^5.4.2 + specifier: ^5.8.3 version: 5.8.3 packages/server: dependencies: '@ai-sdk/anthropic': - specifier: ^1.0.6 + specifier: ^1.2.12 version: 1.2.12(zod@3.25.32) '@ai-sdk/azure': - specifier: ^1.0.15 + specifier: ^1.3.23 version: 1.3.23(zod@3.25.32) '@ai-sdk/cohere': - specifier: ^1.0.6 + specifier: ^1.2.10 version: 1.2.10(zod@3.25.32) '@ai-sdk/deepinfra': specifier: ^0.0.4 version: 0.0.4(zod@3.25.32) '@ai-sdk/mistral': - specifier: ^1.0.6 + specifier: ^1.2.8 version: 1.2.8(zod@3.25.32) '@ai-sdk/openai': - specifier: ^1.0.12 + specifier: ^1.3.22 version: 1.3.22(zod@3.25.32) '@ai-sdk/openai-compatible': specifier: ^0.0.13 @@ -619,10 +619,10 @@ importers: specifier: ^8.4.1 version: 8.4.1 '@octokit/auth-app': - specifier: ^6.0.4 + specifier: ^6.1.3 version: 6.1.3 '@octokit/rest': - specifier: ^20.0.2 + specifier: ^20.1.2 version: 20.1.2 '@oslojs/crypto': specifier: 1.0.1 @@ -634,13 +634,13 @@ importers: specifier: ^0.0.21 version: 0.0.21(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@trpc/server': - specifier: ^10.43.6 + specifier: ^10.45.2 version: 10.45.2 adm-zip: - specifier: ^0.5.14 + specifier: ^0.5.16 version: 0.5.16 ai: - specifier: ^4.0.23 + specifier: ^4.3.16 version: 4.3.16(react@18.2.0)(zod@3.25.32) bcrypt: specifier: 5.1.1 @@ -667,7 +667,7 @@ importers: specifier: 0.10.0 version: 0.10.0(drizzle-orm@0.39.3(@opentelemetry/api@1.9.0)(kysely@0.28.2)(postgres@3.4.4)) drizzle-orm: - specifier: ^0.39.1 + specifier: ^0.39.3 version: 0.39.3(@opentelemetry/api@1.9.0)(kysely@0.28.2)(postgres@3.4.4) drizzle-zod: specifier: 0.5.1 @@ -685,7 +685,7 @@ importers: specifier: 4.0.8 version: 4.0.8 nanoid: - specifier: '3' + specifier: 3.3.11 version: 3.3.11 node-os-utils: specifier: 1.3.7 @@ -703,10 +703,10 @@ importers: specifier: 3.1.2 version: 3.1.2 ollama-ai-provider: - specifier: ^1.1.0 + specifier: ^1.2.0 version: 1.2.0(zod@3.25.32) otpauth: - specifier: ^9.2.3 + specifier: ^9.4.0 version: 9.4.0 pino: specifier: 9.4.0 @@ -721,7 +721,7 @@ importers: specifier: 6.0.2 version: 6.0.2 qrcode: - specifier: ^1.5.3 + specifier: ^1.5.4 version: 1.5.4 react: specifier: 18.2.0 @@ -745,11 +745,11 @@ importers: specifier: 8.16.0 version: 8.16.0 zod: - specifier: ^3.23.4 + specifier: ^3.25.32 version: 3.25.32 devDependencies: '@types/adm-zip': - specifier: ^0.5.5 + specifier: ^0.5.7 version: 0.5.7 '@types/bcrypt': specifier: 5.0.2 @@ -767,7 +767,7 @@ importers: specifier: 4.0.9 version: 4.0.9 '@types/node': - specifier: ^18.17.0 + specifier: ^18.19.104 version: 18.19.104 '@types/node-os-utils': specifier: 1.3.4 @@ -776,7 +776,7 @@ importers: specifier: 2.1.6 version: 2.1.6 '@types/nodemailer': - specifier: ^6.4.15 + specifier: ^6.4.17 version: 6.4.17 '@types/qrcode': specifier: ^1.5.5 @@ -794,7 +794,7 @@ importers: specifier: 8.5.10 version: 8.5.10 drizzle-kit: - specifier: ^0.30.4 + specifier: ^0.30.6 version: 0.30.6 esbuild: specifier: 0.20.2 @@ -803,19 +803,19 @@ importers: specifier: 0.2.1 version: 0.2.1 postcss: - specifier: ^8.4.31 + specifier: ^8.5.3 version: 8.5.3 tailwindcss: - specifier: ^3.4.1 + specifier: ^3.4.17 version: 3.4.17 tsc-alias: specifier: 1.8.10 version: 1.8.10 tsx: - specifier: ^4.7.1 + specifier: ^4.16.2 version: 4.16.2 typescript: - specifier: ^5.4.2 + specifier: ^5.8.3 version: 5.8.3 packages: @@ -9780,13 +9780,13 @@ snapshots: '@types/adm-zip@0.5.7': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/aws-lambda@8.10.149': {} '@types/bcrypt@5.0.2': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/braces@3.0.5': {} @@ -9794,7 +9794,7 @@ snapshots: '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/d3-array@3.2.1': {} @@ -9828,13 +9828,13 @@ snapshots: '@types/docker-modem@3.0.6': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/ssh2': 1.15.1 '@types/dockerode@3.3.23': dependencies: '@types/docker-modem': 3.0.6 - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/estree-jsx@1.0.5': dependencies: @@ -9864,7 +9864,7 @@ snapshots: '@types/jsonwebtoken@9.0.9': dependencies: '@types/ms': 2.1.0 - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/lodash@4.17.4': {} @@ -9882,7 +9882,7 @@ snapshots: '@types/node-schedule@2.1.6': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/node@18.19.104': dependencies: @@ -9894,13 +9894,13 @@ snapshots: '@types/nodemailer@6.4.17': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/prop-types@15.7.14': {} '@types/qrcode@1.5.5': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/ramda@0.30.2': dependencies: @@ -9917,7 +9917,7 @@ snapshots: '@types/readable-stream@4.0.20': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@types/ssh2@1.15.1': dependencies: @@ -9938,7 +9938,7 @@ snapshots: '@types/ws@8.5.10': dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 '@uiw/codemirror-extensions-basic-setup@4.23.12(@codemirror/autocomplete@6.18.6)(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/lint@6.8.5)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.29.0)': dependencies: @@ -13223,7 +13223,7 @@ snapshots: stripe@17.2.0: dependencies: - '@types/node': 18.19.104 + '@types/node': 20.17.51 qs: 6.14.0 style-mod@4.1.2: {}