Feat: Request access

This commit is contained in:
Daniel Hougaard
2024-05-07 17:30:27 +02:00
parent 91bf6a6dad
commit 68a11db1c6
21 changed files with 1285 additions and 11 deletions
@@ -0,0 +1,6 @@
export {
useCreateAccessApprovalPolicy,
useDeleteAccessApprovalPolicy,
useUpdateAccessApprovalPolicy
} from "./mutation";
export { useGetAccessApprovalPolicies } from "./queries";
@@ -0,0 +1,58 @@
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request";
import { accessApprovalKeys } from "./queries";
import { TCreateAccessPolicyDTO, TDeleteSecretPolicyDTO, TUpdateAccessPolicyDTO } from "./types";
export const useCreateAccessApprovalPolicy = () => {
const queryClient = useQueryClient();
return useMutation<{}, {}, TCreateAccessPolicyDTO>({
mutationFn: async ({ environment, workspaceId, approvals, approvers, name }) => {
const { data } = await apiRequest.post("/api/v1/access-approvals", {
environment,
workspaceId,
approvals,
approvers,
name
});
return data;
},
onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries(accessApprovalKeys.getAccessApprovalPolicies(workspaceId));
}
});
};
export const useUpdateAccessApprovalPolicy = () => {
const queryClient = useQueryClient();
return useMutation<{}, {}, TUpdateAccessPolicyDTO>({
mutationFn: async ({ id, approvers, approvals, name }) => {
const { data } = await apiRequest.patch(`/api/v1/access-approvals/${id}`, {
approvals,
approvers,
name
});
return data;
},
onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries(accessApprovalKeys.getAccessApprovalPolicies(workspaceId));
}
});
};
export const useDeleteAccessApprovalPolicy = () => {
const queryClient = useQueryClient();
return useMutation<{}, {}, TDeleteSecretPolicyDTO>({
mutationFn: async ({ id }) => {
const { data } = await apiRequest.delete(`/api/v1/access-approvals/${id}`);
return data;
},
onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries(accessApprovalKeys.getAccessApprovalPolicies(workspaceId));
}
});
};
@@ -0,0 +1,40 @@
import { useQuery, UseQueryOptions } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request";
import { TAccessApprovalPolicy, TGetSecretApprovalPoliciesDTO } from "./types";
export const accessApprovalKeys = {
getAccessApprovalPolicies: (workspaceId: string) =>
[{ workspaceId }, "access-approval-policies"] as const,
getAccessApprovalPolicyOfABoard: (workspaceId: string, environment: string) => [
{ workspaceId, environment },
"access-approval-policy"
]
};
const fetchApprovalPolicies = async (workspaceId: string) => {
const { data } = await apiRequest.get<{ approvals: TAccessApprovalPolicy[] }>(
"/api/v1/access-approvals",
{ params: { workspaceId } }
);
return data.approvals;
};
export const useGetAccessApprovalPolicies = ({
workspaceId,
options = {}
}: TGetSecretApprovalPoliciesDTO & {
options?: UseQueryOptions<
TAccessApprovalPolicy[],
unknown,
TAccessApprovalPolicy[],
ReturnType<typeof accessApprovalKeys.getAccessApprovalPolicies>
>;
}) =>
useQuery({
queryKey: accessApprovalKeys.getAccessApprovalPolicies(workspaceId),
queryFn: () => fetchApprovalPolicies(workspaceId),
...options,
enabled: Boolean(workspaceId) && (options?.enabled ?? true)
});
@@ -0,0 +1,45 @@
import { WorkspaceEnv } from "../workspace/types";
export type TAccessApprovalPolicy = {
id: string;
name: string;
approvals: number;
envId: string;
workspace: string;
environment: WorkspaceEnv;
projectId: string;
approvers: string[];
};
export type TGetSecretApprovalPoliciesDTO = {
workspaceId: string;
};
export type TGetSecretApprovalPolicyOfBoardDTO = {
workspaceId: string;
environment: string;
secretPath: string;
};
export type TCreateAccessPolicyDTO = {
workspaceId: string;
name?: string;
environment: string;
approvers?: string[];
approvals?: number;
};
export type TUpdateAccessPolicyDTO = {
id: string;
name?: string;
approvers?: string[];
approvals?: number;
// for invalidating list
workspaceId: string;
};
export type TDeleteSecretPolicyDTO = {
id: string;
// for invalidating list
workspaceId: string;
};
+1
View File
@@ -1,3 +1,4 @@
export * from "./accessApproval";
export * from "./admin";
export * from "./apiKeys";
export * from "./auditLogs";
+9 -8
View File
@@ -1,5 +1,6 @@
import { ZodIssue } from "zod";
export type { TAccessApprovalPolicy } from "./accessApproval/types";
export type { TAuditLogStream } from "./auditLogStreams/types";
export type { GetAuthTokenAPI } from "./auth/types";
export type { IncidentContact } from "./incidentContacts/types";
@@ -49,13 +50,13 @@ export enum ApiErrorTypes {
export type TApiErrors =
| {
error: ApiErrorTypes.ValidationError;
message: ZodIssue[];
statusCode: 403;
}
error: ApiErrorTypes.ValidationError;
message: ZodIssue[];
statusCode: 403;
}
| { error: ApiErrorTypes.ForbiddenError; message: string; statusCode: 401 }
| {
statusCode: 400;
message: string;
error: ApiErrorTypes.BadRequestError;
};
statusCode: 400;
message: string;
error: ApiErrorTypes.BadRequestError;
};