bx-rest 1.5.0 → 1.5.1

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 (45) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.en.md +3 -3
  3. package/README.md +3 -3
  4. package/esm2022/functions/mapResult.mjs +4 -2
  5. package/esm2022/map/disk.mjs +13 -0
  6. package/esm2022/map/im/recent.mjs +1 -9
  7. package/esm2022/map/task.mjs +11 -5
  8. package/esm2022/map/tasks/task.mjs +3 -3
  9. package/esm2022/map/tasks.mjs +4 -3
  10. package/esm2022/map/user.mjs +5 -4
  11. package/esm2022/public-api.mjs +1 -1
  12. package/esm2022/request-navvy/bizproc.mjs +2 -2
  13. package/esm2022/request-navvy/pull/config.mjs +1 -3
  14. package/esm2022/request-navvy/task/operation/elapseditem.mjs +8 -65
  15. package/esm2022/rest/map.mjs +3 -3
  16. package/esm2022/services/base.mjs +7 -4
  17. package/esm2022/services/http/HttpBX.mjs +8 -3
  18. package/esm2022/services/navvy/extends/navvy-pag-base.mjs +63 -9
  19. package/esm2022/services/navvy/navvy-alternative-pagination-navigation.mjs +21 -71
  20. package/esm2022/services/navvy/navvy-pag-nav-result-key-object.mjs +10 -49
  21. package/esm2022/services/navvy/navvy-pag-nav-result-key.mjs +14 -73
  22. package/esm2022/services/navvy/navvy-pag-nav-tasks.mjs +4 -76
  23. package/esm2022/services/navvy/navvy-pag-nav-with-useless-key.mjs +10 -76
  24. package/esm2022/services/navvy/navvy-pag.mjs +7 -65
  25. package/esm2022/typification/rest/settings.mjs +1 -1
  26. package/esm2022/typification/rest/user/user.mjs +1 -1
  27. package/fesm2022/bx-rest.mjs +491 -1656
  28. package/fesm2022/bx-rest.mjs.map +1 -1
  29. package/map/disk.d.ts +10 -0
  30. package/map/task.d.ts +3 -3
  31. package/map/tasks/task.d.ts +1 -1
  32. package/map/tasks.d.ts +1 -1
  33. package/package.json +5 -2
  34. package/public-api.d.ts +5 -2
  35. package/request-navvy/pull/config.d.ts +0 -2
  36. package/rest/map.d.ts +2 -2
  37. package/services/navvy/extends/navvy-pag-base.d.ts +16 -2
  38. package/services/navvy/navvy-alternative-pagination-navigation.d.ts +5 -2
  39. package/services/navvy/navvy-pag-nav-result-key-object.d.ts +0 -2
  40. package/services/navvy/navvy-pag-nav-result-key.d.ts +1 -4
  41. package/services/navvy/navvy-pag-nav-tasks.d.ts +2 -9
  42. package/services/navvy/navvy-pag-nav-with-useless-key.d.ts +0 -2
  43. package/services/navvy/navvy-pag.d.ts +0 -2
  44. package/typification/rest/settings.d.ts +1 -0
  45. package/typification/rest/user/user.d.ts +3 -3
@@ -1,12 +1,11 @@
1
+ import { Subscription, of, throwError, from, defer, forkJoin, concatMap, toArray, mergeMap, shareReplay, tap } from 'rxjs';
1
2
  import { switchMap, catchError, map, take, mergeMap as mergeMap$1 } from 'rxjs/operators';
2
- import { Subscription, of, throwError, from, defer, forkJoin, last, shareReplay, mergeMap, concatMap, toArray, map as map$1, tap } from 'rxjs';
3
3
  import clone from 'just-clone';
4
4
  import axios from 'axios';
5
5
  import flatten from 'just-flatten-it';
6
6
  import { stringify } from 'qs-esm';
7
7
  import values from 'just-values';
8
8
  import camelCase from 'just-camel-case';
9
- import { __decorate } from 'tslib';
10
9
 
11
10
  const DEFAULT_BX_REST_SETTINGS = {
12
11
  auth: {
@@ -55,7 +54,9 @@ function BXRestMapResult(v) {
55
54
  return undefined;
56
55
  }
57
56
  function instanceOfiBXRestAnswerSuccess(object) {
58
- return 'result' in object;
57
+ // Без проверки типа `in` бросает TypeError на строке, числе и null вместо false.
58
+ // Строка приходит, если вместо Bitrix ответил прокси: HTML axios отдаёт текстом
59
+ return typeof object === 'object' && object !== null && 'result' in object;
59
60
  }
60
61
 
61
62
  function toLocalAtom(date) {
@@ -215,8 +216,12 @@ function parseDateWithFormat(val, format) {
215
216
  if (month < 1 || month > 12 || day < 1 || day > 31 || hour > 23 || minute > 59 || second > 59) {
216
217
  return null;
217
218
  }
219
+ return buildDate(year, month, day, hour, minute, second);
220
+ }
221
+ /** Собирает дату, отбрасывая несуществующие дни месяца: new Date() превратил бы 31 февраля в 3 марта. */
222
+ function buildDate(year, month, day, hour, minute, second) {
218
223
  const date = new Date(year, month - 1, day, hour, minute, second);
219
- return isNaN(date.getTime()) ? null : date;
224
+ return (isNaN(date.getTime()) || date.getMonth() !== month - 1 || date.getDate() !== day) ? null : date;
220
225
  }
221
226
  /**
222
227
  * Последний резервный разбор — без знания конкретного формата. Работает только для чисто
@@ -259,8 +264,7 @@ function parseDateHeuristically(val) {
259
264
  if (hour > 23 || minute > 59 || second > 59) {
260
265
  return null;
261
266
  }
262
- const date = new Date(year, month - 1, day, hour, minute, second);
263
- return isNaN(date.getTime()) ? null : date;
267
+ return buildDate(year, month, day, hour, minute, second);
264
268
  }
265
269
  /**
266
270
  * Преобразует значение в дату.
@@ -1203,6 +1207,7 @@ class HttpBXServices extends HttpServices {
1203
1207
  // Преобразуем параметры в формат x-www-form-urlencoded
1204
1208
  const bodyString = this.serializeBitrixParams(paramsClone);
1205
1209
  return from(this.axiosInstance.post(fullUrl, bodyString, {
1210
+ withCredentials: this.session.getWithCredentials(),
1206
1211
  headers: this.buildHeaders(headers, { 'Content-Type': 'application/x-www-form-urlencoded' }),
1207
1212
  }).then((response) => response.data));
1208
1213
  }
@@ -1221,22 +1226,26 @@ class HttpBXServices extends HttpServices {
1221
1226
  // авторизации — как в httpPost.
1222
1227
  return withAuthRefresh(defer(() => {
1223
1228
  const paramsClone = clone(params);
1229
+ const key = this.session.getKeyAuth();
1224
1230
  const auth = this.session.getAuthParams();
1225
1231
  const checkIsOn = this.session.getCheckAuthParamsIsOn();
1226
1232
  if (checkIsOn) {
1227
1233
  if (!auth) {
1228
1234
  return throwError(() => this.session.getAuthError('get'));
1229
1235
  }
1230
- paramsClone[this.session.getKeyAuth()] = auth;
1236
+ if (key !== 'OAuth2') {
1237
+ paramsClone[key] = auth;
1238
+ }
1231
1239
  }
1232
1240
  return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
1233
1241
  if (!baseUrl) {
1234
1242
  return throwError(() => this.session.getBaseUrlError('get'));
1235
1243
  }
1236
1244
  const fullUrl = prepareBaseAddress(baseUrl) + url;
1237
- const queryString = new URLSearchParams(paramsClone).toString();
1245
+ const queryString = this.serializeBitrixParams(paramsClone);
1238
1246
  const finalUrl = `${fullUrl}?${queryString}`;
1239
1247
  return from(this.axiosInstance.get(finalUrl, {
1248
+ withCredentials: this.session.getWithCredentials(),
1240
1249
  headers: this.buildHeaders(headers),
1241
1250
  }).then((response) => response.data));
1242
1251
  }));
@@ -1259,6 +1268,19 @@ class HttpBXServices extends HttpServices {
1259
1268
  }
1260
1269
  }
1261
1270
 
1271
+ /** Больше команд в одном запросе `batch` Bitrix не принимает. */
1272
+ const BATCH_COMMANDS_LIMIT = 50;
1273
+ /**
1274
+ * Параметры остальных страниц для методов с постраничной навигацией через `start`.
1275
+ * Отсчёт идёт от `start` самого запроса: первая страница уже получена именно с него.
1276
+ */
1277
+ function offsetPageParams(param, total, pageSize) {
1278
+ const pages = [];
1279
+ for (let start = (Number(param?.start) || 0) + pageSize; start < (total ?? 0); start += pageSize) {
1280
+ pages.push({ ...clone(param), start });
1281
+ }
1282
+ return pages;
1283
+ }
1262
1284
  class NavvyPagBase {
1263
1285
  constructor(url, param, map = undefined, restApi = false) {
1264
1286
  this.url = url;
@@ -1302,13 +1324,7 @@ class NavvyPagBase {
1302
1324
  }
1303
1325
  mapAndError(request, options) {
1304
1326
  const method = this.http.getNameMethod(this.url);
1305
- return request.pipe(map(v => {
1306
- if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
1307
- throw this.apiErrorFromBody(v);
1308
- }
1309
- return BXRestMapResult(v);
1310
- }), catchError((err) => {
1311
- console.error(err);
1327
+ return request.pipe(catchError((err) => {
1312
1328
  if (err instanceof BXRestApiError) {
1313
1329
  throw err;
1314
1330
  }
@@ -1328,6 +1344,14 @@ class NavvyPagBase {
1328
1344
  Object.assign(error, { authRefreshError });
1329
1345
  }
1330
1346
  throw error;
1347
+ }), map(v => {
1348
+ if (v && typeof v !== 'object') {
1349
+ throw this.notRestAnswerError();
1350
+ }
1351
+ if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
1352
+ throw this.apiErrorFromBody(v);
1353
+ }
1354
+ return BXRestMapResult(v);
1331
1355
  }));
1332
1356
  }
1333
1357
  /**
@@ -1336,12 +1360,48 @@ class NavvyPagBase {
1336
1360
  */
1337
1361
  resFirstPage() {
1338
1362
  return this.resVanilla().pipe(map(v => {
1339
- if (v && !instanceOfiBXRestAnswerSuccess(v)) {
1363
+ if (!v || typeof v !== 'object') {
1364
+ throw this.notRestAnswerError();
1365
+ }
1366
+ if (!instanceOfiBXRestAnswerSuccess(v)) {
1340
1367
  throw this.apiErrorFromBody(v);
1341
1368
  }
1342
1369
  return v;
1343
1370
  }));
1344
1371
  }
1372
+ /**
1373
+ * Остальные страницы для `.resAll()`, в порядке `params`. Команды уходят через `batch`,
1374
+ * пакеты — по очереди. Ошибка любой страницы завершает весь запрос: неполный список
1375
+ * выглядел бы для вызывающего кода как полный.
1376
+ */
1377
+ resPages(params) {
1378
+ const method = this.http.getNameMethod(this.url);
1379
+ const commands = params.map(param => method + '?' + serializeBitrixParams(param));
1380
+ const batches = [];
1381
+ for (let i = 0; i < commands.length; i += BATCH_COMMANDS_LIMIT) {
1382
+ batches.push(commands.slice(i, i + BATCH_COMMANDS_LIMIT));
1383
+ }
1384
+ return from(batches).pipe(concatMap(cmd => this.http.post(['batch'], { halt: 1, cmd }, false, this.requestHeaders)), map(answer => this.batchPages(answer)), toArray(), map(pages => pages.flat()));
1385
+ }
1386
+ batchPages(answer) {
1387
+ if (!answer || typeof answer !== 'object') {
1388
+ throw this.notRestAnswerError();
1389
+ }
1390
+ if (!instanceOfiBXRestAnswerSuccess(answer)) {
1391
+ throw this.apiErrorFromBody(answer);
1392
+ }
1393
+ // Портал отдаёт result_error массивом, когда ошибок нет, и объектом с ключами команд, когда есть
1394
+ const failed = Object.values(answer.result?.result_error ?? {})[0];
1395
+ if (failed) {
1396
+ const parsed = parseBXRestErrorBody(failed);
1397
+ throw new BXRestApiError(parsed?.error, parsed?.error_description, { method: this.http.getNameMethod(this.url) });
1398
+ }
1399
+ return Object.values(answer.result?.result ?? {}).filter(Boolean);
1400
+ }
1401
+ // В тексте ошибки — только метод, без тела ответа: это может быть целая HTML-страница
1402
+ notRestAnswerError() {
1403
+ return new Error(`Bitrix24 answered ${this.http.getNameMethod(this.url)} with a body that is not a REST response.`);
1404
+ }
1345
1405
  apiErrorFromBody(v) {
1346
1406
  const parsed = parseBXRestErrorBody(v);
1347
1407
  return new BXRestApiError(parsed ? parsed.error : v.error, parsed ? parsed.error_description : v.error_description, { method: this.http.getNameMethod(this.url) });
@@ -1351,6 +1411,165 @@ class NavvyPagBase {
1351
1411
  class NavvySimple extends NavvyPagBase {
1352
1412
  }
1353
1413
 
1414
+ /**
1415
+ * Класс-прослойка-обработчик для методов работающих на альтернативной постраничной навигации тика как методы по
1416
+ * затраченному времени на задачи https://dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/index.php
1417
+ *
1418
+ * не завершенный класс, работаем от частного к общему
1419
+ */
1420
+ class NavvyAlterPagNav extends NavvyPagBase {
1421
+ resAll() {
1422
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(first.next ? this.pageParams(first.total) : []).pipe(map(pages => {
1423
+ const items = [first.result ?? [], ...pages].flat();
1424
+ return ((this.map ? this.map(items) : items) ?? []);
1425
+ }))),
1426
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
1427
+ shareReplay({ bufferSize: 1, refCount: true }));
1428
+ }
1429
+ /**
1430
+ * Параметры остальных страниц. Размер страницы берётся из запроса: портал ограничивает
1431
+ * его 50 записями, но вызывающий код может попросить и меньше.
1432
+ */
1433
+ pageParams(total = 0) {
1434
+ const nav = this.param.PARAMS?.NAV_PARAMS;
1435
+ const nPageSize = Math.min(nav?.nPageSize || this.pageSize, this.pageSize);
1436
+ const pages = [];
1437
+ for (let iNumPage = (nav?.iNumPage || 1) + 1; iNumPage <= Math.ceil(total / nPageSize); iNumPage++) {
1438
+ pages.push({ ...clone(this.param), PARAMS: { ...this.param.PARAMS, NAV_PARAMS: { ...nav, nPageSize, iNumPage } } });
1439
+ }
1440
+ return pages;
1441
+ }
1442
+ }
1443
+
1444
+ class NavvyPagNavWithUselessKey extends NavvyPagBase {
1445
+ resAll() {
1446
+ return this.resFirstPage().pipe(mergeMap(first => {
1447
+ const params = first.next ? offsetPageParams(this.param, first.total, this.pageSize) : [];
1448
+ return this.resPages(params).pipe(map(pages => {
1449
+ const merged = Object.assign({}, first.result, ...pages);
1450
+ return (this.map ? this.map(merged) : [merged]);
1451
+ }));
1452
+ }));
1453
+ }
1454
+ }
1455
+
1456
+ class NavvyPagNavResultKey extends NavvyPagBase {
1457
+ constructor(url, param, key, map, restApi) {
1458
+ // Без своего map результат — массив по ключу, как и обещают типы `.res()` и `.resAll()`.
1459
+ // Иначе `.res()` отдал бы весь объект `{ items: [...] }`.
1460
+ super(url, param, map ?? (result => (result?.[key] ?? [])), restApi);
1461
+ this.key = key;
1462
+ }
1463
+ resAll() {
1464
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(offsetPageParams(this.param, first.total, this.pageSize)).pipe(map(pages => {
1465
+ const items = [first.result, ...pages].flatMap(page => page?.[this.key] ?? []);
1466
+ const joined = { ...first.result, [this.key]: items };
1467
+ return (this.map?.(joined) ?? []);
1468
+ }))),
1469
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
1470
+ shareReplay({ bufferSize: 1, refCount: true }));
1471
+ }
1472
+ }
1473
+
1474
+ class NavvyPagNavTasks extends NavvyPagNavResultKey {
1475
+ constructor(url, param, map, restApi) {
1476
+ super(url, param, 'tasks', map, restApi);
1477
+ }
1478
+ }
1479
+
1480
+ class NavvyPag extends NavvyPagBase {
1481
+ resAll() {
1482
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(offsetPageParams(this.param, first.total, this.pageSize)).pipe(map(pages => {
1483
+ const items = [first.result ?? [], ...pages].flat();
1484
+ return ((this.map ? this.map(items) : items) ?? []);
1485
+ }))));
1486
+ }
1487
+ }
1488
+
1489
+ /** Пагинация для методов, возвращающих коллекцию как объект с идентификаторами в ключах. */
1490
+ class NavvyPagNavResultKeyObject extends NavvyPagBase {
1491
+ constructor(url, param, key, mapResult) {
1492
+ // Без своего map результат — значения объекта по ключу, как и обещают типы `.res()` и `.resAll()`.
1493
+ super(url, param, mapResult ?? (result => Object.values(result?.[key] ?? {})));
1494
+ this.key = key;
1495
+ }
1496
+ resAll() {
1497
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(offsetPageParams(this.param, first.total, this.pageSize)).pipe(map(pages => {
1498
+ const merged = Object.assign({}, first.result?.[this.key], ...pages.map(page => page[this.key]));
1499
+ return this.map?.({ ...first.result, [this.key]: merged });
1500
+ }))),
1501
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
1502
+ shareReplay({ bufferSize: 1, refCount: true }));
1503
+ }
1504
+ }
1505
+
1506
+ class NavvySupport {
1507
+ constructor(requestClass) {
1508
+ this.requestClass = requestClass;
1509
+ this.pageSize = 50; // стандартный размер страницы
1510
+ }
1511
+ mapAndError(request) {
1512
+ return request.pipe(map(v => BXRestMapResult(v)), catchError((err) => {
1513
+ console.error(err);
1514
+ throw new Error((err.error) ? err.error : err);
1515
+ }));
1516
+ }
1517
+ }
1518
+
1519
+ class Navvy {
1520
+ simple(url, arg, map) {
1521
+ return new NavvySimple(url, arg !== undefined ? arg : undefined, map);
1522
+ }
1523
+ simpleV3(url, arg, map) {
1524
+ return new NavvySimple(url, arg !== undefined ? arg : undefined, map, true);
1525
+ }
1526
+ /**
1527
+ * Новый, пока тестируемый метод для api методов с пагинацией
1528
+ *
1529
+ * @param url
1530
+ * @param arg
1531
+ * @param map
1532
+ * @constructor
1533
+ */
1534
+ pagNav(url, arg, map) {
1535
+ return new NavvyPag(url, arg, map);
1536
+ }
1537
+ // old PagNav
1538
+ // PagNav<T, R, A extends iBXRestPagination>(
1539
+ // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
1540
+ // arg: A,
1541
+ // map: ((param: T[] | undefined) => R[] | undefined) | undefined) {
1542
+ // return new NavvyPagNav(this.requestClass, this.mapClass, func, arg, map)
1543
+ // }
1544
+ // Batch<T, R, A extends iBXRestPagination>(
1545
+ // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
1546
+ // arg: A,
1547
+ // map: ((param: T[] | undefined) => R[] | undefined) | undefined) {
1548
+ // return new NavvyBatch(this.requestClass, this.mapClass, func, arg, map)
1549
+ // }
1550
+ pagNavTasks(url,
1551
+ // func: (param: A) => Observable<iBXRestAnswer<{tasks: T[] | undefined}> | undefined>,
1552
+ arg, map) {
1553
+ return new NavvyPagNavTasks(url, arg, map);
1554
+ }
1555
+ pagNavResultKey(url, arg, key, map) {
1556
+ return new NavvyPagNavResultKey(url, arg, key, map);
1557
+ }
1558
+ pagNavResultKeyObject(url, arg, key, map) {
1559
+ return new NavvyPagNavResultKeyObject(url, arg, key, map);
1560
+ }
1561
+ pagNavWithUselessKey(url,
1562
+ // func: (param: A) => Observable<iBXRestAnswer<{ [key: string]: T }> | undefined>,
1563
+ arg, map) {
1564
+ return new NavvyPagNavWithUselessKey(url, arg, map);
1565
+ }
1566
+ alterPagNav(url,
1567
+ // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
1568
+ arg, map) {
1569
+ return new NavvyAlterPagNav(url, arg, map);
1570
+ }
1571
+ }
1572
+
1354
1573
  const $get = 'get';
1355
1574
  const $add = 'add';
1356
1575
  const $set = 'set';
@@ -2242,1517 +2461,201 @@ var partNameMethods$1 = /*#__PURE__*/Object.freeze({
2242
2461
  $priceTypeGroup: $priceTypeGroup,
2243
2462
  $priceTypeLang: $priceTypeLang,
2244
2463
  $product: $product,
2245
- $productImage: $productImage,
2246
- $productProperty: $productProperty,
2247
- $productPropertyEnum: $productPropertyEnum,
2248
- $productPropertyFeature: $productPropertyFeature,
2249
- $productPropertySection: $productPropertySection,
2250
- $productrow: $productrow,
2251
- $productrows: $productrows,
2252
- $property: $property,
2253
- $propertyGroup: $propertyGroup,
2254
- $propertyRelation: $propertyRelation,
2255
- $propertyValue: $propertyValue,
2256
- $propertyVariant: $propertyVariant,
2257
- $provider: $provider,
2258
- $public: $public,
2259
- $publication: $publication,
2260
- $publicationFolder: $publicationFolder,
2261
- $pull: $pull,
2262
- $quick: $quick,
2263
- $quote: $quote,
2264
- $ratio: $ratio,
2265
- $reaction: $reaction,
2266
- $read: $read,
2267
- $reading: $reading,
2268
- $recall: $recall,
2269
- $recent: $recent,
2270
- $recipient: $recipient,
2271
- $record: $record,
2272
- $recurring: $recurring,
2273
- $region: $region,
2274
- $register: $register,
2275
- $remove: $remove,
2276
- $removeAttachments: $removeAttachments,
2277
- $removeCard: $removeCard,
2278
- $removeEntities: $removeEntities,
2279
- $removecrmactivity: $removecrmactivity,
2280
- $rename: $rename,
2281
- $renew: $renew,
2282
- $reply: $reply,
2283
- $repo: $repo,
2284
- $report: $report,
2285
- $reports: $reports,
2286
- $repowidget: $repowidget,
2287
- $request: $request,
2288
- $requisite: $requisite,
2289
- $reset: $reset,
2290
- $resolveIdByPublicUrl: $resolveIdByPublicUrl,
2291
- $resource: $resource,
2292
- $resourcetype: $resourcetype,
2293
- $restore: $restore,
2294
- $restoreFromVersion: $restoreFromVersion,
2295
- $result: $result,
2296
- $resume: $resume,
2297
- $revision: $revision,
2298
- $rights: $rights,
2299
- $robot: $robot,
2300
- $role: $role,
2301
- $roundingRule: $roundingRule,
2302
- $sale: $sale,
2303
- $save: $save,
2304
- $schedule: $schedule,
2305
- $schema: $schema,
2306
- $search: $search,
2307
- $searchCrmEntities: $searchCrmEntities,
2308
- $section: $section,
2309
- $send: $send,
2310
- $sendContext: $sendContext,
2311
- $sendMessage: $sendMessage,
2312
- $sender: $sender,
2313
- $senders: $senders,
2314
- $server: $server,
2315
- $service: $service,
2316
- $session: $session,
2317
- $set: $set,
2318
- $setAccessCodes: $setAccessCodes,
2319
- $setDelivery: $setDelivery,
2320
- $setLandingRef: $setLandingRef,
2321
- $setOwner: $setOwner,
2322
- $setQuantity: $setQuantity,
2323
- $setRights: $setRights,
2324
- $setSiteRef: $setSiteRef,
2325
- $setowner: $setowner,
2326
- $settings: $settings,
2327
- $share: $share,
2328
- $sharetouser: $sharetouser,
2329
- $shipment: $shipment,
2330
- $shipmentItem: $shipmentItem,
2331
- $shipmentProperty: $shipmentProperty,
2332
- $shipmentPropertyValue: $shipmentPropertyValue,
2333
- $show: $show,
2334
- $showBlock: $showBlock,
2335
- $sign: $sign,
2336
- $silent: $silent,
2337
- $sip: $sip,
2338
- $site: $site,
2339
- $skip: $skip,
2340
- $sku: $sku,
2341
- $slots: $slots,
2342
- $socialnetwork: $socialnetwork,
2343
- $sonet_group: $sonet_group,
2344
- $source: $source,
2345
- $spam: $spam,
2346
- $stagehistory: $stagehistory,
2347
- $stages: $stages,
2348
- $start: $start,
2349
- $startwatch: $startwatch,
2350
- $startwithsound: $startwithsound,
2351
- $startwithtext: $startwithtext,
2352
- $statistic: $statistic,
2353
- $status: $status,
2354
- $statusLang: $statusLang,
2355
- $statuslist: $statuslist,
2356
- $stop: $stop,
2357
- $stopwatch: $stopwatch,
2358
- $storage: $storage,
2359
- $store: $store,
2360
- $storeProduct: $storeProduct,
2361
- $subscribe: $subscribe,
2362
- $syspage: $syspage,
2363
- $system: $system,
2364
- $tail: $tail,
2365
- $task: $task,
2366
- $tasks: $tasks,
2367
- $telephony: $telephony,
2368
- $template: $template,
2369
- $terminate: $terminate,
2370
- $text: $text,
2371
- $textField: $textField,
2372
- $thread: $thread,
2373
- $time: $time,
2374
- $timeMan: $timeMan,
2375
- $timecontrol: $timecontrol,
2376
- $timeline: $timeline,
2377
- $todo: $todo,
2378
- $trace: $trace,
2379
- $tracking: $tracking,
2380
- $tradeBinding: $tradeBinding,
2381
- $tradePlatform: $tradePlatform,
2382
- $transfer: $transfer,
2383
- $tree: $tree,
2384
- $trigger: $trigger,
2385
- $tts: $tts,
2386
- $type: $type,
2387
- $types: $types,
2388
- $unbind: $unbind,
2389
- $unbindingFromGroup: $unbindingFromGroup,
2390
- $unbindingFromMenu: $unbindingFromMenu,
2391
- $unfavoriteBlock: $unfavoriteBlock,
2392
- $unmute: $unmute,
2393
- $unpay: $unpay,
2394
- $unpin: $unpin,
2395
- $unpinAll: $unpinAll,
2396
- $unpublic: $unpublic,
2397
- $unpublicFolder: $unpublicFolder,
2398
- $unread: $unread,
2399
- $unregister: $unregister,
2400
- $unset: $unset,
2401
- $unsubscribe: $unsubscribe,
2402
- $upBlock: $upBlock,
2403
- $update: $update,
2404
- $updateAttrs: $updateAttrs,
2405
- $updateAvatar: $updateAvatar,
2406
- $updateCards: $updateCards,
2407
- $updateCatalogProduct: $updateCatalogProduct,
2408
- $updateColor: $updateColor,
2409
- $updateContent: $updateContent,
2410
- $updateDeadline: $updateDeadline,
2411
- $updateDescription: $updateDescription,
2412
- $updateFolder: $updateFolder,
2413
- $updateNodes: $updateNodes,
2414
- $updateResponsibleUser: $updateResponsibleUser,
2415
- $updateStyles: $updateStyles,
2416
- $updateTitle: $updateTitle,
2417
- $upload: $upload,
2418
- $uploadFile: $uploadFile,
2419
- $uploadfile: $uploadfile,
2420
- $uploadversion: $uploadversion,
2421
- $url: $url,
2422
- $user: $user,
2423
- $userconsent: $userconsent,
2424
- $userfield: $userfield,
2425
- $userfieldtype: $userfieldtype,
2426
- $users: $users,
2427
- $v1: $v1,
2428
- $v2: $v2,
2429
- $vat: $vat,
2430
- $version: $version,
2431
- $voices: $voices,
2432
- $volatileType: $volatileType,
2433
- $vote: $vote,
2434
- $voximplant: $voximplant,
2435
- $waitlist: $waitlist,
2436
- $workflow: $workflow,
2437
- $workgroup: $workgroup,
2438
- $writing: $writing
2439
- });
2440
-
2441
- class BXRestUserUserfield {
2442
- constructor() {
2443
- this.url = {
2444
- list: [$user, $userfield, $list],
2445
- };
2446
- this.http = new HttpBXServices();
2447
- }
2448
- list() {
2449
- return this.http.post(this.url.list);
2450
- }
2451
- }
2452
-
2453
- class BXRestUser {
2454
- constructor() {
2455
- this.http = new HttpBXServices();
2456
- this.userfield = new BXRestUserUserfield();
2457
- this.url = {
2458
- admin: [$user, 'admin'],
2459
- get: [$user, $get],
2460
- current: [$user, 'current'],
2461
- update: [$user, $update],
2462
- search: [$user, $search],
2463
- access: [$user, 'access'],
2464
- fields: [$user, 'fields'],
2465
- };
2466
- }
2467
- admin() {
2468
- return this.http.post(this.url.admin);
2469
- }
2470
- get(params = {}) {
2471
- return this.http.post(this.url.get, params);
2472
- }
2473
- current() {
2474
- return this.http.post(this.url.current, {});
2475
- }
2476
- update(user) {
2477
- return this.http.post(this.url.update, user);
2478
- }
2479
- search(params) {
2480
- return this.http.post(this.url.search, params);
2481
- }
2482
- access(access) {
2483
- return this.http.post(this.url.access, { ACCESS: access });
2484
- }
2485
- fields() {
2486
- return this.http.post(this.url.fields);
2487
- }
2488
- }
2489
-
2490
- class BXRestListsElement {
2491
- constructor() {
2492
- this.url = {
2493
- add: [$lists, $element, $add],
2494
- get: [$lists, $element, $get],
2495
- };
2496
- this.http = new HttpBXServices();
2497
- }
2498
- get(pram) {
2499
- return this.http.post(this.url.get, pram);
2500
- }
2501
- add(param) {
2502
- return this.http.post(this.url.add, param);
2503
- }
2504
- }
2505
-
2506
- class BXRestListsField {
2507
- constructor() {
2508
- this.url = {
2509
- // /**
2510
- // * Метод создает поле списка
2511
- // */
2512
- // add: [$lists, $field, $add],
2513
- // /**
2514
- // * Метод удаляет поле списка
2515
- // */
2516
- // delete: [$lists, $field, $delete],
2517
- /**
2518
- * Метод возвращает данные поля
2519
- */
2520
- get: [$lists, $field, $get],
2521
- // type: {
2522
- // /**
2523
- // * Метод возвращает доступные типа полей для указанного списка
2524
- // */
2525
- // get: [$lists, $field, $type, $get],
2526
- // },
2527
- // /**
2528
- // * Метод обновляет поле списка
2529
- // */
2530
- // update: [$lists, $field, $update],
2531
- };
2532
- this.http = new HttpBXServices();
2533
- }
2534
- get(param) {
2535
- return this.http.post(this.url.get, param);
2536
- }
2537
- }
2538
-
2539
- class BXRestLists {
2540
- constructor() {
2541
- this.url = {
2542
- // /**
2543
- // * Метод создаёт список
2544
- // */
2545
- // add: [$lists, $add],
2546
- // /**
2547
- // * Метод удаляет список
2548
- // */
2549
- // delete: [$lists, $delete],
2550
- /**
2551
- * Метод возвращает данные по спискам
2552
- */
2553
- get: [$lists, $get],
2554
- // /**
2555
- // * Метод обновляет существующий список
2556
- // */
2557
- // update: [$lists, $update],
2558
- // /**
2559
- // * Метод возвращает id типа инфоблока
2560
- // */
2561
- // getIBlockTypeId: [$lists, $get, $iblock, $type, $id],
2562
- element: {
2563
- /**
2564
- * Метод создаёт элемент списка
2565
- */
2566
- add: [$lists, $element, $add],
2567
- // /**
2568
- // * Метод удаляет элемент списка TODO: Реализовать
2569
- // */
2570
- // delete: [$lists, $element, $delete],
2571
- /**
2572
- * Метод возвращает список элементов или элемент
2573
- */
2574
- get: [$lists, $element, $get],
2575
- // /**
2576
- // * Метод обновляет элемент списка TODO: Реализовать
2577
- // */
2578
- // update: [$lists, $element, $update],
2579
- // /**
2580
- // * Метод возвращает путь к файлу TODO: Реализовать
2581
- // */
2582
- // getFileUrl: [$lists, $element, $get, $file, $url]
2583
- },
2584
- field: {
2585
- // /**
2586
- // * Метод создает поле списка
2587
- // */
2588
- // add: [$lists, $field, $add],
2589
- // /**
2590
- // * Метод удаляет поле списка
2591
- // */
2592
- // delete: [$lists, $field, $delete],
2593
- /**
2594
- * Метод возвращает данные поля
2595
- */
2596
- get: [$lists, $field, $get],
2597
- // type: {
2598
- // /**
2599
- // * Метод возвращает доступные типа полей для указанного списка
2600
- // */
2601
- // get: [$lists, $field, $type, $get],
2602
- // },
2603
- // /**
2604
- // * Метод обновляет поле списка
2605
- // */
2606
- // update: [$lists, $field, $update],
2607
- }
2608
- };
2609
- this.element = new BXRestListsElement();
2610
- this.field = new BXRestListsField();
2611
- this.http = new HttpBXServices();
2612
- }
2613
- // getField(pram: getListFieldParam): Observable<iHttpAnswerBX<FieldItemLists[]> | undefined> {
2614
- // return this.http.post<iHttpAnswerBX<{ [key: string]: FieldItemLists }>>(this.url.field.get, pram)
2615
- // }
2616
- get(param) {
2617
- return this.http.post(this.url.get, param);
2618
- }
2619
- }
2620
-
2621
- class BXRestTaskElapsedItem {
2622
- constructor() {
2623
- this.url = {
2624
- getList: [$task, $elapseditem, $getlist],
2625
- add: [$task, $elapseditem, $add],
2626
- delete: [$task, $elapseditem, $delete],
2627
- isActionAllowed: [$task, $elapseditem, $isactionallowed],
2628
- update: [$task, $elapseditem, $update],
2629
- };
2630
- this.http = new HttpBXServices();
2631
- }
2632
- getList(param = {}) {
2633
- return this.http.post(this.url.getList, param);
2634
- }
2635
- add(param) {
2636
- return this.http.post(this.url.add, param);
2637
- }
2638
- update(param) {
2639
- return this.http.post(this.url.update, param);
2640
- }
2641
- del(param) {
2642
- return this.http.post(this.url.delete, param);
2643
- }
2644
- /**
2645
- * idAction:
2646
- * 1 - ACTION_ELAPSED_TIME_ADD
2647
- * 2 - ACTION_ELAPSED_TIME_MODIFY
2648
- * 3 - ACTION_ELAPSED_TIME_REMOVE
2649
- * ITEMID - обязателен в конечной отправке но не обязателен для ACTION_ELAPSED_TIME_ADD,
2650
- * поэтому этом методе можно ставить "1" например, так же метод может выдавать ошибки о не доступности задачи
2651
- * поэтому рекомендую воспользоваться аналогичным методом в пространстве имен navvy
2652
- * @param param
2653
- */
2654
- isActionAllowed(param) {
2655
- return this.http.post(this.url.isActionAllowed, param);
2656
- }
2657
- }
2658
-
2659
- class BXRestTaskCommentItem {
2660
- constructor() {
2661
- this.url = {
2662
- getManifest: [$task, $commentitem, $getmanifest], // Возвращает список методов и их описание
2663
- getList: [$task, $commentitem, $getlist], // Возвращает список комментариев к задаче
2664
- get: [$task, $commentitem, $get], // Возвращает комментарий к задаче
2665
- add: [$task, $commentitem, $add], // Создает новый комментарий к задаче
2666
- update: [$task, $commentitem, $update], // Обновляет данные комментария
2667
- delete: [$task, $commentitem, $delete], // Удаляет комментарий
2668
- isActionAllowed: [$task, $commentitem, $isactionallowed], // Проверяет, разрешено ли действие
2669
- };
2670
- this.http = new HttpBXServices();
2671
- }
2672
- add(param) {
2673
- return this.http.post(this.url.add, param);
2674
- }
2675
- update(param) {
2676
- return this.http.post(this.url.update, param);
2677
- }
2678
- get(param) {
2679
- return this.http.post(this.url.get, param);
2680
- }
2681
- getlist(param) {
2682
- return this.http.post(this.url.getList, param);
2683
- }
2684
- del(param) {
2685
- return this.http.post(this.url.delete, param);
2686
- }
2687
- }
2688
-
2689
- class BXRestTaskPlanner {
2690
- constructor() {
2691
- this.http = new HttpBXServices();
2692
- }
2693
- getList() {
2694
- return this.http.post([$task, $planner, $getlist]);
2695
- }
2696
- }
2697
-
2698
- class BXRestTaskItemUserField {
2699
- constructor() {
2700
- this.url = {
2701
- getList: [$task, $item, $userfield, 'getlist'],
2702
- };
2703
- this.http = new HttpBXServices();
2704
- }
2705
- getList(param) {
2706
- return this.http.post(this.url.getList, param);
2707
- }
2708
- }
2709
-
2710
- class BXRestTaskItem {
2711
- constructor() {
2712
- this.userField = new BXRestTaskItemUserField();
2713
- }
2714
- }
2715
-
2716
- class BXRestTask {
2717
- constructor() {
2718
- this.elapsedItem = new BXRestTaskElapsedItem();
2719
- this.commentItem = new BXRestTaskCommentItem();
2720
- this.planner = new BXRestTaskPlanner();
2721
- this.item = new BXRestTaskItem();
2722
- }
2723
- }
2724
-
2725
- class BXRestTasksTaskResult {
2726
- constructor() {
2727
- this.url = {
2728
- list: [$tasks, $task, $result, $list],
2729
- addFromComment: [$tasks, $task, $result, 'addFromComment'],
2730
- deleteFromComment: [$tasks, $task, $result, 'deleteFromComment'],
2731
- };
2732
- this.http = new HttpBXServices();
2733
- }
2734
- deleteFromComment(commentID) {
2735
- return this.http.post(this.url.deleteFromComment, { commentId: commentID });
2736
- }
2737
- addFromComment(param) {
2738
- return this.http.post(this.url.addFromComment, param);
2739
- }
2740
- list(param) {
2741
- return this.http.post(this.url.list, param);
2742
- }
2743
- }
2744
-
2745
- class BXRestTasksTask {
2746
- constructor() {
2747
- this.url = {
2748
- add: [$tasks, $task, $add],
2749
- approve: [$tasks, $task, $approve],
2750
- complete: [$tasks, $task, $complete],
2751
- defer: [$tasks, $task, $defer],
2752
- get: [$tasks, $task, $get],
2753
- getFields: [$tasks, $task, $getFields],
2754
- getAccess: [$tasks, $task, $getaccess],
2755
- list: [$tasks, $task, $list],
2756
- update: [$tasks, $task, $update],
2757
- };
2758
- this.result = new BXRestTasksTaskResult();
2759
- this.http = new HttpBXServices();
2760
- }
2761
- add(param) {
2762
- return this.http.post(this.url.add, param);
2763
- }
2764
- approve(param) {
2765
- return this.http.post(this.url.approve, param);
2766
- }
2767
- complete(param) {
2768
- return this.http.post(this.url.complete, param);
2769
- }
2770
- defer(param) {
2771
- return this.http.post(this.url.defer, param);
2772
- }
2773
- update(param) {
2774
- return this.http.post(this.url.update, param);
2775
- }
2776
- get(param) {
2777
- return this.http.post(this.url.get, param);
2778
- }
2779
- list(param) {
2780
- return this.http.post(this.url.list, param);
2781
- }
2782
- /*
2783
- listArray(requestArray: RequestApiTaskListBX = {}) {
2784
- return this.list(requestArray).pipe(
2785
- map(v => this.http.mapResult(v)),
2786
- map(v => (v && v.tasks) ? v.tasks : [])
2787
- )
2788
- }
2789
-
2790
- listAll(requestArray: RequestApiTaskListBX = {}, cache = false): Observable<TaskBX[]> {
2791
- if (!requestArray.select) {
2792
- requestArray.select = this.def.select
2793
- if (cache) {
2794
- return this.storeTask$.pipe(
2795
- take(1),
2796
- mergeMap(tasks => {
2797
- if (tasks && tasks.data.http.list && requestArray.filter && requestArray.filter.ID) {
2798
- const ids = (typeof requestArray.filter.ID === 'number') ? [requestArray.filter.ID] : requestArray.filter.ID
2799
- let filter = tasks.data.http.list.filter(i => (i.id) ? ids.includes(i.id) : false)
2800
- if (filter.length === ids.length) {
2801
- return of(filter)
2802
- }
2803
- }
2804
- return this.getEndListArray(requestArray)
2805
- })
2806
- )
2807
- }
2808
- return this.getEndListArray(requestArray)
2809
- }
2810
- return this.getEndListArray(requestArray)
2811
- }
2812
-
2813
- getEndListArray(requestArray: RequestApiTaskListBX): Observable<TaskBX[]> {
2814
- return this.list(requestArray).pipe(
2815
- mergeMap((items: AnswerApiTaskBX | undefined): ObservableInput<any> | Observable<AnswerApiTaskBX[]> => {
2816
- if (items && items.result && typeof items.result.tasks === 'object') {
2817
- const items$ = of(items.result.tasks)
2818
- if (items.next) {
2819
- this.nowLoad$.next({
2820
- total: (items.total) ? items.total : 0,
2821
- next: items.next
2822
- })
2823
- requestArray.start = items.next
2824
- return this.getEndListArray(requestArray).pipe(
2825
- map(vEnd => {
2826
- if (vEnd && items.result.tasks) {
2827
- return [...items.result.tasks, ...vEnd]
2828
- }
2829
- return (items.result.tasks) ? items.result.tasks : []
2830
- }))
2831
- }
2832
- this.nowLoad$.next({
2833
- total: 0,
2834
- next: 0
2835
- })
2836
- return items$
2837
- } else {
2838
- return of([])
2839
- }
2840
- })
2841
- )
2842
- }
2843
- */
2844
- getFields() {
2845
- return this.http.post(this.url.getFields);
2846
- }
2847
- getAccess(param) {
2848
- return this.http.post(this.url.getAccess, param);
2849
- }
2850
- }
2851
-
2852
- class BXRestTasks {
2853
- constructor() {
2854
- this.task = new BXRestTasksTask();
2855
- }
2856
- }
2857
-
2858
- class BXRestDiskFile {
2859
- constructor() {
2860
- this.url = {
2861
- get: [$disk, $file, $get],
2862
- markDeleted: [$disk, $file, $markdeleted],
2863
- };
2864
- this.http = new HttpBXServices();
2865
- }
2866
- get(param) {
2867
- return this.http.post(this.url.get, param);
2868
- }
2869
- markDeleted(param) {
2870
- return this.http.post(this.url.markDeleted, param);
2871
- }
2872
- }
2873
-
2874
- class BXRestDiskFolder {
2875
- constructor() {
2876
- this.url = {
2877
- getFields: [$disk, $folder, $getFields],
2878
- get: [$disk, $folder, $get],
2879
- getChildren: [$disk, $folder, $getchildren],
2880
- addSubFolder: [$disk, $folder, 'addsubfolder'],
2881
- copyTo: [$disk, $folder, $copyto],
2882
- moveTo: [$disk, $folder, $moveto],
2883
- rename: [$disk, $folder, $rename],
2884
- deleteTree: [$disk, $folder, 'deletetree'],
2885
- markDeleted: [$disk, $folder, $markdeleted],
2886
- restore: [$disk, $folder, $restore],
2887
- uploadFile: [$disk, $folder, $uploadfile],
2888
- getExternalLink: [$disk, $folder, 'getExternalLink'],
2889
- };
2890
- this.http = new HttpBXServices();
2891
- }
2892
- /**
2893
- * Возвращает папку по идентификатору
2894
- *
2895
- * @param param
2896
- */
2897
- get(param) {
2898
- return this.http.post(this.url.get, param);
2899
- }
2900
- /**
2901
- * Создает дочернюю папку
2902
- *
2903
- * @param param
2904
- */
2905
- addSubFolder(param) {
2906
- return this.http.post(this.url.addSubFolder, param);
2907
- }
2908
- /**
2909
- * Копирует папку в указанную папку
2910
- *
2911
- * @param param
2912
- */
2913
- copyTo(param) {
2914
- return this.http.post(this.url.copyTo, param);
2915
- }
2916
- /**
2917
- * Перемещает папку в указанную папку
2918
- *
2919
- * @param param
2920
- */
2921
- moveTo(param) {
2922
- return this.http.post(this.url.moveTo, param);
2923
- }
2924
- /**
2925
- * Переименовывает папку
2926
- *
2927
- * @param param
2928
- */
2929
- rename(param) {
2930
- return this.http.post(this.url.rename, param);
2931
- }
2932
- /**
2933
- * Уничтожает папку и всё её дочерние элементы навсегда
2934
- * В ответе 'result': true - успешное уничтожение папки
2935
- *
2936
- * @param param
2937
- */
2938
- deleteTree(param) {
2939
- return this.http.post(this.url.deleteTree, param);
2940
- }
2941
- /**
2942
- * Перемещает папку в корзину
2943
- *
2944
- * @param param
2945
- */
2946
- markDeleted(param) {
2947
- return this.http.post(this.url.markDeleted, param);
2948
- }
2949
- /**
2950
- * Восстанавливает папку из корзины
2951
- *
2952
- * @param param
2953
- */
2954
- restore(param) {
2955
- return this.http.post(this.url.restore, param);
2956
- }
2957
- /**
2958
- * Метод возвращает публичную ссылку
2959
- *
2960
- * @param param
2961
- */
2962
- getExternalLink(param) {
2963
- return this.http.post(this.url.restore, param);
2964
- }
2965
- /**
2966
- * Возвращает описание полей папки
2967
- */
2968
- getFields() {
2969
- return this.http.post(this.url.getFields);
2970
- }
2971
- /**
2972
- * Загружает новый файл в указанную папку
2973
- *
2974
- * @param param
2975
- */
2976
- uploadFile(param) {
2977
- return this.http.post(this.url.uploadFile, param);
2978
- }
2979
- /**
2980
- * Возвращает список файлов и папок, которые находятся непосредственно в папке
2981
- *
2982
- * @param param
2983
- */
2984
- getChildren(param) {
2985
- return this.http.post(this.url.getChildren, param);
2986
- }
2987
- }
2988
-
2989
- class BXRestDiskAttachedObject {
2990
- constructor() {
2991
- this.url = {
2992
- get: [$disk, 'attachedObject', $get],
2993
- };
2994
- this.http = new HttpBXServices();
2995
- }
2996
- get(param) {
2997
- return this.http.post(this.url.get, param);
2998
- }
2999
- }
3000
-
3001
- class BXRestDisk {
3002
- constructor() {
3003
- this.file = new BXRestDiskFile();
3004
- this.folder = new BXRestDiskFolder();
3005
- this.attachedObject = new BXRestDiskAttachedObject();
3006
- }
3007
- }
3008
-
3009
- class BXRestBizProcWorkflowInstance {
3010
- }
3011
-
3012
- class BXRestBizProcWorkflowTemplate {
3013
- }
3014
-
3015
- class HttpNavvyServices {
3016
- constructor() {
3017
- this.httpServices = new HttpBXServices();
3018
- }
3019
- // Реализация метода
3020
- post(url, params) {
3021
- if (params === undefined) {
3022
- params = {};
3023
- }
3024
- return this.httpServices.post(url, params);
3025
- }
3026
- }
3027
-
3028
- class BXRestBizProcWorkflow {
3029
- constructor() {
3030
- this.instances = new BXRestBizProcWorkflowInstance();
3031
- this.template = new BXRestBizProcWorkflowTemplate();
3032
- this.http = new HttpNavvyServices();
3033
- }
3034
- /**
3035
- * Запускает Бизнес-процесс
3036
- */
3037
- start(param) {
3038
- return this.http.post([$bizproc, $workflow, $start], param);
3039
- }
3040
- }
3041
-
3042
- class BXRestBizProcActivity {
3043
- }
3044
-
3045
- class BXRestBizProcTask {
3046
- }
3047
-
3048
- class BXRestBizProcRobot {
3049
- }
3050
-
3051
- class BXRestBizProcEvent {
3052
- }
3053
-
3054
- class BXRestBizProc {
3055
- constructor() {
3056
- this.workflow = new BXRestBizProcWorkflow();
3057
- this.activity = new BXRestBizProcActivity();
3058
- this.task = new BXRestBizProcTask();
3059
- this.robot = new BXRestBizProcRobot();
3060
- this.event = new BXRestBizProcEvent();
3061
- }
3062
- }
3063
-
3064
- class BXRestLogBlogPost {
3065
- constructor() {
3066
- this.url = {
3067
- add: [$log, $blogpost, $add],
3068
- get: [$log, $blogpost, $get],
3069
- };
3070
- this.http = new HttpBXServices();
3071
- }
3072
- add(param) {
3073
- return this.http.post(this.url.add, param);
3074
- }
3075
- get(param = {}) {
3076
- return this.http.post(this.url.get, param);
3077
- }
3078
- }
3079
-
3080
- class BXRestLogBlogComment {
3081
- }
3082
-
3083
- class BXRestLog {
3084
- constructor() {
3085
- this.blogPost = new BXRestLogBlogPost();
3086
- this.blogComment = new BXRestLogBlogComment();
3087
- }
3088
- }
3089
-
3090
- class BXRestSonetGroup {
3091
- constructor() {
3092
- this.url = {
3093
- get: [$sonet_group, $get],
3094
- };
3095
- this.http = new HttpBXServices();
3096
- }
3097
- // // TODO: filter и select позже нормально описать
3098
- // getList(filter: any = {}, select: iWorkgroupFields[] = ['ID', 'NAME']){
3099
- // return this.httpPost<iHttpAnswerBX<{workgroups: iListWorkgroup[]}>>(
3100
- // this.url.get,
3101
- // {
3102
- // order: select,
3103
- // filter: filter
3104
- // }
3105
- // )
3106
- // }
3107
- get(param = {}) {
3108
- return this.http.post(this.url.get, param);
3109
- }
3110
- }
3111
-
3112
- class BXRestServer {
3113
- constructor() {
3114
- this.http = new HttpBXServices();
3115
- this.url = {
3116
- time: [$server, $time],
3117
- };
3118
- }
3119
- time() {
3120
- return this.http.post(this.url.time);
3121
- }
3122
- }
3123
-
3124
- class BXRestDepartment {
3125
- constructor() {
3126
- this.url = {
3127
- get: [$department, $get],
3128
- del: [$department, $delete],
3129
- add: [$department, $add],
3130
- update: [$department, $update],
3131
- };
3132
- this.http = new HttpBXServices();
3133
- }
3134
- get(param = {}) {
3135
- return this.http.post(this.url.get, param);
3136
- }
3137
- add(param) {
3138
- return this.http.post(this.url.add, param);
3139
- }
3140
- del(param) {
3141
- return this.http.post(this.url.del, param);
3142
- }
3143
- update(param) {
3144
- return this.http.post(this.url.update, param);
3145
- }
3146
- }
3147
-
3148
- class BXRestApp {
3149
- constructor() {
3150
- this.http = new HttpBXServices();
3151
- }
3152
- /**
3153
- * Показ информации о приложении. Метод поддерживает безопасный вызов
3154
- */
3155
- info() {
3156
- return this.http.post(['app', 'info']);
3157
- }
3158
- }
3159
-
3160
- class BXRestSocialNetWorkApiContentView {
3161
- constructor() {
3162
- this.url = {
3163
- set: [$socialnetwork, $api, 'contentView', $set],
3164
- };
3165
- this.http = new HttpBXServices();
3166
- }
3167
- set(param) {
3168
- return this.http.post(this.url.set, param);
3169
- }
3170
- }
3171
-
3172
- class BXRestSocialNetWorkApiLiveFeedBlogPostImportant {
3173
- constructor() {
3174
- this.url = {
3175
- vote: [$socialnetwork, $api, 'liveFeed', 'blogPost', 'important', 'vote'],
3176
- };
3177
- this.http = new HttpBXServices();
3178
- }
3179
- vote(param) {
3180
- return this.http.post(this.url.vote, param);
3181
- }
3182
- }
3183
-
3184
- class BXRestSocialNetWorkApiLiveFeedBlogPost {
3185
- constructor() {
3186
- this.important = new BXRestSocialNetWorkApiLiveFeedBlogPostImportant();
3187
- }
3188
- }
3189
-
3190
- class BXRestSocialNetWorkApiLiveFeed {
3191
- constructor() {
3192
- this.blogPost = new BXRestSocialNetWorkApiLiveFeedBlogPost();
3193
- }
3194
- }
3195
-
3196
- class BXRestSocialNetWorkApi {
3197
- constructor() {
3198
- this.contentView = new BXRestSocialNetWorkApiContentView();
3199
- this.liveFeed = new BXRestSocialNetWorkApiLiveFeed();
3200
- }
3201
- }
3202
-
3203
- class BXRestSocialNetWork {
3204
- constructor() {
3205
- // private http = new HttpBXServices)
3206
- this.api = new BXRestSocialNetWorkApi();
3207
- }
3208
- }
3209
-
3210
- class BXRestPullApplicationConfig {
3211
- constructor() {
3212
- this.http = new HttpBXServices();
3213
- }
3214
- get() {
3215
- return this.http.post([$pull, $application, $config, $get]);
3216
- }
3217
- }
3218
-
3219
- class BXRestPullConfig {
3220
- constructor() {
3221
- this.http = new HttpBXServices();
3222
- this.config = new BXRestPullApplicationConfig();
3223
- }
3224
- get() {
3225
- return this.http.post([$pull, $config, $get]);
3226
- }
3227
- }
3228
-
3229
- class BXRestPullChannelPublic {
3230
- constructor() {
3231
- this.http = new HttpBXServices();
3232
- /**
3233
- * Пес его знает что за метод такой, судя по коду нужно всю инфу json объектом о пользователе передать,
3234
- * но это не точно
3235
- */
3236
- // list() {
3237
- // return this.http.post<iBXRestPullChannelPublicGetHttp>([$pull, $channel, $public, $list])
3238
- // }
3239
- }
3240
- get() {
3241
- return this.http.post([$pull, $channel, $public, $get]);
3242
- }
3243
- }
3244
-
3245
- class BXRestPull {
3246
- constructor() {
3247
- this.config = new BXRestPullConfig();
3248
- this.channel = {
3249
- public: new BXRestPullChannelPublic()
3250
- };
3251
- }
3252
- }
3253
-
3254
- class BXRest {
3255
- constructor() {
3256
- this.http = new HttpBXServices();
3257
- this.user = new BXRestUser();
3258
- this.lists = new BXRestLists();
3259
- this.task = new BXRestTask();
3260
- this.tasks = new BXRestTasks();
3261
- this.disk = new BXRestDisk();
3262
- this.bizProc = new BXRestBizProc();
3263
- this.log = new BXRestLog();
3264
- this.sonet_group = new BXRestSonetGroup();
3265
- this.server = new BXRestServer();
3266
- this.department = new BXRestDepartment();
3267
- this.app = new BXRestApp();
3268
- this.socialNetWork = new BXRestSocialNetWork();
3269
- this.pull = new BXRestPull();
3270
- }
3271
- profile() {
3272
- return this.http.post(['profile']);
3273
- }
3274
- batch(param, headers) {
3275
- return this.http.post(['batch'], param, false, headers);
3276
- }
3277
- }
3278
-
3279
- /**
3280
- * Класс-прослойка-обработчик для методов работающих на альтернативной постраничной навигации тика как методы по
3281
- * затраченному времени на задачи https://dev.1c-bitrix.ru/rest_help/tasks/task/elapseditem/index.php
3282
- *
3283
- * не завершенный класс, работаем от частного к общему
3284
- */
3285
- class NavvyAlterPagNav extends NavvyPagBase {
3286
- resAll() {
3287
- let save = [];
3288
- return this.resultAllEnd()
3289
- .pipe(map(v => {
3290
- if (v) {
3291
- save.push(...v);
3292
- }
3293
- return save;
3294
- }), last(), shareReplay(1));
3295
- }
3296
- resultAllEnd() {
3297
- let BXRestClass = new BXRest();
3298
- // return this.mapForVanillaEnd(this.func, this.param)
3299
- return this.resFirstPage().pipe(mergeMap(items => {
3300
- if (items && instanceOfiBXRestAnswerSuccess(items)) {
3301
- if (items.total && items.next) {
3302
- const count = [...Array(Math.floor(items.total / this.pageSize)).keys()];
3303
- // Разделяем массив на блоки
3304
- const chunks = [];
3305
- for (let i = 0; i < count.length; i += this.pageSize) {
3306
- chunks.push(count.slice(i, i + this.pageSize));
3307
- }
3308
- const batchRequests = chunks.map(chunk => {
3309
- return BXRestClass.batch({
3310
- halt: 1,
3311
- cmd: chunk.map(i => {
3312
- const param = clone(this.param);
3313
- if (!param.PARAMS) {
3314
- param.PARAMS = {
3315
- NAV_PARAMS: {
3316
- iNumPage: 0,
3317
- nPageSize: 50
3318
- }
3319
- };
3320
- }
3321
- // Устанавливаем start в зависимости от индекса
3322
- param.PARAMS.NAV_PARAMS.iNumPage = i + 2; // первая страница уже есть, старт со второй
3323
- // Формируем строку запроса
3324
- return this.http.getNameMethod(this.url)
3325
- + '?' + serializeBitrixParams(param);
3326
- })
3327
- }, this.requestHeaders);
3328
- });
3329
- return from(batchRequests).pipe(concatMap(request => request), // Выполняет запросы по очереди
3330
- toArray(), // Собирает все результаты в массив
3331
- map(results => {
3332
- const res = items.result;
3333
- for (let result of results) {
3334
- if (result && instanceOfiBXRestAnswerSuccess(result) && result.result && result.result.result) {
3335
- res.push(...result.result.result.map(i => i).flat());
3336
- }
3337
- }
3338
- return (this.map) ?
3339
- this.map(res)
3340
- : res;
3341
- }));
3342
- }
3343
- }
3344
- return this.mapResultForGetAll(items);
3345
- }), catchError(err => {
3346
- // this.snackBar.error("Проблемы с поточным получение затреканого времени")
3347
- console.error(err);
3348
- return throwError(() => err);
3349
- }));
3350
- }
3351
- mapResultForGetAll(items) {
3352
- return (instanceOfiBXRestAnswerSuccess(items)) ? from([items.result]).pipe(map(v => (v && this.map) ? this.map(v) : v)) : from([]);
3353
- }
3354
- }
3355
-
3356
- class NavvyPagNavWithUselessKey extends NavvyPagBase {
3357
- constructor() {
3358
- super(...arguments);
3359
- this.save = [];
3360
- }
3361
- resAll() {
3362
- let BXRestClass = new BXRest();
3363
- return this.resFirstPage().pipe(mergeMap(items => {
3364
- if (items && instanceOfiBXRestAnswerSuccess(items)) {
3365
- if (items.total && items.next) {
3366
- const count = [...Array(Math.floor(items.total / this.pageSize)).keys()];
3367
- // Разделяем массив на блоки
3368
- const chunks = [];
3369
- for (let i = 0; i < count.length; i += this.pageSize) {
3370
- chunks.push(count.slice(i, i + this.pageSize));
3371
- }
3372
- const batchRequests = chunks.map(chunk => {
3373
- return BXRestClass.batch({
3374
- halt: 1,
3375
- cmd: chunk.map(i => {
3376
- const param = clone(this.param);
3377
- // Устанавливаем start в зависимости от индекса
3378
- param.start = (i + 1) * this.pageSize;
3379
- // Формируем строку запроса
3380
- return this.http.getNameMethod(this.url)
3381
- + '?' + serializeBitrixParams(param);
3382
- })
3383
- }, this.requestHeaders).pipe(map(v => {
3384
- if (v && instanceOfiBXRestAnswerSuccess(v) && v.result && v.result.result && items.result) {
3385
- return Object.assign({}, items.result, v.result.result);
3386
- }
3387
- throw new Error('wrong batch');
3388
- }));
3389
- });
3390
- return from(batchRequests).pipe(concatMap(request => request), // Выполняет запросы по очереди
3391
- toArray()); // Собирает все результаты в массив
3392
- /*
3393
- return this.getAllTaskElapsedItem(func, param).pipe(
3394
- map(vEnd => {
3395
- if (vEnd && vEnd.result && items.result) {
3396
- return merge(clone(vEnd), {result: [...items.result, ...vEnd.result]})
3397
- }
3398
- return items
3399
- })
3400
- )
3401
- */
3402
- }
3403
- else {
3404
- return of([items.result]);
3405
- }
3406
- }
3407
- return of(undefined);
3408
- // return from([BXRestMapResult(items)])
3409
- // as ReturnType<Observable<T | undefined>, Observable<R | undefined>>
3410
- }), map(v => {
3411
- if (v) {
3412
- const mergedObject = v.reduce((acc, obj) => {
3413
- return { ...acc, ...obj };
3414
- }, {});
3415
- if (this.map) {
3416
- return this.map(mergedObject);
3417
- }
3418
- this.save.push(...v);
3419
- return this.save;
3420
- }
3421
- return v;
3422
- }), catchError(err => {
3423
- // this.snackBar.error("Проблемы с поточным получение затреканого времени")
3424
- console.error(err);
3425
- return throwError(() => err);
3426
- }));
3427
- }
3428
- }
3429
-
3430
- class NavvyPagNavTasks extends NavvyPagBase {
3431
- constructor(url, param, map, restApi) {
3432
- // Без своего map результат — массив задач, как и обещают типы `.res()` и `.resAll()`.
3433
- super(url, param, map ?? (result => (result?.tasks ?? [])), restApi);
3434
- this.save = [];
3435
- }
3436
- resAll() {
3437
- let save = [];
3438
- return this.resultAllEnd()
3439
- .pipe(map(v => {
3440
- if (v) {
3441
- save.push(...v);
3442
- }
3443
- return save;
3444
- }), last(), shareReplay(1));
3445
- }
3446
- resultAllEnd() {
3447
- let BXRestClass = new BXRest();
3448
- return this.resFirstPage().pipe(mergeMap(items => {
3449
- if (items && instanceOfiBXRestAnswerSuccess(items)) {
3450
- this.save = [];
3451
- // TODO: проверить будет ли быстрее работать метод в случаях когда total < 100 (то есть можно обойтись двумя прямыми запросами)
3452
- if (items.total && items.total > 50) {
3453
- const count = [...Array(Math.floor(items.total / this.pageSize)).keys()];
3454
- // Разделяем массив на блоки
3455
- const chunks = [];
3456
- for (let i = 0; i < count.length; i += this.pageSize) {
3457
- chunks.push(count.slice(i, i + this.pageSize));
3458
- }
3459
- const batchRequests = chunks.map(chunk => {
3460
- return BXRestClass.batch({
3461
- halt: 1,
3462
- cmd: chunk.map(i => {
3463
- const param = clone(this.param);
3464
- // Устанавливаем start в зависимости от индекса
3465
- param.start = (i + 1) * this.pageSize;
3466
- // Формируем строку запроса
3467
- return this.http.getNameMethod(this.url)
3468
- + '?' + serializeBitrixParams(param);
3469
- })
3470
- }, this.requestHeaders);
3471
- });
3472
- return from(batchRequests).pipe(concatMap(request => request), // Выполняет запросы по очереди
3473
- toArray(), // Собирает все результаты в массив
3474
- map(results => {
3475
- if (items.result && items.result.tasks) {
3476
- const res = items.result.tasks;
3477
- for (let result of results) {
3478
- if (result && instanceOfiBXRestAnswerSuccess(result) && result.result && result.result.result) {
3479
- res.push(...result.result.result.filter(i => i).map(i => i.tasks).flat());
3480
- }
3481
- }
3482
- return (this.map) ?
3483
- this.map({ tasks: res })
3484
- : res;
3485
- }
3486
- throw new Error('wrong batch');
3487
- }));
3488
- }
3489
- return this.mapResForGetAll(items);
3490
- }
3491
- return this.mapResForGetAll(items);
3492
- }), catchError(err => {
3493
- console.error(err);
3494
- return throwError(() => err);
3495
- }));
3496
- }
3497
- mapResForGetAll(items) {
3498
- return (instanceOfiBXRestAnswerSuccess(items)) ? from([items.result]).pipe(map(v => (v && this.map) ? this.map(v) : v)) : from([]);
3499
- }
3500
- }
3501
-
3502
- class NavvyPag extends NavvyPagBase {
3503
- constructor() {
3504
- super(...arguments);
3505
- this.save = [];
3506
- }
3507
- resAll() {
3508
- let BXRestClass = new BXRest();
3509
- return this.resFirstPage().pipe(mergeMap(items => {
3510
- if (items && instanceOfiBXRestAnswerSuccess(items)) {
3511
- this.save = [];
3512
- // TODO: проверить будет ли быстрее работать метод в случаях когда total < 100 (то есть можно обойтись двумя прямыми запросами)
3513
- if (items.total && items.total > this.pageSize) {
3514
- const mathFloor = Math.floor(items.total / this.pageSize);
3515
- const count = (mathFloor === items.total / this.pageSize) // если mathFloor равен обычному делению, значит один запрос будет лишним, так как результат первой страницы уже есть, а последняя в данном случаи будет пустая (или с мусорными аднными)
3516
- ? [...Array(mathFloor - 1).keys()]
3517
- : [...Array(mathFloor).keys()];
3518
- // Разделяем массив на блоки
3519
- const chunks = [];
3520
- for (let i = 0; i < count.length; i += this.pageSize) {
3521
- chunks.push(count.slice(i, i + this.pageSize));
3522
- }
3523
- const batchRequests = chunks.map(chunk => {
3524
- return BXRestClass.batch({
3525
- halt: 1,
3526
- cmd: chunk.map(i => {
3527
- const param = clone(this.param);
3528
- // Устанавливаем start в зависимости от индекса
3529
- param.start = (i + 1) * this.pageSize;
3530
- // Формируем строку запроса
3531
- return this.http.getNameMethod(this.url)
3532
- + '?' + serializeBitrixParams(param);
3533
- })
3534
- }, this.requestHeaders).pipe();
3535
- });
3536
- return from(batchRequests).pipe(concatMap(request => request), // Выполняет запросы по очереди
3537
- toArray(), // Собирает все результаты в массив
3538
- map(results => {
3539
- const res = items.result;
3540
- for (let result of results) {
3541
- if (result && instanceOfiBXRestAnswerSuccess(result) && result.result && result.result.result) {
3542
- res.push(...result.result.result.map(i => i).flat());
3543
- }
3544
- }
3545
- return (this.map) ?
3546
- this.map(res)
3547
- : res;
3548
- }));
3549
- }
3550
- return this.mapResForGetAll(items);
3551
- }
3552
- return this.mapResForGetAll(items);
3553
- }), map(v => {
3554
- if (v) {
3555
- this.save.push(...v);
3556
- }
3557
- return this.save;
3558
- }));
3559
- }
3560
- mapResForGetAll(items) {
3561
- return (instanceOfiBXRestAnswerSuccess(items)) ? from([items.result]).pipe(map(v => (v && this.map) ? this.map(v) : v)) : from([]);
3562
- }
3563
- }
3564
-
3565
- class NavvyPagNavResultKey extends NavvyPagBase {
3566
- constructor(url, param, key, map) {
3567
- // Без своего map результат — массив по ключу, как и обещают типы `.res()` и `.resAll()`.
3568
- // Иначе `.res()` отдал бы весь объект `{ items: [...] }`, а `.resAll()` упал бы на нём
3569
- // при 50 записях и меньше: первая страница разворачивается через `save.push(...v)`.
3570
- super(url, param, map ?? (result => (result?.[key] ?? [])));
3571
- this.key = key;
3572
- this.save = [];
3573
- }
3574
- resAll() {
3575
- let save = [];
3576
- return this.resultAllEnd()
3577
- .pipe(map(v => {
3578
- if (v) {
3579
- save.push(...v);
3580
- }
3581
- return save;
3582
- }), last(), shareReplay(1));
3583
- }
3584
- resultAllEnd() {
3585
- let BXRestClass = new BXRest();
3586
- return this.resFirstPage().pipe(mergeMap(items => {
3587
- if (items && instanceOfiBXRestAnswerSuccess(items)) {
3588
- this.save = [];
3589
- if (items.total && items.total > 50) {
3590
- const mathFloor = Math.floor(items.total / this.pageSize);
3591
- const count = (mathFloor === items.total / this.pageSize)
3592
- ? [...Array(mathFloor - 1).keys()]
3593
- : [...Array(mathFloor).keys()];
3594
- const chunks = [];
3595
- for (let i = 0; i < count.length; i += this.pageSize) {
3596
- chunks.push(count.slice(i, i + this.pageSize));
3597
- }
3598
- const batchRequests = chunks.map(chunk => {
3599
- return BXRestClass.batch({
3600
- halt: 1,
3601
- cmd: chunk.map(i => {
3602
- const param = clone(this.param);
3603
- param.start = (i + 1) * this.pageSize;
3604
- return this.http.getNameMethod(this.url)
3605
- + '?' + serializeBitrixParams(param);
3606
- })
3607
- }, this.requestHeaders);
3608
- });
3609
- return from(batchRequests).pipe(concatMap(request => request), toArray(), map(results => {
3610
- const firstPage = items.result?.[this.key];
3611
- if (firstPage) {
3612
- const res = firstPage;
3613
- for (let result of results) {
3614
- if (result && instanceOfiBXRestAnswerSuccess(result) && result.result && result.result.result) {
3615
- res.push(...result.result.result.filter(i => i).map(i => i[this.key]).flat());
3616
- }
3617
- }
3618
- return (this.map) ?
3619
- this.map({ [this.key]: res })
3620
- : res;
3621
- }
3622
- throw new Error('wrong batch');
3623
- }));
3624
- }
3625
- return this.mapResForGetAll(items);
3626
- }
3627
- return this.mapResForGetAll(items);
3628
- }), catchError(err => {
3629
- console.error(err);
3630
- return throwError(() => err);
3631
- }));
3632
- }
3633
- mapResForGetAll(items) {
3634
- return (instanceOfiBXRestAnswerSuccess(items)) ? from([items.result]).pipe(map(v => (v && this.map) ? this.map(v) : v)) : from([]);
3635
- }
3636
- }
3637
-
3638
- /** Пагинация для методов, возвращающих коллекцию как объект с идентификаторами в ключах. */
3639
- class NavvyPagNavResultKeyObject extends NavvyPagBase {
3640
- constructor(url, param, key, mapResult) {
3641
- // Без своего map результат — значения объекта по ключу, как и обещают типы `.res()` и `.resAll()`.
3642
- super(url, param, mapResult ?? (result => Object.values(result?.[key] ?? {})));
3643
- this.key = key;
3644
- }
3645
- resAll() {
3646
- return this.resultAllEnd().pipe(last(), shareReplay(1));
3647
- }
3648
- resultAllEnd() {
3649
- const bxRest = new BXRest();
3650
- return this.resFirstPage().pipe(mergeMap(items => {
3651
- if (!items || !instanceOfiBXRestAnswerSuccess(items)) {
3652
- return from([]);
3653
- }
3654
- if (!items.total || items.total <= this.pageSize) {
3655
- return this.mapResult(items);
3656
- }
3657
- const pageCount = Math.ceil(items.total / this.pageSize);
3658
- const commands = Array.from({ length: pageCount - 1 }, (_, index) => {
3659
- const param = clone(this.param);
3660
- param.start = (index + 1) * this.pageSize;
3661
- return bxRest.batch({
3662
- halt: 1,
3663
- cmd: [this.http.getNameMethod(this.url) + '?' + serializeBitrixParams(param)]
3664
- }, this.requestHeaders);
3665
- });
3666
- return from(commands).pipe(concatMap(request => request), toArray(), mergeMap(results => {
3667
- const merged = { ...(items.result?.[this.key] ?? {}) };
3668
- for (const result of results) {
3669
- if (result && instanceOfiBXRestAnswerSuccess(result)) {
3670
- for (const page of result.result?.result ?? []) {
3671
- Object.assign(merged, page?.[this.key] ?? {});
3672
- }
3673
- }
3674
- }
3675
- return this.mapResult({ result: { [this.key]: merged } });
3676
- }));
3677
- }), catchError(error => {
3678
- console.error(error);
3679
- return throwError(() => error);
3680
- }));
3681
- }
3682
- mapResult(items) {
3683
- if (!instanceOfiBXRestAnswerSuccess(items)) {
3684
- return from([]);
3685
- }
3686
- return from([items.result]).pipe(map$1(value => this.map?.(value)));
3687
- }
3688
- }
3689
-
3690
- class NavvySupport {
3691
- constructor(requestClass) {
3692
- this.requestClass = requestClass;
3693
- this.pageSize = 50; // стандартный размер страницы
3694
- }
3695
- mapAndError(request) {
3696
- return request.pipe(map(v => BXRestMapResult(v)), catchError((err) => {
3697
- console.error(err);
3698
- throw new Error((err.error) ? err.error : err);
3699
- }));
3700
- }
3701
- }
3702
-
3703
- class Navvy {
3704
- simple(url, arg, map) {
3705
- return new NavvySimple(url, arg !== undefined ? arg : undefined, map);
3706
- }
3707
- simpleV3(url, arg, map) {
3708
- return new NavvySimple(url, arg !== undefined ? arg : undefined, map, true);
3709
- }
3710
- /**
3711
- * Новый, пока тестируемый метод для api методов с пагинацией
3712
- *
3713
- * @param url
3714
- * @param arg
3715
- * @param map
3716
- * @constructor
3717
- */
3718
- pagNav(url, arg, map) {
3719
- return new NavvyPag(url, arg, map);
3720
- }
3721
- // old PagNav
3722
- // PagNav<T, R, A extends iBXRestPagination>(
3723
- // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
3724
- // arg: A,
3725
- // map: ((param: T[] | undefined) => R[] | undefined) | undefined) {
3726
- // return new NavvyPagNav(this.requestClass, this.mapClass, func, arg, map)
3727
- // }
3728
- // Batch<T, R, A extends iBXRestPagination>(
3729
- // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
3730
- // arg: A,
3731
- // map: ((param: T[] | undefined) => R[] | undefined) | undefined) {
3732
- // return new NavvyBatch(this.requestClass, this.mapClass, func, arg, map)
3733
- // }
3734
- pagNavTasks(url,
3735
- // func: (param: A) => Observable<iBXRestAnswer<{tasks: T[] | undefined}> | undefined>,
3736
- arg, map) {
3737
- return new NavvyPagNavTasks(url, arg, map);
3738
- }
3739
- pagNavResultKey(url, arg, key, map) {
3740
- return new NavvyPagNavResultKey(url, arg, key, map);
3741
- }
3742
- pagNavResultKeyObject(url, arg, key, map) {
3743
- return new NavvyPagNavResultKeyObject(url, arg, key, map);
3744
- }
3745
- pagNavWithUselessKey(url,
3746
- // func: (param: A) => Observable<iBXRestAnswer<{ [key: string]: T }> | undefined>,
3747
- arg, map) {
3748
- return new NavvyPagNavWithUselessKey(url, arg, map);
3749
- }
3750
- alterPagNav(url,
3751
- // func: (param: A) => Observable<iBXRestAnswer<T[]> | undefined>,
3752
- arg, map) {
3753
- return new NavvyAlterPagNav(url, arg, map);
3754
- }
3755
- }
2464
+ $productImage: $productImage,
2465
+ $productProperty: $productProperty,
2466
+ $productPropertyEnum: $productPropertyEnum,
2467
+ $productPropertyFeature: $productPropertyFeature,
2468
+ $productPropertySection: $productPropertySection,
2469
+ $productrow: $productrow,
2470
+ $productrows: $productrows,
2471
+ $property: $property,
2472
+ $propertyGroup: $propertyGroup,
2473
+ $propertyRelation: $propertyRelation,
2474
+ $propertyValue: $propertyValue,
2475
+ $propertyVariant: $propertyVariant,
2476
+ $provider: $provider,
2477
+ $public: $public,
2478
+ $publication: $publication,
2479
+ $publicationFolder: $publicationFolder,
2480
+ $pull: $pull,
2481
+ $quick: $quick,
2482
+ $quote: $quote,
2483
+ $ratio: $ratio,
2484
+ $reaction: $reaction,
2485
+ $read: $read,
2486
+ $reading: $reading,
2487
+ $recall: $recall,
2488
+ $recent: $recent,
2489
+ $recipient: $recipient,
2490
+ $record: $record,
2491
+ $recurring: $recurring,
2492
+ $region: $region,
2493
+ $register: $register,
2494
+ $remove: $remove,
2495
+ $removeAttachments: $removeAttachments,
2496
+ $removeCard: $removeCard,
2497
+ $removeEntities: $removeEntities,
2498
+ $removecrmactivity: $removecrmactivity,
2499
+ $rename: $rename,
2500
+ $renew: $renew,
2501
+ $reply: $reply,
2502
+ $repo: $repo,
2503
+ $report: $report,
2504
+ $reports: $reports,
2505
+ $repowidget: $repowidget,
2506
+ $request: $request,
2507
+ $requisite: $requisite,
2508
+ $reset: $reset,
2509
+ $resolveIdByPublicUrl: $resolveIdByPublicUrl,
2510
+ $resource: $resource,
2511
+ $resourcetype: $resourcetype,
2512
+ $restore: $restore,
2513
+ $restoreFromVersion: $restoreFromVersion,
2514
+ $result: $result,
2515
+ $resume: $resume,
2516
+ $revision: $revision,
2517
+ $rights: $rights,
2518
+ $robot: $robot,
2519
+ $role: $role,
2520
+ $roundingRule: $roundingRule,
2521
+ $sale: $sale,
2522
+ $save: $save,
2523
+ $schedule: $schedule,
2524
+ $schema: $schema,
2525
+ $search: $search,
2526
+ $searchCrmEntities: $searchCrmEntities,
2527
+ $section: $section,
2528
+ $send: $send,
2529
+ $sendContext: $sendContext,
2530
+ $sendMessage: $sendMessage,
2531
+ $sender: $sender,
2532
+ $senders: $senders,
2533
+ $server: $server,
2534
+ $service: $service,
2535
+ $session: $session,
2536
+ $set: $set,
2537
+ $setAccessCodes: $setAccessCodes,
2538
+ $setDelivery: $setDelivery,
2539
+ $setLandingRef: $setLandingRef,
2540
+ $setOwner: $setOwner,
2541
+ $setQuantity: $setQuantity,
2542
+ $setRights: $setRights,
2543
+ $setSiteRef: $setSiteRef,
2544
+ $setowner: $setowner,
2545
+ $settings: $settings,
2546
+ $share: $share,
2547
+ $sharetouser: $sharetouser,
2548
+ $shipment: $shipment,
2549
+ $shipmentItem: $shipmentItem,
2550
+ $shipmentProperty: $shipmentProperty,
2551
+ $shipmentPropertyValue: $shipmentPropertyValue,
2552
+ $show: $show,
2553
+ $showBlock: $showBlock,
2554
+ $sign: $sign,
2555
+ $silent: $silent,
2556
+ $sip: $sip,
2557
+ $site: $site,
2558
+ $skip: $skip,
2559
+ $sku: $sku,
2560
+ $slots: $slots,
2561
+ $socialnetwork: $socialnetwork,
2562
+ $sonet_group: $sonet_group,
2563
+ $source: $source,
2564
+ $spam: $spam,
2565
+ $stagehistory: $stagehistory,
2566
+ $stages: $stages,
2567
+ $start: $start,
2568
+ $startwatch: $startwatch,
2569
+ $startwithsound: $startwithsound,
2570
+ $startwithtext: $startwithtext,
2571
+ $statistic: $statistic,
2572
+ $status: $status,
2573
+ $statusLang: $statusLang,
2574
+ $statuslist: $statuslist,
2575
+ $stop: $stop,
2576
+ $stopwatch: $stopwatch,
2577
+ $storage: $storage,
2578
+ $store: $store,
2579
+ $storeProduct: $storeProduct,
2580
+ $subscribe: $subscribe,
2581
+ $syspage: $syspage,
2582
+ $system: $system,
2583
+ $tail: $tail,
2584
+ $task: $task,
2585
+ $tasks: $tasks,
2586
+ $telephony: $telephony,
2587
+ $template: $template,
2588
+ $terminate: $terminate,
2589
+ $text: $text,
2590
+ $textField: $textField,
2591
+ $thread: $thread,
2592
+ $time: $time,
2593
+ $timeMan: $timeMan,
2594
+ $timecontrol: $timecontrol,
2595
+ $timeline: $timeline,
2596
+ $todo: $todo,
2597
+ $trace: $trace,
2598
+ $tracking: $tracking,
2599
+ $tradeBinding: $tradeBinding,
2600
+ $tradePlatform: $tradePlatform,
2601
+ $transfer: $transfer,
2602
+ $tree: $tree,
2603
+ $trigger: $trigger,
2604
+ $tts: $tts,
2605
+ $type: $type,
2606
+ $types: $types,
2607
+ $unbind: $unbind,
2608
+ $unbindingFromGroup: $unbindingFromGroup,
2609
+ $unbindingFromMenu: $unbindingFromMenu,
2610
+ $unfavoriteBlock: $unfavoriteBlock,
2611
+ $unmute: $unmute,
2612
+ $unpay: $unpay,
2613
+ $unpin: $unpin,
2614
+ $unpinAll: $unpinAll,
2615
+ $unpublic: $unpublic,
2616
+ $unpublicFolder: $unpublicFolder,
2617
+ $unread: $unread,
2618
+ $unregister: $unregister,
2619
+ $unset: $unset,
2620
+ $unsubscribe: $unsubscribe,
2621
+ $upBlock: $upBlock,
2622
+ $update: $update,
2623
+ $updateAttrs: $updateAttrs,
2624
+ $updateAvatar: $updateAvatar,
2625
+ $updateCards: $updateCards,
2626
+ $updateCatalogProduct: $updateCatalogProduct,
2627
+ $updateColor: $updateColor,
2628
+ $updateContent: $updateContent,
2629
+ $updateDeadline: $updateDeadline,
2630
+ $updateDescription: $updateDescription,
2631
+ $updateFolder: $updateFolder,
2632
+ $updateNodes: $updateNodes,
2633
+ $updateResponsibleUser: $updateResponsibleUser,
2634
+ $updateStyles: $updateStyles,
2635
+ $updateTitle: $updateTitle,
2636
+ $upload: $upload,
2637
+ $uploadFile: $uploadFile,
2638
+ $uploadfile: $uploadfile,
2639
+ $uploadversion: $uploadversion,
2640
+ $url: $url,
2641
+ $user: $user,
2642
+ $userconsent: $userconsent,
2643
+ $userfield: $userfield,
2644
+ $userfieldtype: $userfieldtype,
2645
+ $users: $users,
2646
+ $v1: $v1,
2647
+ $v2: $v2,
2648
+ $vat: $vat,
2649
+ $version: $version,
2650
+ $voices: $voices,
2651
+ $volatileType: $volatileType,
2652
+ $vote: $vote,
2653
+ $voximplant: $voximplant,
2654
+ $waitlist: $waitlist,
2655
+ $workflow: $workflow,
2656
+ $workgroup: $workgroup,
2657
+ $writing: $writing
2658
+ });
3756
2659
 
3757
2660
  class BXRestNavvyUserUserfield {
3758
2661
  constructor() {
@@ -3801,8 +2704,9 @@ class BXRestMapUser {
3801
2704
  let res = Object.assign(clone(user), {
3802
2705
  ID: toNum(user.ID),
3803
2706
  IS_ONLINE: toBool(user.IS_ONLINE),
3804
- DATE_REGISTER: toDate(user.DATE_REGISTER),
3805
- PERSONAL_BIRTHDAY: toDate(user.PERSONAL_BIRTHDAY),
2707
+ // Дня рождения может не быть вовсе (пустая строка), а при урезанном scope нет и самих полей
2708
+ DATE_REGISTER: user.DATE_REGISTER ? toDate(user.DATE_REGISTER) : undefined,
2709
+ PERSONAL_BIRTHDAY: user.PERSONAL_BIRTHDAY ? toDate(user.PERSONAL_BIRTHDAY) : undefined,
3806
2710
  });
3807
2711
  if (user.LAST_LOGIN) {
3808
2712
  res.LAST_LOGIN = toDate(user.LAST_LOGIN);
@@ -3813,7 +2717,7 @@ class BXRestMapUser {
3813
2717
  return Object.assign(clone(user), {
3814
2718
  ID: toStr(user.ID),
3815
2719
  IS_ONLINE: toBXYorN(user.IS_ONLINE),
3816
- DATE_REGISTER: toISOStringWithTimezone(user.DATE_REGISTER),
2720
+ DATE_REGISTER: user.DATE_REGISTER ? toISOStringWithTimezone(user.DATE_REGISTER) : '',
3817
2721
  PERSONAL_BIRTHDAY: toStr(user.PERSONAL_BIRTHDAY),
3818
2722
  LAST_LOGIN: toStr(user.LAST_LOGIN)
3819
2723
  });
@@ -4306,8 +3210,8 @@ class BXRestMapTasksTaskResult {
4306
3210
  }
4307
3211
 
4308
3212
  class BXRestMapTasksTask {
4309
- constructor() {
4310
- this.result = BXRestMapTasksTaskResult;
3213
+ static get result() {
3214
+ return BXRestMapTasksTaskResult;
4311
3215
  }
4312
3216
  static getAccess(v) {
4313
3217
  return (v && v.allowedActions) ? v.allowedActions : undefined;
@@ -5272,6 +4176,10 @@ class BXRestNavvyOperationElapsedItem {
5272
4176
  * Возвращает список записей о затраченном времени по задаче.
5273
4177
  */
5274
4178
  getListByIDTask(ids) {
4179
+ // Пустой batch завершается без значения, и вызывающий код получил бы EmptyError
4180
+ if (!ids.length) {
4181
+ return of([]);
4182
+ }
5275
4183
  // Работает только потому что "nPageSize: 99999"
5276
4184
  return this.http.branch(ids.map(i => {
5277
4185
  return {
@@ -5374,33 +4282,17 @@ class BXRestNavvyOperationElapsedItem {
5374
4282
  * @param userCurrent
5375
4283
  */
5376
4284
  checkPermissionAddElapsedTimeToTask(idTask, userCurrent = undefined) {
5377
- // let permission = Permission.get()
5378
- // if (permission?.tasks?.length) {
5379
- // let findTask = permission.tasks.find(i => i.id === idTask)
5380
- // if (findTask?.permission) {
5381
- // return of(findTask.permission['ELAPSEDTIME.ADD'])
5382
- // }
5383
4285
  return ((userCurrent) ? of(userCurrent) : this.BXRestNavvyUser.current().res()).pipe(mergeMap(self => {
5384
4286
  if (self) {
5385
4287
  return this.BXRestNavvyTasks.task.getAccess({
5386
4288
  id: idTask,
5387
4289
  users: [self.ID]
5388
- }).res().pipe(
5389
- // tap(v => {
5390
- // if (v && v[self.ID]) {
5391
- // Permission.set({
5392
- // tasks: [{id: idTask, permission: v[self.ID], elapsedItem: []}]
5393
- // })
5394
- // }
5395
- // }),
5396
- map(v => {
4290
+ }).res().pipe(map(v => {
5397
4291
  return (v && v[self.ID]) ? v[self.ID]['ELAPSEDTIME.ADD'] : false;
5398
4292
  }));
5399
4293
  }
5400
4294
  return of(undefined);
5401
4295
  }));
5402
- // }
5403
- // return of(undefined)
5404
4296
  }
5405
4297
  /**
5406
4298
  * Проверка на возможность прочтения такски
@@ -5409,35 +4301,17 @@ class BXRestNavvyOperationElapsedItem {
5409
4301
  * @param userCurrent
5410
4302
  */
5411
4303
  checkPermissionReadTask(idTask, userCurrent = undefined) {
5412
- // let permission = Permission.get()
5413
- // if (permission?.tasks?.length) {
5414
- // let findTask = permission.tasks.find(i => i.id === idTask)
5415
- // if (findTask?.permission) {
5416
- // return of(findTask.permission.ACCEPT)
5417
- // }
5418
- // console.log('idTask', idTask)
5419
4304
  return ((userCurrent) ? of(userCurrent) : this.BXRestNavvyUser.current().res()).pipe(mergeMap(self => {
5420
4305
  if (self) {
5421
4306
  return this.BXRestNavvyTasks.task.getAccess({
5422
4307
  id: idTask,
5423
4308
  users: [self.ID]
5424
- }).res().pipe(
5425
- // tap(v => {
5426
- // if (v && v[self.ID]) {
5427
- // Permission.set({
5428
- // tasks: [{id: idTask, permission: v[self.ID], elapsedItem: []}]
5429
- // })
5430
- // }
5431
- // }),
5432
- map(v => {
4309
+ }).res().pipe(map(v => {
5433
4310
  return (v && v[self.ID]) ? !!v[self.ID] : false; // отдельного флага на чтение нет, выходит что если права отдались то и права есть
5434
4311
  }));
5435
4312
  }
5436
4313
  return of(undefined);
5437
4314
  }));
5438
- // }
5439
- //
5440
- // return of(undefined)
5441
4315
  }
5442
4316
  /**
5443
4317
  * Законченный метод добавления записи с предварительной проверкой прав
@@ -5453,7 +4327,7 @@ class BXRestNavvyOperationElapsedItem {
5453
4327
  return this.BXRestNavvyElapsedItem.add(param).res();
5454
4328
  }
5455
4329
  else {
5456
- return throwError(() => new Error('Отсутствуют права добавление записи затраченного времени'));
4330
+ return throwError(() => new Error('Отсутствуют права на добавление записи затраченного времени'));
5457
4331
  }
5458
4332
  }));
5459
4333
  }
@@ -5481,42 +4355,15 @@ class BXRestNavvyOperationElapsedItem {
5481
4355
  return throwError(() => new Error('Отсутствуют права на чтение задачи'));
5482
4356
  }));
5483
4357
  }
5484
- // TODO: разобраться что это за ебатня в комментах и вписать нормальной комент если она нужна
5485
4358
  /**
5486
4359
  * Проверяет право на изменение записи о затраченном времени.
5487
4360
  */
5488
4361
  isAllowedModify(idTask, idItem) {
5489
- // let permission = Permission.get()
5490
- // if (permission?.tasks?.length) {
5491
- // let findTask = permission.tasks.find(i => i.id === idTask)
5492
- // if (findTask) {
5493
- // let find = findTask.elapsedItem.find(i => i.id === idItem)
5494
- // if (find && find.verified.edit) {
5495
- // return of(find.edit)
5496
- // }
5497
- // }
5498
- // }
5499
4362
  return this.BXRestNavvyElapsedItem.isActionAllowed({
5500
4363
  TASKID: idTask,
5501
4364
  ITEMID: idItem,
5502
4365
  ACTIONID: 2
5503
4366
  }).res();
5504
- // .pipe(
5505
- // tap(v => {
5506
- // if (v !== undefined) {
5507
- // Permission.setTaskElapsedItem(idTask,
5508
- // {
5509
- // id: idItem,
5510
- // edit: v,
5511
- // del: false,
5512
- // verified: {
5513
- // edit: true,
5514
- // del: false,
5515
- // }
5516
- // })
5517
- // }
5518
- // })
5519
- // )
5520
4367
  }
5521
4368
  /**
5522
4369
  * isActionAllowed с фиксом на проверку возможности чтения задачи записи
@@ -7017,7 +5864,7 @@ class BXRestNavvyBizProc {
7017
5864
  // Не понимаю почему DATE_CREATE указывается не на сервере
7018
5865
  // но если пользователь не указал, надо указать
7019
5866
  const value = parametersElement['DATE_CREATE'];
7020
- if (value === null || value === undefined || (typeof value === 'string' || value.trim() === '')) {
5867
+ if (value === null || value === undefined || (typeof value === 'string' && value.trim() === '')) {
7021
5868
  parametersElement['DATE_CREATE'] = new Date();
7022
5869
  }
7023
5870
  return this.BXRestNavvyLists.element.add({
@@ -8414,40 +7261,6 @@ class BXRestNavvyImNotify {
8414
7261
  }
8415
7262
  }
8416
7263
 
8417
- function CatchError(options) {
8418
- return function (target, propertyKey, descriptor) {
8419
- const original = descriptor.value;
8420
- descriptor.value = function (...args) {
8421
- try {
8422
- return original.apply(this, args);
8423
- }
8424
- catch (err) {
8425
- const errorInfo = {
8426
- message: `❌ Error in ${target.constructor.name}.${propertyKey}`,
8427
- args,
8428
- error: err instanceof Error ? err.message : String(err),
8429
- stack: err instanceof Error ? err.stack : new Error().stack,
8430
- };
8431
- console.error(formatError(errorInfo));
8432
- if (options?.rethrow)
8433
- throw err;
8434
- return options?.defaultValue;
8435
- }
8436
- };
8437
- return descriptor;
8438
- };
8439
- }
8440
- // Общая функция форматирования
8441
- function formatError(info) {
8442
- const stackLines = info.stack?.split('\n').slice(2).join('\n');
8443
- return [
8444
- info.message,
8445
- info.args ? ` • args: ${JSON.stringify(info.args)}` : '',
8446
- info.error ? ` • error: ${info.error}` : '',
8447
- ` • stack trace:\n${stackLines}`,
8448
- ].join('\n');
8449
- }
8450
-
8451
7264
  class BXRestMapImRecent {
8452
7265
  static get(value) {
8453
7266
  return value
@@ -8518,12 +7331,6 @@ class BXRestMapImRecent {
8518
7331
  return chat;
8519
7332
  }
8520
7333
  }
8521
- __decorate([
8522
- CatchError({ rethrow: true })
8523
- ], BXRestMapImRecent, "get", null);
8524
- __decorate([
8525
- CatchError({ rethrow: true })
8526
- ], BXRestMapImRecent, "list", null);
8527
7334
 
8528
7335
  class BXRestNavvyImRecent {
8529
7336
  constructor() {
@@ -9362,17 +8169,6 @@ class BXRestMapPull {
9362
8169
  }
9363
8170
  }
9364
8171
 
9365
- class BXRestMapPullChannelPublic {
9366
- static get(value) {
9367
- return value ? {
9368
- ...value,
9369
- start: toDate(value.start),
9370
- end: toDate(value.end)
9371
- }
9372
- : undefined;
9373
- }
9374
- }
9375
-
9376
8172
  class BXRestNavvyPullConfig {
9377
8173
  constructor() {
9378
8174
  this.url = {
@@ -9383,7 +8179,6 @@ class BXRestNavvyPullConfig {
9383
8179
  };
9384
8180
  this.Navvy = new Navvy();
9385
8181
  }
9386
- static { this.public = new BXRestMapPullChannelPublic(); }
9387
8182
  /**
9388
8183
  * @experimental
9389
8184
  * Этот метод находится в процессе тестирования и может измениться.
@@ -9393,6 +8188,17 @@ class BXRestNavvyPullConfig {
9393
8188
  }
9394
8189
  }
9395
8190
 
8191
+ class BXRestMapPullChannelPublic {
8192
+ static get(value) {
8193
+ return value ? {
8194
+ ...value,
8195
+ start: toDate(value.start),
8196
+ end: toDate(value.end)
8197
+ }
8198
+ : undefined;
8199
+ }
8200
+ }
8201
+
9396
8202
  class BXRestNavvyPullChannelPublic {
9397
8203
  constructor() {
9398
8204
  this.url = {
@@ -20291,6 +19097,15 @@ class BXRestNavvy {
20291
19097
  }
20292
19098
  }
20293
19099
 
19100
+ class BXRestMapDisk {
19101
+ constructor() {
19102
+ this.folder = new BXRestMapDiskFolder();
19103
+ this.attachedObject = new BXRestMapDiskAttachedObject();
19104
+ this.file = new BXRestMapDiskFile();
19105
+ this.storage = new BXRestMapDiskStorage();
19106
+ }
19107
+ }
19108
+
20294
19109
  class BXRestMapCalendarUser {
20295
19110
  constructor() {
20296
19111
  this.settings = new BXRestMapCalendarUserSettings();
@@ -20322,16 +19137,23 @@ class BXRestMapTaskStage {
20322
19137
  }
20323
19138
 
20324
19139
  class BXRestMapTask {
20325
- constructor() {
20326
- this.commentItem = new BXRestMapTaskCommentItem();
20327
- this.elapsedItem = new BXRestMapTaskElapsedItem();
20328
- this.stages = new BXRestMapTaskStage();
19140
+ // Геттеры, а не статические поля: статический инициализатор выполняется при загрузке
19141
+ // модуля, поэтому бандлер не сможет выбросить класс, даже если он нигде не используется.
19142
+ static get commentItem() {
19143
+ return BXRestMapTaskCommentItem;
19144
+ }
19145
+ static get elapsedItem() {
19146
+ return BXRestMapTaskElapsedItem;
19147
+ }
19148
+ static get stages() {
19149
+ return BXRestMapTaskStage;
20329
19150
  }
20330
19151
  }
20331
19152
 
20332
19153
  class BXRestMapTasks {
20333
- constructor() {
20334
- this.task = new BXRestMapTasksTask();
19154
+ // Геттер — по той же причине, что и в BXRestMapTask
19155
+ static get task() {
19156
+ return BXRestMapTasksTask;
20335
19157
  }
20336
19158
  }
20337
19159
 
@@ -20349,7 +19171,7 @@ class BXRestMap {
20349
19171
  return BXRestMapLists;
20350
19172
  }
20351
19173
  get disk() {
20352
- return BXRestDisk;
19174
+ return BXRestMapDisk;
20353
19175
  }
20354
19176
  get calendar() {
20355
19177
  return BXRestMapCalendar;
@@ -20935,6 +19757,19 @@ function toRecord(value) {
20935
19757
  : {};
20936
19758
  }
20937
19759
 
19760
+ class HttpNavvyServices {
19761
+ constructor() {
19762
+ this.httpServices = new HttpBXServices();
19763
+ }
19764
+ // Реализация метода
19765
+ post(url, params) {
19766
+ if (params === undefined) {
19767
+ params = {};
19768
+ }
19769
+ return this.httpServices.post(url, params);
19770
+ }
19771
+ }
19772
+
20938
19773
  /**
20939
19774
  * Public API Surface of bx-rest
20940
19775
  */