bx-rest 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.en.md +96 -4
  3. package/README.md +96 -4
  4. package/consts/part-name-methods.d.ts +1 -0
  5. package/esm2022/consts/part-name-methods.mjs +2 -1
  6. package/esm2022/map/pull/application/config.mjs +25 -29
  7. package/esm2022/map/pull.mjs +8 -13
  8. package/esm2022/public-api.mjs +2 -1
  9. package/esm2022/request-navvy/booking/v1/resource.mjs +2 -2
  10. package/esm2022/request-navvy/booking/v1/resourcetype.mjs +2 -2
  11. package/esm2022/request-navvy/catalog/catalog.mjs +2 -2
  12. package/esm2022/request-navvy/catalog/document/element.mjs +2 -2
  13. package/esm2022/request-navvy/catalog/document.mjs +2 -2
  14. package/esm2022/request-navvy/catalog/documentcontractor.mjs +2 -2
  15. package/esm2022/request-navvy/catalog/extra.mjs +2 -2
  16. package/esm2022/request-navvy/catalog/measure.mjs +2 -2
  17. package/esm2022/request-navvy/catalog/price.mjs +2 -2
  18. package/esm2022/request-navvy/catalog/pricetype.mjs +2 -2
  19. package/esm2022/request-navvy/catalog/pricetypegroup.mjs +2 -2
  20. package/esm2022/request-navvy/catalog/pricetypelang.mjs +2 -2
  21. package/esm2022/request-navvy/catalog/product/offer.mjs +2 -2
  22. package/esm2022/request-navvy/catalog/product/service.mjs +2 -2
  23. package/esm2022/request-navvy/catalog/product/sku.mjs +2 -2
  24. package/esm2022/request-navvy/catalog/product.mjs +2 -2
  25. package/esm2022/request-navvy/catalog/productproperty.mjs +2 -2
  26. package/esm2022/request-navvy/catalog/productpropertyenum.mjs +2 -2
  27. package/esm2022/request-navvy/catalog/productpropertyfeature.mjs +2 -2
  28. package/esm2022/request-navvy/catalog/productpropertysection.mjs +2 -2
  29. package/esm2022/request-navvy/catalog/ratio.mjs +2 -2
  30. package/esm2022/request-navvy/catalog/roundingrule.mjs +2 -2
  31. package/esm2022/request-navvy/catalog/section.mjs +2 -2
  32. package/esm2022/request-navvy/catalog/store.mjs +2 -2
  33. package/esm2022/request-navvy/catalog/storeproduct.mjs +2 -2
  34. package/esm2022/request-navvy/catalog/userfield/document.mjs +2 -2
  35. package/esm2022/request-navvy/catalog/vat.mjs +2 -2
  36. package/esm2022/request-navvy/crm/activity.mjs +2 -2
  37. package/esm2022/request-navvy/crm/deal/recurring.mjs +2 -2
  38. package/esm2022/request-navvy/crm/item/product/row.mjs +2 -2
  39. package/esm2022/request-navvy/crm/orderentity.mjs +2 -2
  40. package/esm2022/request-navvy/crm/requisite/link.mjs +2 -2
  41. package/esm2022/request-navvy/crm/stagehistory.mjs +2 -2
  42. package/esm2022/request-navvy/crm/timeline/bindings.mjs +2 -2
  43. package/esm2022/request-navvy/documentgenerator/document.mjs +2 -2
  44. package/esm2022/request-navvy/documentgenerator/numerator.mjs +2 -2
  45. package/esm2022/request-navvy/documentgenerator/role.mjs +2 -2
  46. package/esm2022/request-navvy/documentgenerator/template.mjs +2 -2
  47. package/esm2022/request-navvy/pull/application/config.mjs +10 -4
  48. package/esm2022/request-navvy/pull/application/event.mjs +23 -0
  49. package/esm2022/request-navvy/pull/application/push.mjs +23 -0
  50. package/esm2022/request-navvy/pull/channel/public.mjs +4 -4
  51. package/esm2022/request-navvy/pull/config.mjs +8 -4
  52. package/esm2022/request-navvy/pull.mjs +12 -1
  53. package/esm2022/request-navvy/sale/basketitem.mjs +2 -2
  54. package/esm2022/request-navvy/sale/basketproperties.mjs +2 -2
  55. package/esm2022/request-navvy/sale/businessvaluepersondomain.mjs +2 -2
  56. package/esm2022/request-navvy/sale/order.mjs +2 -2
  57. package/esm2022/request-navvy/sale/payment.mjs +2 -2
  58. package/esm2022/request-navvy/sale/paymentitembasket.mjs +2 -2
  59. package/esm2022/request-navvy/sale/paymentitemshipment.mjs +2 -2
  60. package/esm2022/request-navvy/sale/persontype.mjs +2 -2
  61. package/esm2022/request-navvy/sale/property.mjs +2 -2
  62. package/esm2022/request-navvy/sale/propertyrelation.mjs +2 -2
  63. package/esm2022/request-navvy/sale/propertyvalue.mjs +2 -2
  64. package/esm2022/request-navvy/sale/propertyvariant.mjs +2 -2
  65. package/esm2022/request-navvy/sale/shipment.mjs +2 -2
  66. package/esm2022/request-navvy/sale/shipmentitem.mjs +2 -2
  67. package/esm2022/request-navvy/sale/shipmentproperty.mjs +2 -2
  68. package/esm2022/request-navvy/sale/shipmentpropertyvalue.mjs +2 -2
  69. package/esm2022/request-navvy/sale/status.mjs +2 -2
  70. package/esm2022/request-navvy/sale/statuslang.mjs +2 -2
  71. package/esm2022/request-navvy/sale/tradebinding.mjs +2 -2
  72. package/esm2022/request-navvy/sale/tradeplatform.mjs +2 -2
  73. package/esm2022/request-navvy/task/operation/elapseditem.mjs +44 -21
  74. package/esm2022/request-navvy/userfieldtype.mjs +2 -2
  75. package/esm2022/services/http/HttpBX.mjs +9 -6
  76. package/esm2022/services/http/fetch.mjs +45 -0
  77. package/esm2022/services/http/http.mjs +12 -3
  78. package/esm2022/services/http/middleware.mjs +56 -2
  79. package/esm2022/services/navvy/navvy-pag-nav-keyed.mjs +31 -0
  80. package/esm2022/services/navvy.mjs +20 -6
  81. package/esm2022/typification/rest/crm/requisite.mjs +1 -1
  82. package/esm2022/typification/rest/crm/timeline/bindings.mjs +1 -1
  83. package/esm2022/typification/rest/pull/application/config/get.mjs +1 -1
  84. package/esm2022/typification/rest/pull/application/event/add.mjs +2 -0
  85. package/esm2022/typification/rest/pull/application/push/add.mjs +2 -0
  86. package/esm2022/typification/rest/pull/config/get.mjs +1 -1
  87. package/esm2022/typification/rest/pull.mjs +3 -1
  88. package/esm2022/typification/settings.mjs +1 -1
  89. package/fesm2022/bx-rest.mjs +365 -140
  90. package/fesm2022/bx-rest.mjs.map +1 -1
  91. package/map/pull/application/config.d.ts +3 -0
  92. package/package.json +1 -1
  93. package/public-api.d.ts +2 -1
  94. package/request-navvy/booking/v1/resource.d.ts +1 -1
  95. package/request-navvy/booking/v1/resourcetype.d.ts +1 -1
  96. package/request-navvy/catalog/catalog.d.ts +1 -1
  97. package/request-navvy/catalog/document/element.d.ts +1 -1
  98. package/request-navvy/catalog/document.d.ts +1 -1
  99. package/request-navvy/catalog/documentcontractor.d.ts +1 -1
  100. package/request-navvy/catalog/extra.d.ts +1 -1
  101. package/request-navvy/catalog/measure.d.ts +1 -1
  102. package/request-navvy/catalog/price.d.ts +1 -1
  103. package/request-navvy/catalog/pricetype.d.ts +1 -1
  104. package/request-navvy/catalog/pricetypegroup.d.ts +1 -1
  105. package/request-navvy/catalog/pricetypelang.d.ts +1 -1
  106. package/request-navvy/catalog/product/offer.d.ts +1 -1
  107. package/request-navvy/catalog/product/service.d.ts +1 -1
  108. package/request-navvy/catalog/product/sku.d.ts +1 -1
  109. package/request-navvy/catalog/product.d.ts +1 -1
  110. package/request-navvy/catalog/productproperty.d.ts +1 -1
  111. package/request-navvy/catalog/productpropertyenum.d.ts +1 -1
  112. package/request-navvy/catalog/productpropertyfeature.d.ts +1 -1
  113. package/request-navvy/catalog/productpropertysection.d.ts +1 -1
  114. package/request-navvy/catalog/ratio.d.ts +1 -1
  115. package/request-navvy/catalog/roundingrule.d.ts +1 -1
  116. package/request-navvy/catalog/section.d.ts +1 -1
  117. package/request-navvy/catalog/store.d.ts +1 -1
  118. package/request-navvy/catalog/storeproduct.d.ts +1 -1
  119. package/request-navvy/catalog/userfield/document.d.ts +1 -1
  120. package/request-navvy/catalog/vat.d.ts +1 -1
  121. package/request-navvy/crm/activity.d.ts +1 -1
  122. package/request-navvy/crm/deal/recurring.d.ts +1 -1
  123. package/request-navvy/crm/item/product/row.d.ts +5 -1
  124. package/request-navvy/crm/orderentity.d.ts +5 -1
  125. package/request-navvy/crm/requisite/link.d.ts +1 -1
  126. package/request-navvy/crm/stagehistory.d.ts +5 -1
  127. package/request-navvy/crm/timeline/bindings.d.ts +1 -1
  128. package/request-navvy/documentgenerator/document.d.ts +1 -1
  129. package/request-navvy/documentgenerator/numerator.d.ts +1 -1
  130. package/request-navvy/documentgenerator/role.d.ts +1 -1
  131. package/request-navvy/documentgenerator/template.d.ts +1 -1
  132. package/request-navvy/pull/application/config.d.ts +9 -3
  133. package/request-navvy/pull/application/event.d.ts +17 -0
  134. package/request-navvy/pull/application/push.d.ts +17 -0
  135. package/request-navvy/pull/config.d.ts +7 -3
  136. package/request-navvy/pull.d.ts +11 -0
  137. package/request-navvy/sale/basketitem.d.ts +1 -1
  138. package/request-navvy/sale/basketproperties.d.ts +1 -1
  139. package/request-navvy/sale/businessvaluepersondomain.d.ts +1 -1
  140. package/request-navvy/sale/order.d.ts +1 -1
  141. package/request-navvy/sale/payment.d.ts +1 -1
  142. package/request-navvy/sale/paymentitembasket.d.ts +1 -1
  143. package/request-navvy/sale/paymentitemshipment.d.ts +1 -1
  144. package/request-navvy/sale/persontype.d.ts +1 -1
  145. package/request-navvy/sale/property.d.ts +1 -1
  146. package/request-navvy/sale/propertyrelation.d.ts +1 -1
  147. package/request-navvy/sale/propertyvalue.d.ts +1 -1
  148. package/request-navvy/sale/propertyvariant.d.ts +1 -1
  149. package/request-navvy/sale/shipment.d.ts +1 -1
  150. package/request-navvy/sale/shipmentitem.d.ts +1 -1
  151. package/request-navvy/sale/shipmentproperty.d.ts +1 -1
  152. package/request-navvy/sale/shipmentpropertyvalue.d.ts +1 -1
  153. package/request-navvy/sale/status.d.ts +1 -1
  154. package/request-navvy/sale/statuslang.d.ts +1 -1
  155. package/request-navvy/sale/tradebinding.d.ts +1 -1
  156. package/request-navvy/sale/tradeplatform.d.ts +1 -1
  157. package/request-navvy/task/operation/elapseditem.d.ts +15 -10
  158. package/request-navvy/userfieldtype.d.ts +1 -1
  159. package/services/http/HttpBX.d.ts +5 -4
  160. package/services/http/fetch.d.ts +22 -0
  161. package/services/http/http.d.ts +8 -0
  162. package/services/http/middleware.d.ts +2 -1
  163. package/services/navvy/navvy-pag-nav-keyed.d.ts +18 -0
  164. package/services/navvy.d.ts +16 -0
  165. package/typification/rest/crm/requisite.d.ts +1 -1
  166. package/typification/rest/crm/timeline/bindings.d.ts +2 -1
  167. package/typification/rest/pull/application/config/get.d.ts +1 -1
  168. package/typification/rest/pull/application/event/add.d.ts +24 -0
  169. package/typification/rest/pull/application/push/add.d.ts +16 -0
  170. package/typification/rest/pull/config/get.d.ts +28 -3
  171. package/typification/rest/pull.d.ts +2 -0
  172. package/typification/settings.d.ts +35 -1
@@ -833,8 +833,16 @@ class SessionKeyServices {
833
833
  * Сами запросы отправляет `HttpBXServices` (`BXRestRequest`).
834
834
  */
835
835
  class HttpServices {
836
- constructor() {
837
- this.session = new SessionKeyServices();
836
+ /**
837
+ * @param settings свои настройки, как у `new BXRestNavvy(settings)`: запросы
838
+ * идут на этот портал с этим токеном, а `BXRestSettings` на них не влияют.
839
+ * Без них — настройки клиента, внутри которого создан объект, или
840
+ * глобальные `BXRestSettings`.
841
+ */
842
+ constructor(settings) {
843
+ this.session = settings
844
+ ? runInContext(new BXRestContext(settings), () => new SessionKeyServices())
845
+ : new SessionKeyServices();
838
846
  }
839
847
  /**
840
848
  * Экземпляр axios клиента. Один на контекст (клиента со своими настройками
@@ -1081,9 +1089,10 @@ class BXRestTimeoutError extends Error {
1081
1089
  }
1082
1090
  }
1083
1091
  /**
1084
- * Встроенные шаги из настроек, в этом порядке: повтор, очередь, таймаут.
1092
+ * Встроенные шаги из настроек, в этом порядке: повтор, очередь, таймаут, журнал.
1085
1093
  * Повтор — снаружи: каждая попытка заново встаёт в очередь и получает свой
1086
1094
  * таймаут. Таймаут — внутри очереди: ожидание своей очереди его не тратит.
1095
+ * Журнал — внутри всех: каждая попытка — своя запись, без времени в очереди.
1087
1096
  */
1088
1097
  function builtInMiddleware(settings, state) {
1089
1098
  const steps = [];
@@ -1115,6 +1124,15 @@ function builtInMiddleware(settings, state) {
1115
1124
  }
1116
1125
  steps.push(timeout(ms));
1117
1126
  }
1127
+ if (settings.logRequests !== undefined) {
1128
+ if (typeof settings.logRequests !== 'function') {
1129
+ throw invalid('logRequests', settings.logRequests, 'a function');
1130
+ }
1131
+ steps.push(logRequests(settings.logRequests));
1132
+ }
1133
+ if (settings.transport !== undefined && settings.transport !== 'axios' && settings.transport !== 'fetch') {
1134
+ throw invalid('transport', settings.transport, "'axios' or 'fetch'");
1135
+ }
1118
1136
  return steps;
1119
1137
  }
1120
1138
  function invalid(name, value, expected) {
@@ -1185,6 +1203,50 @@ function throttle(perSecond, state) {
1185
1203
  });
1186
1204
  };
1187
1205
  }
1206
+ /** Код ошибки Bitrix из тела ответа или, если его нет, текст ошибки запроса. */
1207
+ function errorText(body, error) {
1208
+ const code = parseBXRestErrorBody(body)?.error;
1209
+ if (code) {
1210
+ return code;
1211
+ }
1212
+ return (error instanceof Error) ? error.message : undefined;
1213
+ }
1214
+ /**
1215
+ * Пишет в журнал запись о каждом HTTP-запросе. Исключение из `log` проглатывается:
1216
+ * журнал не должен ломать запрос.
1217
+ */
1218
+ function logRequests(log) {
1219
+ const write = (entry) => {
1220
+ try {
1221
+ log(entry);
1222
+ }
1223
+ catch {
1224
+ // Сбой журнала — не ошибка запроса
1225
+ }
1226
+ };
1227
+ return async (config, next) => {
1228
+ const started = Date.now();
1229
+ try {
1230
+ const data = await next(config);
1231
+ const error = errorText(data);
1232
+ write({ method: config.method, url: config.url, duration: Date.now() - started, failed: false, ...(error ? { error } : {}) });
1233
+ return data;
1234
+ }
1235
+ catch (cause) {
1236
+ const response = httpErrorResponse(cause);
1237
+ const error = errorText(response?.data, cause);
1238
+ write({
1239
+ method: config.method,
1240
+ url: config.url,
1241
+ duration: Date.now() - started,
1242
+ failed: true,
1243
+ ...(response ? { status: response.status } : {}),
1244
+ ...(error ? { error } : {}),
1245
+ });
1246
+ throw cause;
1247
+ }
1248
+ };
1249
+ }
1188
1250
  /** Отменяет запрос, если он не завершился за `ms` миллисекунд. */
1189
1251
  function timeout(ms) {
1190
1252
  return (config, next) => {
@@ -1211,6 +1273,51 @@ function timeout(ms) {
1211
1273
  };
1212
1274
  }
1213
1275
 
1276
+ /**
1277
+ * Ответ не 2xx при `transport: 'fetch'`. Поле `response` такое же, как у
1278
+ * `AxiosError`: по нему библиотека узнаёт ошибки Bitrix и ошибки авторизации.
1279
+ * В `.resVanilla()` приходит сама эта ошибка, в `.res()` — в `cause`.
1280
+ */
1281
+ class BXRestHttpError extends Error {
1282
+ constructor(response) {
1283
+ super(`Request failed with status code ${response.status}`);
1284
+ this.response = response;
1285
+ this.name = 'BXRestHttpError';
1286
+ }
1287
+ }
1288
+ /**
1289
+ * Транспорт `transport: 'fetch'`: глобальный `fetch` браузера или Node 18+.
1290
+ * Тело ответа разбирается как JSON, а если это не JSON (например, HTML от
1291
+ * прокси) — отдаётся строкой, как это делает axios.
1292
+ */
1293
+ async function fetchSend(config) {
1294
+ let body;
1295
+ if (config.method === 'POST') {
1296
+ body = (typeof config.data === 'string') ? config.data : JSON.stringify(config.data ?? {});
1297
+ }
1298
+ const response = await fetch(config.url, {
1299
+ method: config.method,
1300
+ headers: config.headers,
1301
+ body,
1302
+ credentials: config.withCredentials ? 'include' : 'same-origin',
1303
+ signal: config.signal,
1304
+ });
1305
+ const text = await response.text();
1306
+ let data = text;
1307
+ if (text) {
1308
+ try {
1309
+ data = JSON.parse(text);
1310
+ }
1311
+ catch {
1312
+ // Не JSON — отдаём текстом
1313
+ }
1314
+ }
1315
+ if (!response.ok) {
1316
+ throw new BXRestHttpError({ status: response.status, data });
1317
+ }
1318
+ return data;
1319
+ }
1320
+
1214
1321
  class HttpBXServices extends HttpServices {
1215
1322
  /**
1216
1323
  * Не считайте этот метод образцом/финальным API.
@@ -1358,16 +1465,18 @@ class HttpBXServices extends HttpServices {
1358
1465
  }
1359
1466
  /**
1360
1467
  * Отправка через шаги из настроек: `retryOnQueryLimit`, `throttle`,
1361
- * `timeout`, затем `middleware`; последним идёт axios клиента. Настройки
1362
- * читаются при подписке. Отписка отменяет HTTP-запрос (AbortSignal).
1363
- * Ошибка транспорта уходит дальше как есть: у axios в ней весь запрос,
1364
- * вместе с токеном и секретом вебхука (см. README, «Обработка ошибок»).
1468
+ * `timeout`, `logRequests`, затем `middleware`; последним идёт транспорт
1469
+ * клиента — axios или `fetch` (`transport`). Настройки читаются при
1470
+ * подписке. Отписка отменяет HTTP-запрос (AbortSignal). Ошибка транспорта
1471
+ * уходит дальше как есть: у axios в ней весь запрос, вместе с токеном и
1472
+ * секретом вебхука (см. README, «Обработка ошибок»).
1365
1473
  */
1366
1474
  send(config) {
1367
1475
  return new Observable(subscriber => {
1368
1476
  const controller = new AbortController();
1369
1477
  const ctx = this.session.ctx;
1370
- const send = composeMiddleware([...builtInMiddleware(ctx.settings, ctx), ...this.session.getMiddleware()], request => this.axiosSend(request));
1478
+ const settings = ctx.settings;
1479
+ const send = composeMiddleware([...builtInMiddleware(settings, ctx), ...this.session.getMiddleware()], (settings.transport === 'fetch') ? fetchSend : request => this.axiosSend(request));
1371
1480
  send({ ...config, signal: controller.signal }).then(data => {
1372
1481
  subscriber.next(data);
1373
1482
  subscriber.complete();
@@ -1635,11 +1744,43 @@ class NavvyPagNavResultKeyObject extends NavvyPagBase {
1635
1744
  }
1636
1745
  }
1637
1746
 
1747
+ /**
1748
+ * Пагинация для методов, у которых `result` — объект, а список лежит в нём под ключом:
1749
+ * `{ products: [...] }`, `{ orders: [...] }`.
1750
+ *
1751
+ * В отличие от {@link NavvyPagNavResultKey}, `.res()` отдаёт объект как есть, а `.resAll()` —
1752
+ * такой же объект, где под ключом собраны записи всех страниц. Так `.resAll()` можно добавить
1753
+ * методу, который раньше создавался через `simple`, не меняя результат его `.res()`.
1754
+ */
1755
+ class NavvyPagNavKeyed extends NavvyPagBase {
1756
+ constructor(url, param, key, map, restApi) {
1757
+ super(url, param, map, restApi);
1758
+ this.key = key;
1759
+ }
1760
+ resAll() {
1761
+ return this.resFirstPage().pipe(mergeMap(first => this.resPages(offsetPageParams(this.param, first.total, this.pageSize)).pipe(map(pages => {
1762
+ const items = [first.result, ...pages].flatMap(page => this.listIn(page));
1763
+ const joined = { ...first.result, [this.key]: items };
1764
+ return (this.map ? this.map(joined) : joined);
1765
+ }))),
1766
+ // refCount: без подписчиков оставшиеся страницы запрашивать незачем
1767
+ shareReplay({ bufferSize: 1, refCount: true }));
1768
+ }
1769
+ listIn(page) {
1770
+ const list = page?.[this.key];
1771
+ return Array.isArray(list) ? list : [];
1772
+ }
1773
+ }
1774
+
1638
1775
  class Navvy {
1639
- constructor() {
1640
- // Контекст, в котором создан Navvy. Запросы создаются позже, при вызове
1641
- // метода, поэтому их HTTP-объекты получают этот контекст явно, а не текущий.
1642
- this.ctx = currentContext();
1776
+ /**
1777
+ * @param settings свои настройки, как у `new BXRestNavvy(settings)`: запросы
1778
+ * идут на этот портал с этим токеном, а `BXRestSettings` на них не влияют.
1779
+ * Без них — настройки клиента, внутри которого создан объект, или
1780
+ * глобальные `BXRestSettings`.
1781
+ */
1782
+ constructor(settings) {
1783
+ this.ctx = settings ? new BXRestContext(settings) : currentContext();
1643
1784
  }
1644
1785
  simple(url, arg, map) {
1645
1786
  return runInContext(this.ctx, () => new NavvySimple(url, arg !== undefined ? arg : undefined, map));
@@ -1667,6 +1808,14 @@ class Navvy {
1667
1808
  pagNavResultKeyObject(url, arg, key, map) {
1668
1809
  return runInContext(this.ctx, () => new NavvyPagNavResultKeyObject(url, arg, key, map));
1669
1810
  }
1811
+ /**
1812
+ * Для методов, у которых `result` — объект со списком под ключом `key`, например
1813
+ * `{ products: [...] }`. `.res()` отдаёт объект как есть, `.resAll()` — такой же объект
1814
+ * с записями всех страниц под ключом.
1815
+ */
1816
+ pagNavKeyed(url, arg, key, map) {
1817
+ return runInContext(this.ctx, () => new NavvyPagNavKeyed(url, arg, key, map));
1818
+ }
1670
1819
  pagNavWithUselessKey(url, arg, map) {
1671
1820
  return runInContext(this.ctx, () => new NavvyPagNavWithUselessKey(url, arg, map));
1672
1821
  }
@@ -1782,6 +1931,7 @@ const $pull = 'pull';
1782
1931
  const $channel = 'channel';
1783
1932
  const $public = 'public';
1784
1933
  const $application = 'application';
1934
+ const $push = 'push';
1785
1935
  const $dialog = 'dialog';
1786
1936
  const $users = 'users';
1787
1937
  const $messages = 'messages';
@@ -2583,6 +2733,7 @@ var partNameMethods$1 = /*#__PURE__*/Object.freeze({
2583
2733
  $publication: $publication,
2584
2734
  $publicationFolder: $publicationFolder,
2585
2735
  $pull: $pull,
2736
+ $push: $push,
2586
2737
  $quick: $quick,
2587
2738
  $quote: $quote,
2588
2739
  $ratio: $ratio,
@@ -4130,6 +4281,18 @@ class BXRestNavvyDelegateElapsedItem {
4130
4281
  }
4131
4282
  }
4132
4283
 
4284
+ /** Результаты и `total` команд из ответов batch по ключам команд. Команды с ошибкой пропускаются. */
4285
+ function batchValues(answers) {
4286
+ const values = { result: {}, total: {} };
4287
+ for (const answer of answers ?? []) {
4288
+ if (instanceOfiBXRestAnswerSuccess(answer) && answer.result && typeof answer.result === 'object') {
4289
+ const batch = answer.result;
4290
+ Object.assign(values.result, batch.result);
4291
+ Object.assign(values.total, batch.result_total);
4292
+ }
4293
+ }
4294
+ return values;
4295
+ }
4133
4296
  class BXRestNavvyOperationElapsedItem {
4134
4297
  constructor(BXRestNavvyElapsedItem) {
4135
4298
  this.BXRestNavvyElapsedItem = BXRestNavvyElapsedItem;
@@ -4158,35 +4321,45 @@ class BXRestNavvyOperationElapsedItem {
4158
4321
  };
4159
4322
  return this.delegate.getList(param);
4160
4323
  }
4161
- // TODO: Сделать нормально
4162
4324
  /**
4163
- * Возвращает список записей о затраченном времени по задаче.
4325
+ * Возвращает все записи о затраченном времени по задачам `ids`: сначала записи первой задачи,
4326
+ * затем второй и так далее.
4327
+ *
4328
+ * Портал отдаёт не больше 50 записей на страницу. Первые страницы всех задач уходят одним
4329
+ * batch, остальные страницы запрашиваются только у задач, где записей больше 50.
4164
4330
  */
4165
4331
  getListByIDTask(ids) {
4166
4332
  // Пустой batch завершается без значения, и вызывающий код получил бы EmptyError
4167
4333
  if (!ids.length) {
4168
4334
  return of([]);
4169
4335
  }
4170
- // Работает только потому что "nPageSize: 99999"
4171
- return this.http.branch(ids.map(i => {
4172
- return {
4336
+ const pageSize = 50;
4337
+ const key = (index, page) => `${index}_${page}`;
4338
+ const commands = (pages) => Object.fromEntries(pages.map(({ index, page }) => [
4339
+ key(index, page),
4340
+ {
4173
4341
  name: this.http.getNameMethod([$task, $elapseditem, $getlist]),
4174
- param: {
4175
- TASKID: i,
4176
- PARAMS: {
4177
- NAV_PARAMS: {
4178
- nPageSize: 99999,
4179
- iNumPage: 1
4180
- }
4181
- }
4182
- }
4183
- };
4184
- })).pipe(map(v => {
4185
- if (v && v.length) {
4186
- const res = this.http.mapBranchResultWithoutKey(v);
4187
- return BXRestMapTaskElapsedItem.getList(res);
4342
+ param: { TASKID: ids[index], PARAMS: { NAV_PARAMS: { nPageSize: pageSize, iNumPage: page } } }
4188
4343
  }
4189
- return undefined;
4344
+ ]));
4345
+ const load = (pages) => pages.length
4346
+ ? this.http.branch(commands(pages)).pipe(map(v => batchValues(v)))
4347
+ : of({ result: {}, total: {} });
4348
+ return load(ids.map((_, index) => ({ index, page: 1 }))).pipe(mergeMap(first => {
4349
+ const rest = ids.flatMap((_, index) => {
4350
+ const pages = Math.ceil((Number(first.total[key(index, 1)]) || 0) / pageSize);
4351
+ return Array.from({ length: Math.max(pages - 1, 0) }, (_, i) => ({ index, page: i + 2 }));
4352
+ });
4353
+ return load(rest).pipe(map(more => ({ ...first.result, ...more.result })));
4354
+ }), map(result => {
4355
+ const items = ids.flatMap((_, index) => {
4356
+ const list = [];
4357
+ for (let page = 1; result[key(index, page)]; page++) {
4358
+ list.push(...result[key(index, page)]);
4359
+ }
4360
+ return list;
4361
+ });
4362
+ return BXRestMapTaskElapsedItem.getList(items);
4190
4363
  }));
4191
4364
  }
4192
4365
  /**
@@ -8118,53 +8291,44 @@ class BXRestNavvySocialNetWork {
8118
8291
  }
8119
8292
  }
8120
8293
 
8294
+ /** Поля `start` и `end` канала — в `Date`. Канал, которого нет в ответе, так и остаётся пустым. */
8295
+ function withDates(channel) {
8296
+ return channel
8297
+ ? { ...channel, start: toDate(channel.start), end: toDate(channel.end) }
8298
+ : undefined;
8299
+ }
8121
8300
  class BXRestMapPullApplicationConfig {
8301
+ /**
8302
+ * Даты каналов — в `Date`. `publicChannels: false` (сервер версии ниже 4) становится пустым объектом.
8303
+ */
8122
8304
  static get(value) {
8123
- return value ?
8124
- {
8125
- ...value,
8126
- ...{
8127
- channels: {
8128
- shared: {
8129
- ...value.channels.shared, ...{
8130
- start: toDate(value.channels.shared.start),
8131
- end: toDate(value.channels.shared.end),
8132
- }
8133
- },
8134
- private: {
8135
- ...value.channels.private, ...{
8136
- start: toDate(value.channels.private.start),
8137
- end: toDate(value.channels.private.end),
8138
- }
8139
- }
8140
- },
8141
- publicChannels: Object.fromEntries(Object.entries(value.publicChannels).map(([key, val]) => ([key,
8142
- {
8143
- ...val,
8144
- start: toDate(val.start),
8145
- end: toDate(val.end)
8146
- }
8147
- ]))),
8148
- }
8149
- }
8150
- : undefined;
8305
+ if (!value) {
8306
+ return undefined;
8307
+ }
8308
+ const publicChannels = value.publicChannels && typeof value.publicChannels === 'object'
8309
+ ? value.publicChannels
8310
+ : {};
8311
+ return {
8312
+ ...value,
8313
+ channels: {
8314
+ ...value.channels,
8315
+ shared: withDates(value.channels?.shared),
8316
+ private: withDates(value.channels?.private),
8317
+ },
8318
+ publicChannels: Object.fromEntries(Object.entries(publicChannels).map(([key, channel]) => [key, withDates(channel)])),
8319
+ };
8151
8320
  }
8152
8321
  }
8153
8322
 
8154
8323
  class BXRestMapPull {
8155
8324
  static get(value) {
8156
- // console.log('Object.entries(value.publicChannels)', value)
8157
- //if(value?.publicChannels) {
8158
- // console.log('Object.entries(value.publicChannels)',
8159
- // value.publicChannels, Object.entries(value.publicChannels), Object.fromEntries(Object.entries(value.publicChannels).map(([key, val]) => (
8160
- // [key,
8161
- // {
8162
- // ...val,
8163
- // start: toDate(val.start), end: toDate(val.end)
8164
- // } as iBXRestPullConfigPublicChannelsGet
8165
- // ]))) as Record<string, iBXRestPullConfigPublicChannelsGet>,)
8166
- //}
8167
- return value ? { ...BXRestMapPullApplicationConfig.get(value), ...{ serverTime: toDate(value.serverTime) } } : undefined;
8325
+ if (!value) {
8326
+ return undefined;
8327
+ }
8328
+ return {
8329
+ ...BXRestMapPullApplicationConfig.get(value),
8330
+ ...(value.serverTime ? { serverTime: toDate(value.serverTime) } : {}),
8331
+ };
8168
8332
  }
8169
8333
  }
8170
8334
 
@@ -8179,11 +8343,15 @@ class BXRestNavvyPullConfig {
8179
8343
  this.Navvy = new Navvy();
8180
8344
  }
8181
8345
  /**
8346
+ * Возвращает настройки подключения к серверам Push & Pull для пользователя.
8347
+ * Приложению нужен `pull.application.config.get`: `bx.pull.application.config.get()`.
8348
+ *
8182
8349
  * @experimental
8183
- * Этот метод находится в процессе тестирования и может измениться.
8350
+ * Метода нет в документации Bitrix24, ответ сверен только с официальным JS SDK.
8351
+ * Типы могут измениться.
8184
8352
  */
8185
- get() {
8186
- return this.Navvy.simple(this.url.get, undefined, BXRestMapPull.get);
8353
+ get(param) {
8354
+ return this.Navvy.simple(this.url.get, param, BXRestMapPull.get);
8187
8355
  }
8188
8356
  }
8189
8357
 
@@ -8201,7 +8369,7 @@ class BXRestMapPullChannelPublic {
8201
8369
  class BXRestNavvyPullChannelPublic {
8202
8370
  constructor() {
8203
8371
  this.url = {
8204
- get: [$log, $blogpost, $add]
8372
+ get: [$pull, $channel, $public, $get]
8205
8373
  };
8206
8374
  this.Navvy = new Navvy();
8207
8375
  }
@@ -8209,7 +8377,7 @@ class BXRestNavvyPullChannelPublic {
8209
8377
  * Возвращает публичный канал Push & Pull (public_id и подпись) с ограниченным сроком действия для приёма событий без авторизации пользователя.
8210
8378
  */
8211
8379
  get() {
8212
- return this.Navvy.simple([$pull, $channel, $public, $get], undefined, BXRestMapPullChannelPublic.get);
8380
+ return this.Navvy.simple(this.url.get, undefined, BXRestMapPullChannelPublic.get);
8213
8381
  }
8214
8382
  }
8215
8383
 
@@ -8218,13 +8386,65 @@ class BXRestNavvyPullApplicationConfig {
8218
8386
  this.Navvy = new Navvy();
8219
8387
  }
8220
8388
  /**
8221
- * Возвращает конфигурацию подключения приложения к серверам Push & Pull.
8389
+ * Возвращает настройки подключения приложения к серверам Push & Pull: адреса сервера и каналы.
8390
+ * Настройки личные: канал `private` принадлежит пользователю, с чьим токеном идёт запрос.
8391
+ * Запрашивайте их заново, когда истекут `exp` или `end` каналов.
8392
+ *
8393
+ * Работает только в контексте приложения: через вебхук портал ответит `WRONG_AUTH_TYPE`.
8394
+ *
8395
+ * @see https://apidocs.bitrix24.com/settings/interactivity/pull-application-config-get.html
8396
+ */
8397
+ get(param) {
8398
+ return this.Navvy.simple([$pull, $application, $config, $get], param, BXRestMapPullApplicationConfig.get);
8399
+ }
8400
+ }
8401
+
8402
+ class BXRestNavvyPullApplicationEvent {
8403
+ constructor() {
8404
+ this.url = {
8405
+ add: [$pull, $application, $event, $add]
8406
+ };
8407
+ this.Navvy = new Navvy();
8408
+ }
8409
+ /**
8410
+ * Отправляет событие в канал приложения: в общий `shared` или, с `USER_ID`, в личные каналы
8411
+ * пользователей. Событие получает клиент Push & Pull, подписанный на эти `MODULE_ID` и `COMMAND`.
8412
+ *
8413
+ * Работает только в контексте приложения: через вебхук портал ответит `WRONG_AUTH_TYPE`.
8414
+ * `true` в ответе значит, что событие принято к отправке, а не что оно дошло до клиента.
8415
+ *
8416
+ * @see https://apidocs.bitrix24.com/settings/interactivity/pull-application-event-add.html
8222
8417
  */
8223
- get() {
8224
- return this.Navvy.simple([$pull, $application, $config, $get], undefined, BXRestMapPullApplicationConfig.get);
8418
+ add(param) {
8419
+ return this.Navvy.simple(this.url.add, param);
8420
+ }
8421
+ }
8422
+
8423
+ class BXRestNavvyPullApplicationPush {
8424
+ constructor() {
8425
+ this.url = {
8426
+ add: [$pull, $application, $push, $add]
8427
+ };
8428
+ this.Navvy = new Navvy();
8429
+ }
8430
+ /**
8431
+ * Отправляет push-уведомление пользователям в мобильное приложение Bitrix24 от имени приложения.
8432
+ * У приложения должно быть заполнено название на текущем языке, иначе портал ответит `EMPTY_APP_NAME`.
8433
+ *
8434
+ * Работает только в контексте приложения и только у администратора портала.
8435
+ * `true` в ответе значит, что уведомление принято к отправке, а не что оно дошло.
8436
+ *
8437
+ * @see https://apidocs.bitrix24.com/settings/interactivity/pull-application-push-add.html
8438
+ */
8439
+ add(param) {
8440
+ return this.Navvy.simple(this.url.add, param);
8225
8441
  }
8226
8442
  }
8227
8443
 
8444
+ /**
8445
+ * Push & Pull: настройки подключения к серверу и отправка событий приложения.
8446
+ * Клиента веб-сокета в библиотеке нет, подключаться к серверу нужно своим клиентом.
8447
+ */
8228
8448
  class BXRestNavvyPull {
8229
8449
  constructor() {
8230
8450
  /**
@@ -8235,7 +8455,12 @@ class BXRestNavvyPull {
8235
8455
  public: new BXRestNavvyPullChannelPublic()
8236
8456
  };
8237
8457
  this.application = {
8458
+ /** Настройки подключения для приложения (`pull.application.config.*`). */
8238
8459
  config: new BXRestNavvyPullApplicationConfig(),
8460
+ /** События в канал приложения (`pull.application.event.*`). */
8461
+ event: new BXRestNavvyPullApplicationEvent(),
8462
+ /** Push-уведомления в мобильное приложение (`pull.application.push.*`). */
8463
+ push: new BXRestNavvyPullApplicationPush(),
8239
8464
  };
8240
8465
  }
8241
8466
  }
@@ -9032,7 +9257,7 @@ class BXRestNavvyCrmDealRecurring {
9032
9257
  /**
9033
9258
  * Возвращает список шаблонов регулярных сделок.
9034
9259
  */
9035
- list(param = {}) { return this.Navvy.simple([$crm, $deal, $recurring, $list], param); }
9260
+ list(param = {}) { return this.Navvy.pagNav([$crm, $deal, $recurring, $list], param); }
9036
9261
  /**
9037
9262
  * Изменяет настройки шаблона регулярной сделки.
9038
9263
  */
@@ -10891,7 +11116,7 @@ class BXRestNavvyCrmRequisiteLink {
10891
11116
  * @see https://apidocs.bitrix24.ru/api-reference/crm/requisites/links/crm-requisite-link-list.html
10892
11117
  */
10893
11118
  list(param = {}) {
10894
- return this.Navvy.simple(this.url.list, param);
11119
+ return this.Navvy.pagNav(this.url.list, param);
10895
11120
  }
10896
11121
  /**
10897
11122
  * Удаляет связь реквизитов с объектом, не удаляя сами реквизиты.
@@ -11239,7 +11464,7 @@ class BXRestNavvyCrmTimelineBindings {
11239
11464
  * @see https://apidocs.bitrix24.ru/api-reference/crm/timeline/bindings/crm-timeline-bindings-list.html
11240
11465
  */
11241
11466
  list(param) {
11242
- return this.Navvy.simple(this.url.list, param);
11467
+ return this.Navvy.pagNav(this.url.list, param);
11243
11468
  }
11244
11469
  /**
11245
11470
  * Удаляет связь записи таймлайна с указанным элементом CRM.
@@ -11904,7 +12129,7 @@ class BXRestNavvyCrmItemProductRow {
11904
12129
  * Возвращает список товарных позиций.
11905
12130
  */
11906
12131
  list(param) {
11907
- return this.Navvy.simple([$crm, $item, $productrow, $list], param);
12132
+ return this.Navvy.pagNavKeyed([$crm, $item, $productrow, $list], param, 'productRows');
11908
12133
  }
11909
12134
  /**
11910
12135
  * Сохраняет набор товарных позиций объекта CRM.
@@ -12380,7 +12605,7 @@ class BXRestNavvyCrmActivity {
12380
12605
  * Возвращает список дел всех типов по фильтру.
12381
12606
  */
12382
12607
  list(param = {}) {
12383
- return this.Navvy.simple([$crm, $activity, $list], param);
12608
+ return this.Navvy.pagNav([$crm, $activity, $list], param);
12384
12609
  }
12385
12610
  /**
12386
12611
  * Обновляет дело.
@@ -12416,7 +12641,7 @@ class BXRestNavvyCrmOrderEntity {
12416
12641
  * Возвращает список привязок заказов к объектам CRM.
12417
12642
  */
12418
12643
  list(param = {}) {
12419
- return this.Navvy.simple([$crm, $orderentity, $list], param);
12644
+ return this.Navvy.pagNavKeyed([$crm, $orderentity, $list], param, 'orderEntity');
12420
12645
  }
12421
12646
  }
12422
12647
 
@@ -12428,7 +12653,7 @@ class BXRestNavvyCrmStageHistory {
12428
12653
  * Возвращает историю движения элемента по стадиям.
12429
12654
  */
12430
12655
  list(param = {}) {
12431
- return this.Navvy.simple([$crm, $stagehistory, $list], param);
12656
+ return this.Navvy.pagNavKeyed([$crm, $stagehistory, $list], param, 'items');
12432
12657
  }
12433
12658
  }
12434
12659
 
@@ -14272,7 +14497,7 @@ class BXRestNavvyDocumentGeneratorDocument {
14272
14497
  * Возвращает список документов.
14273
14498
  */
14274
14499
  list(param = {}) {
14275
- return this.Navvy.simple([$documentgenerator, $document, $list], param);
14500
+ return this.Navvy.pagNavKeyed([$documentgenerator, $document, $list], param, 'documents');
14276
14501
  }
14277
14502
  /**
14278
14503
  * Изменяет существующий документ.
@@ -14308,7 +14533,7 @@ class BXRestNavvyDocumentGeneratorNumerator {
14308
14533
  * Возвращает список нумераторов.
14309
14534
  */
14310
14535
  list(param = {}) {
14311
- return this.Navvy.simple([$documentgenerator, $numerator, $list], param);
14536
+ return this.Navvy.pagNavKeyed([$documentgenerator, $numerator, $list], param, 'numerators');
14312
14537
  }
14313
14538
  /**
14314
14539
  * Изменяет нумератор.
@@ -14386,7 +14611,7 @@ class BXRestNavvyDocumentGeneratorRole {
14386
14611
  * Возвращает список ролей без детального состава прав.
14387
14612
  */
14388
14613
  list(param = {}) {
14389
- return this.Navvy.simple([$documentgenerator, $role, $list], param);
14614
+ return this.Navvy.pagNavKeyed([$documentgenerator, $role, $list], param, 'roles');
14390
14615
  }
14391
14616
  /**
14392
14617
  * Обновляет роль и возвращает актуальные данные.
@@ -14428,7 +14653,7 @@ class BXRestNavvyDocumentGeneratorTemplate {
14428
14653
  * Возвращает список шаблонов документов по фильтру.
14429
14654
  */
14430
14655
  list(param = {}) {
14431
- return this.Navvy.simple([$documentgenerator, $template, $list], param);
14656
+ return this.Navvy.pagNavKeyed([$documentgenerator, $template, $list], param, 'templates');
14432
14657
  }
14433
14658
  /**
14434
14659
  * Обновляет существующий шаблон документа.
@@ -14965,7 +15190,7 @@ class BXRestNavvyBookingV1Resource {
14965
15190
  * Возвращает список ресурсов.
14966
15191
  */
14967
15192
  list(param = {}) {
14968
- return this.Navvy.simple([$booking, $v1, $resource, $list], param);
15193
+ return this.Navvy.pagNavKeyed([$booking, $v1, $resource, $list], param, 'resource');
14969
15194
  }
14970
15195
  /**
14971
15196
  * Обновляет ресурс.
@@ -15001,7 +15226,7 @@ class BXRestNavvyBookingV1ResourceType {
15001
15226
  * Возвращает список типов ресурсов.
15002
15227
  */
15003
15228
  list(param = {}) {
15004
- return this.Navvy.simple([$booking, $v1, $resourcetype, $list], param);
15229
+ return this.Navvy.pagNavKeyed([$booking, $v1, $resourcetype, $list], param, 'resourceType');
15005
15230
  }
15006
15231
  /**
15007
15232
  * Обновляет тип ресурса.
@@ -16382,7 +16607,7 @@ class BXRestNavvyCatalogCatalog {
16382
16607
  * Возвращает список торговых каталогов.
16383
16608
  */
16384
16609
  list(param = {}) {
16385
- return this.Navvy.simple([$catalog, $catalog, $list], param);
16610
+ return this.Navvy.pagNavKeyed([$catalog, $catalog, $list], param, 'catalogs');
16386
16611
  }
16387
16612
  /**
16388
16613
  * Обновляет параметры торгового каталога.
@@ -16418,7 +16643,7 @@ class BXRestNavvyCatalogDocumentElement {
16418
16643
  * Возвращает список товарных позиций документа складского учёта.
16419
16644
  */
16420
16645
  list(param = {}) {
16421
- return this.Navvy.simple([$catalog, $document, $element, $list], param);
16646
+ return this.Navvy.pagNavKeyed([$catalog, $document, $element, $list], param, 'documentElements');
16422
16647
  }
16423
16648
  /**
16424
16649
  * Обновляет товарную позицию документа складского учёта.
@@ -16504,7 +16729,7 @@ class BXRestNavvyCatalogDocument {
16504
16729
  * Возвращает список документов складского учёта.
16505
16730
  */
16506
16731
  list(param = {}) {
16507
- return this.Navvy.simple([$catalog, $document, $list], param);
16732
+ return this.Navvy.pagNavKeyed([$catalog, $document, $list], param, 'documents');
16508
16733
  }
16509
16734
  /**
16510
16735
  * Обновляет документ складского учёта.
@@ -16540,7 +16765,7 @@ class BXRestNavvyCatalogDocumentContractor {
16540
16765
  * Возвращает список поставщиков документов складского учёта.
16541
16766
  */
16542
16767
  list(param = {}) {
16543
- return this.Navvy.simple([$catalog, $documentcontractor, $list], param);
16768
+ return this.Navvy.pagNavKeyed([$catalog, $documentcontractor, $list], param, 'documentContractor');
16544
16769
  }
16545
16770
  }
16546
16771
 
@@ -16584,7 +16809,7 @@ class BXRestNavvyCatalogExtra {
16584
16809
  * Возвращает список наценок.
16585
16810
  */
16586
16811
  list(param = {}) {
16587
- return this.Navvy.simple([$catalog, $extra, $list], param);
16812
+ return this.Navvy.pagNavKeyed([$catalog, $extra, $list], param, 'extras');
16588
16813
  }
16589
16814
  }
16590
16815
 
@@ -16620,7 +16845,7 @@ class BXRestNavvyCatalogMeasure {
16620
16845
  * Возвращает список единиц измерения.
16621
16846
  */
16622
16847
  list(param = {}) {
16623
- return this.Navvy.simple([$catalog, $measure, $list], param);
16848
+ return this.Navvy.pagNavKeyed([$catalog, $measure, $list], param, 'measures');
16624
16849
  }
16625
16850
  /**
16626
16851
  * Обновляет единицу измерения.
@@ -16662,7 +16887,7 @@ class BXRestNavvyCatalogPrice {
16662
16887
  * Возвращает список цен.
16663
16888
  */
16664
16889
  list(param = {}) {
16665
- return this.Navvy.simple([$catalog, $price, $list], param);
16890
+ return this.Navvy.pagNavKeyed([$catalog, $price, $list], param, 'prices');
16666
16891
  }
16667
16892
  /**
16668
16893
  * Устанавливает или изменяет цену товара, создавая запись при её отсутствии.
@@ -16710,7 +16935,7 @@ class BXRestNavvyCatalogPriceType {
16710
16935
  * Возвращает список типов цен.
16711
16936
  */
16712
16937
  list(param = {}) {
16713
- return this.Navvy.simple([$catalog, $priceType, $list], param);
16938
+ return this.Navvy.pagNavKeyed([$catalog, $priceType, $list], param, 'priceTypes');
16714
16939
  }
16715
16940
  /**
16716
16941
  * Обновляет тип цены.
@@ -16746,7 +16971,7 @@ class BXRestNavvyCatalogPriceTypeGroup {
16746
16971
  * Возвращает список привязок типов цен к группам покупателей.
16747
16972
  */
16748
16973
  list(param = {}) {
16749
- return this.Navvy.simple([$catalog, $priceTypeGroup, $list], param);
16974
+ return this.Navvy.pagNavKeyed([$catalog, $priceTypeGroup, $list], param, 'priceTypeGroups');
16750
16975
  }
16751
16976
  }
16752
16977
 
@@ -16788,7 +17013,7 @@ class BXRestNavvyCatalogPriceTypeLang {
16788
17013
  * Возвращает список переводов названий типов цен.
16789
17014
  */
16790
17015
  list(param = {}) {
16791
- return this.Navvy.simple([$catalog, $priceTypeLang, $list], param);
17016
+ return this.Navvy.pagNavKeyed([$catalog, $priceTypeLang, $list], param, 'priceTypeLangs');
16792
17017
  }
16793
17018
  /**
16794
17019
  * Обновляет перевод названия типа цены.
@@ -16838,7 +17063,7 @@ class BXRestNavvyCatalogProductOffer {
16838
17063
  * Возвращает список товаров-вариаций.
16839
17064
  */
16840
17065
  list(param = {}) {
16841
- return this.Navvy.simple([$catalog, $product, $offer, $list], param);
17066
+ return this.Navvy.pagNavKeyed([$catalog, $product, $offer, $list], param, 'offers');
16842
17067
  }
16843
17068
  /**
16844
17069
  * Обновляет товар-вариацию.
@@ -16888,7 +17113,7 @@ class BXRestNavvyCatalogProductService {
16888
17113
  * Возвращает список услуг.
16889
17114
  */
16890
17115
  list(param = {}) {
16891
- return this.Navvy.simple([$catalog, $product, $service, $list], param);
17116
+ return this.Navvy.pagNavKeyed([$catalog, $product, $service, $list], param, 'services');
16892
17117
  }
16893
17118
  /**
16894
17119
  * Обновляет услугу.
@@ -16938,7 +17163,7 @@ class BXRestNavvyCatalogProductSku {
16938
17163
  * Возвращает список товаров с вариациями.
16939
17164
  */
16940
17165
  list(param = {}) {
16941
- return this.Navvy.simple([$catalog, $product, $sku, $list], param);
17166
+ return this.Navvy.pagNavKeyed([$catalog, $product, $sku, $list], param, 'units');
16942
17167
  }
16943
17168
  /**
16944
17169
  * Обновляет товар с вариациями.
@@ -16998,7 +17223,7 @@ class BXRestNavvyCatalogProduct {
16998
17223
  * Возвращает список товаров.
16999
17224
  */
17000
17225
  list(param = {}) {
17001
- return this.Navvy.simple([$catalog, $product, $list], param);
17226
+ return this.Navvy.pagNavKeyed([$catalog, $product, $list], param, 'products');
17002
17227
  }
17003
17228
  /**
17004
17229
  * Обновляет товар.
@@ -17076,7 +17301,7 @@ class BXRestNavvyCatalogProductProperty {
17076
17301
  * Возвращает список свойств товаров.
17077
17302
  */
17078
17303
  list(param = {}) {
17079
- return this.Navvy.simple([$catalog, $productProperty, $list], param);
17304
+ return this.Navvy.pagNavKeyed([$catalog, $productProperty, $list], param, 'productProperties');
17080
17305
  }
17081
17306
  /**
17082
17307
  * Обновляет свойство товара.
@@ -17118,7 +17343,7 @@ class BXRestNavvyCatalogProductPropertyEnum {
17118
17343
  * Возвращает список значений списочного свойства.
17119
17344
  */
17120
17345
  list(param = {}) {
17121
- return this.Navvy.simple([$catalog, $productPropertyEnum, $list], param);
17346
+ return this.Navvy.pagNavKeyed([$catalog, $productPropertyEnum, $list], param, 'productPropertyEnums');
17122
17347
  }
17123
17348
  /**
17124
17349
  * Обновляет значение списочного свойства товара.
@@ -17162,7 +17387,7 @@ class BXRestNavvyCatalogProductPropertyFeature {
17162
17387
  * Возвращает список параметров свойств товаров.
17163
17388
  */
17164
17389
  list(param = {}) {
17165
- return this.Navvy.simple([$catalog, $productPropertyFeature, $list], param);
17390
+ return this.Navvy.pagNavKeyed([$catalog, $productPropertyFeature, $list], param, 'productPropertyFeatures');
17166
17391
  }
17167
17392
  /**
17168
17393
  * Обновляет параметр свойства товара.
@@ -17186,7 +17411,7 @@ class BXRestNavvyCatalogProductPropertySection {
17186
17411
  * Возвращает список секционных настроек свойств.
17187
17412
  */
17188
17413
  list(param = {}) {
17189
- return this.Navvy.simple([$catalog, $productPropertySection, $list], param);
17414
+ return this.Navvy.pagNavKeyed([$catalog, $productPropertySection, $list], param, 'productPropertySections');
17190
17415
  }
17191
17416
  /**
17192
17417
  * Устанавливает секционные настройки свойства.
@@ -17216,7 +17441,7 @@ class BXRestNavvyCatalogRatio {
17216
17441
  * Возвращает список коэффициентов единиц измерения.
17217
17442
  */
17218
17443
  list(param = {}) {
17219
- return this.Navvy.simple([$catalog, $ratio, $list], param);
17444
+ return this.Navvy.pagNavKeyed([$catalog, $ratio, $list], param, 'ratios');
17220
17445
  }
17221
17446
  }
17222
17447
 
@@ -17252,7 +17477,7 @@ class BXRestNavvyCatalogRoundingRule {
17252
17477
  * Возвращает список правил округления цен.
17253
17478
  */
17254
17479
  list(param = {}) {
17255
- return this.Navvy.simple([$catalog, $roundingRule, $list], param);
17480
+ return this.Navvy.pagNavKeyed([$catalog, $roundingRule, $list], param, 'roundingRules');
17256
17481
  }
17257
17482
  /**
17258
17483
  * Обновляет правило округления цен.
@@ -17294,7 +17519,7 @@ class BXRestNavvyCatalogSection {
17294
17519
  * Возвращает список разделов каталога.
17295
17520
  */
17296
17521
  list(param = {}) {
17297
- return this.Navvy.simple([$catalog, $section, $list], param);
17522
+ return this.Navvy.pagNavKeyed([$catalog, $section, $list], param, 'sections');
17298
17523
  }
17299
17524
  /**
17300
17525
  * Обновляет раздел каталога.
@@ -17336,7 +17561,7 @@ class BXRestNavvyCatalogStore {
17336
17561
  * Возвращает список складов.
17337
17562
  */
17338
17563
  list(param = {}) {
17339
- return this.Navvy.simple([$catalog, $store, $list], param);
17564
+ return this.Navvy.pagNavKeyed([$catalog, $store, $list], param, 'stores');
17340
17565
  }
17341
17566
  /**
17342
17567
  * Обновляет склад.
@@ -17366,7 +17591,7 @@ class BXRestNavvyCatalogStoreProduct {
17366
17591
  * Возвращает список остатков товаров на складах.
17367
17592
  */
17368
17593
  list(param = {}) {
17369
- return this.Navvy.simple([$catalog, $storeProduct, $list], param);
17594
+ return this.Navvy.pagNavKeyed([$catalog, $storeProduct, $list], param, 'storeProducts');
17370
17595
  }
17371
17596
  }
17372
17597
 
@@ -17378,7 +17603,7 @@ class BXRestNavvyCatalogUserfieldDocument {
17378
17603
  * Возвращает список пользовательских полей документов складского учёта.
17379
17604
  */
17380
17605
  list(param = {}) {
17381
- return this.Navvy.simple([$catalog, $userfield, $document, $list], param);
17606
+ return this.Navvy.pagNavKeyed([$catalog, $userfield, $document, $list], param, 'documents');
17382
17607
  }
17383
17608
  /**
17384
17609
  * Обновляет пользовательское поле документа складского учёта.
@@ -17429,7 +17654,7 @@ class BXRestNavvyCatalogVat {
17429
17654
  * Возвращает список ставок НДС.
17430
17655
  */
17431
17656
  list(param = {}) {
17432
- return this.Navvy.simple([$catalog, $vat, $list], param);
17657
+ return this.Navvy.pagNavKeyed([$catalog, $vat, $list], param, 'vats');
17433
17658
  }
17434
17659
  /**
17435
17660
  * Обновляет ставку НДС.
@@ -17582,7 +17807,7 @@ class BXRestNavvySaleBasketItem {
17582
17807
  * Возвращает список элементов корзины.
17583
17808
  */
17584
17809
  list(param = {}) {
17585
- return this.Navvy.simple([$sale, $basketItem, $list], param);
17810
+ return this.Navvy.pagNavKeyed([$sale, $basketItem, $list], param, 'basketItems');
17586
17811
  }
17587
17812
  /**
17588
17813
  * Обновляет элемент корзины.
@@ -17632,7 +17857,7 @@ class BXRestNavvySaleBasketProperties {
17632
17857
  * Возвращает список свойств элементов корзины.
17633
17858
  */
17634
17859
  list(param = {}) {
17635
- return this.Navvy.simple([$sale, $basketProperties, $list], param);
17860
+ return this.Navvy.pagNavKeyed([$sale, $basketProperties, $list], param, 'basketProperties');
17636
17861
  }
17637
17862
  /**
17638
17863
  * Обновляет свойство элемента корзины.
@@ -17670,7 +17895,7 @@ class BXRestNavvySaleBusinessValuePersonDomain {
17670
17895
  * Возвращает список соответствий типов плательщиков.
17671
17896
  */
17672
17897
  list(param = {}) {
17673
- return this.Navvy.simple([$sale, $businessValuePersonDomain, $list], param);
17898
+ return this.Navvy.pagNavKeyed([$sale, $businessValuePersonDomain, $list], param, 'businessValuePersonDomains');
17674
17899
  }
17675
17900
  }
17676
17901
 
@@ -17943,7 +18168,7 @@ class BXRestNavvySaleOrder {
17943
18168
  * Возвращает список заказов.
17944
18169
  */
17945
18170
  list(param = {}) {
17946
- return this.Navvy.simple([$sale, $order, $list], param);
18171
+ return this.Navvy.pagNavKeyed([$sale, $order, $list], param, 'orders');
17947
18172
  }
17948
18173
  /**
17949
18174
  * Обновляет заказ.
@@ -17985,7 +18210,7 @@ class BXRestNavvySalePayment {
17985
18210
  * Возвращает список оплат.
17986
18211
  */
17987
18212
  list(param = {}) {
17988
- return this.Navvy.simple([$sale, $payment, $list], param);
18213
+ return this.Navvy.pagNavKeyed([$sale, $payment, $list], param, 'payments');
17989
18214
  }
17990
18215
  /**
17991
18216
  * Обновляет оплату.
@@ -18027,7 +18252,7 @@ class BXRestNavvySalePaymentItemBasket {
18027
18252
  * Возвращает список привязок элементов корзины к оплатам.
18028
18253
  */
18029
18254
  list(param = {}) {
18030
- return this.Navvy.simple([$sale, $paymentItemBasket, $list], param);
18255
+ return this.Navvy.pagNavKeyed([$sale, $paymentItemBasket, $list], param, 'paymentItemsBasket');
18031
18256
  }
18032
18257
  /**
18033
18258
  * Обновляет привязку элемента корзины к оплате.
@@ -18069,7 +18294,7 @@ class BXRestNavvySalePaymentItemShipment {
18069
18294
  * Возвращает список привязок оплат к отгрузкам.
18070
18295
  */
18071
18296
  list(param = {}) {
18072
- return this.Navvy.simple([$sale, $paymentItemShipment, $list], param);
18297
+ return this.Navvy.pagNavKeyed([$sale, $paymentItemShipment, $list], param, 'paymentItemsShipment');
18073
18298
  }
18074
18299
  /**
18075
18300
  * Обновляет привязку оплаты к отгрузке.
@@ -18229,7 +18454,7 @@ class BXRestNavvySalePersonType {
18229
18454
  * Возвращает список типов плательщиков.
18230
18455
  */
18231
18456
  list(param = {}) {
18232
- return this.Navvy.simple([$sale, $personType, $list], param);
18457
+ return this.Navvy.pagNavKeyed([$sale, $personType, $list], param, 'personTypes');
18233
18458
  }
18234
18459
  /**
18235
18460
  * Обновляет тип плательщика.
@@ -18271,7 +18496,7 @@ class BXRestNavvySaleProperty {
18271
18496
  * Возвращает список свойств заказа.
18272
18497
  */
18273
18498
  list(param = {}) {
18274
- return this.Navvy.simple([$sale, $property, $list], param);
18499
+ return this.Navvy.pagNavKeyed([$sale, $property, $list], param, 'properties');
18275
18500
  }
18276
18501
  /**
18277
18502
  * Обновляет свойство заказа.
@@ -18349,7 +18574,7 @@ class BXRestNavvySalePropertyRelation {
18349
18574
  * Возвращает список привязок свойств заказа.
18350
18575
  */
18351
18576
  list(param = {}) {
18352
- return this.Navvy.simple([$sale, $propertyRelation, $list], param);
18577
+ return this.Navvy.pagNavKeyed([$sale, $propertyRelation, $list], param, 'propertyRelations');
18353
18578
  }
18354
18579
  }
18355
18580
 
@@ -18379,7 +18604,7 @@ class BXRestNavvySalePropertyValue {
18379
18604
  * Возвращает список значений свойств заказа.
18380
18605
  */
18381
18606
  list(param = {}) {
18382
- return this.Navvy.simple([$sale, $propertyValue, $list], param);
18607
+ return this.Navvy.pagNavKeyed([$sale, $propertyValue, $list], param, 'propertyValues');
18383
18608
  }
18384
18609
  /**
18385
18610
  * Устанавливает или изменяет значение свойства заказа.
@@ -18421,7 +18646,7 @@ class BXRestNavvySalePropertyVariant {
18421
18646
  * Возвращает список значений списочного свойства заказа.
18422
18647
  */
18423
18648
  list(param = {}) {
18424
- return this.Navvy.simple([$sale, $propertyVariant, $list], param);
18649
+ return this.Navvy.pagNavKeyed([$sale, $propertyVariant, $list], param, 'propertyVariants');
18425
18650
  }
18426
18651
  /**
18427
18652
  * Обновляет значение списочного свойства заказа.
@@ -18463,7 +18688,7 @@ class BXRestNavvySaleShipment {
18463
18688
  * Возвращает список отгрузок.
18464
18689
  */
18465
18690
  list(param = {}) {
18466
- return this.Navvy.simple([$sale, $shipment, $list], param);
18691
+ return this.Navvy.pagNavKeyed([$sale, $shipment, $list], param, 'shipments');
18467
18692
  }
18468
18693
  /**
18469
18694
  * Обновляет отгрузку.
@@ -18505,7 +18730,7 @@ class BXRestNavvySaleShipmentItem {
18505
18730
  * Возвращает список товарных позиций отгрузки.
18506
18731
  */
18507
18732
  list(param = {}) {
18508
- return this.Navvy.simple([$sale, $shipmentItem, $list], param);
18733
+ return this.Navvy.pagNavKeyed([$sale, $shipmentItem, $list], param, 'shipmentItems');
18509
18734
  }
18510
18735
  /**
18511
18736
  * Обновляет товарную позицию отгрузки.
@@ -18547,7 +18772,7 @@ class BXRestNavvySaleShipmentProperty {
18547
18772
  * Возвращает список свойств отгрузки.
18548
18773
  */
18549
18774
  list(param = {}) {
18550
- return this.Navvy.simple([$sale, $shipmentProperty, $list], param);
18775
+ return this.Navvy.pagNavKeyed([$sale, $shipmentProperty, $list], param, 'properties');
18551
18776
  }
18552
18777
  /**
18553
18778
  * Обновляет свойство отгрузки.
@@ -18583,7 +18808,7 @@ class BXRestNavvySaleShipmentPropertyValue {
18583
18808
  * Возвращает список значений свойств отгрузки.
18584
18809
  */
18585
18810
  list(param = {}) {
18586
- return this.Navvy.simple([$sale, $shipmentPropertyValue, $list], param);
18811
+ return this.Navvy.pagNavKeyed([$sale, $shipmentPropertyValue, $list], param, 'propertyValues');
18587
18812
  }
18588
18813
  /**
18589
18814
  * Устанавливает или изменяет значение свойства отгрузки.
@@ -18625,7 +18850,7 @@ class BXRestNavvySaleStatus {
18625
18850
  * Возвращает список статусов.
18626
18851
  */
18627
18852
  list(param = {}) {
18628
- return this.Navvy.simple([$sale, $status, $list], param);
18853
+ return this.Navvy.pagNavKeyed([$sale, $status, $list], param, 'statuses');
18629
18854
  }
18630
18855
  /**
18631
18856
  * Обновляет статус.
@@ -18667,7 +18892,7 @@ class BXRestNavvySaleStatusLang {
18667
18892
  * Возвращает список локализаций статусов.
18668
18893
  */
18669
18894
  list(param = {}) {
18670
- return this.Navvy.simple([$sale, $statusLang, $list], param);
18895
+ return this.Navvy.pagNavKeyed([$sale, $statusLang, $list], param, 'statusLangs');
18671
18896
  }
18672
18897
  }
18673
18898
 
@@ -18685,7 +18910,7 @@ class BXRestNavvySaleTradeBinding {
18685
18910
  * Возвращает список привязок источников заказов.
18686
18911
  */
18687
18912
  list(param = {}) {
18688
- return this.Navvy.simple([$sale, $tradeBinding, $list], param);
18913
+ return this.Navvy.pagNavKeyed([$sale, $tradeBinding, $list], param, 'tradeBindings');
18689
18914
  }
18690
18915
  }
18691
18916
 
@@ -18703,7 +18928,7 @@ class BXRestNavvySaleTradePlatform {
18703
18928
  * Возвращает список источников заказов.
18704
18929
  */
18705
18930
  list(param = {}) {
18706
- return this.Navvy.simple([$sale, $tradePlatform, $list], param);
18931
+ return this.Navvy.pagNavKeyed([$sale, $tradePlatform, $list], param, 'tradePlatforms');
18707
18932
  }
18708
18933
  }
18709
18934
 
@@ -18997,7 +19222,7 @@ class BXRestNavvyUserFieldType {
18997
19222
  * Возвращает список типов пользовательских полей, зарегистрированных приложением.
18998
19223
  */
18999
19224
  list(param = {}) {
19000
- return this.Navvy.simple([$userfieldtype, $list], param);
19225
+ return this.Navvy.pagNav([$userfieldtype, $list], param);
19001
19226
  }
19002
19227
  /**
19003
19228
  * Изменяет настройки зарегистрированного приложением типа пользовательских полей.
@@ -19765,5 +19990,5 @@ function toRecord(value) {
19765
19990
  * Generated bundle index. Do not edit.
19766
19991
  */
19767
19992
 
19768
- export { base as BXBaseServices, BXRestApiError, BXRestFrame, BXRestFrameError, BXRestMap, BXRestMapResult, BXRestNavvy, HttpBXServices as BXRestRequest, BXRestSettings, BXRestTimeoutError, Navvy, SessionKeyError, SessionKeyServices, getAuthRefreshError, instanceOfiBXRestAnswerSuccess as isBXRestAnswerSuccess, isBXRestAuthError, partNameMethods$1 as partNameMethods };
19993
+ export { base as BXBaseServices, BXRestApiError, BXRestFrame, BXRestFrameError, BXRestHttpError, BXRestMap, BXRestMapResult, BXRestNavvy, HttpBXServices as BXRestRequest, BXRestSettings, BXRestTimeoutError, Navvy, SessionKeyError, SessionKeyServices, getAuthRefreshError, instanceOfiBXRestAnswerSuccess as isBXRestAnswerSuccess, isBXRestAuthError, partNameMethods$1 as partNameMethods };
19769
19994
  //# sourceMappingURL=bx-rest.mjs.map