feat: updated folder, import, approvals and some more to projectid

This commit is contained in:
=
2025-09-12 22:59:57 +05:30
parent fd2b067e14
commit 02dc2e2106
25 changed files with 1380 additions and 267 deletions

View File

@@ -11,7 +11,7 @@ export const useCreateSecretApprovalPolicy = () => {
return useMutation<object, object, TCreateSecretPolicyDTO>({
mutationFn: async ({
environments,
workspaceId,
projectId,
approvals,
approvers,
bypassers,
@@ -20,9 +20,9 @@ export const useCreateSecretApprovalPolicy = () => {
enforcementLevel,
allowedSelfApprovals
}) => {
const { data } = await apiRequest.post("/api/v1/secret-approvals", {
const { data } = await apiRequest.post("/api/v2/secret-approvals", {
environments,
workspaceId,
projectId,
approvals,
approvers,
bypassers,
@@ -33,9 +33,9 @@ export const useCreateSecretApprovalPolicy = () => {
});
return data;
},
onSuccess: (_, { workspaceId }) => {
onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({
queryKey: secretApprovalKeys.getApprovalPolicies(workspaceId)
queryKey: secretApprovalKeys.getApprovalPolicies(projectId)
});
}
});
@@ -56,7 +56,7 @@ export const useUpdateSecretApprovalPolicy = () => {
allowedSelfApprovals,
environments
}) => {
const { data } = await apiRequest.patch(`/api/v1/secret-approvals/${id}`, {
const { data } = await apiRequest.patch(`/api/v2/secret-approvals/${id}`, {
approvals,
approvers,
bypassers,
@@ -68,9 +68,9 @@ export const useUpdateSecretApprovalPolicy = () => {
});
return data;
},
onSuccess: (_, { workspaceId }) => {
onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({
queryKey: secretApprovalKeys.getApprovalPolicies(workspaceId)
queryKey: secretApprovalKeys.getApprovalPolicies(projectId)
});
}
});
@@ -81,12 +81,12 @@ export const useDeleteSecretApprovalPolicy = () => {
return useMutation<object, object, TDeleteSecretPolicyDTO>({
mutationFn: async ({ id }) => {
const { data } = await apiRequest.delete(`/api/v1/secret-approvals/${id}`);
const { data } = await apiRequest.delete(`/api/v2/secret-approvals/${id}`);
return data;
},
onSuccess: (_, { workspaceId }) => {
onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({
queryKey: secretApprovalKeys.getApprovalPolicies(workspaceId)
queryKey: secretApprovalKeys.getApprovalPolicies(projectId)
});
}
});

View File

@@ -10,54 +10,53 @@ import {
} from "./types";
export const secretApprovalKeys = {
getApprovalPolicies: (workspaceId: string) =>
[{ workspaceId }, "secret-approval-policies"] as const,
getApprovalPolicyOfABoard: (workspaceId: string, environment: string, secretPath: string) => [
{ workspaceId, environment, secretPath },
getApprovalPolicies: (projectId: string) => [{ projectId }, "secret-approval-policies"] as const,
getApprovalPolicyOfABoard: (projectId: string, environment: string, secretPath: string) => [
{ projectId, environment, secretPath },
"Secret-approval-policy"
]
};
const fetchApprovalPolicies = async (workspaceId: string) => {
const fetchApprovalPolicies = async (projectId: string) => {
const { data } = await apiRequest.get<{ approvals: TSecretApprovalPolicy[] }>(
"/api/v1/secret-approvals",
{ params: { workspaceId } }
"/api/v2/secret-approvals",
{ params: { projectId } }
);
return data.approvals;
};
export const useGetSecretApprovalPolicies = ({
workspaceId,
projectId,
options = {}
}: TGetSecretApprovalPoliciesDTO & TReactQueryOptions) =>
useQuery({
queryKey: secretApprovalKeys.getApprovalPolicies(workspaceId),
queryFn: () => fetchApprovalPolicies(workspaceId),
queryKey: secretApprovalKeys.getApprovalPolicies(projectId),
queryFn: () => fetchApprovalPolicies(projectId),
...options,
enabled: Boolean(workspaceId) && (options?.enabled ?? true)
enabled: Boolean(projectId) && (options?.enabled ?? true)
});
const fetchApprovalPolicyOfABoard = async (
workspaceId: string,
projectId: string,
environment: string,
secretPath: string
) => {
const { data } = await apiRequest.get<{ policy: TSecretApprovalPolicy }>(
"/api/v1/secret-approvals/board",
{ params: { workspaceId, environment, secretPath } }
"/api/v2/secret-approvals/board",
{ params: { projectId, environment, secretPath } }
);
return data.policy || "";
};
export const useGetSecretApprovalPolicyOfABoard = ({
workspaceId,
projectId,
secretPath = "/",
environment,
options = {}
}: TGetSecretApprovalPolicyOfBoardDTO & TReactQueryOptions) =>
useQuery({
queryKey: secretApprovalKeys.getApprovalPolicyOfABoard(workspaceId, environment, secretPath),
queryFn: () => fetchApprovalPolicyOfABoard(workspaceId, environment, secretPath),
queryKey: secretApprovalKeys.getApprovalPolicyOfABoard(projectId, environment, secretPath),
queryFn: () => fetchApprovalPolicyOfABoard(projectId, environment, secretPath),
...options,
enabled: Boolean(workspaceId && secretPath && environment) && (options?.enabled ?? true)
enabled: Boolean(projectId && secretPath && environment) && (options?.enabled ?? true)
});

View File

@@ -3,7 +3,7 @@ import { WorkspaceEnv } from "../workspace/types";
export type TSecretApprovalPolicy = {
id: string;
workspace: string;
project: string;
name: string;
environments: WorkspaceEnv[];
secretPath?: string;
@@ -36,17 +36,17 @@ export type Bypasser = {
};
export type TGetSecretApprovalPoliciesDTO = {
workspaceId: string;
projectId: string;
};
export type TGetSecretApprovalPolicyOfBoardDTO = {
workspaceId: string;
projectId: string;
environment: string;
secretPath: string;
};
export type TCreateSecretPolicyDTO = {
workspaceId: string;
projectId: string;
name?: string;
environments: string[];
secretPath: string;
@@ -67,12 +67,12 @@ export type TUpdateSecretPolicyDTO = {
allowedSelfApprovals?: boolean;
enforcementLevel?: EnforcementLevel;
// for invalidating list
workspaceId: string;
projectId: string;
environments?: string[];
};
export type TDeleteSecretPolicyDTO = {
id: string;
// for invalidating list
workspaceId: string;
projectId: string;
};

View File

@@ -36,9 +36,9 @@ export const useUpdateSecretApprovalRequestStatus = () => {
});
return data;
},
onSuccess: (_, { id, workspaceId }) => {
onSuccess: (_, { id, projectId }) => {
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.detail({ id }) });
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.count({ workspaceId }) });
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.count({ projectId }) });
}
});
};
@@ -53,10 +53,10 @@ export const usePerformSecretApprovalRequestMerge = () => {
});
return data;
},
onSuccess: (_, { id, workspaceId }) => {
onSuccess: (_, { id, projectId }) => {
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.detail({ id }) });
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.list({ workspaceId }) });
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.count({ workspaceId }) });
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.list({ projectId }) });
queryClient.invalidateQueries({ queryKey: secretApprovalRequestKeys.count({ projectId }) });
}
});
};

View File

@@ -14,7 +14,7 @@ import {
export const secretApprovalRequestKeys = {
list: ({
workspaceId,
projectId,
environment,
status,
committer,
@@ -23,20 +23,20 @@ export const secretApprovalRequestKeys = {
search
}: TGetSecretApprovalRequestList) =>
[
{ workspaceId, environment, status, committer, offset, limit, search },
{ projectId, environment, status, committer, offset, limit, search },
"secret-approval-requests"
] as const,
detail: ({ id }: Omit<TGetSecretApprovalRequestDetails, "decryptKey">) =>
[{ id }, "secret-approval-request-detail"] as const,
count: ({ workspaceId, policyId }: TGetSecretApprovalRequestCount) => [
{ workspaceId },
count: ({ projectId, policyId }: TGetSecretApprovalRequestCount) => [
{ projectId },
"secret-approval-request-count",
...(policyId ? [policyId] : [])
]
};
const fetchSecretApprovalRequestList = async ({
workspaceId,
projectId,
environment,
committer,
status = "open",
@@ -49,7 +49,7 @@ const fetchSecretApprovalRequestList = async ({
totalCount: number;
}>("/api/v1/secret-approval-requests", {
params: {
workspaceId,
projectId,
environment,
committer,
status,
@@ -63,7 +63,7 @@ const fetchSecretApprovalRequestList = async ({
};
export const useGetSecretApprovalRequests = ({
workspaceId,
projectId,
environment,
options = {},
status,
@@ -74,7 +74,7 @@ export const useGetSecretApprovalRequests = ({
}: TGetSecretApprovalRequestList & TReactQueryOptions) =>
useQuery({
queryKey: secretApprovalRequestKeys.list({
workspaceId,
projectId,
environment,
committer,
status,
@@ -84,7 +84,7 @@ export const useGetSecretApprovalRequests = ({
}),
queryFn: () =>
fetchSecretApprovalRequestList({
workspaceId,
projectId,
environment,
status,
committer,
@@ -92,7 +92,7 @@ export const useGetSecretApprovalRequests = ({
offset,
search
}),
enabled: Boolean(workspaceId) && (options?.enabled ?? true),
enabled: Boolean(projectId) && (options?.enabled ?? true),
placeholderData: (previousData) => previousData
});
@@ -127,19 +127,19 @@ export const useGetSecretApprovalRequestDetails = ({
});
const fetchSecretApprovalRequestCount = async ({
workspaceId,
projectId,
policyId
}: TGetSecretApprovalRequestCount) => {
const { data } = await apiRequest.get<{ approvals: TSecretApprovalRequestCount }>(
"/api/v1/secret-approval-requests/count",
{ params: { workspaceId, policyId } }
{ params: { projectId, policyId } }
);
return data.approvals;
};
export const useGetSecretApprovalRequestCount = ({
workspaceId,
projectId,
policyId,
options = {}
}: TGetSecretApprovalRequestCount & {
@@ -154,8 +154,8 @@ export const useGetSecretApprovalRequestCount = ({
>;
}) =>
useQuery({
queryKey: secretApprovalRequestKeys.count({ workspaceId, policyId }),
queryKey: secretApprovalRequestKeys.count({ projectId, policyId }),
refetchInterval: 15000,
queryFn: () => fetchSecretApprovalRequestCount({ workspaceId, policyId }),
enabled: Boolean(workspaceId) && (options?.enabled ?? true)
queryFn: () => fetchSecretApprovalRequestCount({ projectId, policyId }),
enabled: Boolean(projectId) && (options?.enabled ?? true)
});

View File

@@ -55,7 +55,7 @@ export type TSecretApprovalRequest = {
username: string;
isOrgMembershipActive: boolean;
}[];
workspace: string;
project: string;
environment: string;
folderId: string;
secretPath: string;
@@ -110,7 +110,7 @@ export type TSecretApprovalRequestCount = {
};
export type TGetSecretApprovalRequestList = {
workspaceId: string;
projectId: string;
environment?: string;
status?: "open" | "close";
committer?: string;
@@ -120,7 +120,7 @@ export type TGetSecretApprovalRequestList = {
};
export type TGetSecretApprovalRequestCount = {
workspaceId: string;
projectId: string;
policyId?: string;
};
@@ -137,11 +137,11 @@ export type TUpdateSecretApprovalReviewStatusDTO = {
export type TUpdateSecretApprovalRequestStatusDTO = {
status: "open" | "close";
id: string;
workspaceId: string;
projectId: string;
};
export type TPerformSecretApprovalRequestMerge = {
id: string;
workspaceId: string;
projectId: string;
bypassReason?: string;
};

View File

@@ -30,10 +30,10 @@ export const folderQueryKeys = {
["secret-folders", "environment", projectId] as const
};
const fetchProjectFolders = async (workspaceId: string, environment: string, path = "/") => {
const { data } = await apiRequest.get<{ folders: TSecretFolder[] }>("/api/v1/folders", {
const fetchProjectFolders = async (projectId: string, environment: string, path = "/") => {
const { data } = await apiRequest.get<{ folders: TSecretFolder[] }>("/api/v2/folders", {
params: {
workspaceId,
projectId,
environment,
path
}
@@ -145,9 +145,9 @@ export const useCreateFolder = () => {
return useMutation<object, object, TCreateFolderDTO>({
mutationFn: async (dto) => {
const { data } = await apiRequest.post("/api/v1/folders", {
const { data } = await apiRequest.post("/api/v2/folders", {
...dto,
workspaceId: dto.projectId
projectId: dto.projectId
});
return data;
},
@@ -179,10 +179,10 @@ export const useUpdateFolder = () => {
return useMutation<object, object, TUpdateFolderDTO>({
mutationFn: async ({ path = "/", folderId, name, environment, projectId, description }) => {
const { data } = await apiRequest.patch(`/api/v1/folders/${folderId}`, {
const { data } = await apiRequest.patch(`/api/v2/folders/${folderId}`, {
name,
environment,
workspaceId: projectId,
projectId,
path,
description
});
@@ -219,10 +219,10 @@ export const useDeleteFolder = () => {
return useMutation<object, object, TDeleteFolderDTO>({
mutationFn: async ({ path = "/", folderId, environment, projectId }) => {
const { data } = await apiRequest.delete(`/api/v1/folders/${folderId}`, {
const { data } = await apiRequest.delete(`/api/v2/folders/${folderId}`, {
data: {
environment,
workspaceId: projectId,
projectId,
path
}
});
@@ -259,7 +259,7 @@ export const useUpdateFolderBatch = () => {
return useMutation<object, object, TUpdateFolderBatchDTO>({
mutationFn: async ({ projectSlug, folders }) => {
const { data } = await apiRequest.patch("/api/v1/folders/batch", {
const { data } = await apiRequest.patch("/api/v2/folders/batch", {
projectSlug,
folders
});

View File

@@ -16,10 +16,10 @@ export const useCreateSecretImport = () => {
return useMutation<object, object, TCreateSecretImportDTO>({
mutationFn: async ({ import: secretImport, environment, isReplication, projectId, path }) => {
const { data } = await apiRequest.post("/api/v1/secret-imports", {
const { data } = await apiRequest.post("/api/v2/secret-imports", {
import: secretImport,
environment,
workspaceId: projectId,
projectId,
path,
isReplication
});
@@ -44,11 +44,11 @@ export const useUpdateSecretImport = () => {
return useMutation<object, object, TUpdateSecretImportDTO>({
mutationFn: async ({ environment, import: secretImports, projectId, path, id }) => {
const { data } = await apiRequest.patch(`/api/v1/secret-imports/${id}`, {
const { data } = await apiRequest.patch(`/api/v2/secret-imports/${id}`, {
import: secretImports,
environment,
path,
workspaceId: projectId
projectId
});
return data;
},
@@ -69,10 +69,10 @@ export const useUpdateSecretImport = () => {
export const useResyncSecretReplication = () => {
return useMutation<object, object, TResyncSecretReplicationDTO>({
mutationFn: async ({ environment, projectId, path, id }) => {
const { data } = await apiRequest.post(`/api/v1/secret-imports/${id}/replication-resync`, {
const { data } = await apiRequest.post(`/api/v2/secret-imports/${id}/replication-resync`, {
environment,
path,
workspaceId: projectId
projectId
});
return data;
}
@@ -84,9 +84,9 @@ export const useDeleteSecretImport = () => {
return useMutation<object, object, TDeleteSecretImportDTO>({
mutationFn: async ({ id, projectId, path, environment }) => {
const { data } = await apiRequest.delete(`/api/v1/secret-imports/${id}`, {
const { data } = await apiRequest.delete(`/api/v2/secret-imports/${id}`, {
data: {
workspaceId: projectId,
projectId,
path,
environment
}

View File

@@ -30,10 +30,10 @@ export const secretImportKeys = {
const fetchSecretImport = async ({ projectId, environment, path = "/" }: TGetSecretImports) => {
const { data } = await apiRequest.get<{ secretImports: TSecretImport[] }>(
"/api/v1/secret-imports",
"/api/v2/secret-imports",
{
params: {
workspaceId: projectId,
projectId,
environment,
path
}
@@ -65,16 +65,12 @@ export const useGetSecretImports = ({
queryFn: () => fetchSecretImport({ path, projectId, environment })
});
const fetchImportedSecrets = async (
workspaceId: string,
environment: string,
directory?: string
) => {
const fetchImportedSecrets = async (projectId: string, environment: string, directory?: string) => {
const { data } = await apiRequest.get<{ secrets: TImportedSecrets[] }>(
"/api/v1/secret-imports/secrets/raw",
"/api/v2/secret-imports/secrets",
{
params: {
workspaceId,
projectId,
environment,
path: directory
}
@@ -89,10 +85,10 @@ const fetchImportedFolders = async ({
path
}: TGetImportedFoldersByEnvDTO) => {
const { data } = await apiRequest.get<{ secretImports: TSecretImport[] }>(
"/api/v1/secret-imports",
"/api/v2/secret-imports",
{
params: {
workspaceId: projectId,
projectId,
environment,
path
}

View File

@@ -13,8 +13,8 @@ export const useCreateWebhook = () => {
const { data } = await apiRequest.post("/api/v1/webhooks", dto);
return data;
},
onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(workspaceId) });
onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(projectId) });
}
});
};
@@ -27,11 +27,11 @@ export const useTestWebhook = () => {
const { data } = await apiRequest.post(`/api/v1/webhooks/${webhookId}/test`);
return data;
},
onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(workspaceId) });
onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(projectId) });
},
onError: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(workspaceId) });
onError: (_, { projectId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(projectId) });
}
});
};
@@ -46,8 +46,8 @@ export const useUpdateWebhook = () => {
});
return data;
},
onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(workspaceId) });
onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(projectId) });
}
});
};
@@ -60,8 +60,8 @@ export const useDeleteWebhook = () => {
const { data } = await apiRequest.delete(`/api/v1/webhooks/${dto.webhookId}`);
return data;
},
onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(workspaceId) });
onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryKey: queryKeys.getWebhooks(projectId) });
}
});
};

View File

@@ -23,7 +23,7 @@ export type TWebhook = {
};
export type TCreateWebhookDto = {
workspaceId: string;
projectId: string;
environment: string;
webhookUrl: string;
webhookSecretKey?: string;
@@ -33,16 +33,16 @@ export type TCreateWebhookDto = {
export type TUpdateWebhookDto = {
webhookId: string;
workspaceId: string;
projectId: string;
isDisabled?: boolean;
};
export type TDeleteWebhookDto = {
webhookId: string;
workspaceId: string;
projectId: string;
};
export type TTestWebhookDTO = {
webhookId: string;
workspaceId: string;
projectId: string;
};

View File

@@ -62,7 +62,7 @@ export const WebhooksTab = withProjectPermission(
try {
await createWebhook({
...data,
workspaceId
projectId: workspaceId
});
handlePopUpClose("addWebhook");
createNotification({
@@ -82,7 +82,7 @@ export const WebhooksTab = withProjectPermission(
try {
await updateWebhook({
webhookId,
workspaceId,
projectId: workspaceId,
isDisabled
});
createNotification({
@@ -103,7 +103,7 @@ export const WebhooksTab = withProjectPermission(
const webhookId = popUp?.deleteWebhook?.data as string;
await deleteWebhook({
webhookId,
workspaceId
projectId: workspaceId
});
handlePopUpClose("deleteWebhook");
createNotification({
@@ -123,7 +123,7 @@ export const WebhooksTab = withProjectPermission(
try {
await testWebhook({
webhookId,
workspaceId
projectId: workspaceId
});
createNotification({
type: "success",