main
ts 245 lines 5.63 KB
Raw
1 /* eslint-disable jsdoc/no-multi-asterisks */
2 import type { FlaskBaseResponse } from "@/types/flask.d"
3 import type {
4 MitreAtomicTest,
5 MitreEventDetails,
6 MitreGroupDetails,
7 MitreMitigationDetails,
8 MitreSoftwareDetails,
9 MitreTacticDetails,
10 MitreTechnique,
11 MitreTechniqueDetails
12 } from "@/types/mitre.d"
13 import { HttpClient } from "../../httpClient"
14
15 export type MitreTechniquesAlertsQueryTimeRange = `${number}${"h" | "d" | "w"}`
16
17 export interface MitreTechniquesAlertsQuery {
18 /** Time range for the search (e.g., now-24h, now-7d) */
19 time_range?: MitreTechniquesAlertsQueryTimeRange
20 /** Maximum number of techniques to return per page */
21 size?: number
22 /** Page number for pagination */
23 page?: number
24 /** Filter by rule level */
25 rule_level?: string
26 /** Filter by rule group */
27 rule_group?: string
28 /** Override the field containing MITRE IDs */
29 mitre_field?: string
30 /** Index pattern to search; Default value : wazuh-* */
31 index_pattern?: string
32 }
33
34 export interface MitreGroupsQuery {
35 id: string
36 }
37
38 export interface MitreMitigationsQuery {
39 id: string
40 }
41
42 export interface MitreSoftwareQuery {
43 id: string
44 }
45
46 export interface MitreTacticsQuery {
47 id: string
48 }
49
50 export interface MitreTechniquesQuery {
51 external_id?: string
52 id?: string
53 }
54
55 export interface MitreEventsQuery {
56 /** MITRE ATT&CK technique ID (e.g., T1047, 1047) */
57 technique_id: string
58 /** Time range for the search (e.g., now-24h, now-7d) */
59 time_range?: string
60 /** Maximum number of techniques to return per page */
61 size?: number
62 /** Page number for pagination */
63 page?: number
64 /** Filter by rule level */
65 rule_level?: string
66 /** Filter by rule group */
67 rule_group?: string
68 /** Override the field containing MITRE IDs */
69 mitre_field?: string
70 /** Index pattern to search; Default value : wazuh-* */
71 index_pattern?: string
72 }
73
74 export type MitreAtomicOsCategory = "windows" | "linux" | "macos"
75
76 export interface MitreAtomicTestsQuery {
77 /** Maximum number of techniques to return per page */
78 size?: number
79 /** Page number for pagination */
80 page?: number
81 os_category?: MitreAtomicOsCategory
82 }
83
84 export default {
85 getMitreTechniquesAlerts(query: MitreTechniquesAlertsQuery, signal?: AbortSignal) {
86 return HttpClient.get<
87 FlaskBaseResponse & {
88 total_alerts: number
89 techniques_count: number
90 techniques: MitreTechnique[]
91 time_range: string
92 field_used: string
93 page: number
94 page_size: number
95 total_pages: number
96 }
97 >(`/wazuh_manager/mitre/techniques/alerts`, {
98 params: {
99 time_range: query?.time_range || "now-24h",
100 size: query?.size || 25,
101 page: query?.page || 1,
102 rule_level: query?.rule_level,
103 rule_group: query?.rule_group,
104 mitre_field: query?.mitre_field,
105 index_pattern: query?.index_pattern || "wazuh-*"
106 },
107 signal
108 })
109 },
110 getMitreTechniques(query?: MitreTechniquesQuery) {
111 let q: string | undefined
112
113 if (query?.external_id) {
114 q = `external_id=${query?.external_id}`
115 }
116
117 if (query?.id) {
118 q = `id=${query?.id}`
119 }
120
121 return HttpClient.get<FlaskBaseResponse & { results: MitreTechniqueDetails[] }>(
122 `/wazuh_manager/mitre/techniques`,
123 {
124 params: {
125 q
126 }
127 }
128 )
129 },
130 getMitreGroups(query?: MitreGroupsQuery) {
131 let q: string | undefined
132
133 if (query?.id) {
134 q = `id=${query?.id}`
135 }
136
137 return HttpClient.get<FlaskBaseResponse & { results: MitreGroupDetails[]; total: number }>(
138 `/wazuh_manager/mitre/groups`,
139 {
140 params: {
141 q
142 }
143 }
144 )
145 },
146 getMitreMitigations(query?: MitreMitigationsQuery) {
147 let q: string | undefined
148
149 if (query?.id) {
150 q = `id=${query?.id}`
151 }
152
153 return HttpClient.get<FlaskBaseResponse & { results: MitreMitigationDetails[]; total: number }>(
154 `/wazuh_manager/mitre/mitigations`,
155 {
156 params: {
157 q
158 }
159 }
160 )
161 },
162 getMitreSoftware(query?: MitreSoftwareQuery) {
163 let q: string | undefined
164
165 if (query?.id) {
166 q = `id=${query?.id}`
167 }
168
169 return HttpClient.get<FlaskBaseResponse & { results: MitreSoftwareDetails[] }>(
170 `/wazuh_manager/mitre/software`,
171 {
172 params: {
173 q
174 }
175 }
176 )
177 },
178 getMitreTactics(query?: MitreTacticsQuery) {
179 let q: string | undefined
180
181 if (query?.id) {
182 q = `id=${query?.id}`
183 }
184
185 return HttpClient.get<FlaskBaseResponse & { results: MitreTacticDetails[] }>(`/wazuh_manager/mitre/tactics`, {
186 params: {
187 q
188 }
189 })
190 },
191 getMitreEvents(query: MitreEventsQuery, signal?: AbortSignal) {
192 return HttpClient.get<
193 FlaskBaseResponse & {
194 technique_id: string
195 technique_name: string
196 total_alerts: number
197 total_pages: number
198 page_size: number
199 page: number
200 alerts: MitreEventDetails[]
201 field_used: string
202 time_range: string
203 }
204 >(`/wazuh_manager/mitre/techniques/${query.technique_id}/alerts`, {
205 params: {
206 time_range: query?.time_range || "now-24h",
207 size: query?.size || 25,
208 page: query?.page || 1,
209 rule_level: query?.rule_level,
210 rule_group: query?.rule_group,
211 mitre_field: query?.mitre_field,
212 index_pattern: query?.index_pattern || "wazuh-*"
213 },
214 signal
215 })
216 },
217 getMitreAtomicTests(query: MitreAtomicTestsQuery, signal?: AbortSignal) {
218 return HttpClient.get<
219 FlaskBaseResponse & {
220 total_techniques: number
221 total_tests: number
222 tests: MitreAtomicTest[]
223 last_updated: Date
224 page: number
225 page_size: number
226 total_pages: number
227 }
228 >(`/wazuh_manager/mitre/atomic-tests`, {
229 params: {
230 size: query?.size || 25,
231 page: query?.page || 1,
232 os_category: query?.os_category || undefined
233 },
234 signal
235 })
236 },
237 getMitreAtomicTestContent(technique_id: string) {
238 return HttpClient.get<
239 FlaskBaseResponse & {
240 technique_id: string
241 markdown_content: string
242 }
243 >(`/wazuh_manager/mitre/techniques/${technique_id}/atomic-tests`)
244 }
245 }