mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 11:27:47 +00:00
feat: added hooks for policies
This commit is contained in:
@@ -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";
|
||||||
@@ -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() });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
@@ -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