@camunda/ccma-api 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/index.d.ts +95 -0
  2. package/dist/index.js +151 -0
  3. package/dist/index.js.map +7 -0
  4. package/dist/services/accounts/accounts.data-export.service.d.ts +13 -0
  5. package/dist/services/accounts/accounts.data-export.service.js +41 -0
  6. package/dist/services/accounts/accounts.data-export.service.js.map +7 -0
  7. package/dist/services/accounts/accounts.valuemetrics.service.d.ts +8 -0
  8. package/dist/services/accounts/accounts.valuemetrics.service.js +1 -0
  9. package/dist/services/accounts/accounts.valuemetrics.service.js.map +7 -0
  10. package/dist/services/accounts/bot.service.d.ts +21 -0
  11. package/dist/services/accounts/bot.service.js +74 -0
  12. package/dist/services/accounts/bot.service.js.map +7 -0
  13. package/dist/services/accounts/challenge.service.d.ts +296 -0
  14. package/dist/services/accounts/challenge.service.js +475 -0
  15. package/dist/services/accounts/challenge.service.js.map +7 -0
  16. package/dist/services/accounts/connections.service.d.ts +27 -0
  17. package/dist/services/accounts/connections.service.js +41 -0
  18. package/dist/services/accounts/connections.service.js.map +7 -0
  19. package/dist/services/accounts/dashboards.service.d.ts +8 -0
  20. package/dist/services/accounts/dashboards.service.js +42 -0
  21. package/dist/services/accounts/dashboards.service.js.map +7 -0
  22. package/dist/services/accounts/early-access-features.service.d.ts +34 -0
  23. package/dist/services/accounts/early-access-features.service.js +67 -0
  24. package/dist/services/accounts/early-access-features.service.js.map +7 -0
  25. package/dist/services/accounts/genericCache.service.d.ts +13 -0
  26. package/dist/services/accounts/genericCache.service.js +80 -0
  27. package/dist/services/accounts/genericCache.service.js.map +7 -0
  28. package/dist/services/accounts/hdp.service.d.ts +52 -0
  29. package/dist/services/accounts/hdp.service.js +180 -0
  30. package/dist/services/accounts/hdp.service.js.map +7 -0
  31. package/dist/services/accounts/offboarding.service.d.ts +18 -0
  32. package/dist/services/accounts/offboarding.service.js +48 -0
  33. package/dist/services/accounts/offboarding.service.js.map +7 -0
  34. package/dist/services/accounts/organization-members.service.d.ts +68 -0
  35. package/dist/services/accounts/organization-members.service.js +216 -0
  36. package/dist/services/accounts/organization-members.service.js.map +7 -0
  37. package/dist/services/accounts/orgs.service.d.ts +282 -0
  38. package/dist/services/accounts/orgs.service.js +1012 -0
  39. package/dist/services/accounts/orgs.service.js.map +7 -0
  40. package/dist/services/accounts/salesplan.service.d.ts +7 -0
  41. package/dist/services/accounts/salesplan.service.js +40 -0
  42. package/dist/services/accounts/salesplan.service.js.map +7 -0
  43. package/dist/services/accounts/spam-detection.service.d.ts +8 -0
  44. package/dist/services/accounts/spam-detection.service.js +72 -0
  45. package/dist/services/accounts/spam-detection.service.js.map +7 -0
  46. package/dist/services/accounts/stats.service.d.ts +7 -0
  47. package/dist/services/accounts/stats.service.js +40 -0
  48. package/dist/services/accounts/stats.service.js.map +7 -0
  49. package/dist/services/accounts/usage-alerts.service.d.ts +34 -0
  50. package/dist/services/accounts/usage-alerts.service.js +112 -0
  51. package/dist/services/accounts/usage-alerts.service.js.map +7 -0
  52. package/dist/services/accounts/users.service.d.ts +101 -0
  53. package/dist/services/accounts/users.service.js +444 -0
  54. package/dist/services/accounts/users.service.js.map +7 -0
  55. package/dist/services/alerts/alerts.service.d.ts +59 -0
  56. package/dist/services/alerts/alerts.service.js +234 -0
  57. package/dist/services/alerts/alerts.service.js.map +7 -0
  58. package/dist/services/analytic-bridge/analytic-bridge.service.d.ts +23 -0
  59. package/dist/services/analytic-bridge/analytic-bridge.service.js +86 -0
  60. package/dist/services/analytic-bridge/analytic-bridge.service.js.map +7 -0
  61. package/dist/services/audit-logger/audit-logger.service.d.ts +27 -0
  62. package/dist/services/audit-logger/audit-logger.service.js +108 -0
  63. package/dist/services/audit-logger/audit-logger.service.js.map +7 -0
  64. package/dist/services/auth0/auth0.service.d.ts +15 -0
  65. package/dist/services/auth0/auth0.service.js +40 -0
  66. package/dist/services/auth0/auth0.service.js.map +7 -0
  67. package/dist/services/comm-bridge/comm-bridge.service.d.ts +33 -0
  68. package/dist/services/comm-bridge/comm-bridge.service.js +40 -0
  69. package/dist/services/comm-bridge/comm-bridge.service.js.map +7 -0
  70. package/dist/services/console/console.admin.service.d.ts +329 -0
  71. package/dist/services/console/console.admin.service.js +1527 -0
  72. package/dist/services/console/console.admin.service.js.map +7 -0
  73. package/dist/services/console/console.alerts.service.d.ts +69 -0
  74. package/dist/services/console/console.alerts.service.js +160 -0
  75. package/dist/services/console/console.alerts.service.js.map +7 -0
  76. package/dist/services/console/console.api-clients.service.d.ts +48 -0
  77. package/dist/services/console/console.api-clients.service.js +123 -0
  78. package/dist/services/console/console.api-clients.service.js.map +7 -0
  79. package/dist/services/console/console.backup-schedule.service.d.ts +21 -0
  80. package/dist/services/console/console.backup-schedule.service.js +67 -0
  81. package/dist/services/console/console.backup-schedule.service.js.map +7 -0
  82. package/dist/services/console/console.byok-scripts.service.d.ts +12 -0
  83. package/dist/services/console/console.byok-scripts.service.js +92 -0
  84. package/dist/services/console/console.byok-scripts.service.js.map +7 -0
  85. package/dist/services/console/console.byom-monitoring.service.d.ts +58 -0
  86. package/dist/services/console/console.byom-monitoring.service.js +177 -0
  87. package/dist/services/console/console.byom-monitoring.service.js.map +7 -0
  88. package/dist/services/console/console.cluster-clients.service.d.ts +55 -0
  89. package/dist/services/console/console.cluster-clients.service.js +123 -0
  90. package/dist/services/console/console.cluster-clients.service.js.map +7 -0
  91. package/dist/services/console/console.cluster-parameters.service.d.ts +64 -0
  92. package/dist/services/console/console.cluster-parameters.service.js +39 -0
  93. package/dist/services/console/console.cluster-parameters.service.js.map +7 -0
  94. package/dist/services/console/console.cluster.service.d.ts +114 -0
  95. package/dist/services/console/console.cluster.service.js +271 -0
  96. package/dist/services/console/console.cluster.service.js.map +7 -0
  97. package/dist/services/console/console.clusterBulkOperation.service.d.ts +20 -0
  98. package/dist/services/console/console.clusterBulkOperation.service.js +199 -0
  99. package/dist/services/console/console.clusterBulkOperation.service.js.map +7 -0
  100. package/dist/services/console/console.clusterplan.modification.service.d.ts +33 -0
  101. package/dist/services/console/console.clusterplan.modification.service.js +231 -0
  102. package/dist/services/console/console.clusterplan.modification.service.js.map +7 -0
  103. package/dist/services/console/console.clusterplan.service.d.ts +21 -0
  104. package/dist/services/console/console.clusterplan.service.js +64 -0
  105. package/dist/services/console/console.clusterplan.service.js.map +7 -0
  106. package/dist/services/console/console.connector-secrets.service.d.ts +30 -0
  107. package/dist/services/console/console.connector-secrets.service.js +125 -0
  108. package/dist/services/console/console.connector-secrets.service.js.map +7 -0
  109. package/dist/services/console/console.custommetrics.service.d.ts +10 -0
  110. package/dist/services/console/console.custommetrics.service.js +43 -0
  111. package/dist/services/console/console.custommetrics.service.js.map +7 -0
  112. package/dist/services/console/console.hotbackups.service.d.ts +34 -0
  113. package/dist/services/console/console.hotbackups.service.js +120 -0
  114. package/dist/services/console/console.hotbackups.service.js.map +7 -0
  115. package/dist/services/console/console.ip-whitelist.service.d.ts +15 -0
  116. package/dist/services/console/console.ip-whitelist.service.js +36 -0
  117. package/dist/services/console/console.ip-whitelist.service.js.map +7 -0
  118. package/dist/services/console/console.jobs.saas.service.d.ts +70 -0
  119. package/dist/services/console/console.jobs.saas.service.js +139 -0
  120. package/dist/services/console/console.jobs.saas.service.js.map +7 -0
  121. package/dist/services/console/console.m2m.service.d.ts +23 -0
  122. package/dist/services/console/console.m2m.service.js +94 -0
  123. package/dist/services/console/console.m2m.service.js.map +7 -0
  124. package/dist/services/console/console.secure-connectivity.service.d.ts +41 -0
  125. package/dist/services/console/console.secure-connectivity.service.js +129 -0
  126. package/dist/services/console/console.secure-connectivity.service.js.map +7 -0
  127. package/dist/services/console/console.valuemetrics.service.d.ts +17 -0
  128. package/dist/services/console/console.valuemetrics.service.js +110 -0
  129. package/dist/services/console/console.valuemetrics.service.js.map +7 -0
  130. package/dist/services/console/generation.service.d.ts +30 -0
  131. package/dist/services/console/generation.service.js +166 -0
  132. package/dist/services/console/generation.service.js.map +7 -0
  133. package/dist/services/github/github.service.d.ts +73 -0
  134. package/dist/services/github/github.service.js +272 -0
  135. package/dist/services/github/github.service.js.map +7 -0
  136. package/dist/services/hibob/hibob.service.d.ts +74 -0
  137. package/dist/services/hibob/hibob.service.js +125 -0
  138. package/dist/services/hibob/hibob.service.js.map +7 -0
  139. package/dist/services/hubspot/hubspot.service.d.ts +50 -0
  140. package/dist/services/hubspot/hubspot.service.js +119 -0
  141. package/dist/services/hubspot/hubspot.service.js.map +7 -0
  142. package/dist/services/litellm/litellm.service.d.ts +290 -0
  143. package/dist/services/litellm/litellm.service.js +392 -0
  144. package/dist/services/litellm/litellm.service.js.map +7 -0
  145. package/dist/services/login/login.service.d.ts +15 -0
  146. package/dist/services/login/login.service.js +66 -0
  147. package/dist/services/login/login.service.js.map +7 -0
  148. package/dist/services/mixpanel/mixpanel.service.d.ts +16 -0
  149. package/dist/services/mixpanel/mixpanel.service.js +86 -0
  150. package/dist/services/mixpanel/mixpanel.service.js.map +7 -0
  151. package/dist/services/notifications/notifications.service.d.ts +7 -0
  152. package/dist/services/notifications/notifications.service.js +38 -0
  153. package/dist/services/notifications/notifications.service.js.map +7 -0
  154. package/dist/services/slack/slack-blockkit.service.d.ts +28 -0
  155. package/dist/services/slack/slack-blockkit.service.js +45 -0
  156. package/dist/services/slack/slack-blockkit.service.js.map +7 -0
  157. package/dist/services/slack/slack.service.d.ts +31 -0
  158. package/dist/services/slack/slack.service.js +118 -0
  159. package/dist/services/slack/slack.service.js.map +7 -0
  160. package/dist/services/telemetry/telemetry.service.d.ts +16 -0
  161. package/dist/services/telemetry/telemetry.service.js +85 -0
  162. package/dist/services/telemetry/telemetry.service.js.map +7 -0
  163. package/dist/services/token-issuer/token-issuer.jwks.service.d.ts +13 -0
  164. package/dist/services/token-issuer/token-issuer.jwks.service.js +76 -0
  165. package/dist/services/token-issuer/token-issuer.jwks.service.js.map +7 -0
  166. package/dist/services/wordpress/wordpress.service.d.ts +15 -0
  167. package/dist/services/wordpress/wordpress.service.js +111 -0
  168. package/dist/services/wordpress/wordpress.service.js.map +7 -0
  169. package/dist/types/general.types.d.ts +61 -0
  170. package/dist/types/general.types.js +1 -0
  171. package/dist/types/general.types.js.map +7 -0
  172. package/dist/utils/api.d.ts +31 -0
  173. package/dist/utils/api.js +400 -0
  174. package/dist/utils/api.js.map +7 -0
  175. package/dist/utils/cache.d.ts +7 -0
  176. package/dist/utils/cache.js +25 -0
  177. package/dist/utils/cache.js.map +7 -0
  178. package/dist/utils/ccma-metrics.d.ts +18 -0
  179. package/dist/utils/ccma-metrics.js +37 -0
  180. package/dist/utils/ccma-metrics.js.map +7 -0
  181. package/dist/utils/environments.d.ts +11 -0
  182. package/dist/utils/environments.js +148 -0
  183. package/dist/utils/environments.js.map +7 -0
  184. package/dist/utils/errors.d.ts +5 -0
  185. package/dist/utils/errors.js +11 -0
  186. package/dist/utils/errors.js.map +7 -0
  187. package/dist/utils/frontendCache.d.ts +26 -0
  188. package/dist/utils/frontendCache.js +121 -0
  189. package/dist/utils/frontendCache.js.map +7 -0
  190. package/dist/utils/token-issuer.utils.d.ts +8 -0
  191. package/dist/utils/token-issuer.utils.js +19 -0
  192. package/dist/utils/token-issuer.utils.js.map +7 -0
  193. package/package.json +2 -6
@@ -0,0 +1,444 @@
1
+ import {
2
+ MINUTE
3
+ } from "@camunda/ccma-shared-types";
4
+ import { request } from "../../utils/api.js";
5
+ import { Cache } from "../../utils/cache.js";
6
+ import { HttpError } from "../../utils/errors.js";
7
+ const userCache = new Cache(5 * MINUTE);
8
+ const REGEX_EMAIL = (
9
+ // eslint-disable-next-line prefer-named-capture-group, no-useless-escape
10
+ /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/u
11
+ );
12
+ class UsersService {
13
+ static async search(params) {
14
+ const queryParams = new URLSearchParams();
15
+ const urlParts = [];
16
+ if (params.params.q.roleId) {
17
+ const q = {
18
+ roleId: params.params.q.roleId,
19
+ name: params.params.q.name || "",
20
+ email: params.params.q.email || ""
21
+ };
22
+ queryParams.append("q", JSON.stringify(q));
23
+ urlParts.push(...["api", "users", `?${queryParams.toString()}`]);
24
+ } else {
25
+ if (params.params.onBehalfOf) {
26
+ queryParams.append(
27
+ "onBehalfOf",
28
+ encodeURI(JSON.stringify(params.params.onBehalfOf))
29
+ );
30
+ }
31
+ queryParams.append("q", encodeURI(JSON.stringify(params.params.q)));
32
+ urlParts.push(...["api", "users", "search", `?${queryParams.toString()}`]);
33
+ }
34
+ const serviceContext = {
35
+ method: {
36
+ name: `UsersService.search`,
37
+ url: urlParts.join(`/`),
38
+ normalizedUrl: `api/users/search`,
39
+ type: "get"
40
+ },
41
+ source: params.config.metrics?.source || "unset",
42
+ target: {
43
+ name: "accounts",
44
+ type: "internal"
45
+ }
46
+ };
47
+ if (params.params.q.userId) {
48
+ UsersService.validateUserId(serviceContext, params.params.q.userId);
49
+ }
50
+ const response = await request({
51
+ config: params.config,
52
+ base: {
53
+ id: "accounts"
54
+ },
55
+ url: serviceContext.method.url,
56
+ method: serviceContext.method.type,
57
+ metricsDetails: serviceContext
58
+ });
59
+ if (!response.ok) {
60
+ throw new HttpError(
61
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
62
+ response.status,
63
+ response.statusText
64
+ );
65
+ }
66
+ return response.body;
67
+ }
68
+ static async simpleSearch(params) {
69
+ const serviceContext = {
70
+ method: {
71
+ name: `UsersService.simpleSearch`,
72
+ url: `api/users/search`,
73
+ normalizedUrl: `api/users/search`,
74
+ type: "post"
75
+ },
76
+ source: params.config.metrics?.source || "unset",
77
+ target: {
78
+ name: "accounts",
79
+ type: "internal"
80
+ }
81
+ };
82
+ switch (params.params.type) {
83
+ case "by-email":
84
+ UsersService.validateEmail(serviceContext, params.params.query);
85
+ break;
86
+ case "by-id":
87
+ UsersService.validateUserId(serviceContext, params.params.query);
88
+ break;
89
+ case "lucene":
90
+ UsersService.validateLuceneQuery(serviceContext, params.params.query);
91
+ break;
92
+ }
93
+ const response = await request({
94
+ config: params.config,
95
+ base: {
96
+ id: "accounts"
97
+ },
98
+ url: serviceContext.method.url,
99
+ method: serviceContext.method.type,
100
+ body: {
101
+ query: params.params.query,
102
+ type: params.params.type
103
+ },
104
+ metricsDetails: serviceContext
105
+ });
106
+ if (!response.ok) {
107
+ throw new HttpError(
108
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
109
+ response.status,
110
+ response.statusText
111
+ );
112
+ }
113
+ return response.body;
114
+ }
115
+ static async getUserInfo(params) {
116
+ const cacheKey = params.basic === true ? `basic-${params.userId}` : params.userId;
117
+ if (!params.cacheControl?.ignoreCache) {
118
+ const inCache = userCache.get(cacheKey);
119
+ if (inCache) {
120
+ return inCache;
121
+ }
122
+ }
123
+ let queryParams = "";
124
+ if (params.basic === true) {
125
+ const searchParams = new URLSearchParams();
126
+ searchParams.append("basic", "true");
127
+ queryParams = `?${searchParams.toString()}`;
128
+ }
129
+ const serviceContext = {
130
+ method: {
131
+ name: `UsersService.getUserInfo`,
132
+ url: `api/users/${params.userId}${queryParams}`,
133
+ normalizedUrl: `api/users/:userId`,
134
+ type: "get"
135
+ },
136
+ source: params.config.metrics?.source || "unset",
137
+ target: {
138
+ name: "accounts",
139
+ type: "internal"
140
+ }
141
+ };
142
+ UsersService.validateUserId(serviceContext, params.userId);
143
+ const response = await request({
144
+ ...params,
145
+ base: { id: "accounts" },
146
+ url: serviceContext.method.url,
147
+ method: serviceContext.method.type,
148
+ metricsDetails: serviceContext
149
+ });
150
+ if (!response.ok) {
151
+ throw new HttpError(
152
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
153
+ response.status,
154
+ response.statusText
155
+ );
156
+ }
157
+ userCache.set(cacheKey, response.body);
158
+ return response.body;
159
+ }
160
+ static async addUserToOrganization(params) {
161
+ const serviceContext = {
162
+ method: {
163
+ name: `UsersService.addUserToOrganization`,
164
+ url: `api/users/${params.params.userId}/organization/${params.params.orgId}`,
165
+ normalizedUrl: `api/users/:userId/organization/:orgId`,
166
+ type: "put"
167
+ },
168
+ source: params.config.metrics?.source || "unset",
169
+ target: {
170
+ name: "accounts",
171
+ type: "internal"
172
+ }
173
+ };
174
+ const response = await request({
175
+ config: params.config,
176
+ base: { id: "accounts" },
177
+ url: serviceContext.method.url,
178
+ method: serviceContext.method.type,
179
+ metricsDetails: serviceContext,
180
+ body: {
181
+ orgRoles: params.params.orgRoles,
182
+ byEmail: params.params.byEmail
183
+ },
184
+ responseType: "none"
185
+ });
186
+ if (!response.ok) {
187
+ throw new HttpError(
188
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
189
+ response.status,
190
+ response.statusText
191
+ );
192
+ }
193
+ }
194
+ static async removeUserFromOrganization(params) {
195
+ const serviceContext = {
196
+ method: {
197
+ name: `UsersService.removeUserFromOrganization`,
198
+ url: `api/users/${params.params.userId}/organization/${params.params.orgId}`,
199
+ normalizedUrl: `api/users/:userId/organization/:orgId`,
200
+ type: "delete"
201
+ },
202
+ source: params.config.metrics?.source || "unset",
203
+ target: {
204
+ name: "accounts",
205
+ type: "internal"
206
+ }
207
+ };
208
+ const response = await request({
209
+ config: params.config,
210
+ base: { id: "accounts" },
211
+ url: serviceContext.method.url,
212
+ method: serviceContext.method.type,
213
+ metricsDetails: serviceContext,
214
+ body: {
215
+ byEmail: params.params.byEmail
216
+ },
217
+ responseType: "none"
218
+ });
219
+ if (!response.ok) {
220
+ throw new HttpError(
221
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
222
+ response.status,
223
+ response.statusText
224
+ );
225
+ }
226
+ }
227
+ /**
228
+ * Update a user's role by adding or removing a single role.
229
+ * This uses the PATCH /api/users/:userId/roles endpoint.
230
+ * Supports email-based auth middleware via the x-camunda-email header.
231
+ */
232
+ static async updateUserRole(params) {
233
+ const serviceContext = {
234
+ method: {
235
+ name: `UsersService.updateUserRole`,
236
+ url: `api/users/${encodeURIComponent(params.params.userId)}/roles`,
237
+ normalizedUrl: `api/users/:userId/roles`,
238
+ type: "patch"
239
+ },
240
+ source: params.config.metrics?.source || "unset",
241
+ target: {
242
+ name: "accounts",
243
+ type: "internal"
244
+ }
245
+ };
246
+ UsersService.validateUserId(serviceContext, params.params.userId);
247
+ if (!params.params.roleToAdd && !params.params.roleToRemove) {
248
+ throw new HttpError(
249
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - either roleToAdd or roleToRemove must be specified`,
250
+ 400,
251
+ `Validation Error in API Package - either roleToAdd or roleToRemove must be specified`
252
+ );
253
+ }
254
+ const body = {};
255
+ if (params.params.roleToAdd) {
256
+ body.roleToAdd = params.params.roleToAdd;
257
+ }
258
+ if (params.params.roleToRemove) {
259
+ body.roleToRemove = params.params.roleToRemove;
260
+ }
261
+ const response = await request({
262
+ config: params.config,
263
+ base: { id: "accounts" },
264
+ url: serviceContext.method.url,
265
+ method: serviceContext.method.type,
266
+ metricsDetails: serviceContext,
267
+ body,
268
+ headers: params.headers,
269
+ responseType: "none"
270
+ });
271
+ if (!response.ok) {
272
+ throw new HttpError(
273
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
274
+ response.status,
275
+ response.statusText
276
+ );
277
+ }
278
+ }
279
+ /**
280
+ * Get all Hibob users (for bulk ghost account checks).
281
+ * This fetches all active Hibob employees in a single request.
282
+ */
283
+ static async getAllHibobUsers(params) {
284
+ const serviceContext = {
285
+ method: {
286
+ name: "UsersService.getAllHibobUsers",
287
+ url: "api/users/hibob/all",
288
+ normalizedUrl: "api/users/hibob/all",
289
+ type: "get"
290
+ },
291
+ source: params.config.metrics?.source || "unset",
292
+ target: {
293
+ name: "accounts",
294
+ type: "internal"
295
+ }
296
+ };
297
+ const response = await request({
298
+ ...params,
299
+ base: { id: "accounts" },
300
+ url: serviceContext.method.url,
301
+ method: serviceContext.method.type,
302
+ metricsDetails: serviceContext
303
+ });
304
+ if (!response.ok) {
305
+ throw new HttpError(
306
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
307
+ response.status,
308
+ response.statusText
309
+ );
310
+ }
311
+ return response.body;
312
+ }
313
+ /**
314
+ * Get Hibob details for a specific user by their Auth0 user ID.
315
+ */
316
+ static async getUserHibobDetails(params) {
317
+ const serviceContext = {
318
+ method: {
319
+ name: "UsersService.getUserHibobDetails",
320
+ url: `api/users/${encodeURIComponent(params.userId)}/hibob`,
321
+ normalizedUrl: "api/users/:userId/hibob",
322
+ type: "get"
323
+ },
324
+ source: params.config.metrics?.source || "unset",
325
+ target: {
326
+ name: "accounts",
327
+ type: "internal"
328
+ }
329
+ };
330
+ const response = await request({
331
+ ...params,
332
+ base: { id: "accounts" },
333
+ url: serviceContext.method.url,
334
+ method: serviceContext.method.type,
335
+ metricsDetails: serviceContext
336
+ });
337
+ if (!response.ok) {
338
+ throw new HttpError(
339
+ `${serviceContext.method.name}: ${response.status} ${response.statusText}`,
340
+ response.status,
341
+ response.statusText
342
+ );
343
+ }
344
+ return response.body;
345
+ }
346
+ static validateUserId(serviceContext, userId) {
347
+ if (!userId || !userId.includes("|")) {
348
+ throw new HttpError(
349
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - missing pipe '|'`,
350
+ 400,
351
+ `Validation Error in API Package - missing pipe '|'`
352
+ );
353
+ }
354
+ }
355
+ static validateEmail(serviceContext, email) {
356
+ if (!email || !REGEX_EMAIL.test(email)) {
357
+ throw new HttpError(
358
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - invalid email format`,
359
+ 400,
360
+ `Validation Error in API Package - invalid email format`
361
+ );
362
+ }
363
+ }
364
+ /**
365
+ * Validates a Lucene query string for Auth0 user search.
366
+ * Auth0 supports Lucene query syntax including:
367
+ * - Field queries: field:value (e.g., email:john@example.com)
368
+ * - Wildcards: field:*value*, field:value*
369
+ * - Boolean operators: AND, OR, NOT
370
+ * - Grouping: (field:value OR field:value)
371
+ * - Range queries: field:[min TO max]
372
+ * - Exact phrase: field:"exact phrase"
373
+ *
374
+ * @see https://auth0.com/docs/manage-users/user-search/user-search-query-syntax
375
+ */
376
+ static validateLuceneQuery(serviceContext, query) {
377
+ if (!query || query.trim().length === 0) {
378
+ throw new HttpError(
379
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - empty Lucene query`,
380
+ 400,
381
+ `Validation Error in API Package - empty Lucene query`
382
+ );
383
+ }
384
+ const trimmedQuery = query.trim();
385
+ let parenCount = 0;
386
+ for (const char of trimmedQuery) {
387
+ if (char === "(") parenCount++;
388
+ if (char === ")") parenCount--;
389
+ if (parenCount < 0) {
390
+ throw new HttpError(
391
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced parentheses in Lucene query`,
392
+ 400,
393
+ `Validation Error in API Package - unbalanced parentheses in Lucene query`
394
+ );
395
+ }
396
+ }
397
+ if (parenCount !== 0) {
398
+ throw new HttpError(
399
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced parentheses in Lucene query`,
400
+ 400,
401
+ `Validation Error in API Package - unbalanced parentheses in Lucene query`
402
+ );
403
+ }
404
+ let bracketCount = 0;
405
+ for (const char of trimmedQuery) {
406
+ if (char === "[") bracketCount++;
407
+ if (char === "]") bracketCount--;
408
+ if (bracketCount < 0) {
409
+ throw new HttpError(
410
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced brackets in Lucene query`,
411
+ 400,
412
+ `Validation Error in API Package - unbalanced brackets in Lucene query`
413
+ );
414
+ }
415
+ }
416
+ if (bracketCount !== 0) {
417
+ throw new HttpError(
418
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced brackets in Lucene query`,
419
+ 400,
420
+ `Validation Error in API Package - unbalanced brackets in Lucene query`
421
+ );
422
+ }
423
+ const quoteCount = (trimmedQuery.match(/"/gu) || []).length;
424
+ if (quoteCount % 2 !== 0) {
425
+ throw new HttpError(
426
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced quotes in Lucene query`,
427
+ 400,
428
+ `Validation Error in API Package - unbalanced quotes in Lucene query`
429
+ );
430
+ }
431
+ const hasFieldValue = /\b\w+:/u.test(trimmedQuery);
432
+ if (!hasFieldValue) {
433
+ throw new HttpError(
434
+ `${serviceContext.method.name}: 400 - Validation Error in API Package - Lucene query must contain field:value syntax (e.g., email:john@example.com)`,
435
+ 400,
436
+ `Validation Error in API Package - Lucene query must contain field:value syntax (e.g., email:john@example.com)`
437
+ );
438
+ }
439
+ }
440
+ }
441
+ export {
442
+ UsersService
443
+ };
444
+ //# sourceMappingURL=users.service.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/services/accounts/users.service.ts"],
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport {\n MINUTE,\n type OrganizationRole,\n type User,\n} from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { Cache } from '../../utils/cache.js'\nimport { HttpError } from '../../utils/errors.js'\nimport type { HibobSearchResponse } from '../hibob/hibob.service.js'\n\nconst userCache = new Cache<string, User>(5 * MINUTE)\nconst REGEX_EMAIL =\n // eslint-disable-next-line prefer-named-capture-group, no-useless-escape\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/u\n\nexport interface SearchParams extends RequestBaseParams {\n params: {\n q: {\n organization?: {\n uuid: string\n member: boolean\n }\n name?: string\n userId?: string\n roleId?: string\n email?: string\n signUpStatus?: {\n verified: boolean\n tokenExpired?: boolean\n }\n created?: {\n after?: Date\n before?: Date\n }\n }\n onBehalfOf?: string\n }\n}\n\nexport interface SimpleSearchParams extends RequestBaseParams {\n params: {\n query: string\n type: 'by-email' | 'by-id' | 'fuzzy' | 'lucene'\n }\n}\n\nexport interface AddUserToOrganizationRequest extends RequestBaseParams {\n params: {\n userId: string\n orgId: string\n orgRoles: OrganizationRole[]\n byEmail?: boolean\n }\n}\n\nexport interface RemoveUserFromOrganizationRequest extends RequestBaseParams {\n params: {\n userId: string\n orgId: string\n byEmail?: boolean\n }\n}\n\nexport interface UpdateUserRoleRequest extends RequestBaseParams {\n params: {\n userId: string\n roleToAdd?: string\n roleToRemove?: string\n }\n headers?: {\n 'x-camunda-email'?: string\n }\n}\n\nexport class UsersService {\n public static async search(params: SearchParams): Promise<User[]> {\n const queryParams = new URLSearchParams()\n const urlParts: string[] = []\n if (params.params.q.roleId) {\n // API route different if roleId is present\n // eslint-disable-next-line id-length\n const q = {\n roleId: params.params.q.roleId,\n name: params.params.q.name || '',\n email: params.params.q.email || '',\n }\n queryParams.append('q', JSON.stringify(q))\n urlParts.push(...['api', 'users', `?${queryParams.toString()}`])\n } else {\n if (params.params.onBehalfOf) {\n queryParams.append(\n 'onBehalfOf',\n encodeURI(JSON.stringify(params.params.onBehalfOf)),\n )\n }\n queryParams.append('q', encodeURI(JSON.stringify(params.params.q)))\n urlParts.push(...['api', 'users', 'search', `?${queryParams.toString()}`])\n }\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `UsersService.search`,\n url: urlParts.join(`/`),\n normalizedUrl: `api/users/search`,\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n // Validation\n if (params.params.q.userId) {\n UsersService.validateUserId(serviceContext, params.params.q.userId)\n }\n\n const response = await request<User[]>({\n config: params.config,\n base: {\n id: 'accounts',\n },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n\n public static async simpleSearch(\n params: SimpleSearchParams,\n ): Promise<{ users: User[] }> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `UsersService.simpleSearch`,\n url: `api/users/search`,\n normalizedUrl: `api/users/search`,\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n switch (params.params.type) {\n case 'by-email':\n UsersService.validateEmail(serviceContext, params.params.query)\n break\n case 'by-id':\n UsersService.validateUserId(serviceContext, params.params.query)\n break\n case 'lucene':\n UsersService.validateLuceneQuery(serviceContext, params.params.query)\n break\n }\n\n const response = await request<{ users: User[] }>({\n config: params.config,\n base: {\n id: 'accounts',\n },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n body: {\n query: params.params.query,\n type: params.params.type,\n },\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n\n public static async getUserInfo(\n params: { userId: string; basic?: boolean } & RequestBaseParams,\n ): Promise<User | undefined> {\n const cacheKey =\n params.basic === true ? `basic-${params.userId}` : params.userId\n if (!params.cacheControl?.ignoreCache) {\n const inCache = userCache.get(cacheKey)\n if (inCache) {\n return inCache\n }\n }\n\n let queryParams: string = ''\n if (params.basic === true) {\n const searchParams = new URLSearchParams()\n searchParams.append('basic', 'true')\n queryParams = `?${searchParams.toString()}`\n }\n\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `UsersService.getUserInfo`,\n url: `api/users/${params.userId}${queryParams}`,\n normalizedUrl: `api/users/:userId`,\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n // Validation\n UsersService.validateUserId(serviceContext, params.userId)\n\n const response = await request<User>({\n ...params,\n base: { id: 'accounts' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n userCache.set(cacheKey, response.body!)\n return response.body\n }\n\n public static async addUserToOrganization(\n params: AddUserToOrganizationRequest,\n ) {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `UsersService.addUserToOrganization`,\n url: `api/users/${params.params.userId}/organization/${params.params.orgId}`,\n normalizedUrl: `api/users/:userId/organization/:orgId`,\n type: 'put',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n const response = await request({\n config: params.config,\n base: { id: 'accounts' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: {\n orgRoles: params.params.orgRoles,\n byEmail: params.params.byEmail,\n },\n responseType: 'none',\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n }\n\n public static async removeUserFromOrganization(\n params: RemoveUserFromOrganizationRequest,\n ) {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `UsersService.removeUserFromOrganization`,\n url: `api/users/${params.params.userId}/organization/${params.params.orgId}`,\n normalizedUrl: `api/users/:userId/organization/:orgId`,\n type: 'delete',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n const response = await request({\n config: params.config,\n base: { id: 'accounts' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: {\n byEmail: params.params.byEmail,\n },\n responseType: 'none',\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n }\n\n /**\n * Update a user's role by adding or removing a single role.\n * This uses the PATCH /api/users/:userId/roles endpoint.\n * Supports email-based auth middleware via the x-camunda-email header.\n */\n public static async updateUserRole(\n params: UpdateUserRoleRequest,\n ): Promise<void> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `UsersService.updateUserRole`,\n url: `api/users/${encodeURIComponent(params.params.userId)}/roles`,\n normalizedUrl: `api/users/:userId/roles`,\n type: 'patch',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n // Validation\n UsersService.validateUserId(serviceContext, params.params.userId)\n\n if (!params.params.roleToAdd && !params.params.roleToRemove) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - either roleToAdd or roleToRemove must be specified`,\n 400,\n `Validation Error in API Package - either roleToAdd or roleToRemove must be specified`,\n )\n }\n\n const body: { roleToAdd?: string; roleToRemove?: string } = {}\n if (params.params.roleToAdd) {\n body.roleToAdd = params.params.roleToAdd\n }\n if (params.params.roleToRemove) {\n body.roleToRemove = params.params.roleToRemove\n }\n\n const response = await request({\n config: params.config,\n base: { id: 'accounts' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body,\n headers: params.headers,\n responseType: 'none',\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n }\n\n /**\n * Get all Hibob users (for bulk ghost account checks).\n * This fetches all active Hibob employees in a single request.\n */\n public static async getAllHibobUsers(\n params: RequestBaseParams,\n ): Promise<HibobSearchResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'UsersService.getAllHibobUsers',\n url: 'api/users/hibob/all',\n normalizedUrl: 'api/users/hibob/all',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n const response = await request<HibobSearchResponse>({\n ...params,\n base: { id: 'accounts' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n return response.body!\n }\n\n /**\n * Get Hibob details for a specific user by their Auth0 user ID.\n */\n public static async getUserHibobDetails(\n params: { userId: string } & RequestBaseParams,\n ): Promise<HibobSearchResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'UsersService.getUserHibobDetails',\n url: `api/users/${encodeURIComponent(params.userId)}/hibob`,\n normalizedUrl: 'api/users/:userId/hibob',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'accounts',\n type: 'internal',\n },\n }\n\n const response = await request<HibobSearchResponse>({\n ...params,\n base: { id: 'accounts' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n return response.body!\n }\n\n private static validateUserId(\n serviceContext: RequestBaseServiceContext,\n userId: string,\n ) {\n if (!userId || !userId.includes('|')) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - missing pipe '|'`,\n 400,\n `Validation Error in API Package - missing pipe '|'`,\n )\n }\n }\n\n private static validateEmail(\n serviceContext: RequestBaseServiceContext,\n email: string,\n ) {\n if (!email || !REGEX_EMAIL.test(email)) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - invalid email format`,\n 400,\n `Validation Error in API Package - invalid email format`,\n )\n }\n }\n\n /**\n * Validates a Lucene query string for Auth0 user search.\n * Auth0 supports Lucene query syntax including:\n * - Field queries: field:value (e.g., email:john@example.com)\n * - Wildcards: field:*value*, field:value*\n * - Boolean operators: AND, OR, NOT\n * - Grouping: (field:value OR field:value)\n * - Range queries: field:[min TO max]\n * - Exact phrase: field:\"exact phrase\"\n *\n * @see https://auth0.com/docs/manage-users/user-search/user-search-query-syntax\n */\n private static validateLuceneQuery(\n serviceContext: RequestBaseServiceContext,\n query: string,\n ) {\n if (!query || query.trim().length === 0) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - empty Lucene query`,\n 400,\n `Validation Error in API Package - empty Lucene query`,\n )\n }\n\n // Basic validation: query should contain at least a field:value pattern or be a valid search term\n // Auth0 Lucene syntax requires queries to have field:value format for structured searches\n const trimmedQuery = query.trim()\n\n // Check for unbalanced parentheses\n let parenCount = 0\n for (const char of trimmedQuery) {\n if (char === '(') parenCount++\n if (char === ')') parenCount--\n if (parenCount < 0) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced parentheses in Lucene query`,\n 400,\n `Validation Error in API Package - unbalanced parentheses in Lucene query`,\n )\n }\n }\n if (parenCount !== 0) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced parentheses in Lucene query`,\n 400,\n `Validation Error in API Package - unbalanced parentheses in Lucene query`,\n )\n }\n\n // Check for unbalanced square brackets (range queries)\n let bracketCount = 0\n for (const char of trimmedQuery) {\n if (char === '[') bracketCount++\n if (char === ']') bracketCount--\n if (bracketCount < 0) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced brackets in Lucene query`,\n 400,\n `Validation Error in API Package - unbalanced brackets in Lucene query`,\n )\n }\n }\n if (bracketCount !== 0) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced brackets in Lucene query`,\n 400,\n `Validation Error in API Package - unbalanced brackets in Lucene query`,\n )\n }\n\n // Check for unbalanced quotes\n const quoteCount = (trimmedQuery.match(/\"/gu) || []).length\n if (quoteCount % 2 !== 0) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - unbalanced quotes in Lucene query`,\n 400,\n `Validation Error in API Package - unbalanced quotes in Lucene query`,\n )\n }\n\n // Validate that query contains at least one valid field:value pattern or search term\n // A valid Lucene query for Auth0 should have field:value syntax\n // Use word boundary to match field:value patterns anywhere in the query\n const hasFieldValue = /\\b\\w+:/u.test(trimmedQuery)\n if (!hasFieldValue) {\n throw new HttpError(\n `${serviceContext.method.name}: 400 - Validation Error in API Package - Lucene query must contain field:value syntax (e.g., email:john@example.com)`,\n 400,\n `Validation Error in API Package - Lucene query must contain field:value syntax (e.g., email:john@example.com)`,\n )\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,59 @@
1
+ import type { AlertSubscriptionDto, AlertSubscriptionEntryDto, AlertSubscriptionReportType, AlertSubscriptionType, AlertSubscriptionWebhookAuth } from '@camunda/ccma-shared-types';
2
+ import type { RequestBaseParams } from '../../types/general.types.js';
3
+ export interface GetAlertSubscriptions extends RequestBaseParams {
4
+ params: {
5
+ clusterUuid: string;
6
+ };
7
+ }
8
+ export interface CreateAlertSubscription extends RequestBaseParams {
9
+ params: {
10
+ creator: string;
11
+ clusterUuid: string;
12
+ userIdOrWebhook: string;
13
+ type: AlertSubscriptionType;
14
+ report: AlertSubscriptionReportType;
15
+ options?: {
16
+ webhookAuth?: AlertSubscriptionWebhookAuth;
17
+ ignoreHead?: boolean;
18
+ };
19
+ };
20
+ }
21
+ export interface UpdateAlertSubscription extends RequestBaseParams {
22
+ params: {
23
+ alertSubscriptionUuid: string;
24
+ updater: string;
25
+ clusterUuid: string;
26
+ userIdOrWebhook: string;
27
+ type: AlertSubscriptionType;
28
+ report: AlertSubscriptionReportType;
29
+ options?: {
30
+ webhookAuth?: AlertSubscriptionWebhookAuth;
31
+ ignoreHead?: boolean;
32
+ };
33
+ };
34
+ }
35
+ export interface DeleteAlertSubscription extends RequestBaseParams {
36
+ params: {
37
+ alertSubscriptionUuid: string;
38
+ };
39
+ }
40
+ export interface DeleteAlertSubscriptionForCluster extends RequestBaseParams {
41
+ params: {
42
+ clusterUuid: string;
43
+ };
44
+ }
45
+ export interface PushAlert extends RequestBaseParams {
46
+ params: {
47
+ clusterUuid: string;
48
+ alerts: AlertSubscriptionEntryDto[];
49
+ };
50
+ }
51
+ export declare class AlertsService {
52
+ static getSubscriptions(params: GetAlertSubscriptions): Promise<AlertSubscriptionDto[]>;
53
+ static createNewSubscription(params: CreateAlertSubscription): Promise<AlertSubscriptionDto>;
54
+ static update(params: UpdateAlertSubscription): Promise<AlertSubscriptionDto>;
55
+ static delete(params: DeleteAlertSubscription): Promise<AlertSubscriptionDto>;
56
+ static deleteForCluster(params: DeleteAlertSubscriptionForCluster): Promise<AlertSubscriptionDto>;
57
+ static pushWorkflowAlerts(params: PushAlert): Promise<void>;
58
+ static pushClusterAlerts(params: PushAlert): Promise<void>;
59
+ }