@bitrix24/b24jssdk 1.3.0 → 2.0.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 (440) hide show
  1. package/README-AI.md +3 -2
  2. package/README.md +2 -0
  3. package/dist/cjs/_virtual/_commonjsHelpers.cjs +19 -0
  4. package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +1 -0
  5. package/dist/cjs/_virtual/protobuf.cjs +20 -0
  6. package/dist/cjs/_virtual/protobuf.cjs.map +1 -0
  7. package/dist/cjs/_virtual/protobuf2.cjs +14 -0
  8. package/dist/cjs/_virtual/protobuf2.cjs.map +1 -0
  9. package/dist/cjs/core/abstract-b24.cjs +357 -0
  10. package/dist/cjs/core/abstract-b24.cjs.map +1 -0
  11. package/dist/cjs/core/actions/abstract-action.cjs +26 -0
  12. package/dist/cjs/core/actions/abstract-action.cjs.map +1 -0
  13. package/dist/cjs/core/actions/abstract-batch.cjs +97 -0
  14. package/dist/cjs/core/actions/abstract-batch.cjs.map +1 -0
  15. package/dist/cjs/core/actions/manager.cjs +55 -0
  16. package/dist/cjs/core/actions/manager.cjs.map +1 -0
  17. package/dist/cjs/core/actions/v2/batch-by-chunk.cjs +95 -0
  18. package/dist/cjs/core/actions/v2/batch-by-chunk.cjs.map +1 -0
  19. package/dist/cjs/core/actions/v2/batch.cjs +128 -0
  20. package/dist/cjs/core/actions/v2/batch.cjs.map +1 -0
  21. package/dist/cjs/core/actions/v2/call-list.cjs +144 -0
  22. package/dist/cjs/core/actions/v2/call-list.cjs.map +1 -0
  23. package/dist/cjs/core/actions/v2/call.cjs +56 -0
  24. package/dist/cjs/core/actions/v2/call.cjs.map +1 -0
  25. package/dist/cjs/core/actions/v2/fetch-list.cjs +145 -0
  26. package/dist/cjs/core/actions/v2/fetch-list.cjs.map +1 -0
  27. package/dist/cjs/core/actions/v2/manager-v2.cjs +76 -0
  28. package/dist/cjs/core/actions/v2/manager-v2.cjs.map +1 -0
  29. package/dist/cjs/core/actions/v3/_keyset-paginate.cjs +69 -0
  30. package/dist/cjs/core/actions/v3/_keyset-paginate.cjs.map +1 -0
  31. package/dist/cjs/core/actions/v3/aggregate.cjs +96 -0
  32. package/dist/cjs/core/actions/v3/aggregate.cjs.map +1 -0
  33. package/dist/cjs/core/actions/v3/batch-by-chunk.cjs +93 -0
  34. package/dist/cjs/core/actions/v3/batch-by-chunk.cjs.map +1 -0
  35. package/dist/cjs/core/actions/v3/batch.cjs +122 -0
  36. package/dist/cjs/core/actions/v3/batch.cjs.map +1 -0
  37. package/dist/cjs/core/actions/v3/call-list.cjs +126 -0
  38. package/dist/cjs/core/actions/v3/call-list.cjs.map +1 -0
  39. package/dist/cjs/core/actions/v3/call-tail.cjs +118 -0
  40. package/dist/cjs/core/actions/v3/call-tail.cjs.map +1 -0
  41. package/dist/cjs/core/actions/v3/call.cjs +51 -0
  42. package/dist/cjs/core/actions/v3/call.cjs.map +1 -0
  43. package/dist/cjs/core/actions/v3/fetch-list.cjs +122 -0
  44. package/dist/cjs/core/actions/v3/fetch-list.cjs.map +1 -0
  45. package/dist/cjs/core/actions/v3/fetch-tail.cjs +112 -0
  46. package/dist/cjs/core/actions/v3/fetch-tail.cjs.map +1 -0
  47. package/dist/cjs/core/actions/v3/manager-v3.cjs +100 -0
  48. package/dist/cjs/core/actions/v3/manager-v3.cjs.map +1 -0
  49. package/dist/cjs/core/http/abstract-http.cjs +641 -0
  50. package/dist/cjs/core/http/abstract-http.cjs.map +1 -0
  51. package/dist/cjs/core/http/ajax-error.cjs +113 -0
  52. package/dist/cjs/core/http/ajax-error.cjs.map +1 -0
  53. package/dist/cjs/core/http/ajax-result.cjs +219 -0
  54. package/dist/cjs/core/http/ajax-result.cjs.map +1 -0
  55. package/dist/cjs/core/http/limiters/adaptive-delayer.cjs +137 -0
  56. package/dist/cjs/core/http/limiters/adaptive-delayer.cjs.map +1 -0
  57. package/dist/cjs/core/http/limiters/manager.cjs +373 -0
  58. package/dist/cjs/core/http/limiters/manager.cjs.map +1 -0
  59. package/dist/cjs/core/http/limiters/operating-limiter.cjs +173 -0
  60. package/dist/cjs/core/http/limiters/operating-limiter.cjs.map +1 -0
  61. package/dist/cjs/core/http/limiters/params-factory.cjs +124 -0
  62. package/dist/cjs/core/http/limiters/params-factory.cjs.map +1 -0
  63. package/dist/cjs/core/http/limiters/rate-limiter.cjs +404 -0
  64. package/dist/cjs/core/http/limiters/rate-limiter.cjs.map +1 -0
  65. package/dist/cjs/core/http/redact.cjs +85 -0
  66. package/dist/cjs/core/http/redact.cjs.map +1 -0
  67. package/dist/cjs/core/http/v2.cjs +85 -0
  68. package/dist/cjs/core/http/v2.cjs.map +1 -0
  69. package/dist/cjs/core/http/v3.cjs +82 -0
  70. package/dist/cjs/core/http/v3.cjs.map +1 -0
  71. package/dist/cjs/core/interaction/batch/abstract-interaction-batch.cjs +71 -0
  72. package/dist/cjs/core/interaction/batch/abstract-interaction-batch.cjs.map +1 -0
  73. package/dist/cjs/core/interaction/batch/parse-row.cjs +69 -0
  74. package/dist/cjs/core/interaction/batch/parse-row.cjs.map +1 -0
  75. package/dist/cjs/core/interaction/batch/processing/interface-strategy.cjs +87 -0
  76. package/dist/cjs/core/interaction/batch/processing/interface-strategy.cjs.map +1 -0
  77. package/dist/cjs/core/interaction/batch/processing/v2/abstract-processing.cjs +138 -0
  78. package/dist/cjs/core/interaction/batch/processing/v2/abstract-processing.cjs.map +1 -0
  79. package/dist/cjs/core/interaction/batch/processing/v2/as-array.cjs +34 -0
  80. package/dist/cjs/core/interaction/batch/processing/v2/as-array.cjs.map +1 -0
  81. package/dist/cjs/core/interaction/batch/processing/v2/as-object.cjs +34 -0
  82. package/dist/cjs/core/interaction/batch/processing/v2/as-object.cjs.map +1 -0
  83. package/dist/cjs/core/interaction/batch/processing/v3/abstract-processing.cjs +115 -0
  84. package/dist/cjs/core/interaction/batch/processing/v3/abstract-processing.cjs.map +1 -0
  85. package/dist/cjs/core/interaction/batch/processing/v3/as-array.cjs +34 -0
  86. package/dist/cjs/core/interaction/batch/processing/v3/as-array.cjs.map +1 -0
  87. package/dist/cjs/core/interaction/batch/processing/v3/as-object.cjs +34 -0
  88. package/dist/cjs/core/interaction/batch/processing/v3/as-object.cjs.map +1 -0
  89. package/dist/cjs/core/interaction/batch/v2.cjs +47 -0
  90. package/dist/cjs/core/interaction/batch/v2.cjs.map +1 -0
  91. package/dist/cjs/core/interaction/batch/v3.cjs +45 -0
  92. package/dist/cjs/core/interaction/batch/v3.cjs.map +1 -0
  93. package/dist/cjs/core/language/list.cjs +59 -0
  94. package/dist/cjs/core/language/list.cjs.map +1 -0
  95. package/dist/cjs/core/request-id-generator.cjs +44 -0
  96. package/dist/cjs/core/request-id-generator.cjs.map +1 -0
  97. package/dist/cjs/core/result.cjs +137 -0
  98. package/dist/cjs/core/result.cjs.map +1 -0
  99. package/dist/cjs/core/sdk-error.cjs +85 -0
  100. package/dist/cjs/core/sdk-error.cjs.map +1 -0
  101. package/dist/cjs/core/tools/abstract-tool.cjs +26 -0
  102. package/dist/cjs/core/tools/abstract-tool.cjs.map +1 -0
  103. package/dist/cjs/core/tools/healthcheck.cjs +50 -0
  104. package/dist/cjs/core/tools/healthcheck.cjs.map +1 -0
  105. package/dist/cjs/core/tools/manager.cjs +52 -0
  106. package/dist/cjs/core/tools/manager.cjs.map +1 -0
  107. package/dist/cjs/core/tools/ping.cjs +58 -0
  108. package/dist/cjs/core/tools/ping.cjs.map +1 -0
  109. package/dist/cjs/core/version-manager.cjs +57 -0
  110. package/dist/cjs/core/version-manager.cjs.map +1 -0
  111. package/dist/cjs/frame/auth.cjs +100 -0
  112. package/dist/cjs/frame/auth.cjs.map +1 -0
  113. package/dist/cjs/frame/b24.cjs +178 -0
  114. package/dist/cjs/frame/b24.cjs.map +1 -0
  115. package/dist/cjs/frame/dialog.cjs +120 -0
  116. package/dist/cjs/frame/dialog.cjs.map +1 -0
  117. package/dist/cjs/frame/frame.cjs +103 -0
  118. package/dist/cjs/frame/frame.cjs.map +1 -0
  119. package/dist/cjs/frame/message/commands.cjs +39 -0
  120. package/dist/cjs/frame/message/commands.cjs.map +1 -0
  121. package/dist/cjs/frame/message/controller.cjs +191 -0
  122. package/dist/cjs/frame/message/controller.cjs.map +1 -0
  123. package/dist/cjs/frame/options.cjs +108 -0
  124. package/dist/cjs/frame/options.cjs.map +1 -0
  125. package/dist/cjs/frame/parent.cjs +259 -0
  126. package/dist/cjs/frame/parent.cjs.map +1 -0
  127. package/dist/cjs/frame/placement.cjs +156 -0
  128. package/dist/cjs/frame/placement.cjs.map +1 -0
  129. package/dist/cjs/frame/slider.cjs +162 -0
  130. package/dist/cjs/frame/slider.cjs.map +1 -0
  131. package/dist/cjs/helper/abstract-helper.cjs +55 -0
  132. package/dist/cjs/helper/abstract-helper.cjs.map +1 -0
  133. package/dist/cjs/helper/app-manager.cjs +39 -0
  134. package/dist/cjs/helper/app-manager.cjs.map +1 -0
  135. package/dist/cjs/helper/currency-manager.cjs +215 -0
  136. package/dist/cjs/helper/currency-manager.cjs.map +1 -0
  137. package/dist/cjs/helper/helper-manager.cjs +397 -0
  138. package/dist/cjs/helper/helper-manager.cjs.map +1 -0
  139. package/dist/cjs/helper/license-manager.cjs +52 -0
  140. package/dist/cjs/helper/license-manager.cjs.map +1 -0
  141. package/dist/cjs/helper/options-manager.cjs +205 -0
  142. package/dist/cjs/helper/options-manager.cjs.map +1 -0
  143. package/dist/cjs/helper/payment-manager.cjs +35 -0
  144. package/dist/cjs/helper/payment-manager.cjs.map +1 -0
  145. package/dist/cjs/helper/profile-manager.cjs +35 -0
  146. package/dist/cjs/helper/profile-manager.cjs.map +1 -0
  147. package/dist/cjs/helper/use-b24-helper.cjs +85 -0
  148. package/dist/cjs/helper/use-b24-helper.cjs.map +1 -0
  149. package/dist/cjs/hook/auth.cjs +79 -0
  150. package/dist/cjs/hook/auth.cjs.map +1 -0
  151. package/dist/cjs/hook/b24.cjs +117 -0
  152. package/dist/cjs/hook/b24.cjs.map +1 -0
  153. package/dist/cjs/index.cjs +176 -0
  154. package/dist/cjs/index.cjs.map +1 -0
  155. package/dist/cjs/index.d.cts +6415 -0
  156. package/dist/cjs/index.d.mts +6415 -0
  157. package/dist/cjs/index.d.ts +6415 -0
  158. package/dist/cjs/loader-b24frame.cjs +103 -0
  159. package/dist/cjs/loader-b24frame.cjs.map +1 -0
  160. package/dist/cjs/logger/abstract-logger.cjs +71 -0
  161. package/dist/cjs/logger/abstract-logger.cjs.map +1 -0
  162. package/dist/cjs/logger/browser.cjs +165 -0
  163. package/dist/cjs/logger/browser.cjs.map +1 -0
  164. package/dist/cjs/logger/formatter/abstract-formatter.cjs +36 -0
  165. package/dist/cjs/logger/formatter/abstract-formatter.cjs.map +1 -0
  166. package/dist/cjs/logger/formatter/json-formatter.cjs +36 -0
  167. package/dist/cjs/logger/formatter/json-formatter.cjs.map +1 -0
  168. package/dist/cjs/logger/formatter/line-formatter.cjs +43 -0
  169. package/dist/cjs/logger/formatter/line-formatter.cjs.map +1 -0
  170. package/dist/cjs/logger/formatter/telegram-formatter.cjs +105 -0
  171. package/dist/cjs/logger/formatter/telegram-formatter.cjs.map +1 -0
  172. package/dist/cjs/logger/handler/abstract-handler.cjs +41 -0
  173. package/dist/cjs/logger/handler/abstract-handler.cjs.map +1 -0
  174. package/dist/cjs/logger/handler/consola-adapter.cjs +64 -0
  175. package/dist/cjs/logger/handler/consola-adapter.cjs.map +1 -0
  176. package/dist/cjs/logger/handler/console-handler.cjs +100 -0
  177. package/dist/cjs/logger/handler/console-handler.cjs.map +1 -0
  178. package/dist/cjs/logger/handler/console-v2-handler.cjs +53 -0
  179. package/dist/cjs/logger/handler/console-v2-handler.cjs.map +1 -0
  180. package/dist/cjs/logger/handler/memory-handler.cjs +50 -0
  181. package/dist/cjs/logger/handler/memory-handler.cjs.map +1 -0
  182. package/dist/cjs/logger/handler/stream-handler.cjs +75 -0
  183. package/dist/cjs/logger/handler/stream-handler.cjs.map +1 -0
  184. package/dist/cjs/logger/handler/telegram-handler.cjs +159 -0
  185. package/dist/cjs/logger/handler/telegram-handler.cjs.map +1 -0
  186. package/dist/cjs/logger/handler/winston-adapter.cjs +59 -0
  187. package/dist/cjs/logger/handler/winston-adapter.cjs.map +1 -0
  188. package/dist/cjs/logger/logger-factory.cjs +69 -0
  189. package/dist/cjs/logger/logger-factory.cjs.map +1 -0
  190. package/dist/cjs/logger/logger.cjs +78 -0
  191. package/dist/cjs/logger/logger.cjs.map +1 -0
  192. package/dist/cjs/logger/null-logger.cjs +34 -0
  193. package/dist/cjs/logger/null-logger.cjs.map +1 -0
  194. package/dist/cjs/logger/processor/memory-usage-processor.cjs +22 -0
  195. package/dist/cjs/logger/processor/memory-usage-processor.cjs.map +1 -0
  196. package/dist/cjs/logger/processor/pid-processor.cjs +22 -0
  197. package/dist/cjs/logger/processor/pid-processor.cjs.map +1 -0
  198. package/dist/cjs/oauth/auth.cjs +214 -0
  199. package/dist/cjs/oauth/auth.cjs.map +1 -0
  200. package/dist/cjs/oauth/b24.cjs +119 -0
  201. package/dist/cjs/oauth/b24.cjs.map +1 -0
  202. package/dist/cjs/oauth/refresh-token-error.cjs +22 -0
  203. package/dist/cjs/oauth/refresh-token-error.cjs.map +1 -0
  204. package/dist/cjs/pullClient/abstract-connector.cjs +80 -0
  205. package/dist/cjs/pullClient/abstract-connector.cjs.map +1 -0
  206. package/dist/cjs/pullClient/channel-manager.cjs +91 -0
  207. package/dist/cjs/pullClient/channel-manager.cjs.map +1 -0
  208. package/dist/cjs/pullClient/client.cjs +2177 -0
  209. package/dist/cjs/pullClient/client.cjs.map +1 -0
  210. package/dist/cjs/pullClient/errors.cjs +34 -0
  211. package/dist/cjs/pullClient/errors.cjs.map +1 -0
  212. package/dist/cjs/pullClient/json-rpc.cjs +213 -0
  213. package/dist/cjs/pullClient/json-rpc.cjs.map +1 -0
  214. package/dist/cjs/pullClient/long-polling-connector.cjs +159 -0
  215. package/dist/cjs/pullClient/long-polling-connector.cjs.map +1 -0
  216. package/dist/cjs/pullClient/protobuf/index.cjs +22 -0
  217. package/dist/cjs/pullClient/protobuf/index.cjs.map +1 -0
  218. package/dist/cjs/pullClient/protobuf/model.cjs +1060 -0
  219. package/dist/cjs/pullClient/protobuf/model.cjs.map +1 -0
  220. package/dist/cjs/pullClient/protobuf/protobuf.cjs +4655 -0
  221. package/dist/cjs/pullClient/protobuf/protobuf.cjs.map +1 -0
  222. package/dist/cjs/pullClient/shared-config.cjs +135 -0
  223. package/dist/cjs/pullClient/shared-config.cjs.map +1 -0
  224. package/dist/cjs/pullClient/storage-manager.cjs +74 -0
  225. package/dist/cjs/pullClient/storage-manager.cjs.map +1 -0
  226. package/dist/cjs/pullClient/web-socket-connector.cjs +131 -0
  227. package/dist/cjs/pullClient/web-socket-connector.cjs.map +1 -0
  228. package/dist/cjs/tools/batch-ref-v3.cjs +54 -0
  229. package/dist/cjs/tools/batch-ref-v3.cjs.map +1 -0
  230. package/dist/cjs/tools/browser.cjs +156 -0
  231. package/dist/cjs/tools/browser.cjs.map +1 -0
  232. package/dist/cjs/tools/environment.cjs +32 -0
  233. package/dist/cjs/tools/environment.cjs.map +1 -0
  234. package/dist/cjs/tools/filter-v3.cjs +139 -0
  235. package/dist/cjs/tools/filter-v3.cjs.map +1 -0
  236. package/dist/cjs/tools/formatters/iban.cjs +307 -0
  237. package/dist/cjs/tools/formatters/iban.cjs.map +1 -0
  238. package/dist/cjs/tools/formatters/numbers.cjs +68 -0
  239. package/dist/cjs/tools/formatters/numbers.cjs.map +1 -0
  240. package/dist/cjs/tools/index.cjs +42 -0
  241. package/dist/cjs/tools/index.cjs.map +1 -0
  242. package/dist/cjs/tools/scroll-size.cjs +29 -0
  243. package/dist/cjs/tools/scroll-size.cjs.map +1 -0
  244. package/dist/cjs/tools/text.cjs +210 -0
  245. package/dist/cjs/tools/text.cjs.map +1 -0
  246. package/dist/cjs/tools/type.cjs +339 -0
  247. package/dist/cjs/tools/type.cjs.map +1 -0
  248. package/dist/cjs/tools/use-formatters.cjs +462 -0
  249. package/dist/cjs/tools/use-formatters.cjs.map +1 -0
  250. package/dist/cjs/tools/uuidv7.cjs +58 -0
  251. package/dist/cjs/tools/uuidv7.cjs.map +1 -0
  252. package/dist/cjs/types/b24-helper.cjs +62 -0
  253. package/dist/cjs/types/b24-helper.cjs.map +1 -0
  254. package/dist/cjs/types/b24.cjs +18 -0
  255. package/dist/cjs/types/b24.cjs.map +1 -0
  256. package/dist/cjs/types/bizproc/index.cjs +195 -0
  257. package/dist/cjs/types/bizproc/index.cjs.map +1 -0
  258. package/dist/cjs/types/catalog/index.cjs +39 -0
  259. package/dist/cjs/types/catalog/index.cjs.map +1 -0
  260. package/dist/cjs/types/common.cjs +33 -0
  261. package/dist/cjs/types/common.cjs.map +1 -0
  262. package/dist/cjs/types/crm/entity-type.cjs +62 -0
  263. package/dist/cjs/types/crm/entity-type.cjs.map +1 -0
  264. package/dist/cjs/types/crm/productrow.cjs +19 -0
  265. package/dist/cjs/types/crm/productrow.cjs.map +1 -0
  266. package/dist/cjs/types/logger.cjs +24 -0
  267. package/dist/cjs/types/logger.cjs.map +1 -0
  268. package/dist/cjs/types/pull.cjs +94 -0
  269. package/dist/cjs/types/pull.cjs.map +1 -0
  270. package/dist/esm/_virtual/_commonjsHelpers.mjs +1 -1
  271. package/dist/esm/_virtual/protobuf.mjs +1 -1
  272. package/dist/esm/_virtual/protobuf2.mjs +1 -1
  273. package/dist/esm/core/abstract-b24.mjs +1 -1
  274. package/dist/esm/core/actions/abstract-action.mjs +1 -1
  275. package/dist/esm/core/actions/abstract-batch.mjs +1 -1
  276. package/dist/esm/core/actions/manager.mjs +1 -1
  277. package/dist/esm/core/actions/v2/batch-by-chunk.mjs +1 -1
  278. package/dist/esm/core/actions/v2/batch.mjs +1 -1
  279. package/dist/esm/core/actions/v2/call-list.mjs +1 -1
  280. package/dist/esm/core/actions/v2/call.mjs +1 -15
  281. package/dist/esm/core/actions/v2/call.mjs.map +1 -1
  282. package/dist/esm/core/actions/v2/fetch-list.mjs +1 -1
  283. package/dist/esm/core/actions/v2/manager-v2.mjs +1 -1
  284. package/dist/esm/core/actions/v3/_keyset-paginate.mjs +66 -0
  285. package/dist/esm/core/actions/v3/_keyset-paginate.mjs.map +1 -0
  286. package/dist/esm/core/actions/v3/aggregate.mjs +94 -0
  287. package/dist/esm/core/actions/v3/aggregate.mjs.map +1 -0
  288. package/dist/esm/core/actions/v3/batch-by-chunk.mjs +1 -1
  289. package/dist/esm/core/actions/v3/batch.mjs +1 -10
  290. package/dist/esm/core/actions/v3/batch.mjs.map +1 -1
  291. package/dist/esm/core/actions/v3/call-list.mjs +30 -44
  292. package/dist/esm/core/actions/v3/call-list.mjs.map +1 -1
  293. package/dist/esm/core/actions/v3/call-tail.mjs +116 -0
  294. package/dist/esm/core/actions/v3/call-tail.mjs.map +1 -0
  295. package/dist/esm/core/actions/v3/call.mjs +1 -10
  296. package/dist/esm/core/actions/v3/call.mjs.map +1 -1
  297. package/dist/esm/core/actions/v3/fetch-list.mjs +24 -41
  298. package/dist/esm/core/actions/v3/fetch-list.mjs.map +1 -1
  299. package/dist/esm/core/actions/v3/fetch-tail.mjs +110 -0
  300. package/dist/esm/core/actions/v3/fetch-tail.mjs.map +1 -0
  301. package/dist/esm/core/actions/v3/manager-v3.mjs +25 -1
  302. package/dist/esm/core/actions/v3/manager-v3.mjs.map +1 -1
  303. package/dist/esm/core/http/abstract-http.mjs +68 -17
  304. package/dist/esm/core/http/abstract-http.mjs.map +1 -1
  305. package/dist/esm/core/http/ajax-error.mjs +1 -1
  306. package/dist/esm/core/http/ajax-result.mjs +9 -8
  307. package/dist/esm/core/http/ajax-result.mjs.map +1 -1
  308. package/dist/esm/core/http/limiters/adaptive-delayer.mjs +1 -1
  309. package/dist/esm/core/http/limiters/manager.mjs +1 -1
  310. package/dist/esm/core/http/limiters/operating-limiter.mjs +1 -1
  311. package/dist/esm/core/http/limiters/params-factory.mjs +1 -1
  312. package/dist/esm/core/http/limiters/rate-limiter.mjs +1 -1
  313. package/dist/esm/core/http/redact.mjs +41 -13
  314. package/dist/esm/core/http/redact.mjs.map +1 -1
  315. package/dist/esm/core/http/v2.mjs +1 -18
  316. package/dist/esm/core/http/v2.mjs.map +1 -1
  317. package/dist/esm/core/http/v3.mjs +1 -15
  318. package/dist/esm/core/http/v3.mjs.map +1 -1
  319. package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs +1 -1
  320. package/dist/esm/core/interaction/batch/parse-row.mjs +1 -1
  321. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs +44 -1
  322. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs.map +1 -1
  323. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs +7 -6
  324. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs.map +1 -1
  325. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs +3 -3
  326. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs.map +1 -1
  327. package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs +1 -1
  328. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs +7 -19
  329. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs.map +1 -1
  330. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs +3 -3
  331. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs.map +1 -1
  332. package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs +1 -1
  333. package/dist/esm/core/interaction/batch/v2.mjs +1 -1
  334. package/dist/esm/core/interaction/batch/v3.mjs +1 -1
  335. package/dist/esm/core/language/list.mjs +1 -1
  336. package/dist/esm/core/request-id-generator.mjs +1 -1
  337. package/dist/esm/core/result.mjs +11 -4
  338. package/dist/esm/core/result.mjs.map +1 -1
  339. package/dist/esm/core/sdk-error.mjs +1 -1
  340. package/dist/esm/core/tools/abstract-tool.mjs +1 -1
  341. package/dist/esm/core/tools/healthcheck.mjs +1 -1
  342. package/dist/esm/core/tools/manager.mjs +1 -1
  343. package/dist/esm/core/tools/ping.mjs +1 -1
  344. package/dist/esm/core/version-manager.mjs +19 -157
  345. package/dist/esm/core/version-manager.mjs.map +1 -1
  346. package/dist/esm/frame/auth.mjs +1 -1
  347. package/dist/esm/frame/b24.mjs +8 -2
  348. package/dist/esm/frame/b24.mjs.map +1 -1
  349. package/dist/esm/frame/dialog.mjs +1 -1
  350. package/dist/esm/frame/frame.mjs +1 -1
  351. package/dist/esm/frame/message/commands.mjs +1 -1
  352. package/dist/esm/frame/message/controller.mjs +17 -6
  353. package/dist/esm/frame/message/controller.mjs.map +1 -1
  354. package/dist/esm/frame/options.mjs +1 -1
  355. package/dist/esm/frame/parent.mjs +1 -1
  356. package/dist/esm/frame/placement.mjs +1 -1
  357. package/dist/esm/frame/slider.mjs +1 -1
  358. package/dist/esm/helper/abstract-helper.mjs +1 -1
  359. package/dist/esm/helper/app-manager.mjs +1 -1
  360. package/dist/esm/helper/currency-manager.mjs +1 -1
  361. package/dist/esm/helper/helper-manager.mjs +1 -1
  362. package/dist/esm/helper/license-manager.mjs +1 -1
  363. package/dist/esm/helper/options-manager.mjs +1 -1
  364. package/dist/esm/helper/payment-manager.mjs +1 -1
  365. package/dist/esm/helper/profile-manager.mjs +1 -1
  366. package/dist/esm/helper/use-b24-helper.mjs +1 -1
  367. package/dist/esm/hook/auth.mjs +1 -1
  368. package/dist/esm/hook/b24.mjs +3 -3
  369. package/dist/esm/hook/b24.mjs.map +1 -1
  370. package/dist/esm/index.d.mts +412 -39
  371. package/dist/esm/index.d.ts +412 -39
  372. package/dist/esm/index.mjs +3 -1
  373. package/dist/esm/index.mjs.map +1 -1
  374. package/dist/esm/loader-b24frame.mjs +1 -1
  375. package/dist/esm/logger/abstract-logger.mjs +1 -1
  376. package/dist/esm/logger/browser.mjs +1 -1
  377. package/dist/esm/logger/formatter/abstract-formatter.mjs +1 -1
  378. package/dist/esm/logger/formatter/json-formatter.mjs +1 -1
  379. package/dist/esm/logger/formatter/line-formatter.mjs +1 -1
  380. package/dist/esm/logger/formatter/telegram-formatter.mjs +1 -1
  381. package/dist/esm/logger/handler/abstract-handler.mjs +1 -1
  382. package/dist/esm/logger/handler/consola-adapter.mjs +1 -1
  383. package/dist/esm/logger/handler/console-handler.mjs +1 -1
  384. package/dist/esm/logger/handler/console-v2-handler.mjs +1 -1
  385. package/dist/esm/logger/handler/memory-handler.mjs +1 -1
  386. package/dist/esm/logger/handler/stream-handler.mjs +1 -1
  387. package/dist/esm/logger/handler/telegram-handler.mjs +1 -1
  388. package/dist/esm/logger/handler/winston-adapter.mjs +1 -1
  389. package/dist/esm/logger/logger-factory.mjs +1 -1
  390. package/dist/esm/logger/logger.mjs +1 -1
  391. package/dist/esm/logger/null-logger.mjs +1 -1
  392. package/dist/esm/logger/processor/memory-usage-processor.mjs +1 -1
  393. package/dist/esm/logger/processor/pid-processor.mjs +1 -1
  394. package/dist/esm/oauth/auth.mjs +13 -16
  395. package/dist/esm/oauth/auth.mjs.map +1 -1
  396. package/dist/esm/oauth/b24.mjs +1 -1
  397. package/dist/esm/oauth/refresh-token-error.mjs +1 -1
  398. package/dist/esm/pullClient/abstract-connector.mjs +1 -1
  399. package/dist/esm/pullClient/channel-manager.mjs +1 -1
  400. package/dist/esm/pullClient/client.mjs +141 -30
  401. package/dist/esm/pullClient/client.mjs.map +1 -1
  402. package/dist/esm/pullClient/errors.mjs +1 -1
  403. package/dist/esm/pullClient/json-rpc.mjs +5 -4
  404. package/dist/esm/pullClient/json-rpc.mjs.map +1 -1
  405. package/dist/esm/pullClient/long-polling-connector.mjs +1 -1
  406. package/dist/esm/pullClient/protobuf/index.mjs +1 -1
  407. package/dist/esm/pullClient/protobuf/model.mjs +1 -1
  408. package/dist/esm/pullClient/protobuf/protobuf.mjs +1 -1
  409. package/dist/esm/pullClient/shared-config.mjs +1 -1
  410. package/dist/esm/pullClient/storage-manager.mjs +1 -1
  411. package/dist/esm/pullClient/web-socket-connector.mjs +1 -1
  412. package/dist/esm/tools/batch-ref-v3.mjs +52 -0
  413. package/dist/esm/tools/batch-ref-v3.mjs.map +1 -0
  414. package/dist/esm/tools/browser.mjs +1 -1
  415. package/dist/esm/tools/environment.mjs +1 -1
  416. package/dist/esm/tools/filter-v3.mjs +137 -0
  417. package/dist/esm/tools/filter-v3.mjs.map +1 -0
  418. package/dist/esm/tools/formatters/iban.mjs +1 -1
  419. package/dist/esm/tools/formatters/numbers.mjs +1 -1
  420. package/dist/esm/tools/index.mjs +1 -1
  421. package/dist/esm/tools/scroll-size.mjs +1 -1
  422. package/dist/esm/tools/text.mjs +1 -1
  423. package/dist/esm/tools/type.mjs +1 -1
  424. package/dist/esm/tools/use-formatters.mjs +1 -1
  425. package/dist/esm/tools/uuidv7.mjs +1 -1
  426. package/dist/esm/types/b24-helper.mjs +1 -1
  427. package/dist/esm/types/b24.mjs +1 -1
  428. package/dist/esm/types/bizproc/index.mjs +1 -1
  429. package/dist/esm/types/catalog/index.mjs +1 -1
  430. package/dist/esm/types/common.mjs +1 -1
  431. package/dist/esm/types/crm/entity-type.mjs +1 -1
  432. package/dist/esm/types/crm/productrow.mjs +1 -1
  433. package/dist/esm/types/logger.mjs +1 -1
  434. package/dist/esm/types/pull.mjs +1 -1
  435. package/dist/umd/index.js +1258 -719
  436. package/dist/umd/index.js.map +1 -1
  437. package/dist/umd/index.min.js +26 -26
  438. package/dist/umd/index.min.js.map +1 -1
  439. package/dist/umd/package.json +3 -0
  440. package/package.json +12 -4
@@ -0,0 +1,641 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 2.0.0
4
+ * @copyright (c) 2026 Bitrix24
5
+ * @license MIT
6
+ * @see https://github.com/bitrix24/b24jssdk
7
+ * @see https://bitrix24.github.io/b24jssdk/
8
+ */
9
+ 'use strict';
10
+
11
+ const axios = require('axios');
12
+ const requestIdGenerator = require('../request-id-generator.cjs');
13
+ const paramsFactory = require('./limiters/params-factory.cjs');
14
+ const manager = require('./limiters/manager.cjs');
15
+ const ajaxError = require('./ajax-error.cjs');
16
+ const ajaxResult = require('./ajax-result.cjs');
17
+ const redact = require('./redact.cjs');
18
+ const type = require('../../tools/type.cjs');
19
+ const environment = require('../../tools/environment.cjs');
20
+ const b24 = require('../../types/b24.cjs');
21
+ const loggerFactory = require('../../logger/logger-factory.cjs');
22
+
23
+ function _interopDefault (e) { return e && e.__esModule ? e.default : e; }
24
+
25
+ const axios__default = /*#__PURE__*/_interopDefault(axios);
26
+
27
+ var __defProp = Object.defineProperty;
28
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
29
+ const LOG_MAX_LENGTH = 300;
30
+ const LOG_SLICE_LENGTH = 100;
31
+ function truncateForLog(value) {
32
+ return value.length > LOG_MAX_LENGTH ? value.slice(0, LOG_SLICE_LENGTH) + "..." : value;
33
+ }
34
+ __name(truncateForLog, "truncateForLog");
35
+ class AbstractHttp {
36
+ static {
37
+ __name(this, "AbstractHttp");
38
+ }
39
+ _clientAxios;
40
+ _authActions;
41
+ _requestIdGenerator;
42
+ _restrictionManager;
43
+ /**
44
+ * In-flight token refresh, shared so concurrent 401s coalesce into a single
45
+ * `refreshAuth()` round-trip — avoids OAuth refresh-token reuse errors when a
46
+ * burst of requests expires together. (#182)
47
+ */
48
+ _pendingRefresh = null;
49
+ _logger;
50
+ _isClientSideWarning = false;
51
+ _clientSideWarningMessage = "";
52
+ _version;
53
+ _metrics = {
54
+ totalRequests: 0,
55
+ successfulRequests: 0,
56
+ failedRequests: 0,
57
+ totalDuration: 0,
58
+ byMethod: /* @__PURE__ */ new Map(),
59
+ lastErrors: []
60
+ };
61
+ constructor(authActions, options, restrictionParams) {
62
+ this._version = b24.ApiVersion.v2;
63
+ this._logger = loggerFactory.LoggerFactory.createNullLogger();
64
+ const defaultHeaders = {};
65
+ if (this.isServerSide()) {
66
+ defaultHeaders["User-Agent"] = "b24-js-sdk/2.0.0";
67
+ }
68
+ this._authActions = authActions;
69
+ this._requestIdGenerator = new requestIdGenerator.RequestIdGenerator();
70
+ this._clientAxios = axios__default.create({
71
+ timeout: 3e4,
72
+ timeoutErrorMessage: "Request timeout exceeded",
73
+ ...options ?? {},
74
+ // headers last so the merged default + caller headers aren't wiped by an
75
+ // `options.headers` (or the previous `headers: undefined`) spread (#144).
76
+ headers: {
77
+ ...defaultHeaders,
78
+ ...options?.headers ?? {}
79
+ }
80
+ });
81
+ const params = {
82
+ ...paramsFactory.ParamsFactory.getDefault(),
83
+ ...restrictionParams
84
+ };
85
+ this._restrictionManager = new manager.RestrictionManager(params);
86
+ }
87
+ get apiVersion() {
88
+ return this._version;
89
+ }
90
+ get ajaxClient() {
91
+ return this._clientAxios;
92
+ }
93
+ // region Logger ////
94
+ setLogger(logger) {
95
+ this._logger = logger;
96
+ this._restrictionManager.setLogger(this._logger);
97
+ }
98
+ getLogger() {
99
+ return this._logger;
100
+ }
101
+ // endregion ////
102
+ // region RestrictionManager ////
103
+ async setRestrictionManagerParams(params) {
104
+ await this._restrictionManager.setConfig(params);
105
+ }
106
+ getRestrictionManagerParams() {
107
+ return this._restrictionManager.getParams();
108
+ }
109
+ /**
110
+ * @inheritDoc
111
+ */
112
+ getStats() {
113
+ return {
114
+ ...this._restrictionManager.getStats(),
115
+ totalRequests: this._metrics.totalRequests,
116
+ successfulRequests: this._metrics.successfulRequests,
117
+ failedRequests: this._metrics.failedRequests,
118
+ totalDuration: this._metrics.totalDuration,
119
+ byMethod: this._metrics.byMethod,
120
+ lastErrors: this._metrics.lastErrors
121
+ };
122
+ }
123
+ /**
124
+ * @inheritDoc
125
+ */
126
+ async reset() {
127
+ this._metrics.totalRequests = 0;
128
+ this._metrics.successfulRequests = 0;
129
+ this._metrics.failedRequests = 0;
130
+ this._metrics.totalDuration = 0;
131
+ this._metrics.byMethod.clear();
132
+ this._metrics.lastErrors = [];
133
+ return this._restrictionManager.reset();
134
+ }
135
+ // endregion ////
136
+ // region Metrics ////
137
+ _updateMetrics(method, isSuccess, duration, error) {
138
+ this._metrics.totalRequests++;
139
+ if (isSuccess) {
140
+ this._metrics.successfulRequests++;
141
+ } else {
142
+ this._metrics.failedRequests++;
143
+ if (error instanceof ajaxError.AjaxError) {
144
+ this._metrics.lastErrors.push({
145
+ method,
146
+ error: error.message,
147
+ timestamp: Date.now()
148
+ });
149
+ if (this._metrics.lastErrors.length > 100) {
150
+ this._metrics.lastErrors = this._metrics.lastErrors.slice(-100);
151
+ }
152
+ }
153
+ }
154
+ if (!this._metrics.byMethod.has(method)) {
155
+ this._metrics.byMethod.set(method, { count: 0, totalDuration: 0 });
156
+ }
157
+ const methodMetrics = this._metrics.byMethod.get(method);
158
+ methodMetrics.count++;
159
+ methodMetrics.totalDuration += duration;
160
+ }
161
+ // endregion ////
162
+ _validateParams(requestId, method, params) {
163
+ try {
164
+ JSON.stringify(params);
165
+ } catch (error) {
166
+ throw new ajaxError.AjaxError({
167
+ code: "JSSDK_INVALID_PARAMS",
168
+ description: "Parameters contain circular references",
169
+ status: 400,
170
+ requestInfo: { method, params, requestId },
171
+ originalError: error
172
+ });
173
+ }
174
+ }
175
+ /**
176
+ * Calling the RestApi function
177
+ * @param method - REST API method name
178
+ * @param params - Parameters for the method.
179
+ * @param requestId - Request id
180
+ * @returns Promise with AjaxResult
181
+ */
182
+ async call(method, params, requestId) {
183
+ requestId = requestId ?? this._requestIdGenerator.getRequestId();
184
+ const maxRetries = this._restrictionManager.getParams().maxRetries;
185
+ this._validateParams(requestId, method, params);
186
+ this._logRequest(requestId, method, params);
187
+ let lastError = null;
188
+ const startTime = Date.now();
189
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
190
+ try {
191
+ this._logAttempt(requestId, method, attempt + 1, maxRetries);
192
+ await this._restrictionManager.applyOperatingLimits(requestId, method, params);
193
+ const result = await this._executeSingleCall(requestId, method, params);
194
+ const duration = Date.now() - startTime;
195
+ this._restrictionManager.resetErrors(method);
196
+ this._updateMetrics(method, true, duration);
197
+ this._logSuccessfulRequest(requestId, method, duration);
198
+ return result;
199
+ } catch (error) {
200
+ lastError = this._convertToAjaxError(requestId, error, method, params);
201
+ const duration = Date.now() - startTime;
202
+ this._restrictionManager.incrementError(method);
203
+ this._updateMetrics(method, false, duration, lastError);
204
+ this._logFailedRequest(requestId, method, attempt + 1, maxRetries, lastError);
205
+ if (attempt + 1 < maxRetries) {
206
+ const waitTime = await this._restrictionManager.handleError(requestId, method, params, lastError, attempt);
207
+ if (waitTime > 0) {
208
+ this._restrictionManager.incrementStats("limitHits");
209
+ this._logAttemptRetryWaiteDelay(requestId, method, waitTime, attempt + 1, maxRetries);
210
+ await this._restrictionManager.waiteDelay(waitTime);
211
+ this._restrictionManager.incrementStats("retries");
212
+ continue;
213
+ }
214
+ }
215
+ if (attempt + 1 === maxRetries) {
216
+ this._logAllAttemptsExhausted(requestId, method, attempt + 1, maxRetries);
217
+ }
218
+ if (this._restrictionManager.exceptionCodeForSoft.includes(lastError.code)) {
219
+ return this._createAjaxResultWithErrorFromResponse(lastError, requestId, method, params);
220
+ }
221
+ throw lastError;
222
+ }
223
+ }
224
+ throw new ajaxError.AjaxError({
225
+ code: "JSSDK_CALL_ALL_ATTEMPTS_EXHAUSTED",
226
+ description: "All attempts exhausted",
227
+ status: lastError?.status || 500,
228
+ requestInfo: { method, params, requestId },
229
+ originalError: lastError?.originalError || null
230
+ });
231
+ }
232
+ _convertToAjaxError(requestId, error, method, params) {
233
+ if (error instanceof ajaxError.AjaxError) {
234
+ return error;
235
+ }
236
+ if (error instanceof axios.AxiosError) {
237
+ return this._convertAxiosErrorToAjaxError(requestId, error, method, params);
238
+ }
239
+ return this._convertUnknownErrorToAjaxError(requestId, error, method, params);
240
+ }
241
+ _convertAxiosErrorToAjaxError(requestId, axiosError, method, params) {
242
+ let errorCode = `${axiosError.code || "JSSDK_AXIOS_ERROR"}`;
243
+ let errorDescription = axiosError.message;
244
+ const status = axiosError.response?.status || 0;
245
+ if (errorCode === "ERR_NETWORK") {
246
+ return new ajaxError.AjaxError({
247
+ code: "NETWORK_ERROR",
248
+ description: "Network connection failed",
249
+ status: 0,
250
+ requestInfo: { method, params, requestId },
251
+ originalError: axiosError
252
+ });
253
+ }
254
+ if (errorCode === "ECONNABORTED" || axiosError.message.includes("timeout")) {
255
+ return new ajaxError.AjaxError({
256
+ code: "REQUEST_TIMEOUT",
257
+ description: "Request timeout exceeded",
258
+ status: 408,
259
+ requestInfo: { method, params, requestId },
260
+ originalError: axiosError
261
+ });
262
+ }
263
+ if (axiosError.response?.data && typeof axiosError.response.data === "object") {
264
+ const responseData = axiosError.response.data;
265
+ if (responseData.error && typeof responseData.error === "object" && "code" in responseData.error) {
266
+ errorCode = responseData.error.code;
267
+ errorDescription = responseData.error.message.trimEnd();
268
+ if (responseData.error.validation) {
269
+ if (errorDescription.length > 0) {
270
+ if (!errorDescription.endsWith(".")) {
271
+ errorDescription += `.`;
272
+ }
273
+ errorDescription += ` `;
274
+ }
275
+ responseData.error.validation.forEach((row) => {
276
+ errorDescription += `${row?.message || JSON.stringify(row)}`;
277
+ });
278
+ }
279
+ } else if (responseData.error && typeof responseData.error === "string") {
280
+ errorCode = responseData.error !== "0" ? responseData.error : errorCode;
281
+ errorDescription = responseData?.error_description ?? errorDescription;
282
+ }
283
+ }
284
+ return new ajaxError.AjaxError({
285
+ code: errorCode,
286
+ description: errorDescription,
287
+ status,
288
+ requestInfo: { method, params, requestId },
289
+ originalError: axiosError
290
+ });
291
+ }
292
+ _convertUnknownErrorToAjaxError(requestId, error, method, params) {
293
+ return new ajaxError.AjaxError({
294
+ code: "JSSDK_UNKNOWN_ERROR",
295
+ description: error instanceof Error ? error.message : String(error),
296
+ status: 0,
297
+ requestInfo: { method, params, requestId },
298
+ originalError: error
299
+ });
300
+ }
301
+ // region Execute Single Call ////
302
+ /**
303
+ * Performs a single call with
304
+ * - 401 error handling
305
+ * - rate limit check
306
+ * - updating operating statistics
307
+ */
308
+ async _executeSingleCall(requestId, method, params) {
309
+ this._checkClientSideWarning(requestId);
310
+ const authData = await this._ensureAuth(requestId);
311
+ const response = await this._makeRequestWithAuthRetry(requestId, method, params, authData);
312
+ return this._createAjaxResultFromResponse(response, requestId, method, params);
313
+ }
314
+ // Get/update authorization
315
+ async _ensureAuth(requestId) {
316
+ let authData = this._authActions.getAuthData();
317
+ if (authData === false) {
318
+ this._logRefreshingAuthToken(requestId);
319
+ authData = await this._refreshAuth();
320
+ }
321
+ return authData;
322
+ }
323
+ /**
324
+ * Refresh the auth token, coalescing concurrent callers onto a single
325
+ * in-flight `refreshAuth()` so a burst of 401s triggers exactly one refresh
326
+ * round-trip. The slot clears once the refresh settles. (#182)
327
+ */
328
+ _refreshAuth() {
329
+ if (this._pendingRefresh) {
330
+ return this._pendingRefresh;
331
+ }
332
+ const refresh = this._authActions.refreshAuth();
333
+ this._pendingRefresh = refresh;
334
+ refresh.finally(() => {
335
+ this._pendingRefresh = null;
336
+ }).catch(() => {
337
+ });
338
+ return refresh;
339
+ }
340
+ // Execute the request with 401 error handling
341
+ async _makeRequestWithAuthRetry(requestId, method, params, authData) {
342
+ try {
343
+ await this._restrictionManager.checkRateLimit(requestId, method);
344
+ return await this._makeAxiosRequest(requestId, method, params, authData);
345
+ } catch (error) {
346
+ if (error instanceof axios.AxiosError) {
347
+ this.getLogger().info(
348
+ `post/catchError`,
349
+ {
350
+ requestId,
351
+ status: error.status,
352
+ // Redact in case a future portal response embeds credentials in
353
+ // the error body (today it doesn't, but the channel is open) (#39),
354
+ // and cap the length so a large error body can't flood the sink (#236).
355
+ responseData: truncateForLog(JSON.stringify(redact.redactSensitiveParams(error?.response?.data), null, 0))
356
+ }
357
+ );
358
+ }
359
+ const ajaxError = this._convertToAjaxError(requestId, error, method, params);
360
+ if (this._isAuthError(ajaxError)) {
361
+ this._logAuthErrorDetected(requestId);
362
+ this._logRefreshingAuthToken(requestId);
363
+ const refreshedAuthData = await this._refreshAuth();
364
+ await this._restrictionManager.checkRateLimit(requestId, method);
365
+ return await this._makeAxiosRequest(requestId, method, params, refreshedAuthData);
366
+ }
367
+ throw ajaxError;
368
+ }
369
+ }
370
+ async _makeAxiosRequest(requestId, method, params, authData) {
371
+ const methodFormatted = this._prepareMethod(requestId, method, this.getBaseUrl());
372
+ const paramsFormatted = this._prepareParams(authData, params);
373
+ const paramsFormattedForLog = JSON.stringify(redact.redactSensitiveParams(paramsFormatted), null, 0);
374
+ this.getLogger().info(
375
+ `post/send`,
376
+ {
377
+ requestId,
378
+ method,
379
+ params: truncateForLog(paramsFormattedForLog)
380
+ }
381
+ );
382
+ const response = await this._clientAxios.post(methodFormatted, paramsFormatted);
383
+ const resultFormattedForLog = JSON.stringify(response.data.result, null, 0);
384
+ this.getLogger().info(
385
+ `post/response`,
386
+ {
387
+ requestId,
388
+ // responseFull: JSON.stringify(response.data, null, 2),
389
+ result: truncateForLog(resultFormattedForLog),
390
+ time: JSON.stringify(response.data.time, null, 0)
391
+ }
392
+ );
393
+ return {
394
+ status: response.status,
395
+ payload: response.data
396
+ };
397
+ }
398
+ _isAuthError(error) {
399
+ if (!(error instanceof ajaxError.AjaxError)) {
400
+ return false;
401
+ }
402
+ return error.status === 401 && ["expired_token", "invalid_token"].includes(error.code);
403
+ }
404
+ async _createAjaxResultFromResponse(response, requestId, method, params) {
405
+ const result = new ajaxResult.AjaxResult({
406
+ answer: response.payload,
407
+ query: { method, params, requestId },
408
+ status: response.status
409
+ });
410
+ if (result.isSuccess) {
411
+ const time = result.getData()?.time;
412
+ await this._restrictionManager.updateStats(requestId, method, time);
413
+ }
414
+ return result;
415
+ }
416
+ /**
417
+ * This works in conjunction with the AbstractHttp._convertAxiosErrorToAjaxError function
418
+ */
419
+ _createAjaxResultWithErrorFromResponse(ajaxError, requestId, method, params) {
420
+ return new ajaxResult.AjaxResult({
421
+ answer: {
422
+ error: {
423
+ code: ajaxError.code,
424
+ message: ajaxError.message
425
+ }
426
+ },
427
+ query: { method, params, requestId },
428
+ status: ajaxError.status
429
+ });
430
+ }
431
+ // endregion ////
432
+ // endregion ////
433
+ // region Prepare ////
434
+ /**
435
+ * Builds the request URL: the method path plus the SDK telemetry query params
436
+ * (`bx24_request_id` / `bx24_sdk_ver` / `bx24_sdk_type` — request tracing and
437
+ * SDK identification, not auth material).
438
+ *
439
+ * Carve-out for the legacy positional `task.*` methods (`task.commentitem.*`,
440
+ * `task.checklistitem.*`, `task.elapseditem.*`, …): these read the request
441
+ * **query string positionally**, so appending the telemetry params shifts
442
+ * `Param #0` and the server rejects the call —
443
+ * `WRONG_ARGUMENTS: Param #0 (taskId) ... expected integer, but given
444
+ * something else`. Verified live against a portal: the same
445
+ * `task.commentitem.getlist` / `task.checklistitem.getlist` call succeeds
446
+ * without the telemetry params and fails with them; modern `tasks.task.*`
447
+ * (named params) is unaffected. So telemetry is omitted for any method whose
448
+ * name contains `task.`.
449
+ *
450
+ * Shared by v2 and v3 (rather than per-transport): once the v3 method
451
+ * allowlist was dropped (#259) a positional `task.*` method can be routed via
452
+ * `actions.v3.*` too, so v3 needs the same suppression — keeping the rule in
453
+ * one place stops the two transports drifting apart again (#207).
454
+ *
455
+ * `includes('task.')` is a deliberate over-approximation: it also drops the
456
+ * (optional, telemetry-safe) params for modern `tasks.task.*` / `bizproc.task.*`.
457
+ * Narrowing to an anchored `^task\.` is possible but unverified across the
458
+ * whole task surface, so the broad, safe match is kept. Bitrix24 method names
459
+ * are lowercase by convention, so the case-sensitive match is sufficient.
460
+ *
461
+ * @see https://apidocs.bitrix24.com/settings/how-to-call-rest-api/data-encoding.html#order-of-parameters
462
+ */
463
+ _prepareMethod(requestId, method, baseUrl) {
464
+ const methodUrl = `/${encodeURIComponent(method)}`;
465
+ if (method.includes("task.")) {
466
+ return `${baseUrl}${methodUrl}`;
467
+ }
468
+ const queryParams = new URLSearchParams({
469
+ [this._requestIdGenerator.getQueryStringParameterName()]: requestId,
470
+ [this._requestIdGenerator.getQueryStringSdkParameterName()]: "2.0.0",
471
+ [this._requestIdGenerator.getQueryStringSdkTypeParameterName()]: "b24-js-sdk"
472
+ });
473
+ return `${baseUrl}${methodUrl}?${queryParams.toString()}`;
474
+ }
475
+ /**
476
+ * Processes function parameters and adds authorization
477
+ */
478
+ _prepareParams(authData, params) {
479
+ const result = { ...params };
480
+ if (authData.refresh_token !== "hook") {
481
+ result.auth = authData.access_token;
482
+ }
483
+ if (result?.data && "start" in result.data) {
484
+ const { start, ...dataWithoutStart } = result.data;
485
+ result.data = dataWithoutStart;
486
+ }
487
+ return result;
488
+ }
489
+ /**
490
+ * @inheritDoc
491
+ */
492
+ setClientSideWarning(value, message) {
493
+ this._isClientSideWarning = value;
494
+ this._clientSideWarningMessage = message;
495
+ }
496
+ // endregion ////
497
+ // region Tools ////
498
+ /**
499
+ * Tests whether the code is executed on the client side
500
+ * @return {boolean}
501
+ * @protected
502
+ */
503
+ isServerSide() {
504
+ return environment.getEnvironment() !== environment.Environment.BROWSE;
505
+ }
506
+ /**
507
+ * Get the BX24 account address with the path based on the API version
508
+ */
509
+ getBaseUrl() {
510
+ return this._authActions.getTargetOriginWithPath().get(this._version);
511
+ }
512
+ // endregion ////
513
+ // region Log ////
514
+ _sanitizeParams(params) {
515
+ return redact.redactSensitiveParams(params);
516
+ }
517
+ _logRequest(requestId, method, params) {
518
+ this.getLogger().debug(`http request starting`, {
519
+ requestId,
520
+ method,
521
+ params: this._sanitizeParams(params),
522
+ api: this.apiVersion,
523
+ timestamp: Date.now()
524
+ });
525
+ }
526
+ _logAttempt(requestId, method, attempt, maxRetries) {
527
+ this.getLogger().info(`http request attempt`, {
528
+ requestId,
529
+ method,
530
+ api: this.apiVersion,
531
+ attempt: {
532
+ current: attempt,
533
+ max: maxRetries
534
+ }
535
+ });
536
+ }
537
+ _logRefreshingAuthToken(requestId) {
538
+ this.getLogger().info(`http refreshing auth token`, {
539
+ requestId,
540
+ api: this.apiVersion
541
+ });
542
+ }
543
+ _logAuthErrorDetected(requestId) {
544
+ this.getLogger().info(`http auth error detected`, {
545
+ requestId,
546
+ api: this.apiVersion
547
+ });
548
+ }
549
+ _logSuccessfulRequest(requestId, method, duration) {
550
+ this.getLogger().debug(`http request successful`, {
551
+ requestId,
552
+ method,
553
+ api: this.apiVersion,
554
+ duration: {
555
+ ms: duration,
556
+ sec: Number.parseFloat((duration / 1e3).toFixed(2))
557
+ }
558
+ });
559
+ }
560
+ _logFailedRequest(requestId, method, attempt, maxRetries, error) {
561
+ this.getLogger().debug(`http request failed`, {
562
+ requestId,
563
+ method,
564
+ api: this.apiVersion,
565
+ attempt: {
566
+ current: attempt,
567
+ max: maxRetries
568
+ },
569
+ error: {
570
+ code: error.code,
571
+ message: error.message,
572
+ status: error.status
573
+ }
574
+ });
575
+ }
576
+ _logAttemptRetryWaiteDelay(requestId, method, wait, attempt, maxRetries) {
577
+ this.getLogger().debug(
578
+ `http wait ${(wait / 1e3).toFixed(2)} sec.`,
579
+ {
580
+ requestId,
581
+ method,
582
+ api: this.apiVersion,
583
+ wait,
584
+ attempt: {
585
+ current: attempt,
586
+ max: maxRetries
587
+ }
588
+ }
589
+ );
590
+ }
591
+ _logAllAttemptsExhausted(requestId, method, attempt, maxRetries) {
592
+ this.getLogger().warning(`http all retry attempts exhausted`, {
593
+ requestId,
594
+ method,
595
+ api: this.apiVersion,
596
+ attempt: {
597
+ current: attempt,
598
+ max: maxRetries
599
+ }
600
+ });
601
+ }
602
+ _logBatchStart(requestId, calls, options) {
603
+ const callCount = Array.isArray(calls) ? calls.length : Object.keys(calls).length;
604
+ this.getLogger().debug(`http batch request starting `, {
605
+ requestId,
606
+ callCount,
607
+ api: this.apiVersion,
608
+ isHaltOnError: options.isHaltOnError,
609
+ timestamp: Date.now()
610
+ });
611
+ }
612
+ _logBatchCompletion(requestId, total, errors) {
613
+ this.getLogger().debug(`http batch request completed`, {
614
+ requestId,
615
+ api: this.apiVersion,
616
+ totalCalls: total,
617
+ successful: total - errors,
618
+ failed: errors,
619
+ successRate: total > 0 ? ((total - errors) / total * 100).toFixed(1) + "%" : "??"
620
+ });
621
+ }
622
+ // Check client-side warnings
623
+ _checkClientSideWarning(requestId) {
624
+ if (this._isClientSideWarning && !this.isServerSide() && type.Type.isStringFilled(this._clientSideWarningMessage)) {
625
+ loggerFactory.LoggerFactory.forcedLog(
626
+ this.getLogger(),
627
+ "warning",
628
+ this._clientSideWarningMessage,
629
+ {
630
+ requestId,
631
+ code: "JSSDK_CLIENT_SIDE_WARNING"
632
+ }
633
+ );
634
+ }
635
+ }
636
+ // endregion ////
637
+ }
638
+
639
+ exports.AbstractHttp = AbstractHttp;
640
+ exports.truncateForLog = truncateForLog;
641
+ //# sourceMappingURL=abstract-http.cjs.map