@alfresco/js-api 9.5.0-24716296101 → 9.5.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.
@@ -0,0 +1,409 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { __awaiter } from "tslib";
18
+ import { isBrowser, paramToString } from './utils';
19
+ export class FetchHttpClient {
20
+ constructor(customFetch) {
21
+ this.timeout = undefined;
22
+ this.customFetch = customFetch;
23
+ }
24
+ getFetch() {
25
+ return this.customFetch || (typeof process !== 'undefined' && process.__test_fetch__) || globalThis.fetch;
26
+ }
27
+ hasNativeXhr() {
28
+ if (this.customFetch || (typeof process !== 'undefined' && process.__test_fetch__)) {
29
+ return false;
30
+ }
31
+ return typeof XMLHttpRequest !== 'undefined';
32
+ }
33
+ post(url, options, securityOptions, emitters) {
34
+ return this.request(url, Object.assign(Object.assign({}, options), { httpMethod: 'POST' }), securityOptions, emitters);
35
+ }
36
+ put(url, options, securityOptions, emitters) {
37
+ return this.request(url, Object.assign(Object.assign({}, options), { httpMethod: 'PUT' }), securityOptions, emitters);
38
+ }
39
+ get(url, options, securityOptions, emitters) {
40
+ return this.request(url, Object.assign(Object.assign({}, options), { httpMethod: 'GET' }), securityOptions, emitters);
41
+ }
42
+ delete(url, options, securityOptions, emitters) {
43
+ return this.request(url, Object.assign(Object.assign({}, options), { httpMethod: 'DELETE' }), securityOptions, emitters);
44
+ }
45
+ request(url, options, securityOptions, emitters) {
46
+ const { httpMethod, queryParams, headerParams, formParams, bodyParam, contentType, accept, responseType, returnType } = options;
47
+ const headers = this.buildHeaders(headerParams, securityOptions, contentType, accept);
48
+ const queryString = FetchHttpClient.buildQueryString(queryParams);
49
+ const fullUrl = queryString ? `${url}${url.includes('?') ? '&' : '?'}${queryString}` : url;
50
+ const body = this.buildBody(contentType, formParams, bodyParam);
51
+ const hasBody = body !== undefined && httpMethod !== 'GET' && httpMethod !== 'HEAD';
52
+ const withCredentials = securityOptions.withCredentials || securityOptions.isBpmRequest;
53
+ if (hasBody && this.hasNativeXhr()) {
54
+ return this.requestWithXhr(fullUrl, httpMethod, headers, body, withCredentials, returnType, responseType, securityOptions, emitters);
55
+ }
56
+ return this.requestWithFetch(fullUrl, httpMethod, headers, hasBody ? body : undefined, withCredentials, returnType, responseType, securityOptions, emitters);
57
+ }
58
+ requestWithFetch(url, method, headers, body, withCredentials, returnType, responseType, securityOptions, emitters) {
59
+ var _a;
60
+ const { eventEmitter } = emitters;
61
+ const controller = new AbortController();
62
+ const timeoutMs = typeof this.timeout === 'number' ? this.timeout : (_a = this.timeout) === null || _a === void 0 ? void 0 : _a.deadline;
63
+ if (timeoutMs) {
64
+ if (typeof AbortSignal.timeout === 'function') {
65
+ AbortSignal.timeout(timeoutMs).addEventListener('abort', () => controller.abort());
66
+ }
67
+ else {
68
+ setTimeout(() => controller.abort(), timeoutMs);
69
+ }
70
+ }
71
+ const init = {
72
+ method,
73
+ headers,
74
+ signal: controller.signal,
75
+ credentials: withCredentials ? 'include' : 'same-origin'
76
+ };
77
+ if (body !== undefined) {
78
+ init.body = body;
79
+ }
80
+ const fn = this.getFetch();
81
+ const promise = new Promise((resolve, reject) => {
82
+ const execute = () => __awaiter(this, void 0, void 0, function* () {
83
+ const response = yield fn(url, init);
84
+ if (!response.ok) {
85
+ const errorText = yield response.text().catch(() => '');
86
+ const error = new Error(errorText || response.statusText);
87
+ error.status = response.status;
88
+ error.response = response;
89
+ FetchHttpClient.emitErrorEvents(error, response.status, emitters);
90
+ reject({ error, status: response.status, message: errorText || response.statusText });
91
+ return;
92
+ }
93
+ if (securityOptions.isBpmRequest) {
94
+ const setCookie = response.headers.get('set-cookie');
95
+ if (setCookie) {
96
+ securityOptions.authentications.cookie = setCookie;
97
+ }
98
+ }
99
+ const data = yield this.deserializeResponse(response, returnType, responseType);
100
+ eventEmitter.emit('success', data);
101
+ resolve(data);
102
+ });
103
+ execute().catch((error) => {
104
+ if (error.name === 'AbortError') {
105
+ eventEmitter.emit('abort');
106
+ reject(error);
107
+ return;
108
+ }
109
+ if (!error.status) {
110
+ FetchHttpClient.emitErrorEvents(error, 0, emitters);
111
+ }
112
+ reject(error.status ? { error, status: error.status, message: error.message } : { error });
113
+ });
114
+ });
115
+ promise.abort = () => {
116
+ controller.abort();
117
+ return promise;
118
+ };
119
+ return promise;
120
+ }
121
+ requestWithXhr(url, method, headers, body, withCredentials, returnType, responseType, securityOptions, emitters) {
122
+ var _a;
123
+ const { eventEmitter } = emitters;
124
+ const timeoutMs = typeof this.timeout === 'number' ? this.timeout : (_a = this.timeout) === null || _a === void 0 ? void 0 : _a.deadline;
125
+ let xhr;
126
+ const promise = new Promise((resolve, reject) => {
127
+ xhr = new XMLHttpRequest();
128
+ xhr.open(method, url, true);
129
+ for (const [key, value] of Object.entries(headers)) {
130
+ xhr.setRequestHeader(key, value);
131
+ }
132
+ if (withCredentials) {
133
+ xhr.withCredentials = true;
134
+ }
135
+ if (timeoutMs) {
136
+ xhr.timeout = timeoutMs;
137
+ }
138
+ if (returnType === 'blob' || returnType === 'Blob' || responseType === 'blob' || responseType === 'Blob' || returnType === 'Binary') {
139
+ xhr.responseType = 'blob';
140
+ }
141
+ xhr.upload.onprogress = (event) => {
142
+ if (event.lengthComputable) {
143
+ const percent = Math.round((event.loaded / event.total) * 100);
144
+ eventEmitter.emit('progress', { total: event.total, loaded: event.loaded, percent });
145
+ }
146
+ };
147
+ xhr.onload = () => {
148
+ if (xhr.status >= 200 && xhr.status < 300) {
149
+ if (securityOptions.isBpmRequest) {
150
+ const setCookie = xhr.getResponseHeader('set-cookie');
151
+ if (setCookie) {
152
+ securityOptions.authentications.cookie = setCookie;
153
+ }
154
+ }
155
+ const data = this.deserializeXhrResponse(xhr, returnType, responseType);
156
+ eventEmitter.emit('success', data);
157
+ resolve(data);
158
+ }
159
+ else {
160
+ const errorText = xhr.responseText || xhr.statusText;
161
+ const error = new Error(errorText);
162
+ error.status = xhr.status;
163
+ error.message = errorText;
164
+ FetchHttpClient.emitErrorEvents(error, xhr.status, emitters);
165
+ reject({ error, status: xhr.status, message: errorText });
166
+ }
167
+ };
168
+ xhr.onerror = () => {
169
+ const error = new Error('Network request failed');
170
+ FetchHttpClient.emitErrorEvents(error, 0, emitters);
171
+ reject({ error });
172
+ };
173
+ xhr.onabort = () => {
174
+ eventEmitter.emit('abort');
175
+ reject(new DOMException('The operation was aborted.', 'AbortError'));
176
+ };
177
+ xhr.ontimeout = () => {
178
+ const error = new Error('Request timed out');
179
+ FetchHttpClient.emitErrorEvents(error, 0, emitters);
180
+ reject({ error });
181
+ };
182
+ xhr.send(body);
183
+ });
184
+ promise.abort = () => {
185
+ if (xhr) {
186
+ xhr.abort();
187
+ }
188
+ return promise;
189
+ };
190
+ return promise;
191
+ }
192
+ deserializeXhrResponse(xhr, returnType, responseType) {
193
+ if (returnType === 'blob' || returnType === 'Blob' || responseType === 'blob' || responseType === 'Blob' || returnType === 'Binary') {
194
+ return xhr.response;
195
+ }
196
+ if (returnType === 'String') {
197
+ return xhr.responseText;
198
+ }
199
+ const contentType = xhr.getResponseHeader('content-type') || '';
200
+ if (contentType.includes('text/html')) {
201
+ return xhr.responseText;
202
+ }
203
+ try {
204
+ const text = xhr.responseText;
205
+ if (!text) {
206
+ return {};
207
+ }
208
+ const data = JSON.parse(text);
209
+ if (returnType && Array.isArray(data)) {
210
+ return data.map((element) => new returnType(element));
211
+ }
212
+ if (returnType && typeof returnType === 'function') {
213
+ return new returnType(data);
214
+ }
215
+ return data;
216
+ }
217
+ catch (_a) {
218
+ return xhr.responseText || '';
219
+ }
220
+ }
221
+ setCsrfToken(headers) {
222
+ const token = FetchHttpClient.createCSRFToken();
223
+ headers['X-CSRF-TOKEN'] = token;
224
+ if (!isBrowser()) {
225
+ headers['Cookie'] = 'CSRF-TOKEN=' + token + ';path=/';
226
+ }
227
+ try {
228
+ document.cookie = 'CSRF-TOKEN=' + token + ';path=/';
229
+ }
230
+ catch (_a) {
231
+ }
232
+ }
233
+ buildHeaders(headerParams, securityOptions, contentType, accept) {
234
+ const headers = Object.assign(Object.assign({}, securityOptions.defaultHeaders), FetchHttpClient.normalizeParams(headerParams));
235
+ this.applyAuthHeaders(headers, securityOptions.authentications);
236
+ if (securityOptions.isBpmRequest && securityOptions.enableCsrf) {
237
+ this.setCsrfToken(headers);
238
+ }
239
+ if (securityOptions.isBpmRequest && securityOptions.authentications.cookie && !isBrowser()) {
240
+ headers['Cookie'] = headers['Cookie']
241
+ ? headers['Cookie'] + '; ' + securityOptions.authentications.cookie
242
+ : securityOptions.authentications.cookie;
243
+ }
244
+ if (contentType && contentType !== 'multipart/form-data') {
245
+ headers['Content-Type'] = contentType;
246
+ }
247
+ else if (contentType !== 'multipart/form-data' && !headers['Content-Type']) {
248
+ headers['Content-Type'] = 'application/json';
249
+ }
250
+ if (accept) {
251
+ headers['Accept'] = accept;
252
+ }
253
+ return headers;
254
+ }
255
+ buildBody(contentType, formParams, bodyParam) {
256
+ if (contentType === 'application/x-www-form-urlencoded') {
257
+ const params = FetchHttpClient.normalizeParams(formParams);
258
+ return new URLSearchParams(params).toString();
259
+ }
260
+ if (contentType === 'multipart/form-data') {
261
+ const normalizedParams = FetchHttpClient.normalizeParams(formParams);
262
+ const formData = new FormData();
263
+ for (const [key, value] of Object.entries(normalizedParams)) {
264
+ formData.append(key, value);
265
+ }
266
+ return formData;
267
+ }
268
+ if (bodyParam) {
269
+ return typeof bodyParam === 'string' ? bodyParam : JSON.stringify(bodyParam);
270
+ }
271
+ return undefined;
272
+ }
273
+ static emitErrorEvents(error, status, emitters) {
274
+ const { eventEmitter, apiClientEmitter } = emitters;
275
+ apiClientEmitter.emit('error', error);
276
+ eventEmitter.emit('error', error);
277
+ if (status === 401) {
278
+ apiClientEmitter.emit('unauthorized');
279
+ eventEmitter.emit('unauthorized');
280
+ }
281
+ if (status === 403) {
282
+ apiClientEmitter.emit('forbidden');
283
+ eventEmitter.emit('forbidden');
284
+ }
285
+ }
286
+ applyAuthHeaders(headers, authentications) {
287
+ if (!authentications) {
288
+ return;
289
+ }
290
+ switch (authentications.type) {
291
+ case 'basic': {
292
+ const basicAuth = authentications.basicAuth;
293
+ if (basicAuth.username || basicAuth.password) {
294
+ const encoded = typeof btoa === 'function'
295
+ ? btoa((basicAuth.username || '') + ':' + (basicAuth.password || ''))
296
+ : Buffer.from((basicAuth.username || '') + ':' + (basicAuth.password || '')).toString('base64');
297
+ headers['Authorization'] = 'Basic ' + encoded;
298
+ }
299
+ break;
300
+ }
301
+ case 'activiti': {
302
+ if (authentications.basicAuth.ticket) {
303
+ headers['Authorization'] = authentications.basicAuth.ticket;
304
+ }
305
+ break;
306
+ }
307
+ case 'oauth2': {
308
+ const oauth2 = authentications.oauth2;
309
+ if (oauth2.accessToken) {
310
+ headers['Authorization'] = 'Bearer ' + oauth2.accessToken;
311
+ }
312
+ break;
313
+ }
314
+ default:
315
+ throw new Error('Unknown authentication type: ' + authentications.type);
316
+ }
317
+ }
318
+ deserializeResponse(response, returnType, responseType) {
319
+ return __awaiter(this, void 0, void 0, function* () {
320
+ if (returnType === 'blob' || returnType === 'Blob' || responseType === 'blob' || responseType === 'Blob' || returnType === 'Binary') {
321
+ const blob = yield response.blob();
322
+ if (isBrowser()) {
323
+ return blob;
324
+ }
325
+ const arrayBuffer = yield blob.arrayBuffer();
326
+ return Buffer.from(arrayBuffer);
327
+ }
328
+ if (returnType === 'String') {
329
+ return response.text();
330
+ }
331
+ const contentTypeHeader = response.headers.get('content-type') || '';
332
+ if (contentTypeHeader.includes('text/html')) {
333
+ return response.text();
334
+ }
335
+ const text = yield response.text();
336
+ if (!text) {
337
+ return {};
338
+ }
339
+ try {
340
+ const data = JSON.parse(text);
341
+ if (returnType && Array.isArray(data)) {
342
+ return data.map((element) => new returnType(element));
343
+ }
344
+ if (returnType && typeof returnType === 'function') {
345
+ return new returnType(data);
346
+ }
347
+ return data;
348
+ }
349
+ catch (_a) {
350
+ return text;
351
+ }
352
+ });
353
+ }
354
+ static createCSRFToken() {
355
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
356
+ return crypto.randomUUID();
357
+ }
358
+ const bytes = new Uint8Array(16);
359
+ crypto.getRandomValues(bytes);
360
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
361
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
362
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
363
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
364
+ }
365
+ static buildQueryString(params) {
366
+ if (!params) {
367
+ return '';
368
+ }
369
+ const normalized = FetchHttpClient.normalizeParams(params);
370
+ const searchParams = new URLSearchParams();
371
+ for (const [key, value] of Object.entries(normalized)) {
372
+ if (Array.isArray(value)) {
373
+ value.forEach((v) => searchParams.append(key, v));
374
+ }
375
+ else {
376
+ searchParams.append(key, value);
377
+ }
378
+ }
379
+ return searchParams.toString();
380
+ }
381
+ static normalizeParams(params) {
382
+ if (!params) {
383
+ return {};
384
+ }
385
+ const newParams = {};
386
+ for (const [key, value] of Object.entries(params)) {
387
+ if (value != null) {
388
+ newParams[key] = FetchHttpClient.isFileParam(value) || Array.isArray(value) ? value : paramToString(value);
389
+ }
390
+ }
391
+ return newParams;
392
+ }
393
+ static isFileParam(param) {
394
+ if (typeof Buffer === 'function' && (param instanceof Buffer || (param === null || param === void 0 ? void 0 : param.path))) {
395
+ return true;
396
+ }
397
+ if (typeof Blob === 'function' && param instanceof Blob) {
398
+ return true;
399
+ }
400
+ if (typeof File === 'function' && param instanceof File) {
401
+ return true;
402
+ }
403
+ if (typeof File === 'object' && param instanceof File) {
404
+ return true;
405
+ }
406
+ return false;
407
+ }
408
+ }
409
+ //# sourceMappingURL=../../../../../lib/js-api/src/fetchHttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchHttpClient.js","sourceRoot":"","sources":["fetchHttpClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;AAMH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAOnD,MAAM,OAAO,eAAe;IAIxB,YAAY,WAA0B;QAHtC,YAAO,GAAsD,SAAS,CAAC;QAInE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAEO,QAAQ;QAEZ,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,OAAO,KAAK,WAAW,IAAK,OAAe,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC;IACvH,CAAC;IAEO,YAAY;QAEhB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,OAAO,KAAK,WAAW,IAAK,OAAe,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1F,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,cAAc,KAAK,WAAW,CAAC;IACjD,CAAC;IAED,IAAI,CAAU,GAAW,EAAE,OAAuB,EAAE,eAAgC,EAAE,QAAkB;QACpG,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,kCAAO,OAAO,KAAE,UAAU,EAAE,MAAM,KAAI,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC/F,CAAC;IAED,GAAG,CAAU,GAAW,EAAE,OAAuB,EAAE,eAAgC,EAAE,QAAkB;QACnG,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,kCAAO,OAAO,KAAE,UAAU,EAAE,KAAK,KAAI,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC9F,CAAC;IAED,GAAG,CAAU,GAAW,EAAE,OAAuB,EAAE,eAAgC,EAAE,QAAkB;QACnG,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,kCAAO,OAAO,KAAE,UAAU,EAAE,KAAK,KAAI,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAW,GAAW,EAAE,OAAuB,EAAE,eAAgC,EAAE,QAAkB;QACvG,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,kCAAO,OAAO,KAAE,UAAU,EAAE,QAAQ,KAAI,eAAe,EAAE,QAAQ,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,CAAU,GAAW,EAAE,OAAuB,EAAE,eAAgC,EAAE,QAAkB;QACvG,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAEhI,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACtF,MAAM,WAAW,GAAG,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,MAAM,CAAC;QACpF,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,IAAI,eAAe,CAAC,YAAY,CAAC;QAExF,IAAI,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,cAAc,CAAI,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC5I,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CACxB,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC1B,eAAe,EACf,UAAU,EACV,YAAY,EACZ,eAAe,EACf,QAAQ,CACX,CAAC;IACN,CAAC;IAEO,gBAAgB,CACpB,GAAW,EACX,MAAc,EACd,OAA+B,EAC/B,IAAS,EACT,eAAwB,EACxB,UAAkB,EAClB,YAAoB,EACpB,eAAgC,EAChC,QAAkB;;QAElB,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,CAAC;QAE3F,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC5C,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YACvF,CAAC;iBAAM,CAAC;gBACJ,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAgB;YACtB,MAAM;YACN,OAAO;YACP,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;SAC3D,CAAC;QAEF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE3B,MAAM,OAAO,GAAQ,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,MAAM,OAAO,GAAG,GAAS,EAAE;gBACvB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAErC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;oBAC/D,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBAE1B,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAElE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;oBACtF,OAAO;gBACX,CAAC;gBAED,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC;oBAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBACrD,IAAI,SAAS,EAAE,CAAC;wBACZ,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;oBACvD,CAAC;gBACL,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;gBAChF,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAS,CAAC,CAAC;YACvB,CAAC,CAAA,CAAC;YAEF,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC3B,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAChB,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE;YACjB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,cAAc,CAClB,GAAW,EACX,MAAc,EACd,OAA+B,EAC/B,IAAS,EACT,eAAwB,EACxB,UAAkB,EAClB,YAAoB,EACpB,eAAgC,EAChC,QAAkB;;QAElB,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,CAAC;QAC3F,IAAI,GAAQ,CAAC;QAEb,MAAM,OAAO,GAAQ,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,eAAe,EAAE,CAAC;gBAClB,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;YAC/B,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACZ,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;YAC5B,CAAC;YAED,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAClI,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC;YAC9B,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,KAAU,EAAE,EAAE;gBACnC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;oBAC/D,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzF,CAAC;YACL,CAAC,CAAC;YAEF,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBACd,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACxC,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC;wBAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;wBACtD,IAAI,SAAS,EAAE,CAAC;4BACZ,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;wBACvD,CAAC;oBACL,CAAC;oBAED,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;oBACxE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBACnC,OAAO,CAAC,IAAS,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACJ,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,UAAU,CAAC;oBACrD,MAAM,KAAK,GAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;oBACxC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC1B,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;oBAE1B,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAE7D,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC,CAAC;YAEF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;gBACf,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAClD,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAEpD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACtB,CAAC,CAAC;YAEF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;gBACf,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC;YAEF,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC7C,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAEpD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACtB,CAAC,CAAC;YAEF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,GAAG,EAAE,CAAC;gBACN,GAAG,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;YACD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,sBAAsB,CAAC,GAAQ,EAAE,UAAkB,EAAE,YAAoB;QAC7E,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAClI,OAAO,GAAG,CAAC,QAAQ,CAAC;QACxB,CAAC;QAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,YAAY,CAAC;QAC5B,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAChE,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,OAAO,GAAG,CAAC,YAAY,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,IAAK,UAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;gBACjD,OAAO,IAAK,UAAkB,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAClC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,OAA+B;QACxC,MAAM,KAAK,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC;QAChD,OAAO,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;QAEhC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,QAAQ,CAAC,GAAG,aAAa,GAAG,KAAK,GAAG,SAAS,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC;YACD,QAAQ,CAAC,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,SAAS,CAAC;QACxD,CAAC;QAAC,WAAM,CAAC;QAET,CAAC;IACL,CAAC;IAEO,YAAY,CAChB,YAAiC,EACjC,eAAgC,EAChC,WAAmB,EACnB,MAAc;QAEd,MAAM,OAAO,mCACN,eAAe,CAAC,cAAc,GAC9B,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,CACnD,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;QAEhE,IAAI,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;YAC7D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACzF,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACjC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM;gBACnE,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC;QACjD,CAAC;QAED,IAAI,WAAW,IAAI,WAAW,KAAK,qBAAqB,EAAE,CAAC;YACvD,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC;QAC1C,CAAC;aAAM,IAAI,WAAW,KAAK,qBAAqB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QACjD,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QAC/B,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,SAAS,CAAC,WAAmB,EAAE,UAA+B,EAAE,SAA0B;QAC9F,IAAI,WAAW,KAAK,mCAAmC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC3D,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,WAAW,KAAK,qBAAqB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACrE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC1D,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAY,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,KAAU,EAAE,MAAc,EAAE,QAAkB;QACzE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;QAEpD,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAElC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,OAA+B,EAAE,eAA+B;QACrF,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,QAAQ,eAAe,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,OAAO,CAAC,CAAC,CAAC;gBACX,MAAM,SAAS,GAAc,eAAe,CAAC,SAAS,CAAC;gBACvD,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;oBAC3C,MAAM,OAAO,GACT,OAAO,IAAI,KAAK,UAAU;wBACtB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;wBACrE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACxG,OAAO,CAAC,eAAe,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC;gBAClD,CAAC;gBACD,MAAM;YACV,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBACd,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBACnC,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;gBAChE,CAAC;gBACD,MAAM;YACV,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAW,eAAe,CAAC,MAAM,CAAC;gBAC9C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACrB,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;gBAC9D,CAAC;gBACD,MAAM;YACV,CAAC;YACD;gBACI,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IAEa,mBAAmB,CAAC,QAAkB,EAAE,UAAkB,EAAE,YAAoB;;YAC1F,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAClI,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,SAAS,EAAE,EAAE,CAAC;oBACd,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,CAAC;YAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACrE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC1C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;YACd,CAAC;YACD,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,IAAK,UAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;oBACjD,OAAO,IAAK,UAAkB,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;YAAC,WAAM,CAAC;gBACL,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;KAAA;IAEO,MAAM,CAAC,eAAe;QAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC3E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/G,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,MAA2B;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACJ,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,MAA2B;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,SAAS,GAAwB,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAChB,SAAS,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/G,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,KAAU;QACjC,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,KAAK,YAAY,MAAM,KAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAA,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ","sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Authentication } from './authentication/authentication';\nimport { RequestOptions, HttpClient, SecurityOptions, Emitters } from './api-clients/http-client.interface';\nimport { Oauth2 } from './authentication/oauth2';\nimport { BasicAuth } from './authentication/basicAuth';\nimport { isBrowser, paramToString } from './utils';\n\ndeclare const Blob: any;\ndeclare const Buffer: any;\ndeclare const process: any;\ndeclare const XMLHttpRequest: any;\n\nexport class FetchHttpClient implements HttpClient {\n timeout: number | { deadline?: number; response?: number } = undefined;\n private readonly customFetch?: typeof fetch;\n\n constructor(customFetch?: typeof fetch) {\n this.customFetch = customFetch;\n }\n\n private getFetch(): typeof fetch {\n // eslint-disable-next-line no-underscore-dangle\n return this.customFetch || (typeof process !== 'undefined' && (process as any).__test_fetch__) || globalThis.fetch;\n }\n\n private hasNativeXhr(): boolean {\n // eslint-disable-next-line no-underscore-dangle\n if (this.customFetch || (typeof process !== 'undefined' && (process as any).__test_fetch__)) {\n return false;\n }\n return typeof XMLHttpRequest !== 'undefined';\n }\n\n post<T = any>(url: string, options: RequestOptions, securityOptions: SecurityOptions, emitters: Emitters): Promise<T> {\n return this.request<T>(url, { ...options, httpMethod: 'POST' }, securityOptions, emitters);\n }\n\n put<T = any>(url: string, options: RequestOptions, securityOptions: SecurityOptions, emitters: Emitters): Promise<T> {\n return this.request<T>(url, { ...options, httpMethod: 'PUT' }, securityOptions, emitters);\n }\n\n get<T = any>(url: string, options: RequestOptions, securityOptions: SecurityOptions, emitters: Emitters): Promise<T> {\n return this.request<T>(url, { ...options, httpMethod: 'GET' }, securityOptions, emitters);\n }\n\n delete<T = void>(url: string, options: RequestOptions, securityOptions: SecurityOptions, emitters: Emitters): Promise<T> {\n return this.request<T>(url, { ...options, httpMethod: 'DELETE' }, securityOptions, emitters);\n }\n\n request<T = any>(url: string, options: RequestOptions, securityOptions: SecurityOptions, emitters: Emitters): Promise<T> {\n const { httpMethod, queryParams, headerParams, formParams, bodyParam, contentType, accept, responseType, returnType } = options;\n\n const headers = this.buildHeaders(headerParams, securityOptions, contentType, accept);\n const queryString = FetchHttpClient.buildQueryString(queryParams);\n const fullUrl = queryString ? `${url}${url.includes('?') ? '&' : '?'}${queryString}` : url;\n const body = this.buildBody(contentType, formParams, bodyParam);\n const hasBody = body !== undefined && httpMethod !== 'GET' && httpMethod !== 'HEAD';\n const withCredentials = securityOptions.withCredentials || securityOptions.isBpmRequest;\n\n if (hasBody && this.hasNativeXhr()) {\n return this.requestWithXhr<T>(fullUrl, httpMethod, headers, body, withCredentials, returnType, responseType, securityOptions, emitters);\n }\n\n return this.requestWithFetch<T>(\n fullUrl,\n httpMethod,\n headers,\n hasBody ? body : undefined,\n withCredentials,\n returnType,\n responseType,\n securityOptions,\n emitters\n );\n }\n\n private requestWithFetch<T>(\n url: string,\n method: string,\n headers: Record<string, string>,\n body: any,\n withCredentials: boolean,\n returnType: string,\n responseType: string,\n securityOptions: SecurityOptions,\n emitters: Emitters\n ): Promise<T> {\n const { eventEmitter } = emitters;\n const controller = new AbortController();\n const timeoutMs = typeof this.timeout === 'number' ? this.timeout : this.timeout?.deadline;\n\n if (timeoutMs) {\n if (typeof AbortSignal.timeout === 'function') {\n AbortSignal.timeout(timeoutMs).addEventListener('abort', () => controller.abort());\n } else {\n setTimeout(() => controller.abort(), timeoutMs);\n }\n }\n\n const init: RequestInit = {\n method,\n headers,\n signal: controller.signal,\n credentials: withCredentials ? 'include' : 'same-origin'\n };\n\n if (body !== undefined) {\n init.body = body;\n }\n\n const fn = this.getFetch();\n\n const promise: any = new Promise<T>((resolve, reject) => {\n const execute = async () => {\n const response = await fn(url, init);\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => '');\n const error: any = new Error(errorText || response.statusText);\n error.status = response.status;\n error.response = response;\n\n FetchHttpClient.emitErrorEvents(error, response.status, emitters);\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ error, status: response.status, message: errorText || response.statusText });\n return;\n }\n\n if (securityOptions.isBpmRequest) {\n const setCookie = response.headers.get('set-cookie');\n if (setCookie) {\n securityOptions.authentications.cookie = setCookie;\n }\n }\n\n const data = await this.deserializeResponse(response, returnType, responseType);\n eventEmitter.emit('success', data);\n resolve(data as T);\n };\n\n execute().catch((error: any) => {\n if (error.name === 'AbortError') {\n eventEmitter.emit('abort');\n reject(error);\n return;\n }\n if (!error.status) {\n FetchHttpClient.emitErrorEvents(error, 0, emitters);\n }\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(error.status ? { error, status: error.status, message: error.message } : { error });\n });\n });\n\n promise.abort = () => {\n controller.abort();\n return promise;\n };\n\n return promise;\n }\n\n private requestWithXhr<T>(\n url: string,\n method: string,\n headers: Record<string, string>,\n body: any,\n withCredentials: boolean,\n returnType: string,\n responseType: string,\n securityOptions: SecurityOptions,\n emitters: Emitters\n ): Promise<T> {\n const { eventEmitter } = emitters;\n const timeoutMs = typeof this.timeout === 'number' ? this.timeout : this.timeout?.deadline;\n let xhr: any;\n\n const promise: any = new Promise<T>((resolve, reject) => {\n xhr = new XMLHttpRequest();\n xhr.open(method, url, true);\n\n for (const [key, value] of Object.entries(headers)) {\n xhr.setRequestHeader(key, value);\n }\n\n if (withCredentials) {\n xhr.withCredentials = true;\n }\n\n if (timeoutMs) {\n xhr.timeout = timeoutMs;\n }\n\n if (returnType === 'blob' || returnType === 'Blob' || responseType === 'blob' || responseType === 'Blob' || returnType === 'Binary') {\n xhr.responseType = 'blob';\n }\n\n xhr.upload.onprogress = (event: any) => {\n if (event.lengthComputable) {\n const percent = Math.round((event.loaded / event.total) * 100);\n eventEmitter.emit('progress', { total: event.total, loaded: event.loaded, percent });\n }\n };\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n if (securityOptions.isBpmRequest) {\n const setCookie = xhr.getResponseHeader('set-cookie');\n if (setCookie) {\n securityOptions.authentications.cookie = setCookie;\n }\n }\n\n const data = this.deserializeXhrResponse(xhr, returnType, responseType);\n eventEmitter.emit('success', data);\n resolve(data as T);\n } else {\n const errorText = xhr.responseText || xhr.statusText;\n const error: any = new Error(errorText);\n error.status = xhr.status;\n error.message = errorText;\n\n FetchHttpClient.emitErrorEvents(error, xhr.status, emitters);\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ error, status: xhr.status, message: errorText });\n }\n };\n\n xhr.onerror = () => {\n const error = new Error('Network request failed');\n FetchHttpClient.emitErrorEvents(error, 0, emitters);\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ error });\n };\n\n xhr.onabort = () => {\n eventEmitter.emit('abort');\n reject(new DOMException('The operation was aborted.', 'AbortError'));\n };\n\n xhr.ontimeout = () => {\n const error = new Error('Request timed out');\n FetchHttpClient.emitErrorEvents(error, 0, emitters);\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ error });\n };\n\n xhr.send(body);\n });\n\n promise.abort = () => {\n if (xhr) {\n xhr.abort();\n }\n return promise;\n };\n\n return promise;\n }\n\n private deserializeXhrResponse(xhr: any, returnType: string, responseType: string): any {\n if (returnType === 'blob' || returnType === 'Blob' || responseType === 'blob' || responseType === 'Blob' || returnType === 'Binary') {\n return xhr.response;\n }\n\n if (returnType === 'String') {\n return xhr.responseText;\n }\n\n const contentType = xhr.getResponseHeader('content-type') || '';\n if (contentType.includes('text/html')) {\n return xhr.responseText;\n }\n\n try {\n const text = xhr.responseText;\n if (!text) {\n return {};\n }\n const data = JSON.parse(text);\n if (returnType && Array.isArray(data)) {\n return data.map((element: any) => new (returnType as any)(element));\n }\n if (returnType && typeof returnType === 'function') {\n return new (returnType as any)(data);\n }\n return data;\n } catch {\n return xhr.responseText || '';\n }\n }\n\n setCsrfToken(headers: Record<string, string>): void {\n const token = FetchHttpClient.createCSRFToken();\n headers['X-CSRF-TOKEN'] = token;\n\n if (!isBrowser()) {\n headers['Cookie'] = 'CSRF-TOKEN=' + token + ';path=/';\n }\n\n try {\n document.cookie = 'CSRF-TOKEN=' + token + ';path=/';\n } catch {\n /* continue regardless of error */\n }\n }\n\n private buildHeaders(\n headerParams: Record<string, any>,\n securityOptions: SecurityOptions,\n contentType: string,\n accept: string\n ): Record<string, string> {\n const headers: Record<string, string> = {\n ...securityOptions.defaultHeaders,\n ...FetchHttpClient.normalizeParams(headerParams)\n };\n\n this.applyAuthHeaders(headers, securityOptions.authentications);\n\n if (securityOptions.isBpmRequest && securityOptions.enableCsrf) {\n this.setCsrfToken(headers);\n }\n\n if (securityOptions.isBpmRequest && securityOptions.authentications.cookie && !isBrowser()) {\n headers['Cookie'] = headers['Cookie']\n ? headers['Cookie'] + '; ' + securityOptions.authentications.cookie\n : securityOptions.authentications.cookie;\n }\n\n if (contentType && contentType !== 'multipart/form-data') {\n headers['Content-Type'] = contentType;\n } else if (contentType !== 'multipart/form-data' && !headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n\n if (accept) {\n headers['Accept'] = accept;\n }\n\n return headers;\n }\n\n private buildBody(contentType: string, formParams: Record<string, any>, bodyParam: string | object): any {\n if (contentType === 'application/x-www-form-urlencoded') {\n const params = FetchHttpClient.normalizeParams(formParams);\n return new URLSearchParams(params).toString();\n }\n\n if (contentType === 'multipart/form-data') {\n const normalizedParams = FetchHttpClient.normalizeParams(formParams);\n const formData = new FormData();\n for (const [key, value] of Object.entries(normalizedParams)) {\n formData.append(key, value as any);\n }\n return formData;\n }\n\n if (bodyParam) {\n return typeof bodyParam === 'string' ? bodyParam : JSON.stringify(bodyParam);\n }\n\n return undefined;\n }\n\n private static emitErrorEvents(error: any, status: number, emitters: Emitters): void {\n const { eventEmitter, apiClientEmitter } = emitters;\n\n apiClientEmitter.emit('error', error);\n eventEmitter.emit('error', error);\n\n if (status === 401) {\n apiClientEmitter.emit('unauthorized');\n eventEmitter.emit('unauthorized');\n }\n\n if (status === 403) {\n apiClientEmitter.emit('forbidden');\n eventEmitter.emit('forbidden');\n }\n }\n\n private applyAuthHeaders(headers: Record<string, string>, authentications: Authentication): void {\n if (!authentications) {\n return;\n }\n\n switch (authentications.type) {\n case 'basic': {\n const basicAuth: BasicAuth = authentications.basicAuth;\n if (basicAuth.username || basicAuth.password) {\n const encoded =\n typeof btoa === 'function'\n ? btoa((basicAuth.username || '') + ':' + (basicAuth.password || ''))\n : Buffer.from((basicAuth.username || '') + ':' + (basicAuth.password || '')).toString('base64');\n headers['Authorization'] = 'Basic ' + encoded;\n }\n break;\n }\n case 'activiti': {\n if (authentications.basicAuth.ticket) {\n headers['Authorization'] = authentications.basicAuth.ticket;\n }\n break;\n }\n case 'oauth2': {\n const oauth2: Oauth2 = authentications.oauth2;\n if (oauth2.accessToken) {\n headers['Authorization'] = 'Bearer ' + oauth2.accessToken;\n }\n break;\n }\n default:\n throw new Error('Unknown authentication type: ' + authentications.type);\n }\n }\n\n private async deserializeResponse(response: Response, returnType: string, responseType: string): Promise<any> {\n if (returnType === 'blob' || returnType === 'Blob' || responseType === 'blob' || responseType === 'Blob' || returnType === 'Binary') {\n const blob = await response.blob();\n if (isBrowser()) {\n return blob;\n }\n const arrayBuffer = await blob.arrayBuffer();\n return Buffer.from(arrayBuffer);\n }\n\n if (returnType === 'String') {\n return response.text();\n }\n\n const contentTypeHeader = response.headers.get('content-type') || '';\n if (contentTypeHeader.includes('text/html')) {\n return response.text();\n }\n\n const text = await response.text();\n if (!text) {\n return {};\n }\n try {\n const data = JSON.parse(text);\n if (returnType && Array.isArray(data)) {\n return data.map((element: any) => new (returnType as any)(element));\n }\n if (returnType && typeof returnType === 'function') {\n return new (returnType as any)(data);\n }\n return data;\n } catch {\n return text;\n }\n }\n\n private static createCSRFToken(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n }\n\n private static buildQueryString(params: Record<string, any>): string {\n if (!params) {\n return '';\n }\n const normalized = FetchHttpClient.normalizeParams(params);\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(normalized)) {\n if (Array.isArray(value)) {\n value.forEach((v: any) => searchParams.append(key, v));\n } else {\n searchParams.append(key, value);\n }\n }\n return searchParams.toString();\n }\n\n private static normalizeParams(params: Record<string, any>): Record<string, any> {\n if (!params) {\n return {};\n }\n const newParams: Record<string, any> = {};\n for (const [key, value] of Object.entries(params)) {\n if (value != null) {\n newParams[key] = FetchHttpClient.isFileParam(value) || Array.isArray(value) ? value : paramToString(value);\n }\n }\n return newParams;\n }\n\n private static isFileParam(param: any): boolean {\n if (typeof Buffer === 'function' && (param instanceof Buffer || param?.path)) {\n return true;\n }\n if (typeof Blob === 'function' && param instanceof Blob) {\n return true;\n }\n if (typeof File === 'function' && param instanceof File) {\n return true;\n }\n if (typeof File === 'object' && param instanceof File) {\n return true;\n }\n return false;\n }\n}\n"]}
package/esm5/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfresco/js-api",
3
- "version": "9.5.0-24716296101",
3
+ "version": "9.5.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "JavaScript client library for the Alfresco REST API",
6
6
  "author": "Hyland Software, Inc. and its affiliates",
@@ -15,7 +15,6 @@
15
15
  "url": "https://github.com/Alfresco/alfresco-ng2-components/issues"
16
16
  },
17
17
  "dependencies": {
18
- "superagent": "^9.0.1",
19
18
  "eventemitter3": "^5.0.1",
20
19
  "tslib": "^2.6.1"
21
20
  },
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import { EventEmitter } from 'eventemitter3';
18
- import { SuperagentHttpClient } from './superagentHttpClient';
18
+ import { FetchHttpClient } from './fetchHttpClient';
19
19
  import { paramToString } from './utils';
20
20
  import { Storage } from './storage';
21
21
  export function buildCollectionParam(param, collectionFormat) {
@@ -54,7 +54,7 @@ export class AlfrescoApiClient {
54
54
  };
55
55
  this.host = host;
56
56
  this.storage = Storage.getInstance();
57
- this.httpClient = httpClient || new SuperagentHttpClient();
57
+ this.httpClient = httpClient || new FetchHttpClient();
58
58
  }
59
59
  on(event, fn, context) {
60
60
  this.eventEmitter.on(event, fn, context);
@@ -1 +1 @@
1
- {"version":3,"file":"alfrescoApiClient.js","sourceRoot":"","sources":["alfrescoApiClient.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport { AlfrescoApiConfig } from './alfrescoApiConfig';\nimport { Authentication } from './authentication/authentication';\nimport { SuperagentHttpClient } from './superagentHttpClient';\nimport { Emitters, HttpClient, LegacyHttpClient, RequestOptions, SecurityOptions } from './api-clients/http-client.interface';\nimport { paramToString } from './utils';\nimport { Storage } from './storage';\nimport { EventEmitterInstance } from './types';\n\ndeclare const Buffer: any;\n\nexport type AlfrescoApiClientPromise<T = any> = Promise<T> & {\n on: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n off: <K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n once: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n emit: <K extends string | symbol>(event: K, ...args: any[]) => boolean;\n abort?: () => void;\n};\n\n/**\n * Builds a string representation of an array-type actual parameter, according to the given collection format.\n * @param param An array parameter.\n * @param collectionFormat The array element separator strategy.\n * @returns A string representation of the supplied collection, using the specified delimiter. Returns\n * <code>param</code> as is if <code>collectionFormat</code> is <code>multi</code>.\n */\nexport function buildCollectionParam(param: string[], collectionFormat: string): string | any[] {\n if (!param) {\n return null;\n }\n\n switch (collectionFormat) {\n case 'csv':\n return param.map(paramToString).join(',');\n case 'ssv':\n return param.map(paramToString).join(' ');\n case 'tsv':\n return param.map(paramToString).join('\\t');\n case 'pipes':\n return param.map(paramToString).join('|');\n case 'multi':\n // return the array directly as SuperAgent will handle it as expected\n return param.map(paramToString);\n default:\n throw new Error('Unknown collection format: ' + collectionFormat);\n }\n}\n\nexport class AlfrescoApiClient implements LegacyHttpClient {\n private readonly eventEmitter = new EventEmitter();\n\n storage: Storage;\n host: string;\n className: string;\n config: AlfrescoApiConfig;\n url: string;\n /**\n * The base URL against which to resolve every API call's (relative) path.\n */\n basePath = '';\n\n /**\n * The authentication methods to be included for all API calls.\n */\n authentications: Authentication = {\n basicAuth: {\n ticket: ''\n },\n type: 'basic'\n };\n /**\n * The default HTTP headers to be included for all API calls.\n */\n defaultHeaders = {};\n\n /**\n * The default HTTP timeout for all API calls.\n */\n timeout: number | { deadline?: number; response?: number } = undefined;\n\n contentTypes = {\n JSON: ['application/json']\n };\n\n httpClient: HttpClient;\n\n constructor(host?: string, httpClient?: HttpClient) {\n this.host = host;\n this.storage = Storage.getInstance();\n // fallback for backward compatibility\n this.httpClient = httpClient || new SuperagentHttpClient();\n }\n\n // EventEmitter delegation methods\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.on(event, fn, context);\n return this;\n }\n\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.off(event, fn, context);\n return this;\n }\n\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.once(event, fn, context);\n return this;\n }\n\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return this.eventEmitter.emit(event, ...args);\n }\n\n request<T = any>(options: RequestOptions): Promise<T> {\n return this.buildRequestCall(this.basePath, options, this.httpClient.request.bind(this.httpClient));\n }\n\n post<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.post.bind(this.httpClient));\n }\n\n put<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.put.bind(this.httpClient));\n }\n\n get<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.get.bind(this.httpClient));\n }\n\n delete<T = void>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall<T>(url, options, this.httpClient.delete.bind(this.httpClient));\n }\n\n callApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string,\n url?: string\n ): AlfrescoApiClientPromise<any> {\n const callApiUrl = url ?? this.getCallApiUrl({ contextRoot, path, pathParams });\n\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType,\n url\n };\n\n return this.buildRequestCall(callApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n callCustomApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string\n ): AlfrescoApiClientPromise<any> {\n const customApiUrl = AlfrescoApiClient.buildUrl(path, '', pathParams);\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType\n };\n\n return this.buildRequestCall(customApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n isCsrfEnabled(): boolean {\n if (this.config) {\n return !this.config.disableCsrf;\n } else {\n return true;\n }\n }\n\n isBpmRequest(): boolean {\n return this.className === 'ProcessAuth' || this.className === 'ProcessClient';\n }\n\n basicAuth(username: string, password: string): string {\n const str = username + ':' + password;\n\n let base64;\n\n if (typeof Buffer === 'function') {\n base64 = Buffer.from(str, 'binary').toString('base64');\n } else {\n base64 = btoa(str);\n }\n\n return 'Basic ' + base64;\n }\n\n isWithCredentials(): boolean {\n return !!this.config?.withCredentials;\n }\n\n getAlfTicket(ticket: string): string {\n const ticketParam = this.isWithCredentials() ? '&ticket=' : '&alf_ticket=';\n\n if (ticket) {\n return ticketParam + ticket;\n } else {\n const ticketConfig = this.config.ticketEcm;\n const ticketStorage = this.storage.getItem('ticket-ECM');\n\n if (ticketConfig && ticketStorage && ticketConfig !== ticketStorage) {\n this.emit('ticket_mismatch', { newTicket: ticketStorage });\n return ticketParam + ticketStorage;\n } else if (ticketConfig) {\n return ticketParam + ticketConfig;\n } else if (ticketStorage) {\n return ticketParam + ticketStorage;\n }\n }\n\n return '';\n }\n\n /**\n * Builds full URL by appending the given path to the base URL and replacing path parameter place-holders\n * with parameter values\n */\n private static buildUrl(basePath: string, path: string, pathParams: any): string {\n if (path && path !== '' && !path.match(/^\\//)) {\n path = '/' + path;\n }\n const url = basePath + path;\n\n return AlfrescoApiClient.addParamsToUrl(url, pathParams);\n }\n\n private static addParamsToUrl(path: string, pathParams: any) {\n return path.replace(/\\{([\\w-]+)}/g, (fullMatch, key) => {\n let value;\n\n if (Object.prototype.hasOwnProperty.call(pathParams, key)) {\n value = paramToString(pathParams[key]);\n } else {\n value = fullMatch;\n }\n\n return encodeURIComponent(value);\n });\n }\n\n private getCallApiUrl({ contextRoot, path, pathParams }: { contextRoot?: string; path: string; pathParams?: any }): string {\n const basePath = contextRoot ? `${this.host}/${contextRoot}` : this.basePath;\n\n return AlfrescoApiClient.buildUrl(basePath, path, pathParams);\n }\n\n private buildRequestCall<T = any>(\n url: string,\n options: RequestOptions,\n httpCall: (url: string, options: RequestOptions, security: SecurityOptions, emitters: Emitters) => Promise<T>\n ): AlfrescoApiClientPromise<T> {\n const security = this.getSecurityOptions();\n const emitters = this.getEventEmitters();\n const httpRequestOptions = this.getRequestOptionsWithAcceptAndContentType(options);\n const promise = httpCall(url, httpRequestOptions, security, emitters);\n\n return this.addPromiseListeners(promise, emitters.eventEmitter);\n }\n\n private getSecurityOptions(): SecurityOptions {\n return {\n isBpmRequest: this.isBpmRequest(),\n enableCsrf: this.isCsrfEnabled(),\n withCredentials: this.isWithCredentials(),\n authentications: this.authentications,\n defaultHeaders: this.defaultHeaders\n };\n }\n\n private getEventEmitters(): Emitters {\n const apiClientEmitter = {\n on: this.on.bind(this),\n off: this.off.bind(this),\n once: this.once.bind(this),\n emit: this.emit.bind(this)\n };\n\n return {\n apiClientEmitter,\n eventEmitter: new EventEmitter()\n };\n }\n\n private getRequestOptionsWithAcceptAndContentType(options: RequestOptions): RequestOptions {\n const contentType = AlfrescoApiClient.jsonPreferredMime(options.contentTypes);\n const accept = AlfrescoApiClient.jsonPreferredMime(options.accepts);\n\n return {\n ...options,\n contentType,\n accept\n };\n }\n\n /**\n * Chooses a content type from the given array, with JSON preferred; i.e. return JSON if included, otherwise return the first.\n * @param contentTypes content types\n * @returns The chosen content type, preferring JSON.\n */\n private static jsonPreferredMime(contentTypes: readonly string[]): string {\n if (!contentTypes?.length) {\n return 'application/json';\n }\n\n for (const item of contentTypes) {\n if (AlfrescoApiClient.isJsonMime(item)) {\n return item;\n }\n }\n return contentTypes[0];\n }\n\n /**\n * Checks whether the given content type represents JSON.<br>\n *\n * JSON content type examples:<br>\n * <ul>\n * <li>application/json</li>\n * <li>application/json; charset=UTF8</li>\n * <li>APPLICATION/JSON</li>\n * </ul>\n * @param contentType The MIME content type to check.\n * @returns <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.\n */\n private static isJsonMime(contentType: string): boolean {\n return Boolean(contentType?.match(/^application\\/json(;.*)?$/i));\n }\n\n addPromiseListeners<T = any>(promise: Promise<T>, eventEmitter: EventEmitterInstance): AlfrescoApiClientPromise<T> {\n return Object.assign(promise, {\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.on(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.once(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return eventEmitter.emit(event, ...args);\n },\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.off(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"alfrescoApiClient.js","sourceRoot":"","sources":["alfrescoApiClient.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport { AlfrescoApiConfig } from './alfrescoApiConfig';\nimport { Authentication } from './authentication/authentication';\nimport { FetchHttpClient } from './fetchHttpClient';\nimport { Emitters, HttpClient, LegacyHttpClient, RequestOptions, SecurityOptions } from './api-clients/http-client.interface';\nimport { paramToString } from './utils';\nimport { Storage } from './storage';\nimport { EventEmitterInstance } from './types';\n\ndeclare const Buffer: any;\n\nexport type AlfrescoApiClientPromise<T = any> = Promise<T> & {\n on: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n off: <K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n once: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n emit: <K extends string | symbol>(event: K, ...args: any[]) => boolean;\n abort?: () => void;\n};\n\n/**\n * Builds a string representation of an array-type actual parameter, according to the given collection format.\n * @param param An array parameter.\n * @param collectionFormat The array element separator strategy.\n * @returns A string representation of the supplied collection, using the specified delimiter. Returns\n * <code>param</code> as is if <code>collectionFormat</code> is <code>multi</code>.\n */\nexport function buildCollectionParam(param: string[], collectionFormat: string): string | any[] {\n if (!param) {\n return null;\n }\n\n switch (collectionFormat) {\n case 'csv':\n return param.map(paramToString).join(',');\n case 'ssv':\n return param.map(paramToString).join(' ');\n case 'tsv':\n return param.map(paramToString).join('\\t');\n case 'pipes':\n return param.map(paramToString).join('|');\n case 'multi':\n // return the array directly as SuperAgent will handle it as expected\n return param.map(paramToString);\n default:\n throw new Error('Unknown collection format: ' + collectionFormat);\n }\n}\n\nexport class AlfrescoApiClient implements LegacyHttpClient {\n private readonly eventEmitter = new EventEmitter();\n\n storage: Storage;\n host: string;\n className: string;\n config: AlfrescoApiConfig;\n url: string;\n /**\n * The base URL against which to resolve every API call's (relative) path.\n */\n basePath = '';\n\n /**\n * The authentication methods to be included for all API calls.\n */\n authentications: Authentication = {\n basicAuth: {\n ticket: ''\n },\n type: 'basic'\n };\n /**\n * The default HTTP headers to be included for all API calls.\n */\n defaultHeaders = {};\n\n /**\n * The default HTTP timeout for all API calls.\n */\n timeout: number | { deadline?: number; response?: number } = undefined;\n\n contentTypes = {\n JSON: ['application/json']\n };\n\n httpClient: HttpClient;\n\n constructor(host?: string, httpClient?: HttpClient) {\n this.host = host;\n this.storage = Storage.getInstance();\n // fallback for backward compatibility\n this.httpClient = httpClient || new FetchHttpClient();\n }\n\n // EventEmitter delegation methods\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.on(event, fn, context);\n return this;\n }\n\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.off(event, fn, context);\n return this;\n }\n\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.once(event, fn, context);\n return this;\n }\n\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return this.eventEmitter.emit(event, ...args);\n }\n\n request<T = any>(options: RequestOptions): Promise<T> {\n return this.buildRequestCall(this.basePath, options, this.httpClient.request.bind(this.httpClient));\n }\n\n post<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.post.bind(this.httpClient));\n }\n\n put<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.put.bind(this.httpClient));\n }\n\n get<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.get.bind(this.httpClient));\n }\n\n delete<T = void>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall<T>(url, options, this.httpClient.delete.bind(this.httpClient));\n }\n\n callApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string,\n url?: string\n ): AlfrescoApiClientPromise<any> {\n const callApiUrl = url ?? this.getCallApiUrl({ contextRoot, path, pathParams });\n\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType,\n url\n };\n\n return this.buildRequestCall(callApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n callCustomApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string\n ): AlfrescoApiClientPromise<any> {\n const customApiUrl = AlfrescoApiClient.buildUrl(path, '', pathParams);\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType\n };\n\n return this.buildRequestCall(customApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n isCsrfEnabled(): boolean {\n if (this.config) {\n return !this.config.disableCsrf;\n } else {\n return true;\n }\n }\n\n isBpmRequest(): boolean {\n return this.className === 'ProcessAuth' || this.className === 'ProcessClient';\n }\n\n basicAuth(username: string, password: string): string {\n const str = username + ':' + password;\n\n let base64;\n\n if (typeof Buffer === 'function') {\n base64 = Buffer.from(str, 'binary').toString('base64');\n } else {\n base64 = btoa(str);\n }\n\n return 'Basic ' + base64;\n }\n\n isWithCredentials(): boolean {\n return !!this.config?.withCredentials;\n }\n\n getAlfTicket(ticket: string): string {\n const ticketParam = this.isWithCredentials() ? '&ticket=' : '&alf_ticket=';\n\n if (ticket) {\n return ticketParam + ticket;\n } else {\n const ticketConfig = this.config.ticketEcm;\n const ticketStorage = this.storage.getItem('ticket-ECM');\n\n if (ticketConfig && ticketStorage && ticketConfig !== ticketStorage) {\n this.emit('ticket_mismatch', { newTicket: ticketStorage });\n return ticketParam + ticketStorage;\n } else if (ticketConfig) {\n return ticketParam + ticketConfig;\n } else if (ticketStorage) {\n return ticketParam + ticketStorage;\n }\n }\n\n return '';\n }\n\n /**\n * Builds full URL by appending the given path to the base URL and replacing path parameter place-holders\n * with parameter values\n */\n private static buildUrl(basePath: string, path: string, pathParams: any): string {\n if (path && path !== '' && !path.match(/^\\//)) {\n path = '/' + path;\n }\n const url = basePath + path;\n\n return AlfrescoApiClient.addParamsToUrl(url, pathParams);\n }\n\n private static addParamsToUrl(path: string, pathParams: any) {\n return path.replace(/\\{([\\w-]+)}/g, (fullMatch, key) => {\n let value;\n\n if (Object.prototype.hasOwnProperty.call(pathParams, key)) {\n value = paramToString(pathParams[key]);\n } else {\n value = fullMatch;\n }\n\n return encodeURIComponent(value);\n });\n }\n\n private getCallApiUrl({ contextRoot, path, pathParams }: { contextRoot?: string; path: string; pathParams?: any }): string {\n const basePath = contextRoot ? `${this.host}/${contextRoot}` : this.basePath;\n\n return AlfrescoApiClient.buildUrl(basePath, path, pathParams);\n }\n\n private buildRequestCall<T = any>(\n url: string,\n options: RequestOptions,\n httpCall: (url: string, options: RequestOptions, security: SecurityOptions, emitters: Emitters) => Promise<T>\n ): AlfrescoApiClientPromise<T> {\n const security = this.getSecurityOptions();\n const emitters = this.getEventEmitters();\n const httpRequestOptions = this.getRequestOptionsWithAcceptAndContentType(options);\n const promise = httpCall(url, httpRequestOptions, security, emitters);\n\n return this.addPromiseListeners(promise, emitters.eventEmitter);\n }\n\n private getSecurityOptions(): SecurityOptions {\n return {\n isBpmRequest: this.isBpmRequest(),\n enableCsrf: this.isCsrfEnabled(),\n withCredentials: this.isWithCredentials(),\n authentications: this.authentications,\n defaultHeaders: this.defaultHeaders\n };\n }\n\n private getEventEmitters(): Emitters {\n const apiClientEmitter = {\n on: this.on.bind(this),\n off: this.off.bind(this),\n once: this.once.bind(this),\n emit: this.emit.bind(this)\n };\n\n return {\n apiClientEmitter,\n eventEmitter: new EventEmitter()\n };\n }\n\n private getRequestOptionsWithAcceptAndContentType(options: RequestOptions): RequestOptions {\n const contentType = AlfrescoApiClient.jsonPreferredMime(options.contentTypes);\n const accept = AlfrescoApiClient.jsonPreferredMime(options.accepts);\n\n return {\n ...options,\n contentType,\n accept\n };\n }\n\n /**\n * Chooses a content type from the given array, with JSON preferred; i.e. return JSON if included, otherwise return the first.\n * @param contentTypes content types\n * @returns The chosen content type, preferring JSON.\n */\n private static jsonPreferredMime(contentTypes: readonly string[]): string {\n if (!contentTypes?.length) {\n return 'application/json';\n }\n\n for (const item of contentTypes) {\n if (AlfrescoApiClient.isJsonMime(item)) {\n return item;\n }\n }\n return contentTypes[0];\n }\n\n /**\n * Checks whether the given content type represents JSON.<br>\n *\n * JSON content type examples:<br>\n * <ul>\n * <li>application/json</li>\n * <li>application/json; charset=UTF8</li>\n * <li>APPLICATION/JSON</li>\n * </ul>\n * @param contentType The MIME content type to check.\n * @returns <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.\n */\n private static isJsonMime(contentType: string): boolean {\n return Boolean(contentType?.match(/^application\\/json(;.*)?$/i));\n }\n\n addPromiseListeners<T = any>(promise: Promise<T>, eventEmitter: EventEmitterInstance): AlfrescoApiClientPromise<T> {\n return Object.assign(promise, {\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.on(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.once(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return eventEmitter.emit(event, ...args);\n },\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.off(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n }\n });\n }\n}\n"]}