@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/README.md +313 -0
- package/dist/auth.d.mts +86 -0
- package/dist/auth.d.ts +86 -0
- package/dist/auth.js +77 -0
- package/dist/auth.js.map +1 -0
- package/dist/auth.mjs +71 -0
- package/dist/auth.mjs.map +1 -0
- package/dist/index.d.mts +1885 -0
- package/dist/index.d.ts +1885 -0
- package/dist/index.js +3045 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2992 -0
- package/dist/index.mjs.map +1 -0
- package/dist/webhooks.d.mts +191 -0
- package/dist/webhooks.d.ts +191 -0
- package/dist/webhooks.js +125 -0
- package/dist/webhooks.js.map +1 -0
- package/dist/webhooks.mjs +95 -0
- package/dist/webhooks.mjs.map +1 -0
- package/package.json +72 -0
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
|