bx-rest 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/esm2022/map/im/recent.mjs +1 -1
  2. package/esm2022/public-api.mjs +2 -6
  3. package/esm2022/request/app.mjs +2 -3
  4. package/esm2022/request/bizproc/activity.mjs +1 -1
  5. package/esm2022/request/bizproc/event.mjs +1 -1
  6. package/esm2022/request/bizproc/robot.mjs +1 -1
  7. package/esm2022/request/bizproc/task.mjs +1 -1
  8. package/esm2022/request/bizproc/workflow/instance.mjs +1 -1
  9. package/esm2022/request/bizproc/workflow/template.mjs +1 -1
  10. package/esm2022/request/department.mjs +8 -3
  11. package/esm2022/request/disk/attachedObject.mjs +5 -3
  12. package/esm2022/request/disk/file.mjs +6 -3
  13. package/esm2022/request/disk/folder.mjs +16 -3
  14. package/esm2022/request/lists/element.mjs +6 -3
  15. package/esm2022/request/log/blogcomment.mjs +1 -1
  16. package/esm2022/request/log/blogpost.mjs +6 -3
  17. package/esm2022/request/server.mjs +5 -3
  18. package/esm2022/request/socialnetwork/api/contentview.mjs +5 -3
  19. package/esm2022/request/socialnetwork/api/livefeed/blogpost/important.mjs +5 -3
  20. package/esm2022/request/socialnetwork.mjs +1 -2
  21. package/esm2022/request/sonet_group.mjs +5 -3
  22. package/esm2022/request/task/elapseditem.mjs +9 -3
  23. package/esm2022/request/task/item/userfield.mjs +5 -3
  24. package/esm2022/request/task/planner.mjs +3 -3
  25. package/esm2022/request/tasks/task/result.mjs +7 -3
  26. package/esm2022/request/tasks/task.mjs +13 -3
  27. package/esm2022/request/user/userfield.mjs +5 -3
  28. package/esm2022/request/user.mjs +11 -3
  29. package/esm2022/request-navvy/disk/attachedObject.mjs +3 -3
  30. package/esm2022/request-navvy/socialnetwork/api/contentview.mjs +3 -3
  31. package/esm2022/request-navvy/task/commentitem.mjs +9 -3
  32. package/esm2022/request-navvy/task/operation/elapseditem.mjs +1 -2
  33. package/esm2022/services/http/HttpBX.mjs +21 -14
  34. package/esm2022/services/http/http.mjs +52 -53
  35. package/esm2022/services/http/sessionKey.mjs +152 -52
  36. package/fesm2022/bx-rest.mjs +525 -1044
  37. package/fesm2022/bx-rest.mjs.map +1 -1
  38. package/package.json +1 -1
  39. package/public-api.d.ts +1 -5
  40. package/request/department.d.ts +6 -1
  41. package/request/disk/attachedObject.d.ts +3 -1
  42. package/request/disk/file.d.ts +4 -1
  43. package/request/disk/folder.d.ts +14 -1
  44. package/request/lists/element.d.ts +4 -1
  45. package/request/log/blogpost.d.ts +4 -1
  46. package/request/server.d.ts +3 -1
  47. package/request/sonet_group.d.ts +3 -1
  48. package/request/task/elapseditem.d.ts +7 -1
  49. package/request/tasks/task/result.d.ts +5 -1
  50. package/request/tasks/task.d.ts +11 -1
  51. package/request/user/userfield.d.ts +3 -1
  52. package/request/user.d.ts +9 -1
  53. package/request-navvy/task/commentitem.d.ts +7 -1
  54. package/request-navvy/task/operation/elapseditem.d.ts +9 -10
  55. package/services/http/http.d.ts +1 -1
  56. package/services/http/sessionKey.d.ts +16 -2
  57. package/esm2022/typification/base/methods.mjs +0 -700
  58. package/typification/base/methods.d.ts +0 -6
@@ -1,7 +1,7 @@
1
1
  import { from, throwError } from 'rxjs';
2
2
  import { switchMap } from 'rxjs/operators';
3
3
  import axios from 'axios';
4
- import SessionKeyServices from '../../services/http/sessionKey';
4
+ import { SessionKeyServices } from '../../services/http/sessionKey';
5
5
  import clone from 'just-clone';
6
6
  import { BaseHttp } from './base/base';
7
7
  import { prepareBaseAddress } from '../base';
@@ -13,65 +13,64 @@ export class HttpServices extends BaseHttp {
13
13
  }
14
14
  httpPost(url, params = {}, settings = this.defSettings) {
15
15
  const auth = this.session.getAuthParams();
16
- if (auth) {
17
- const paramsClone = clone(params);
16
+ const checkIsOn = this.session.getCheckAuthParamsIsOn();
17
+ const paramsClone = clone(params);
18
+ if (checkIsOn) {
19
+ if (!auth) {
20
+ return throwError(() => this.session.getAuthError('post'));
21
+ }
18
22
  paramsClone[this.session.getKeyAuth()] = auth;
19
- return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
20
- if (!baseUrl) {
21
- return throwError(() => new Error('get base url error'));
22
- }
23
- const fullUrl = prepareBaseAddress(baseUrl) + url;
24
- if (this.session.getKeyAuth() === 'sessid') {
25
- const body = this.getHttpParamsPost(paramsClone, new FormData(), [], settings);
26
- // Преобразуем параметры в формат x-www-form-urlencoded
27
- const urlEncodedBody = new URLSearchParams();
28
- Object.keys(body).forEach((key) => {
29
- const value = paramsClone[key];
30
- // если value — объект или массив, Bitrix ожидает fields[key] или array[] формат
31
- if (typeof value === 'object' && value !== null) {
32
- for (const subKey in value) {
33
- if (Object.prototype.hasOwnProperty.call(value, subKey)) {
34
- urlEncodedBody.append(`${key}[${subKey}]`, value[subKey]);
35
- }
23
+ }
24
+ return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
25
+ if (!baseUrl) {
26
+ return throwError(() => this.session.getBaseUrlError('post'));
27
+ }
28
+ const fullUrl = prepareBaseAddress(baseUrl) + url;
29
+ if (this.session.getKeyAuth() === 'sessid') {
30
+ const body = this.getHttpParamsPost(paramsClone, new FormData(), [], settings);
31
+ const urlEncodedBody = new URLSearchParams();
32
+ Object.keys(body).forEach((key) => {
33
+ const value = paramsClone[key];
34
+ if (typeof value === 'object' && value !== null) {
35
+ for (const subKey in value) {
36
+ if (Object.prototype.hasOwnProperty.call(value, subKey)) {
37
+ urlEncodedBody.append(`${key}[${subKey}]`, value[subKey]);
36
38
  }
37
39
  }
38
- else {
39
- urlEncodedBody.append(key, value);
40
- }
41
- });
42
- return from(this.axiosInstance.post(fullUrl, urlEncodedBody.toString(), {
43
- headers: {
44
- 'Content-Type': 'application/x-www-form-urlencoded',
45
- },
46
- }).then((response) => response.data));
47
- }
48
- const body = this.getHttpParamsPost(paramsClone, new FormData(), [], settings);
49
- return from(this.axiosInstance.post(fullUrl, body).then((response) => response.data));
50
- }));
51
- }
52
- else {
53
- return throwError(() => new Error('auth session not get (post)'));
54
- }
40
+ }
41
+ else {
42
+ urlEncodedBody.append(key, value);
43
+ }
44
+ });
45
+ return from(this.axiosInstance.post(fullUrl, urlEncodedBody.toString(), {
46
+ headers: {
47
+ 'Content-Type': 'application/x-www-form-urlencoded',
48
+ },
49
+ }).then((response) => response.data));
50
+ }
51
+ const body = this.getHttpParamsPost(paramsClone, new FormData(), [], settings);
52
+ return from(this.axiosInstance.post(fullUrl, body).then((response) => response.data));
53
+ }));
55
54
  }
56
- // Мб вообще не работает
57
55
  httpGet(url, params = {}) {
58
56
  const auth = this.session.getAuthParams();
59
- if (auth) {
60
- const paramsClone = clone(params);
57
+ const checkIsOn = this.session.getCheckAuthParamsIsOn();
58
+ const paramsClone = clone(params);
59
+ if (checkIsOn) {
60
+ if (!auth) {
61
+ return throwError(() => this.session.getAuthError('get'));
62
+ }
61
63
  paramsClone[this.session.getKeyAuth()] = auth;
62
- return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
63
- if (!baseUrl) {
64
- return throwError(() => new Error('get base url error'));
65
- }
66
- const fullUrl = prepareBaseAddress(baseUrl) + url;
67
- const queryString = new URLSearchParams(paramsClone).toString();
68
- const finalUrl = `${fullUrl}?${queryString}`;
69
- return from(this.axiosInstance.get(finalUrl).then((response) => response.data));
70
- }));
71
- }
72
- else {
73
- return throwError(() => new Error('auth session not get (get)'));
74
64
  }
65
+ return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
66
+ if (!baseUrl) {
67
+ return throwError(() => this.session.getBaseUrlError('get'));
68
+ }
69
+ const fullUrl = prepareBaseAddress(baseUrl) + url;
70
+ const queryString = new URLSearchParams(paramsClone).toString();
71
+ const finalUrl = `${fullUrl}?${queryString}`;
72
+ return from(this.axiosInstance.get(finalUrl).then((response) => response.data));
73
+ }));
75
74
  }
76
75
  }
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxLQUF3QixNQUFNLE9BQU8sQ0FBQTtBQUM1QyxPQUFPLGtCQUFrQixNQUFNLGdDQUFnQyxDQUFBO0FBQy9ELE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUU5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUU1QyxNQUFNLE9BQU8sWUFBYSxTQUFRLFFBQVE7SUFLeEM7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUhPLFlBQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUE7UUFJaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDckMsQ0FBQztJQUVRLFFBQVEsQ0FDZixHQUFXLEVBQ1gsU0FBYyxFQUFFLEVBQ2hCLFdBQStCLElBQUksQ0FBQyxXQUFXO1FBRS9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDekMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNqQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQTtZQUU3QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUNuQyxTQUFTLENBQUMsQ0FBQyxP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SSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQ25DLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2IsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFBO2dCQUMxRCxDQUFDO2dCQUVELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQTtnQkFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7Z0JBQy9ELE1BQU0sUUFBUSxHQUFHLEdBQUcsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFBO2dCQUU1QyxPQUFPLElBQUksQ0FDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdEUsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUNILENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQTtRQUNsRSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSB9IGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgU2Vzc2lvbktleVNlcnZpY2VzIGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleSdcclxuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnXHJcbmltcG9ydCB7IGlIdHRwUGFyYW1TZXR0aW5ncyB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L3NldHRpbmdzJ1xyXG5pbXBvcnQgeyBCYXNlSHR0cCB9IGZyb20gJy4vYmFzZS9iYXNlJ1xyXG5pbXBvcnQgeyBwcmVwYXJlQmFzZUFkZHJlc3MgfSBmcm9tICcuLi9iYXNlJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlcyBleHRlbmRzIEJhc2VIdHRwIHtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF4aW9zSW5zdGFuY2U6IEF4aW9zSW5zdGFuY2VcclxuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uS2V5U2VydmljZXMoKVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBodHRwUG9zdDxUPihcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgcGFyYW1zOiBhbnkgPSB7fSxcclxuICAgIHNldHRpbmdzOiBpSHR0cFBhcmFtU2V0dGluZ3MgPSB0aGlzLmRlZlNldHRpbmdzXHJcbiAgKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XHJcbiAgICBjb25zdCBhdXRoID0gdGhpcy5zZXNzaW9uLmdldEF1dGhQYXJhbXMoKVxyXG4gICAgaWYgKGF1dGgpIHtcclxuICAgICAgY29uc3QgcGFyYW1zQ2xvbmUgPSBjbG9uZShwYXJhbXMpXHJcbiAgICAgIHBhcmFtc0Nsb25lW3RoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKCldID0gYXV0aFxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsKCkucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKGJhc2VVcmwpID0+IHtcclxuICAgICAgICAgIGlmICghYmFzZVVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2dldCBiYXNlIHVybCBlcnJvcicpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBwcmVwYXJlQmFzZUFkZHJlc3MoYmFzZVVybCkgKyB1cmxcclxuICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpID09PSAnc2Vzc2lkJykge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRIdHRwUGFyYW1zUG9zdChwYXJhbXNDbG9uZSwgbmV3IEZvcm1EYXRhKCksIFtdLCBzZXR0aW5ncylcclxuICAgICAgICAgICAgLy8g0J/RgNC10L7QsdGA0LDQt9GD0LXQvCDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg0YTQvtGA0LzQsNGCIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4gICAgICAgICAgICBjb25zdCB1cmxFbmNvZGVkQm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoYm9keSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXNDbG9uZVtrZXldO1xyXG5cclxuICAgICAgICAgICAgICAvLyDQtdGB0LvQuCB2YWx1ZSDigJQg0L7QsdGK0LXQutGCINC40LvQuCDQvNCw0YHRgdC40LIsIEJpdHJpeCDQvtC20LjQtNCw0LXRgiBmaWVsZHNba2V5XSDQuNC70LggYXJyYXlbXSDRhNC+0YDQvNCw0YJcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJLZXkgaW4gdmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN1YktleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmxFbmNvZGVkQm9keS5hcHBlbmQoYCR7a2V5fVske3N1YktleX1dYCwgdmFsdWVbc3ViS2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXJsRW5jb2RlZEJvZHkuYXBwZW5kKGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UucG9zdDxUPihmdWxsVXJsLCB1cmxFbmNvZGVkQm9keS50b1N0cmluZygpLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRIdHRwUGFyYW1zUG9zdChwYXJhbXNDbG9uZSwgbmV3IEZvcm1EYXRhKCksIFtdLCBzZXR0aW5ncylcclxuICAgICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UucG9zdDxUPihmdWxsVXJsLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YSlcclxuICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2F1dGggc2Vzc2lvbiBub3QgZ2V0IChwb3N0KScpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g0JzQsSDQstC+0L7QsdGJ0LUg0L3QtSDRgNCw0LHQvtGC0LDQtdGCXHJcbiAgb3ZlcnJpZGUgaHR0cEdldDxUPih1cmw6IHN0cmluZywgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgY29uc3QgYXV0aCA9IHRoaXMuc2Vzc2lvbi5nZXRBdXRoUGFyYW1zKClcclxuICAgIGlmIChhdXRoKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxyXG4gICAgICBwYXJhbXNDbG9uZVt0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXSA9IGF1dGhcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0QmFzZVVybCgpLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChiYXNlVXJsKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWJhc2VVcmwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdnZXQgYmFzZSB1cmwgZXJyb3InKSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBmdWxsVXJsID0gcHJlcGFyZUJhc2VBZGRyZXNzKGJhc2VVcmwpICsgdXJsXHJcbiAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zQ2xvbmUpLnRvU3RyaW5nKClcclxuICAgICAgICAgIGNvbnN0IGZpbmFsVXJsID0gYCR7ZnVsbFVybH0/JHtxdWVyeVN0cmluZ31gXHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQ8VD4oZmluYWxVcmwpLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignYXV0aCBzZXNzaW9uIG5vdCBnZXQgKGdldCknKSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxLQUF3QixNQUFNLE9BQU8sQ0FBQTtBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNuRSxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFFOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFFNUMsTUFBTSxPQUFPLFlBQWEsU0FBUSxRQUFRO0lBS3hDO1FBQ0UsS0FBSyxFQUFFLENBQUE7UUFITyxZQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFBO1FBSWhELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3JDLENBQUM7SUFFUSxRQUFRLENBQ2YsR0FBVyxFQUNYLFNBQWMsRUFBRSxFQUNoQixXQUErQixJQUFJLENBQUMsV0FBVztRQUUvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUN2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFakMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJ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LENBQUMsTUFBTSxDQUFDLENBQUE7UUFFakMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQzNELENBQUM7WUFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUMvQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDOUQsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQTtZQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUMvRCxNQUFNLFFBQVEsR0FBRyxHQUFHLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQTtZQUU1QyxPQUFPLElBQUksQ0FDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdEUsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UgfSBmcm9tICdheGlvcydcbmltcG9ydCB7IFNlc3Npb25LZXlTZXJ2aWNlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleSdcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xuaW1wb3J0IHsgaUh0dHBQYXJhbVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3Qvc2V0dGluZ3MnXG5pbXBvcnQgeyBCYXNlSHR0cCB9IGZyb20gJy4vYmFzZS9iYXNlJ1xuaW1wb3J0IHsgcHJlcGFyZUJhc2VBZGRyZXNzIH0gZnJvbSAnLi4vYmFzZSdcblxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlcyBleHRlbmRzIEJhc2VIdHRwIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXhpb3NJbnN0YW5jZTogQXhpb3NJbnN0YW5jZVxuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uS2V5U2VydmljZXMoKVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKVxuICB9XG5cbiAgb3ZlcnJpZGUgaHR0cFBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBhbnkgPSB7fSxcbiAgICBzZXR0aW5nczogaUh0dHBQYXJhbVNldHRpbmdzID0gdGhpcy5kZWZTZXR0aW5nc1xuICApOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhdXRoID0gdGhpcy5zZXNzaW9uLmdldEF1dGhQYXJhbXMoKVxuICAgIGNvbnN0IGNoZWNrSXNPbiA9IHRoaXMuc2Vzc2lvbi5nZXRDaGVja0F1dGhQYXJhbXNJc09uKClcbiAgICBjb25zdCBwYXJhbXNDbG9uZSA9IGNsb25lKHBhcmFtcylcblxuICAgIGlmIChjaGVja0lzT24pIHtcbiAgICAgIGlmICghYXV0aCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLnNlc3Npb24uZ2V0QXV0aEVycm9yKCdwb3N0JykpXG4gICAgICB9XG5cbiAgICAgIHBhcmFtc0Nsb25lW3RoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKCldID0gYXV0aFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0QmFzZVVybCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJhc2VVcmwpID0+IHtcbiAgICAgICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmxFcnJvcigncG9zdCcpKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnVsbFVybCA9IHByZXBhcmVCYXNlQWRkcmVzcyhiYXNlVXJsKSArIHVybFxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdldEtleUF1dGgoKSA9PT0gJ3Nlc3NpZCcpIHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRIdHRwUGFyYW1zUG9zdChwYXJhbXNDbG9uZSwgbmV3IEZvcm1EYXRhKCksIFtdLCBzZXR0aW5ncylcbiAgICAgICAgICBjb25zdCB1cmxFbmNvZGVkQm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuXG4gICAgICAgICAgT2JqZWN0LmtleXMoYm9keSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc0Nsb25lW2tleV1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJLZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzdWJLZXkpKSB7XG4gICAgICAgICAgICAgICAgICB1cmxFbmNvZGVkQm9keS5hcHBlbmQoYCR7a2V5fVske3N1YktleX1dYCwgdmFsdWVbc3ViS2V5XSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVybEVuY29kZWRCb2R5LmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5wb3N0PFQ+KGZ1bGxVcmwsIHVybEVuY29kZWRCb2R5LnRvU3RyaW5nKCksIHtcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldEh0dHBQYXJhbXNQb3N0KHBhcmFtc0Nsb25lLCBuZXcgRm9ybURhdGEoKSwgW10sIHNldHRpbmdzKVxuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UucG9zdDxUPihmdWxsVXJsLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBvdmVycmlkZSBodHRwR2V0PFQ+KHVybDogc3RyaW5nLCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYXV0aCA9IHRoaXMuc2Vzc2lvbi5nZXRBdXRoUGFyYW1zKClcbiAgICBjb25zdCBjaGVja0lzT24gPSB0aGlzLnNlc3Npb24uZ2V0Q2hlY2tBdXRoUGFyYW1zSXNPbigpXG4gICAgY29uc3QgcGFyYW1zQ2xvbmUgPSBjbG9uZShwYXJhbXMpXG5cbiAgICBpZiAoY2hlY2tJc09uKSB7XG4gICAgICBpZiAoIWF1dGgpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gdGhpcy5zZXNzaW9uLmdldEF1dGhFcnJvcignZ2V0JykpXG4gICAgICB9XG5cbiAgICAgIHBhcmFtc0Nsb25lW3RoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKCldID0gYXV0aFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0QmFzZVVybCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJhc2VVcmwpID0+IHtcbiAgICAgICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmxFcnJvcignZ2V0JykpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsVXJsID0gcHJlcGFyZUJhc2VBZGRyZXNzKGJhc2VVcmwpICsgdXJsXG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXNDbG9uZSkudG9TdHJpbmcoKVxuICAgICAgICBjb25zdCBmaW5hbFVybCA9IGAke2Z1bGxVcmx9PyR7cXVlcnlTdHJpbmd9YFxuXG4gICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQ8VD4oZmluYWxVcmwpLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcbiAgfVxufVxuIl19
@@ -4,48 +4,21 @@ import { prepareBaseAddress } from '../base';
4
4
  import { LocalStorageServices as LocalStorage } from '../../services/vanilla/localStorage';
5
5
  import { BXRestSettings, DEFAULT_BX_REST_SETTINGS } from '../../settings';
6
6
  import { SessionStorage } from '../vanilla/sessionStorage';
7
- export default class SessionKeyServices {
7
+ export class SessionKeyError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = 'SessionKeyError';
11
+ }
12
+ }
13
+ export class SessionKeyServices {
8
14
  constructor() {
9
15
  this.authHave = false;
10
16
  this.subscribe = {
11
17
  authData: new Subscription()
12
18
  };
13
19
  this.BX_REST_SETTINGS = BXRestSettings.date;
14
- const authData = SessionStorage.getItem(this.constructor.name);
15
- if ((authData && !authData.access_token.length) || !authData) {
16
- // получаем токен по собственным каналом (в битриксе приложение trace:apps.trace)
17
- window.addEventListener('message', (event) => {
18
- if (event.origin !== window.origin) { // проверяем что это не наше сообщение (с текущего приложения)
19
- if (event.data && event.data.param) {
20
- if (typeof event.data.param === 'string') {
21
- event.data.param = JSON.parse(event.data.param);
22
- }
23
- if (event.data.param.access_token) {
24
- const param = event.data.param;
25
- const save = {
26
- access_token: (param.access_token) ? param.access_token : undefined,
27
- client_endpoint: (param.client_endpoint) ? param.client_endpoint : undefined,
28
- domain: (param.domain) ? param.domain : undefined,
29
- expires: (param.expires) ? param.expires : undefined,
30
- expires_in: (param.expires_in) ? param.expires_in : undefined,
31
- member_id: (param.member_id) ? param.member_id : undefined,
32
- refresh_token: (param.refresh_token) ? param.refresh_token : undefined,
33
- scope: (param.scope) ? param.scope : undefined,
34
- server_endpoint: (param.server_endpoint) ? param.server_endpoint : undefined,
35
- status: (param.status) ? param.status : undefined,
36
- user_id: (param.user_id) ? param.user_id : undefined,
37
- type: (param.type) ? param.type : undefined,
38
- };
39
- if (Object.keys(save).length && save.access_token) {
40
- SessionStorage.setItem(this.constructor.name, save);
41
- this.subscribeAll();
42
- }
43
- }
44
- }
45
- }
46
- });
47
- }
48
- else if (this.getAuth().length) {
20
+ const authData = this.getSessionItem(this.constructor.name);
21
+ if (this.getAuth().length > 0) {
49
22
  this.authHave = true;
50
23
  }
51
24
  this.authData = authData;
@@ -56,18 +29,20 @@ export default class SessionKeyServices {
56
29
  getAuth() {
57
30
  switch (this.BX_REST_SETTINGS.auth.key) {
58
31
  case 'auth':
59
- return Cookies.get('auth');
60
- default:
61
- if (window.BX && window.BX.bitrix_sessid()) { // чё за хуйня?
62
- return window.BX.bitrix_sessid();
32
+ return this.getCookie('auth');
33
+ default: {
34
+ const bxSessid = this.getBxSessid();
35
+ if (bxSessid) {
36
+ return bxSessid;
63
37
  }
64
- else if (this.getSessid().length) {
38
+ else if (this.getSessid().length > 0) {
65
39
  const str = this.getSessid();
66
40
  return (str) ? str : '';
67
41
  }
68
42
  else {
69
- return Cookies.get('auth');
43
+ return this.getCookie('auth');
70
44
  }
45
+ }
71
46
  }
72
47
  }
73
48
  getKeyAuth() {
@@ -79,33 +54,56 @@ export default class SessionKeyServices {
79
54
  }
80
55
  }
81
56
  getSessid() {
82
- const check = new URLSearchParams(document.location.search).get('sessid');
57
+ const check = this.getSearchParam('sessid');
83
58
  if (check) {
84
- LocalStorage.set('sessid', check);
59
+ this.setLocalStorage('sessid', check);
85
60
  return check;
86
61
  }
87
- else if (LocalStorage.get('sessid')) {
88
- return LocalStorage.get('sessid');
62
+ else if (this.getLocalStorage('sessid')) {
63
+ return this.getLocalStorage('sessid') || '';
89
64
  }
90
65
  return '';
91
66
  }
92
67
  getAuthParams() {
93
68
  const source = this.BX_REST_SETTINGS.auth.source;
94
69
  if (typeof source === 'function') {
95
- return source();
70
+ try {
71
+ return this.normalizeValue(source());
72
+ }
73
+ catch {
74
+ return undefined;
75
+ }
96
76
  }
97
77
  switch (source) {
98
78
  case 'cookies':
99
- return this.getAuth();
79
+ return this.normalizeValue(this.getAuth());
100
80
  case 'localStorage':
101
- return LocalStorage.get(this.BX_REST_SETTINGS.auth.key);
81
+ return this.normalizeValue(this.getLocalStorage(this.BX_REST_SETTINGS.auth.key));
82
+ case 'off':
83
+ return undefined;
102
84
  default:
103
- return (this.authData) ? this.authData.access_token : undefined;
85
+ return this.normalizeValue((this.authData) ? this.authData.access_token : undefined);
104
86
  }
105
87
  }
106
88
  getCheckAuthParamsIsOn() {
107
89
  return this.BX_REST_SETTINGS.auth.source !== 'off';
108
90
  }
91
+ getAuthError(operation = 'request') {
92
+ const source = this.BX_REST_SETTINGS.auth.source;
93
+ const key = this.getKeyAuth();
94
+ if (!this.getCheckAuthParamsIsOn()) {
95
+ return new SessionKeyError(`Authorization is disabled for ${operation}: BXRestSettings.auth.source is "off".`);
96
+ }
97
+ const sourceName = (typeof source === 'function') ? 'custom function' : source;
98
+ const checked = this.getAuthCheckedPlaces();
99
+ return new SessionKeyError([
100
+ `Authorization token was not found for ${operation}.`,
101
+ `auth.source: ${sourceName}.`,
102
+ `auth.key: ${key}.`,
103
+ `Checked: ${checked.join(', ')}.`,
104
+ 'Set BXRestSettings.auth.source/key correctly or save a valid token before making the request.'
105
+ ].join(' '));
106
+ }
109
107
  getBaseUrl() {
110
108
  const additional_part = (this.BX_REST_SETTINGS.urls.additional_part || this.BX_REST_SETTINGS.urls.additional_part === '')
111
109
  ? this.BX_REST_SETTINGS.urls.additional_part
@@ -113,8 +111,110 @@ export default class SessionKeyServices {
113
111
  if (this.BX_REST_SETTINGS.urls.source === 'string') {
114
112
  return of(prepareBaseAddress(this.BX_REST_SETTINGS.urls.key, additional_part));
115
113
  }
116
- const str = localStorage.getItem(this.BX_REST_SETTINGS.urls.key);
114
+ const str = this.getLocalStorage(this.BX_REST_SETTINGS.urls.key);
117
115
  return of(prepareBaseAddress((str) ? str : '', additional_part));
118
116
  }
117
+ getBaseUrlError(operation = 'request') {
118
+ return new SessionKeyError([
119
+ `Base URL was not resolved for ${operation}.`,
120
+ `urls.source: ${this.BX_REST_SETTINGS.urls.source}.`,
121
+ `urls.key: ${this.BX_REST_SETTINGS.urls.key || '(empty)'}.`,
122
+ 'Set BXRestSettings.urls.key to a URL or to a localStorage key containing the portal URL.'
123
+ ].join(' '));
124
+ }
125
+ getAuthCheckedPlaces() {
126
+ const source = this.BX_REST_SETTINGS.auth.source;
127
+ if (typeof source === 'function') {
128
+ return ['BXRestSettings.auth.source()'];
129
+ }
130
+ switch (source) {
131
+ case 'cookies':
132
+ return this.BX_REST_SETTINGS.auth.key === 'auth'
133
+ ? ['cookie "auth"']
134
+ : ['window.BX.bitrix_sessid()', 'URL query "sessid"', 'localStorage "sessid"', 'cookie "auth"'];
135
+ case 'localStorage':
136
+ return [`localStorage "${this.BX_REST_SETTINGS.auth.key}"`];
137
+ case 'off':
138
+ return ['authorization lookup skipped'];
139
+ default:
140
+ return [`sessionStorage "${this.constructor.name}" access_token`];
141
+ }
142
+ }
143
+ getBxSessid() {
144
+ const bx = (typeof window !== 'undefined') ? window.BX : undefined;
145
+ if (!bx || typeof bx.bitrix_sessid !== 'function') {
146
+ return '';
147
+ }
148
+ try {
149
+ return this.normalizeValue(bx.bitrix_sessid()) || '';
150
+ }
151
+ catch {
152
+ return '';
153
+ }
154
+ }
155
+ getSearchParam(name) {
156
+ if (typeof document === 'undefined') {
157
+ return undefined;
158
+ }
159
+ try {
160
+ return new URLSearchParams(document.location.search).get(name) || undefined;
161
+ }
162
+ catch {
163
+ return undefined;
164
+ }
165
+ }
166
+ getCookie(name) {
167
+ if (typeof document === 'undefined') {
168
+ return '';
169
+ }
170
+ try {
171
+ return Cookies.get(name);
172
+ }
173
+ catch {
174
+ return '';
175
+ }
176
+ }
177
+ getLocalStorage(name) {
178
+ return this.getStorageItem('localStorage', name);
179
+ }
180
+ setLocalStorage(name, value) {
181
+ if (typeof localStorage === 'undefined') {
182
+ return;
183
+ }
184
+ try {
185
+ LocalStorage.set(name, value);
186
+ }
187
+ catch {
188
+ return;
189
+ }
190
+ }
191
+ getSessionItem(name) {
192
+ if (typeof sessionStorage === 'undefined') {
193
+ return undefined;
194
+ }
195
+ try {
196
+ return SessionStorage.getItem(name);
197
+ }
198
+ catch {
199
+ return undefined;
200
+ }
201
+ }
202
+ getStorageItem(kind, name) {
203
+ const storage = kind === 'localStorage'
204
+ ? (typeof localStorage !== 'undefined' ? localStorage : undefined)
205
+ : (typeof sessionStorage !== 'undefined' ? sessionStorage : undefined);
206
+ if (!storage) {
207
+ return null;
208
+ }
209
+ try {
210
+ return storage.getItem(name);
211
+ }
212
+ catch {
213
+ return null;
214
+ }
215
+ }
216
+ normalizeValue(value) {
217
+ return (value && value.length > 0) ? value : undefined;
218
+ }
119
219
  }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixJQUFJLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFJMUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBa0I7SUFVckM7UUFSQSxhQUFRLEdBQUcsS0FBSyxDQUFBO1FBRWhCLGNBQVMsR0FBRztZQUNWLFFBQVEsRUFBRSxJQUFJLFlBQVksRUFBRTtTQUM3QixDQUFBO1FBRWdCLHFCQUFnQixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUE7UUFJckQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBYyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNFLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0QsaUZBQWlGO1lBQ2pGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFtQixFQUFFLEVBQUU7Z0JBQ3pELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyw4REFBOEQ7b0JBQ2xH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QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUM7WUFDekgsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZTtZQUMxQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQTtRQUVqRCxJQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBQyxDQUFDO1lBQ2pELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUE7UUFDaEYsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVoRSxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb29raWVzIGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbmlsbGEv0YFvb2tpZXMnXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBwcmVwYXJlQmFzZUFkZHJlc3MgfSBmcm9tICcuLi9iYXNlJ1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlcyBhcyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YW5pbGxhL2xvY2FsU3RvcmFnZSdcclxuaW1wb3J0IHsgQlhSZXN0U2V0dGluZ3MsIERFRkFVTFRfQlhfUkVTVF9TRVRUSU5HUyB9IGZyb20gJy4uLy4uL3NldHRpbmdzJ1xyXG5pbXBvcnQgeyBpQlhSZXN0QXV0aCB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9hdXRoL3NhdmUnXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSAnLi4vdmFuaWxsYS9zZXNzaW9uU3RvcmFnZSdcclxuXHJcbnR5cGUgSUtleUF1dGggPSAnc2Vzc2lkJyB8ICdhdXRoJyB8IHN0cmluZ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvbktleVNlcnZpY2VzIHtcclxuXHJcbiAgYXV0aEhhdmUgPSBmYWxzZVxyXG4gIGF1dGhEYXRhOiBpQlhSZXN0QXV0aCB8IHVuZGVmaW5lZFxyXG4gIHN1YnNjcmliZSA9IHtcclxuICAgIGF1dGhEYXRhOiBuZXcgU3Vic2NyaXB0aW9uKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQlhfUkVTVF9TRVRUSU5HUyA9IEJYUmVzdFNldHRpbmdzLmRhdGVcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgKSB7XHJcbiAgICBjb25zdCBhdXRoRGF0YSA9IFNlc3Npb25TdG9yYWdlLmdldEl0ZW08aUJYUmVzdEF1dGg+KHRoaXMuY29uc3RydWN0b3IubmFtZSlcclxuICAgIGlmICgoYXV0aERhdGEgJiYgIWF1dGhEYXRhLmFjY2Vzc190b2tlbi5sZW5ndGgpIHx8ICFhdXRoRGF0YSkge1xyXG4gICAgICAvLyDQv9C+0LvRg9GH0LDQtdC8INGC0L7QutC10L0g0L/QviDRgdC+0LHRgdGC0LLQtdC90L3Ri9C8INC60LDQvdCw0LvQvtC8ICjQsiDQsdC40YLRgNC40LrRgdC1INC/0YDQuNC70L7QttC10L3QuNC1IHRyYWNlOmFwcHMudHJhY2UpXHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cub3JpZ2luKSB7IC8vINC/0YDQvtCy0LXRgNGP0LXQvCDRh9GC0L4g0Y3RgtC+INC90LUg0L3QsNGI0LUg0YHQvtC+0LHRidC10L3QuNC1ICjRgSDRgtC10LrRg9GJ0LXQs9C+INC/0YDQuNC70L7QttC10L3QuNGPKVxyXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5wYXJhbSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEucGFyYW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgZXZlbnQuZGF0YS5wYXJhbSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YS5wYXJhbSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEucGFyYW0uYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBldmVudC5kYXRhLnBhcmFtXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2F2ZSA9IHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogKHBhcmFtLmFjY2Vzc190b2tlbikgPyBwYXJhbS5hY2Nlc3NfdG9rZW4gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBjbGllbnRfZW5kcG9pbnQ6IChwYXJhbS5jbGllbnRfZW5kcG9pbnQpID8gcGFyYW0uY2xpZW50X2VuZHBvaW50IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZG9tYWluOiAocGFyYW0uZG9tYWluKSA/IHBhcmFtLmRvbWFpbiA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGV4cGlyZXM6IChwYXJhbS5leHBpcmVzKSA/IHBhcmFtLmV4cGlyZXMgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBleHBpcmVzX2luOiAocGFyYW0uZXhwaXJlc19pbikgPyBwYXJhbS5leHBpcmVzX2luIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgbWVtYmVyX2lkOiAocGFyYW0ubWVtYmVyX2lkKSA/IHBhcmFtLm1lbWJlcl9pZCA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IChwYXJhbS5yZWZyZXNoX3Rva2VuKSA/IHBhcmFtLnJlZnJlc2hfdG9rZW4gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogKHBhcmFtLnNjb3BlKSA/IHBhcmFtLnNjb3BlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgc2VydmVyX2VuZHBvaW50OiAocGFyYW0uc2VydmVyX2VuZHBvaW50KSA/IHBhcmFtLnNlcnZlcl9lbmRwb2ludCA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogKHBhcmFtLnN0YXR1cykgPyBwYXJhbS5zdGF0dXMgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB1c2VyX2lkOiAocGFyYW0udXNlcl9pZCkgPyBwYXJhbS51c2VyX2lkIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogKHBhcmFtLnR5cGUpID8gcGFyYW0udHlwZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzYXZlKS5sZW5ndGggJiYgc2F2ZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIFNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5jb25zdHJ1Y3Rvci5uYW1lLCBzYXZlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVBbGwoKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nZXRBdXRoKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYXV0aEhhdmUgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRoRGF0YSA9IGF1dGhEYXRhXHJcblxyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlQWxsKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmUuYXV0aERhdGEudW5zdWJzY3JpYmUoKVxyXG4gIH1cclxuXHJcbiAgZ2V0QXV0aCgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXkpIHtcclxuICAgICAgY2FzZSAnYXV0aCc6XHJcbiAgICAgICAgcmV0dXJuIENvb2tpZXMuZ2V0KCdhdXRoJylcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLkJYICYmICh3aW5kb3cgYXMgYW55KS5CWC5iaXRyaXhfc2Vzc2lkKCkpIHsgLy8g0YfRkSDQt9CwINGF0YPQudC90Y8/XHJcbiAgICAgICAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpLkJYLmJpdHJpeF9zZXNzaWQoKVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRTZXNzaWQoKS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHN0ciA9IHRoaXMuZ2V0U2Vzc2lkKClcclxuICAgICAgICAgIHJldHVybiAoc3RyKSA/IHN0ciA6ICcnXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBDb29raWVzLmdldCgnYXV0aCcpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0S2V5QXV0aCgpOiBJS2V5QXV0aCB7XHJcbiAgICBpZiAodGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGgua2V5Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGgua2V5XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2F1dGgnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZXNzaWQoKSB7XHJcbiAgICBjb25zdCBjaGVjayA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoKS5nZXQoJ3Nlc3NpZCcpXHJcbiAgICBpZiAoY2hlY2spIHtcclxuICAgICAgTG9jYWxTdG9yYWdlLnNldCgnc2Vzc2lkJywgY2hlY2spXHJcbiAgICAgIHJldHVybiBjaGVja1xyXG4gICAgfSBlbHNlIGlmIChMb2NhbFN0b3JhZ2UuZ2V0KCdzZXNzaWQnKSkge1xyXG4gICAgICByZXR1cm4gTG9jYWxTdG9yYWdlLmdldCgnc2Vzc2lkJylcclxuICAgIH1cclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgZ2V0QXV0aFBhcmFtcygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGguc291cmNlXHJcblxyXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZSgpXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChzb3VyY2UpIHtcclxuICAgICAgY2FzZSAnY29va2llcyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXV0aCgpXHJcbiAgICAgIGNhc2UgJ2xvY2FsU3RvcmFnZSc6XHJcbiAgICAgICAgcmV0dXJuIExvY2FsU3RvcmFnZS5nZXQodGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGgua2V5KVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAodGhpcy5hdXRoRGF0YSkgPyB0aGlzLmF1dGhEYXRhLmFjY2Vzc190b2tlbiA6IHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tBdXRoUGFyYW1zSXNPbigpe1xyXG4gICAgcmV0dXJuIHRoaXMuQlhfUkVTVF9TRVRUSU5HUy5hdXRoLnNvdXJjZSAhPT0gJ29mZidcclxuICB9XHJcblxyXG4gIGdldEJhc2VVcmwoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcclxuICAgIGNvbnN0IGFkZGl0aW9uYWxfcGFydCA9ICh0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5hZGRpdGlvbmFsX3BhcnQgfHwgdGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0ID09PSAnJylcclxuICAgID8gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0XHJcbiAgICAgIDogREVGQVVMVF9CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0XHJcblxyXG4gICAgaWYodGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuc291cmNlID09PSAnc3RyaW5nJyl7XHJcbiAgICAgIHJldHVybiBvZihwcmVwYXJlQmFzZUFkZHJlc3ModGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMua2V5LCBhZGRpdGlvbmFsX3BhcnQpKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQlhfUkVTVF9TRVRUSU5HUy51cmxzLmtleSlcclxuXHJcbiAgICByZXR1cm4gb2YocHJlcGFyZUJhc2VBZGRyZXNzKChzdHIpID8gc3RyIDogJycsIGFkZGl0aW9uYWxfcGFydCkpXHJcbiAgfVxyXG59XHJcbiJdfQ==
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNwRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixJQUFJLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFLMUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQTtJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBVTdCO1FBUkEsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUVoQixjQUFTLEdBQUc7WUFDVixRQUFRLEVBQUUsSUFBSSxZQUFZLEVBQUU7U0FDN0IsQ0FBQTtRQUVnQixxQkFBZ0IsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFBO1FBSXJELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQWMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4RSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDdEIsQ0FBQztRQUVE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cEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLGNBQWM7WUFDckMsQ0FBQyxDQUFDLENBQUMsT0FBTyxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQyxPQUFPLGNBQWMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFeEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWdDO1FBQ3JELE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDeEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvb2tpZXMgZnJvbSAnLi4vLi4vc2VydmljZXMvdmFuaWxsYS/RgW9va2llcydcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgcHJlcGFyZUJhc2VBZGRyZXNzIH0gZnJvbSAnLi4vYmFzZSdcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2VzIGFzIExvY2FsU3RvcmFnZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbmlsbGEvbG9jYWxTdG9yYWdlJ1xuaW1wb3J0IHsgQlhSZXN0U2V0dGluZ3MsIERFRkFVTFRfQlhfUkVTVF9TRVRUSU5HUyB9IGZyb20gJy4uLy4uL3NldHRpbmdzJ1xuaW1wb3J0IHsgaUJYUmVzdEF1dGggfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vYXV0aC9zYXZlJ1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuLi92YW5pbGxhL3Nlc3Npb25TdG9yYWdlJ1xuXG50eXBlIElLZXlBdXRoID0gJ3Nlc3NpZCcgfCAnYXV0aCcgfCBzdHJpbmdcbnR5cGUgU3RvcmFnZUtpbmQgPSAnbG9jYWxTdG9yYWdlJyB8ICdzZXNzaW9uU3RvcmFnZSdcblxuZXhwb3J0IGNsYXNzIFNlc3Npb25LZXlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnU2Vzc2lvbktleUVycm9yJ1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uS2V5U2VydmljZXMge1xuXG4gIGF1dGhIYXZlID0gZmFsc2VcbiAgYXV0aERhdGE6IGlCWFJlc3RBdXRoIHwgdW5kZWZpbmVkXG4gIHN1YnNjcmliZSA9IHtcbiAgICBhdXRoRGF0YTogbmV3IFN1YnNjcmlwdGlvbigpXG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IEJYX1JFU1RfU0VUVElOR1MgPSBCWFJlc3RTZXR0aW5ncy5kYXRlXG5cbiAgY29uc3RydWN0b3IoXG4gICkge1xuICAgIGNvbnN0IGF1dGhEYXRhID0gdGhpcy5nZXRTZXNzaW9uSXRlbTxpQlhSZXN0QXV0aD4odGhpcy5jb25zdHJ1Y3Rvci5uYW1lKVxuICAgIGlmICh0aGlzLmdldEF1dGgoKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmF1dGhIYXZlID0gdHJ1ZVxuICAgIH1cblxuICAgIHRoaXMuYXV0aERhdGEgPSBhdXRoRGF0YVxuXG4gIH1cblxuICBzdWJzY3JpYmVBbGwoKSB7XG4gICAgdGhpcy5zdWJzY3JpYmUuYXV0aERhdGEudW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgZ2V0QXV0aCgpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGgua2V5KSB7XG4gICAgICBjYXNlICdhdXRoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29va2llKCdhdXRoJylcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgYnhTZXNzaWQgPSB0aGlzLmdldEJ4U2Vzc2lkKClcbiAgICAgICAgaWYgKGJ4U2Vzc2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGJ4U2Vzc2lkXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRTZXNzaWQoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5nZXRTZXNzaWQoKVxuICAgICAgICAgIHJldHVybiAoc3RyKSA/IHN0ciA6ICcnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29va2llKCdhdXRoJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEtleUF1dGgoKTogSUtleUF1dGgge1xuICAgIGlmICh0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGgua2V5XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYXV0aCdcbiAgICB9XG4gIH1cblxuICBnZXRTZXNzaWQoKSB7XG4gICAgY29uc3QgY2hlY2sgPSB0aGlzLmdldFNlYXJjaFBhcmFtKCdzZXNzaWQnKVxuICAgIGlmIChjaGVjaykge1xuICAgICAgdGhpcy5zZXRMb2NhbFN0b3JhZ2UoJ3Nlc3NpZCcsIGNoZWNrKVxuICAgICAgcmV0dXJuIGNoZWNrXG4gICAgfSBlbHNlIGlmICh0aGlzLmdldExvY2FsU3RvcmFnZSgnc2Vzc2lkJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExvY2FsU3RvcmFnZSgnc2Vzc2lkJykgfHwgJydcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBnZXRBdXRoUGFyYW1zKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGguc291cmNlXG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUoc291cmNlKCkpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoc291cmNlKSB7XG4gICAgICBjYXNlICdjb29raWVzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUodGhpcy5nZXRBdXRoKCkpXG4gICAgICBjYXNlICdsb2NhbFN0b3JhZ2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVWYWx1ZSh0aGlzLmdldExvY2FsU3RvcmFnZSh0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXkpKVxuICAgICAgY2FzZSAnb2ZmJzpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVmFsdWUoKHRoaXMuYXV0aERhdGEpID8gdGhpcy5hdXRoRGF0YS5hY2Nlc3NfdG9rZW4gOiB1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgZ2V0Q2hlY2tBdXRoUGFyYW1zSXNPbigpe1xuICAgIHJldHVybiB0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5zb3VyY2UgIT09ICdvZmYnXG4gIH1cblxuICBnZXRBdXRoRXJyb3Iob3BlcmF0aW9uID0gJ3JlcXVlc3QnKTogU2Vzc2lvbktleUVycm9yIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5zb3VyY2VcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleUF1dGgoKVxuXG4gICAgaWYgKCF0aGlzLmdldENoZWNrQXV0aFBhcmFtc0lzT24oKSkge1xuICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uS2V5RXJyb3IoXG4gICAgICAgIGBBdXRob3JpemF0aW9uIGlzIGRpc2FibGVkIGZvciAke29wZXJhdGlvbn06IEJYUmVzdFNldHRpbmdzLmF1dGguc291cmNlIGlzIFwib2ZmXCIuYFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSAodHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJykgPyAnY3VzdG9tIGZ1bmN0aW9uJyA6IHNvdXJjZVxuICAgIGNvbnN0IGNoZWNrZWQgPSB0aGlzLmdldEF1dGhDaGVja2VkUGxhY2VzKClcblxuICAgIHJldHVybiBuZXcgU2Vzc2lvbktleUVycm9yKFtcbiAgICAgIGBBdXRob3JpemF0aW9uIHRva2VuIHdhcyBub3QgZm91bmQgZm9yICR7b3BlcmF0aW9ufS5gLFxuICAgICAgYGF1dGguc291cmNlOiAke3NvdXJjZU5hbWV9LmAsXG4gICAgICBgYXV0aC5rZXk6ICR7a2V5fS5gLFxuICAgICAgYENoZWNrZWQ6ICR7Y2hlY2tlZC5qb2luKCcsICcpfS5gLFxuICAgICAgJ1NldCBCWFJlc3RTZXR0aW5ncy5hdXRoLnNvdXJjZS9rZXkgY29ycmVjdGx5IG9yIHNhdmUgYSB2YWxpZCB0b2tlbiBiZWZvcmUgbWFraW5nIHRoZSByZXF1ZXN0LidcbiAgICBdLmpvaW4oJyAnKSlcbiAgfVxuXG4gIGdldEJhc2VVcmwoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhZGRpdGlvbmFsX3BhcnQgPSAodGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0IHx8IHRoaXMuQlhfUkVTVF9TRVRUSU5HUy51cmxzLmFkZGl0aW9uYWxfcGFydCA9PT0gJycpXG4gICAgPyB0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5hZGRpdGlvbmFsX3BhcnRcbiAgICAgIDogREVGQVVMVF9CWF9SRVNUX1NFVFRJTkdTLnVybHMuYWRkaXRpb25hbF9wYXJ0XG5cbiAgICBpZih0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5zb3VyY2UgPT09ICdzdHJpbmcnKXtcbiAgICAgIHJldHVybiBvZihwcmVwYXJlQmFzZUFkZHJlc3ModGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMua2V5LCBhZGRpdGlvbmFsX3BhcnQpKVxuICAgIH1cblxuICAgIGNvbnN0IHN0ciA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlKHRoaXMuQlhfUkVTVF9TRVRUSU5HUy51cmxzLmtleSlcblxuICAgIHJldHVybiBvZihwcmVwYXJlQmFzZUFkZHJlc3MoKHN0cikgPyBzdHIgOiAnJywgYWRkaXRpb25hbF9wYXJ0KSlcbiAgfVxuXG4gIGdldEJhc2VVcmxFcnJvcihvcGVyYXRpb24gPSAncmVxdWVzdCcpOiBTZXNzaW9uS2V5RXJyb3Ige1xuICAgIHJldHVybiBuZXcgU2Vzc2lvbktleUVycm9yKFtcbiAgICAgIGBCYXNlIFVSTCB3YXMgbm90IHJlc29sdmVkIGZvciAke29wZXJhdGlvbn0uYCxcbiAgICAgIGB1cmxzLnNvdXJjZTogJHt0aGlzLkJYX1JFU1RfU0VUVElOR1MudXJscy5zb3VyY2V9LmAsXG4gICAgICBgdXJscy5rZXk6ICR7dGhpcy5CWF9SRVNUX1NFVFRJTkdTLnVybHMua2V5IHx8ICcoZW1wdHkpJ30uYCxcbiAgICAgICdTZXQgQlhSZXN0U2V0dGluZ3MudXJscy5rZXkgdG8gYSBVUkwgb3IgdG8gYSBsb2NhbFN0b3JhZ2Uga2V5IGNvbnRhaW5pbmcgdGhlIHBvcnRhbCBVUkwuJ1xuICAgIF0uam9pbignICcpKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRoQ2hlY2tlZFBsYWNlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGguc291cmNlXG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIFsnQlhSZXN0U2V0dGluZ3MuYXV0aC5zb3VyY2UoKSddXG4gICAgfVxuXG4gICAgc3dpdGNoIChzb3VyY2UpIHtcbiAgICAgIGNhc2UgJ2Nvb2tpZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5CWF9SRVNUX1NFVFRJTkdTLmF1dGgua2V5ID09PSAnYXV0aCdcbiAgICAgICAgICA/IFsnY29va2llIFwiYXV0aFwiJ11cbiAgICAgICAgICA6IFsnd2luZG93LkJYLmJpdHJpeF9zZXNzaWQoKScsICdVUkwgcXVlcnkgXCJzZXNzaWRcIicsICdsb2NhbFN0b3JhZ2UgXCJzZXNzaWRcIicsICdjb29raWUgXCJhdXRoXCInXVxuICAgICAgY2FzZSAnbG9jYWxTdG9yYWdlJzpcbiAgICAgICAgcmV0dXJuIFtgbG9jYWxTdG9yYWdlIFwiJHt0aGlzLkJYX1JFU1RfU0VUVElOR1MuYXV0aC5rZXl9XCJgXVxuICAgICAgY2FzZSAnb2ZmJzpcbiAgICAgICAgcmV0dXJuIFsnYXV0aG9yaXphdGlvbiBsb29rdXAgc2tpcHBlZCddXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW2BzZXNzaW9uU3RvcmFnZSBcIiR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfVwiIGFjY2Vzc190b2tlbmBdXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRCeFNlc3NpZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ4ID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/ICh3aW5kb3cgYXMgYW55KS5CWCA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFieCB8fCB0eXBlb2YgYnguYml0cml4X3Nlc3NpZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVZhbHVlKGJ4LmJpdHJpeF9zZXNzaWQoKSkgfHwgJydcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VhcmNoUGFyYW0obmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2gpLmdldChuYW1lKSB8fCB1bmRlZmluZWRcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvb2tpZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIENvb2tpZXMuZ2V0KG5hbWUpXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdG9yYWdlSXRlbSgnbG9jYWxTdG9yYWdlJywgbmFtZSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9jYWxTdG9yYWdlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIExvY2FsU3RvcmFnZS5zZXQobmFtZSwgdmFsdWUpXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNlc3Npb25JdGVtPFQ+KG5hbWU6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBTZXNzaW9uU3RvcmFnZS5nZXRJdGVtPFQ+KG5hbWUpXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yYWdlSXRlbShraW5kOiBTdG9yYWdlS2luZCwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IGtpbmQgPT09ICdsb2NhbFN0b3JhZ2UnXG4gICAgICA/ICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IHVuZGVmaW5lZClcbiAgICAgIDogKHR5cGVvZiBzZXNzaW9uU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyBzZXNzaW9uU3RvcmFnZSA6IHVuZGVmaW5lZClcblxuICAgIGlmICghc3RvcmFnZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN0b3JhZ2UuZ2V0SXRlbShuYW1lKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApID8gdmFsdWUgOiB1bmRlZmluZWRcbiAgfVxufVxuIl19