mirror of
https://github.com/dokploy/dokploy.git
synced 2026-06-13 19:09:49 +00:00
a07106d649
* fix(migrate-auth-secret): exit cleanly when there are no 2FA records The empty-records branch of `main()` returned without calling `process.exit(0)`, leaving the Drizzle Postgres connection pool holding the event loop open. The `migrate-auth-secret` process then hangs indefinitely after printing "No 2FA records found, nothing to migrate." causing the upstream `0.29.3.sh` security migration script (which calls this via `docker exec`) to never reach its final `docker service update` step that mounts the new Docker Secret. Operators end up with the new secret created but the dokploy service still configured with the hardcoded `BETTER_AUTH_SECRET`, while believing the migration completed. Match the success branch a few lines below which already does `process.exit(0)`, and the pattern used in sibling scripts `reset-password.ts` and `reset-2fa.ts`. Closes #4392 * feat(compose): add import from base64 in create service dropdown Adds an "Import" option to the Create Service dropdown that lets users paste a base64-encoded compose export, preview the template (compose YAML, domains, envs, mounts) before confirming, and create the service only on confirm. Adds a `previewTemplate` tRPC procedure that processes the base64 without touching the DB, with server access validation via session. * [autofix.ci] apply automated fixes * Enhance version synchronization workflow to include SDK repository - Updated the GitHub Actions workflow to sync versioning across MCP, CLI, and SDK repositories. - Added steps to bump the version in the SDK repository and regenerate tools from the latest OpenAPI spec. - Improved commit message formatting to include source and release information for all repositories. - Ensured successful synchronization messages for each repository after the version update. * feat(deployment): add readLogs procedure to fetch deployment logs - Introduced a new `readLogs` procedure that allows users to retrieve logs for a specific deployment by providing the deployment ID and an optional tail parameter. - Implemented permission checks to ensure users have access to the requested logs. - Enhanced log retrieval for both cloud and non-cloud environments, utilizing appropriate commands based on the server context. Resolve https://github.com/Dokploy/mcp/issues/14 * feat(deployment): add server access validation for deployment actions - Implemented server access validation in deployment procedures to ensure users can only access deployments associated with their active organization. - Added checks to throw an UNAUTHORIZED error if a user attempts to access a deployment linked to a server outside their organization. This enhancement improves security and access control within the deployment management system. * feat(organization): prevent inviting users with owner role - Added validation to prevent users from being invited with the owner role in the organization and user routers. - Implemented TRPCError responses to ensure proper error handling when attempting to assign the owner role. This change enhances role management and security within the organization structure. https://github.com/Dokploy/dokploy/security/advisories/GHSA-fm9p-wmpw-gxjh * feat(user): implement session cleanup on user update - Added functionality to delete old sessions when a user updates their password, ensuring that only the current session remains active. - This change enhances security by preventing unauthorized access from previous sessions after a password change. Close here https://github.com/Dokploy/dokploy/security/advisories/GHSA-rr9m-w87g-46f3 * feat(settings): add copy button to server IP in web server settings (#4397) * fix: copy Dokploy server IP when clicking server badge (#4390) * fix: copy Dokploy server IP when clicking server badge When a service runs on the local Dokploy server (no remote server), clicking the server badge did nothing because `data.server` is null. Now falls back to the server IP from settings so the badge always copies an IP address. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(copy-ip): implement IP address copying functionality across database service components - Added the ability to copy the server IP address to the clipboard when clicking the server badge in various database service components (Libsql, MariaDB, MongoDB, MySQL, PostgreSQL, Redis). - Integrated the `copy-to-clipboard` library and `sonner` for user feedback upon successful copy action. - Ensured fallback to the server IP from settings when the service data is not available, enhancing user experience and functionality. --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Mauricio Siu <siumauricio@icloud.com> * fix: responsive layout (#4391) Signed-off-by: Nahidujjaman Hridoy <hridoyboss12@gmail.com> * fix: automatically converting username to lowercase both in creation of register, and build for extra. (#4382) * fix: allow square brackets in zip path validation for Next.js dynamic routes (#4468) * fix: allow square brackets in zip drop path validation for Next.js dynamic routes ZIP uploads containing Next.js dynamic route files (e.g. app/api/[id]/route.ts, pages/[slug].tsx) were rejected by readValidDirectory because the path regex did not include square bracket characters. * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> * fix: prevent webhook deploy crash when commit data lacks modified files (#4470) shouldDeploy passed undefined/null entries from commit.modified straight into micromatch, which throws "Expected input to be a string" and fails every webhook deployment when watch paths are configured. Filter out non-string values before matching. * fix: add type="button" to TooltipTrigger in form components to prevent accidental submission (#4422) Co-authored-by: Maks Pikov <mixelburg@users.noreply.github.com> * fix: enable comment toggle shortcut in env variable editor (#4402) (#4473) * fix: add tls=true label for domains when certificateType is none (#4018) (#4474) * fix: add tls=true label for compose domains when certificateType is none (#4018) * test: cover tls=true label for certificateType none, require https * fix: scope tls fix to compose labels, leave traefik file config unchanged (#4018) * chore: update version to v0.29.5 in package.json --------- Signed-off-by: Nahidujjaman Hridoy <hridoyboss12@gmail.com> Co-authored-by: ngenohkevin <ngenohkevin19@gmail.com> Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Co-authored-by: Mauricio Siu <siumauricio@icloud.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Volodymyr Kravchuk <volodymyr.kravch@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Nahidujjaman Hridoy <75487507+nhridoy@users.noreply.github.com> Co-authored-by: Francis <9560564+Baker@users.noreply.github.com> Co-authored-by: mixelburg <52622705+mixelburg@users.noreply.github.com> Co-authored-by: Maks Pikov <mixelburg@users.noreply.github.com>
210 lines
6.9 KiB
JSON
210 lines
6.9 KiB
JSON
{
|
|
"name": "dokploy",
|
|
"version": "v0.29.5",
|
|
"private": true,
|
|
"license": "Apache-2.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"build": "npm run build-server && npm run build-next",
|
|
"start": "node -r dotenv/config dist/migration.mjs && node -r dotenv/config dist/server.mjs",
|
|
"build-server": "tsx esbuild.config.ts",
|
|
"build-next": "next build --webpack",
|
|
"setup": "tsx -r dotenv/config setup.ts && sleep 5 && pnpm run migration:run",
|
|
"wait-for-postgres": "node -r dotenv/config dist/wait-for-postgres.mjs",
|
|
"wait-for-postgres-dev": "tsx -r dotenv/config wait-for-postgres.ts",
|
|
"reset-password": "node -r dotenv/config dist/reset-password.mjs",
|
|
"reset-2fa": "node -r dotenv/config dist/reset-2fa.mjs",
|
|
"migrate-auth-secret": "node -r dotenv/config dist/migrate-auth-secret.mjs",
|
|
"dev": "tsx -r dotenv/config ./server/server.ts --project tsconfig.server.json ",
|
|
"studio": "drizzle-kit studio --config ./server/db/drizzle.config.ts",
|
|
"migration:generate": "drizzle-kit generate --config ./server/db/drizzle.config.ts",
|
|
"migration:run": "tsx -r dotenv/config migration.ts",
|
|
"manual-migration:run": "tsx -r dotenv/config migrate.ts",
|
|
"migration:up": "drizzle-kit up --config ./server/db/drizzle.config.ts",
|
|
"migration:drop": "drizzle-kit drop --config ./server/db/drizzle.config.ts",
|
|
"db:push": "drizzle-kit push --config ./server/db/drizzle.config.ts",
|
|
"db:truncate": "tsx -r dotenv/config ./server/db/reset.ts",
|
|
"db:studio": "drizzle-kit studio --config ./server/db/drizzle.config.ts",
|
|
"check": "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true",
|
|
"format": "biome format --write",
|
|
"lint": "biome lint",
|
|
"typecheck": "tsc --noEmit",
|
|
"db:seed": "tsx -r dotenv/config ./server/db/seed.ts",
|
|
"db:clean": "tsx -r dotenv/config ./server/db/reset.ts",
|
|
"docker:build": "./docker/build.sh",
|
|
"docker:push": "./docker/push.sh",
|
|
"docker:build:canary": "./docker/build.sh canary",
|
|
"docker:push:canary": "./docker/push.sh canary",
|
|
"version": "echo $(node -p \"require('./package.json').version\")",
|
|
"test": "vitest --config __test__/vitest.config.ts",
|
|
"generate:openapi": "tsx -r dotenv/config scripts/generate-openapi.ts"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/anthropic": "^3.0.44",
|
|
"@ai-sdk/azure": "^3.0.30",
|
|
"@ai-sdk/cohere": "^3.0.21",
|
|
"@ai-sdk/deepinfra": "^2.0.34",
|
|
"@ai-sdk/mistral": "^3.0.20",
|
|
"@ai-sdk/openai": "^3.0.29",
|
|
"@ai-sdk/openai-compatible": "^2.0.30",
|
|
"@better-auth/api-key": "1.5.4",
|
|
"@better-auth/sso": "1.5.4",
|
|
"@codemirror/autocomplete": "^6.18.6",
|
|
"@codemirror/lang-css": "^6.3.1",
|
|
"@codemirror/lang-json": "^6.0.1",
|
|
"@codemirror/lang-yaml": "^6.1.2",
|
|
"@codemirror/language": "^6.11.0",
|
|
"@codemirror/legacy-modes": "6.4.0",
|
|
"@codemirror/search": "^6.6.0",
|
|
"@codemirror/view": "^6.39.15",
|
|
"@dokploy/server": "workspace:*",
|
|
"@dokploy/trpc-openapi": "0.0.18",
|
|
"@faker-js/faker": "^8.4.1",
|
|
"@hookform/resolvers": "^5.2.2",
|
|
"@octokit/auth-app": "^6.1.3",
|
|
"@octokit/webhooks": "^13.9.0",
|
|
"@radix-ui/react-accordion": "1.1.2",
|
|
"@radix-ui/react-alert-dialog": "^1.1.14",
|
|
"@radix-ui/react-avatar": "^1.1.10",
|
|
"@radix-ui/react-checkbox": "^1.3.2",
|
|
"@radix-ui/react-collapsible": "^1.1.11",
|
|
"@radix-ui/react-context-menu": "^2.2.16",
|
|
"@radix-ui/react-dialog": "^1.1.14",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
|
"@radix-ui/react-label": "^2.1.7",
|
|
"@radix-ui/react-popover": "^1.1.14",
|
|
"@radix-ui/react-progress": "^1.1.7",
|
|
"@radix-ui/react-radio-group": "^1.3.7",
|
|
"@radix-ui/react-scroll-area": "^1.2.9",
|
|
"@radix-ui/react-select": "^2.2.5",
|
|
"@radix-ui/react-separator": "^1.1.7",
|
|
"@radix-ui/react-slot": "^1.2.3",
|
|
"@radix-ui/react-switch": "^1.2.5",
|
|
"@radix-ui/react-tabs": "^1.1.12",
|
|
"@radix-ui/react-toggle": "^1.1.9",
|
|
"@radix-ui/react-tooltip": "^1.2.7",
|
|
"@react-email/components": "^0.0.21",
|
|
"@stepperize/react": "4.0.1",
|
|
"@stripe/stripe-js": "4.8.0",
|
|
"@tailwindcss/typography": "0.5.16",
|
|
"@tanstack/react-query": "^5.90.21",
|
|
"@tanstack/react-table": "^8.21.3",
|
|
"@trpc/client": "^11.10.0",
|
|
"@trpc/next": "^11.10.0",
|
|
"@trpc/react-query": "^11.10.0",
|
|
"@trpc/server": "^11.10.0",
|
|
"@uiw/codemirror-theme-github": "^4.23.12",
|
|
"@uiw/react-codemirror": "^4.23.12",
|
|
"@xterm/addon-attach": "0.10.0",
|
|
"@xterm/addon-clipboard": "0.1.0",
|
|
"@xterm/xterm": "^5.5.0",
|
|
"adm-zip": "^0.5.16",
|
|
"ai": "^6.0.86",
|
|
"ai-sdk-ollama": "^3.7.0",
|
|
"bcrypt": "5.1.1",
|
|
"better-auth": "1.5.4",
|
|
"bl": "6.0.11",
|
|
"boxen": "^7.1.1",
|
|
"bullmq": "5.67.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^0.2.1",
|
|
"copy-to-clipboard": "^3.3.3",
|
|
"date-fns": "3.6.0",
|
|
"dockerode": "4.0.2",
|
|
"dompurify": "^3.3.3",
|
|
"dotenv": "16.4.5",
|
|
"drizzle-orm": "0.45.1",
|
|
"drizzle-zod": "0.8.3",
|
|
"fancy-ansi": "^0.1.3",
|
|
"input-otp": "^1.4.2",
|
|
"js-cookie": "^3.0.5",
|
|
"lodash": "4.17.21",
|
|
"lucide-react": "^0.469.0",
|
|
"micromatch": "4.0.8",
|
|
"nanoid": "3.3.11",
|
|
"next": "^16.2.0",
|
|
"next-themes": "^0.2.1",
|
|
"nextjs-toploader": "^3.9.17",
|
|
"node-os-utils": "2.0.1",
|
|
"node-pty": "1.1.0",
|
|
"node-schedule": "2.1.1",
|
|
"nodemailer": "6.9.14",
|
|
"octokit": "3.1.2",
|
|
"pino": "9.4.0",
|
|
"pino-pretty": "11.2.2",
|
|
"postgres": "3.4.4",
|
|
"public-ip": "6.0.2",
|
|
"qrcode": "^1.5.4",
|
|
"react": "18.2.0",
|
|
"react-confetti-explosion": "2.1.2",
|
|
"react-day-picker": "8.10.1",
|
|
"react-dom": "18.2.0",
|
|
"react-hook-form": "^7.71.2",
|
|
"react-markdown": "^9.1.0",
|
|
"recharts": "^2.15.3",
|
|
"resend": "^6.0.2",
|
|
"semver": "7.7.3",
|
|
"shell-quote": "^1.8.1",
|
|
"slugify": "^1.6.6",
|
|
"sonner": "^1.7.4",
|
|
"ssh2": "~1.16.0",
|
|
"stripe": "17.2.0",
|
|
"superjson": "^2.2.2",
|
|
"swagger-ui-react": "^5.31.2",
|
|
"tailwind-merge": "^2.6.0",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"toml": "3.0.0",
|
|
"undici": "^6.21.3",
|
|
"use-resize-observer": "9.1.0",
|
|
"ws": "8.16.0",
|
|
"xterm-addon-fit": "^0.8.0",
|
|
"yaml": "2.8.1",
|
|
"zod": "^4.3.6",
|
|
"zod-form-data": "^3.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/adm-zip": "^0.5.7",
|
|
"@types/bcrypt": "5.0.2",
|
|
"@types/dompurify": "^3.2.0",
|
|
"@types/js-cookie": "^3.0.6",
|
|
"@types/lodash": "4.17.4",
|
|
"@types/micromatch": "4.0.9",
|
|
"@types/node": "^24.4.0",
|
|
"@types/node-schedule": "2.1.6",
|
|
"@types/nodemailer": "^6.4.17",
|
|
"@types/qrcode": "^1.5.5",
|
|
"@types/react": "^18.3.5",
|
|
"@types/react-dom": "^18.3.0",
|
|
"@types/semver": "7.7.1",
|
|
"@types/shell-quote": "^1.7.5",
|
|
"@types/ssh2": "1.15.1",
|
|
"@types/swagger-ui-react": "^4.19.0",
|
|
"@types/ws": "8.5.10",
|
|
"autoprefixer": "10.4.12",
|
|
"drizzle-kit": "^0.31.4",
|
|
"esbuild": "0.20.2",
|
|
"lint-staged": "^15.5.2",
|
|
"memfs": "^4.17.2",
|
|
"simple-icons": "^16.14.0",
|
|
"tailwindcss": "^3.4.17",
|
|
"tsx": "^4.16.2",
|
|
"typescript": "^5.8.3",
|
|
"vite-tsconfig-paths": "4.3.2",
|
|
"vitest": "^4.0.18"
|
|
},
|
|
"ct3aMetadata": {
|
|
"initVersion": "7.25.2"
|
|
},
|
|
"packageManager": "pnpm@10.22.0",
|
|
"engines": {
|
|
"node": "^24.4.0",
|
|
"pnpm": ">=10.22.0"
|
|
},
|
|
"lint-staged": {
|
|
"*": [
|
|
"biome check --write --no-errors-on-unmatched --files-ignore-unknown=true"
|
|
]
|
|
}
|
|
}
|