main
ts 169 lines 5.32 KB
Raw
1 import type { Agent } from "@/types/agents.d"
2 import type {
3 Customer,
4 CustomerAgentHealth,
5 CustomerDecommissionedData,
6 CustomerMeta,
7 CustomerProvision,
8 CustomerProvisioningDefaultSettings
9 } from "@/types/customers.d"
10 import type { FlaskBaseResponse } from "@/types/flask.d"
11 import { HttpClient } from "../httpClient"
12
13 export interface CustomerAgentsHealthcheckQuery {
14 minutes?: number
15 hours?: number
16 days?: number
17 }
18
19 export interface ProvisioningDefaultSettingsPayload {
20 id: number
21 clusterName: string
22 clusterKey: string
23 masterIp: string
24 grafanaUrl: string
25 wazuhWorkerHostname: string
26 }
27
28 export default {
29 // #region Customer
30 getCustomers(code?: string) {
31 return HttpClient.get<FlaskBaseResponse & { customers?: Customer[]; customer?: Customer }>(
32 `/customers${code ? `/${code}` : ""}`
33 )
34 },
35 createCustomer(customer: Customer) {
36 return HttpClient.post<FlaskBaseResponse & { customer: Customer }>(`/customers`, customer)
37 },
38 updateCustomer(customer: Customer, code?: string) {
39 return HttpClient.put<FlaskBaseResponse & { customer: Customer }>(
40 `/customers/${code || customer.customer_code}`,
41 customer
42 )
43 },
44 deleteCustomer(code: string) {
45 return HttpClient.delete<FlaskBaseResponse & { customer: Customer }>(`/customers/${code}`)
46 },
47 /** @deprecated */
48 getCustomerMeta(code: string) {
49 return HttpClient.get<FlaskBaseResponse & { customer_meta: CustomerMeta }>(`/customers/${code}/meta`)
50 },
51 /** @deprecated */
52 updateCustomerMeta(meta: CustomerMeta, code: string) {
53 return HttpClient.put<FlaskBaseResponse & { customer_meta: CustomerMeta }>(`/customers/${code}/meta`, meta)
54 },
55 /** @deprecated */
56 createCustomerMeta(meta: CustomerMeta, code: string) {
57 return HttpClient.post<FlaskBaseResponse & { customer_meta: CustomerMeta }>(`/customers/${code}/meta`, meta)
58 },
59 /** @deprecated */
60 deleteCustomerMeta(code: string) {
61 return HttpClient.delete<FlaskBaseResponse & { customer_meta: CustomerMeta }>(`/customers/${code}/meta`)
62 },
63 getCustomerFull(code: string) {
64 return HttpClient.get<FlaskBaseResponse & { customer: Customer; customer_meta?: CustomerMeta }>(
65 `/customers/${code}/full`
66 )
67 },
68 getCustomerAgents(code: string) {
69 return HttpClient.get<FlaskBaseResponse & { agents: Agent[] }>(`/customers/${code}/agents`)
70 },
71 getCustomerAgentsHealthcheckWazuh(code: string, query?: CustomerAgentsHealthcheckQuery) {
72 return HttpClient.get<
73 FlaskBaseResponse & {
74 healthy_wazuh_agents: CustomerAgentHealth[]
75 unhealthy_wazuh_agents: CustomerAgentHealth[]
76 }
77 >(`/customers/${code}/agents/healthcheck/wazuh`, {
78 params: {
79 minutes: query?.minutes || 0,
80 hours: query?.hours || 0,
81 days: query?.days || 0
82 }
83 })
84 },
85 getCustomerAgentsHealthcheckVelociraptor(code: string, query?: CustomerAgentsHealthcheckQuery) {
86 return HttpClient.get<
87 FlaskBaseResponse & {
88 healthy_velociraptor_agents: CustomerAgentHealth[]
89 unhealthy_velociraptor_agents: CustomerAgentHealth[]
90 }
91 >(`/customers/${code}/agents/healthcheck/velociraptor`, {
92 params: {
93 minutes: query?.minutes || 0,
94 hours: query?.hours || 0,
95 days: query?.days || 0
96 }
97 })
98 },
99 // #endregion
100
101 // #region Customer Provisioning
102 newCustomerProvision(provision: CustomerProvision, code: string) {
103 return HttpClient.post<FlaskBaseResponse & { customer_meta: CustomerMeta; wazuh_worker_provisioned: boolean }>(
104 `/customer_provisioning/provision`,
105 provision,
106 {
107 params: {
108 customer_code: code
109 }
110 }
111 )
112 },
113 getCustomerProvision(code: string) {
114 return HttpClient.get<FlaskBaseResponse & { customer_meta: CustomerMeta }>(
115 `/customer_provisioning/provision/${code}`
116 )
117 },
118 decommissionCustomer(code: string) {
119 return HttpClient.post<FlaskBaseResponse & { decomissioned_data: CustomerDecommissionedData }>(
120 `/customer_provisioning/decommission`,
121 {},
122 {
123 params: {
124 customer_code: code
125 }
126 }
127 )
128 },
129 getProvisioningDashboards() {
130 return HttpClient.get<FlaskBaseResponse & { available_dashboards: string[] }>(
131 `/customer_provisioning/provision/dashboards`
132 )
133 },
134 getProvisioningSubscriptions() {
135 return HttpClient.get<FlaskBaseResponse & { available_subscriptions: string[] }>(
136 `/customer_provisioning/provision/subscriptions`
137 )
138 },
139 getProvisioningDefaultSettings() {
140 return HttpClient.get<
141 FlaskBaseResponse & { customer_provisioning_default_settings: CustomerProvisioningDefaultSettings }
142 >(`/customer_provisioning/default_settings`)
143 },
144 setProvisioningDefaultSettings(payload: ProvisioningDefaultSettingsPayload) {
145 return HttpClient.post<
146 FlaskBaseResponse & { customer_provisioning_default_settings: CustomerProvisioningDefaultSettings }
147 >(`/customer_provisioning/default_settings`, {
148 id: payload.id,
149 cluster_name: payload.clusterName,
150 cluster_key: payload.clusterKey,
151 master_ip: payload.masterIp,
152 grafana_url: payload.grafanaUrl,
153 wazuh_worker_hostname: payload.wazuhWorkerHostname
154 })
155 },
156 updateProvisioningDefaultSettings(payload: ProvisioningDefaultSettingsPayload) {
157 return HttpClient.put<
158 FlaskBaseResponse & { customer_provisioning_default_settings: CustomerProvisioningDefaultSettings }
159 >(`/customer_provisioning/default_settings`, {
160 id: payload.id,
161 cluster_name: payload.clusterName,
162 cluster_key: payload.clusterKey,
163 master_ip: payload.masterIp,
164 grafana_url: payload.grafanaUrl,
165 wazuh_worker_hostname: payload.wazuhWorkerHostname
166 })
167 }
168 // #endregion
169 }