diff --git a/ui/src/api/queries/commands.ts b/ui/src/api/queries/commands.ts index 853c447f..0e24dce6 100644 --- a/ui/src/api/queries/commands.ts +++ b/ui/src/api/queries/commands.ts @@ -4,6 +4,18 @@ import { useAuthStore } from '../../auth/auth-store' // ── Application Config ──────────────────────────────────────────────────── +export interface TapDefinition { + tapId: string + processorId: string + target: 'INPUT' | 'OUTPUT' | 'BOTH' + expression: string + language: string + attributeName: string + attributeType: 'BUSINESS_OBJECT' | 'CORRELATION' | 'EVENT' | 'CUSTOM' + enabled: boolean + version: number +} + export interface ApplicationConfig { application: string version: number @@ -14,6 +26,10 @@ export interface ApplicationConfig { metricsEnabled: boolean samplingRate: number tracedProcessors: Record + taps: TapDefinition[] + tapVersion: number + routeRecording: Record + compressSuccess: boolean } /** Authenticated fetch using the JWT from auth store */ @@ -87,3 +103,61 @@ export function useSendGroupCommand() { }, }) } + +// ── Test Expression ─────────────────────────────────────────────────────── + +export function useTestExpression() { + return useMutation({ + mutationFn: async ({ + application, + expression, + language, + body, + target, + }: { + application: string + expression: string + language: string + body: string + target: string + }) => { + const res = await authFetch( + `/api/v1/config/${encodeURIComponent(application)}/test-expression`, + { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ expression, language, body, target }), + }, + ) + if (!res.ok) { + if (res.status === 404) throw new Error('No live agent available') + if (res.status === 504) throw new Error('Expression test timed out') + throw new Error('Failed to test expression') + } + return res.json() as Promise<{ result?: string; error?: string }> + }, + }) +} + +// ── Replay Exchange ─────────────────────────────────────────────────────── + +export function useReplayExchange() { + return useMutation({ + mutationFn: async ({ + agentId, + headers, + body, + }: { + agentId: string + headers: Record + body: string + }) => { + const { data, error } = await api.POST('/agents/{id}/commands', { + params: { path: { id: agentId } }, + body: { type: 'replay', payload: { headers, body } } as any, + }) + if (error) throw new Error('Failed to send replay command') + return data! + }, + }) +}