@bitrix24/b24jssdk 1.2.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 (447) hide show
  1. package/README-AI.md +6 -5
  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 +17 -10
  280. package/dist/esm/core/actions/v2/call-list.mjs.map +1 -1
  281. package/dist/esm/core/actions/v2/call.mjs +1 -15
  282. package/dist/esm/core/actions/v2/call.mjs.map +1 -1
  283. package/dist/esm/core/actions/v2/fetch-list.mjs +17 -10
  284. package/dist/esm/core/actions/v2/fetch-list.mjs.map +1 -1
  285. package/dist/esm/core/actions/v2/manager-v2.mjs +6 -6
  286. package/dist/esm/core/actions/v2/manager-v2.mjs.map +1 -1
  287. package/dist/esm/core/actions/v3/_keyset-paginate.mjs +66 -0
  288. package/dist/esm/core/actions/v3/_keyset-paginate.mjs.map +1 -0
  289. package/dist/esm/core/actions/v3/aggregate.mjs +94 -0
  290. package/dist/esm/core/actions/v3/aggregate.mjs.map +1 -0
  291. package/dist/esm/core/actions/v3/batch-by-chunk.mjs +1 -1
  292. package/dist/esm/core/actions/v3/batch.mjs +1 -10
  293. package/dist/esm/core/actions/v3/batch.mjs.map +1 -1
  294. package/dist/esm/core/actions/v3/call-list.mjs +40 -47
  295. package/dist/esm/core/actions/v3/call-list.mjs.map +1 -1
  296. package/dist/esm/core/actions/v3/call-tail.mjs +116 -0
  297. package/dist/esm/core/actions/v3/call-tail.mjs.map +1 -0
  298. package/dist/esm/core/actions/v3/call.mjs +1 -10
  299. package/dist/esm/core/actions/v3/call.mjs.map +1 -1
  300. package/dist/esm/core/actions/v3/fetch-list.mjs +34 -44
  301. package/dist/esm/core/actions/v3/fetch-list.mjs.map +1 -1
  302. package/dist/esm/core/actions/v3/fetch-tail.mjs +110 -0
  303. package/dist/esm/core/actions/v3/fetch-tail.mjs.map +1 -0
  304. package/dist/esm/core/actions/v3/manager-v3.mjs +30 -6
  305. package/dist/esm/core/actions/v3/manager-v3.mjs.map +1 -1
  306. package/dist/esm/core/http/abstract-http.mjs +96 -21
  307. package/dist/esm/core/http/abstract-http.mjs.map +1 -1
  308. package/dist/esm/core/http/ajax-error.mjs +1 -1
  309. package/dist/esm/core/http/ajax-result.mjs +9 -8
  310. package/dist/esm/core/http/ajax-result.mjs.map +1 -1
  311. package/dist/esm/core/http/limiters/adaptive-delayer.mjs +1 -1
  312. package/dist/esm/core/http/limiters/manager.mjs +2 -1
  313. package/dist/esm/core/http/limiters/manager.mjs.map +1 -1
  314. package/dist/esm/core/http/limiters/operating-limiter.mjs +1 -1
  315. package/dist/esm/core/http/limiters/params-factory.mjs +1 -1
  316. package/dist/esm/core/http/limiters/rate-limiter.mjs +1 -1
  317. package/dist/esm/core/http/redact.mjs +41 -13
  318. package/dist/esm/core/http/redact.mjs.map +1 -1
  319. package/dist/esm/core/http/v2.mjs +1 -18
  320. package/dist/esm/core/http/v2.mjs.map +1 -1
  321. package/dist/esm/core/http/v3.mjs +1 -15
  322. package/dist/esm/core/http/v3.mjs.map +1 -1
  323. package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs +1 -1
  324. package/dist/esm/core/interaction/batch/parse-row.mjs +1 -1
  325. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs +44 -1
  326. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs.map +1 -1
  327. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs +7 -6
  328. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs.map +1 -1
  329. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs +3 -3
  330. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs.map +1 -1
  331. package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs +1 -1
  332. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs +7 -19
  333. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs.map +1 -1
  334. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs +3 -3
  335. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs.map +1 -1
  336. package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs +1 -1
  337. package/dist/esm/core/interaction/batch/v2.mjs +1 -1
  338. package/dist/esm/core/interaction/batch/v3.mjs +1 -1
  339. package/dist/esm/core/language/list.mjs +1 -1
  340. package/dist/esm/core/request-id-generator.mjs +1 -1
  341. package/dist/esm/core/result.mjs +35 -1
  342. package/dist/esm/core/result.mjs.map +1 -1
  343. package/dist/esm/core/sdk-error.mjs +1 -1
  344. package/dist/esm/core/tools/abstract-tool.mjs +1 -1
  345. package/dist/esm/core/tools/healthcheck.mjs +1 -1
  346. package/dist/esm/core/tools/manager.mjs +3 -3
  347. package/dist/esm/core/tools/manager.mjs.map +1 -1
  348. package/dist/esm/core/tools/ping.mjs +1 -1
  349. package/dist/esm/core/version-manager.mjs +19 -80
  350. package/dist/esm/core/version-manager.mjs.map +1 -1
  351. package/dist/esm/frame/auth.mjs +1 -1
  352. package/dist/esm/frame/b24.mjs +8 -2
  353. package/dist/esm/frame/b24.mjs.map +1 -1
  354. package/dist/esm/frame/dialog.mjs +1 -1
  355. package/dist/esm/frame/frame.mjs +1 -1
  356. package/dist/esm/frame/message/commands.mjs +1 -1
  357. package/dist/esm/frame/message/controller.mjs +17 -6
  358. package/dist/esm/frame/message/controller.mjs.map +1 -1
  359. package/dist/esm/frame/options.mjs +1 -1
  360. package/dist/esm/frame/parent.mjs +6 -2
  361. package/dist/esm/frame/parent.mjs.map +1 -1
  362. package/dist/esm/frame/placement.mjs +1 -1
  363. package/dist/esm/frame/slider.mjs +5 -1
  364. package/dist/esm/frame/slider.mjs.map +1 -1
  365. package/dist/esm/helper/abstract-helper.mjs +1 -1
  366. package/dist/esm/helper/app-manager.mjs +1 -1
  367. package/dist/esm/helper/currency-manager.mjs +1 -1
  368. package/dist/esm/helper/helper-manager.mjs +1 -1
  369. package/dist/esm/helper/license-manager.mjs +1 -1
  370. package/dist/esm/helper/options-manager.mjs +1 -1
  371. package/dist/esm/helper/payment-manager.mjs +1 -1
  372. package/dist/esm/helper/profile-manager.mjs +1 -1
  373. package/dist/esm/helper/use-b24-helper.mjs +1 -1
  374. package/dist/esm/hook/auth.mjs +1 -1
  375. package/dist/esm/hook/b24.mjs +3 -3
  376. package/dist/esm/hook/b24.mjs.map +1 -1
  377. package/dist/esm/index.d.mts +501 -49
  378. package/dist/esm/index.d.ts +501 -49
  379. package/dist/esm/index.mjs +3 -1
  380. package/dist/esm/index.mjs.map +1 -1
  381. package/dist/esm/loader-b24frame.mjs +1 -1
  382. package/dist/esm/logger/abstract-logger.mjs +1 -1
  383. package/dist/esm/logger/browser.mjs +1 -1
  384. package/dist/esm/logger/formatter/abstract-formatter.mjs +1 -1
  385. package/dist/esm/logger/formatter/json-formatter.mjs +1 -1
  386. package/dist/esm/logger/formatter/line-formatter.mjs +1 -1
  387. package/dist/esm/logger/formatter/telegram-formatter.mjs +1 -1
  388. package/dist/esm/logger/handler/abstract-handler.mjs +1 -1
  389. package/dist/esm/logger/handler/consola-adapter.mjs +1 -1
  390. package/dist/esm/logger/handler/console-handler.mjs +1 -1
  391. package/dist/esm/logger/handler/console-v2-handler.mjs +1 -1
  392. package/dist/esm/logger/handler/memory-handler.mjs +1 -1
  393. package/dist/esm/logger/handler/stream-handler.mjs +1 -1
  394. package/dist/esm/logger/handler/telegram-handler.mjs +1 -1
  395. package/dist/esm/logger/handler/winston-adapter.mjs +1 -1
  396. package/dist/esm/logger/logger-factory.mjs +1 -1
  397. package/dist/esm/logger/logger.mjs +1 -1
  398. package/dist/esm/logger/null-logger.mjs +1 -1
  399. package/dist/esm/logger/processor/memory-usage-processor.mjs +1 -1
  400. package/dist/esm/logger/processor/pid-processor.mjs +1 -1
  401. package/dist/esm/oauth/auth.mjs +13 -16
  402. package/dist/esm/oauth/auth.mjs.map +1 -1
  403. package/dist/esm/oauth/b24.mjs +1 -1
  404. package/dist/esm/oauth/refresh-token-error.mjs +1 -1
  405. package/dist/esm/pullClient/abstract-connector.mjs +1 -1
  406. package/dist/esm/pullClient/channel-manager.mjs +1 -1
  407. package/dist/esm/pullClient/client.mjs +141 -30
  408. package/dist/esm/pullClient/client.mjs.map +1 -1
  409. package/dist/esm/pullClient/errors.mjs +1 -1
  410. package/dist/esm/pullClient/json-rpc.mjs +5 -4
  411. package/dist/esm/pullClient/json-rpc.mjs.map +1 -1
  412. package/dist/esm/pullClient/long-polling-connector.mjs +1 -1
  413. package/dist/esm/pullClient/protobuf/index.mjs +1 -1
  414. package/dist/esm/pullClient/protobuf/model.mjs +1 -1
  415. package/dist/esm/pullClient/protobuf/protobuf.mjs +1 -1
  416. package/dist/esm/pullClient/shared-config.mjs +1 -1
  417. package/dist/esm/pullClient/storage-manager.mjs +1 -1
  418. package/dist/esm/pullClient/web-socket-connector.mjs +1 -1
  419. package/dist/esm/tools/batch-ref-v3.mjs +52 -0
  420. package/dist/esm/tools/batch-ref-v3.mjs.map +1 -0
  421. package/dist/esm/tools/browser.mjs +1 -1
  422. package/dist/esm/tools/environment.mjs +1 -1
  423. package/dist/esm/tools/filter-v3.mjs +137 -0
  424. package/dist/esm/tools/filter-v3.mjs.map +1 -0
  425. package/dist/esm/tools/formatters/iban.mjs +1 -1
  426. package/dist/esm/tools/formatters/numbers.mjs +1 -1
  427. package/dist/esm/tools/index.mjs +1 -1
  428. package/dist/esm/tools/scroll-size.mjs +1 -1
  429. package/dist/esm/tools/text.mjs +1 -1
  430. package/dist/esm/tools/type.mjs +1 -1
  431. package/dist/esm/tools/use-formatters.mjs +1 -1
  432. package/dist/esm/tools/uuidv7.mjs +1 -1
  433. package/dist/esm/types/b24-helper.mjs +1 -1
  434. package/dist/esm/types/b24.mjs +1 -1
  435. package/dist/esm/types/bizproc/index.mjs +1 -1
  436. package/dist/esm/types/catalog/index.mjs +1 -1
  437. package/dist/esm/types/common.mjs +1 -1
  438. package/dist/esm/types/crm/entity-type.mjs +1 -1
  439. package/dist/esm/types/crm/productrow.mjs +1 -1
  440. package/dist/esm/types/logger.mjs +1 -1
  441. package/dist/esm/types/pull.mjs +1 -1
  442. package/dist/umd/index.js +1384 -680
  443. package/dist/umd/index.js.map +1 -1
  444. package/dist/umd/index.min.js +26 -26
  445. package/dist/umd/index.min.js.map +1 -1
  446. package/dist/umd/package.json +3 -0
  447. package/package.json +12 -4
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-http.mjs","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\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 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 headers: {\n ...defaultHeaders,\n ...(options ? (options as any).headers : {})\n },\n timeout: 30_000,\n timeoutErrorMessage: 'Request timeout exceeded',\n ...(options && { ...options, headers: undefined })\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.totalDuration,\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.totalDuration = 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 < 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 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._authActions.refreshAuth()\n }\n return authData\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 responseData: JSON.stringify(redactSensitiveParams(error?.response?.data), null, 0)\n }\n )\n }\n\n // If this is an authorization error (401), then we try to update the token and repeat\n if (this._isAuthError(error)) {\n this._logAuthErrorDetected(requestId)\n this._logRefreshingAuthToken(requestId)\n\n const refreshedAuthData = await this._authActions.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 throw error\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 const maxLogLength = 300\n const sliceLogLength = 100\n this.getLogger().info(\n `post/send`, {\n requestId,\n method,\n params: paramsFormattedForLog.length > maxLogLength ? paramsFormattedForLog.slice(0, sliceLogLength) + '...' : 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: resultFormattedForLog.length > maxLogLength ? resultFormattedForLog.slice(0, sliceLogLength) + '...' : 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 // @todo ! test this\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 * Makes the function name safe and adds JSON format\n */\n protected abstract _prepareMethod(requestId: string, method: string, baseUrl: string): string\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":[],"mappings":"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"}
1
+ {"version":3,"file":"abstract-http.mjs","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":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAM,cAAA,GAAiB,GAAA;AACvB,MAAM,gBAAA,GAAmB,GAAA;AAClB,SAAS,eAAe,KAAA,EAAuB;AACpD,EAAA,OAAO,KAAA,CAAM,SAAS,cAAA,GAClB,KAAA,CAAM,MAAM,CAAA,EAAG,gBAAgB,IAAI,KAAA,GACnC,KAAA;AACN;AAJgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAuBT,MAAe,YAAA,CAAiC;AAAA,EAvDvD;AAuDuD,IAAA,MAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA,EAC3C,YAAA;AAAA,EACA,YAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAA,GAA4C,IAAA;AAAA,EAE5C,OAAA;AAAA,EAEA,oBAAA,GAAgC,KAAA;AAAA,EAChC,yBAAA,GAAoC,EAAA;AAAA,EAEpC,QAAA;AAAA,EAEA,QAAA,GAAW;AAAA,IACnB,aAAA,EAAe,CAAA;AAAA,IACf,kBAAA,EAAoB,CAAA;AAAA,IACpB,cAAA,EAAgB,CAAA;AAAA,IAChB,aAAA,EAAe,CAAA;AAAA,IACf,QAAA,sBAAc,GAAA,EAAsD;AAAA,IACpE,YAAY;AAAC,GACf;AAAA,EAEA,WAAA,CACE,WAAA,EACA,OAAA,EACA,iBAAA,EACA;AACA,IAAA,IAAA,CAAK,WAAW,UAAA,CAAW,EAAA;AAE3B,IAAA,IAAA,CAAK,OAAA,GAAU,cAAc,gBAAA,EAAiB;AAE9C,IAAA,MAAM,iBAAyC,EAAC;AAEhD,IAAA,IAAI,IAAA,CAAK,cAAa,EAAG;AACvB,MAAA,cAAA,CAAe,YAAY,CAAA,GAAI,kBAAA;AAAA,IACjC;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AACpB,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAI,kBAAA,EAAmB;AAElD,IAAA,IAAA,CAAK,YAAA,GAAe,MAAM,MAAA,CAAO;AAAA,MAC/B,OAAA,EAAS,GAAA;AAAA,MACT,mBAAA,EAAqB,0BAAA;AAAA,MACrB,GAAI,WAAW,EAAC;AAAA;AAAA;AAAA,MAGhB,OAAA,EAAS;AAAA,QACP,GAAG,cAAA;AAAA,QACH,GAAK,OAAA,EAAiB,OAAA,IAAW;AAAC;AACpC,KACD,CAAA;AAKD,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,GAAG,cAAc,UAAA,EAAW;AAAA,MAC5B,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAI,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC1D;AAAA,EAEA,IAAI,UAAA,GAAyB;AAC3B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,IAAI,UAAA,GAA4B;AAC9B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA,EAGO,UAAU,MAAA,EAA+B;AAC9C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,mBAAA,CAAoB,SAAA,CAAU,IAAA,CAAK,OAAO,CAAA;AAAA,EACjD;AAAA,EAEO,SAAA,GAA6B;AAClC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA,EAIA,MAAa,4BAA4B,MAAA,EAA0C;AACjF,IAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,SAAA,CAAU,MAAM,CAAA;AAAA,EACjD;AAAA,EAEO,2BAAA,GAAiD;AACtD,IAAA,OAAO,IAAA,CAAK,oBAAoB,SAAA,EAAU;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GASL;AACA,IAAA,OAAO;AAAA,MACL,GAAG,IAAA,CAAK,mBAAA,CAAoB,QAAA,EAAS;AAAA,MACrC,aAAA,EAAe,KAAK,QAAA,CAAS,aAAA;AAAA,MAC7B,kBAAA,EAAoB,KAAK,QAAA,CAAS,kBAAA;AAAA,MAClC,cAAA,EAAgB,KAAK,QAAA,CAAS,cAAA;AAAA,MAC9B,aAAA,EAAe,KAAK,QAAA,CAAS,aAAA;AAAA,MAC7B,QAAA,EAAU,KAAK,QAAA,CAAS,QAAA;AAAA,MACxB,UAAA,EAAY,KAAK,QAAA,CAAS;AAAA,KAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,KAAA,GAAuB;AAClC,IAAA,IAAA,CAAK,SAAS,aAAA,GAAgB,CAAA;AAC9B,IAAA,IAAA,CAAK,SAAS,kBAAA,GAAqB,CAAA;AACnC,IAAA,IAAA,CAAK,SAAS,cAAA,GAAiB,CAAA;AAC/B,IAAA,IAAA,CAAK,SAAS,aAAA,GAAgB,CAAA;AAC9B,IAAA,IAAA,CAAK,QAAA,CAAS,SAAS,KAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,QAAA,CAAS,aAAa,EAAC;AAE5B,IAAA,OAAO,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAAA,EACxC;AAAA;AAAA;AAAA,EAIU,cAAA,CACR,MAAA,EACA,SAAA,EACA,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAA,CAAK,QAAA,CAAS,aAAA,EAAA;AAEd,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,QAAA,CAAS,kBAAA,EAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,QAAA,CAAS,cAAA,EAAA;AAEd,MAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,QAAA,IAAA,CAAK,QAAA,CAAS,WAAW,IAAA,CAAK;AAAA,UAC5B,MAAA;AAAA,UACA,OAAO,KAAA,CAAM,OAAA;AAAA,UACb,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB,CAAA;AAED,QAAA,IAAI,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,MAAA,GAAS,GAAA,EAAK;AACzC,UAAA,IAAA,CAAK,SAAS,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG;AACvC,MAAA,IAAA,CAAK,QAAA,CAAS,SAAS,GAAA,CAAI,MAAA,EAAQ,EAAE,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,CAAA,EAAG,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAI,MAAM,CAAA;AACvD,IAAA,aAAA,CAAc,KAAA,EAAA;AACd,IAAA,aAAA,CAAc,aAAA,IAAiB,QAAA;AAAA,EACjC;AAAA;AAAA,EAWU,eAAA,CAAgB,SAAA,EAAmB,MAAA,EAAgB,MAAA,EAA8B;AAEzF,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,IACvB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,sBAAA;AAAA,QACN,WAAA,EAAa,wCAAA;AAAA,QACb,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,QACzC,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EAaF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,IAAA,CAAkB,MAAA,EAAgB,MAAA,EAAwB,SAAA,EAA4C;AACjH,IAAA,SAAA,GAAY,SAAA,IAAa,IAAA,CAAK,mBAAA,CAAoB,YAAA,EAAa;AAC/D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAU,CAAE,UAAA;AAExD,IAAA,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAC9C,IAAA,IAAA,CAAK,WAAA,CAAY,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAE1C,IAAA,IAAI,SAAA,GAA8B,IAAA;AAClC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,UAAA,EAAY,OAAA,EAAA,EAAW;AACrD,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,WAAA,CAAY,SAAA,EAAW,MAAA,EAAQ,OAAA,GAAU,GAAG,UAAU,CAAA;AAG3D,QAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,oBAAA,CAAqB,SAAA,EAAW,QAAQ,MAAM,CAAA;AAG7E,QAAA,MAAM,SAAS,MAAM,IAAA,CAAK,kBAAA,CAAsB,SAAA,EAAW,QAAQ,MAAM,CAAA;AACzE,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAG9B,QAAA,IAAA,CAAK,mBAAA,CAAoB,YAAY,MAAM,CAAA;AAC3C,QAAA,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAG1C,QAAA,IAAA,CAAK,qBAAA,CAAsB,SAAA,EAAW,MAAA,EAAQ,QAAQ,CAAA;AACtD,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,KAAA,EAAgB;AACvB,QAAA,SAAA,GAAY,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,KAAA,EAAO,QAAQ,MAAM,CAAA;AAErE,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,QAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,MAAM,CAAA;AAC9C,QAAA,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,CAAA;AAGtD,QAAA,IAAA,CAAK,kBAAkB,SAAA,EAAW,MAAA,EAAQ,OAAA,GAAU,CAAA,EAAG,YAAY,SAAS,CAAA;AAE5E,QAAA,IAAI,OAAA,GAAU,IAAI,UAAA,EAAY;AAC5B,UAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,mBAAA,CAAoB,YAAY,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAEzG,UAAA,IAAI,WAAW,CAAA,EAAG;AAChB,YAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,WAAW,CAAA;AAEnD,YAAA,IAAA,CAAK,2BAA2B,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,OAAA,GAAU,GAAG,UAAU,CAAA;AACpF,YAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,UAAA,CAAW,QAAQ,CAAA;AAElD,YAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,SAAS,CAAA;AAEjD,YAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,OAAA,GAAU,MAAM,UAAA,EAAY;AAC9B,UAAA,IAAA,CAAK,wBAAA,CAAyB,SAAA,EAAW,MAAA,EAAQ,OAAA,GAAU,GAAG,UAAU,CAAA;AAAA,QAC1E;AAKA,QAAA,IAAI,KAAK,mBAAA,CAAoB,oBAAA,CAAqB,QAAA,CAAS,SAAA,CAAU,IAAI,CAAA,EAAG;AAC1E,UAAA,OAAO,IAAA,CAAK,sCAAA,CAA0C,SAAA,EAAW,SAAA,EAAW,QAAQ,MAAM,CAAA;AAAA,QAC5F;AACA,QAAA,MAAM,SAAA;AAAA,MACR;AAAA,IACF;AAKA,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,mCAAA;AAAA,MACN,WAAA,EAAa,wBAAA;AAAA,MACb,MAAA,EAAQ,WAAW,MAAA,IAAU,GAAA;AAAA,MAC7B,WAAA,EAAa,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,MACzC,aAAA,EAAe,WAAW,aAAA,IAAiB;AAAA,KAC5C,CAAA;AAAA,EACH;AAAA,EAEU,mBAAA,CAAoB,SAAA,EAAmB,KAAA,EAAgB,MAAA,EAAgB,MAAA,EAAmC;AAClH,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,MAAA,OAAO,IAAA,CAAK,6BAAA,CAA8B,SAAA,EAAW,KAAA,EAAO,QAAQ,MAAM,CAAA;AAAA,IAC5E;AAEA,IAAA,OAAO,IAAA,CAAK,+BAAA,CAAgC,SAAA,EAAW,KAAA,EAAO,QAAQ,MAAM,CAAA;AAAA,EAC9E;AAAA,EAEU,6BAAA,CAA8B,SAAA,EAAmB,UAAA,EAAwB,MAAA,EAAgB,MAAA,EAAmC;AACpI,IAAA,IAAI,SAAA,GAAY,CAAA,EAAG,UAAA,CAAW,IAAA,IAAQ,mBAAmB,CAAA,CAAA;AACzD,IAAA,IAAI,mBAAmB,UAAA,CAAW,OAAA;AAClC,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,QAAA,EAAU,MAAA,IAAU,CAAA;AAG9C,IAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,MAAA,OAAO,IAAI,SAAA,CAAU;AAAA,QACnB,IAAA,EAAM,eAAA;AAAA,QACN,WAAA,EAAa,2BAAA;AAAA,QACb,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,QACzC,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,cAAc,cAAA,IAAkB,UAAA,CAAW,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC1E,MAAA,OAAO,IAAI,SAAA,CAAU;AAAA,QACnB,IAAA,EAAM,iBAAA;AAAA,QACN,WAAA,EAAa,0BAAA;AAAA,QACb,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,QACzC,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAMA,IAAA,IAAI,WAAW,QAAA,EAAU,IAAA,IAAQ,OAAO,UAAA,CAAW,QAAA,CAAS,SAAS,QAAA,EAAU;AAC7E,MAAA,MAAM,YAAA,GAAe,WAAW,QAAA,CAAS,IAAA;AACzC,MAAA,IACE,YAAA,CAAa,SACV,OAAO,YAAA,CAAa,UAAU,QAAA,IAC9B,MAAA,IAAU,aAAa,KAAA,EAC1B;AACA,QAAA,SAAA,GAAY,aAAa,KAAA,CAAM,IAAA;AAC/B,QAAA,gBAAA,GAAmB,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAQ;AACtD,QAAA,IAAI,YAAA,CAAa,MAAM,UAAA,EAAY;AACjC,UAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,YAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,GAAG,CAAA,EAAG;AACnC,cAAA,gBAAA,IAAoB,CAAA,CAAA,CAAA;AAAA,YACtB;AACA,YAAA,gBAAA,IAAoB,CAAA,CAAA,CAAA;AAAA,UACtB;AACA,UAAA,YAAA,CAAa,KAAA,CAAM,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC7C,YAAA,gBAAA,IAAoB,GAAG,GAAA,EAAK,OAAA,IAAW,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA;AAAA,UAC5D,CAAC,CAAA;AAAA,QACH;AAAA,MACF,WAAW,YAAA,CAAa,KAAA,IAAS,OAAO,YAAA,CAAa,UAAU,QAAA,EAAU;AACvE,QAAA,SAAA,GAAY,YAAA,CAAa,KAAA,KAAU,GAAA,GAAM,YAAA,CAAa,KAAA,GAAQ,SAAA;AAC9D,QAAA,gBAAA,GAAoB,cAAuC,iBAAA,IAAqB,gBAAA;AAAA,MAClF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,SAAA,CAAU;AAAA,MACnB,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,gBAAA;AAAA,MACb,MAAA;AAAA,MACA,WAAA,EAAa,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,MACzC,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA,EAEU,+BAAA,CAAgC,SAAA,EAAmB,KAAA,EAAgB,MAAA,EAAgB,MAAA,EAAmC;AAC9H,IAAA,OAAO,IAAI,SAAA,CAAU;AAAA,MACnB,IAAA,EAAM,qBAAA;AAAA,MACN,aAAa,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,MAClE,MAAA,EAAQ,CAAA;AAAA,MACR,WAAA,EAAa,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,MACzC,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAgB,kBAAA,CAAgC,SAAA,EAAmB,MAAA,EAAgB,MAAA,EAAgD;AACjI,IAAA,IAAA,CAAK,wBAAwB,SAAS,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AACjD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,0BAA6B,SAAA,EAAW,MAAA,EAAQ,QAAQ,QAAQ,CAAA;AAE5F,IAAA,OAAO,IAAA,CAAK,6BAAA,CAAiC,QAAA,EAAU,SAAA,EAAW,QAAQ,MAAM,CAAA;AAAA,EAClF;AAAA;AAAA,EAGA,MAAgB,YAAY,SAAA,EAAsC;AAChE,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY;AAC7C,IAAA,IAAI,aAAa,KAAA,EAAO;AACtB,MAAA,IAAA,CAAK,wBAAwB,SAAS,CAAA;AACtC,MAAA,QAAA,GAAW,MAAM,KAAK,YAAA,EAAa;AAAA,IACrC;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,YAAA,GAAkC;AAC1C,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,OAAO,IAAA,CAAK,eAAA;AAAA,IACd;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY;AAC9C,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA;AAIvB,IAAA,OAAA,CAAQ,QAAQ,MAAM;AACpB,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AACjB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAgB,yBAAA,CAA6B,SAAA,EAAmB,MAAA,EAAgB,QAAwB,QAAA,EAA8C;AACpJ,IAAA,IAAI;AAEF,MAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,cAAA,CAAe,SAAA,EAAW,MAAM,CAAA;AAE/D,MAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAqB,SAAA,EAAW,MAAA,EAAQ,QAAQ,QAAQ,CAAA;AAAA,IAC5E,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,QAAA,IAAA,CAAK,WAAU,CAAE,IAAA;AAAA,UACf,CAAA,eAAA,CAAA;AAAA,UAAmB;AAAA,YACjB,SAAA;AAAA,YACA,QAAQ,KAAA,CAAM,MAAA;AAAA;AAAA;AAAA;AAAA,YAId,YAAA,EAAc,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,qBAAA,CAAsB,KAAA,EAAO,QAAA,EAAU,IAAI,CAAA,EAAG,IAAA,EAAM,CAAC,CAAC;AAAA;AACpG,SACF;AAAA,MACF;AAOA,MAAA,MAAM,YAAY,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,KAAA,EAAO,QAAQ,MAAM,CAAA;AAG3E,MAAA,IAAI,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA,EAAG;AAChC,QAAA,IAAA,CAAK,sBAAsB,SAAS,CAAA;AACpC,QAAA,IAAA,CAAK,wBAAwB,SAAS,CAAA;AAEtC,QAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,YAAA,EAAa;AAGlD,QAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,cAAA,CAAe,SAAA,EAAW,MAAM,CAAA;AAE/D,QAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAqB,SAAA,EAAW,MAAA,EAAQ,QAAQ,iBAAiB,CAAA;AAAA,MACrF;AAIA,MAAA,MAAM,SAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAgB,iBAAA,CAAqB,SAAA,EAAmB,MAAA,EAAgB,QAAwB,QAAA,EAA8C;AAC5I,IAAA,MAAM,kBAAkB,IAAA,CAAK,cAAA,CAAe,WAAW,MAAA,EAAQ,IAAA,CAAK,YAAY,CAAA;AAEhF,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,cAAA,CAAe,QAAA,EAAU,MAAM,CAAA;AAI5D,IAAA,MAAM,wBAAwB,IAAA,CAAK,SAAA,CAAU,sBAAsB,eAAe,CAAA,EAAG,MAAM,CAAC,CAAA;AAE5F,IAAA,IAAA,CAAK,WAAU,CAAE,IAAA;AAAA,MACf,CAAA,SAAA,CAAA;AAAA,MAAa;AAAA,QACX,SAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA,EAAQ,eAAe,qBAAqB;AAAA;AAC9C,KACF;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,YAAA,CAAa,IAAA,CAAwB,iBAAiB,eAAe,CAAA;AAEjG,IAAA,MAAM,wBAAwB,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAC,CAAA;AAC1E,IAAA,IAAA,CAAK,WAAU,CAAE,IAAA;AAAA,MACf,CAAA,aAAA,CAAA;AAAA,MAAiB;AAAA,QACf,SAAA;AAAA;AAAA,QAEA,MAAA,EAAQ,eAAe,qBAAqB,CAAA;AAAA,QAC5C,MAAM,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC;AAAA;AAClD,KACF;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,SAAS,QAAA,CAAS;AAAA,KACpB;AAAA,EACF;AAAA,EAEU,aAAa,KAAA,EAAyB;AAC9C,IAAA,IAAI,EAAE,iBAAiB,SAAA,CAAA,EAAY;AACjC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OACE,KAAA,CAAM,WAAW,GAAA,IACd,CAAC,iBAAiB,eAAe,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAAA,EAE7D;AAAA,EAEA,MAAgB,6BAAA,CAAiC,QAAA,EAA2B,SAAA,EAAmB,QAAgB,MAAA,EAAgD;AAC7J,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAc;AAAA,MAC/B,QAAQ,QAAA,CAAS,OAAA;AAAA,MACjB,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,MACnC,QAAQ,QAAA,CAAS;AAAA,KAClB,CAAA;AAGD,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,EAAQ,EAAG,IAAA;AAC/B,MAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,WAAA,CAAY,SAAA,EAAW,QAAQ,IAAK,CAAA;AAAA,IACrE;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,sCAAA,CAA0C,SAAA,EAAsB,SAAA,EAAmB,MAAA,EAAgB,MAAA,EAAuC;AAClJ,IAAA,OAAO,IAAI,UAAA,CAAc;AAAA,MACvB,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO;AAAA,UACL,MAAM,SAAA,CAAU,IAAA;AAAA,UAChB,SAAS,SAAA,CAAU;AAAA;AACrB,OACF;AAAA,MACA,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,MACnC,QAAQ,SAAA,CAAU;AAAA,KACnB,CAAA;AAAA,EAKH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkCU,cAAA,CAAe,SAAA,EAAmB,MAAA,EAAgB,OAAA,EAAyB;AACnF,IAAA,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAEhD,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,EAAG;AAC5B,MAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,WAAA,GAAc,IAAI,eAAA,CAAgB;AAAA,MACtC,CAAC,IAAA,CAAK,mBAAA,CAAoB,2BAAA,EAA6B,GAAG,SAAA;AAAA,MAC1D,CAAC,IAAA,CAAK,mBAAA,CAAoB,8BAAA,EAAgC,GAAG,OAAA;AAAA,MAC7D,CAAC,IAAA,CAAK,mBAAA,CAAoB,kCAAA,EAAoC,GAAG;AAAA,KAClE,CAAA;AACD,IAAA,OAAO,GAAG,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,WAAA,CAAY,UAAU,CAAA,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKU,cAAA,CAAe,UAAoB,MAAA,EAA2C;AACtF,IAAA,MAAM,MAAA,GAA4B,EAAE,GAAG,MAAA,EAAO;AAG9C,IAAA,IAAI,QAAA,CAAS,kBAAkB,MAAA,EAAQ;AACrC,MAAA,MAAA,CAAO,OAAO,QAAA,CAAS,YAAA;AAAA,IACzB;AAEA,IAAA,IAAI,MAAA,EAAQ,IAAA,IAAQ,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AAC1C,MAAA,MAAM,EAAE,KAAA,EAAO,GAAG,gBAAA,KAAqB,MAAA,CAAO,IAAA;AAC9C,MAAA,MAAA,CAAO,IAAA,GAAO,gBAAA;AAAA,IAChB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,oBAAA,CACL,OACA,OAAA,EACM;AACN,IAAA,IAAA,CAAK,oBAAA,GAAuB,KAAA;AAC5B,IAAA,IAAA,CAAK,yBAAA,GAA4B,OAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,YAAA,GAAwB;AAChC,IAAA,OAAQ,cAAA,OAAqB,WAAA,CAAY,MAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKO,UAAA,GAAqB;AAC1B,IAAA,OAAO,KAAK,YAAA,CAAa,uBAAA,EAAwB,CAAE,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA,EAIU,gBAAgB,MAAA,EAAiD;AACzE,IAAA,OAAO,sBAAsB,MAAM,CAAA;AAAA,EACrC;AAAA,EAEU,WAAA,CAAY,SAAA,EAAmB,MAAA,EAAgB,MAAA,EAA8B;AACrF,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,CAAA,qBAAA,CAAA,EAAyB;AAAA,MAC9C,SAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAAA,MACnC,KAAK,IAAA,CAAK,UAAA;AAAA,MACV,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA,EAEU,WAAA,CAAY,SAAA,EAAmB,MAAA,EAAgB,OAAA,EAAiB,UAAA,EAA0B;AAClG,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,IAAA,CAAK,CAAA,oBAAA,CAAA,EAAwB;AAAA,MAC5C,SAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAK,IAAA,CAAK,UAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,OAAA;AAAA,QACT,GAAA,EAAK;AAAA;AACP,KACD,CAAA;AAAA,EACH;AAAA,EAEU,wBAAwB,SAAA,EAAyB;AACzD,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,IAAA,CAAK,CAAA,0BAAA,CAAA,EAA8B;AAAA,MAClD,SAAA;AAAA,MACA,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEU,sBAAsB,SAAA,EAAyB;AACvD,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,IAAA,CAAK,CAAA,wBAAA,CAAA,EAA4B;AAAA,MAChD,SAAA;AAAA,MACA,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEU,qBAAA,CAAsB,SAAA,EAAmB,MAAA,EAAgB,QAAA,EAAwB;AACzF,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,CAAA,uBAAA,CAAA,EAA2B;AAAA,MAChD,SAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAK,IAAA,CAAK,UAAA;AAAA,MACV,QAAA,EAAU;AAAA,QACR,EAAA,EAAI,QAAA;AAAA,QACJ,KAAK,MAAA,CAAO,UAAA,CAAA,CAAY,WAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC;AAAA;AACrD,KACD,CAAA;AAAA,EACH;AAAA,EAEU,iBAAA,CACR,SAAA,EACA,MAAA,EACA,OAAA,EACA,YACA,KAAA,EACM;AACN,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,CAAA,mBAAA,CAAA,EAAuB;AAAA,MAC5C,SAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAK,IAAA,CAAK,UAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,OAAA;AAAA,QACT,GAAA,EAAK;AAAA,OACP;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,QAAQ,KAAA,CAAM;AAAA;AAChB,KACD,CAAA;AAAA,EACH;AAAA,EAEU,0BAAA,CACR,SAAA,EACA,MAAA,EACA,IAAA,EACA,SACA,UAAA,EACM;AACN,IAAA,IAAA,CAAK,WAAU,CAAE,KAAA;AAAA,MACf,CAAA,UAAA,EAAA,CAAc,IAAA,GAAO,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,KAAA,CAAA;AAAA,MACrC;AAAA,QACE,SAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAK,IAAA,CAAK,UAAA;AAAA,QACV,IAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,OAAA,EAAS,OAAA;AAAA,UACT,GAAA,EAAK;AAAA;AACP;AACF,KACF;AAAA,EACF;AAAA,EAEU,wBAAA,CAAyB,SAAA,EAAmB,MAAA,EAAgB,OAAA,EAAiB,UAAA,EAA0B;AAC/G,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,CAAA,iCAAA,CAAA,EAAqC;AAAA,MAC5D,SAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAK,IAAA,CAAK,UAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,OAAA;AAAA,QACT,GAAA,EAAK;AAAA;AACP,KACD,CAAA;AAAA,EACH;AAAA,EAEU,cAAA,CACR,SAAA,EACA,KAAA,EACA,OAAA,EACM;AACN,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACjC,MAAM,MAAA,GACN,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA;AAEvB,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,CAAA,4BAAA,CAAA,EAAgC;AAAA,MACrD,SAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAK,IAAA,CAAK,UAAA;AAAA,MACV,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA,EAEU,mBAAA,CAAoB,SAAA,EAAmB,KAAA,EAAe,MAAA,EAAsB;AACpF,IAAA,IAAA,CAAK,SAAA,EAAU,CAAE,KAAA,CAAM,CAAA,4BAAA,CAAA,EAAgC;AAAA,MACrD,SAAA;AAAA,MACA,KAAK,IAAA,CAAK,UAAA;AAAA,MACV,UAAA,EAAY,KAAA;AAAA,MACZ,YAAY,KAAA,GAAQ,MAAA;AAAA,MACpB,MAAA,EAAQ,MAAA;AAAA,MACR,WAAA,EAAa,KAAA,GAAQ,CAAA,GAAA,CAAA,CAAM,KAAA,GAAQ,MAAA,IAAW,QAAS,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA,GAAM;AAAA,KAChF,CAAA;AAAA,EACH;AAAA;AAAA,EAGU,wBAAwB,SAAA,EAAyB;AACzD,IAAA,IACE,IAAA,CAAK,oBAAA,IACF,CAAC,IAAA,CAAK,YAAA,MACN,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,yBAAyB,CAAA,EACrD;AACA,MAAA,aAAA,CAAc,SAAA;AAAA,QACZ,KAAK,SAAA,EAAU;AAAA,QACf,SAAA;AAAA,QACA,IAAA,CAAK,yBAAA;AAAA,QACL;AAAA,UACE,SAAA;AAAA,UACA,IAAA,EAAM;AAAA;AACR,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAEF;;;;"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -132,10 +132,10 @@ class AjaxResult extends Result {
132
132
  }
133
133
  /**
134
134
  * @deprecated Will be removed in `2.0.0`. Tied to the `restApi:v2` envelope
135
- * field `total`, which `restApi:v3` does not return. For `restApi:v3` the
136
- * SDK exposes element counts via the `aggregate` action (`count` /
137
- * `countDistinct`); for `restApi:v2` use the list helpers, which iterate
138
- * without exposing `total`.
135
+ * field `total`, which `restApi:v3` does not return. `restApi:v3` has no
136
+ * element-count replacement yet an `aggregate` action (`count` /
137
+ * `countDistinct`) is planned but not exposed in the SDK; for `restApi:v2`
138
+ * use the list helpers, which iterate without exposing `total`.
139
139
  *
140
140
  * @removed 2.0.0
141
141
  */
@@ -200,11 +200,12 @@ class AjaxResult extends Result {
200
200
  );
201
201
  }
202
202
  #buildNextPageQuery() {
203
- const result = { ...this._query };
204
203
  const payload = this._data;
205
204
  const nextValue = "next" in payload ? payload.next : void 0;
206
- result.params.start = Text.toInteger(Text.toInteger(nextValue));
207
- return result;
205
+ return {
206
+ ...this._query,
207
+ params: { ...this._query.params, start: Text.toInteger(nextValue) }
208
+ };
208
209
  }
209
210
  // Immutable API
210
211
  setData() {
@@ -1 +1 @@
1
- {"version":3,"file":"ajax-result.mjs","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. For `restApi:v3` the\n * SDK exposes element counts via the `aggregate` action (`count` /\n * `countDistinct`); for `restApi:v2` use the list helpers, which iterate\n * 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 result = { ...this._query }\n\n const payload = this._data as { next?: number }\n const nextValue = 'next' in payload ? payload.next : undefined\n\n result.params.start = Text.toInteger(Text.toInteger(nextValue))\n\n return result\n }\n\n // Immutable API\n override setData(): never {\n throw new ReferenceError('AjaxResult does not allow data modification')\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ajax-result.mjs","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":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -188,6 +188,7 @@ class RestrictionManager {
188
188
  "INVALID_REQUEST",
189
189
  "OVERLOAD_LIMIT",
190
190
  "expired_token",
191
+ "invalid_token",
191
192
  "ACCESS_DENIED",
192
193
  "INVALID_CREDENTIALS",
193
194
  "user_access_error",
@@ -1 +1 @@
1
- {"version":3,"file":"manager.mjs","sources":["../../../../../src/core/http/limiters/manager.ts"],"sourcesContent":["import type { RestrictionParams, RestrictionManagerStats } from '../../../types/limiters'\nimport type { LoggerInterface } from '../../../types/logger'\nimport { LoggerFactory } from '../../../logger'\nimport { RateLimiter } from './rate-limiter'\nimport { OperatingLimiter } from './operating-limiter'\nimport { AdaptiveDelayer } from './adaptive-delayer'\n\n/**\n * Delay Management Manager\n *\n * @todo docs\n */\nexport class RestrictionManager {\n #rateLimiter: RateLimiter\n #operatingLimiter: OperatingLimiter\n #adaptiveDelayer: AdaptiveDelayer\n #config: RestrictionParams\n #stats: Pick<RestrictionManagerStats, 'retries' | 'consecutiveErrors' | 'limitHits'> = {\n /** Retry attempts */\n retries: 0,\n /** Consecutive errors */\n consecutiveErrors: 0,\n /** Limit triggers */\n limitHits: 0\n }\n\n #errorCounts = new Map<string, number>()\n\n private _logger: LoggerInterface\n\n constructor(params: RestrictionParams) {\n this._logger = LoggerFactory.createNullLogger()\n this.#config = params\n this.#rateLimiter = new RateLimiter(params.rateLimit!)\n this.#operatingLimiter = new OperatingLimiter(params.operatingLimit!)\n this.#adaptiveDelayer = new AdaptiveDelayer(params.adaptiveConfig!, this.#operatingLimiter)\n }\n\n // region Logger ////\n setLogger(logger: LoggerInterface): void {\n this._logger = logger\n this.#rateLimiter.setLogger(this._logger)\n this.#operatingLimiter.setLogger(this._logger)\n this.#adaptiveDelayer.setLogger(this._logger)\n }\n\n getLogger(): LoggerInterface {\n return this._logger\n }\n // endregion ////\n\n async applyOperatingLimits(requestId: string, method: string, params?: any): Promise<void> {\n // 1. Check operating limit\n const operatingWait = await this.#operatingLimiter.waitIfNeeded(requestId, method, params)\n if (operatingWait > 0) {\n this.incrementStats('limitHits')\n this.#logMethodBlocked(this.#operatingLimiter.getTitle(), requestId, method, operatingWait)\n await this.#delay(operatingWait)\n } else {\n // 2. Apply adaptive delay\n const adaptiveDelay = await this.#adaptiveDelayer.waitIfNeeded(requestId, method, params)\n if (adaptiveDelay > 0) {\n this.incrementStats('limitHits')\n this.#logMethodBlocked(this.#adaptiveDelayer.getTitle(), requestId, method, adaptiveDelay)\n await this.#delay(adaptiveDelay)\n }\n }\n }\n\n /**\n * Checks and waits for the rate limit\n * The loop is needed for parallel requests (Promise.all())\n */\n async checkRateLimit(requestId: string, method: string): Promise<void> {\n // 3. Apply rate limit\n let waitTime\n let times = 1\n do {\n waitTime = await this.#rateLimiter.waitIfNeeded(requestId, method)\n if (waitTime > 0) {\n this.incrementStats('limitHits')\n this.#logMethodBlockedWithTimes(this.#rateLimiter.getTitle(), requestId, method, waitTime, times)\n await this.#delay(waitTime)\n times++\n }\n } while (waitTime > 0)\n }\n\n async updateStats(\n requestId: string,\n method: string,\n timeData: any\n ): Promise<void> {\n await this.#operatingLimiter.updateStats(requestId, method, timeData)\n await this.#adaptiveDelayer.updateStats(requestId, method, timeData)\n await this.#rateLimiter.updateStats(requestId, method, timeData)\n }\n\n async handleError(\n requestId: string,\n method: string,\n params: any,\n error: any,\n attempt: number\n ): Promise<number> {\n // Rate limit exceeded\n if (this.#isRateLimitError(error)) {\n // Since this is error handling, we take into account the number of attempts\n const wait = (await this.#handleRateLimitExceeded(requestId)) * Math.pow(1.5, attempt)\n this.#logError(this.#rateLimiter.getTitle(), requestId, 'QUERY_LIMIT_EXCEEDED', error.message, method, wait)\n return wait\n }\n\n // Operating limit exceeded\n if (this.#isOperatingLimitError(error)) {\n // Since this is error handling, we will increase the minimum to 10 seconds.\n const wait = Math.max(10_000, await this.#handleOperatingLimitError(requestId, method, params, error))\n this.#logError(this.#operatingLimiter.getTitle(), requestId, 'OPERATION_TIME_LIMIT', error.message, method, wait)\n return wait\n }\n\n // Client errors (HTTP 4xx) are deterministic — retrying cannot change the\n // outcome, so fail fast regardless of whether the error code is enumerated.\n // 429 (rate/operating limit) is handled above; 408 (timeout) stays retryable.\n if (this.#isNonRetryableClientError(error)) {\n this.#logNonRetryableClientError(requestId, error?.code ? `${error.code}` : '?', error?.message ?? '', method, Number(error?.status ?? 0))\n return 0\n }\n\n // Other exceptions\n if (!this.#isNeedThrowError(error)) {\n // Since this is error handling, we take into account the number of attempts\n const baseDelay = await this.#getErrorBackoff(requestId)\n const maxDelay = Math.max(30_000, baseDelay)\n const delay = Math.min(maxDelay, baseDelay * Math.pow(2, attempt))\n\n // Add jitter to prevent thundering herd\n const jitter = delay * 0.1 * (Math.random() * 2 - 1) // ±10% jitter\n const wait = Math.max(100, delay + jitter)\n\n this.#logSomeError(requestId, error?.code ? `${error.code}` : '?', error.message, method, wait)\n\n return wait\n }\n\n return 0 // We don't repeat\n }\n\n /**\n * Checks if the error is a rate limit\n */\n #isRateLimitError(error: any): boolean {\n return error.status === 503\n || error.code === 'QUERY_LIMIT_EXCEEDED'\n }\n\n /**\n * Delay when exceeding the rate limit\n */\n async #handleRateLimitExceeded(requestId: string): Promise<number> {\n return this.#rateLimiter.handleExceeded(requestId)\n }\n\n /**\n * Checks if the error is an operating limit\n *\n * @memo `OPERATION_TIME_LIMIT` && `429` - obtained through practical means\n * @memo This doesn't work for `batch` queries.\n */\n #isOperatingLimitError(error: any): boolean {\n return error.status === 429\n || error.code === 'OPERATION_TIME_LIMIT'\n }\n\n /**\n * Operating limit error delay\n *\n * @memo Currently, the errors don't include timings for operations.\n * For this reason, we will take data from the previous request\n */\n async #handleOperatingLimitError(requestId: string, method: string, params?: any, _error?: any): Promise<number> {\n return this.#operatingLimiter.getTimeToFree(requestId, method, params, _error)\n }\n\n /**\n * Checks if the error is a non-retryable client error (HTTP 4xx).\n *\n * `429` is excluded — it is handled as a rate/operating limit and is retried\n * with backoff. `408` (request timeout) is excluded — it is transient and is\n * governed by `retryOnNetworkError`.\n */\n #isNonRetryableClientError(error: any): boolean {\n const status = Number(error?.status ?? 0)\n if (Number.isNaN(status)) {\n return false\n }\n return status >= 400 && status < 500 && status !== 408 && status !== 429\n }\n\n /**\n * Checks whether attempts should be stopped if errors are encountered that are unclear.\n */\n #isNeedThrowError(error: any): boolean {\n const answerError = {\n code: error?.code ?? '-1',\n description: error?.message ?? ''\n }\n\n return [\n ...this.exceptionCodeForHard,\n ...this.exceptionCodeForSoft\n ].includes(answerError.code)\n || (answerError.description ?? '').includes('Could not find value for parameter')\n }\n\n /**\n * Built-in hard error codes (always throw, never retry).\n *\n * Includes authorization and fatal codes that must never be silently retried.\n * Use `RestrictionParams.hardErrorCodes` to extend this list with custom codes.\n */\n static readonly BUILT_IN_HARD_ERROR_CODES: readonly string[] = [\n 'ERR_BAD_REQUEST',\n 'JSSDK_UNKNOWN_ERROR',\n '100',\n 'INTERNAL_SERVER_ERROR', 'ERROR_UNEXPECTED_ANSWER', 'PORTAL_DELETED',\n 'ERROR_BATCH_METHOD_NOT_ALLOWED', 'ERROR_BATCH_LENGTH_EXCEEDED',\n 'NO_AUTH_FOUND',\n 'INVALID_REQUEST',\n 'OVERLOAD_LIMIT', 'expired_token',\n 'ACCESS_DENIED', 'INVALID_CREDENTIALS', 'user_access_error', 'insufficient_scope',\n 'ERROR_MANIFEST_IS_NOT_AVAILABLE',\n 'allowed_only_intranet_user',\n 'NOT_FOUND',\n 'INVALID_ARG_VALUE'\n ]\n\n /**\n * Built-in soft error codes (returned as `AjaxResult` with error, never thrown).\n *\n * Use `RestrictionParams.softErrorCodes` to extend this list with custom codes.\n */\n static readonly BUILT_IN_SOFT_ERROR_CODES: readonly string[] = [\n 'ERROR_ENTITY_NOT_FOUND',\n 'BITRIX_REST_V3_EXCEPTION_ACCESSDENIEDEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_INVALIDJSONEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_INVALIDFILTEREXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_INVALIDSELECTEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_ENTITYNOTFOUNDEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_METHODNOTFOUNDEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_UNKNOWNDTOPROPERTYEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_VALIDATION_REQUESTVALIDATIONEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_VALIDATION_DTOVALIDATIONEXCEPTION'\n ]\n\n /**\n * Codes that cause the SDK to throw immediately.\n *\n * Composed of:\n * - `BUILT_IN_HARD_ERROR_CODES` (always included)\n * - `NETWORK_ERROR` and `REQUEST_TIMEOUT` when `retryOnNetworkError === false`\n * - `RestrictionParams.hardErrorCodes` (user-provided extensions)\n */\n get exceptionCodeForHard(): string[] {\n const codes = [...RestrictionManager.BUILT_IN_HARD_ERROR_CODES]\n\n if (this.#config.retryOnNetworkError === false) {\n codes.push('NETWORK_ERROR', 'REQUEST_TIMEOUT')\n }\n\n if (this.#config.hardErrorCodes && this.#config.hardErrorCodes.length > 0) {\n codes.push(...this.#config.hardErrorCodes)\n }\n\n return codes\n }\n\n /**\n * Codes returned as `AjaxResult` with an `AjaxError` payload instead of thrown.\n *\n * Composed of:\n * - `BUILT_IN_SOFT_ERROR_CODES` (always included)\n * - `RestrictionParams.softErrorCodes` (user-provided extensions)\n */\n get exceptionCodeForSoft(): string[] {\n const codes = [...RestrictionManager.BUILT_IN_SOFT_ERROR_CODES]\n\n if (this.#config.softErrorCodes && this.#config.softErrorCodes.length > 0) {\n codes.push(...this.#config.softErrorCodes)\n }\n\n return codes\n }\n\n /**\n * Delay due to unknown errors\n */\n async #getErrorBackoff(_requestId: string): Promise<number> {\n return this.#config.retryDelay!\n }\n\n incrementError(method: string): void {\n const current = this.#errorCounts.get(method) || 0\n this.#errorCounts.set(method, current + 1)\n this.incrementStats('consecutiveErrors')\n }\n\n resetErrors(method: string): void {\n this.#errorCounts.delete(method)\n this.#stats.consecutiveErrors = 0\n }\n\n incrementStats(stat: keyof Pick<RestrictionManagerStats, 'retries' | 'consecutiveErrors' | 'limitHits'>): void {\n this.#stats[stat]++\n }\n\n /**\n * Returns job statistics\n */\n getStats(): RestrictionManagerStats & {\n adaptiveDelayAvg: number\n errorCounts: Record<string, number>\n } {\n return {\n ...this.#stats,\n ...this.#rateLimiter.getStats(),\n ...this.#adaptiveDelayer.getStats(),\n ...this.#operatingLimiter.getStats(),\n errorCounts: Object.fromEntries(this.#errorCounts)\n }\n }\n\n /**\n * Resets limiters and statistics\n */\n async reset(): Promise<void> {\n await this.#rateLimiter.reset()\n await this.#operatingLimiter.reset()\n await this.#adaptiveDelayer.reset()\n this.#errorCounts.clear()\n\n this.#stats = {\n retries: 0,\n consecutiveErrors: 0,\n limitHits: 0\n }\n }\n\n async setConfig(params: RestrictionParams): Promise<void> {\n this.#config = params\n await this.#rateLimiter.setConfig(params.rateLimit!)\n await this.#operatingLimiter.setConfig(params.operatingLimit!)\n await this.#adaptiveDelayer.setConfig(params.adaptiveConfig!)\n }\n\n getParams(): RestrictionParams {\n return { ...this.#config }\n }\n\n /**\n * Delay function\n */\n async #delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n }\n\n /**\n * Public access to the delay function\n */\n async waiteDelay(ms: number): Promise<void> {\n return this.#delay(ms)\n }\n\n // region Log ////\n #logMethodBlocked(limiter: string, requestId: string, method: string, wait: number) {\n this.getLogger().notice(`${limiter} blocked method ${method}`, {\n requestId,\n method,\n wait,\n limiter\n })\n }\n\n #logMethodBlockedWithTimes(limiter: string, requestId: string, method: string, wait: number, times: number) {\n this.getLogger().notice(`${limiter} blocked method ${method} | ${times} times`, {\n requestId,\n method,\n times,\n wait,\n limiter\n })\n }\n\n #logError(limiter: string, requestId: string, code: string, message: string, method: string, wait: number) {\n this.getLogger().error(`${limiter} recognized the ${code} error for the ${method} method`, {\n requestId,\n method,\n wait,\n limiter,\n error: {\n code,\n message\n }\n })\n }\n\n #logSomeError(requestId: string, code: string, message: string, method: string, wait: number) {\n this.getLogger().error(`recognized the ${code} error for the ${method} method`, {\n requestId,\n method,\n wait,\n error: {\n code,\n message\n }\n })\n }\n\n #logNonRetryableClientError(requestId: string, code: string, message: string, method: string, status: number) {\n this.getLogger().error(`client error ${status} (${code}) for the ${method} method is not retryable`, {\n requestId,\n method,\n status,\n error: {\n code,\n message\n }\n })\n }\n // endregion ////\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.mjs","sources":["../../../../../src/core/http/limiters/manager.ts"],"sourcesContent":["import type { RestrictionParams, RestrictionManagerStats } from '../../../types/limiters'\nimport type { LoggerInterface } from '../../../types/logger'\nimport { LoggerFactory } from '../../../logger'\nimport { RateLimiter } from './rate-limiter'\nimport { OperatingLimiter } from './operating-limiter'\nimport { AdaptiveDelayer } from './adaptive-delayer'\n\n/**\n * Delay Management Manager\n *\n * @todo docs\n */\nexport class RestrictionManager {\n #rateLimiter: RateLimiter\n #operatingLimiter: OperatingLimiter\n #adaptiveDelayer: AdaptiveDelayer\n #config: RestrictionParams\n #stats: Pick<RestrictionManagerStats, 'retries' | 'consecutiveErrors' | 'limitHits'> = {\n /** Retry attempts */\n retries: 0,\n /** Consecutive errors */\n consecutiveErrors: 0,\n /** Limit triggers */\n limitHits: 0\n }\n\n #errorCounts = new Map<string, number>()\n\n private _logger: LoggerInterface\n\n constructor(params: RestrictionParams) {\n this._logger = LoggerFactory.createNullLogger()\n this.#config = params\n this.#rateLimiter = new RateLimiter(params.rateLimit!)\n this.#operatingLimiter = new OperatingLimiter(params.operatingLimit!)\n this.#adaptiveDelayer = new AdaptiveDelayer(params.adaptiveConfig!, this.#operatingLimiter)\n }\n\n // region Logger ////\n setLogger(logger: LoggerInterface): void {\n this._logger = logger\n this.#rateLimiter.setLogger(this._logger)\n this.#operatingLimiter.setLogger(this._logger)\n this.#adaptiveDelayer.setLogger(this._logger)\n }\n\n getLogger(): LoggerInterface {\n return this._logger\n }\n // endregion ////\n\n async applyOperatingLimits(requestId: string, method: string, params?: any): Promise<void> {\n // 1. Check operating limit\n const operatingWait = await this.#operatingLimiter.waitIfNeeded(requestId, method, params)\n if (operatingWait > 0) {\n this.incrementStats('limitHits')\n this.#logMethodBlocked(this.#operatingLimiter.getTitle(), requestId, method, operatingWait)\n await this.#delay(operatingWait)\n } else {\n // 2. Apply adaptive delay\n const adaptiveDelay = await this.#adaptiveDelayer.waitIfNeeded(requestId, method, params)\n if (adaptiveDelay > 0) {\n this.incrementStats('limitHits')\n this.#logMethodBlocked(this.#adaptiveDelayer.getTitle(), requestId, method, adaptiveDelay)\n await this.#delay(adaptiveDelay)\n }\n }\n }\n\n /**\n * Checks and waits for the rate limit\n * The loop is needed for parallel requests (Promise.all())\n */\n async checkRateLimit(requestId: string, method: string): Promise<void> {\n // 3. Apply rate limit\n let waitTime\n let times = 1\n do {\n waitTime = await this.#rateLimiter.waitIfNeeded(requestId, method)\n if (waitTime > 0) {\n this.incrementStats('limitHits')\n this.#logMethodBlockedWithTimes(this.#rateLimiter.getTitle(), requestId, method, waitTime, times)\n await this.#delay(waitTime)\n times++\n }\n } while (waitTime > 0)\n }\n\n async updateStats(\n requestId: string,\n method: string,\n timeData: any\n ): Promise<void> {\n await this.#operatingLimiter.updateStats(requestId, method, timeData)\n await this.#adaptiveDelayer.updateStats(requestId, method, timeData)\n await this.#rateLimiter.updateStats(requestId, method, timeData)\n }\n\n async handleError(\n requestId: string,\n method: string,\n params: any,\n error: any,\n attempt: number\n ): Promise<number> {\n // Rate limit exceeded\n if (this.#isRateLimitError(error)) {\n // Since this is error handling, we take into account the number of attempts\n const wait = (await this.#handleRateLimitExceeded(requestId)) * Math.pow(1.5, attempt)\n this.#logError(this.#rateLimiter.getTitle(), requestId, 'QUERY_LIMIT_EXCEEDED', error.message, method, wait)\n return wait\n }\n\n // Operating limit exceeded\n if (this.#isOperatingLimitError(error)) {\n // Since this is error handling, we will increase the minimum to 10 seconds.\n const wait = Math.max(10_000, await this.#handleOperatingLimitError(requestId, method, params, error))\n this.#logError(this.#operatingLimiter.getTitle(), requestId, 'OPERATION_TIME_LIMIT', error.message, method, wait)\n return wait\n }\n\n // Client errors (HTTP 4xx) are deterministic — retrying cannot change the\n // outcome, so fail fast regardless of whether the error code is enumerated.\n // 429 (rate/operating limit) is handled above; 408 (timeout) stays retryable.\n if (this.#isNonRetryableClientError(error)) {\n this.#logNonRetryableClientError(requestId, error?.code ? `${error.code}` : '?', error?.message ?? '', method, Number(error?.status ?? 0))\n return 0\n }\n\n // Other exceptions\n if (!this.#isNeedThrowError(error)) {\n // Since this is error handling, we take into account the number of attempts\n const baseDelay = await this.#getErrorBackoff(requestId)\n const maxDelay = Math.max(30_000, baseDelay)\n const delay = Math.min(maxDelay, baseDelay * Math.pow(2, attempt))\n\n // Add jitter to prevent thundering herd\n const jitter = delay * 0.1 * (Math.random() * 2 - 1) // ±10% jitter\n const wait = Math.max(100, delay + jitter)\n\n this.#logSomeError(requestId, error?.code ? `${error.code}` : '?', error.message, method, wait)\n\n return wait\n }\n\n return 0 // We don't repeat\n }\n\n /**\n * Checks if the error is a rate limit\n */\n #isRateLimitError(error: any): boolean {\n return error.status === 503\n || error.code === 'QUERY_LIMIT_EXCEEDED'\n }\n\n /**\n * Delay when exceeding the rate limit\n */\n async #handleRateLimitExceeded(requestId: string): Promise<number> {\n return this.#rateLimiter.handleExceeded(requestId)\n }\n\n /**\n * Checks if the error is an operating limit\n *\n * @memo `OPERATION_TIME_LIMIT` && `429` - obtained through practical means\n * @memo This doesn't work for `batch` queries.\n */\n #isOperatingLimitError(error: any): boolean {\n return error.status === 429\n || error.code === 'OPERATION_TIME_LIMIT'\n }\n\n /**\n * Operating limit error delay\n *\n * @memo Currently, the errors don't include timings for operations.\n * For this reason, we will take data from the previous request\n */\n async #handleOperatingLimitError(requestId: string, method: string, params?: any, _error?: any): Promise<number> {\n return this.#operatingLimiter.getTimeToFree(requestId, method, params, _error)\n }\n\n /**\n * Checks if the error is a non-retryable client error (HTTP 4xx).\n *\n * `429` is excluded — it is handled as a rate/operating limit and is retried\n * with backoff. `408` (request timeout) is excluded — it is transient and is\n * governed by `retryOnNetworkError`.\n */\n #isNonRetryableClientError(error: any): boolean {\n const status = Number(error?.status ?? 0)\n if (Number.isNaN(status)) {\n return false\n }\n return status >= 400 && status < 500 && status !== 408 && status !== 429\n }\n\n /**\n * Checks whether attempts should be stopped if errors are encountered that are unclear.\n */\n #isNeedThrowError(error: any): boolean {\n const answerError = {\n code: error?.code ?? '-1',\n description: error?.message ?? ''\n }\n\n return [\n ...this.exceptionCodeForHard,\n ...this.exceptionCodeForSoft\n ].includes(answerError.code)\n || (answerError.description ?? '').includes('Could not find value for parameter')\n }\n\n /**\n * Built-in hard error codes (always throw, never retry).\n *\n * Includes authorization and fatal codes that must never be silently retried.\n * Use `RestrictionParams.hardErrorCodes` to extend this list with custom codes.\n */\n static readonly BUILT_IN_HARD_ERROR_CODES: readonly string[] = [\n 'ERR_BAD_REQUEST',\n 'JSSDK_UNKNOWN_ERROR',\n '100',\n 'INTERNAL_SERVER_ERROR', 'ERROR_UNEXPECTED_ANSWER', 'PORTAL_DELETED',\n 'ERROR_BATCH_METHOD_NOT_ALLOWED', 'ERROR_BATCH_LENGTH_EXCEEDED',\n 'NO_AUTH_FOUND',\n 'INVALID_REQUEST',\n 'OVERLOAD_LIMIT', 'expired_token', 'invalid_token',\n 'ACCESS_DENIED', 'INVALID_CREDENTIALS', 'user_access_error', 'insufficient_scope',\n 'ERROR_MANIFEST_IS_NOT_AVAILABLE',\n 'allowed_only_intranet_user',\n 'NOT_FOUND',\n 'INVALID_ARG_VALUE'\n ]\n\n /**\n * Built-in soft error codes (returned as `AjaxResult` with error, never thrown).\n *\n * Use `RestrictionParams.softErrorCodes` to extend this list with custom codes.\n */\n static readonly BUILT_IN_SOFT_ERROR_CODES: readonly string[] = [\n 'ERROR_ENTITY_NOT_FOUND',\n 'BITRIX_REST_V3_EXCEPTION_ACCESSDENIEDEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_INVALIDJSONEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_INVALIDFILTEREXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_INVALIDSELECTEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_ENTITYNOTFOUNDEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_METHODNOTFOUNDEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_UNKNOWNDTOPROPERTYEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_VALIDATION_REQUESTVALIDATIONEXCEPTION',\n 'BITRIX_REST_V3_EXCEPTION_VALIDATION_DTOVALIDATIONEXCEPTION'\n ]\n\n /**\n * Codes that cause the SDK to throw immediately.\n *\n * Composed of:\n * - `BUILT_IN_HARD_ERROR_CODES` (always included)\n * - `NETWORK_ERROR` and `REQUEST_TIMEOUT` when `retryOnNetworkError === false`\n * - `RestrictionParams.hardErrorCodes` (user-provided extensions)\n */\n get exceptionCodeForHard(): string[] {\n const codes = [...RestrictionManager.BUILT_IN_HARD_ERROR_CODES]\n\n if (this.#config.retryOnNetworkError === false) {\n codes.push('NETWORK_ERROR', 'REQUEST_TIMEOUT')\n }\n\n if (this.#config.hardErrorCodes && this.#config.hardErrorCodes.length > 0) {\n codes.push(...this.#config.hardErrorCodes)\n }\n\n return codes\n }\n\n /**\n * Codes returned as `AjaxResult` with an `AjaxError` payload instead of thrown.\n *\n * Composed of:\n * - `BUILT_IN_SOFT_ERROR_CODES` (always included)\n * - `RestrictionParams.softErrorCodes` (user-provided extensions)\n */\n get exceptionCodeForSoft(): string[] {\n const codes = [...RestrictionManager.BUILT_IN_SOFT_ERROR_CODES]\n\n if (this.#config.softErrorCodes && this.#config.softErrorCodes.length > 0) {\n codes.push(...this.#config.softErrorCodes)\n }\n\n return codes\n }\n\n /**\n * Delay due to unknown errors\n */\n async #getErrorBackoff(_requestId: string): Promise<number> {\n return this.#config.retryDelay!\n }\n\n incrementError(method: string): void {\n const current = this.#errorCounts.get(method) || 0\n this.#errorCounts.set(method, current + 1)\n this.incrementStats('consecutiveErrors')\n }\n\n resetErrors(method: string): void {\n this.#errorCounts.delete(method)\n this.#stats.consecutiveErrors = 0\n }\n\n incrementStats(stat: keyof Pick<RestrictionManagerStats, 'retries' | 'consecutiveErrors' | 'limitHits'>): void {\n this.#stats[stat]++\n }\n\n /**\n * Returns job statistics\n */\n getStats(): RestrictionManagerStats & {\n adaptiveDelayAvg: number\n errorCounts: Record<string, number>\n } {\n return {\n ...this.#stats,\n ...this.#rateLimiter.getStats(),\n ...this.#adaptiveDelayer.getStats(),\n ...this.#operatingLimiter.getStats(),\n errorCounts: Object.fromEntries(this.#errorCounts)\n }\n }\n\n /**\n * Resets limiters and statistics\n */\n async reset(): Promise<void> {\n await this.#rateLimiter.reset()\n await this.#operatingLimiter.reset()\n await this.#adaptiveDelayer.reset()\n this.#errorCounts.clear()\n\n this.#stats = {\n retries: 0,\n consecutiveErrors: 0,\n limitHits: 0\n }\n }\n\n async setConfig(params: RestrictionParams): Promise<void> {\n this.#config = params\n await this.#rateLimiter.setConfig(params.rateLimit!)\n await this.#operatingLimiter.setConfig(params.operatingLimit!)\n await this.#adaptiveDelayer.setConfig(params.adaptiveConfig!)\n }\n\n getParams(): RestrictionParams {\n return { ...this.#config }\n }\n\n /**\n * Delay function\n */\n async #delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n }\n\n /**\n * Public access to the delay function\n */\n async waiteDelay(ms: number): Promise<void> {\n return this.#delay(ms)\n }\n\n // region Log ////\n #logMethodBlocked(limiter: string, requestId: string, method: string, wait: number) {\n this.getLogger().notice(`${limiter} blocked method ${method}`, {\n requestId,\n method,\n wait,\n limiter\n })\n }\n\n #logMethodBlockedWithTimes(limiter: string, requestId: string, method: string, wait: number, times: number) {\n this.getLogger().notice(`${limiter} blocked method ${method} | ${times} times`, {\n requestId,\n method,\n times,\n wait,\n limiter\n })\n }\n\n #logError(limiter: string, requestId: string, code: string, message: string, method: string, wait: number) {\n this.getLogger().error(`${limiter} recognized the ${code} error for the ${method} method`, {\n requestId,\n method,\n wait,\n limiter,\n error: {\n code,\n message\n }\n })\n }\n\n #logSomeError(requestId: string, code: string, message: string, method: string, wait: number) {\n this.getLogger().error(`recognized the ${code} error for the ${method} method`, {\n requestId,\n method,\n wait,\n error: {\n code,\n message\n }\n })\n }\n\n #logNonRetryableClientError(requestId: string, code: string, message: string, method: string, status: number) {\n this.getLogger().error(`client error ${status} (${code}) for the ${method} method is not retryable`, {\n requestId,\n method,\n status,\n error: {\n code,\n message\n }\n })\n }\n // endregion ////\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @package @bitrix24/b24jssdk
3
- * @version 1.2.0
3
+ * @version 2.0.0
4
4
  * @copyright (c) 2026 Bitrix24
5
5
  * @license MIT
6
6
  * @see https://github.com/bitrix24/b24jssdk
@@ -14,29 +14,46 @@ const SENSITIVE_PARAM_KEYS = [
14
14
  "token",
15
15
  "secret",
16
16
  "access_token",
17
- "refresh_token"
17
+ "refresh_token",
18
+ "client_secret",
19
+ "application_token",
20
+ "sessid",
21
+ "key",
22
+ "signature"
18
23
  ];
19
24
  const REDACTED_PLACEHOLDER = "***REDACTED***";
25
+ const QS_SENSITIVE_RE = new RegExp(
26
+ `([?&]|^)(${SENSITIVE_PARAM_KEYS.join("|")})=[^&#;]*`,
27
+ "gi"
28
+ );
20
29
  function isPlainObject(value) {
21
30
  return value !== null && typeof value === "object" && !Array.isArray(value);
22
31
  }
23
32
  __name(isPlainObject, "isPlainObject");
33
+ function redactQueryString(value) {
34
+ if (!value.includes("=")) return value;
35
+ return value.replace(
36
+ QS_SENSITIVE_RE,
37
+ (_match, sep, key) => `${sep}${key}=${REDACTED_PLACEHOLDER}`
38
+ );
39
+ }
40
+ __name(redactQueryString, "redactQueryString");
41
+ function redactValue(value, depth) {
42
+ if (typeof value === "string") return redactQueryString(value);
43
+ if (depth <= 0) return value;
44
+ if (isPlainObject(value)) return redactObject(value, depth - 1);
45
+ if (Array.isArray(value)) return value.map((item) => redactValue(item, depth));
46
+ return value;
47
+ }
48
+ __name(redactValue, "redactValue");
24
49
  function redactObject(source, depth) {
25
50
  const sanitized = { ...source };
26
51
  for (const key of Object.keys(sanitized)) {
27
- if (SENSITIVE_PARAM_KEYS.includes(key)) {
52
+ if (SENSITIVE_PARAM_KEYS.includes(key.toLowerCase())) {
28
53
  sanitized[key] = REDACTED_PLACEHOLDER;
29
54
  continue;
30
55
  }
31
- if (depth <= 0) continue;
32
- const child = sanitized[key];
33
- if (isPlainObject(child)) {
34
- sanitized[key] = redactObject(child, depth - 1);
35
- } else if (Array.isArray(child)) {
36
- sanitized[key] = child.map(
37
- (item) => isPlainObject(item) ? redactObject(item, depth - 1) : item
38
- );
39
- }
56
+ sanitized[key] = redactValue(sanitized[key], depth);
40
57
  }
41
58
  return sanitized;
42
59
  }
@@ -47,6 +64,17 @@ function redactSensitiveParams(params) {
47
64
  return redactObject(params, DEFAULT_REDACT_DEPTH);
48
65
  }
49
66
  __name(redactSensitiveParams, "redactSensitiveParams");
67
+ function redactSensitiveUrl(url, extraKeys = []) {
68
+ if (typeof url !== "string" || !url.includes("=")) return url;
69
+ if (extraKeys.length === 0) return redactQueryString(url);
70
+ const escaped = extraKeys.map((key) => key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
71
+ const re = new RegExp(
72
+ `([?&]|^)(${[...SENSITIVE_PARAM_KEYS, ...escaped].join("|")})=[^&#;]*`,
73
+ "gi"
74
+ );
75
+ return url.replace(re, (_match, sep, key) => `${sep}${key}=${REDACTED_PLACEHOLDER}`);
76
+ }
77
+ __name(redactSensitiveUrl, "redactSensitiveUrl");
50
78
 
51
- export { REDACTED_PLACEHOLDER, SENSITIVE_PARAM_KEYS, redactSensitiveParams };
79
+ export { REDACTED_PLACEHOLDER, SENSITIVE_PARAM_KEYS, redactSensitiveParams, redactSensitiveUrl };
52
80
  //# sourceMappingURL=redact.mjs.map