mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
feat: added hooks for policies
This commit is contained in:
19
frontend/src/hooks/api/approvalPolicies/index.tsx
Normal file
19
frontend/src/hooks/api/approvalPolicies/index.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
export {
|
||||
useCreateApprovalPolicy,
|
||||
useDeleteApprovalPolicy,
|
||||
useUpdateApprovalPolicy
|
||||
} from "./mutations";
|
||||
export { approvalPolicyQuery } from "./queries";
|
||||
export {
|
||||
ApprovalPolicyType,
|
||||
ApproverType,
|
||||
type ApprovalPolicyStep,
|
||||
type PamAccessPolicyConditions,
|
||||
type PamAccessPolicyConstraints,
|
||||
type TApprovalPolicy,
|
||||
type TCreateApprovalPolicyDTO,
|
||||
type TDeleteApprovalPolicyDTO,
|
||||
type TGetApprovalPolicyByIdDTO,
|
||||
type TListApprovalPoliciesDTO,
|
||||
type TUpdateApprovalPolicyDTO
|
||||
} from "./types";
|
||||
58
frontend/src/hooks/api/approvalPolicies/mutations.tsx
Normal file
58
frontend/src/hooks/api/approvalPolicies/mutations.tsx
Normal file
@@ -0,0 +1,58 @@
|
||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||
|
||||
import { apiRequest } from "@app/config/request";
|
||||
|
||||
import { approvalPolicyQuery } from "./queries";
|
||||
import {
|
||||
TApprovalPolicy,
|
||||
TCreateApprovalPolicyDTO,
|
||||
TDeleteApprovalPolicyDTO,
|
||||
TUpdateApprovalPolicyDTO
|
||||
} from "./types";
|
||||
|
||||
export const useCreateApprovalPolicy = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async ({ policyType, ...dto }: TCreateApprovalPolicyDTO) => {
|
||||
const { data } = await apiRequest.post<{ policy: TApprovalPolicy }>(
|
||||
`/api/v1/approval-policies/${policyType}`,
|
||||
dto
|
||||
);
|
||||
return data.policy;
|
||||
},
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: approvalPolicyQuery.allKey() });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const useUpdateApprovalPolicy = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async ({ policyType, policyId, ...updates }: TUpdateApprovalPolicyDTO) => {
|
||||
const { data } = await apiRequest.patch<{ policy: TApprovalPolicy }>(
|
||||
`/api/v1/approval-policies/${policyType}/${policyId}`,
|
||||
updates
|
||||
);
|
||||
return data.policy;
|
||||
},
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: approvalPolicyQuery.allKey() });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const useDeleteApprovalPolicy = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async ({ policyType, policyId }: TDeleteApprovalPolicyDTO) => {
|
||||
const { data } = await apiRequest.delete<{ policyId: string }>(
|
||||
`/api/v1/approval-policies/${policyType}/${policyId}`
|
||||
);
|
||||
return data.policyId;
|
||||
},
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: approvalPolicyQuery.allKey() });
|
||||
}
|
||||
});
|
||||
};
|
||||
37
frontend/src/hooks/api/approvalPolicies/queries.tsx
Normal file
37
frontend/src/hooks/api/approvalPolicies/queries.tsx
Normal file
@@ -0,0 +1,37 @@
|
||||
import { queryOptions } from "@tanstack/react-query";
|
||||
|
||||
import { apiRequest } from "@app/config/request";
|
||||
|
||||
import { TApprovalPolicy, TGetApprovalPolicyByIdDTO, TListApprovalPoliciesDTO } from "./types";
|
||||
|
||||
export const approvalPolicyQuery = {
|
||||
allKey: () => ["approval-policies"] as const,
|
||||
getByIdKey: (params: TGetApprovalPolicyByIdDTO) =>
|
||||
[...approvalPolicyQuery.allKey(), "by-id", params] as const,
|
||||
listKey: (params: TListApprovalPoliciesDTO) =>
|
||||
[...approvalPolicyQuery.allKey(), "list", params] as const,
|
||||
getById: (params: TGetApprovalPolicyByIdDTO) =>
|
||||
queryOptions({
|
||||
queryKey: approvalPolicyQuery.getByIdKey(params),
|
||||
queryFn: async () => {
|
||||
const { data } = await apiRequest.get<{ policy: TApprovalPolicy }>(
|
||||
`/api/v1/approval-policies/${params.policyType}/${params.policyId}`
|
||||
);
|
||||
return data.policy;
|
||||
}
|
||||
}),
|
||||
list: (params: TListApprovalPoliciesDTO) =>
|
||||
queryOptions({
|
||||
queryKey: approvalPolicyQuery.listKey(params),
|
||||
queryFn: async () => {
|
||||
const { data } = await apiRequest.get<{
|
||||
policies: TApprovalPolicy[];
|
||||
}>(`/api/v1/approval-policies/${params.policyType}`, {
|
||||
params: {
|
||||
projectId: params.projectId
|
||||
}
|
||||
});
|
||||
return data.policies;
|
||||
}
|
||||
})
|
||||
};
|
||||
84
frontend/src/hooks/api/approvalPolicies/types.ts
Normal file
84
frontend/src/hooks/api/approvalPolicies/types.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
export enum ApprovalPolicyType {
|
||||
PamAccess = "pam-access"
|
||||
}
|
||||
|
||||
export enum ApproverType {
|
||||
Group = "group",
|
||||
User = "user"
|
||||
}
|
||||
|
||||
export type ApprovalPolicyStep = {
|
||||
name?: string | null;
|
||||
requiredApprovals: number;
|
||||
notifyApprovers?: boolean;
|
||||
approvers: {
|
||||
type: ApproverType;
|
||||
id: string;
|
||||
}[];
|
||||
};
|
||||
|
||||
export type PamAccessPolicyConditions = {
|
||||
resourceIds: string[];
|
||||
accountPaths: string[];
|
||||
}[];
|
||||
|
||||
export type PamAccessPolicyConstraints = {
|
||||
requestDurationHours: {
|
||||
min: number;
|
||||
max: number;
|
||||
};
|
||||
};
|
||||
|
||||
export type TApprovalPolicy = {
|
||||
id: string;
|
||||
projectId: string;
|
||||
name: string;
|
||||
maxRequestTtlSeconds?: number | null;
|
||||
type: ApprovalPolicyType;
|
||||
conditions: {
|
||||
version: number;
|
||||
conditions: PamAccessPolicyConditions;
|
||||
};
|
||||
constraints: {
|
||||
version: number;
|
||||
constraints: PamAccessPolicyConstraints;
|
||||
};
|
||||
steps: ApprovalPolicyStep[];
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
};
|
||||
|
||||
export type TCreateApprovalPolicyDTO = {
|
||||
policyType: ApprovalPolicyType;
|
||||
projectId: string;
|
||||
name: string;
|
||||
maxRequestTtlSeconds?: number | null;
|
||||
conditions: PamAccessPolicyConditions;
|
||||
constraints: PamAccessPolicyConstraints;
|
||||
steps: ApprovalPolicyStep[];
|
||||
};
|
||||
|
||||
export type TUpdateApprovalPolicyDTO = {
|
||||
policyType: ApprovalPolicyType;
|
||||
policyId: string;
|
||||
name?: string;
|
||||
maxRequestTtlSeconds?: number | null;
|
||||
conditions?: PamAccessPolicyConditions;
|
||||
constraints?: PamAccessPolicyConstraints;
|
||||
steps?: ApprovalPolicyStep[];
|
||||
};
|
||||
|
||||
export type TGetApprovalPolicyByIdDTO = {
|
||||
policyType: ApprovalPolicyType;
|
||||
policyId: string;
|
||||
};
|
||||
|
||||
export type TListApprovalPoliciesDTO = {
|
||||
policyType: ApprovalPolicyType;
|
||||
projectId: string;
|
||||
};
|
||||
|
||||
export type TDeleteApprovalPolicyDTO = {
|
||||
policyType: ApprovalPolicyType;
|
||||
policyId: string;
|
||||
};
|
||||
Reference in New Issue
Block a user