82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
|
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||
|
|
import {
|
||
|
|
deleteC2Config,
|
||
|
|
executeC2,
|
||
|
|
getC2Config,
|
||
|
|
listCallbacks,
|
||
|
|
putC2Config,
|
||
|
|
testC2Config,
|
||
|
|
} from '@/api/c2';
|
||
|
|
import type { C2ConfigInput, C2ExecuteInput } from '@/api/types';
|
||
|
|
|
||
|
|
function c2ConfigKey(engagementId: number) {
|
||
|
|
return ['c2-config', engagementId] as const;
|
||
|
|
}
|
||
|
|
|
||
|
|
function c2CallbacksKey(engagementId: number) {
|
||
|
|
return ['c2-callbacks', engagementId] as const;
|
||
|
|
}
|
||
|
|
|
||
|
|
function simulationKey(id: number) {
|
||
|
|
return ['simulations', id] as const;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useC2Config(engagementId: number | undefined, options?: { enabled?: boolean }) {
|
||
|
|
const enabled =
|
||
|
|
typeof engagementId === 'number' &&
|
||
|
|
!Number.isNaN(engagementId) &&
|
||
|
|
(options?.enabled !== false);
|
||
|
|
|
||
|
|
return useQuery({
|
||
|
|
queryKey: engagementId ? c2ConfigKey(engagementId) : ['c2-config', 'none'],
|
||
|
|
queryFn: () => getC2Config(engagementId as number),
|
||
|
|
enabled,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useUpdateC2Config(engagementId: number) {
|
||
|
|
const qc = useQueryClient();
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: (input: C2ConfigInput) => putC2Config(engagementId, input),
|
||
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: c2ConfigKey(engagementId) }),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useDeleteC2Config(engagementId: number) {
|
||
|
|
const qc = useQueryClient();
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: () => deleteC2Config(engagementId),
|
||
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: c2ConfigKey(engagementId) }),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useTestC2Config(engagementId: number) {
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: () => testC2Config(engagementId),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useC2Callbacks(engagementId: number | undefined, options?: { enabled?: boolean }) {
|
||
|
|
const enabled =
|
||
|
|
typeof engagementId === 'number' &&
|
||
|
|
!Number.isNaN(engagementId) &&
|
||
|
|
(options?.enabled !== false);
|
||
|
|
|
||
|
|
return useQuery({
|
||
|
|
queryKey: engagementId ? c2CallbacksKey(engagementId) : ['c2-callbacks', 'none'],
|
||
|
|
queryFn: () => listCallbacks(engagementId as number),
|
||
|
|
enabled,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useExecuteC2(simulationId: number, engagementId: number) {
|
||
|
|
const qc = useQueryClient();
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: (input: C2ExecuteInput) => executeC2(simulationId, input),
|
||
|
|
onSuccess: () => {
|
||
|
|
qc.invalidateQueries({ queryKey: simulationKey(simulationId) });
|
||
|
|
qc.invalidateQueries({ queryKey: ['engagements', engagementId, 'simulations'] });
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|