bx-rest 0.0.14 → 0.0.16

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 (83) hide show
  1. package/esm2020/public-api.mjs +2 -5
  2. package/fesm2015/bx-rest.mjs +1 -1784
  3. package/fesm2015/bx-rest.mjs.map +1 -1
  4. package/fesm2020/bx-rest.mjs +1 -1779
  5. package/fesm2020/bx-rest.mjs.map +1 -1
  6. package/package.json +1 -1
  7. package/public-api.d.ts +1 -3
  8. package/consts/part-name-metods.d.ts +0 -74
  9. package/consts/time.d.ts +0 -3
  10. package/esm2020/consts/part-name-metods.mjs +0 -75
  11. package/esm2020/consts/time.mjs +0 -4
  12. package/esm2020/functions/mapResult.mjs +0 -7
  13. package/esm2020/functions/serializeJavascript.mjs +0 -200
  14. package/esm2020/map/base.mjs +0 -14
  15. package/esm2020/map/lists/element.mjs +0 -22
  16. package/esm2020/request/bx-rest.module.mjs +0 -28
  17. package/esm2020/request/lists/element.mjs +0 -64
  18. package/esm2020/request/lists.mjs +0 -46
  19. package/esm2020/request/user.mjs +0 -227
  20. package/esm2020/services/base.mjs +0 -174
  21. package/esm2020/services/http/HttpBX.mjs +0 -128
  22. package/esm2020/services/http/HttpData.mjs +0 -124
  23. package/esm2020/services/http/base/base.mjs +0 -29
  24. package/esm2020/services/http/base/http.mjs +0 -28
  25. package/esm2020/services/http/http.mjs +0 -135
  26. package/esm2020/services/http/sessionKey.mjs +0 -180
  27. package/esm2020/services/map/base.mjs +0 -14
  28. package/esm2020/services/map/rest/user.mjs +0 -89
  29. package/esm2020/services/snack-bar/snack-bar.service.mjs +0 -42
  30. package/esm2020/services/snack-bar/toast-message/toast-message.component.mjs +0 -31
  31. package/esm2020/services/vanilla/JSON.mjs +0 -20
  32. package/esm2020/services/vanilla/localStorage.mjs +0 -35
  33. package/esm2020/services/vanilla//321/201ookies.mjs +0 -44
  34. package/esm2020/store/auth.mjs +0 -26
  35. package/esm2020/store/users.mjs +0 -67
  36. package/esm2020/typification/auth/save.mjs +0 -2
  37. package/esm2020/typification/rest/api-lib.mjs +0 -21
  38. package/esm2020/typification/rest/base/YesNo.mjs +0 -2
  39. package/esm2020/typification/rest/base/httpAnswerBX.mjs +0 -2
  40. package/esm2020/typification/rest/batch/batchRequestParam.mjs +0 -2
  41. package/esm2020/typification/rest/lib.mjs +0 -2
  42. package/esm2020/typification/rest/lists/element/get.mjs +0 -2
  43. package/esm2020/typification/rest/settings.mjs +0 -2
  44. package/esm2020/typification/rest/support/param.mjs +0 -2
  45. package/esm2020/typification/rest/user/UserFilterSearch.mjs +0 -2
  46. package/esm2020/typification/rest/user/get.mjs +0 -2
  47. package/esm2020/typification/rest/user/user.mjs +0 -2
  48. package/functions/mapResult.d.ts +0 -2
  49. package/functions/serializeJavascript.d.ts +0 -2
  50. package/map/base.d.ts +0 -6
  51. package/map/lists/element.d.ts +0 -8
  52. package/request/bx-rest.module.d.ts +0 -8
  53. package/request/lists/element.d.ts +0 -29
  54. package/request/lists.d.ts +0 -18
  55. package/request/user.d.ts +0 -59
  56. package/services/base.d.ts +0 -32
  57. package/services/http/HttpBX.d.ts +0 -26
  58. package/services/http/HttpData.d.ts +0 -13
  59. package/services/http/base/base.d.ts +0 -16
  60. package/services/http/base/http.d.ts +0 -7
  61. package/services/http/http.d.ts +0 -31
  62. package/services/http/sessionKey.d.ts +0 -34
  63. package/services/map/base.d.ts +0 -6
  64. package/services/map/rest/user.d.ts +0 -12
  65. package/services/snack-bar/snack-bar.service.d.ts +0 -12
  66. package/services/snack-bar/toast-message/toast-message.component.d.ts +0 -16
  67. package/services/vanilla/JSON.d.ts +0 -7
  68. package/services/vanilla/localStorage.d.ts +0 -10
  69. package/services/vanilla//321/201ookies.d.ts +0 -9
  70. package/store/auth.d.ts +0 -20
  71. package/store/users.d.ts +0 -34
  72. package/typification/auth/save.d.ts +0 -14
  73. package/typification/rest/api-lib.d.ts +0 -9
  74. package/typification/rest/base/YesNo.d.ts +0 -1
  75. package/typification/rest/base/httpAnswerBX.d.ts +0 -15
  76. package/typification/rest/batch/batchRequestParam.d.ts +0 -16
  77. package/typification/rest/lib.d.ts +0 -18
  78. package/typification/rest/lists/element/get.d.ts +0 -28
  79. package/typification/rest/settings.d.ts +0 -6
  80. package/typification/rest/support/param.d.ts +0 -5
  81. package/typification/rest/user/UserFilterSearch.d.ts +0 -43
  82. package/typification/rest/user/get.d.ts +0 -13
  83. package/typification/rest/user/user.d.ts +0 -62
@@ -1,227 +0,0 @@
1
- import { Observable, of } from 'rxjs';
2
- import { first, map, mergeMap, tap } from 'rxjs/operators';
3
- import clone from 'just-clone';
4
- import HttpBXServices from '../services/http/HttpBX';
5
- import { saveArr, saveSelf } from '../store/users';
6
- // import DateTrace from 'bx-rest/services/api/trace/metods/date'
7
- import SnackBarService from '../services/snack-bar/snack-bar.service';
8
- import { $get, $list, $search, $update, $user } from '../consts/part-name-metods';
9
- import { Injectable } from '@angular/core';
10
- import { mapResult } from '../functions/mapResult';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@ngrx/store";
13
- import * as i2 from "../services/map/rest/user";
14
- import * as i3 from "@angular/common";
15
- export class BXRestUser {
16
- constructor(http, snackBar,
17
- // private img: ImgServices,
18
- //private dateTrace: DateTrace,
19
- store, userMap, datePipe) {
20
- this.http = http;
21
- this.snackBar = snackBar;
22
- this.store = store;
23
- this.userMap = userMap;
24
- this.datePipe = datePipe;
25
- this.url = {
26
- admin: [$user, 'admin'],
27
- get: [$user, $get],
28
- current: [$user, 'current'],
29
- update: [$user, $update],
30
- search: [$user, $search],
31
- access: [$user, 'access'],
32
- // AU - все авторизованные пользователи
33
- // D1 - подразделение с id=1
34
- // G1 - группа с id=1
35
- fields: [$user, 'fields'],
36
- userfield: {
37
- list: [$user, 'userfield', $list]
38
- }
39
- };
40
- this.def = {
41
- params: { ACTIVE: 1, start: 0 }
42
- };
43
- this.user$ = this.store.select('users');
44
- }
45
- admin() {
46
- return this.http.get(this.url.admin);
47
- }
48
- get(params = {}) {
49
- let copyParams = clone(params);
50
- this.setDefParam(copyParams);
51
- return this.http.post(this.url.get, copyParams, 'Не удалось получить пользователей')
52
- .pipe(tap(v => {
53
- if (v && v.result) {
54
- this.saveArrUser(v.result);
55
- }
56
- }));
57
- }
58
- current(update = false) {
59
- if (update) {
60
- return this.getSelfHttp();
61
- }
62
- else {
63
- return this.user$.pipe(mergeMap(v => {
64
- if (v && v.self) {
65
- return of(v.self);
66
- }
67
- else {
68
- return this.getSelfHttp();
69
- }
70
- }), first());
71
- }
72
- }
73
- getSelfHttp() {
74
- return this.http.get(this.url.current, {}, 'Не удалось получить пользователя')
75
- .pipe(map(v => {
76
- if (v && v.result) {
77
- return this.userMap.HttpToBX(v.result);
78
- }
79
- return undefined;
80
- }), tap(v => {
81
- if (v) {
82
- this.store.dispatch(saveSelf({ self: v }));
83
- }
84
- }));
85
- }
86
- access(access, textError = 'Не удалось получить права') {
87
- return this.http.get(this.url.access, { ACCESS: access }, textError);
88
- }
89
- // getAll(params: iBXGetParam = {}): Observable<iBXRestUser [] | undefined> {
90
- // if (!Object.keys(params).length) {
91
- // params = clone(this.def.params)
92
- // }
93
- //
94
- // const saveAllUser = compare(params, this.def.params)
95
- // return this.user$.pipe(
96
- // take(1),
97
- // mergeMap(v => {
98
- // if (v.load.all) {
99
- // if (compare(this.def.params, params)) {
100
- // return of(clone(v.data))
101
- // }
102
- // }
103
- //
104
- // return this.getEndArray(params).pipe(
105
- // take(1),
106
- // map(v => {
107
- // if (v && v.result) {
108
- // let cl = clone(v.result)
109
- // return this.saveArrUser(cl)
110
- // }
111
- // return undefined
112
- // }),
113
- // )
114
- // }),
115
- // tap(v => {
116
- // if (v && v.length && saveAllUser) {
117
- // this.store.dispatch(loadAll({load: true}))
118
- // }
119
- // params.start = this.def.params.start
120
- // })
121
- // )
122
- // }
123
- saveArrUser(users) {
124
- let result = [];
125
- for (const user of users) {
126
- result.push(this.userMap.HttpToBX(user));
127
- }
128
- this.store.dispatch(saveArr({ arr: result }));
129
- return result;
130
- }
131
- search(params) {
132
- if (typeof params === 'string') {
133
- params = { FIND: params };
134
- }
135
- if (typeof params.ACTIVE !== 'boolean') {
136
- params.ACTIVE = true;
137
- }
138
- return this.http.get(this.url.search, params, 'Сервер не отвечает на запрос поиска');
139
- }
140
- fields() {
141
- return this.http.get(this.url.fields);
142
- }
143
- update(user, fieldUpdate) {
144
- if (fieldUpdate && fieldUpdate.length) {
145
- let sendData = {
146
- ID: user.ID,
147
- };
148
- const userBX = this.userMap.BXtoHttp(user);
149
- for (const field of fieldUpdate) {
150
- if (userBX[field]) {
151
- sendData[field] = userBX[field];
152
- }
153
- else {
154
- this.snackBar.error('Одно из указанных полей отправлено не верно');
155
- }
156
- }
157
- return this.http.post(this.url.update, sendData, 'Не удалось обновить пользователя с ID' + user.ID);
158
- }
159
- else {
160
- this.snackBar.error('Не указано ни одно поле для редактирования пользователя');
161
- return of({});
162
- }
163
- }
164
- // getEndArray(params: UserFilter = {}): Observable<iHttpAnswerBX<iBXRestUserHttp[]> | undefined> {
165
- // return this.get(params).pipe(
166
- // mergeMap(items => {
167
- // if (items && items.result && typeof items.result === 'object') {
168
- // if (items.next) {
169
- // params.start = items.next
170
- // return this.getEndArray(params).pipe(map(vEnd => {
171
- // if (vEnd && items.result && vEnd.result) {
172
- // return {result: [...items.result, ...vEnd.result]}
173
- // }
174
- // return (items) ? items : undefined
175
- // }))
176
- // }
177
- // return of(items)
178
- // } else {
179
- // return of(undefined)
180
- // }
181
- // }),
182
- // )
183
- // }
184
- setDefParam(params) {
185
- if (!params.hasOwnProperty('ACTIVE')) {
186
- params.ACTIVE = this.def.params.ACTIVE;
187
- }
188
- if (params.ACTIVE && params.ACTIVE === 2) {
189
- delete params.ACTIVE;
190
- }
191
- if (!params.hasOwnProperty('start')) {
192
- params.start = this.def.params.start;
193
- }
194
- if (params.UF_DEPARTMENT && !params.UF_DEPARTMENT.length) {
195
- delete params.UF_DEPARTMENT;
196
- }
197
- }
198
- }
199
- BXRestUser.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUser, deps: [{ token: HttpBXServices }, { token: SnackBarService }, { token: i1.Store }, { token: i2.BitrixApiUserMapServices }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable });
200
- BXRestUser.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUser, providedIn: 'root' });
201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUser, decorators: [{
202
- type: Injectable,
203
- args: [{
204
- providedIn: 'root'
205
- }]
206
- }], ctorParameters: function () { return [{ type: HttpBXServices }, { type: SnackBarService }, { type: i1.Store }, { type: i2.BitrixApiUserMapServices }, { type: i3.DatePipe }]; } });
207
- export class BXRestUserRes extends new Proxy(BXRestUser, {
208
- get(target, prop, receiver) {
209
- const res = Reflect.get(target, prop, receiver);
210
- if (res in Observable) {
211
- return Reflect.get(target, prop, receiver).pipe(
212
- // @ts-ignore
213
- map(v => mapResult(v)));
214
- }
215
- return res;
216
- }
217
- }) {
218
- }
219
- BXRestUserRes.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUserRes, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
220
- BXRestUserRes.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUserRes, providedIn: 'root' });
221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BXRestUserRes, decorators: [{
222
- type: Injectable,
223
- args: [{
224
- providedIn: 'root'
225
- }]
226
- }] });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3JlcXVlc3QvdXNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUQsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFBO0FBRTlCLE9BQU8sY0FBYyxNQUFNLHlCQUF5QixDQUFBO0FBR3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFjLE1BQU0sZ0JBQWdCLENBQUE7QUFHOUQsaUVBQWlFO0FBQ2pFLE9BQU8sZUFBZSxNQUFNLHlDQUF5QyxDQUFBO0FBR3JFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDakYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7Ozs7O0FBS2xELE1BQU0sT0FBTyxVQUFVO0lBd0JyQixZQUNVLElBQW9CLEVBQ3BCLFFBQXlCO0lBQ2pDLDRCQUE0QjtJQUM1QiwrQkFBK0I7SUFDdkIsS0FBbUMsRUFDbkMsT0FBaUMsRUFDakMsUUFBa0I7UUFObEIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFHekIsVUFBSyxHQUFMLEtBQUssQ0FBOEI7UUFDbkMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFDakMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTdCNUIsUUFBRyxHQUFHO1lBQ0osS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztZQUN2QixH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QVVULFVBQVUsY0FGVCxNQUFNOzJGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzBEQWhCTSxjQUFjLFlBT2QsZUFBZTtBQXNPdEIsTUFBTSxPQUFPLGFBQWMsU0FBUSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7SUFDdkQsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUN4QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDL0MsSUFBRyxHQUFHLElBQUksVUFBVSxFQUFDO1lBQ25CLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUk7WUFDN0MsYUFBYTtZQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2QixDQUFBO1NBQ0Y7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7Q0FDRixDQUFDOzswR0FaVyxhQUFhOzhHQUFiLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnXG5pbXBvcnQgeyBpQlhHZXRQYXJhbSB9IGZyb20gJy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXIvZ2V0J1xuaW1wb3J0IEh0dHBCWFNlcnZpY2VzIGZyb20gJy4uL3NlcnZpY2VzL2h0dHAvSHR0cEJYJ1xuaW1wb3J0IFVzZXJGaWx0ZXJTZWFyY2ggZnJvbSAnLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdXNlci9Vc2VyRmlsdGVyU2VhcmNoJ1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSdcbmltcG9ydCB7IHNhdmVBcnIsIHNhdmVTZWxmLCBzdG9yZVVzZXJzIH0gZnJvbSAnLi4vc3RvcmUvdXNlcnMnXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IEJpdHJpeEFwaVVzZXJNYXBTZXJ2aWNlcyB9IGZyb20gJy4uL3NlcnZpY2VzL21hcC9yZXN0L3VzZXInXG4vLyBpbXBvcnQgRGF0ZVRyYWNlIGZyb20gJ2J4LXJlc3Qvc2VydmljZXMvYXBpL3RyYWNlL21ldG9kcy9kYXRlJ1xuaW1wb3J0IFNuYWNrQmFyU2VydmljZSBmcm9tICcuLi9zZXJ2aWNlcy9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnXG5pbXBvcnQgaUh0dHBBbnN3ZXJCWCBmcm9tICcuLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2h0dHBBbnN3ZXJCWCdcbmltcG9ydCB7IGlCWFJlc3RVc2VyLCBpQlhSZXN0VXNlckh0dHAsIGlCWFJlc3RVc2VySHR0cEZpZWxkIH0gZnJvbSAnLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdXNlci91c2VyJ1xuaW1wb3J0IHsgJGdldCwgJGxpc3QsICRzZWFyY2gsICR1cGRhdGUsICR1c2VyIH0gZnJvbSAnLi4vY29uc3RzL3BhcnQtbmFtZS1tZXRvZHMnXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IG1hcFJlc3VsdCB9IGZyb20gJy4uL2Z1bmN0aW9ucy9tYXBSZXN1bHQnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJYUmVzdFVzZXIge1xuXG4gIHVybCA9IHtcbiAgICBhZG1pbjogWyR1c2VyLCAnYWRtaW4nXSxcbiAgICBnZXQ6IFskdXNlciwgJGdldF0sXG4gICAgY3VycmVudDogWyR1c2VyLCAnY3VycmVudCddLFxuICAgIHVwZGF0ZTogWyR1c2VyLCAkdXBkYXRlXSxcbiAgICBzZWFyY2g6IFskdXNlciwgJHNlYXJjaF0sXG4gICAgYWNjZXNzOiBbJHVzZXIsICdhY2Nlc3MnXSwgLy8gVTEgLSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0YEgaWQgPTFcbiAgICAvLyBBVSAtINCy0YHQtSDQsNCy0YLQvtGA0LjQt9C+0LLQsNC90L3Ri9C1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQuFxuICAgIC8vIEQxIC0g0L/QvtC00YDQsNC30LTQtdC70LXQvdC40LUg0YEgaWQ9MVxuICAgIC8vIEcxIC0g0LPRgNGD0L/Qv9CwINGBIGlkPTFcbiAgICBmaWVsZHM6IFskdXNlciwgJ2ZpZWxkcyddLFxuICAgIHVzZXJmaWVsZDoge1xuICAgICAgbGlzdDogWyR1c2VyLCAndXNlcmZpZWxkJywgJGxpc3RdXG4gICAgfVxuICB9XG5cbiAgZGVmOiB7IHBhcmFtczogeyBBQ1RJVkU6IDEsIHN0YXJ0OiAwIH0gfSA9IHtcbiAgICBwYXJhbXM6IHtBQ1RJVkU6IDEsIHN0YXJ0OiAwfVxuICB9XG5cbiAgdXNlciQ6IE9ic2VydmFibGU8c3RvcmVVc2Vycz5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBCWFNlcnZpY2VzLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAvLyBwcml2YXRlIGltZzogSW1nU2VydmljZXMsXG4gICAgLy9wcml2YXRlIGRhdGVUcmFjZTogRGF0ZVRyYWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPHsgdXNlcnM6IHN0b3JlVXNlcnMgfT4sXG4gICAgcHJpdmF0ZSB1c2VyTWFwOiBCaXRyaXhBcGlVc2VyTWFwU2VydmljZXMsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7XG4gICAgdGhpcy51c2VyJCA9IHRoaXMuc3RvcmUuc2VsZWN0KCd1c2VycycpXG4gIH1cblxuICBhZG1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGJvb2xlYW4+Pih0aGlzLnVybC5hZG1pbilcbiAgfVxuXG4gIGdldChwYXJhbXM6IGlCWEdldFBhcmFtID0ge30pOiBPYnNlcnZhYmxlPGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwW10+IHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGNvcHlQYXJhbXMgPSBjbG9uZShwYXJhbXMpXG4gICAgdGhpcy5zZXREZWZQYXJhbShjb3B5UGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPiB8IHVuZGVmaW5lZD5cbiAgICAodGhpcy51cmwuZ2V0LCBjb3B5UGFyYW1zLCAn0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5JylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodiA9PiB7XG4gICAgICAgICAgaWYgKHYgJiYgdi5yZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFyclVzZXIodi5yZXN1bHQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgY3VycmVudCh1cGRhdGUgPSBmYWxzZSkge1xuICAgIGlmICh1cGRhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlbGZIdHRwKClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudXNlciQucGlwZShcbiAgICAgICAgbWVyZ2VNYXAodiA9PiB7XG4gICAgICAgICAgaWYgKHYgJiYgdi5zZWxmKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yodi5zZWxmKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxmSHR0cCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZkh0dHAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxpQlhSZXN0VXNlckh0dHA+PlxuICAgICh0aGlzLnVybC5jdXJyZW50LCB7fSwgJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgICBpZiAodiAmJiB2LnJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlck1hcC5IdHRwVG9CWCh2LnJlc3VsdClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICB9KSxcbiAgICAgICAgdGFwKHYgPT4ge1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNhdmVTZWxmKHtzZWxmOiB2fSkpXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgfVxuXG4gIGFjY2VzcyhhY2Nlc3M6IHN0cmluZ1tdLCB0ZXh0RXJyb3IgPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC/0YDQsNCy0LAnKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxib29sZWFuPiB8IHVuZGVmaW5lZD4odGhpcy51cmwuYWNjZXNzLCB7QUNDRVNTOiBhY2Nlc3N9LCB0ZXh0RXJyb3IpXG4gIH1cblxuICAvLyBnZXRBbGwocGFyYW1zOiBpQlhHZXRQYXJhbSA9IHt9KTogT2JzZXJ2YWJsZTxpQlhSZXN0VXNlciBbXSB8IHVuZGVmaW5lZD4ge1xuICAvLyAgIGlmICghT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGgpIHtcbiAgLy8gICAgIHBhcmFtcyA9IGNsb25lKHRoaXMuZGVmLnBhcmFtcylcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgY29uc3Qgc2F2ZUFsbFVzZXIgPSBjb21wYXJlKHBhcmFtcywgdGhpcy5kZWYucGFyYW1zKVxuICAvLyAgIHJldHVybiB0aGlzLnVzZXIkLnBpcGUoXG4gIC8vICAgICB0YWtlKDEpLFxuICAvLyAgICAgbWVyZ2VNYXAodiA9PiB7XG4gIC8vICAgICAgIGlmICh2LmxvYWQuYWxsKSB7XG4gIC8vICAgICAgICAgaWYgKGNvbXBhcmUodGhpcy5kZWYucGFyYW1zLCBwYXJhbXMpKSB7XG4gIC8vICAgICAgICAgICByZXR1cm4gb2YoY2xvbmUodi5kYXRhKSlcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH1cbiAgLy9cbiAgLy8gICAgICAgcmV0dXJuIHRoaXMuZ2V0RW5kQXJyYXkocGFyYW1zKS5waXBlKFxuICAvLyAgICAgICAgIHRha2UoMSksXG4gIC8vICAgICAgICAgbWFwKHYgPT4ge1xuICAvLyAgICAgICAgICAgaWYgKHYgJiYgdi5yZXN1bHQpIHtcbiAgLy8gICAgICAgICAgICAgbGV0IGNsID0gY2xvbmUodi5yZXN1bHQpXG4gIC8vICAgICAgICAgICAgIHJldHVybiB0aGlzLnNhdmVBcnJVc2VyKGNsKVxuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAvLyAgICAgICAgIH0pLFxuICAvLyAgICAgICApXG4gIC8vICAgICB9KSxcbiAgLy8gICAgIHRhcCh2ID0+IHtcbiAgLy8gICAgICAgaWYgKHYgJiYgdi5sZW5ndGggJiYgc2F2ZUFsbFVzZXIpIHtcbiAgLy8gICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGxvYWRBbGwoe2xvYWQ6IHRydWV9KSlcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBwYXJhbXMuc3RhcnQgPSB0aGlzLmRlZi5wYXJhbXMuc3RhcnRcbiAgLy8gICAgIH0pXG4gIC8vICAgKVxuICAvLyB9XG5cbiAgcHJpdmF0ZSBzYXZlQXJyVXNlcih1c2VyczogaUJYUmVzdFVzZXJIdHRwW10pIHtcbiAgICBsZXQgcmVzdWx0OiBpQlhSZXN0VXNlciBbXSA9IFtdXG4gICAgZm9yIChjb25zdCB1c2VyIG9mIHVzZXJzKSB7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLnVzZXJNYXAuSHR0cFRvQlgodXNlcikpXG4gICAgfVxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2F2ZUFycih7YXJyOiByZXN1bHR9KSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHNlYXJjaChwYXJhbXM6IHN0cmluZyB8IFVzZXJGaWx0ZXJTZWFyY2gpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBhcmFtcyA9IHtGSU5EOiBwYXJhbXN9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLkFDVElWRSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXMuQUNUSVZFID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPj4oXG4gICAgICB0aGlzLnVybC5zZWFyY2gsXG4gICAgICBwYXJhbXMsXG4gICAgICAn0KHQtdGA0LLQtdGAINC90LUg0L7RgtCy0LXRh9Cw0LXRgiDQvdCwINC30LDQv9GA0L7RgSDQv9C+0LjRgdC60LAnXG4gICAgKVxuICB9XG5cbiAgZmllbGRzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwRmllbGQ+Pih0aGlzLnVybC5maWVsZHMpXG4gIH1cblxuICB1cGRhdGUodXNlcjogaUJYUmVzdFVzZXIsIGZpZWxkVXBkYXRlOiBzdHJpbmdbXSkge1xuICAgIGlmIChmaWVsZFVwZGF0ZSAmJiBmaWVsZFVwZGF0ZS5sZW5ndGgpIHtcbiAgICAgIGxldCBzZW5kRGF0YTogYW55ID0ge1xuICAgICAgICBJRDogdXNlci5JRCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZXJCWCA9IHRoaXMudXNlck1hcC5CWHRvSHR0cCh1c2VyKVxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZFVwZGF0ZSkge1xuICAgICAgICBpZiAodXNlckJYW2ZpZWxkXSkge1xuICAgICAgICAgIHNlbmREYXRhW2ZpZWxkXSA9IHVzZXJCWFtmaWVsZF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLmVycm9yKCfQntC00L3QviDQuNC3INGD0LrQsNC30LDQvdC90YvRhSDQv9C+0LvQtdC5INC+0YLQv9GA0LDQstC70LXQvdC+INC90LUg0LLQtdGA0L3QvicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPj4oXG4gICAgICAgIHRoaXMudXJsLnVwZGF0ZSwgc2VuZERhdGEsXG4gICAgICAgICfQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGBIElEJyArIHVzZXIuSURcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zbmFja0Jhci5lcnJvcign0J3QtSDRg9C60LDQt9Cw0L3QviDQvdC4INC+0LTQvdC+INC/0L7Qu9C1INC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjycpXG4gICAgICByZXR1cm4gb2Yoe30pXG4gICAgfVxuICB9XG5cbiAgLy8gZ2V0RW5kQXJyYXkocGFyYW1zOiBVc2VyRmlsdGVyID0ge30pOiBPYnNlcnZhYmxlPGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwW10+IHwgdW5kZWZpbmVkPiB7XG4gIC8vICAgcmV0dXJuIHRoaXMuZ2V0KHBhcmFtcykucGlwZShcbiAgLy8gICAgIG1lcmdlTWFwKGl0ZW1zID0+IHtcbiAgLy8gICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLnJlc3VsdCAmJiB0eXBlb2YgaXRlbXMucmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAvLyAgICAgICAgIGlmIChpdGVtcy5uZXh0KSB7XG4gIC8vICAgICAgICAgICBwYXJhbXMuc3RhcnQgPSBpdGVtcy5uZXh0XG4gIC8vICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbmRBcnJheShwYXJhbXMpLnBpcGUobWFwKHZFbmQgPT4ge1xuICAvLyAgICAgICAgICAgICBpZiAodkVuZCAmJiBpdGVtcy5yZXN1bHQgJiYgdkVuZC5yZXN1bHQpIHtcbiAgLy8gICAgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDogWy4uLml0ZW1zLnJlc3VsdCwgLi4udkVuZC5yZXN1bHRdfVxuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICAgIHJldHVybiAoaXRlbXMpID8gaXRlbXMgOiB1bmRlZmluZWRcbiAgLy8gICAgICAgICAgIH0pKVxuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgICByZXR1cm4gb2YoaXRlbXMpXG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSksXG4gIC8vICAgKVxuICAvLyB9XG5cbiAgIHByaXZhdGUgc2V0RGVmUGFyYW0ocGFyYW1zOiBpQlhHZXRQYXJhbSkge1xuICAgIGlmICghcGFyYW1zLmhhc093blByb3BlcnR5KCdBQ1RJVkUnKSkge1xuICAgICAgcGFyYW1zLkFDVElWRSA9IHRoaXMuZGVmLnBhcmFtcy5BQ1RJVkVcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5BQ1RJVkUgJiYgcGFyYW1zLkFDVElWRSA9PT0gMikge1xuICAgICAgZGVsZXRlIHBhcmFtcy5BQ1RJVkVcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3N0YXJ0JykpIHtcbiAgICAgIHBhcmFtcy5zdGFydCA9IHRoaXMuZGVmLnBhcmFtcy5zdGFydFxuICAgIH1cblxuICAgIGlmIChwYXJhbXMuVUZfREVQQVJUTUVOVCAmJiAhcGFyYW1zLlVGX0RFUEFSVE1FTlQubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgcGFyYW1zLlVGX0RFUEFSVE1FTlRcbiAgICB9XG4gIH1cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQlhSZXN0VXNlclJlcyBleHRlbmRzIG5ldyBQcm94eShCWFJlc3RVc2VyLCB7XG4gIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgY29uc3QgcmVzID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcilcbiAgICBpZihyZXMgaW4gT2JzZXJ2YWJsZSl7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikucGlwZShcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtYXAodiA9PiBtYXBSZXN1bHQodikpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc1xuICB9XG59KXt9XG5cbiJdfQ==
@@ -1,174 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { time } from '../consts/time';
3
- // import { environment } from 'bx-rest/environments/environment'
4
- import { DateTime } from 'luxon';
5
- import * as i0 from "@angular/core";
6
- export class BaseServices {
7
- toStr(val) {
8
- return (val) ? String(val) : '';
9
- }
10
- toNum(val) {
11
- return (val && Number(val)) ? Number(val) : 0;
12
- }
13
- toDate(val, format, opt) {
14
- if (val instanceof Date) {
15
- return val;
16
- }
17
- else if (typeof val == 'string') {
18
- if (format) {
19
- if (opt) {
20
- return DateTime.fromFormat(val, format, opt).toJSDate();
21
- }
22
- return DateTime.fromFormat(val, format).toJSDate();
23
- }
24
- else {
25
- return new Date(val);
26
- }
27
- }
28
- else if (typeof val == 'number') {
29
- return new Date(val);
30
- }
31
- console.error('Wrong date format', val, format);
32
- throw 'Wrong date format';
33
- }
34
- getBXStrTime(date) {
35
- return this.toISOStringWithTimezone(date);
36
- }
37
- toISOStringWithTimezone(date) {
38
- const tzOffset = -date.getTimezoneOffset();
39
- const diff = tzOffset >= 0 ? '+' : '-';
40
- const pad = (n) => `${Math.floor(Math.abs(n))}`.padStart(2, '0');
41
- return date.getFullYear() +
42
- '-' + pad(date.getMonth() + 1) +
43
- '-' + pad(date.getDate()) +
44
- 'T' + pad(date.getHours()) +
45
- ':' + pad(date.getMinutes()) +
46
- ':' + pad(date.getSeconds()) +
47
- diff + pad(tzOffset / 60) +
48
- ':' + pad(tzOffset % 60);
49
- }
50
- ;
51
- toBool(val) {
52
- switch (typeof val) {
53
- case 'string':
54
- val = val.toLowerCase();
55
- if (val === 'n' || val === 'y') { // битриксовые понятия о bool
56
- return val === 'y';
57
- }
58
- else if (val === 'true' || val === 'false') { // битриксовые понятия о bool
59
- return val === 'true';
60
- }
61
- else {
62
- return false;
63
- }
64
- default:
65
- return Boolean(val);
66
- }
67
- }
68
- toBXYorN(val) {
69
- return (val) ? 'Y' : 'N';
70
- }
71
- typeof(val) {
72
- return typeof val;
73
- }
74
- typeDefClass(val) {
75
- if (val) {
76
- if (val instanceof Date) {
77
- return 'date';
78
- }
79
- return undefined;
80
- }
81
- else {
82
- return null;
83
- }
84
- }
85
- toJSON(val) {
86
- return JSON.stringify(val);
87
- }
88
- fromJSON(val) {
89
- return JSON.parse(val);
90
- }
91
- prepareBaseAddress(url, add = '') {
92
- if (url.search('https://') !== 0 && url.search('http://')) {
93
- url = 'https://' + url;
94
- }
95
- if (url.lastIndexOf('/') !== (url.length - 1)) {
96
- url = url + '/';
97
- }
98
- url = url + add;
99
- return url;
100
- }
101
- getHomeAddress() {
102
- // return this.prepareBaseAddress(environment.urls.home)
103
- return this.prepareBaseAddress('b24.trace-studio.com');
104
- }
105
- dateDiff(a, b) {
106
- return new Date(a.valueOf() - b.valueOf());
107
- }
108
- dateDiffInDays(a, b) {
109
- return Math.floor(this.dateDiff(a, b).valueOf() / time.oneDayMilliseconds);
110
- }
111
- getBase64File(file) {
112
- return new Promise((resolve, reject) => {
113
- const reader = new FileReader();
114
- reader.readAsDataURL(file);
115
- reader.onload = () => resolve(reader.result);
116
- reader.onerror = error => reject(error);
117
- });
118
- }
119
- async getBase64FileLikeStr(file) {
120
- let result = await this.getBase64File(file);
121
- if (typeof result === 'string') {
122
- let split = result.split(',');
123
- return {
124
- header: split[0],
125
- val: split[1]
126
- };
127
- }
128
- return undefined;
129
- }
130
- sumArray(numbers) {
131
- return numbers.reduce((a, b) => {
132
- return a + b;
133
- });
134
- }
135
- isItTheSameDate(date1, date2) {
136
- return date1.getDate() === date2.getDate()
137
- && date1.getMonth() === date2.getMonth()
138
- && date1.getFullYear() === date2.getFullYear();
139
- }
140
- toUnix(date) {
141
- return Math.floor(date.valueOf() / 1000);
142
- }
143
- arrSum(x) {
144
- let s = 0;
145
- for (let i = 0; i < x.length; i++) {
146
- s += x[i];
147
- }
148
- return s;
149
- }
150
- getBaseUrlHttps(url, component = false) {
151
- if (component) {
152
- return encodeURI(this.cropUrl(url) + '/');
153
- }
154
- else {
155
- return encodeURI('https://' + this.cropUrl(url) + '/');
156
- }
157
- }
158
- cropUrl(url) {
159
- url = (url) ? url.replace('https://', '') : '';
160
- url = (url) ? url.replace('http://', '') : '';
161
- url = (url) ? url.replace('https:', '') : '';
162
- url = (url) ? url.replace('http:', '') : '';
163
- return url;
164
- }
165
- }
166
- BaseServices.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseServices, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
167
- BaseServices.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseServices, providedIn: 'root' });
168
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseServices, decorators: [{
169
- type: Injectable,
170
- args: [{
171
- providedIn: 'root'
172
- }]
173
- }] });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckMsaUVBQWlFO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUE7O0FBTWhDLE1BQU0sT0FBTyxZQUFZO0lBRXJCLEtBQUssQ0FBQyxHQUFRO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVE7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQTJCLEVBQUUsTUFBZSxFQUFFLEdBQXFCO1FBQ3RFLElBQUksR0FBRyxZQUFZLElBQUksRUFBRTtZQUNyQixPQUFPLEdBQUcsQ0FBQTtTQUNiO2FBQU0sSUFBSSxPQUFPLEdBQUcsSUFBSSxRQUFRLEVBQUU7WUFDL0IsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7aUJBQzFEO2dCQUNELE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7YUFDckQ7aUJBQU07Z0JB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QUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUM1QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMzQyxPQUFPLEdBQUcsQ0FBQTtJQUNkLENBQUM7O3lHQWhMUSxZQUFZOzZHQUFaLFlBQVksY0FGVCxNQUFNOzJGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IHRpbWUgfSBmcm9tICcuLi9jb25zdHMvdGltZSdcclxuLy8gaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICdieC1yZXN0L2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbidcclxuaW1wb3J0IHsgRGF0ZVRpbWVPcHRpb25zIH0gZnJvbSAnbHV4b24vc3JjL2RhdGV0aW1lJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlU2VydmljZXMge1xyXG5cclxuICAgIHRvU3RyKHZhbDogYW55KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKHZhbCkgPyBTdHJpbmcodmFsKSA6ICcnXHJcbiAgICB9XHJcblxyXG4gICAgdG9OdW0odmFsOiBhbnkpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAodmFsICYmIE51bWJlcih2YWwpKSA/IE51bWJlcih2YWwpIDogMFxyXG4gICAgfVxyXG5cclxuICAgIHRvRGF0ZSh2YWw6IG51bWJlciB8IHN0cmluZyB8IERhdGUsIGZvcm1hdD86IHN0cmluZywgb3B0PzogRGF0ZVRpbWVPcHRpb25zKTogRGF0ZSB7XHJcbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbFxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodmFsLCBmb3JtYXQsIG9wdCkudG9KU0RhdGUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodmFsLCBmb3JtYXQpLnRvSlNEYXRlKClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignV3JvbmcgZGF0ZSBmb3JtYXQnLCB2YWwsIGZvcm1hdClcclxuICAgICAgICB0aHJvdyAnV3JvbmcgZGF0ZSBmb3JtYXQnXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QlhTdHJUaW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvSVNPU3RyaW5nV2l0aFRpbWV6b25lKGRhdGUpXHJcbiAgICB9XHJcblxyXG4gICAgdG9JU09TdHJpbmdXaXRoVGltZXpvbmUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdHpPZmZzZXQgPSAtZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpXHJcbiAgICAgICAgY29uc3QgZGlmZiA9IHR6T2Zmc2V0ID49IDAgPyAnKycgOiAnLSdcclxuICAgICAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBgJHtNYXRoLmZsb29yKE1hdGguYWJzKG4pKX1gLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICtcclxuICAgICAgICAgICAgJy0nICsgcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpICtcclxuICAgICAgICAgICAgJy0nICsgcGFkKGRhdGUuZ2V0RGF0ZSgpKSArXHJcbiAgICAgICAgICAgICdUJyArIHBhZChkYXRlLmdldEhvdXJzKCkpICtcclxuICAgICAgICAgICAgJzonICsgcGFkKGRhdGUuZ2V0TWludXRlcygpKSArXHJcbiAgICAgICAgICAgICc6JyArIHBhZChkYXRlLmdldFNlY29uZHMoKSkgK1xyXG4gICAgICAgICAgICBkaWZmICsgcGFkKHR6T2Zmc2V0IC8gNjApICtcclxuICAgICAgICAgICAgJzonICsgcGFkKHR6T2Zmc2V0ICUgNjApXHJcbiAgICB9O1xyXG5cclxuICAgIHRvQm9vbCh2YWw6IGFueSkge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbCkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPT09ICduJyB8fCB2YWwgPT09ICd5JykgeyAvLyDQsdC40YLRgNC40LrRgdC+0LLRi9C1INC/0L7QvdGP0YLQuNGPINC+IGJvb2xcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09PSAneSdcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID09PSAndHJ1ZScgfHwgdmFsID09PSAnZmFsc2UnKSB7IC8vINCx0LjRgtGA0LjQutGB0L7QstGL0LUg0L/QvtC90Y/RgtC40Y8g0L4gYm9vbFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT09ICd0cnVlJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHZhbClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9CWFlvck4odmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuICh2YWwpID8gJ1knIDogJ04nXHJcbiAgICB9XHJcblxyXG4gICAgdHlwZW9mKHZhbDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWxcclxuICAgIH1cclxuXHJcbiAgICB0eXBlRGVmQ2xhc3ModmFsOiBvYmplY3QpOiB1bmRlZmluZWQgfCBudWxsIHwgJ2RhdGUnIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RhdGUnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRvSlNPTih2YWw6IG9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWwpXHJcbiAgICB9XHJcblxyXG4gICAgZnJvbUpTT048VD4odmFsOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWwpXHJcbiAgICB9XHJcblxyXG4gICAgcHJlcGFyZUJhc2VBZGRyZXNzKHVybDogc3RyaW5nLCBhZGQ6IHN0cmluZyA9ICcnKSB7XHJcbiAgICAgICAgaWYgKHVybC5zZWFyY2goJ2h0dHBzOi8vJykgIT09IDAgJiYgdXJsLnNlYXJjaCgnaHR0cDovLycpKSB7XHJcbiAgICAgICAgICAgIHVybCA9ICdodHRwczovLycgKyB1cmxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnLydcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVybCA9IHVybCArIGFkZFxyXG5cclxuICAgICAgICByZXR1cm4gdXJsXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SG9tZUFkZHJlc3MoKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMucHJlcGFyZUJhc2VBZGRyZXNzKGVudmlyb25tZW50LnVybHMuaG9tZSlcclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlQmFzZUFkZHJlc3MoJ2IyNC50cmFjZS1zdHVkaW8uY29tJylcclxuICAgIH1cclxuXHJcbiAgICBkYXRlRGlmZihhOiBEYXRlLCBiOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEudmFsdWVPZigpIC0gYi52YWx1ZU9mKCkpXHJcbiAgICB9XHJcblxyXG4gICAgZGF0ZURpZmZJbkRheXMoYTogRGF0ZSwgYjogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZGF0ZURpZmYoYSwgYikudmFsdWVPZigpIC8gdGltZS5vbmVEYXlNaWxsaXNlY29uZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2U2NEZpbGUoZmlsZTogRmlsZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSlcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdClcclxuICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCYXNlNjRGaWxlTGlrZVN0cihmaWxlOiBGaWxlKTogUHJvbWlzZTx7IGhlYWRlcjogc3RyaW5nLCB2YWw6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmFzZTY0RmlsZShmaWxlKVxyXG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBsZXQgc3BsaXQgPSByZXN1bHQuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBzcGxpdFswXSxcclxuICAgICAgICAgICAgICAgIHZhbDogc3BsaXRbMV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgc3VtQXJyYXkobnVtYmVyczogbnVtYmVyW10pIHtcclxuICAgICAgICByZXR1cm4gbnVtYmVycy5yZWR1Y2UoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGEgKyBiO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaXNJdFRoZVNhbWVEYXRlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBkYXRlMS5nZXREYXRlKCkgPT09IGRhdGUyLmdldERhdGUoKVxyXG4gICAgICAgICAgICAmJiBkYXRlMS5nZXRNb250aCgpID09PSBkYXRlMi5nZXRNb250aCgpXHJcbiAgICAgICAgICAgICYmIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKClcclxuICAgIH1cclxuXHJcbiAgICB0b1VuaXgoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRhdGUudmFsdWVPZigpIC8gMTAwMClcclxuICAgIH1cclxuXHJcbiAgICBhcnJTdW0oeDogbnVtYmVyW10pIHtcclxuICAgICAgICBsZXQgcyA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgKz0geFtpXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2VVcmxIdHRwcyh1cmw6IHN0cmluZywgY29tcG9uZW50ID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUkkodGhpcy5jcm9wVXJsKHVybCkgKyAnLycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUkkoJ2h0dHBzOi8vJyArIHRoaXMuY3JvcFVybCh1cmwpICsgJy8nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JvcFVybCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHVybCA9ICh1cmwpID8gdXJsLnJlcGxhY2UoJ2h0dHBzOi8vJywgJycpIDogJydcclxuICAgICAgICB1cmwgPSAodXJsKSA/IHVybC5yZXBsYWNlKCdodHRwOi8vJywgJycpIDogJydcclxuICAgICAgICB1cmwgPSAodXJsKSA/IHVybC5yZXBsYWNlKCdodHRwczonLCAnJykgOiAnJ1xyXG4gICAgICAgIHVybCA9ICh1cmwpID8gdXJsLnJlcGxhY2UoJ2h0dHA6JywgJycpIDogJydcclxuICAgICAgICByZXR1cm4gdXJsXHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,128 +0,0 @@
1
- import { throwError, take, mergeMap, forkJoin } from 'rxjs';
2
- import { catchError, map } from 'rxjs/operators';
3
- import { Injectable } from '@angular/core';
4
- import clone from 'just-clone';
5
- import BaseHttpServices from '../../services/http/http';
6
- import flatten from 'just-flatten-it';
7
- import * as i0 from "@angular/core";
8
- export default class HttpBXServices extends BaseHttpServices {
9
- timeNowOnServer() {
10
- return this.httpGet('server.time').pipe(map(v => {
11
- if (v && v.result) {
12
- return new Date(v.result);
13
- }
14
- return undefined;
15
- }));
16
- }
17
- /**
18
- * Это пиздец а не метод
19
- * @param param
20
- */
21
- branch(param) {
22
- let prepareParam = Object.entries(this.prepareBatch(param));
23
- const size = 50; // больше не отдаст
24
- let subarray = []; //массив в который будет выведен результат.
25
- for (let i = 0; i < Math.ceil(prepareParam.length / size); i++) {
26
- subarray[i] = prepareParam.slice((i * size), (i * size) + size);
27
- }
28
- return forkJoin(subarray.map(i => {
29
- return this.httpPost('batch.json', {
30
- halt: 0,
31
- cmd: Object.assign({}, ...i.map(x => {
32
- return { [x[0]]: x[1] };
33
- }))
34
- });
35
- }));
36
- }
37
- prepareBatch(param) {
38
- let res = Object.keys(param).reduce((obj, key) => {
39
- obj[key] = '';
40
- return obj;
41
- }, {});
42
- for (let key in param) {
43
- if (typeof key === 'string' || typeof key === 'number' && param[key].param) {
44
- res[key] = param[key].name + '?' + this.getHttpParamsGet(param[key].param).toString();
45
- }
46
- }
47
- return res;
48
- }
49
- mapBranchResult(res) {
50
- return Object.assign([], ...res.map(i => (i.result && i.result.result) ? i.result.result : undefined));
51
- }
52
- mapBranchResultWithoutKey(res) {
53
- return flatten(Object.assign([], ...res.map(i => (i.result && i.result.result) ? i.result.result : undefined)));
54
- }
55
- post(name, params = {}, textError = '', settings = this.defSettings) {
56
- return this.httpPost(this.getNameMethod(name), params, textError, settings);
57
- }
58
- get(name, params = {}, textError = '', settings = this.defSettings) {
59
- return this.httpGet(this.getNameMethod(name), params, textError, settings);
60
- }
61
- httpPost(url, params = {}, textError = '', settings = this.defSettings) {
62
- return this.session.getAuthParams().pipe(mergeMap(auth => {
63
- if (auth) {
64
- const paramsClone = clone(params);
65
- paramsClone[this.session.getKeyAuth()] = auth;
66
- return this.session.getBaseUrl().pipe(mergeMap(v => {
67
- if (v) {
68
- return this.http.post(this.prepareBaseAddress(v) + url, this.getHttpParamsPost(paramsClone, new FormData(), false, [], settings))
69
- .pipe(take(1), catchError(err => {
70
- if (!textError.length && err.error.error_description) {
71
- textError = err.error.error_description;
72
- }
73
- this.snackBar.error('Ошибка: ' + textError);
74
- return throwError(() => err);
75
- }));
76
- }
77
- return throwError(() => 'get base url error');
78
- }));
79
- }
80
- else {
81
- this.snackBar.error('Error: Auth not get');
82
- return throwError(() => 'auth not get');
83
- }
84
- }));
85
- }
86
- httpGet(url, params = {}, textError = '', settings = this.defSettings) {
87
- return this.session.getAuthParams().pipe(mergeMap(auth => {
88
- if (auth) {
89
- if (params === null) {
90
- params = {};
91
- }
92
- const paramsClone = clone(params);
93
- paramsClone[this.session.getKeyAuth()] = auth;
94
- let options = {
95
- params: this.getHttpParamsGet(paramsClone)
96
- };
97
- return this.session.getBaseUrl().pipe(mergeMap(v => {
98
- if (v) {
99
- return this.http.get(this.prepareBaseAddress(v) + url, options).pipe(take(1), catchError(err => {
100
- if (!textError.length && err.error.error_description) {
101
- textError = err.error.error_description;
102
- }
103
- this.snackBar.error('Ошибка: ' + textError);
104
- return throwError(() => err);
105
- }));
106
- }
107
- return throwError(() => 'get base url error');
108
- }));
109
- }
110
- else {
111
- this.snackBar.error('Error: Auth not get');
112
- return throwError(() => 'auth not get');
113
- }
114
- }));
115
- }
116
- getNameMethod(arr) {
117
- return arr.join('.');
118
- }
119
- }
120
- HttpBXServices.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HttpBXServices, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
121
- HttpBXServices.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HttpBXServices, providedIn: 'root' });
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HttpBXServices, decorators: [{
123
- type: Injectable,
124
- args: [{
125
- providedIn: 'root'
126
- }]
127
- }] });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEJYLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvaHR0cC9IdHRwQlgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFBO0FBRTlCLE9BQU8sZ0JBQWdCLE1BQU0sMEJBQTBCLENBQUE7QUFNdkQsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUE7O0FBS3JDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLGdCQUFnQjtJQUVqRCxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBb0MsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUN4RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNqQixPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTthQUMxQjtZQUNELE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ00sTUFBTSxDQUFPLEtBQXlEO1FBQzdFLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQVMsSUFBSSxDQUFDLFlBQVksQ0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQSxDQUFDLG1CQUFtQjtRQUNuQyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUEsQ0FBQywyQ0FBMkM7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Y0FBYzsrR0FBZCxjQUFjLGNBRnJCLE1BQU07MkZBRUMsY0FBYztrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCB0YWtlLCBtZXJnZU1hcCwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xuaW1wb3J0IHsgaUh0dHBQYXJhbVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3Qvc2V0dGluZ3MnXG5pbXBvcnQgQmFzZUh0dHBTZXJ2aWNlcyBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL2h0dHAnXG5pbXBvcnQge1xuICBpQmF0Y2hSZXF1ZXN0QW5zd2VyLCBpQmF0Y2hSZXF1ZXN0UGFyYW0sXG4gIGlCYXRjaFJlcXVlc3RQYXJhbUFycixcbiAgaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCwga2V5QmF0Y2hcbn0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmF0Y2gvYmF0Y2hSZXF1ZXN0UGFyYW0nXG5pbXBvcnQgZmxhdHRlbiBmcm9tICdqdXN0LWZsYXR0ZW4taXQnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cEJYU2VydmljZXMgZXh0ZW5kcyBCYXNlSHR0cFNlcnZpY2VzIHtcblxuICBvdmVycmlkZSB0aW1lTm93T25TZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cEdldDx7IHJlc3VsdD86IERhdGUsIGVycm9yPzogc3RyaW5nIH0+KCdzZXJ2ZXIudGltZScpLnBpcGUoXG4gICAgICBtYXAodiA9PiB7XG4gICAgICAgIGlmICh2ICYmIHYucmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHYucmVzdWx0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH0pLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiDQrdGC0L4g0L/QuNC30LTQtdGGINCwINC90LUg0LzQtdGC0L7QtFxuICAgKiBAcGFyYW0gcGFyYW1cbiAgICovXG4gIG92ZXJyaWRlIGJyYW5jaDxULCBBPihwYXJhbTogaUJhdGNoUmVxdWVzdFBhcmFtQXJyPFQ+IHwgaUJhdGNoUmVxdWVzdFBhcmFtPFQ+W10pOiBPYnNlcnZhYmxlPGlCYXRjaFJlcXVlc3RBbnN3ZXI8QT5bXSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBwcmVwYXJlUGFyYW0gPSBPYmplY3QuZW50cmllczxzdHJpbmc+KHRoaXMucHJlcGFyZUJhdGNoPFQ+KHBhcmFtKSlcbiAgICBjb25zdCBzaXplID0gNTAgLy8g0LHQvtC70YzRiNC1INC90LUg0L7RgtC00LDRgdGCXG4gICAgbGV0IHN1YmFycmF5ID0gW10gLy/QvNCw0YHRgdC40LIg0LIg0LrQvtGC0L7RgNGL0Lkg0LHRg9C00LXRgiDQstGL0LLQtdC00LXQvSDRgNC10LfRg9C70YzRgtCw0YIuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmNlaWwocHJlcGFyZVBhcmFtLmxlbmd0aCAvIHNpemUpOyBpKyspIHtcbiAgICAgIHN1YmFycmF5W2ldID0gcHJlcGFyZVBhcmFtLnNsaWNlKChpICogc2l6ZSksIChpICogc2l6ZSkgKyBzaXplKVxuICAgIH1cblxuICAgIHJldHVybiBmb3JrSm9pbihcbiAgICAgIHN1YmFycmF5Lm1hcChpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFBvc3QoJ2JhdGNoLmpzb24nLCB7XG4gICAgICAgICAgaGFsdDogMCxcbiAgICAgICAgICBjbWQ6IE9iamVjdC5hc3NpZ24oe30sIC4uLmkubWFwKHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtbeFswXV06IHhbMV19XG4gICAgICAgICAgfSkpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICkgYXMgT2JzZXJ2YWJsZTxpQmF0Y2hSZXF1ZXN0QW5zd2VyPEE+W10+XG4gIH1cblxuICBvdmVycmlkZSBwcmVwYXJlQmF0Y2g8VD4ocGFyYW06IGlCYXRjaFJlcXVlc3RQYXJhbUFycjxUPiB8IGlCYXRjaFJlcXVlc3RQYXJhbTxUPltdKTogaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCB7XG4gICAgbGV0IHJlczogaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCA9IE9iamVjdC5rZXlzKHBhcmFtKS5yZWR1Y2UoXG4gICAgICAob2JqLCBrZXkpID0+IHtcbiAgICAgICAgb2JqW2tleV0gPSAnJztcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwXG4gICAgKTtcbiAgICBmb3IgKGxldCBrZXkgaW4gcGFyYW0pIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyAmJiBwYXJhbVtrZXldLnBhcmFtKSB7XG4gICAgICAgIHJlc1trZXldID0gcGFyYW1ba2V5XS5uYW1lICsgJz8nICsgdGhpcy5nZXRIdHRwUGFyYW1zR2V0KHBhcmFtW2tleV0ucGFyYW0pLnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgb3ZlcnJpZGUgbWFwQnJhbmNoUmVzdWx0PFQ+KHJlczogaUJhdGNoUmVxdWVzdEFuc3dlcjxUPltdKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PiAoaS5yZXN1bHQgJiYgaS5yZXN1bHQucmVzdWx0KSA/IGkucmVzdWx0LnJlc3VsdCA6IHVuZGVmaW5lZCkpIGFzIHtcbiAgICAgIFtrZXk6IGtleUJhdGNoXTogVFxuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG1hcEJyYW5jaFJlc3VsdFdpdGhvdXRLZXk8VD4ocmVzOiBpQmF0Y2hSZXF1ZXN0QW5zd2VyPFQ+W10pOiBUW10ge1xuICAgIHJldHVybiBmbGF0dGVuPFQ+KE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PiAoaS5yZXN1bHQgJiYgaS5yZXN1bHQucmVzdWx0KSA/IGkucmVzdWx0LnJlc3VsdCA6IHVuZGVmaW5lZCkpKVxuICB9XG5cbiAgb3ZlcnJpZGUgcG9zdDxUPihuYW1lOiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFueSA9IHt9LFxuICAgICAgICAgICAgICAgICAgIHRleHRFcnJvciA9ICcnLFxuICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiBpSHR0cFBhcmFtU2V0dGluZ3MgPSB0aGlzLmRlZlNldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFBvc3Q8VD4odGhpcy5nZXROYW1lTWV0aG9kKG5hbWUpLCBwYXJhbXMsIHRleHRFcnJvciwgc2V0dGluZ3MpXG4gIH1cblxuICBvdmVycmlkZSBnZXQ8VD4obmFtZTogc3RyaW5nW10sXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IGFueSA9IHt9LFxuICAgICAgICAgICAgICAgICAgdGV4dEVycm9yID0gJycsXG4gICAgICAgICAgICAgICAgICBzZXR0aW5nczogaUh0dHBQYXJhbVNldHRpbmdzID0gdGhpcy5kZWZTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmh0dHBHZXQ8VD4odGhpcy5nZXROYW1lTWV0aG9kKG5hbWUpLCBwYXJhbXMsIHRleHRFcnJvciwgc2V0dGluZ3MpXG4gIH1cblxuICBvdmVycmlkZSBodHRwUG9zdDxUPih1cmw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBhbnkgPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVycm9yID0gJycsXG4gICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiBpSHR0cFBhcmFtU2V0dGluZ3MgPSB0aGlzLmRlZlNldHRpbmdzXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0QXV0aFBhcmFtcygpLnBpcGUoXG4gICAgICBtZXJnZU1hcChhdXRoID0+IHtcbiAgICAgICAgaWYgKGF1dGgpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXNDbG9uZSA9IGNsb25lKHBhcmFtcylcbiAgICAgICAgICBwYXJhbXNDbG9uZVt0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXSA9IGF1dGhcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQgfCB1bmRlZmluZWQ+KFxuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUJhc2VBZGRyZXNzKHYpICsgdXJsLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SHR0cFBhcmFtc1Bvc3QocGFyYW1zQ2xvbmUsIG5ldyBGb3JtRGF0YSgpLCBmYWxzZSwgW10sIHNldHRpbmdzKSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGV4dEVycm9yLmxlbmd0aCAmJiBlcnIuZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0RXJyb3IgPSBlcnIuZXJyb3IuZXJyb3JfZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuZXJyb3IoJ9Ce0YjQuNCx0LrQsDogJyArIHRleHRFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAnZ2V0IGJhc2UgdXJsIGVycm9yJylcbiAgICAgICAgICB9KSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLmVycm9yKCdFcnJvcjogQXV0aCBub3QgZ2V0JylcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAnYXV0aCBub3QgZ2V0JylcbiAgICAgICAgfVxuICAgICAgfSkpXG4gIH1cblxuICBvdmVycmlkZSBodHRwR2V0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBhcmFtczogYW55ID0ge30sXG4gICAgdGV4dEVycm9yID0gJycsXG4gICAgc2V0dGluZ3M6IGlIdHRwUGFyYW1TZXR0aW5ncyA9IHRoaXMuZGVmU2V0dGluZ3NcbiAgKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRBdXRoUGFyYW1zKCkucGlwZShcbiAgICAgIG1lcmdlTWFwKGF1dGggPT4ge1xuICAgICAgICBpZiAoYXV0aCkge1xuICAgICAgICAgIGlmIChwYXJhbXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxuICAgICAgICAgIHBhcmFtc0Nsb25lW3RoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKCldID0gYXV0aFxuICAgICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgcGFyYW1zOiB0aGlzLmdldEh0dHBQYXJhbXNHZXQocGFyYW1zQ2xvbmUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsKCkucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMucHJlcGFyZUJhc2VBZGRyZXNzKHYpICsgdXJsLCBvcHRpb25zKS5waXBlKFxuICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0RXJyb3IubGVuZ3RoICYmIGVyci5lcnJvci5lcnJvcl9kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHRFcnJvciA9IGVyci5lcnJvci5lcnJvcl9kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5lcnJvcign0J7RiNC40LHQutCwOiAnICsgdGV4dEVycm9yKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpXG4gICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAnZ2V0IGJhc2UgdXJsIGVycm9yJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIuZXJyb3IoJ0Vycm9yOiBBdXRoIG5vdCBnZXQnKVxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdhdXRoIG5vdCBnZXQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIG92ZXJyaWRlIGdldE5hbWVNZXRob2QoYXJyOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhcnIuam9pbignLicpXG4gIH1cblxufVxuXG4iXX0=