From 021bd5cdc1a33e56a55c820bb0a8ad47ce7896f6 Mon Sep 17 00:00:00 2001
From: 0xFirekeeper <0xFirekeeper@gmail.com>
Date: Wed, 29 Jul 2026 10:45:02 +0700
Subject: [PATCH 1/2] allow managed rotation as an option
---
.../components/rotate-admin-key.client.tsx | 74 +++++++++++++++++--
1 file changed, 66 insertions(+), 8 deletions(-)
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx
index d0610d0d06e..8b71075d6ec 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx
@@ -23,6 +23,7 @@ import {
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
+import { Input } from "@/components/ui/input";
import { Spinner } from "@/components/ui/Spinner";
import { useDashboardRouter } from "@/lib/DashboardRouter";
import { cn } from "@/lib/utils";
@@ -38,13 +39,17 @@ export default function RotateAdminKeyButton(props: {
const [modalOpen, setModalOpen] = useState(false);
const [keysConfirmed, setKeysConfirmed] = useState(false);
const [keysDownloaded, setKeysDownloaded] = useState(false);
+ const [stayManaged, setStayManaged] = useState(props.isManagedVault);
+ const [secretKeyInput, setSecretKeyInput] = useState("");
const router = useDashboardRouter();
+ const willStayManaged = stayManaged && secretKeyInput.trim().length > 0;
+
const rotateAdminKeyMutation = useMutation({
mutationFn: async () => {
- // passing no secret key means we're rotating the admin key and deleting any stored keys
const result = await rotateVaultAccountAndAccessToken({
project: props.project,
+ projectSecretKey: willStayManaged ? secretKeyInput.trim() : undefined,
});
return {
@@ -105,12 +110,12 @@ export default function RotateAdminKeyButton(props: {
variant="outline"
>
{isLoading && }
- {!isLoading && props.isManagedVault ? (
-
- ) : (
+ {!isLoading && !props.isManagedVault ? (
+ ) : (
+
)}
- {props.isManagedVault ? "Eject From Managed Vault" : "Rotate Admin Key"}
+ Rotate Admin Key
+ {missingSecretKey && (
+
+ Enter your project secret key to keep this vault
+ managed, or uncheck the box above to eject.
+
+ )}
>
) : (
@@ -319,7 +326,7 @@ export default function RotateAdminKeyButton(props: {
Cancel