main
ts 146 lines 3.76 KB
Raw
1 import type {
2 ScaOverviewQuery,
3 ScaOverviewResponse,
4 ScaPackageAgentsResponse,
5 ScaPackageRegistryResponse,
6 ScaPoliciesIndexResponse,
7 ScaPolicyContentResponse,
8 SCAReportDeleteResponse,
9 SCAReportGenerateRequest,
10 SCAReportGenerateResponse,
11 SCAReportListResponse,
12 ScaStatsResponse
13 } from "@/types/sca.d"
14 import { HttpClient } from "../httpClient"
15 import { createSSEStream } from "../sseClient"
16
17 export default {
18 /**
19 * Search SCA results across all agents with filtering and pagination
20 */
21 searchScaOverview(query?: ScaOverviewQuery, signal?: AbortSignal) {
22 return HttpClient.get<ScaOverviewResponse>(`/sca/overview`, {
23 params: {
24 customer_code: query?.customer_code,
25 agent_name: query?.agent_name,
26 policy_id: query?.policy_id,
27 policy_name: query?.policy_name,
28 min_score: query?.min_score,
29 max_score: query?.max_score,
30 page: query?.page || 1,
31 page_size: query?.page_size || 50
32 },
33 signal
34 })
35 },
36
37 /**
38 * Stream SCA results using SSE client (token + params gestiti automaticamente)
39 */
40 async streamScaOverview(
41 query: ScaOverviewQuery | undefined,
42 handlers: {
43 onStart?: (data: any) => void
44 onAgentResult?: (data: any) => void
45 onAgentEmpty?: (data: any) => void
46 onProgress?: (data: any) => void
47 onComplete?: (data: any) => void
48 onError?: (error: any) => void
49 },
50 abortController?: AbortController
51 ): Promise<void> {
52 await createSSEStream({
53 path: "/sca/overview/stream",
54 params: query
55 ? {
56 customer_code: query.customer_code,
57 agent_name: query.agent_name,
58 policy_id: query.policy_id,
59 policy_name: query.policy_name,
60 min_score: query.min_score,
61 max_score: query.max_score
62 }
63 : undefined,
64 signal: abortController?.signal,
65 handlers: {
66 start: data => handlers.onStart?.(data),
67 agent_result: data => handlers.onAgentResult?.(data),
68 agent_empty: data => handlers.onAgentEmpty?.(data),
69 progress: data => handlers.onProgress?.(data),
70 complete: data => handlers.onComplete?.(data),
71 error: data => handlers.onError?.(data),
72 agent_error: data => handlers.onError?.(data),
73 onError: err => handlers.onError?.(err)
74 }
75 })
76 },
77
78 /**
79 * Get SCA statistics
80 */
81 getScaStats(customer_code?: string) {
82 return HttpClient.get<ScaStatsResponse>(`/sca/stats`, {
83 params: customer_code ? { customer_code } : undefined
84 })
85 },
86
87 /**
88 * Generate an SCA report (synchronous)
89 */
90 generateReport(request: SCAReportGenerateRequest) {
91 return HttpClient.post<SCAReportGenerateResponse>(`/sca/reports/generate`, request)
92 },
93
94 /**
95 * List all SCA reports
96 */
97 listReports(customer_code?: string) {
98 return HttpClient.get<SCAReportListResponse>(`/sca/reports`, {
99 params: customer_code ? { customer_code } : undefined
100 })
101 },
102
103 /**
104 * Download an SCA report
105 */
106 downloadReport(reportId: number) {
107 return HttpClient.get<Blob>(`/sca/reports/${reportId}/download`, {
108 responseType: "blob"
109 })
110 },
111
112 /**
113 * Delete an SCA report
114 */
115 deleteReport(reportId: number) {
116 return HttpClient.delete<SCAReportDeleteResponse>(`/sca/reports/${reportId}`)
117 },
118
119 /**
120 * List all available SCA policies from the CoPilot-SCA repository
121 */
122 getPolicies() {
123 return HttpClient.get<ScaPoliciesIndexResponse>(`/sca/policies`)
124 },
125
126 /**
127 * Fetch the YAML content of a specific SCA policy
128 */
129 getPolicyContent(policyId: string) {
130 return HttpClient.get<ScaPolicyContentResponse>(`/sca/policies/${policyId}`)
131 },
132
133 /**
134 * List all tracked SCA-relevant package categories
135 */
136 getPackageRegistry() {
137 return HttpClient.get<ScaPackageRegistryResponse>(`/sca/packages/registry`)
138 },
139
140 /**
141 * Detect agents running a tracked SCA-relevant package
142 */
143 getAgentsForPackage(registryKey: string) {
144 return HttpClient.get<ScaPackageAgentsResponse>(`/sca/packages/registry/${registryKey}/agents`)
145 }
146 }