@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 @@
1
+ {"version":3,"file":"abstract-http.cjs","sources":["../../../../src/core/http/abstract-http.ts"],"sourcesContent":["import type { LoggerInterface } from '../../logger'\nimport type {\n TypeCallParams,\n TypeHttp,\n ICallBatchOptions,\n BatchCommandsArrayUniversal,\n BatchCommandsObjectUniversal,\n BatchNamedCommandsUniversal,\n ICallBatchResult\n} from '../../types/http'\nimport type { RestrictionManagerStats, RestrictionParams } from '../../types/limiters'\nimport type { AuthActions, AuthData, TypeDescriptionError, TypeDescriptionErrorV3 } from '../../types/auth'\nimport type { AxiosInstance } from 'axios'\nimport type { Result } from '../result'\nimport type { SuccessPayload } from '../../types/payloads'\nimport axios, { AxiosError } from 'axios'\nimport { LoggerFactory } from '../../logger'\nimport { RequestIdGenerator } from '../request-id-generator'\nimport { ParamsFactory } from './limiters/params-factory'\nimport { RestrictionManager } from './limiters/manager'\nimport { AjaxError } from './ajax-error'\nimport { AjaxResult } from './ajax-result'\nimport { redactSensitiveParams } from './redact'\nimport { Type } from '../../tools/type'\nimport { Environment, getEnvironment } from '../../tools/environment'\nimport { ApiVersion } from '../../types/b24'\n\n// Logger payloads are truncated so a large params / result / error body can't\n// flood a wired logger sink. Shared by the post/send, post/response, and\n// post/catchError log callsites (#236).\nconst LOG_MAX_LENGTH = 300\nconst LOG_SLICE_LENGTH = 100\nexport function truncateForLog(value: string): string {\n return value.length > LOG_MAX_LENGTH\n ? value.slice(0, LOG_SLICE_LENGTH) + '...'\n : value\n}\n\nexport type AjaxResponse<T = unknown> = {\n status: number\n payload: SuccessPayload<T>\n}\n\nexport type TypePrepareParams = TypeCallParams & {\n data?: Record<string, any>\n auth?: string\n}\n\n/**\n * Abstract Class for working with RestApi requests via http\n *\n * @link https://bitrix24.github.io/b24jssdk/\n *\n * @todo docs\n */\nexport abstract class AbstractHttp implements TypeHttp {\n protected _clientAxios: AxiosInstance\n protected _authActions: AuthActions\n protected _requestIdGenerator: RequestIdGenerator\n protected _restrictionManager: RestrictionManager\n\n /**\n * In-flight token refresh, shared so concurrent 401s coalesce into a single\n * `refreshAuth()` round-trip — avoids OAuth refresh-token reuse errors when a\n * burst of requests expires together. (#182)\n */\n protected _pendingRefresh: Promise<AuthData> | null = null\n\n protected _logger: LoggerInterface\n\n protected _isClientSideWarning: boolean = false\n protected _clientSideWarningMessage: string = ''\n\n protected _version: ApiVersion\n\n protected _metrics = {\n totalRequests: 0,\n successfulRequests: 0,\n failedRequests: 0,\n totalDuration: 0,\n byMethod: new Map<string, { count: number, totalDuration: number }>(),\n lastErrors: [] as Array<{ method: string, error: string, timestamp: number }>\n }\n\n constructor(\n authActions: AuthActions,\n options?: null | object,\n restrictionParams?: Partial<RestrictionParams>\n ) {\n this._version = ApiVersion.v2\n\n this._logger = LoggerFactory.createNullLogger()\n\n const defaultHeaders: Record<string, string> = {}\n\n if (this.isServerSide()) {\n defaultHeaders['User-Agent'] = '__SDK_USER_AGENT__/__SDK_VERSION__'\n }\n\n this._authActions = authActions\n this._requestIdGenerator = new RequestIdGenerator()\n\n this._clientAxios = axios.create({\n timeout: 30_000,\n timeoutErrorMessage: 'Request timeout exceeded',\n ...(options ?? {}),\n // headers last so the merged default + caller headers aren't wiped by an\n // `options.headers` (or the previous `headers: undefined`) spread (#144).\n headers: {\n ...defaultHeaders,\n ...((options as any)?.headers ?? {})\n }\n })\n\n /**\n * Basic parameters of restrictions\n */\n const params: RestrictionParams = {\n ...ParamsFactory.getDefault(),\n ...restrictionParams\n }\n\n this._restrictionManager = new RestrictionManager(params)\n }\n\n get apiVersion(): ApiVersion {\n return this._version\n }\n\n get ajaxClient(): AxiosInstance {\n return this._clientAxios\n }\n\n // region Logger ////\n public setLogger(logger: LoggerInterface): void {\n this._logger = logger\n this._restrictionManager.setLogger(this._logger)\n }\n\n public getLogger(): LoggerInterface {\n return this._logger\n }\n // endregion ////\n\n // region RestrictionManager ////\n public async setRestrictionManagerParams(params: RestrictionParams): Promise<void> {\n await this._restrictionManager.setConfig(params)\n }\n\n public getRestrictionManagerParams(): RestrictionParams {\n return this._restrictionManager.getParams()\n }\n\n /**\n * @inheritDoc\n */\n public getStats(): RestrictionManagerStats & {\n adaptiveDelayAvg: number\n errorCounts: Record<string, number>\n totalRequests: number\n successfulRequests: number\n failedRequests: number\n totalDuration: number\n byMethod: Map<string, { count: number, totalDuration: number }>\n lastErrors: { method: string, error: string, timestamp: number }[]\n } {\n return {\n ...this._restrictionManager.getStats(),\n totalRequests: this._metrics.totalRequests,\n successfulRequests: this._metrics.successfulRequests,\n failedRequests: this._metrics.failedRequests,\n totalDuration: this._metrics.totalDuration,\n byMethod: this._metrics.byMethod,\n lastErrors: this._metrics.lastErrors\n }\n }\n\n /**\n * @inheritDoc\n */\n public async reset(): Promise<void> {\n this._metrics.totalRequests = 0\n this._metrics.successfulRequests = 0\n this._metrics.failedRequests = 0\n this._metrics.totalDuration = 0\n this._metrics.byMethod.clear()\n this._metrics.lastErrors = []\n\n return this._restrictionManager.reset()\n }\n // endregion ////\n\n // region Metrics ////\n protected _updateMetrics(\n method: string,\n isSuccess: boolean,\n duration: number,\n error?: unknown\n ): void {\n this._metrics.totalRequests++\n\n if (isSuccess) {\n this._metrics.successfulRequests++\n } else {\n this._metrics.failedRequests++\n\n if (error instanceof AjaxError) {\n this._metrics.lastErrors.push({\n method,\n error: error.message,\n timestamp: Date.now()\n })\n\n if (this._metrics.lastErrors.length > 100) {\n this._metrics.lastErrors = this._metrics.lastErrors.slice(-100)\n }\n }\n }\n\n // Metrics by Method\n if (!this._metrics.byMethod.has(method)) {\n this._metrics.byMethod.set(method, { count: 0, totalDuration: 0 })\n }\n\n const methodMetrics = this._metrics.byMethod.get(method)!\n methodMetrics.count++\n methodMetrics.totalDuration += duration\n }\n // endregion ////\n\n // region Actions Call ////\n // region batch ////\n public abstract batch<T = unknown>(\n calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal,\n options?: ICallBatchOptions\n ): Promise<Result<ICallBatchResult<T>>>\n // endregion ////\n\n protected _validateParams(requestId: string, method: string, params: TypeCallParams): void {\n // Checking for cyclic references (especially important when logging)\n try {\n JSON.stringify(params)\n } catch (error) {\n throw new AjaxError({\n code: 'JSSDK_INVALID_PARAMS',\n description: 'Parameters contain circular references',\n status: 400,\n requestInfo: { method, params, requestId },\n originalError: error\n })\n }\n\n // Size check (It is especially important for batch)\n // const paramsSize = JSON.stringify(params).length\n // if (paramsSize > 1024 * 1024) { // 1MB\n // throw new AjaxError({\n // code: 'JSSDK_PARAMS_TOO_LARGE',\n // description: `Parameters too large: ${(paramsSize / 1024 / 1024).toFixed(2)}MB`,\n // status: 400,\n // requestInfo: { method, params, requestId },\n // originalError: null\n // })\n // }\n }\n\n /**\n * Calling the RestApi function\n * @param method - REST API method name\n * @param params - Parameters for the method.\n * @param requestId - Request id\n * @returns Promise with AjaxResult\n */\n public async call<T = unknown>(method: string, params: TypeCallParams, requestId?: string): Promise<AjaxResult<T>> {\n requestId = requestId ?? this._requestIdGenerator.getRequestId()\n const maxRetries = this._restrictionManager.getParams().maxRetries!\n\n this._validateParams(requestId, method, params)\n this._logRequest(requestId, method, params)\n\n let lastError: AjaxError | null = null\n const startTime = Date.now()\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n this._logAttempt(requestId, method, attempt + 1, maxRetries)\n\n // Apply operating limits via the manager\n await this._restrictionManager.applyOperatingLimits(requestId, method, params)\n\n // 3. We execute the request taking into account authorization, rate limit, and update operating statistics.\n const result = await this._executeSingleCall<T>(requestId, method, params)\n const duration = Date.now() - startTime\n\n // 6. Updating statistics\n this._restrictionManager.resetErrors(method)\n this._updateMetrics(method, true, duration)\n\n // Log the results\n this._logSuccessfulRequest(requestId, method, duration)\n return result\n } catch (error: unknown) {\n lastError = this._convertToAjaxError(requestId, error, method, params)\n\n const duration = Date.now() - startTime\n\n this._restrictionManager.incrementError(method)\n this._updateMetrics(method, false, duration, lastError)\n\n // Log the results\n this._logFailedRequest(requestId, method, attempt + 1, maxRetries, lastError)\n\n if (attempt + 1 < maxRetries) {\n const waitTime = await this._restrictionManager.handleError(requestId, method, params, lastError, attempt)\n // We don't repeat if waitTime === 0\n if (waitTime > 0) {\n this._restrictionManager.incrementStats('limitHits')\n\n this._logAttemptRetryWaiteDelay(requestId, method, waitTime, attempt + 1, maxRetries)\n await this._restrictionManager.waiteDelay(waitTime)\n\n this._restrictionManager.incrementStats('retries')\n\n continue\n }\n }\n\n if (attempt + 1 === maxRetries) {\n this._logAllAttemptsExhausted(requestId, method, attempt + 1, maxRetries)\n }\n\n /**\n * We decide whether to throw an error in `AjaxResult` or throw an exception.\n */\n if (this._restrictionManager.exceptionCodeForSoft.includes(lastError.code)) {\n return this._createAjaxResultWithErrorFromResponse<T>(lastError, requestId, method, params)\n }\n throw lastError\n }\n }\n\n // Unreachable on normal exhaustion — the final attempt throws `lastError` (its\n // real code) above. Only reached when maxRetries < 1: the loop never runs and\n // there is no lastError to surface. (#143)\n throw new AjaxError({\n code: 'JSSDK_CALL_ALL_ATTEMPTS_EXHAUSTED',\n description: 'All attempts exhausted',\n status: lastError?.status || 500,\n requestInfo: { method, params, requestId },\n originalError: lastError?.originalError || null\n })\n }\n\n protected _convertToAjaxError(requestId: string, error: unknown, method: string, params: TypeCallParams): AjaxError {\n if (error instanceof AjaxError) {\n return error\n }\n\n if (error instanceof AxiosError) {\n return this._convertAxiosErrorToAjaxError(requestId, error, method, params)\n }\n\n return this._convertUnknownErrorToAjaxError(requestId, error, method, params)\n }\n\n protected _convertAxiosErrorToAjaxError(requestId: string, axiosError: AxiosError, method: string, params: TypeCallParams): AjaxError {\n let errorCode = `${axiosError.code || 'JSSDK_AXIOS_ERROR'}`\n let errorDescription = axiosError.message\n const status = axiosError.response?.status || 0\n\n // Handling network errors\n if (errorCode === 'ERR_NETWORK') {\n return new AjaxError({\n code: 'NETWORK_ERROR',\n description: 'Network connection failed',\n status: 0,\n requestInfo: { method, params, requestId },\n originalError: axiosError\n })\n }\n\n // Handling timeout\n if (errorCode === 'ECONNABORTED' || axiosError.message.includes('timeout')) {\n return new AjaxError({\n code: 'REQUEST_TIMEOUT',\n description: 'Request timeout exceeded',\n status: 408,\n requestInfo: { method, params, requestId },\n originalError: axiosError\n })\n }\n\n /**\n * @todo make single function\n * @see AjaxResult.#processErrors()\n */\n if (axiosError.response?.data && typeof axiosError.response.data === 'object') {\n const responseData = axiosError.response.data as TypeDescriptionError | TypeDescriptionErrorV3\n if (\n responseData.error\n && typeof responseData.error === 'object'\n && 'code' in responseData.error\n ) {\n errorCode = responseData.error.code\n errorDescription = responseData.error.message.trimEnd()\n if (responseData.error.validation) {\n if (errorDescription.length > 0) {\n if (!errorDescription.endsWith('.')) {\n errorDescription += `.`\n }\n errorDescription += ` `\n }\n responseData.error.validation.forEach((row) => {\n errorDescription += `${row?.message || JSON.stringify(row)}`\n })\n }\n } else if (responseData.error && typeof responseData.error === 'string') {\n errorCode = responseData.error !== '0' ? responseData.error : errorCode\n errorDescription = (responseData as TypeDescriptionError)?.error_description ?? errorDescription\n }\n }\n\n return new AjaxError({\n code: errorCode,\n description: errorDescription,\n status,\n requestInfo: { method, params, requestId },\n originalError: axiosError\n })\n }\n\n protected _convertUnknownErrorToAjaxError(requestId: string, error: unknown, method: string, params: TypeCallParams): AjaxError {\n return new AjaxError({\n code: 'JSSDK_UNKNOWN_ERROR',\n description: error instanceof Error ? error.message : String(error),\n status: 0,\n requestInfo: { method, params, requestId },\n originalError: error\n })\n }\n\n // region Execute Single Call ////\n /**\n * Performs a single call with\n * - 401 error handling\n * - rate limit check\n * - updating operating statistics\n */\n protected async _executeSingleCall<T = unknown>(requestId: string, method: string, params: TypeCallParams): Promise<AjaxResult<T>> {\n this._checkClientSideWarning(requestId)\n const authData = await this._ensureAuth(requestId)\n const response = await this._makeRequestWithAuthRetry<T>(requestId, method, params, authData)\n\n return this._createAjaxResultFromResponse<T>(response, requestId, method, params)\n }\n\n // Get/update authorization\n protected async _ensureAuth(requestId: string): Promise<AuthData> {\n let authData = this._authActions.getAuthData()\n if (authData === false) {\n this._logRefreshingAuthToken(requestId)\n authData = await this._refreshAuth()\n }\n return authData\n }\n\n /**\n * Refresh the auth token, coalescing concurrent callers onto a single\n * in-flight `refreshAuth()` so a burst of 401s triggers exactly one refresh\n * round-trip. The slot clears once the refresh settles. (#182)\n */\n protected _refreshAuth(): Promise<AuthData> {\n if (this._pendingRefresh) {\n return this._pendingRefresh\n }\n const refresh = this._authActions.refreshAuth()\n this._pendingRefresh = refresh\n // Clear the slot once settled; the extra no-op catch keeps this cleanup\n // chain from surfacing as an unhandled rejection — callers still receive\n // the rejection through the returned promise.\n refresh.finally(() => {\n this._pendingRefresh = null\n }).catch(() => {})\n return refresh\n }\n\n // Execute the request with 401 error handling\n protected async _makeRequestWithAuthRetry<T>(requestId: string, method: string, params: TypeCallParams, authData: AuthData): Promise<AjaxResponse<T>> {\n try {\n // 4. Apply the rate limit through the manager\n await this._restrictionManager.checkRateLimit(requestId, method)\n\n return await this._makeAxiosRequest<T>(requestId, method, params, authData)\n } catch (error) {\n if (error instanceof AxiosError) {\n this.getLogger().info(\n `post/catchError`, {\n requestId,\n status: error.status,\n // Redact in case a future portal response embeds credentials in\n // the error body (today it doesn't, but the channel is open) (#39),\n // and cap the length so a large error body can't flood the sink (#236).\n responseData: truncateForLog(JSON.stringify(redactSensitiveParams(error?.response?.data), null, 0))\n }\n )\n }\n\n // Normalize to AjaxError first: axios throws a raw AxiosError here, whose\n // Bitrix `code` (e.g. `expired_token`) is only populated by conversion. The\n // 401 auth-retry check must run against the converted error — otherwise the\n // `instanceof AjaxError` guard in `_isAuthError` is always false and the\n // refresh-and-retry branch below is dead code. (#182)\n const ajaxError = this._convertToAjaxError(requestId, error, method, params)\n\n // If this is an authorization error (401), then we try to update the token and repeat\n if (this._isAuthError(ajaxError)) {\n this._logAuthErrorDetected(requestId)\n this._logRefreshingAuthToken(requestId)\n\n const refreshedAuthData = await this._refreshAuth()\n\n // 4. Apply the rate limit through the manager\n await this._restrictionManager.checkRateLimit(requestId, method)\n\n return await this._makeAxiosRequest<T>(requestId, method, params, refreshedAuthData)\n }\n\n // Non-auth error: rethrow the already-converted AjaxError (idempotent in\n // `call()`'s catch) instead of the raw AxiosError. (#182)\n throw ajaxError\n }\n }\n\n protected async _makeAxiosRequest<T>(requestId: string, method: string, params: TypeCallParams, authData: AuthData): Promise<AjaxResponse<T>> {\n const methodFormatted = this._prepareMethod(requestId, method, this.getBaseUrl())\n\n const paramsFormatted = this._prepareParams(authData, params)\n // `paramsFormatted` carries the OAuth `auth` (access_token) for non-hook flows;\n // log a redacted copy so the secret never enters logger context, while axios\n // still receives the original below. (#39)\n const paramsFormattedForLog = JSON.stringify(redactSensitiveParams(paramsFormatted), null, 0)\n\n this.getLogger().info(\n `post/send`, {\n requestId,\n method,\n params: truncateForLog(paramsFormattedForLog)\n }\n )\n\n const response = await this._clientAxios.post<SuccessPayload<T>>(methodFormatted, paramsFormatted)\n\n const resultFormattedForLog = JSON.stringify(response.data.result, null, 0)\n this.getLogger().info(\n `post/response`, {\n requestId,\n // responseFull: JSON.stringify(response.data, null, 2),\n result: truncateForLog(resultFormattedForLog),\n time: JSON.stringify(response.data.time, null, 0)\n }\n )\n\n return {\n status: response.status,\n payload: response.data\n }\n }\n\n protected _isAuthError(error: unknown): boolean {\n if (!(error instanceof AjaxError)) {\n return false\n }\n\n return (\n error.status === 401\n && ['expired_token', 'invalid_token'].includes(error.code)\n )\n }\n\n protected async _createAjaxResultFromResponse<T>(response: AjaxResponse<T>, requestId: string, method: string, params: TypeCallParams): Promise<AjaxResult<T>> {\n const result = new AjaxResult<T>({\n answer: response.payload,\n query: { method, params, requestId },\n status: response.status\n })\n\n // 5. Update operating statistics\n if (result.isSuccess) {\n const time = result.getData()?.time\n await this._restrictionManager.updateStats(requestId, method, time!)\n }\n\n return result\n }\n\n /**\n * This works in conjunction with the AbstractHttp._convertAxiosErrorToAjaxError function\n */\n protected _createAjaxResultWithErrorFromResponse<T>(ajaxError: AjaxError, requestId: string, method: string, params: TypeCallParams): AjaxResult<T> {\n return new AjaxResult<T>({\n answer: {\n error: {\n code: ajaxError.code,\n message: ajaxError.message\n }\n },\n query: { method, params, requestId },\n status: ajaxError.status\n })\n //\n // result.addError(ajaxError)\n //\n // return result\n }\n // endregion ////\n // endregion ////\n\n // region Prepare ////\n /**\n * Builds the request URL: the method path plus the SDK telemetry query params\n * (`bx24_request_id` / `bx24_sdk_ver` / `bx24_sdk_type` — request tracing and\n * SDK identification, not auth material).\n *\n * Carve-out for the legacy positional `task.*` methods (`task.commentitem.*`,\n * `task.checklistitem.*`, `task.elapseditem.*`, …): these read the request\n * **query string positionally**, so appending the telemetry params shifts\n * `Param #0` and the server rejects the call —\n * `WRONG_ARGUMENTS: Param #0 (taskId) ... expected integer, but given\n * something else`. Verified live against a portal: the same\n * `task.commentitem.getlist` / `task.checklistitem.getlist` call succeeds\n * without the telemetry params and fails with them; modern `tasks.task.*`\n * (named params) is unaffected. So telemetry is omitted for any method whose\n * name contains `task.`.\n *\n * Shared by v2 and v3 (rather than per-transport): once the v3 method\n * allowlist was dropped (#259) a positional `task.*` method can be routed via\n * `actions.v3.*` too, so v3 needs the same suppression — keeping the rule in\n * one place stops the two transports drifting apart again (#207).\n *\n * `includes('task.')` is a deliberate over-approximation: it also drops the\n * (optional, telemetry-safe) params for modern `tasks.task.*` / `bizproc.task.*`.\n * Narrowing to an anchored `^task\\.` is possible but unverified across the\n * whole task surface, so the broad, safe match is kept. Bitrix24 method names\n * are lowercase by convention, so the case-sensitive match is sufficient.\n *\n * @see https://apidocs.bitrix24.com/settings/how-to-call-rest-api/data-encoding.html#order-of-parameters\n */\n protected _prepareMethod(requestId: string, method: string, baseUrl: string): string {\n const methodUrl = `/${encodeURIComponent(method)}`\n\n if (method.includes('task.')) {\n return `${baseUrl}${methodUrl}`\n }\n\n const queryParams = new URLSearchParams({\n [this._requestIdGenerator.getQueryStringParameterName()]: requestId,\n [this._requestIdGenerator.getQueryStringSdkParameterName()]: '__SDK_VERSION__',\n [this._requestIdGenerator.getQueryStringSdkTypeParameterName()]: '__SDK_USER_AGENT__'\n })\n return `${baseUrl}${methodUrl}?${queryParams.toString()}`\n }\n\n /**\n * Processes function parameters and adds authorization\n */\n protected _prepareParams(authData: AuthData, params: TypeCallParams): TypePrepareParams {\n const result: TypePrepareParams = { ...params }\n\n /** @memo we skip auth for hook */\n if (authData.refresh_token !== 'hook') {\n result.auth = authData.access_token\n }\n\n if (result?.data && 'start' in result.data) {\n const { start, ...dataWithoutStart } = result.data\n result.data = dataWithoutStart\n }\n\n return result\n }\n\n /**\n * @inheritDoc\n */\n public setClientSideWarning(\n value: boolean,\n message: string\n ): void {\n this._isClientSideWarning = value\n this._clientSideWarningMessage = message\n }\n // endregion ////\n\n // region Tools ////\n /**\n * Tests whether the code is executed on the client side\n * @return {boolean}\n * @protected\n */\n protected isServerSide(): boolean {\n return (getEnvironment() !== Environment.BROWSE)\n }\n\n /**\n * Get the BX24 account address with the path based on the API version\n */\n public getBaseUrl(): string {\n return this._authActions.getTargetOriginWithPath().get(this._version)!\n }\n // endregion ////\n\n // region Log ////\n protected _sanitizeParams(params: TypeCallParams): Record<string, unknown> {\n return redactSensitiveParams(params)\n }\n\n protected _logRequest(requestId: string, method: string, params: TypeCallParams): void {\n this.getLogger().debug(`http request starting`, {\n requestId,\n method,\n params: this._sanitizeParams(params),\n api: this.apiVersion,\n timestamp: Date.now()\n })\n }\n\n protected _logAttempt(requestId: string, method: string, attempt: number, maxRetries: number): void {\n this.getLogger().info(`http request attempt`, {\n requestId,\n method,\n api: this.apiVersion,\n attempt: {\n current: attempt,\n max: maxRetries\n }\n })\n }\n\n protected _logRefreshingAuthToken(requestId: string): void {\n this.getLogger().info(`http refreshing auth token`, {\n requestId,\n api: this.apiVersion\n })\n }\n\n protected _logAuthErrorDetected(requestId: string): void {\n this.getLogger().info(`http auth error detected`, {\n requestId,\n api: this.apiVersion\n })\n }\n\n protected _logSuccessfulRequest(requestId: string, method: string, duration: number): void {\n this.getLogger().debug(`http request successful`, {\n requestId,\n method,\n api: this.apiVersion,\n duration: {\n ms: duration,\n sec: Number.parseFloat((duration / 1000).toFixed(2))\n }\n })\n }\n\n protected _logFailedRequest(\n requestId: string,\n method: string,\n attempt: number,\n maxRetries: number,\n error: AjaxError\n ): void {\n this.getLogger().debug(`http request failed`, {\n requestId,\n method,\n api: this.apiVersion,\n attempt: {\n current: attempt,\n max: maxRetries\n },\n error: {\n code: error.code,\n message: error.message,\n status: error.status\n }\n })\n }\n\n protected _logAttemptRetryWaiteDelay(\n requestId: string,\n method: string,\n wait: number,\n attempt: number,\n maxRetries: number\n ): void {\n this.getLogger().debug(\n `http wait ${(wait / 1000).toFixed(2)} sec.`,\n {\n requestId,\n method,\n api: this.apiVersion,\n wait: wait,\n attempt: {\n current: attempt,\n max: maxRetries\n }\n }\n )\n }\n\n protected _logAllAttemptsExhausted(requestId: string, method: string, attempt: number, maxRetries: number): void {\n this.getLogger().warning(`http all retry attempts exhausted`, {\n requestId,\n method,\n api: this.apiVersion,\n attempt: {\n current: attempt,\n max: maxRetries\n }\n })\n }\n\n protected _logBatchStart(\n requestId: string,\n calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal,\n options: ICallBatchOptions\n ): void {\n const callCount = Array.isArray(calls)\n ? calls.length\n : Object.keys(calls).length\n\n this.getLogger().debug(`http batch request starting `, {\n requestId,\n callCount,\n api: this.apiVersion,\n isHaltOnError: options.isHaltOnError,\n timestamp: Date.now()\n })\n }\n\n protected _logBatchCompletion(requestId: string, total: number, errors: number): void {\n this.getLogger().debug(`http batch request completed`, {\n requestId,\n api: this.apiVersion,\n totalCalls: total,\n successful: total - errors,\n failed: errors,\n successRate: total > 0 ? ((total - errors) / (total) * 100).toFixed(1) + '%' : '??'\n })\n }\n\n // Check client-side warnings\n protected _checkClientSideWarning(requestId: string): void {\n if (\n this._isClientSideWarning\n && !this.isServerSide()\n && Type.isStringFilled(this._clientSideWarningMessage)\n ) {\n LoggerFactory.forcedLog(\n this.getLogger(),\n 'warning',\n this._clientSideWarningMessage,\n {\n requestId,\n code: 'JSSDK_CLIENT_SIDE_WARNING'\n }\n )\n }\n }\n // endregion ////\n}\n"],"names":["ApiVersion","LoggerFactory","RequestIdGenerator","axios","ParamsFactory","RestrictionManager","AjaxError","AxiosError","redactSensitiveParams","AjaxResult","getEnvironment","Environment","Type"],"mappings":"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"}
@@ -0,0 +1,113 @@
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 sdkError = require('../sdk-error.cjs');
12
+ const redact = require('./redact.cjs');
13
+
14
+ var __defProp = Object.defineProperty;
15
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
16
+ class AjaxError extends sdkError.SdkError {
17
+ static {
18
+ __name(this, "AjaxError");
19
+ }
20
+ requestInfo;
21
+ constructor(params) {
22
+ if (params.code === "AUTHORIZE_ERROR" || params.code === "WRONG_AUTH_TYPE") {
23
+ params.status = 403;
24
+ }
25
+ params.description = AjaxError.formatErrorMessage(params);
26
+ super(params);
27
+ this.name = "AjaxError";
28
+ this.requestInfo = params.requestInfo ? {
29
+ ...params.requestInfo,
30
+ ...params.requestInfo.params !== void 0 ? { params: redact.redactSensitiveParams(params.requestInfo.params) } : {}
31
+ } : void 0;
32
+ this.cleanErrorStack();
33
+ }
34
+ /**
35
+ * Creates AjaxError from HTTP response
36
+ * @todo add support v3
37
+ */
38
+ static fromResponse(response) {
39
+ return new AjaxError({
40
+ code: response.data?.error || "JSSDK_INTERNAL_AJAX_ERROR",
41
+ description: response.data?.error_description,
42
+ status: response.status,
43
+ requestInfo: response.config
44
+ });
45
+ }
46
+ /**
47
+ * @inheritDoc
48
+ */
49
+ static fromException(error, context) {
50
+ if (error instanceof AjaxError) return error;
51
+ return new AjaxError({
52
+ code: context?.code || "JSSDK_INTERNAL_AJAX_ERROR",
53
+ status: context?.status || 500,
54
+ description: error instanceof Error ? error.message : String(error),
55
+ requestInfo: context?.requestInfo,
56
+ originalError: error
57
+ });
58
+ }
59
+ /**
60
+ * @inheritDoc
61
+ */
62
+ toJSON() {
63
+ return {
64
+ name: this.name,
65
+ code: this.code,
66
+ message: this.message,
67
+ status: this._status,
68
+ timestamp: this.timestamp.toISOString(),
69
+ requestInfo: this.requestInfo,
70
+ stack: this.stack
71
+ };
72
+ }
73
+ /**
74
+ * @inheritDoc
75
+ */
76
+ toString() {
77
+ let output = `[${this.name}] ${this.code} (${this._status}): ${this.message}`;
78
+ if (this.requestInfo) {
79
+ output += `
80
+ Request: ${this.requestInfo?.requestId ? `[${this.requestInfo.requestId}] ` : ""}${this.requestInfo.method}`;
81
+ }
82
+ if (this.stack) {
83
+ output += `
84
+ Stack trace:
85
+ ${this.stack}`;
86
+ }
87
+ return output;
88
+ }
89
+ /**
90
+ * @inheritDoc
91
+ */
92
+ static formatErrorMessage(params) {
93
+ if (!params?.description) {
94
+ if (params.requestInfo?.method) {
95
+ return `${params.code} (on ${params.requestInfo.method})`;
96
+ } else {
97
+ return `Internal ajax error`;
98
+ }
99
+ }
100
+ return `${params.description}`;
101
+ }
102
+ /**
103
+ * @inheritDoc
104
+ */
105
+ cleanErrorStack() {
106
+ if (typeof this.stack === "string") {
107
+ this.stack = this.stack.split("\n").filter((line) => !line.includes("AjaxError.constructor")).join("\n");
108
+ }
109
+ }
110
+ }
111
+
112
+ exports.AjaxError = AjaxError;
113
+ //# sourceMappingURL=ajax-error.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajax-error.cjs","sources":["../../../../src/core/http/ajax-error.ts"],"sourcesContent":["import type { AjaxQuery } from './ajax-result'\nimport type { SdkErrorDetails } from '../sdk-error'\nimport { SdkError } from '../sdk-error'\nimport { redactSensitiveParams } from './redact'\n\nexport type AnswerError = {\n error: string\n errorDescription: string\n}\n\nexport type AjaxErrorParams = {\n status: number\n answerError: AnswerError\n cause?: Error\n}\n\ntype AjaxErrorDetails = SdkErrorDetails & {\n requestInfo?: Partial<AjaxQuery>\n}\n\n/**\n * Error requesting RestApi\n */\nexport class AjaxError extends SdkError {\n public readonly requestInfo?: AjaxErrorDetails['requestInfo']\n\n constructor(params: AjaxErrorDetails) {\n // @todo test this\n // @memo get from PullClient.loadConfig\n if (params.code === 'AUTHORIZE_ERROR' || params.code === 'WRONG_AUTH_TYPE') {\n params.status = 403\n }\n\n params.description = AjaxError.formatErrorMessage(params)\n super(params)\n\n this.name = 'AjaxError' as const\n // Redact credential-bearing keys from caller-supplied params so they never\n // leak via `toJSON()` / `toString()` consumers (#39).\n this.requestInfo = params.requestInfo\n ? {\n ...params.requestInfo,\n ...(params.requestInfo.params !== undefined\n ? { params: redactSensitiveParams(params.requestInfo.params) }\n : {})\n }\n : undefined\n\n this.cleanErrorStack()\n }\n\n /**\n * Creates AjaxError from HTTP response\n * @todo add support v3\n */\n static fromResponse(response: {\n status: number\n data?: { error?: string, error_description?: string }\n config?: AjaxErrorDetails['requestInfo']\n }): AjaxError {\n return new AjaxError({\n code: response.data?.error || 'JSSDK_INTERNAL_AJAX_ERROR',\n description: response.data?.error_description,\n status: response.status,\n requestInfo: response.config\n })\n }\n\n /**\n * @inheritDoc\n */\n static override fromException(error: unknown, context?: {\n code?: string\n status?: number\n requestInfo?: AjaxErrorDetails['requestInfo']\n }): AjaxError {\n if (error instanceof AjaxError) return error\n\n return new AjaxError({\n code: context?.code || 'JSSDK_INTERNAL_AJAX_ERROR',\n status: context?.status || 500,\n description: error instanceof Error ? error.message : String(error),\n requestInfo: context?.requestInfo,\n originalError: error\n })\n }\n\n /**\n * @inheritDoc\n */\n override toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this._status,\n timestamp: this.timestamp.toISOString(),\n requestInfo: this.requestInfo,\n stack: this.stack\n }\n }\n\n /**\n * @inheritDoc\n */\n override toString(): string {\n let output = `[${this.name}] ${this.code} (${this._status}): ${this.message}`\n\n if (this.requestInfo) {\n output += `\\nRequest: ${this.requestInfo?.requestId ? `[${this.requestInfo.requestId}] ` : ''}${this.requestInfo.method}`\n }\n\n if (this.stack) {\n output += `\\nStack trace:\\n${this.stack}`\n }\n\n return output\n }\n\n /**\n * @inheritDoc\n */\n protected static override formatErrorMessage(params: AjaxErrorDetails): string {\n if (!params?.description) {\n if (params.requestInfo?.method) {\n return `${params.code} (on ${params.requestInfo.method})`\n } else {\n return `Internal ajax error`\n }\n }\n\n return `${params.description}`\n }\n\n /**\n * @inheritDoc\n */\n protected override cleanErrorStack() {\n if (typeof this.stack === 'string') {\n this.stack = this.stack\n .split('\\n')\n .filter(line => !line.includes('AjaxError.constructor'))\n .join('\\n')\n }\n }\n}\n"],"names":["SdkError","redactSensitiveParams"],"mappings":";;;;;;;;;;;;;;;AAuBO,MAAM,kBAAkBA,iBAAA,CAAS;AAAA,EAvBxC;AAuBwC,IAAA,MAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA;AAAA,EACtB,WAAA;AAAA,EAEhB,YAAY,MAAA,EAA0B;AAGpC,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,iBAAA,IAAqB,MAAA,CAAO,SAAS,iBAAA,EAAmB;AAC1E,MAAA,MAAA,CAAO,MAAA,GAAS,GAAA;AAAA,IAClB;AAEA,IAAA,MAAA,CAAO,WAAA,GAAc,SAAA,CAAU,kBAAA,CAAmB,MAAM,CAAA;AACxD,IAAA,KAAA,CAAM,MAAM,CAAA;AAEZ,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AAGZ,IAAA,IAAA,CAAK,WAAA,GAAc,OAAO,WAAA,GACtB;AAAA,MACE,GAAG,MAAA,CAAO,WAAA;AAAA,MACV,GAAI,MAAA,CAAO,WAAA,CAAY,MAAA,KAAW,MAAA,GAC9B,EAAE,MAAA,EAAQC,4BAAA,CAAsB,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA,KACzD;AAAC,KACP,GACA,MAAA;AAEJ,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,aAAa,QAAA,EAIN;AACZ,IAAA,OAAO,IAAI,SAAA,CAAU;AAAA,MACnB,IAAA,EAAM,QAAA,CAAS,IAAA,EAAM,KAAA,IAAS,2BAAA;AAAA,MAC9B,WAAA,EAAa,SAAS,IAAA,EAAM,iBAAA;AAAA,MAC5B,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,aAAa,QAAA,CAAS;AAAA,KACvB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAgB,aAAA,CAAc,KAAA,EAAgB,OAAA,EAIhC;AACZ,IAAA,IAAI,KAAA,YAAiB,WAAW,OAAO,KAAA;AAEvC,IAAA,OAAO,IAAI,SAAA,CAAU;AAAA,MACnB,IAAA,EAAM,SAAS,IAAA,IAAQ,2BAAA;AAAA,MACvB,MAAA,EAAQ,SAAS,MAAA,IAAU,GAAA;AAAA,MAC3B,aAAa,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,MAClE,aAAa,OAAA,EAAS,WAAA;AAAA,MACtB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKS,MAAA,GAAS;AAChB,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,WAAA,EAAY;AAAA,MACtC,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKS,QAAA,GAAmB;AAC1B,IAAA,IAAI,MAAA,GAAS,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,OAAO,CAAA,GAAA,EAAM,IAAA,CAAK,OAAO,CAAA,CAAA;AAE3E,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAA,IAAU;AAAA,SAAA,EAAc,IAAA,CAAK,WAAA,EAAa,SAAA,GAAY,CAAA,CAAA,EAAI,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA,EAAA,CAAA,GAAO,EAAE,CAAA,EAAG,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA,CAAA;AAAA,IACzH;AAEA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAA,IAAU;AAAA;AAAA,EAAmB,KAAK,KAAK,CAAA,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAA0B,mBAAmB,MAAA,EAAkC;AAC7E,IAAA,IAAI,CAAC,QAAQ,WAAA,EAAa;AACxB,MAAA,IAAI,MAAA,CAAO,aAAa,MAAA,EAAQ;AAC9B,QAAA,OAAO,GAAG,MAAA,CAAO,IAAI,CAAA,KAAA,EAAQ,MAAA,CAAO,YAAY,MAAM,CAAA,CAAA,CAAA;AAAA,MACxD,CAAA,MAAO;AACL,QAAA,OAAO,CAAA,mBAAA,CAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,CAAA,EAAG,OAAO,WAAW,CAAA,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKmB,eAAA,GAAkB;AACnC,IAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AAClC,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CACf,KAAA,CAAM,IAAI,CAAA,CACV,MAAA,CAAO,CAAA,IAAA,KAAQ,CAAC,KAAK,QAAA,CAAS,uBAAuB,CAAC,CAAA,CACtD,KAAK,IAAI,CAAA;AAAA,IACd;AAAA,EACF;AACF;;;;"}
@@ -0,0 +1,219 @@
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 type = require('../../tools/type.cjs');
12
+ const text = require('../../tools/text.cjs');
13
+ const result = require('../result.cjs');
14
+ const ajaxError = require('./ajax-error.cjs');
15
+ const b24 = require('../../types/b24.cjs');
16
+ const sdkError = require('../sdk-error.cjs');
17
+
18
+ var __defProp = Object.defineProperty;
19
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
20
+ class AjaxResult extends result.Result {
21
+ static {
22
+ __name(this, "AjaxResult");
23
+ }
24
+ _status;
25
+ _query;
26
+ _data;
27
+ constructor(options) {
28
+ super();
29
+ this._data = options.answer ? Object.freeze(options.answer) : void 0;
30
+ this._query = Object.freeze(structuredClone(options.query));
31
+ this._status = options.status;
32
+ this.#processErrors();
33
+ }
34
+ get isSuccess() {
35
+ return this.#getIsSuccess();
36
+ }
37
+ /**
38
+ * @todo test this predicate
39
+ */
40
+ #getIsSuccess() {
41
+ return this._errors.size === 0;
42
+ }
43
+ getData() {
44
+ if (!this.isSuccess) {
45
+ return void 0;
46
+ }
47
+ const payload = this._data;
48
+ return Object.freeze({
49
+ result: payload.result,
50
+ time: payload.time
51
+ });
52
+ }
53
+ /**
54
+ * If the response contains error data, we'll restore it to an error.
55
+ *
56
+ * @todo make single function
57
+ * @see AbstractHttp._convertAxiosErrorToAjaxError()
58
+ */
59
+ #processErrors() {
60
+ if (this._data && typeof this._data === "object" && "error" in this._data) {
61
+ const responseData = this._data;
62
+ if (responseData.error && typeof responseData.error === "object" && "code" in responseData.error) {
63
+ const errorCode = responseData.error.code;
64
+ let errorDescription = responseData.error.message.trimEnd();
65
+ if (responseData.error.validation) {
66
+ if (errorDescription.length > 0) {
67
+ if (!errorDescription.endsWith(".")) {
68
+ errorDescription += `.`;
69
+ }
70
+ errorDescription += ` `;
71
+ }
72
+ responseData.error.validation.forEach((row) => {
73
+ errorDescription += `${row?.message || JSON.stringify(row)}`;
74
+ });
75
+ }
76
+ this.addError(this.#createAjaxError({
77
+ code: errorCode,
78
+ description: errorDescription,
79
+ status: this._status
80
+ }), "base-error");
81
+ } else if (responseData.error && typeof responseData.error === "string") {
82
+ const errorCode = responseData.error !== "0" ? responseData.error : "JSSDK_RESPONSE_ERROR";
83
+ const errorDescription = responseData?.error_description ?? "Some error in response";
84
+ this.addError(this.#createAjaxError({
85
+ code: errorCode,
86
+ description: errorDescription,
87
+ status: this._status
88
+ }), "base-error");
89
+ }
90
+ }
91
+ }
92
+ #createAjaxError(errorData) {
93
+ return new ajaxError.AjaxError({
94
+ code: errorData.code,
95
+ description: errorData.description,
96
+ status: errorData.status,
97
+ requestInfo: {
98
+ method: this._query.method,
99
+ params: this._query.params,
100
+ requestId: this._query.requestId
101
+ }
102
+ });
103
+ }
104
+ /**
105
+ * Alias for isMore
106
+ *
107
+ * @deprecated Will be removed in `2.0.0`. Tied to the `restApi:v2` envelope
108
+ * field `next`, which `restApi:v3` does not return. Use the SDK's list
109
+ * helpers — they hide pagination entirely:
110
+ * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}
111
+ * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}
112
+ *
113
+ * @removed 2.0.0
114
+ */
115
+ hasMore() {
116
+ return this.isMore();
117
+ }
118
+ /**
119
+ * @deprecated Will be removed in `2.0.0`. Tied to the `restApi:v2` envelope
120
+ * field `next`, which `restApi:v3` does not return. Use the SDK's list
121
+ * helpers — they hide pagination entirely:
122
+ * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}
123
+ * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}
124
+ *
125
+ * @removed 2.0.0
126
+ */
127
+ isMore() {
128
+ if (!this.isSuccess) {
129
+ return false;
130
+ }
131
+ const payload = this._data;
132
+ const nextValue = "next" in payload ? payload.next : void 0;
133
+ return type.Type.isNumber(nextValue);
134
+ }
135
+ /**
136
+ * @deprecated Will be removed in `2.0.0`. Tied to the `restApi:v2` envelope
137
+ * field `total`, which `restApi:v3` does not return. `restApi:v3` has no
138
+ * element-count replacement yet — an `aggregate` action (`count` /
139
+ * `countDistinct`) is planned but not exposed in the SDK; for `restApi:v2`
140
+ * use the list helpers, which iterate without exposing `total`.
141
+ *
142
+ * @removed 2.0.0
143
+ */
144
+ getTotal() {
145
+ if (!this.isSuccess) {
146
+ return 0;
147
+ }
148
+ const payload = this._data;
149
+ const totalValue = "total" in payload ? payload.total : void 0;
150
+ return text.Text.toInteger(totalValue);
151
+ }
152
+ getStatus() {
153
+ return this._status;
154
+ }
155
+ getQuery() {
156
+ return this._query;
157
+ }
158
+ /**
159
+ * Alias for getNext
160
+ * @param http
161
+ *
162
+ * @deprecated Will be removed in `2.0.0`. `restApi:v3` does not support
163
+ * `getNext()` (the v2 envelope field `next` does not exist). Use the SDK's
164
+ * list helpers instead — they hide pagination entirely:
165
+ * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}
166
+ * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}
167
+ *
168
+ * @removed 2.0.0
169
+ */
170
+ async fetchNext(http) {
171
+ const data = await this.getNext(http);
172
+ if (data === false) {
173
+ return null;
174
+ }
175
+ return data;
176
+ }
177
+ /**
178
+ * @deprecated Will be removed in `2.0.0`. Throws on `restApi:v3` because the
179
+ * v2 envelope field `next` is not part of the v3 protocol. Use the SDK's
180
+ * list helpers instead — they hide pagination entirely:
181
+ * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}
182
+ * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}
183
+ *
184
+ * @throws {SdkError} `JSSDK_CORE_METHOD_NOT_SUPPORT_IN_API_V3` when called against a `restApi:v3` HTTP client. This throw is preserved until `2.0.0`.
185
+ * @removed 2.0.0
186
+ */
187
+ async getNext(http) {
188
+ if (http.apiVersion === b24.ApiVersion.v3) {
189
+ throw new sdkError.SdkError({
190
+ code: "JSSDK_CORE_METHOD_NOT_SUPPORT_IN_API_V3",
191
+ description: `restApi:v3 not support method getNext`,
192
+ status: 500
193
+ });
194
+ }
195
+ if (!this.isSuccess || !this.isMore()) {
196
+ return false;
197
+ }
198
+ const nextPageQuery = this.#buildNextPageQuery();
199
+ return http.call(
200
+ nextPageQuery.method,
201
+ nextPageQuery.params
202
+ );
203
+ }
204
+ #buildNextPageQuery() {
205
+ const payload = this._data;
206
+ const nextValue = "next" in payload ? payload.next : void 0;
207
+ return {
208
+ ...this._query,
209
+ params: { ...this._query.params, start: text.Text.toInteger(nextValue) }
210
+ };
211
+ }
212
+ // Immutable API
213
+ setData() {
214
+ throw new ReferenceError("AjaxResult does not allow data modification");
215
+ }
216
+ }
217
+
218
+ exports.AjaxResult = AjaxResult;
219
+ //# sourceMappingURL=ajax-result.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajax-result.cjs","sources":["../../../../src/core/http/ajax-result.ts"],"sourcesContent":["import type { IResult } from '../result'\nimport type { Payload, SuccessPayload } from '../../types/payloads'\nimport type { TypeCallParams, TypeHttp } from '../../types/http'\nimport type { TypeDescriptionError, TypeDescriptionErrorV3 } from '../../types/auth'\nimport { Type } from '../../tools/type'\nimport { Text } from '../../tools/text'\nimport { Result } from '../result'\nimport { AjaxError } from './ajax-error'\nimport { ApiVersion } from '../../types/b24'\nimport { SdkError } from '../sdk-error'\n\nexport type AjaxQuery = Readonly<{\n method: string\n params: TypeCallParams\n requestId: string\n}>\n\ntype AjaxResultOptions<T> = Readonly<{\n answer: Payload<T>\n query: AjaxQuery\n status: number\n}>\n\ntype ErrorData = {\n code: string\n description: string\n status: number\n}\n\n/**\n * Result of request to Rest Api\n *\n * @todo docs\n */\nexport class AjaxResult<T = unknown> extends Result<Payload<T>> implements IResult<Payload<T>> {\n private readonly _status: number\n private readonly _query: AjaxQuery\n protected override _data: Payload<T> | null | undefined\n\n constructor(options: AjaxResultOptions<T>) {\n super()\n\n this._data = options.answer ? Object.freeze(options.answer) : undefined\n this._query = Object.freeze(structuredClone(options.query))\n this._status = options.status\n\n this.#processErrors()\n }\n\n override get isSuccess(): boolean {\n return this.#getIsSuccess()\n }\n\n /**\n * @todo test this predicate\n */\n #getIsSuccess(): this is { getData: () => SuccessPayload<T> } {\n return this._errors.size === 0\n }\n\n override getData(): undefined | SuccessPayload<T> {\n if (!this.isSuccess) {\n return undefined\n }\n\n const payload = this._data as SuccessPayload<T>\n\n return Object.freeze({\n result: payload.result,\n time: payload.time\n }) as SuccessPayload<T>\n }\n\n /**\n * If the response contains error data, we'll restore it to an error.\n *\n * @todo make single function\n * @see AbstractHttp._convertAxiosErrorToAjaxError()\n */\n #processErrors(): void {\n if (this._data && typeof this._data === 'object' && 'error' in this._data) {\n const responseData = this._data as TypeDescriptionError | TypeDescriptionErrorV3\n\n if (\n responseData.error\n && typeof responseData.error === 'object'\n && 'code' in responseData.error\n ) {\n const errorCode = responseData.error.code\n let errorDescription = responseData.error.message.trimEnd()\n if (responseData.error.validation) {\n if (errorDescription.length > 0) {\n if (!errorDescription.endsWith('.')) {\n errorDescription += `.`\n }\n errorDescription += ` `\n }\n responseData.error.validation.forEach((row) => {\n errorDescription += `${row?.message || JSON.stringify(row)}`\n })\n }\n\n this.addError(this.#createAjaxError({\n code: errorCode,\n description: errorDescription,\n status: this._status\n }), 'base-error')\n } else if (responseData.error && typeof responseData.error === 'string') {\n const errorCode = responseData.error !== '0' ? responseData.error : 'JSSDK_RESPONSE_ERROR'\n const errorDescription = (responseData as TypeDescriptionError)?.error_description ?? 'Some error in response'\n\n this.addError(this.#createAjaxError({\n code: errorCode,\n description: errorDescription,\n status: this._status\n }), 'base-error')\n }\n }\n }\n\n #createAjaxError(errorData: ErrorData): AjaxError {\n return new AjaxError({\n code: errorData.code,\n description: errorData.description,\n status: errorData.status,\n requestInfo: {\n method: this._query.method,\n params: this._query.params,\n requestId: this._query.requestId\n }\n })\n }\n\n /**\n * Alias for isMore\n *\n * @deprecated Will be removed in `2.0.0`. Tied to the `restApi:v2` envelope\n * field `next`, which `restApi:v3` does not return. Use the SDK's list\n * helpers — they hide pagination entirely:\n * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}\n * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}\n *\n * @removed 2.0.0\n */\n hasMore(): boolean {\n return this.isMore()\n }\n\n /**\n * @deprecated Will be removed in `2.0.0`. Tied to the `restApi:v2` envelope\n * field `next`, which `restApi:v3` does not return. Use the SDK's list\n * helpers — they hide pagination entirely:\n * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}\n * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}\n *\n * @removed 2.0.0\n */\n isMore(): boolean {\n if (!this.isSuccess) {\n return false\n }\n const payload = this._data as { next?: number }\n const nextValue = 'next' in payload ? payload.next : undefined\n\n return Type.isNumber(nextValue)\n }\n\n /**\n * @deprecated Will be removed in `2.0.0`. Tied to the `restApi:v2` envelope\n * field `total`, which `restApi:v3` does not return. `restApi:v3` has no\n * element-count replacement yet — an `aggregate` action (`count` /\n * `countDistinct`) is planned but not exposed in the SDK; for `restApi:v2`\n * use the list helpers, which iterate without exposing `total`.\n *\n * @removed 2.0.0\n */\n getTotal(): number {\n if (!this.isSuccess) {\n return 0\n }\n const payload = this._data as { total?: number }\n const totalValue = 'total' in payload ? payload.total : undefined\n\n return Text.toInteger(totalValue)\n }\n\n getStatus(): number {\n return this._status\n }\n\n getQuery(): Readonly<AjaxQuery> {\n return this._query\n }\n\n /**\n * Alias for getNext\n * @param http\n *\n * @deprecated Will be removed in `2.0.0`. `restApi:v3` does not support\n * `getNext()` (the v2 envelope field `next` does not exist). Use the SDK's\n * list helpers instead — they hide pagination entirely:\n * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}\n * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}\n *\n * @removed 2.0.0\n */\n async fetchNext(http: TypeHttp): Promise<AjaxResult<T> | null> {\n const data = await this.getNext(http)\n if (data === false) {\n return null\n }\n\n return data\n }\n\n /**\n * @deprecated Will be removed in `2.0.0`. Throws on `restApi:v3` because the\n * v2 envelope field `next` is not part of the v3 protocol. Use the SDK's\n * list helpers instead — they hide pagination entirely:\n * - `restApi:v2`: {@link CallListV2.make `b24.actions.v2.callList.make`} or {@link FetchListV2.make `b24.actions.v2.fetchList.make`}\n * - `restApi:v3`: {@link CallListV3.make `b24.actions.v3.callList.make`} or {@link FetchListV3.make `b24.actions.v3.fetchList.make`}\n *\n * @throws {SdkError} `JSSDK_CORE_METHOD_NOT_SUPPORT_IN_API_V3` when called against a `restApi:v3` HTTP client. This throw is preserved until `2.0.0`.\n * @removed 2.0.0\n */\n async getNext(http: TypeHttp): Promise<AjaxResult<T> | false> {\n // @todo ! Correction -> we can use pagination to navigate to the next page\n if (http.apiVersion === ApiVersion.v3) {\n throw new SdkError({\n code: 'JSSDK_CORE_METHOD_NOT_SUPPORT_IN_API_V3',\n description: `restApi:v3 not support method getNext`,\n status: 500\n })\n }\n if (\n !this.isSuccess\n || !this.isMore()\n ) {\n return false\n }\n\n const nextPageQuery = this.#buildNextPageQuery()\n return http.call(\n nextPageQuery.method,\n nextPageQuery.params\n ) as Promise<AjaxResult<T>>\n }\n\n #buildNextPageQuery(): AjaxQuery {\n const payload = this._data as { next?: number }\n const nextValue = 'next' in payload ? payload.next : undefined\n\n // Fresh params object — the previous shallow `{ ...this._query }` shared the\n // params reference and wrote `start` back into the frozen _query, so the\n // previous result's getQuery().params silently changed after getNext() (#144).\n return {\n ...this._query,\n params: { ...this._query.params, start: Text.toInteger(nextValue) }\n }\n }\n\n // Immutable API\n override setData(): never {\n throw new ReferenceError('AjaxResult does not allow data modification')\n }\n}\n"],"names":["Result","AjaxError","Type","Text","ApiVersion","SdkError"],"mappings":"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"}
@@ -0,0 +1,137 @@
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 loggerFactory = require('../../../logger/logger-factory.cjs');
12
+
13
+ var __defProp = Object.defineProperty;
14
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
+ class AdaptiveDelayer {
16
+ static {
17
+ __name(this, "AdaptiveDelayer");
18
+ }
19
+ #config;
20
+ #operatingLimiter;
21
+ #stats = {
22
+ adaptiveDelays: 0,
23
+ totalAdaptiveDelay: 0
24
+ };
25
+ _logger;
26
+ getTitle() {
27
+ return "adaptiveDelayer";
28
+ }
29
+ constructor(config, operatingLimiter) {
30
+ this._logger = loggerFactory.LoggerFactory.createNullLogger();
31
+ this.#config = config;
32
+ this.#operatingLimiter = operatingLimiter;
33
+ }
34
+ // region Logger ////
35
+ setLogger(logger) {
36
+ this._logger = logger;
37
+ }
38
+ getLogger() {
39
+ return this._logger;
40
+ }
41
+ // endregion ////
42
+ async canProceed(_requestId, _method, _params) {
43
+ return true;
44
+ }
45
+ /**
46
+ * Returns an adaptive delay based on previous experience
47
+ */
48
+ async waitIfNeeded(requestId, method, params) {
49
+ if (!this.#config.enabled) {
50
+ return 0;
51
+ }
52
+ const delay = this.#calculateDelay(requestId, method, params);
53
+ if (delay > 0) {
54
+ this.incrementAdaptiveDelays();
55
+ this.#stats.totalAdaptiveDelay += delay;
56
+ }
57
+ return delay;
58
+ }
59
+ /**
60
+ * Calculates adaptive delay based on previous experience
61
+ */
62
+ #calculateDelay(requestId, method, params) {
63
+ if (method === "batch") {
64
+ return this.#calculateBatchDelay(requestId, params);
65
+ }
66
+ const stats = this.#operatingLimiter.getMethodStat(method);
67
+ if (typeof stats === "undefined") {
68
+ return 0;
69
+ }
70
+ const usagePercent = stats.operating / this.#operatingLimiter.limitMs * 100;
71
+ if (usagePercent > this.#config.thresholdPercent) {
72
+ let adaptiveDelay = 0;
73
+ const now = Date.now();
74
+ if (stats.operating_reset_at > now) {
75
+ adaptiveDelay += (stats.operating_reset_at - now) * this.#config.coefficient;
76
+ } else {
77
+ adaptiveDelay += 7e3;
78
+ }
79
+ const waitDelay = Number.parseInt(Math.min(adaptiveDelay, this.#config.maxDelay).toFixed(0));
80
+ this.#logStat(requestId, method, usagePercent, adaptiveDelay, waitDelay);
81
+ return waitDelay;
82
+ }
83
+ return 0;
84
+ }
85
+ /**
86
+ * For `batch`, applies adaptive delay based on previous experience from commands
87
+ */
88
+ #calculateBatchDelay(requestId, params) {
89
+ let maxDelay = 0;
90
+ if (!params?.cmd || !Array.isArray(params.cmd)) {
91
+ return maxDelay;
92
+ }
93
+ const batchMethods = params.cmd.map((row) => row.split("?")[0]).filter(Boolean);
94
+ const batchMethodsUnique = [...new Set(batchMethods)];
95
+ for (const methodName of batchMethodsUnique) {
96
+ const delay = this.#calculateDelay(requestId, `batch::${methodName}`, {});
97
+ maxDelay = Math.max(maxDelay, delay);
98
+ }
99
+ return maxDelay;
100
+ }
101
+ async updateStats(_requestId, _method, _data) {
102
+ }
103
+ async reset() {
104
+ this.#stats = {
105
+ adaptiveDelays: 0,
106
+ totalAdaptiveDelay: 0
107
+ };
108
+ }
109
+ getStats() {
110
+ return {
111
+ ...this.#stats,
112
+ adaptiveDelayAvg: this.#stats.adaptiveDelays > 0 ? this.#stats.totalAdaptiveDelay / this.#stats.adaptiveDelays : 0
113
+ };
114
+ }
115
+ async setConfig(config) {
116
+ this.#config = config;
117
+ }
118
+ incrementAdaptiveDelays() {
119
+ this.#stats.adaptiveDelays++;
120
+ }
121
+ // region Log ////
122
+ #logStat(requestId, method, percent, adaptiveDelay, waitDelay) {
123
+ this.getLogger().debug(`${this.getTitle()} state for method ${method}`, {
124
+ requestId,
125
+ method,
126
+ percent: Number.parseFloat(percent.toFixed(2)),
127
+ delays: {
128
+ calculated: adaptiveDelay,
129
+ actual: waitDelay
130
+ }
131
+ });
132
+ }
133
+ // endregion ////
134
+ }
135
+
136
+ exports.AdaptiveDelayer = AdaptiveDelayer;
137
+ //# sourceMappingURL=adaptive-delayer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptive-delayer.cjs","sources":["../../../../../src/core/http/limiters/adaptive-delayer.ts"],"sourcesContent":["import type { AdaptiveConfig, ILimiter } from '../../../types/limiters'\nimport type { OperatingLimiter } from './operating-limiter'\nimport type { LoggerInterface } from '../../../types/logger'\nimport { LoggerFactory } from '../../../logger'\n\n/**\n * Adaptive delayer\n *\n * @todo docs\n */\nexport class AdaptiveDelayer implements ILimiter {\n #config: AdaptiveConfig\n #operatingLimiter: OperatingLimiter\n #stats = {\n adaptiveDelays: 0,\n totalAdaptiveDelay: 0\n }\n\n private _logger: LoggerInterface\n\n getTitle(): string {\n return 'adaptiveDelayer'\n }\n\n constructor(config: AdaptiveConfig, operatingLimiter: OperatingLimiter) {\n this._logger = LoggerFactory.createNullLogger()\n this.#config = config\n this.#operatingLimiter = operatingLimiter\n }\n\n // region Logger ////\n setLogger(logger: LoggerInterface): void {\n this._logger = logger\n }\n\n getLogger(): LoggerInterface {\n return this._logger\n }\n // endregion ////\n\n async canProceed(_requestId: string, _method: string, _params?: any): Promise<boolean> {\n return true // Adaptive delay doesn't block, only delays\n }\n\n /**\n * Returns an adaptive delay based on previous experience\n */\n async waitIfNeeded(requestId: string, method: string, params?: any): Promise<number> {\n if (!this.#config.enabled) {\n return 0\n }\n\n const delay = this.#calculateDelay(requestId, method, params)\n if (delay > 0) {\n this.incrementAdaptiveDelays()\n this.#stats.totalAdaptiveDelay += delay\n }\n\n return delay\n }\n\n /**\n * Calculates adaptive delay based on previous experience\n */\n #calculateDelay(requestId: string, method: string, params?: any): number {\n if (method === 'batch') {\n return this.#calculateBatchDelay(requestId, params)\n }\n\n const stats = this.#operatingLimiter.getMethodStat(method)\n\n if (typeof stats === 'undefined') {\n return 0\n }\n\n const usagePercent = (stats.operating / this.#operatingLimiter.limitMs) * 100\n\n if (usagePercent > this.#config.thresholdPercent) {\n let adaptiveDelay = 0\n\n // Calculate based on previous delay or default\n const now = Date.now()\n if (stats.operating_reset_at > now) {\n adaptiveDelay += (stats.operating_reset_at - now) * this.#config.coefficient\n } else {\n adaptiveDelay += 7_000 // 7 seconds by default\n }\n\n const waitDelay = Number.parseInt(Math.min(adaptiveDelay, this.#config.maxDelay).toFixed(0))\n\n this.#logStat(requestId, method, usagePercent, adaptiveDelay, waitDelay)\n return waitDelay\n }\n\n return 0\n }\n\n /**\n * For `batch`, applies adaptive delay based on previous experience from commands\n */\n #calculateBatchDelay(requestId: string, params: any): number {\n let maxDelay = 0\n\n if (!params?.cmd || !Array.isArray(params.cmd)) {\n return maxDelay\n }\n\n const batchMethods = params.cmd\n .map((row: string) => row.split('?')[0])\n .filter(Boolean)\n\n const batchMethodsUnique = [...new Set(batchMethods)]\n\n for (const methodName of batchMethodsUnique) {\n const delay = this.#calculateDelay(requestId, `batch::${methodName}`, {})\n maxDelay = Math.max(maxDelay, delay)\n }\n\n return maxDelay\n }\n\n async updateStats(_requestId: string, _method: string, _data: any): Promise<void> {\n // Adaptive delayer updates based on operating limiter\n }\n\n async reset(): Promise<void> {\n this.#stats = {\n adaptiveDelays: 0,\n totalAdaptiveDelay: 0\n }\n }\n\n getStats(): {\n adaptiveDelays: number\n totalAdaptiveDelay: number\n adaptiveDelayAvg: number\n } {\n return {\n ...this.#stats,\n adaptiveDelayAvg: this.#stats.adaptiveDelays > 0\n ? this.#stats.totalAdaptiveDelay / this.#stats.adaptiveDelays\n : 0\n }\n }\n\n async setConfig(config: AdaptiveConfig): Promise<void> {\n this.#config = config\n }\n\n incrementAdaptiveDelays(): void {\n this.#stats.adaptiveDelays++\n }\n\n // region Log ////\n #logStat(requestId: string, method: string, percent: number, adaptiveDelay: number, waitDelay: number) {\n this.getLogger().debug(`${this.getTitle()} state for method ${method}`, {\n requestId,\n method,\n percent: Number.parseFloat(percent.toFixed(2)),\n delays: {\n calculated: adaptiveDelay,\n actual: waitDelay\n }\n })\n }\n // endregion ////\n}\n"],"names":["LoggerFactory"],"mappings":"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"}