@tritonium/api-client 2.1.0

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.
package/dist/index.mjs ADDED
@@ -0,0 +1,2992 @@
1
+ import * as crypto from 'crypto';
2
+
3
+ var __typeError = (msg) => {
4
+ throw TypeError(msg);
5
+ };
6
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
7
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
8
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
10
+
11
+ // core/ApiError.ts
12
+ var ApiError = class extends Error {
13
+ constructor(request2, response, message) {
14
+ super(message);
15
+ this.name = "ApiError";
16
+ this.url = response.url;
17
+ this.status = response.status;
18
+ this.statusText = response.statusText;
19
+ this.body = response.body;
20
+ this.request = request2;
21
+ }
22
+ };
23
+
24
+ // core/CancelablePromise.ts
25
+ var CancelError = class extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = "CancelError";
29
+ }
30
+ get isCancelled() {
31
+ return true;
32
+ }
33
+ };
34
+ var _isResolved, _isRejected, _isCancelled, _cancelHandlers, _promise, _resolve, _reject;
35
+ var CancelablePromise = class {
36
+ constructor(executor) {
37
+ __privateAdd(this, _isResolved);
38
+ __privateAdd(this, _isRejected);
39
+ __privateAdd(this, _isCancelled);
40
+ __privateAdd(this, _cancelHandlers);
41
+ __privateAdd(this, _promise);
42
+ __privateAdd(this, _resolve);
43
+ __privateAdd(this, _reject);
44
+ __privateSet(this, _isResolved, false);
45
+ __privateSet(this, _isRejected, false);
46
+ __privateSet(this, _isCancelled, false);
47
+ __privateSet(this, _cancelHandlers, []);
48
+ __privateSet(this, _promise, new Promise((resolve2, reject) => {
49
+ __privateSet(this, _resolve, resolve2);
50
+ __privateSet(this, _reject, reject);
51
+ const onResolve = (value) => {
52
+ if (__privateGet(this, _isResolved) || __privateGet(this, _isRejected) || __privateGet(this, _isCancelled)) {
53
+ return;
54
+ }
55
+ __privateSet(this, _isResolved, true);
56
+ if (__privateGet(this, _resolve)) __privateGet(this, _resolve).call(this, value);
57
+ };
58
+ const onReject = (reason) => {
59
+ if (__privateGet(this, _isResolved) || __privateGet(this, _isRejected) || __privateGet(this, _isCancelled)) {
60
+ return;
61
+ }
62
+ __privateSet(this, _isRejected, true);
63
+ if (__privateGet(this, _reject)) __privateGet(this, _reject).call(this, reason);
64
+ };
65
+ const onCancel = (cancelHandler) => {
66
+ if (__privateGet(this, _isResolved) || __privateGet(this, _isRejected) || __privateGet(this, _isCancelled)) {
67
+ return;
68
+ }
69
+ __privateGet(this, _cancelHandlers).push(cancelHandler);
70
+ };
71
+ Object.defineProperty(onCancel, "isResolved", {
72
+ get: () => __privateGet(this, _isResolved)
73
+ });
74
+ Object.defineProperty(onCancel, "isRejected", {
75
+ get: () => __privateGet(this, _isRejected)
76
+ });
77
+ Object.defineProperty(onCancel, "isCancelled", {
78
+ get: () => __privateGet(this, _isCancelled)
79
+ });
80
+ return executor(onResolve, onReject, onCancel);
81
+ }));
82
+ }
83
+ get [Symbol.toStringTag]() {
84
+ return "Cancellable Promise";
85
+ }
86
+ then(onFulfilled, onRejected) {
87
+ return __privateGet(this, _promise).then(onFulfilled, onRejected);
88
+ }
89
+ catch(onRejected) {
90
+ return __privateGet(this, _promise).catch(onRejected);
91
+ }
92
+ finally(onFinally) {
93
+ return __privateGet(this, _promise).finally(onFinally);
94
+ }
95
+ cancel() {
96
+ if (__privateGet(this, _isResolved) || __privateGet(this, _isRejected) || __privateGet(this, _isCancelled)) {
97
+ return;
98
+ }
99
+ __privateSet(this, _isCancelled, true);
100
+ if (__privateGet(this, _cancelHandlers).length) {
101
+ try {
102
+ for (const cancelHandler of __privateGet(this, _cancelHandlers)) {
103
+ cancelHandler();
104
+ }
105
+ } catch (error) {
106
+ console.warn("Cancellation threw an error", error);
107
+ return;
108
+ }
109
+ }
110
+ __privateGet(this, _cancelHandlers).length = 0;
111
+ if (__privateGet(this, _reject)) __privateGet(this, _reject).call(this, new CancelError("Request aborted"));
112
+ }
113
+ get isCancelled() {
114
+ return __privateGet(this, _isCancelled);
115
+ }
116
+ };
117
+ _isResolved = new WeakMap();
118
+ _isRejected = new WeakMap();
119
+ _isCancelled = new WeakMap();
120
+ _cancelHandlers = new WeakMap();
121
+ _promise = new WeakMap();
122
+ _resolve = new WeakMap();
123
+ _reject = new WeakMap();
124
+
125
+ // core/OpenAPI.ts
126
+ var OpenAPI = {
127
+ BASE: "https://api.tritonium.com",
128
+ VERSION: "1.0.0",
129
+ WITH_CREDENTIALS: false,
130
+ CREDENTIALS: "include",
131
+ TOKEN: void 0,
132
+ USERNAME: void 0,
133
+ PASSWORD: void 0,
134
+ HEADERS: void 0,
135
+ ENCODE_PATH: void 0
136
+ };
137
+
138
+ // auth.ts
139
+ function configureApiKey(apiKey, baseUrl = "https://api.tritonium.com") {
140
+ OpenAPI.BASE = baseUrl;
141
+ const existingHeaders = typeof OpenAPI.HEADERS === "object" && OpenAPI.HEADERS !== null ? OpenAPI.HEADERS : {};
142
+ OpenAPI.HEADERS = {
143
+ ...existingHeaders,
144
+ "X-API-Key": apiKey
145
+ };
146
+ if (OpenAPI.TOKEN) {
147
+ OpenAPI.TOKEN = void 0;
148
+ }
149
+ }
150
+ function configureBearerToken(token, baseUrl = "https://api.tritonium.com") {
151
+ OpenAPI.BASE = baseUrl;
152
+ OpenAPI.TOKEN = token;
153
+ if (OpenAPI.HEADERS && "X-API-Key" in OpenAPI.HEADERS) {
154
+ const { "X-API-Key": _, ...rest } = OpenAPI.HEADERS;
155
+ OpenAPI.HEADERS = rest;
156
+ }
157
+ }
158
+ function configure(config) {
159
+ if (config.baseUrl) {
160
+ OpenAPI.BASE = config.baseUrl;
161
+ }
162
+ if (config.apiKey) {
163
+ OpenAPI.HEADERS = {
164
+ ...OpenAPI.HEADERS,
165
+ ...config.headers,
166
+ "X-API-Key": config.apiKey
167
+ };
168
+ OpenAPI.TOKEN = void 0;
169
+ } else if (config.token) {
170
+ OpenAPI.TOKEN = config.token;
171
+ OpenAPI.HEADERS = {
172
+ ...OpenAPI.HEADERS,
173
+ ...config.headers
174
+ };
175
+ } else if (config.headers) {
176
+ OpenAPI.HEADERS = {
177
+ ...OpenAPI.HEADERS,
178
+ ...config.headers
179
+ };
180
+ }
181
+ }
182
+ function getConfiguration() {
183
+ const headers = OpenAPI.HEADERS;
184
+ const hasApiKey = typeof headers === "object" && headers !== null && "X-API-Key" in headers;
185
+ return {
186
+ baseUrl: OpenAPI.BASE,
187
+ hasApiKey,
188
+ hasToken: Boolean(OpenAPI.TOKEN)
189
+ };
190
+ }
191
+ function clearAuth() {
192
+ OpenAPI.TOKEN = void 0;
193
+ const headers = OpenAPI.HEADERS;
194
+ if (typeof headers === "object" && headers !== null && "X-API-Key" in headers) {
195
+ const { "X-API-Key": _, ...rest } = headers;
196
+ OpenAPI.HEADERS = rest;
197
+ }
198
+ }
199
+ var WebhookVerificationError = class extends Error {
200
+ constructor(message) {
201
+ super(message);
202
+ this.name = "WebhookVerificationError";
203
+ }
204
+ };
205
+ var WebhookExpiredError = class extends WebhookVerificationError {
206
+ constructor(message) {
207
+ super(message);
208
+ this.name = "WebhookExpiredError";
209
+ }
210
+ };
211
+ var WebhookSignatureError = class extends WebhookVerificationError {
212
+ constructor(message) {
213
+ super(message);
214
+ this.name = "WebhookSignatureError";
215
+ }
216
+ };
217
+ var EventTypes = {
218
+ CRISIS_DETECTED: "crisis.detected",
219
+ INSIGHT_GENERATED: "insight.generated",
220
+ REVIEW_RECEIVED: "review.received",
221
+ ANALYSIS_COMPLETED: "analysis.completed",
222
+ ALERT_TRIGGERED: "alert.triggered",
223
+ TEST_PING: "test.ping"
224
+ };
225
+ function verifySignature(payload, signature, secret) {
226
+ const payloadBuffer = typeof payload === "string" ? Buffer.from(payload) : payload;
227
+ const receivedSig = signature.startsWith("sha256=") ? signature.slice(7) : signature;
228
+ const expectedSig = crypto.createHmac("sha256", secret).update(payloadBuffer).digest("hex");
229
+ try {
230
+ return crypto.timingSafeEqual(
231
+ Buffer.from(receivedSig),
232
+ Buffer.from(expectedSig)
233
+ );
234
+ } catch {
235
+ return false;
236
+ }
237
+ }
238
+ function verifyTimestamp(timestamp, toleranceSeconds = 300) {
239
+ try {
240
+ const webhookTime = new Date(timestamp).getTime();
241
+ const now = Date.now();
242
+ const ageMs = Math.abs(now - webhookTime);
243
+ return ageMs <= toleranceSeconds * 1e3;
244
+ } catch {
245
+ return false;
246
+ }
247
+ }
248
+ function verifyWebhook(options) {
249
+ const { payload, signature, timestamp, secret, toleranceSeconds = 300 } = options;
250
+ if (!verifyTimestamp(timestamp, toleranceSeconds)) {
251
+ throw new WebhookExpiredError(
252
+ `Webhook timestamp is too old or invalid: ${timestamp}`
253
+ );
254
+ }
255
+ if (!verifySignature(payload, signature, secret)) {
256
+ throw new WebhookSignatureError("Invalid webhook signature");
257
+ }
258
+ let data;
259
+ try {
260
+ const payloadStr = typeof payload === "string" ? payload : payload.toString("utf-8");
261
+ data = JSON.parse(payloadStr);
262
+ } catch (e) {
263
+ throw new WebhookVerificationError(`Invalid webhook payload: ${e}`);
264
+ }
265
+ let eventTimestamp;
266
+ try {
267
+ eventTimestamp = new Date(
268
+ data.timestamp || timestamp
269
+ );
270
+ } catch {
271
+ eventTimestamp = /* @__PURE__ */ new Date();
272
+ }
273
+ return {
274
+ eventId: data.event_id || "",
275
+ eventType: data.event_type || "",
276
+ timestamp: eventTimestamp,
277
+ tenantId: data.tenant_id || "",
278
+ appUuid: data.app_uuid,
279
+ data: data.data || {},
280
+ rawPayload: data
281
+ };
282
+ }
283
+ var constructEvent = verifyWebhook;
284
+ function isWebhookError(error) {
285
+ return error instanceof WebhookVerificationError;
286
+ }
287
+
288
+ // models/Alert.ts
289
+ var Alert;
290
+ ((Alert2) => {
291
+ ((severity2) => {
292
+ severity2["CRITICAL"] = "critical";
293
+ severity2["HIGH"] = "high";
294
+ severity2["MEDIUM"] = "medium";
295
+ severity2["LOW"] = "low";
296
+ })(Alert2.severity || (Alert2.severity = {}));
297
+ ((status2) => {
298
+ status2["UNREAD"] = "unread";
299
+ status2["READ"] = "read";
300
+ status2["ACKNOWLEDGED"] = "acknowledged";
301
+ status2["SNOOZED"] = "snoozed";
302
+ })(Alert2.status || (Alert2.status = {}));
303
+ })(Alert || (Alert = {}));
304
+
305
+ // models/AlertUpdateRequest.ts
306
+ var AlertUpdateRequest;
307
+ ((AlertUpdateRequest2) => {
308
+ ((status2) => {
309
+ status2["UNREAD"] = "unread";
310
+ status2["READ"] = "read";
311
+ status2["ACKNOWLEDGED"] = "acknowledged";
312
+ status2["SNOOZED"] = "snoozed";
313
+ })(AlertUpdateRequest2.status || (AlertUpdateRequest2.status = {}));
314
+ })(AlertUpdateRequest || (AlertUpdateRequest = {}));
315
+
316
+ // models/AutoSyncConfigRequest.ts
317
+ var AutoSyncConfigRequest;
318
+ ((AutoSyncConfigRequest2) => {
319
+ ((frequency2) => {
320
+ frequency2["HOURLY"] = "hourly";
321
+ frequency2["DAILY"] = "daily";
322
+ frequency2["WEEKLY"] = "weekly";
323
+ })(AutoSyncConfigRequest2.frequency || (AutoSyncConfigRequest2.frequency = {}));
324
+ })(AutoSyncConfigRequest || (AutoSyncConfigRequest = {}));
325
+
326
+ // core/request.ts
327
+ var isDefined = (value) => {
328
+ return value !== void 0 && value !== null;
329
+ };
330
+ var isString = (value) => {
331
+ return typeof value === "string";
332
+ };
333
+ var isStringWithValue = (value) => {
334
+ return isString(value) && value !== "";
335
+ };
336
+ var isBlob = (value) => {
337
+ return typeof value === "object" && typeof value.type === "string" && typeof value.stream === "function" && typeof value.arrayBuffer === "function" && typeof value.constructor === "function" && typeof value.constructor.name === "string" && /^(Blob|File)$/.test(value.constructor.name) && /^(Blob|File)$/.test(value[Symbol.toStringTag]);
338
+ };
339
+ var isFormData = (value) => {
340
+ return value instanceof FormData;
341
+ };
342
+ var base64 = (str) => {
343
+ try {
344
+ return btoa(str);
345
+ } catch (err) {
346
+ return Buffer.from(str).toString("base64");
347
+ }
348
+ };
349
+ var getQueryString = (params) => {
350
+ const qs = [];
351
+ const append = (key, value) => {
352
+ qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
353
+ };
354
+ const process = (key, value) => {
355
+ if (isDefined(value)) {
356
+ if (Array.isArray(value)) {
357
+ value.forEach((v) => {
358
+ process(key, v);
359
+ });
360
+ } else if (typeof value === "object") {
361
+ Object.entries(value).forEach(([k, v]) => {
362
+ process(`${key}[${k}]`, v);
363
+ });
364
+ } else {
365
+ append(key, value);
366
+ }
367
+ }
368
+ };
369
+ Object.entries(params).forEach(([key, value]) => {
370
+ process(key, value);
371
+ });
372
+ if (qs.length > 0) {
373
+ return `?${qs.join("&")}`;
374
+ }
375
+ return "";
376
+ };
377
+ var getUrl = (config, options) => {
378
+ const encoder = config.ENCODE_PATH || encodeURI;
379
+ const path = options.url.replace("{api-version}", config.VERSION).replace(/{(.*?)}/g, (substring, group) => {
380
+ if (options.path?.hasOwnProperty(group)) {
381
+ return encoder(String(options.path[group]));
382
+ }
383
+ return substring;
384
+ });
385
+ const url = `${config.BASE}${path}`;
386
+ if (options.query) {
387
+ return `${url}${getQueryString(options.query)}`;
388
+ }
389
+ return url;
390
+ };
391
+ var getFormData = (options) => {
392
+ if (options.formData) {
393
+ const formData = new FormData();
394
+ const process = (key, value) => {
395
+ if (isString(value) || isBlob(value)) {
396
+ formData.append(key, value);
397
+ } else {
398
+ formData.append(key, JSON.stringify(value));
399
+ }
400
+ };
401
+ Object.entries(options.formData).filter(([_, value]) => isDefined(value)).forEach(([key, value]) => {
402
+ if (Array.isArray(value)) {
403
+ value.forEach((v) => process(key, v));
404
+ } else {
405
+ process(key, value);
406
+ }
407
+ });
408
+ return formData;
409
+ }
410
+ return void 0;
411
+ };
412
+ var resolve = async (options, resolver) => {
413
+ if (typeof resolver === "function") {
414
+ return resolver(options);
415
+ }
416
+ return resolver;
417
+ };
418
+ var getHeaders = async (config, options) => {
419
+ const [token, username, password, additionalHeaders] = await Promise.all([
420
+ resolve(options, config.TOKEN),
421
+ resolve(options, config.USERNAME),
422
+ resolve(options, config.PASSWORD),
423
+ resolve(options, config.HEADERS)
424
+ ]);
425
+ const headers = Object.entries({
426
+ Accept: "application/json",
427
+ ...additionalHeaders,
428
+ ...options.headers
429
+ }).filter(([_, value]) => isDefined(value)).reduce((headers2, [key, value]) => ({
430
+ ...headers2,
431
+ [key]: String(value)
432
+ }), {});
433
+ if (isStringWithValue(token)) {
434
+ headers["Authorization"] = `Bearer ${token}`;
435
+ }
436
+ if (isStringWithValue(username) && isStringWithValue(password)) {
437
+ const credentials = base64(`${username}:${password}`);
438
+ headers["Authorization"] = `Basic ${credentials}`;
439
+ }
440
+ if (options.body !== void 0) {
441
+ if (options.mediaType) {
442
+ headers["Content-Type"] = options.mediaType;
443
+ } else if (isBlob(options.body)) {
444
+ headers["Content-Type"] = options.body.type || "application/octet-stream";
445
+ } else if (isString(options.body)) {
446
+ headers["Content-Type"] = "text/plain";
447
+ } else if (!isFormData(options.body)) {
448
+ headers["Content-Type"] = "application/json";
449
+ }
450
+ }
451
+ return new Headers(headers);
452
+ };
453
+ var getRequestBody = (options) => {
454
+ if (options.body !== void 0) {
455
+ if (options.mediaType?.includes("/json")) {
456
+ return JSON.stringify(options.body);
457
+ } else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
458
+ return options.body;
459
+ } else {
460
+ return JSON.stringify(options.body);
461
+ }
462
+ }
463
+ return void 0;
464
+ };
465
+ var sendRequest = async (config, options, url, body, formData, headers, onCancel) => {
466
+ const controller = new AbortController();
467
+ const request2 = {
468
+ headers,
469
+ body: body ?? formData,
470
+ method: options.method,
471
+ signal: controller.signal
472
+ };
473
+ if (config.WITH_CREDENTIALS) {
474
+ request2.credentials = config.CREDENTIALS;
475
+ }
476
+ onCancel(() => controller.abort());
477
+ return await fetch(url, request2);
478
+ };
479
+ var getResponseHeader = (response, responseHeader) => {
480
+ if (responseHeader) {
481
+ const content = response.headers.get(responseHeader);
482
+ if (isString(content)) {
483
+ return content;
484
+ }
485
+ }
486
+ return void 0;
487
+ };
488
+ var getResponseBody = async (response) => {
489
+ if (response.status !== 204) {
490
+ try {
491
+ const contentType = response.headers.get("Content-Type");
492
+ if (contentType) {
493
+ const jsonTypes = ["application/json", "application/problem+json"];
494
+ const isJSON = jsonTypes.some((type) => contentType.toLowerCase().startsWith(type));
495
+ if (isJSON) {
496
+ return await response.json();
497
+ } else {
498
+ return await response.text();
499
+ }
500
+ }
501
+ } catch (error) {
502
+ console.error(error);
503
+ }
504
+ }
505
+ return void 0;
506
+ };
507
+ var catchErrorCodes = (options, result) => {
508
+ const errors = {
509
+ 400: "Bad Request",
510
+ 401: "Unauthorized",
511
+ 403: "Forbidden",
512
+ 404: "Not Found",
513
+ 500: "Internal Server Error",
514
+ 502: "Bad Gateway",
515
+ 503: "Service Unavailable",
516
+ ...options.errors
517
+ };
518
+ const error = errors[result.status];
519
+ if (error) {
520
+ throw new ApiError(options, result, error);
521
+ }
522
+ if (!result.ok) {
523
+ const errorStatus = result.status ?? "unknown";
524
+ const errorStatusText = result.statusText ?? "unknown";
525
+ const errorBody = (() => {
526
+ try {
527
+ return JSON.stringify(result.body, null, 2);
528
+ } catch (e) {
529
+ return void 0;
530
+ }
531
+ })();
532
+ throw new ApiError(
533
+ options,
534
+ result,
535
+ `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`
536
+ );
537
+ }
538
+ };
539
+ var request = (config, options) => {
540
+ return new CancelablePromise(async (resolve2, reject, onCancel) => {
541
+ try {
542
+ const url = getUrl(config, options);
543
+ const formData = getFormData(options);
544
+ const body = getRequestBody(options);
545
+ const headers = await getHeaders(config, options);
546
+ if (!onCancel.isCancelled) {
547
+ const response = await sendRequest(config, options, url, body, formData, headers, onCancel);
548
+ const responseBody = await getResponseBody(response);
549
+ const responseHeader = getResponseHeader(response, options.responseHeader);
550
+ const result = {
551
+ url,
552
+ ok: response.ok,
553
+ status: response.status,
554
+ statusText: response.statusText,
555
+ body: responseHeader ?? responseBody
556
+ };
557
+ catchErrorCodes(options, result);
558
+ resolve2(result.body);
559
+ }
560
+ } catch (error) {
561
+ reject(error);
562
+ }
563
+ });
564
+ };
565
+
566
+ // services/AlertsService.ts
567
+ var AlertsService = class {
568
+ /**
569
+ * List alert notifications for the tenant.
570
+ * @param limit
571
+ * @param cursor
572
+ * @param severity
573
+ * @param status
574
+ * @returns any Alerts returned.
575
+ * @throws ApiError
576
+ */
577
+ static getAlerts(limit, cursor, severity, status) {
578
+ return request(OpenAPI, {
579
+ method: "GET",
580
+ url: "/api/v1/alerts",
581
+ query: {
582
+ "limit": limit,
583
+ "cursor": cursor,
584
+ "severity": severity,
585
+ "status": status
586
+ },
587
+ errors: {
588
+ 401: `Authentication required or token invalid.`
589
+ }
590
+ });
591
+ }
592
+ /**
593
+ * Retrieve alert details.
594
+ * @param alertId
595
+ * @returns Alert Alert returned.
596
+ * @throws ApiError
597
+ */
598
+ static getAlert(alertId) {
599
+ return request(OpenAPI, {
600
+ method: "GET",
601
+ url: "/api/v1/alerts/{alertId}",
602
+ path: {
603
+ "alertId": alertId
604
+ },
605
+ errors: {
606
+ 401: `Authentication required or token invalid.`,
607
+ 404: `Resource not found.`
608
+ }
609
+ });
610
+ }
611
+ /**
612
+ * Update alert status or acknowledgement metadata.
613
+ * @param alertId
614
+ * @param requestBody
615
+ * @returns Alert Alert updated.
616
+ * @throws ApiError
617
+ */
618
+ static patchAlert(alertId, requestBody) {
619
+ return request(OpenAPI, {
620
+ method: "PATCH",
621
+ url: "/api/v1/alerts/{alertId}",
622
+ path: {
623
+ "alertId": alertId
624
+ },
625
+ body: requestBody,
626
+ mediaType: "application/json",
627
+ errors: {
628
+ 400: `Request validation failed.`,
629
+ 401: `Authentication required or token invalid.`,
630
+ 404: `Resource not found.`
631
+ }
632
+ });
633
+ }
634
+ /**
635
+ * Assign an alert to a team member.
636
+ * Assigns the specified alert to a team member for follow-up. Used by the alerts PWA for delegation workflows.
637
+ * @param alertId
638
+ * @param requestBody
639
+ * @returns GenericSuccess Alert assigned successfully.
640
+ * @throws ApiError
641
+ */
642
+ static postAlertAssign(alertId, requestBody) {
643
+ return request(OpenAPI, {
644
+ method: "POST",
645
+ url: "/api/v1/alerts/{alertId}/assign",
646
+ path: {
647
+ "alertId": alertId
648
+ },
649
+ body: requestBody,
650
+ mediaType: "application/json",
651
+ errors: {
652
+ 400: `Request validation failed.`,
653
+ 401: `Authentication required or token invalid.`,
654
+ 404: `Resource not found.`
655
+ }
656
+ });
657
+ }
658
+ };
659
+
660
+ // services/AppsService.ts
661
+ var AppsService = class {
662
+ /**
663
+ * List apps connected to the current tenant.
664
+ * @returns any Apps retrieved.
665
+ * @throws ApiError
666
+ */
667
+ static getApps() {
668
+ return request(OpenAPI, {
669
+ method: "GET",
670
+ url: "/api/v1/apps",
671
+ errors: {
672
+ 401: `Authentication required or token invalid.`
673
+ }
674
+ });
675
+ }
676
+ /**
677
+ * Connect a new app using stored credentials.
678
+ * @param requestBody
679
+ * @returns AppSummary App connected.
680
+ * @throws ApiError
681
+ */
682
+ static postAppsConnect(requestBody) {
683
+ return request(OpenAPI, {
684
+ method: "POST",
685
+ url: "/api/v1/apps",
686
+ body: requestBody,
687
+ mediaType: "application/json",
688
+ errors: {
689
+ 400: `Request validation failed.`,
690
+ 401: `Authentication required or token invalid.`
691
+ }
692
+ });
693
+ }
694
+ /**
695
+ * Alias endpoint for connecting apps.
696
+ * @param requestBody
697
+ * @returns AppSummary App connected.
698
+ * @throws ApiError
699
+ */
700
+ static postAppsConnectAlias(requestBody) {
701
+ return request(OpenAPI, {
702
+ method: "POST",
703
+ url: "/api/v1/apps/connect",
704
+ body: requestBody,
705
+ mediaType: "application/json",
706
+ errors: {
707
+ 400: `Request validation failed.`,
708
+ 401: `Authentication required or token invalid.`
709
+ }
710
+ });
711
+ }
712
+ /**
713
+ * Trigger an on-demand review sync for a specific app.
714
+ * @param requestBody
715
+ * @returns GenericSuccess Sync job queued.
716
+ * @throws ApiError
717
+ */
718
+ static postAppsSync(requestBody) {
719
+ return request(OpenAPI, {
720
+ method: "POST",
721
+ url: "/api/v1/apps/sync",
722
+ body: requestBody,
723
+ mediaType: "application/json",
724
+ errors: {
725
+ 400: `Request validation failed.`,
726
+ 401: `Authentication required or token invalid.`,
727
+ 403: `Request not permitted for this user.`
728
+ }
729
+ });
730
+ }
731
+ /**
732
+ * Queue AI-powered analysis for an app.
733
+ * @param requestBody
734
+ * @returns any Analysis queued or cached result returned.
735
+ * @throws ApiError
736
+ */
737
+ static postAppsAnalyze(requestBody) {
738
+ return request(OpenAPI, {
739
+ method: "POST",
740
+ url: "/api/v1/apps/analyze",
741
+ body: requestBody,
742
+ mediaType: "application/json",
743
+ errors: {
744
+ 400: `Request validation failed.`,
745
+ 401: `Authentication required or token invalid.`,
746
+ 403: `Request not permitted for this user.`
747
+ }
748
+ });
749
+ }
750
+ /**
751
+ * Update automatic review sync settings.
752
+ * @param appUuid
753
+ * @param requestBody
754
+ * @returns any Auto-sync settings updated.
755
+ * @throws ApiError
756
+ */
757
+ static patchAppAutoSync(appUuid, requestBody) {
758
+ return request(OpenAPI, {
759
+ method: "PATCH",
760
+ url: "/api/v1/apps/{appUuid}/auto-sync",
761
+ path: {
762
+ "appUuid": appUuid
763
+ },
764
+ body: requestBody,
765
+ mediaType: "application/json",
766
+ errors: {
767
+ 400: `Request validation failed.`,
768
+ 401: `Authentication required or token invalid.`,
769
+ 403: `Request not permitted for this user.`,
770
+ 404: `Resource not found.`
771
+ }
772
+ });
773
+ }
774
+ /**
775
+ * Enable or disable automatic review sync.
776
+ * @param appUuid
777
+ * @param requestBody
778
+ * @returns any Auto-sync settings updated.
779
+ * @throws ApiError
780
+ */
781
+ static postAppAutoSync(appUuid, requestBody) {
782
+ return request(OpenAPI, {
783
+ method: "POST",
784
+ url: "/api/v1/apps/{appUuid}/auto-sync",
785
+ path: {
786
+ "appUuid": appUuid
787
+ },
788
+ body: requestBody,
789
+ mediaType: "application/json",
790
+ errors: {
791
+ 400: `Request validation failed.`,
792
+ 401: `Authentication required or token invalid.`,
793
+ 403: `Request not permitted for this user.`,
794
+ 404: `Resource not found.`
795
+ }
796
+ });
797
+ }
798
+ /**
799
+ * List competitor apps registered for benchmarking.
800
+ * @param appUuid
801
+ * @returns any Competitors returned.
802
+ * @throws ApiError
803
+ */
804
+ static getCompetitors(appUuid) {
805
+ return request(OpenAPI, {
806
+ method: "GET",
807
+ url: "/api/v1/apps/{appUuid}/competitors",
808
+ path: {
809
+ "appUuid": appUuid
810
+ },
811
+ errors: {
812
+ 401: `Authentication required or token invalid.`,
813
+ 403: `Request not permitted for this user.`,
814
+ 404: `Resource not found.`
815
+ }
816
+ });
817
+ }
818
+ /**
819
+ * Register a competitor app.
820
+ * @param appUuid
821
+ * @param requestBody
822
+ * @returns Competitor Competitor registered.
823
+ * @throws ApiError
824
+ */
825
+ static postCompetitor(appUuid, requestBody) {
826
+ return request(OpenAPI, {
827
+ method: "POST",
828
+ url: "/api/v1/apps/{appUuid}/competitors",
829
+ path: {
830
+ "appUuid": appUuid
831
+ },
832
+ body: requestBody,
833
+ mediaType: "application/json",
834
+ errors: {
835
+ 400: `Request validation failed.`,
836
+ 401: `Authentication required or token invalid.`,
837
+ 403: `Request not permitted for this user.`,
838
+ 404: `Resource not found.`
839
+ }
840
+ });
841
+ }
842
+ /**
843
+ * Remove a competitor mapping.
844
+ * @param appUuid
845
+ * @param platform
846
+ * @param externalAppId
847
+ * @returns void
848
+ * @throws ApiError
849
+ */
850
+ static deleteCompetitor(appUuid, platform, externalAppId) {
851
+ return request(OpenAPI, {
852
+ method: "DELETE",
853
+ url: "/api/v1/apps/{appUuid}/competitors/{platform}/{externalAppId}",
854
+ path: {
855
+ "appUuid": appUuid,
856
+ "platform": platform,
857
+ "externalAppId": externalAppId
858
+ },
859
+ errors: {
860
+ 401: `Authentication required or token invalid.`,
861
+ 403: `Request not permitted for this user.`,
862
+ 404: `Resource not found.`
863
+ }
864
+ });
865
+ }
866
+ /**
867
+ * Historical feature impact entries for an app release.
868
+ * @param appUuid
869
+ * @param limit
870
+ * @param cursor
871
+ * @returns any Feature history returned.
872
+ * @throws ApiError
873
+ */
874
+ static getFeatureHistory(appUuid, limit, cursor) {
875
+ return request(OpenAPI, {
876
+ method: "GET",
877
+ url: "/api/v1/apps/{appUuid}/features/history",
878
+ path: {
879
+ "appUuid": appUuid
880
+ },
881
+ query: {
882
+ "limit": limit,
883
+ "cursor": cursor
884
+ },
885
+ errors: {
886
+ 401: `Authentication required or token invalid.`,
887
+ 403: `Request not permitted for this user.`,
888
+ 404: `Resource not found.`
889
+ }
890
+ });
891
+ }
892
+ };
893
+
894
+ // services/AuthService.ts
895
+ var AuthService = class {
896
+ /**
897
+ * Register a new workspace owner.
898
+ * @param requestBody
899
+ * @returns GenericSuccess Registration accepted.
900
+ * @throws ApiError
901
+ */
902
+ static postRegister(requestBody) {
903
+ return request(OpenAPI, {
904
+ method: "POST",
905
+ url: "/api/v1/auth/register",
906
+ body: requestBody,
907
+ mediaType: "application/json",
908
+ errors: {
909
+ 400: `Request validation failed.`,
910
+ 409: `Resource already exists or is in conflict.`
911
+ }
912
+ });
913
+ }
914
+ /**
915
+ * Confirm email verification token.
916
+ * @param requestBody
917
+ * @returns GenericSuccess Email verified.
918
+ * @throws ApiError
919
+ */
920
+ static postVerifyEmail(requestBody) {
921
+ return request(OpenAPI, {
922
+ method: "POST",
923
+ url: "/api/v1/auth/verify-email",
924
+ body: requestBody,
925
+ mediaType: "application/json",
926
+ errors: {
927
+ 400: `Request validation failed.`,
928
+ 410: `Token expired or resource no longer available.`
929
+ }
930
+ });
931
+ }
932
+ /**
933
+ * Trigger a new verification email.
934
+ * @param requestBody
935
+ * @returns GenericSuccess Verification email queued.
936
+ * @throws ApiError
937
+ */
938
+ static postResendVerification(requestBody) {
939
+ return request(OpenAPI, {
940
+ method: "POST",
941
+ url: "/api/v1/auth/resend-verification",
942
+ body: requestBody,
943
+ mediaType: "application/json",
944
+ errors: {
945
+ 400: `Request validation failed.`
946
+ }
947
+ });
948
+ }
949
+ /**
950
+ * Request a password reset email.
951
+ * @param requestBody
952
+ * @returns GenericSuccess Reset email dispatched.
953
+ * @throws ApiError
954
+ */
955
+ static postForgotPassword(requestBody) {
956
+ return request(OpenAPI, {
957
+ method: "POST",
958
+ url: "/api/v1/auth/forgot-password",
959
+ body: requestBody,
960
+ mediaType: "application/json",
961
+ errors: {
962
+ 400: `Request validation failed.`
963
+ }
964
+ });
965
+ }
966
+ /**
967
+ * Reset password with a valid token.
968
+ * @param requestBody
969
+ * @returns GenericSuccess Password updated.
970
+ * @throws ApiError
971
+ */
972
+ static postResetPassword(requestBody) {
973
+ return request(OpenAPI, {
974
+ method: "POST",
975
+ url: "/api/v1/auth/reset-password",
976
+ body: requestBody,
977
+ mediaType: "application/json",
978
+ errors: {
979
+ 400: `Request validation failed.`,
980
+ 410: `Token expired or resource no longer available.`
981
+ }
982
+ });
983
+ }
984
+ /**
985
+ * Authenticate via email and password.
986
+ * @param requestBody
987
+ * @returns any Login successful.
988
+ * @throws ApiError
989
+ */
990
+ static postLogin(requestBody) {
991
+ return request(OpenAPI, {
992
+ method: "POST",
993
+ url: "/api/v1/auth/login",
994
+ body: requestBody,
995
+ mediaType: "application/json",
996
+ errors: {
997
+ 400: `Request validation failed.`,
998
+ 401: `Authentication required or token invalid.`,
999
+ 403: `Request not permitted for this user.`
1000
+ }
1001
+ });
1002
+ }
1003
+ /**
1004
+ * Complete Google Workspace SSO exchange.
1005
+ * @param requestBody
1006
+ * @returns any Google SSO successful.
1007
+ * @throws ApiError
1008
+ */
1009
+ static postGoogleSso(requestBody) {
1010
+ return request(OpenAPI, {
1011
+ method: "POST",
1012
+ url: "/api/v1/auth/google/sso",
1013
+ body: requestBody,
1014
+ mediaType: "application/json",
1015
+ errors: {
1016
+ 400: `Request validation failed.`,
1017
+ 401: `Authentication required or token invalid.`,
1018
+ 403: `Request not permitted for this user.`
1019
+ }
1020
+ });
1021
+ }
1022
+ /**
1023
+ * Complete Microsoft Entra ID SSO exchange.
1024
+ * @param requestBody
1025
+ * @returns any Microsoft SSO successful.
1026
+ * @throws ApiError
1027
+ */
1028
+ static postMicrosoftSso(requestBody) {
1029
+ return request(OpenAPI, {
1030
+ method: "POST",
1031
+ url: "/api/v1/auth/microsoft/sso",
1032
+ body: requestBody,
1033
+ mediaType: "application/json",
1034
+ errors: {
1035
+ 400: `Request validation failed.`,
1036
+ 401: `Authentication required or token invalid.`,
1037
+ 403: `Request not permitted for this user.`
1038
+ }
1039
+ });
1040
+ }
1041
+ };
1042
+
1043
+ // services/BillingService.ts
1044
+ var BillingService = class {
1045
+ /**
1046
+ * Create a Stripe Checkout session.
1047
+ * @param requestBody
1048
+ * @returns any Checkout session created.
1049
+ * @throws ApiError
1050
+ */
1051
+ static postBillingCheckout(requestBody) {
1052
+ return request(OpenAPI, {
1053
+ method: "POST",
1054
+ url: "/api/v1/billing/checkout",
1055
+ body: requestBody,
1056
+ mediaType: "application/json",
1057
+ errors: {
1058
+ 400: `Request validation failed.`,
1059
+ 401: `Authentication required or token invalid.`
1060
+ }
1061
+ });
1062
+ }
1063
+ /**
1064
+ * Retrieve current subscription details.
1065
+ * @returns Subscription Subscription returned.
1066
+ * @throws ApiError
1067
+ */
1068
+ static getSubscription() {
1069
+ return request(OpenAPI, {
1070
+ method: "GET",
1071
+ url: "/api/v1/billing/subscription",
1072
+ errors: {
1073
+ 401: `Authentication required or token invalid.`
1074
+ }
1075
+ });
1076
+ }
1077
+ /**
1078
+ * Retrieve per-integration subscription details.
1079
+ * @returns any Per-integration subscription returned.
1080
+ * @throws ApiError
1081
+ */
1082
+ static getSubscriptionV2() {
1083
+ return request(OpenAPI, {
1084
+ method: "GET",
1085
+ url: "/api/v1/billing/subscription-v2",
1086
+ errors: {
1087
+ 401: `Authentication required or token invalid.`
1088
+ }
1089
+ });
1090
+ }
1091
+ /**
1092
+ * Cancel the active subscription at period end.
1093
+ * @returns Subscription Subscription cancellation scheduled.
1094
+ * @throws ApiError
1095
+ */
1096
+ static postCancelSubscription() {
1097
+ return request(OpenAPI, {
1098
+ method: "POST",
1099
+ url: "/api/v1/billing/cancel-subscription",
1100
+ errors: {
1101
+ 401: `Authentication required or token invalid.`
1102
+ }
1103
+ });
1104
+ }
1105
+ /**
1106
+ * Reactivate a cancelled subscription.
1107
+ * @returns Subscription Subscription reactivated.
1108
+ * @throws ApiError
1109
+ */
1110
+ static postReactivateSubscription() {
1111
+ return request(OpenAPI, {
1112
+ method: "POST",
1113
+ url: "/api/v1/billing/reactivate-subscription",
1114
+ errors: {
1115
+ 401: `Authentication required or token invalid.`
1116
+ }
1117
+ });
1118
+ }
1119
+ /**
1120
+ * Attach or update a default payment method.
1121
+ * @param requestBody
1122
+ * @returns Subscription Payment method updated.
1123
+ * @throws ApiError
1124
+ */
1125
+ static postPaymentMethod(requestBody) {
1126
+ return request(OpenAPI, {
1127
+ method: "POST",
1128
+ url: "/api/v1/billing/payment-method",
1129
+ body: requestBody,
1130
+ mediaType: "application/json",
1131
+ errors: {
1132
+ 400: `Request validation failed.`,
1133
+ 401: `Authentication required or token invalid.`
1134
+ }
1135
+ });
1136
+ }
1137
+ /**
1138
+ * List invoices for the tenant.
1139
+ * @param limit
1140
+ * @param cursor
1141
+ * @returns any Invoices returned.
1142
+ * @throws ApiError
1143
+ */
1144
+ static getInvoices(limit, cursor) {
1145
+ return request(OpenAPI, {
1146
+ method: "GET",
1147
+ url: "/api/v1/billing/invoices",
1148
+ query: {
1149
+ "limit": limit,
1150
+ "cursor": cursor
1151
+ },
1152
+ errors: {
1153
+ 401: `Authentication required or token invalid.`
1154
+ }
1155
+ });
1156
+ }
1157
+ /**
1158
+ * Stripe webhook endpoint.
1159
+ * @param requestBody
1160
+ * @returns any Event processed.
1161
+ * @throws ApiError
1162
+ */
1163
+ static postBillingWebhook(requestBody) {
1164
+ return request(OpenAPI, {
1165
+ method: "POST",
1166
+ url: "/api/v1/billing/webhooks",
1167
+ body: requestBody,
1168
+ mediaType: "application/json",
1169
+ errors: {
1170
+ 400: `Request validation failed.`,
1171
+ 401: `Authentication required or token invalid.`
1172
+ }
1173
+ });
1174
+ }
1175
+ /**
1176
+ * Calculate per-integration pricing totals.
1177
+ * @param requestBody
1178
+ * @returns any Pricing calculated.
1179
+ * @throws ApiError
1180
+ */
1181
+ static postCalculatePricing(requestBody) {
1182
+ return request(OpenAPI, {
1183
+ method: "POST",
1184
+ url: "/api/v1/billing/calculate-pricing",
1185
+ body: requestBody,
1186
+ mediaType: "application/json",
1187
+ errors: {
1188
+ 400: `Request validation failed.`
1189
+ }
1190
+ });
1191
+ }
1192
+ /**
1193
+ * Create per-integration subscription.
1194
+ * @param requestBody
1195
+ * @returns any Subscription created.
1196
+ * @throws ApiError
1197
+ */
1198
+ static postCreateSubscriptionV2(requestBody) {
1199
+ return request(OpenAPI, {
1200
+ method: "POST",
1201
+ url: "/api/v1/billing/create-subscription-v2",
1202
+ body: requestBody,
1203
+ mediaType: "application/json",
1204
+ errors: {
1205
+ 400: `Request validation failed.`,
1206
+ 402: `Request validation failed.`
1207
+ }
1208
+ });
1209
+ }
1210
+ /**
1211
+ * Update per-integration subscription quantities.
1212
+ * @param requestBody
1213
+ * @returns any Subscription updated.
1214
+ * @throws ApiError
1215
+ */
1216
+ static postUpdateSubscriptionV2(requestBody) {
1217
+ return request(OpenAPI, {
1218
+ method: "POST",
1219
+ url: "/api/v1/billing/update-subscription-v2",
1220
+ body: requestBody,
1221
+ mediaType: "application/json",
1222
+ errors: {
1223
+ 400: `Request validation failed.`,
1224
+ 402: `Request validation failed.`
1225
+ }
1226
+ });
1227
+ }
1228
+ /**
1229
+ * Migrate legacy subscriptions to per-integration pricing.
1230
+ * @param requestBody
1231
+ * @returns any Migration initiated.
1232
+ * @throws ApiError
1233
+ */
1234
+ static postMigrateSubscription(requestBody) {
1235
+ return request(OpenAPI, {
1236
+ method: "POST",
1237
+ url: "/api/v1/billing/migrate-subscription",
1238
+ body: requestBody,
1239
+ mediaType: "application/json",
1240
+ errors: {
1241
+ 400: `Request validation failed.`,
1242
+ 401: `Authentication required or token invalid.`,
1243
+ 402: `Request validation failed.`
1244
+ }
1245
+ });
1246
+ }
1247
+ /**
1248
+ * Calculate regional pricing based on country.
1249
+ * Returns pricing information adjusted for purchasing power parity (PPP) based on the provided country code. Discounts range from 0% (US/UK/EU) to 60% for developing economies.
1250
+ * @param requestBody
1251
+ * @returns any Regional pricing calculated.
1252
+ * @throws ApiError
1253
+ */
1254
+ static postRegionalPricing(requestBody) {
1255
+ return request(OpenAPI, {
1256
+ method: "POST",
1257
+ url: "/api/v1/billing/regional-pricing",
1258
+ body: requestBody,
1259
+ mediaType: "application/json",
1260
+ errors: {
1261
+ 400: `Request validation failed.`,
1262
+ 401: `Authentication required or token invalid.`
1263
+ }
1264
+ });
1265
+ }
1266
+ /**
1267
+ * Detect user's country from IP address.
1268
+ * Detects the user's country based on their IP address for display purposes. Note: Final pricing is always determined by card country, not IP location.
1269
+ * @returns any Country detected successfully.
1270
+ * @throws ApiError
1271
+ */
1272
+ static getDetectCountry() {
1273
+ return request(OpenAPI, {
1274
+ method: "GET",
1275
+ url: "/api/v1/billing/detect-country",
1276
+ errors: {
1277
+ 401: `Authentication required or token invalid.`
1278
+ }
1279
+ });
1280
+ }
1281
+ /**
1282
+ * Get usage dashboard data.
1283
+ * Returns comprehensive usage data for the current billing period including apps, members, syncs, and cost projections.
1284
+ * @returns any Usage dashboard data returned.
1285
+ * @throws ApiError
1286
+ */
1287
+ static getUsageDashboard() {
1288
+ return request(OpenAPI, {
1289
+ method: "GET",
1290
+ url: "/api/v1/billing/usage-dashboard",
1291
+ errors: {
1292
+ 401: `Authentication required or token invalid.`,
1293
+ 404: `Resource not found.`
1294
+ }
1295
+ });
1296
+ }
1297
+ /**
1298
+ * Get bill forecast data.
1299
+ * Returns projected billing amounts over a specified horizon (7d, 30d, or 90d) with confidence intervals.
1300
+ * @param horizon Forecast horizon
1301
+ * @returns any Bill forecast returned.
1302
+ * @throws ApiError
1303
+ */
1304
+ static getBillForecast(horizon = "30d") {
1305
+ return request(OpenAPI, {
1306
+ method: "GET",
1307
+ url: "/api/v1/billing/bill-forecast",
1308
+ query: {
1309
+ "horizon": horizon
1310
+ },
1311
+ errors: {
1312
+ 401: `Authentication required or token invalid.`,
1313
+ 404: `Resource not found.`
1314
+ }
1315
+ });
1316
+ }
1317
+ /**
1318
+ * Get pricing information.
1319
+ * Returns the current pricing model and rates.
1320
+ * @returns any Pricing information returned.
1321
+ * @throws ApiError
1322
+ */
1323
+ static getPricing() {
1324
+ return request(OpenAPI, {
1325
+ method: "GET",
1326
+ url: "/api/v1/billing/pricing",
1327
+ errors: {
1328
+ 401: `Authentication required or token invalid.`
1329
+ }
1330
+ });
1331
+ }
1332
+ };
1333
+
1334
+ // services/CredentialsService.ts
1335
+ var CredentialsService = class {
1336
+ /**
1337
+ * List stored credentials for the tenant.
1338
+ * @returns any Credentials returned.
1339
+ * @throws ApiError
1340
+ */
1341
+ static getCredentials() {
1342
+ return request(OpenAPI, {
1343
+ method: "GET",
1344
+ url: "/api/v1/credentials",
1345
+ errors: {
1346
+ 401: `Authentication required or token invalid.`
1347
+ }
1348
+ });
1349
+ }
1350
+ /**
1351
+ * Store a new credential set.
1352
+ * @param requestBody
1353
+ * @returns Credential Credential stored.
1354
+ * @throws ApiError
1355
+ */
1356
+ static postCredential(requestBody) {
1357
+ return request(OpenAPI, {
1358
+ method: "POST",
1359
+ url: "/api/v1/credentials",
1360
+ body: requestBody,
1361
+ mediaType: "application/json",
1362
+ errors: {
1363
+ 400: `Request validation failed.`,
1364
+ 401: `Authentication required or token invalid.`
1365
+ }
1366
+ });
1367
+ }
1368
+ /**
1369
+ * Retrieve credential details by ID.
1370
+ * @param credentialId
1371
+ * @returns Credential Credential returned.
1372
+ * @throws ApiError
1373
+ */
1374
+ static getCredential(credentialId) {
1375
+ return request(OpenAPI, {
1376
+ method: "GET",
1377
+ url: "/api/v1/credentials/{credentialId}",
1378
+ path: {
1379
+ "credentialId": credentialId
1380
+ },
1381
+ errors: {
1382
+ 401: `Authentication required or token invalid.`,
1383
+ 404: `Resource not found.`
1384
+ }
1385
+ });
1386
+ }
1387
+ /**
1388
+ * Update an existing credential.
1389
+ * @param credentialId
1390
+ * @param requestBody
1391
+ * @returns Credential Credential updated.
1392
+ * @throws ApiError
1393
+ */
1394
+ static putCredential(credentialId, requestBody) {
1395
+ return request(OpenAPI, {
1396
+ method: "PUT",
1397
+ url: "/api/v1/credentials/{credentialId}",
1398
+ path: {
1399
+ "credentialId": credentialId
1400
+ },
1401
+ body: requestBody,
1402
+ mediaType: "application/json",
1403
+ errors: {
1404
+ 400: `Request validation failed.`,
1405
+ 401: `Authentication required or token invalid.`,
1406
+ 404: `Resource not found.`
1407
+ }
1408
+ });
1409
+ }
1410
+ /**
1411
+ * Delete a credential.
1412
+ * @param credentialId
1413
+ * @returns void
1414
+ * @throws ApiError
1415
+ */
1416
+ static deleteCredential(credentialId) {
1417
+ return request(OpenAPI, {
1418
+ method: "DELETE",
1419
+ url: "/api/v1/credentials/{credentialId}",
1420
+ path: {
1421
+ "credentialId": credentialId
1422
+ },
1423
+ errors: {
1424
+ 401: `Authentication required or token invalid.`,
1425
+ 404: `Resource not found.`
1426
+ }
1427
+ });
1428
+ }
1429
+ /**
1430
+ * List apps linked to a credential.
1431
+ * @param credentialId
1432
+ * @returns any Linked apps returned.
1433
+ * @throws ApiError
1434
+ */
1435
+ static getCredentialApps(credentialId) {
1436
+ return request(OpenAPI, {
1437
+ method: "GET",
1438
+ url: "/api/v1/credentials/{credentialId}/apps",
1439
+ path: {
1440
+ "credentialId": credentialId
1441
+ },
1442
+ errors: {
1443
+ 401: `Authentication required or token invalid.`,
1444
+ 404: `Resource not found.`
1445
+ }
1446
+ });
1447
+ }
1448
+ /**
1449
+ * Validate credential authenticity with source systems.
1450
+ * @param requestBody
1451
+ * @returns GenericSuccess Validation outcome.
1452
+ * @throws ApiError
1453
+ */
1454
+ static postCredentialValidate(requestBody) {
1455
+ return request(OpenAPI, {
1456
+ method: "POST",
1457
+ url: "/api/v1/credentials/validate",
1458
+ body: requestBody,
1459
+ mediaType: "application/json",
1460
+ errors: {
1461
+ 400: `Request validation failed.`,
1462
+ 401: `Authentication required or token invalid.`
1463
+ }
1464
+ });
1465
+ }
1466
+ };
1467
+
1468
+ // services/HealthService.ts
1469
+ var HealthService = class {
1470
+ /**
1471
+ * Check API availability.
1472
+ * @returns any API is reachable.
1473
+ * @throws ApiError
1474
+ */
1475
+ static getHealth() {
1476
+ return request(OpenAPI, {
1477
+ method: "GET",
1478
+ url: "/health",
1479
+ errors: {
1480
+ 500: `Unexpected server error.`
1481
+ }
1482
+ });
1483
+ }
1484
+ /**
1485
+ * Root health probe.
1486
+ * @returns any API is reachable.
1487
+ * @throws ApiError
1488
+ */
1489
+ static getRoot() {
1490
+ return request(OpenAPI, {
1491
+ method: "GET",
1492
+ url: "/",
1493
+ errors: {
1494
+ 500: `Unexpected server error.`
1495
+ }
1496
+ });
1497
+ }
1498
+ };
1499
+
1500
+ // services/InsightsService.ts
1501
+ var InsightsService = class {
1502
+ /**
1503
+ * Queue AI-powered analysis for an app.
1504
+ * @param requestBody
1505
+ * @returns any Analysis queued or cached result returned.
1506
+ * @throws ApiError
1507
+ */
1508
+ static postAppsAnalyze(requestBody) {
1509
+ return request(OpenAPI, {
1510
+ method: "POST",
1511
+ url: "/api/v1/apps/analyze",
1512
+ body: requestBody,
1513
+ mediaType: "application/json",
1514
+ errors: {
1515
+ 400: `Request validation failed.`,
1516
+ 401: `Authentication required or token invalid.`,
1517
+ 403: `Request not permitted for this user.`
1518
+ }
1519
+ });
1520
+ }
1521
+ /**
1522
+ * Aggregate reply performance metrics for an app.
1523
+ * @param appUuid
1524
+ * @returns ReplyAnalytics Reply analytics returned.
1525
+ * @throws ApiError
1526
+ */
1527
+ static getReplyAnalytics(appUuid) {
1528
+ return request(OpenAPI, {
1529
+ method: "GET",
1530
+ url: "/api/v1/apps/{appUuid}/replies/analytics",
1531
+ path: {
1532
+ "appUuid": appUuid
1533
+ },
1534
+ errors: {
1535
+ 401: `Authentication required or token invalid.`,
1536
+ 403: `Request not permitted for this user.`,
1537
+ 404: `Resource not found.`
1538
+ }
1539
+ });
1540
+ }
1541
+ /**
1542
+ * Retrieve the latest insight bundle for an app.
1543
+ * @param appUuid
1544
+ * @returns Insight Insight bundle retrieved.
1545
+ * @throws ApiError
1546
+ */
1547
+ static getAppInsights(appUuid) {
1548
+ return request(OpenAPI, {
1549
+ method: "GET",
1550
+ url: "/api/v1/apps/{appUuid}/insights",
1551
+ path: {
1552
+ "appUuid": appUuid
1553
+ },
1554
+ errors: {
1555
+ 401: `Authentication required or token invalid.`,
1556
+ 403: `Request not permitted for this user.`,
1557
+ 404: `Resource not found.`
1558
+ }
1559
+ });
1560
+ }
1561
+ /**
1562
+ * Historical insight summaries for an app.
1563
+ * @param appUuid
1564
+ * @param limit
1565
+ * @param cursor
1566
+ * @returns any Insight history returned.
1567
+ * @throws ApiError
1568
+ */
1569
+ static getAppInsightHistory(appUuid, limit, cursor) {
1570
+ return request(OpenAPI, {
1571
+ method: "GET",
1572
+ url: "/api/v1/apps/{appUuid}/insights/history",
1573
+ path: {
1574
+ "appUuid": appUuid
1575
+ },
1576
+ query: {
1577
+ "limit": limit,
1578
+ "cursor": cursor
1579
+ },
1580
+ errors: {
1581
+ 401: `Authentication required or token invalid.`,
1582
+ 403: `Request not permitted for this user.`,
1583
+ 404: `Resource not found.`
1584
+ }
1585
+ });
1586
+ }
1587
+ /**
1588
+ * Historical feature impact entries for an app release.
1589
+ * @param appUuid
1590
+ * @param limit
1591
+ * @param cursor
1592
+ * @returns any Feature history returned.
1593
+ * @throws ApiError
1594
+ */
1595
+ static getFeatureHistory(appUuid, limit, cursor) {
1596
+ return request(OpenAPI, {
1597
+ method: "GET",
1598
+ url: "/api/v1/apps/{appUuid}/features/history",
1599
+ path: {
1600
+ "appUuid": appUuid
1601
+ },
1602
+ query: {
1603
+ "limit": limit,
1604
+ "cursor": cursor
1605
+ },
1606
+ errors: {
1607
+ 401: `Authentication required or token invalid.`,
1608
+ 403: `Request not permitted for this user.`,
1609
+ 404: `Resource not found.`
1610
+ }
1611
+ });
1612
+ }
1613
+ /**
1614
+ * Tenant-level feed of insight highlights.
1615
+ * @param limit
1616
+ * @param cursor
1617
+ * @returns any Insights returned.
1618
+ * @throws ApiError
1619
+ */
1620
+ static getTenantInsights(limit, cursor) {
1621
+ return request(OpenAPI, {
1622
+ method: "GET",
1623
+ url: "/api/v1/insights",
1624
+ query: {
1625
+ "limit": limit,
1626
+ "cursor": cursor
1627
+ },
1628
+ errors: {
1629
+ 401: `Authentication required or token invalid.`
1630
+ }
1631
+ });
1632
+ }
1633
+ /**
1634
+ * List reviewer segments for an app.
1635
+ * @param appUuid App UUID assigned by Tritonium.
1636
+ * @param segmentType
1637
+ * @param sort
1638
+ * @param limit
1639
+ * @returns any Segments returned.
1640
+ * @throws ApiError
1641
+ */
1642
+ static getAppSegments(appUuid, segmentType, sort, limit) {
1643
+ return request(OpenAPI, {
1644
+ method: "GET",
1645
+ url: "/api/v1/apps/{app_uuid}/segments",
1646
+ path: {
1647
+ "app_uuid": appUuid
1648
+ },
1649
+ query: {
1650
+ "segment_type": segmentType,
1651
+ "sort": sort,
1652
+ "limit": limit
1653
+ },
1654
+ errors: {
1655
+ 401: `Authentication required or token invalid.`,
1656
+ 403: `Request not permitted for this user.`
1657
+ }
1658
+ });
1659
+ }
1660
+ /**
1661
+ * Retrieve reviews tied to a specific segment.
1662
+ * @param appUuid App UUID assigned by Tritonium.
1663
+ * @param segmentType
1664
+ * @returns any Reviews returned.
1665
+ * @throws ApiError
1666
+ */
1667
+ static getSegmentReviews(appUuid, segmentType) {
1668
+ return request(OpenAPI, {
1669
+ method: "GET",
1670
+ url: "/api/v1/apps/{app_uuid}/segments/{segment_type}/reviews",
1671
+ path: {
1672
+ "app_uuid": appUuid,
1673
+ "segment_type": segmentType
1674
+ },
1675
+ errors: {
1676
+ 401: `Authentication required or token invalid.`,
1677
+ 403: `Request not permitted for this user.`
1678
+ }
1679
+ });
1680
+ }
1681
+ /**
1682
+ * List reviews with viral engagement.
1683
+ * @param appUuid App UUID assigned by Tritonium.
1684
+ * @param lookbackHours
1685
+ * @param minEngagement
1686
+ * @param sentiment
1687
+ * @returns any Viral review payload.
1688
+ * @throws ApiError
1689
+ */
1690
+ static getViralReviews(appUuid, lookbackHours = 48, minEngagement = 50, sentiment) {
1691
+ return request(OpenAPI, {
1692
+ method: "GET",
1693
+ url: "/api/v1/apps/{app_uuid}/reviews/viral",
1694
+ path: {
1695
+ "app_uuid": appUuid
1696
+ },
1697
+ query: {
1698
+ "lookback_hours": lookbackHours,
1699
+ "min_engagement": minEngagement,
1700
+ "sentiment": sentiment
1701
+ },
1702
+ errors: {
1703
+ 401: `Authentication required or token invalid.`,
1704
+ 403: `Request not permitted for this user.`
1705
+ }
1706
+ });
1707
+ }
1708
+ /**
1709
+ * Retrieve engagement history for a review.
1710
+ * @param reviewId
1711
+ * @param appUuid
1712
+ * @returns any History returned.
1713
+ * @throws ApiError
1714
+ */
1715
+ static getReviewEngagementHistory(reviewId, appUuid) {
1716
+ return request(OpenAPI, {
1717
+ method: "GET",
1718
+ url: "/api/v1/reviews/{review_id}/engagement/history",
1719
+ path: {
1720
+ "review_id": reviewId
1721
+ },
1722
+ query: {
1723
+ "app_uuid": appUuid
1724
+ },
1725
+ errors: {
1726
+ 401: `Authentication required or token invalid.`,
1727
+ 403: `Request not permitted for this user.`
1728
+ }
1729
+ });
1730
+ }
1731
+ /**
1732
+ * List reply template performance metrics.
1733
+ * @param days
1734
+ * @param templateId
1735
+ * @returns any Template analytics returned.
1736
+ * @throws ApiError
1737
+ */
1738
+ static getTemplatePerformance(days = 90, templateId) {
1739
+ return request(OpenAPI, {
1740
+ method: "GET",
1741
+ url: "/api/v1/reply-templates/performance",
1742
+ query: {
1743
+ "days": days,
1744
+ "template_id": templateId
1745
+ },
1746
+ errors: {
1747
+ 401: `Authentication required or token invalid.`,
1748
+ 403: `Request not permitted for this user.`
1749
+ }
1750
+ });
1751
+ }
1752
+ /**
1753
+ * Alias for template performance listing.
1754
+ * @returns any Template analytics returned.
1755
+ * @throws ApiError
1756
+ */
1757
+ static getTemplateComparison() {
1758
+ return request(OpenAPI, {
1759
+ method: "GET",
1760
+ url: "/api/v1/reply-templates/comparison",
1761
+ errors: {
1762
+ 401: `Authentication required or token invalid.`,
1763
+ 403: `Request not permitted for this user.`
1764
+ }
1765
+ });
1766
+ }
1767
+ };
1768
+
1769
+ // services/IntegrationsService.ts
1770
+ var IntegrationsService = class {
1771
+ /**
1772
+ * List configured integrations.
1773
+ * @returns any Integrations returned.
1774
+ * @throws ApiError
1775
+ */
1776
+ static getIntegrations() {
1777
+ return request(OpenAPI, {
1778
+ method: "GET",
1779
+ url: "/api/v1/integrations",
1780
+ errors: {
1781
+ 401: `Authentication required or token invalid.`
1782
+ }
1783
+ });
1784
+ }
1785
+ /**
1786
+ * Retrieve integration configuration.
1787
+ * @param integrationId
1788
+ * @returns Integration Integration returned.
1789
+ * @throws ApiError
1790
+ */
1791
+ static getIntegration(integrationId) {
1792
+ return request(OpenAPI, {
1793
+ method: "GET",
1794
+ url: "/api/v1/integrations/{integrationId}",
1795
+ path: {
1796
+ "integrationId": integrationId
1797
+ },
1798
+ errors: {
1799
+ 401: `Authentication required or token invalid.`,
1800
+ 404: `Resource not found.`
1801
+ }
1802
+ });
1803
+ }
1804
+ /**
1805
+ * Update mutable integration metadata.
1806
+ * @param integrationId
1807
+ * @param requestBody
1808
+ * @returns Integration Integration updated.
1809
+ * @throws ApiError
1810
+ */
1811
+ static patchIntegration(integrationId, requestBody) {
1812
+ return request(OpenAPI, {
1813
+ method: "PATCH",
1814
+ url: "/api/v1/integrations/{integrationId}",
1815
+ path: {
1816
+ "integrationId": integrationId
1817
+ },
1818
+ body: requestBody,
1819
+ mediaType: "application/json",
1820
+ errors: {
1821
+ 400: `Request validation failed.`,
1822
+ 401: `Authentication required or token invalid.`,
1823
+ 404: `Resource not found.`
1824
+ }
1825
+ });
1826
+ }
1827
+ /**
1828
+ * Delete an integration configuration.
1829
+ * @param integrationId
1830
+ * @returns void
1831
+ * @throws ApiError
1832
+ */
1833
+ static deleteIntegration(integrationId) {
1834
+ return request(OpenAPI, {
1835
+ method: "DELETE",
1836
+ url: "/api/v1/integrations/{integrationId}",
1837
+ path: {
1838
+ "integrationId": integrationId
1839
+ },
1840
+ errors: {
1841
+ 401: `Authentication required or token invalid.`,
1842
+ 404: `Resource not found.`
1843
+ }
1844
+ });
1845
+ }
1846
+ /**
1847
+ * Send a test payload for an integration.
1848
+ * @param integrationId
1849
+ * @param requestBody
1850
+ * @returns GenericSuccess Test executed.
1851
+ * @throws ApiError
1852
+ */
1853
+ static postIntegrationTest(integrationId, requestBody) {
1854
+ return request(OpenAPI, {
1855
+ method: "POST",
1856
+ url: "/api/v1/integrations/{integrationId}/test",
1857
+ path: {
1858
+ "integrationId": integrationId
1859
+ },
1860
+ body: requestBody,
1861
+ mediaType: "application/json",
1862
+ errors: {
1863
+ 400: `Request validation failed.`,
1864
+ 401: `Authentication required or token invalid.`,
1865
+ 404: `Resource not found.`
1866
+ }
1867
+ });
1868
+ }
1869
+ /**
1870
+ * Start Jira OAuth connection.
1871
+ * @param requestBody
1872
+ * @returns Integration Authorization URL or status returned.
1873
+ * @throws ApiError
1874
+ */
1875
+ static postJiraConnect(requestBody) {
1876
+ return request(OpenAPI, {
1877
+ method: "POST",
1878
+ url: "/api/v1/integrations/jira/connect",
1879
+ body: requestBody,
1880
+ mediaType: "application/json",
1881
+ errors: {
1882
+ 401: `Authentication required or token invalid.`
1883
+ }
1884
+ });
1885
+ }
1886
+ /**
1887
+ * Complete Jira OAuth exchange.
1888
+ * @param state
1889
+ * @param code
1890
+ * @returns Integration Jira integration connected.
1891
+ * @throws ApiError
1892
+ */
1893
+ static getJiraCallback(state, code) {
1894
+ return request(OpenAPI, {
1895
+ method: "GET",
1896
+ url: "/api/v1/integrations/jira/callback",
1897
+ query: {
1898
+ "state": state,
1899
+ "code": code
1900
+ },
1901
+ errors: {
1902
+ 400: `Request validation failed.`
1903
+ }
1904
+ });
1905
+ }
1906
+ /**
1907
+ * Push an incident update to Jira.
1908
+ * @param requestBody
1909
+ * @returns GenericSuccess Issue created or updated.
1910
+ * @throws ApiError
1911
+ */
1912
+ static postJiraIncident(requestBody) {
1913
+ return request(OpenAPI, {
1914
+ method: "POST",
1915
+ url: "/api/v1/integrations/jira/post",
1916
+ body: requestBody,
1917
+ mediaType: "application/json",
1918
+ errors: {
1919
+ 400: `Request validation failed.`,
1920
+ 401: `Authentication required or token invalid.`
1921
+ }
1922
+ });
1923
+ }
1924
+ /**
1925
+ * Connect Linear workspace.
1926
+ * @param requestBody
1927
+ * @returns Integration Linear integration configured.
1928
+ * @throws ApiError
1929
+ */
1930
+ static postLinearConnect(requestBody) {
1931
+ return request(OpenAPI, {
1932
+ method: "POST",
1933
+ url: "/api/v1/integrations/linear/connect",
1934
+ body: requestBody,
1935
+ mediaType: "application/json",
1936
+ errors: {
1937
+ 401: `Authentication required or token invalid.`
1938
+ }
1939
+ });
1940
+ }
1941
+ /**
1942
+ * Connect Discord notifications.
1943
+ * @param requestBody
1944
+ * @returns Integration Discord integration configured.
1945
+ * @throws ApiError
1946
+ */
1947
+ static postDiscordConnect(requestBody) {
1948
+ return request(OpenAPI, {
1949
+ method: "POST",
1950
+ url: "/api/v1/integrations/discord/connect",
1951
+ body: requestBody,
1952
+ mediaType: "application/json",
1953
+ errors: {
1954
+ 401: `Authentication required or token invalid.`
1955
+ }
1956
+ });
1957
+ }
1958
+ /**
1959
+ * Connect Microsoft Teams notifications.
1960
+ * @param requestBody
1961
+ * @returns Integration Teams integration configured.
1962
+ * @throws ApiError
1963
+ */
1964
+ static postTeamsConnect(requestBody) {
1965
+ return request(OpenAPI, {
1966
+ method: "POST",
1967
+ url: "/api/v1/integrations/teams/connect",
1968
+ body: requestBody,
1969
+ mediaType: "application/json",
1970
+ errors: {
1971
+ 401: `Authentication required or token invalid.`
1972
+ }
1973
+ });
1974
+ }
1975
+ /**
1976
+ * Start Help Scout OAuth flow.
1977
+ * @param requestBody
1978
+ * @returns GenericSuccess Authorization URL generated.
1979
+ * @throws ApiError
1980
+ */
1981
+ static postHelpScoutStart(requestBody) {
1982
+ return request(OpenAPI, {
1983
+ method: "POST",
1984
+ url: "/api/v1/integrations/helpscout/start",
1985
+ body: requestBody,
1986
+ mediaType: "application/json",
1987
+ errors: {
1988
+ 401: `Authentication required or token invalid.`
1989
+ }
1990
+ });
1991
+ }
1992
+ /**
1993
+ * Complete Help Scout OAuth exchange.
1994
+ * @param requestBody
1995
+ * @returns Integration Help Scout integration connected.
1996
+ * @throws ApiError
1997
+ */
1998
+ static postHelpScoutConnect(requestBody) {
1999
+ return request(OpenAPI, {
2000
+ method: "POST",
2001
+ url: "/api/v1/integrations/helpscout/connect",
2002
+ body: requestBody,
2003
+ mediaType: "application/json",
2004
+ errors: {
2005
+ 401: `Authentication required or token invalid.`
2006
+ }
2007
+ });
2008
+ }
2009
+ /**
2010
+ * Start Salesforce OAuth flow.
2011
+ * @param requestBody
2012
+ * @returns GenericSuccess Authorization URL generated.
2013
+ * @throws ApiError
2014
+ */
2015
+ static postSalesforceStart(requestBody) {
2016
+ return request(OpenAPI, {
2017
+ method: "POST",
2018
+ url: "/api/v1/integrations/salesforce/start",
2019
+ body: requestBody,
2020
+ mediaType: "application/json",
2021
+ errors: {
2022
+ 401: `Authentication required or token invalid.`
2023
+ }
2024
+ });
2025
+ }
2026
+ /**
2027
+ * Complete Salesforce OAuth exchange.
2028
+ * @param requestBody
2029
+ * @returns Integration Salesforce integration connected.
2030
+ * @throws ApiError
2031
+ */
2032
+ static postSalesforceConnect(requestBody) {
2033
+ return request(OpenAPI, {
2034
+ method: "POST",
2035
+ url: "/api/v1/integrations/salesforce/connect",
2036
+ body: requestBody,
2037
+ mediaType: "application/json",
2038
+ errors: {
2039
+ 401: `Authentication required or token invalid.`
2040
+ }
2041
+ });
2042
+ }
2043
+ /**
2044
+ * Start Zendesk OAuth flow.
2045
+ * @param requestBody
2046
+ * @returns GenericSuccess Authorization URL generated.
2047
+ * @throws ApiError
2048
+ */
2049
+ static postZendeskStart(requestBody) {
2050
+ return request(OpenAPI, {
2051
+ method: "POST",
2052
+ url: "/api/v1/integrations/zendesk/start",
2053
+ body: requestBody,
2054
+ mediaType: "application/json",
2055
+ errors: {
2056
+ 401: `Authentication required or token invalid.`
2057
+ }
2058
+ });
2059
+ }
2060
+ /**
2061
+ * Complete Zendesk OAuth exchange.
2062
+ * @param requestBody
2063
+ * @returns Integration Zendesk integration connected.
2064
+ * @throws ApiError
2065
+ */
2066
+ static postZendeskConnect(requestBody) {
2067
+ return request(OpenAPI, {
2068
+ method: "POST",
2069
+ url: "/api/v1/integrations/zendesk/connect",
2070
+ body: requestBody,
2071
+ mediaType: "application/json",
2072
+ errors: {
2073
+ 401: `Authentication required or token invalid.`
2074
+ }
2075
+ });
2076
+ }
2077
+ /**
2078
+ * Connect Asana workspace.
2079
+ * @param requestBody
2080
+ * @returns Integration Asana integration connected.
2081
+ * @throws ApiError
2082
+ */
2083
+ static postAsanaConnect(requestBody) {
2084
+ return request(OpenAPI, {
2085
+ method: "POST",
2086
+ url: "/api/v1/integrations/asana/connect",
2087
+ body: requestBody,
2088
+ mediaType: "application/json",
2089
+ errors: {
2090
+ 401: `Authentication required or token invalid.`
2091
+ }
2092
+ });
2093
+ }
2094
+ /**
2095
+ * Connect ClickUp workspace.
2096
+ * @param requestBody
2097
+ * @returns Integration ClickUp integration connected.
2098
+ * @throws ApiError
2099
+ */
2100
+ static postClickUpConnect(requestBody) {
2101
+ return request(OpenAPI, {
2102
+ method: "POST",
2103
+ url: "/api/v1/integrations/clickup/connect",
2104
+ body: requestBody,
2105
+ mediaType: "application/json",
2106
+ errors: {
2107
+ 401: `Authentication required or token invalid.`
2108
+ }
2109
+ });
2110
+ }
2111
+ /**
2112
+ * Connect Trello workspace.
2113
+ * @param requestBody
2114
+ * @returns Integration Trello integration connected.
2115
+ * @throws ApiError
2116
+ */
2117
+ static postTrelloConnect(requestBody) {
2118
+ return request(OpenAPI, {
2119
+ method: "POST",
2120
+ url: "/api/v1/integrations/trello/connect",
2121
+ body: requestBody,
2122
+ mediaType: "application/json",
2123
+ errors: {
2124
+ 401: `Authentication required or token invalid.`
2125
+ }
2126
+ });
2127
+ }
2128
+ /**
2129
+ * Save Zapier webhook destination.
2130
+ * @param requestBody
2131
+ * @returns Integration Zapier webhook registered.
2132
+ * @throws ApiError
2133
+ */
2134
+ static postZapierConnect(requestBody) {
2135
+ return request(OpenAPI, {
2136
+ method: "POST",
2137
+ url: "/api/v1/integrations/zapier/connect",
2138
+ body: requestBody,
2139
+ mediaType: "application/json",
2140
+ errors: {
2141
+ 401: `Authentication required or token invalid.`
2142
+ }
2143
+ });
2144
+ }
2145
+ /**
2146
+ * Configure SMS delivery integration.
2147
+ * @param requestBody
2148
+ * @returns Integration SMS integration configured.
2149
+ * @throws ApiError
2150
+ */
2151
+ static postSmsConnect(requestBody) {
2152
+ return request(OpenAPI, {
2153
+ method: "POST",
2154
+ url: "/api/v1/integrations/sms/connect",
2155
+ body: requestBody,
2156
+ mediaType: "application/json",
2157
+ errors: {
2158
+ 401: `Authentication required or token invalid.`
2159
+ }
2160
+ });
2161
+ }
2162
+ /**
2163
+ * Connect GitLab project.
2164
+ * @param requestBody
2165
+ * @returns Integration GitLab integration connected.
2166
+ * @throws ApiError
2167
+ */
2168
+ static postGitlabConnect(requestBody) {
2169
+ return request(OpenAPI, {
2170
+ method: "POST",
2171
+ url: "/api/v1/integrations/gitlab/connect",
2172
+ body: requestBody,
2173
+ mediaType: "application/json",
2174
+ errors: {
2175
+ 401: `Authentication required or token invalid.`
2176
+ }
2177
+ });
2178
+ }
2179
+ /**
2180
+ * Start Slack OAuth flow.
2181
+ * @param redirectUri
2182
+ * @returns GenericSuccess Authorization URL generated.
2183
+ * @throws ApiError
2184
+ */
2185
+ static getSlackConnect(redirectUri) {
2186
+ return request(OpenAPI, {
2187
+ method: "GET",
2188
+ url: "/api/v1/integrations/slack/connect",
2189
+ query: {
2190
+ "redirect_uri": redirectUri
2191
+ },
2192
+ errors: {
2193
+ 401: `Authentication required or token invalid.`
2194
+ }
2195
+ });
2196
+ }
2197
+ /**
2198
+ * Complete Slack OAuth exchange.
2199
+ * @param code
2200
+ * @param state
2201
+ * @returns Integration Slack workspace connected.
2202
+ * @throws ApiError
2203
+ */
2204
+ static getSlackCallback(code, state) {
2205
+ return request(OpenAPI, {
2206
+ method: "GET",
2207
+ url: "/api/v1/integrations/slack/callback",
2208
+ query: {
2209
+ "code": code,
2210
+ "state": state
2211
+ },
2212
+ errors: {
2213
+ 400: `Request validation failed.`
2214
+ }
2215
+ });
2216
+ }
2217
+ /**
2218
+ * Retrieve Slack integration status.
2219
+ * @returns Integration Slack status returned.
2220
+ * @throws ApiError
2221
+ */
2222
+ static getSlackStatus() {
2223
+ return request(OpenAPI, {
2224
+ method: "GET",
2225
+ url: "/api/v1/integrations/slack/status",
2226
+ errors: {
2227
+ 401: `Authentication required or token invalid.`
2228
+ }
2229
+ });
2230
+ }
2231
+ /**
2232
+ * List Slack channels available to the app.
2233
+ * @returns any Channel listing returned.
2234
+ * @throws ApiError
2235
+ */
2236
+ static getSlackChannels() {
2237
+ return request(OpenAPI, {
2238
+ method: "GET",
2239
+ url: "/api/v1/integrations/slack/channels",
2240
+ errors: {
2241
+ 401: `Authentication required or token invalid.`
2242
+ }
2243
+ });
2244
+ }
2245
+ /**
2246
+ * Save the default Slack channel for alerts.
2247
+ * @param requestBody
2248
+ * @returns Integration Channel saved.
2249
+ * @throws ApiError
2250
+ */
2251
+ static postSlackChannel(requestBody) {
2252
+ return request(OpenAPI, {
2253
+ method: "POST",
2254
+ url: "/api/v1/integrations/slack/channel",
2255
+ body: requestBody,
2256
+ mediaType: "application/json",
2257
+ errors: {
2258
+ 400: `Request validation failed.`,
2259
+ 401: `Authentication required or token invalid.`
2260
+ }
2261
+ });
2262
+ }
2263
+ /**
2264
+ * Send a test Slack notification.
2265
+ * @returns GenericSuccess Test notification sent.
2266
+ * @throws ApiError
2267
+ */
2268
+ static postSlackTest() {
2269
+ return request(OpenAPI, {
2270
+ method: "POST",
2271
+ url: "/api/v1/integrations/slack/test",
2272
+ errors: {
2273
+ 401: `Authentication required or token invalid.`
2274
+ }
2275
+ });
2276
+ }
2277
+ /**
2278
+ * Post a custom alert message to Slack.
2279
+ * @param requestBody
2280
+ * @returns GenericSuccess Message posted.
2281
+ * @throws ApiError
2282
+ */
2283
+ static postSlackMessage(requestBody) {
2284
+ return request(OpenAPI, {
2285
+ method: "POST",
2286
+ url: "/api/v1/integrations/slack/post",
2287
+ body: requestBody,
2288
+ mediaType: "application/json",
2289
+ errors: {
2290
+ 400: `Request validation failed.`,
2291
+ 401: `Authentication required or token invalid.`
2292
+ }
2293
+ });
2294
+ }
2295
+ /**
2296
+ * Disconnect Slack workspace.
2297
+ * @returns GenericSuccess Slack integration disabled.
2298
+ * @throws ApiError
2299
+ */
2300
+ static postSlackDisconnect() {
2301
+ return request(OpenAPI, {
2302
+ method: "POST",
2303
+ url: "/api/v1/integrations/slack/disconnect",
2304
+ errors: {
2305
+ 401: `Authentication required or token invalid.`
2306
+ }
2307
+ });
2308
+ }
2309
+ };
2310
+
2311
+ // services/InternalService.ts
2312
+ var InternalService = class {
2313
+ /**
2314
+ * Health probe for scheduled trial reminder execution.
2315
+ * @returns any Automation healthy.
2316
+ * @throws ApiError
2317
+ */
2318
+ static headTrialReminders() {
2319
+ return request(OpenAPI, {
2320
+ method: "HEAD",
2321
+ url: "/api/v1/internal/run-trial-reminders",
2322
+ errors: {
2323
+ 401: `Authentication required or token invalid.`
2324
+ }
2325
+ });
2326
+ }
2327
+ /**
2328
+ * Execute trial reminder workflow.
2329
+ * @returns any Workflow started.
2330
+ * @throws ApiError
2331
+ */
2332
+ static postTrialReminders() {
2333
+ return request(OpenAPI, {
2334
+ method: "POST",
2335
+ url: "/api/v1/internal/run-trial-reminders",
2336
+ errors: {
2337
+ 401: `Authentication required or token invalid.`
2338
+ }
2339
+ });
2340
+ }
2341
+ /**
2342
+ * Trigger nightly auto-sync job across apps.
2343
+ * @param requestBody
2344
+ * @returns any Job accepted.
2345
+ * @throws ApiError
2346
+ */
2347
+ static postInternalAutoSync(requestBody) {
2348
+ return request(OpenAPI, {
2349
+ method: "POST",
2350
+ url: "/api/v1/internal/auto-sync",
2351
+ body: requestBody,
2352
+ mediaType: "application/json",
2353
+ errors: {
2354
+ 401: `Authentication required or token invalid.`
2355
+ }
2356
+ });
2357
+ }
2358
+ /**
2359
+ * Perform competitor metadata sync.
2360
+ * @param requestBody
2361
+ * @returns any Sync started.
2362
+ * @throws ApiError
2363
+ */
2364
+ static postInternalCompetitorSync(requestBody) {
2365
+ return request(OpenAPI, {
2366
+ method: "POST",
2367
+ url: "/api/v1/internal/competitors/sync",
2368
+ body: requestBody,
2369
+ mediaType: "application/json",
2370
+ errors: {
2371
+ 401: `Authentication required or token invalid.`
2372
+ }
2373
+ });
2374
+ }
2375
+ /**
2376
+ * Aggregate metrics into dashboards.
2377
+ * @param requestBody
2378
+ * @returns any Aggregation started.
2379
+ * @throws ApiError
2380
+ */
2381
+ static postInternalMetricsAggregate(requestBody) {
2382
+ return request(OpenAPI, {
2383
+ method: "POST",
2384
+ url: "/api/v1/internal/metrics/aggregate",
2385
+ body: requestBody,
2386
+ mediaType: "application/json",
2387
+ errors: {
2388
+ 401: `Authentication required or token invalid.`
2389
+ }
2390
+ });
2391
+ }
2392
+ };
2393
+
2394
+ // services/PredictionsService.ts
2395
+ var PredictionsService = class {
2396
+ /**
2397
+ * Retrieve rating forecasts for an app.
2398
+ * @param appUuid
2399
+ * @param horizonDays
2400
+ * @returns PredictionResponse Forecast returned.
2401
+ * @throws ApiError
2402
+ */
2403
+ static getRatingForecast(appUuid, horizonDays) {
2404
+ return request(OpenAPI, {
2405
+ method: "GET",
2406
+ url: "/api/v1/predictions/rating-forecast",
2407
+ query: {
2408
+ "app_uuid": appUuid,
2409
+ "horizon_days": horizonDays
2410
+ },
2411
+ errors: {
2412
+ 400: `Request validation failed.`,
2413
+ 401: `Authentication required or token invalid.`,
2414
+ 404: `Resource not found.`
2415
+ }
2416
+ });
2417
+ }
2418
+ /**
2419
+ * Compute predicted driver impact for product features.
2420
+ * @param requestBody
2421
+ * @returns PredictionResponse Feature impact predicted.
2422
+ * @throws ApiError
2423
+ */
2424
+ static postFeatureImpactPrediction(requestBody) {
2425
+ return request(OpenAPI, {
2426
+ method: "POST",
2427
+ url: "/api/v1/predictions/feature-impact",
2428
+ body: requestBody,
2429
+ mediaType: "application/json",
2430
+ errors: {
2431
+ 400: `Request validation failed.`,
2432
+ 401: `Authentication required or token invalid.`,
2433
+ 503: `Upstream model temporarily unavailable.`
2434
+ }
2435
+ });
2436
+ }
2437
+ /**
2438
+ * Predict severity for issues detected in reviews.
2439
+ * @param requestBody
2440
+ * @returns PredictionResponse Severity predictions returned.
2441
+ * @throws ApiError
2442
+ */
2443
+ static postIssueSeverityPrediction(requestBody) {
2444
+ return request(OpenAPI, {
2445
+ method: "POST",
2446
+ url: "/api/v1/predictions/issue-severity",
2447
+ body: requestBody,
2448
+ mediaType: "application/json",
2449
+ errors: {
2450
+ 400: `Request validation failed.`,
2451
+ 401: `Authentication required or token invalid.`,
2452
+ 503: `Upstream model temporarily unavailable.`
2453
+ }
2454
+ });
2455
+ }
2456
+ /**
2457
+ * Retrieve AI analysis engine status.
2458
+ * Returns the status of the LLM-based analysis system (Claude via AWS Bedrock).
2459
+ * @returns any AI analysis engine status returned.
2460
+ * @throws ApiError
2461
+ */
2462
+ static getModelStatus() {
2463
+ return request(OpenAPI, {
2464
+ method: "GET",
2465
+ url: "/api/v1/predictions/model-status",
2466
+ errors: {
2467
+ 401: `Authentication required or token invalid.`
2468
+ }
2469
+ });
2470
+ }
2471
+ };
2472
+
2473
+ // services/RatingsService.ts
2474
+ var RatingsService = class {
2475
+ /**
2476
+ * Historical rating snapshots for an app.
2477
+ * @param appUuid
2478
+ * @param limit
2479
+ * @param cursor
2480
+ * @param order
2481
+ * @param platform
2482
+ * @param startDate
2483
+ * @param endDate
2484
+ * @returns any Rating history returned.
2485
+ * @throws ApiError
2486
+ */
2487
+ static getRatingsHistory(appUuid, limit, cursor, order, platform, startDate, endDate) {
2488
+ return request(OpenAPI, {
2489
+ method: "GET",
2490
+ url: "/api/v1/apps/{appUuid}/ratings/history",
2491
+ path: {
2492
+ "appUuid": appUuid
2493
+ },
2494
+ query: {
2495
+ "limit": limit,
2496
+ "cursor": cursor,
2497
+ "order": order,
2498
+ "platform": platform,
2499
+ "start_date": startDate,
2500
+ "end_date": endDate
2501
+ },
2502
+ errors: {
2503
+ 401: `Authentication required or token invalid.`,
2504
+ 403: `Request not permitted for this user.`,
2505
+ 404: `Resource not found.`
2506
+ }
2507
+ });
2508
+ }
2509
+ /**
2510
+ * Latest rating snapshot for an app.
2511
+ * @param appUuid
2512
+ * @param platform
2513
+ * @returns RatingSummary Rating summary returned.
2514
+ * @throws ApiError
2515
+ */
2516
+ static getRatingsSummary(appUuid, platform) {
2517
+ return request(OpenAPI, {
2518
+ method: "GET",
2519
+ url: "/api/v1/apps/{appUuid}/ratings/summary",
2520
+ path: {
2521
+ "appUuid": appUuid
2522
+ },
2523
+ query: {
2524
+ "platform": platform
2525
+ },
2526
+ errors: {
2527
+ 401: `Authentication required or token invalid.`,
2528
+ 403: `Request not permitted for this user.`,
2529
+ 404: `Resource not found.`
2530
+ }
2531
+ });
2532
+ }
2533
+ /**
2534
+ * Compare app ratings against competitors.
2535
+ * @param appUuid
2536
+ * @param platform
2537
+ * @returns RatingsComparison Comparison returned.
2538
+ * @throws ApiError
2539
+ */
2540
+ static getRatingsComparison(appUuid, platform) {
2541
+ return request(OpenAPI, {
2542
+ method: "GET",
2543
+ url: "/api/v1/apps/{appUuid}/ratings/comparison",
2544
+ path: {
2545
+ "appUuid": appUuid
2546
+ },
2547
+ query: {
2548
+ "platform": platform
2549
+ },
2550
+ errors: {
2551
+ 401: `Authentication required or token invalid.`,
2552
+ 403: `Request not permitted for this user.`,
2553
+ 404: `Resource not found.`
2554
+ }
2555
+ });
2556
+ }
2557
+ };
2558
+
2559
+ // services/ReplyTemplatesService.ts
2560
+ var ReplyTemplatesService = class {
2561
+ /**
2562
+ * List system and custom reply templates.
2563
+ * @returns any Templates returned.
2564
+ * @throws ApiError
2565
+ */
2566
+ static getReplyTemplates() {
2567
+ return request(OpenAPI, {
2568
+ method: "GET",
2569
+ url: "/api/v1/reply-templates",
2570
+ errors: {
2571
+ 401: `Authentication required or token invalid.`
2572
+ }
2573
+ });
2574
+ }
2575
+ /**
2576
+ * Create a custom reply template.
2577
+ * @param requestBody
2578
+ * @returns ReplyTemplate Template created.
2579
+ * @throws ApiError
2580
+ */
2581
+ static postReplyTemplate(requestBody) {
2582
+ return request(OpenAPI, {
2583
+ method: "POST",
2584
+ url: "/api/v1/reply-templates",
2585
+ body: requestBody,
2586
+ mediaType: "application/json",
2587
+ errors: {
2588
+ 400: `Request validation failed.`,
2589
+ 401: `Authentication required or token invalid.`
2590
+ }
2591
+ });
2592
+ }
2593
+ /**
2594
+ * Replace a reply template.
2595
+ * @param templateId
2596
+ * @param requestBody
2597
+ * @returns ReplyTemplate Template updated.
2598
+ * @throws ApiError
2599
+ */
2600
+ static putReplyTemplate(templateId, requestBody) {
2601
+ return request(OpenAPI, {
2602
+ method: "PUT",
2603
+ url: "/api/v1/reply-templates/{templateId}",
2604
+ path: {
2605
+ "templateId": templateId
2606
+ },
2607
+ body: requestBody,
2608
+ mediaType: "application/json",
2609
+ errors: {
2610
+ 400: `Request validation failed.`,
2611
+ 401: `Authentication required or token invalid.`,
2612
+ 404: `Resource not found.`
2613
+ }
2614
+ });
2615
+ }
2616
+ /**
2617
+ * Patch fields on a reply template.
2618
+ * @param templateId
2619
+ * @param requestBody
2620
+ * @returns ReplyTemplate Template updated.
2621
+ * @throws ApiError
2622
+ */
2623
+ static patchReplyTemplate(templateId, requestBody) {
2624
+ return request(OpenAPI, {
2625
+ method: "PATCH",
2626
+ url: "/api/v1/reply-templates/{templateId}",
2627
+ path: {
2628
+ "templateId": templateId
2629
+ },
2630
+ body: requestBody,
2631
+ mediaType: "application/json",
2632
+ errors: {
2633
+ 400: `Request validation failed.`,
2634
+ 401: `Authentication required or token invalid.`,
2635
+ 404: `Resource not found.`
2636
+ }
2637
+ });
2638
+ }
2639
+ /**
2640
+ * Remove a custom reply template.
2641
+ * @param templateId
2642
+ * @returns void
2643
+ * @throws ApiError
2644
+ */
2645
+ static deleteReplyTemplate(templateId) {
2646
+ return request(OpenAPI, {
2647
+ method: "DELETE",
2648
+ url: "/api/v1/reply-templates/{templateId}",
2649
+ path: {
2650
+ "templateId": templateId
2651
+ },
2652
+ errors: {
2653
+ 401: `Authentication required or token invalid.`,
2654
+ 404: `Resource not found.`
2655
+ }
2656
+ });
2657
+ }
2658
+ /**
2659
+ * List reply template performance metrics.
2660
+ * @param days
2661
+ * @param templateId
2662
+ * @returns any Template analytics returned.
2663
+ * @throws ApiError
2664
+ */
2665
+ static getTemplatePerformance(days = 90, templateId) {
2666
+ return request(OpenAPI, {
2667
+ method: "GET",
2668
+ url: "/api/v1/reply-templates/performance",
2669
+ query: {
2670
+ "days": days,
2671
+ "template_id": templateId
2672
+ },
2673
+ errors: {
2674
+ 401: `Authentication required or token invalid.`,
2675
+ 403: `Request not permitted for this user.`
2676
+ }
2677
+ });
2678
+ }
2679
+ /**
2680
+ * Alias for template performance listing.
2681
+ * @returns any Template analytics returned.
2682
+ * @throws ApiError
2683
+ */
2684
+ static getTemplateComparison() {
2685
+ return request(OpenAPI, {
2686
+ method: "GET",
2687
+ url: "/api/v1/reply-templates/comparison",
2688
+ errors: {
2689
+ 401: `Authentication required or token invalid.`,
2690
+ 403: `Request not permitted for this user.`
2691
+ }
2692
+ });
2693
+ }
2694
+ };
2695
+
2696
+ // services/ReviewsService.ts
2697
+ var ReviewsService = class {
2698
+ /**
2699
+ * Paginated reviews for an app.
2700
+ * @param appUuid
2701
+ * @param limit
2702
+ * @param cursor
2703
+ * @param sentiment
2704
+ * @param platform
2705
+ * @returns any Reviews returned.
2706
+ * @throws ApiError
2707
+ */
2708
+ static getAppReviews(appUuid, limit, cursor, sentiment, platform) {
2709
+ return request(OpenAPI, {
2710
+ method: "GET",
2711
+ url: "/api/v1/apps/{appUuid}/reviews",
2712
+ path: {
2713
+ "appUuid": appUuid
2714
+ },
2715
+ query: {
2716
+ "limit": limit,
2717
+ "cursor": cursor,
2718
+ "sentiment": sentiment,
2719
+ "platform": platform
2720
+ },
2721
+ errors: {
2722
+ 401: `Authentication required or token invalid.`,
2723
+ 403: `Request not permitted for this user.`,
2724
+ 404: `Resource not found.`
2725
+ }
2726
+ });
2727
+ }
2728
+ /**
2729
+ * Retrieve stored reply metadata for a review.
2730
+ * @param appUuid
2731
+ * @param reviewId
2732
+ * @returns ReviewReplyStatus Reply status returned.
2733
+ * @throws ApiError
2734
+ */
2735
+ static getReviewReply(appUuid, reviewId) {
2736
+ return request(OpenAPI, {
2737
+ method: "GET",
2738
+ url: "/api/v1/apps/{appUuid}/reviews/{reviewId}/reply",
2739
+ path: {
2740
+ "appUuid": appUuid,
2741
+ "reviewId": reviewId
2742
+ },
2743
+ errors: {
2744
+ 401: `Authentication required or token invalid.`,
2745
+ 403: `Request not permitted for this user.`,
2746
+ 404: `Resource not found.`
2747
+ }
2748
+ });
2749
+ }
2750
+ /**
2751
+ * Generate an AI-generated reply draft for a review.
2752
+ * @param appUuid
2753
+ * @param reviewId
2754
+ * @param requestBody
2755
+ * @returns ReviewReplyDraft Draft generated.
2756
+ * @throws ApiError
2757
+ */
2758
+ static postGenerateReviewReply(appUuid, reviewId, requestBody) {
2759
+ return request(OpenAPI, {
2760
+ method: "POST",
2761
+ url: "/api/v1/apps/{appUuid}/reviews/{reviewId}/reply/generate",
2762
+ path: {
2763
+ "appUuid": appUuid,
2764
+ "reviewId": reviewId
2765
+ },
2766
+ body: requestBody,
2767
+ mediaType: "application/json",
2768
+ errors: {
2769
+ 400: `Request validation failed.`,
2770
+ 401: `Authentication required or token invalid.`,
2771
+ 403: `Request not permitted for this user.`,
2772
+ 404: `Resource not found.`
2773
+ }
2774
+ });
2775
+ }
2776
+ /**
2777
+ * Publish a reply back to the originating store.
2778
+ * @param appUuid
2779
+ * @param reviewId
2780
+ * @param requestBody
2781
+ * @returns ReviewReplyStatus Reply posted.
2782
+ * @throws ApiError
2783
+ */
2784
+ static postReviewReply(appUuid, reviewId, requestBody) {
2785
+ return request(OpenAPI, {
2786
+ method: "POST",
2787
+ url: "/api/v1/apps/{appUuid}/reviews/{reviewId}/reply/post",
2788
+ path: {
2789
+ "appUuid": appUuid,
2790
+ "reviewId": reviewId
2791
+ },
2792
+ body: requestBody,
2793
+ mediaType: "application/json",
2794
+ errors: {
2795
+ 400: `Request validation failed.`,
2796
+ 401: `Authentication required or token invalid.`,
2797
+ 403: `Request not permitted for this user.`,
2798
+ 404: `Resource not found.`
2799
+ }
2800
+ });
2801
+ }
2802
+ /**
2803
+ * Aggregate reply performance metrics for an app.
2804
+ * @param appUuid
2805
+ * @returns ReplyAnalytics Reply analytics returned.
2806
+ * @throws ApiError
2807
+ */
2808
+ static getReplyAnalytics(appUuid) {
2809
+ return request(OpenAPI, {
2810
+ method: "GET",
2811
+ url: "/api/v1/apps/{appUuid}/replies/analytics",
2812
+ path: {
2813
+ "appUuid": appUuid
2814
+ },
2815
+ errors: {
2816
+ 401: `Authentication required or token invalid.`,
2817
+ 403: `Request not permitted for this user.`,
2818
+ 404: `Resource not found.`
2819
+ }
2820
+ });
2821
+ }
2822
+ /**
2823
+ * Discover reviews across all connected apps.
2824
+ * @param limit
2825
+ * @param cursor
2826
+ * @param appUuid
2827
+ * @param sentiment
2828
+ * @returns any Reviews returned.
2829
+ * @throws ApiError
2830
+ */
2831
+ static getTenantReviews(limit, cursor, appUuid, sentiment) {
2832
+ return request(OpenAPI, {
2833
+ method: "GET",
2834
+ url: "/api/v1/reviews",
2835
+ query: {
2836
+ "limit": limit,
2837
+ "cursor": cursor,
2838
+ "app_uuid": appUuid,
2839
+ "sentiment": sentiment
2840
+ },
2841
+ errors: {
2842
+ 401: `Authentication required or token invalid.`
2843
+ }
2844
+ });
2845
+ }
2846
+ /**
2847
+ * Retrieve reviews tied to a specific segment.
2848
+ * @param appUuid App UUID assigned by Tritonium.
2849
+ * @param segmentType
2850
+ * @returns any Reviews returned.
2851
+ * @throws ApiError
2852
+ */
2853
+ static getSegmentReviews(appUuid, segmentType) {
2854
+ return request(OpenAPI, {
2855
+ method: "GET",
2856
+ url: "/api/v1/apps/{app_uuid}/segments/{segment_type}/reviews",
2857
+ path: {
2858
+ "app_uuid": appUuid,
2859
+ "segment_type": segmentType
2860
+ },
2861
+ errors: {
2862
+ 401: `Authentication required or token invalid.`,
2863
+ 403: `Request not permitted for this user.`
2864
+ }
2865
+ });
2866
+ }
2867
+ /**
2868
+ * List reviews with viral engagement.
2869
+ * @param appUuid App UUID assigned by Tritonium.
2870
+ * @param lookbackHours
2871
+ * @param minEngagement
2872
+ * @param sentiment
2873
+ * @returns any Viral review payload.
2874
+ * @throws ApiError
2875
+ */
2876
+ static getViralReviews(appUuid, lookbackHours = 48, minEngagement = 50, sentiment) {
2877
+ return request(OpenAPI, {
2878
+ method: "GET",
2879
+ url: "/api/v1/apps/{app_uuid}/reviews/viral",
2880
+ path: {
2881
+ "app_uuid": appUuid
2882
+ },
2883
+ query: {
2884
+ "lookback_hours": lookbackHours,
2885
+ "min_engagement": minEngagement,
2886
+ "sentiment": sentiment
2887
+ },
2888
+ errors: {
2889
+ 401: `Authentication required or token invalid.`,
2890
+ 403: `Request not permitted for this user.`
2891
+ }
2892
+ });
2893
+ }
2894
+ /**
2895
+ * Retrieve engagement history for a review.
2896
+ * @param reviewId
2897
+ * @param appUuid
2898
+ * @returns any History returned.
2899
+ * @throws ApiError
2900
+ */
2901
+ static getReviewEngagementHistory(reviewId, appUuid) {
2902
+ return request(OpenAPI, {
2903
+ method: "GET",
2904
+ url: "/api/v1/reviews/{review_id}/engagement/history",
2905
+ path: {
2906
+ "review_id": reviewId
2907
+ },
2908
+ query: {
2909
+ "app_uuid": appUuid
2910
+ },
2911
+ errors: {
2912
+ 401: `Authentication required or token invalid.`,
2913
+ 403: `Request not permitted for this user.`
2914
+ }
2915
+ });
2916
+ }
2917
+ };
2918
+
2919
+ // services/UsersService.ts
2920
+ var UsersService = class {
2921
+ /**
2922
+ * Retrieve the authenticated user's profile.
2923
+ * @returns UserSummary Profile details.
2924
+ * @throws ApiError
2925
+ */
2926
+ static getMe() {
2927
+ return request(OpenAPI, {
2928
+ method: "GET",
2929
+ url: "/api/v1/me",
2930
+ errors: {
2931
+ 401: `Authentication required or token invalid.`
2932
+ }
2933
+ });
2934
+ }
2935
+ /**
2936
+ * Update profile attributes for the active user.
2937
+ * @param requestBody
2938
+ * @returns UserSummary Profile updated.
2939
+ * @throws ApiError
2940
+ */
2941
+ static patchProfile(requestBody) {
2942
+ return request(OpenAPI, {
2943
+ method: "PATCH",
2944
+ url: "/api/v1/profile",
2945
+ body: requestBody,
2946
+ mediaType: "application/json",
2947
+ errors: {
2948
+ 400: `Request validation failed.`
2949
+ }
2950
+ });
2951
+ }
2952
+ /**
2953
+ * Mark onboarding tour completion for the signed-in user.
2954
+ * @param requestBody
2955
+ * @returns any User updated.
2956
+ * @throws ApiError
2957
+ */
2958
+ static postUserOnboardingState(requestBody) {
2959
+ return request(OpenAPI, {
2960
+ method: "POST",
2961
+ url: "/api/v1/users/me/onboarding",
2962
+ body: requestBody,
2963
+ mediaType: "application/json",
2964
+ errors: {
2965
+ 400: `Request validation failed.`,
2966
+ 401: `Authentication required or token invalid.`
2967
+ }
2968
+ });
2969
+ }
2970
+ /**
2971
+ * Replace profile attributes for the active user.
2972
+ * @param requestBody
2973
+ * @returns UserSummary Profile updated.
2974
+ * @throws ApiError
2975
+ */
2976
+ static putProfile(requestBody) {
2977
+ return request(OpenAPI, {
2978
+ method: "PUT",
2979
+ url: "/api/v1/users/me/onboarding",
2980
+ body: requestBody,
2981
+ mediaType: "application/json",
2982
+ errors: {
2983
+ 400: `Request validation failed.`,
2984
+ 401: `Authentication required or token invalid.`
2985
+ }
2986
+ });
2987
+ }
2988
+ };
2989
+
2990
+ export { Alert, AlertUpdateRequest, AlertsService, ApiError, AppsService, AuthService, AutoSyncConfigRequest, BillingService, CancelError, CancelablePromise, CredentialsService, EventTypes, HealthService, InsightsService, IntegrationsService, InternalService, OpenAPI, PredictionsService, RatingsService, ReplyTemplatesService, ReviewsService, UsersService, WebhookExpiredError, WebhookSignatureError, WebhookVerificationError, clearAuth, configure, configureApiKey, configureBearerToken, constructEvent, getConfiguration, isWebhookError, verifySignature, verifyTimestamp, verifyWebhook };
2991
+ //# sourceMappingURL=index.mjs.map
2992
+ //# sourceMappingURL=index.mjs.map