@bitrix24/b24jssdk 0.4.10 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/README-AI.md +2 -1
  2. package/dist/esm/_virtual/_commonjsHelpers.mjs +16 -0
  3. package/dist/esm/_virtual/_commonjsHelpers.mjs.map +1 -0
  4. package/dist/esm/_virtual/protobuf.mjs +16 -0
  5. package/dist/esm/_virtual/protobuf.mjs.map +1 -0
  6. package/dist/esm/_virtual/protobuf2.mjs +12 -0
  7. package/dist/esm/_virtual/protobuf2.mjs.map +1 -0
  8. package/dist/esm/core/abstract-b24.mjs +355 -0
  9. package/dist/esm/core/abstract-b24.mjs.map +1 -0
  10. package/dist/esm/core/actions/abstract-action.mjs +24 -0
  11. package/dist/esm/core/actions/abstract-action.mjs.map +1 -0
  12. package/dist/esm/core/actions/abstract-batch.mjs +95 -0
  13. package/dist/esm/core/actions/abstract-batch.mjs.map +1 -0
  14. package/dist/esm/core/actions/manager.mjs +53 -0
  15. package/dist/esm/core/actions/manager.mjs.map +1 -0
  16. package/dist/esm/core/actions/v2/batch-by-chunk.mjs +92 -0
  17. package/dist/esm/core/actions/v2/batch-by-chunk.mjs.map +1 -0
  18. package/dist/esm/core/actions/v2/batch.mjs +126 -0
  19. package/dist/esm/core/actions/v2/batch.mjs.map +1 -0
  20. package/dist/esm/core/actions/v2/call-list.mjs +131 -0
  21. package/dist/esm/core/actions/v2/call-list.mjs.map +1 -0
  22. package/dist/esm/core/actions/v2/call.mjs +68 -0
  23. package/dist/esm/core/actions/v2/call.mjs.map +1 -0
  24. package/dist/esm/core/actions/v2/fetch-list.mjs +132 -0
  25. package/dist/esm/core/actions/v2/fetch-list.mjs.map +1 -0
  26. package/dist/esm/core/actions/v2/manager-v2.mjs +74 -0
  27. package/dist/esm/core/actions/v2/manager-v2.mjs.map +1 -0
  28. package/dist/esm/core/actions/v3/batch-by-chunk.mjs +91 -0
  29. package/dist/esm/core/actions/v3/batch-by-chunk.mjs.map +1 -0
  30. package/dist/esm/core/actions/v3/batch.mjs +129 -0
  31. package/dist/esm/core/actions/v3/batch.mjs.map +1 -0
  32. package/dist/esm/core/actions/v3/call-list.mjs +127 -0
  33. package/dist/esm/core/actions/v3/call-list.mjs.map +1 -0
  34. package/dist/esm/core/actions/v3/call.mjs +58 -0
  35. package/dist/esm/core/actions/v3/call.mjs.map +1 -0
  36. package/dist/esm/core/actions/v3/fetch-list.mjs +125 -0
  37. package/dist/esm/core/actions/v3/fetch-list.mjs.map +1 -0
  38. package/dist/esm/core/actions/v3/manager-v3.mjs +74 -0
  39. package/dist/esm/core/actions/v3/manager-v3.mjs.map +1 -0
  40. package/dist/esm/core/http/abstract-http.mjs +563 -0
  41. package/dist/esm/core/http/abstract-http.mjs.map +1 -0
  42. package/dist/esm/core/http/ajax-error.mjs +107 -0
  43. package/dist/esm/core/http/ajax-error.mjs.map +1 -0
  44. package/dist/esm/core/http/ajax-result.mjs +176 -0
  45. package/dist/esm/core/http/ajax-result.mjs.map +1 -0
  46. package/dist/esm/core/http/limiters/adaptive-delayer.mjs +135 -0
  47. package/dist/esm/core/http/limiters/adaptive-delayer.mjs.map +1 -0
  48. package/dist/esm/core/http/limiters/manager.mjs +308 -0
  49. package/dist/esm/core/http/limiters/manager.mjs.map +1 -0
  50. package/dist/esm/core/http/limiters/operating-limiter.mjs +171 -0
  51. package/dist/esm/core/http/limiters/operating-limiter.mjs.map +1 -0
  52. package/dist/esm/core/http/limiters/params-factory.mjs +121 -0
  53. package/dist/esm/core/http/limiters/params-factory.mjs.map +1 -0
  54. package/dist/esm/core/http/limiters/rate-limiter.mjs +402 -0
  55. package/dist/esm/core/http/limiters/rate-limiter.mjs.map +1 -0
  56. package/dist/esm/core/http/v2.mjs +100 -0
  57. package/dist/esm/core/http/v2.mjs.map +1 -0
  58. package/dist/esm/core/http/v3.mjs +94 -0
  59. package/dist/esm/core/http/v3.mjs.map +1 -0
  60. package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs +69 -0
  61. package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs.map +1 -0
  62. package/dist/esm/core/interaction/batch/parse-row.mjs +67 -0
  63. package/dist/esm/core/interaction/batch/parse-row.mjs.map +1 -0
  64. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs +42 -0
  65. package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs.map +1 -0
  66. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs +121 -0
  67. package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs.map +1 -0
  68. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs +32 -0
  69. package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs.map +1 -0
  70. package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs +32 -0
  71. package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs.map +1 -0
  72. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs +118 -0
  73. package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs.map +1 -0
  74. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs +32 -0
  75. package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs.map +1 -0
  76. package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs +32 -0
  77. package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs.map +1 -0
  78. package/dist/esm/core/interaction/batch/v2.mjs +44 -0
  79. package/dist/esm/core/interaction/batch/v2.mjs.map +1 -0
  80. package/dist/esm/core/interaction/batch/v3.mjs +42 -0
  81. package/dist/esm/core/interaction/batch/v3.mjs.map +1 -0
  82. package/dist/esm/core/language/list.mjs +56 -0
  83. package/dist/esm/core/language/list.mjs.map +1 -0
  84. package/dist/esm/core/request-id-generator.mjs +42 -0
  85. package/dist/esm/core/request-id-generator.mjs.map +1 -0
  86. package/dist/esm/core/result.mjs +101 -0
  87. package/dist/esm/core/result.mjs.map +1 -0
  88. package/dist/esm/core/sdk-error.mjs +83 -0
  89. package/dist/esm/core/sdk-error.mjs.map +1 -0
  90. package/dist/esm/core/tools/abstract-tool.mjs +24 -0
  91. package/dist/esm/core/tools/abstract-tool.mjs.map +1 -0
  92. package/dist/esm/core/tools/healthcheck.mjs +48 -0
  93. package/dist/esm/core/tools/healthcheck.mjs.map +1 -0
  94. package/dist/esm/core/tools/manager.mjs +50 -0
  95. package/dist/esm/core/tools/manager.mjs.map +1 -0
  96. package/dist/esm/core/tools/ping.mjs +56 -0
  97. package/dist/esm/core/tools/ping.mjs.map +1 -0
  98. package/dist/esm/core/version-manager.mjs +116 -0
  99. package/dist/esm/core/version-manager.mjs.map +1 -0
  100. package/dist/esm/frame/auth.mjs +98 -0
  101. package/dist/esm/frame/auth.mjs.map +1 -0
  102. package/dist/esm/frame/b24.mjs +170 -0
  103. package/dist/esm/frame/b24.mjs.map +1 -0
  104. package/dist/esm/frame/dialog.mjs +78 -0
  105. package/dist/esm/frame/dialog.mjs.map +1 -0
  106. package/dist/esm/frame/frame.mjs +101 -0
  107. package/dist/esm/frame/frame.mjs.map +1 -0
  108. package/dist/esm/frame/message/commands.mjs +37 -0
  109. package/dist/esm/frame/message/commands.mjs.map +1 -0
  110. package/dist/esm/frame/message/controller.mjs +177 -0
  111. package/dist/esm/frame/message/controller.mjs.map +1 -0
  112. package/dist/esm/frame/options.mjs +106 -0
  113. package/dist/esm/frame/options.mjs.map +1 -0
  114. package/dist/esm/frame/parent.mjs +250 -0
  115. package/dist/esm/frame/parent.mjs.map +1 -0
  116. package/dist/esm/frame/placement.mjs +131 -0
  117. package/dist/esm/frame/placement.mjs.map +1 -0
  118. package/dist/esm/frame/slider.mjs +156 -0
  119. package/dist/esm/frame/slider.mjs.map +1 -0
  120. package/dist/esm/helper/abstract-helper.mjs +52 -0
  121. package/dist/esm/helper/abstract-helper.mjs.map +1 -0
  122. package/dist/esm/helper/app-manager.mjs +37 -0
  123. package/dist/esm/helper/app-manager.mjs.map +1 -0
  124. package/dist/esm/helper/currency-manager.mjs +207 -0
  125. package/dist/esm/helper/currency-manager.mjs.map +1 -0
  126. package/dist/esm/helper/helper-manager.mjs +388 -0
  127. package/dist/esm/helper/helper-manager.mjs.map +1 -0
  128. package/dist/esm/helper/license-manager.mjs +50 -0
  129. package/dist/esm/helper/license-manager.mjs.map +1 -0
  130. package/dist/esm/helper/options-manager.mjs +196 -0
  131. package/dist/esm/helper/options-manager.mjs.map +1 -0
  132. package/dist/esm/helper/payment-manager.mjs +33 -0
  133. package/dist/esm/helper/payment-manager.mjs.map +1 -0
  134. package/dist/esm/helper/profile-manager.mjs +33 -0
  135. package/dist/esm/helper/profile-manager.mjs.map +1 -0
  136. package/dist/esm/helper/use-b24-helper.mjs +84 -0
  137. package/dist/esm/helper/use-b24-helper.mjs.map +1 -0
  138. package/dist/esm/hook/auth.mjs +77 -0
  139. package/dist/esm/hook/auth.mjs.map +1 -0
  140. package/dist/esm/hook/b24.mjs +115 -0
  141. package/dist/esm/hook/b24.mjs.map +1 -0
  142. package/dist/esm/index.d.mts +2757 -525
  143. package/dist/esm/index.d.ts +2757 -525
  144. package/dist/esm/index.mjs +70 -14111
  145. package/dist/esm/index.mjs.map +1 -1
  146. package/dist/esm/loader-b24frame.mjs +101 -0
  147. package/dist/esm/loader-b24frame.mjs.map +1 -0
  148. package/dist/esm/logger/abstract-logger.mjs +69 -0
  149. package/dist/esm/logger/abstract-logger.mjs.map +1 -0
  150. package/dist/esm/logger/browser.mjs +162 -0
  151. package/dist/esm/logger/browser.mjs.map +1 -0
  152. package/dist/esm/logger/formatter/abstract-formatter.mjs +34 -0
  153. package/dist/esm/logger/formatter/abstract-formatter.mjs.map +1 -0
  154. package/dist/esm/logger/formatter/json-formatter.mjs +34 -0
  155. package/dist/esm/logger/formatter/json-formatter.mjs.map +1 -0
  156. package/dist/esm/logger/formatter/line-formatter.mjs +41 -0
  157. package/dist/esm/logger/formatter/line-formatter.mjs.map +1 -0
  158. package/dist/esm/logger/formatter/telegram-formatter.mjs +103 -0
  159. package/dist/esm/logger/formatter/telegram-formatter.mjs.map +1 -0
  160. package/dist/esm/logger/handler/abstract-handler.mjs +39 -0
  161. package/dist/esm/logger/handler/abstract-handler.mjs.map +1 -0
  162. package/dist/esm/logger/handler/consola-adapter.mjs +62 -0
  163. package/dist/esm/logger/handler/consola-adapter.mjs.map +1 -0
  164. package/dist/esm/logger/handler/console-handler.mjs +98 -0
  165. package/dist/esm/logger/handler/console-handler.mjs.map +1 -0
  166. package/dist/esm/logger/handler/console-v2-handler.mjs +51 -0
  167. package/dist/esm/logger/handler/console-v2-handler.mjs.map +1 -0
  168. package/dist/esm/logger/handler/memory-handler.mjs +48 -0
  169. package/dist/esm/logger/handler/memory-handler.mjs.map +1 -0
  170. package/dist/esm/logger/handler/stream-handler.mjs +73 -0
  171. package/dist/esm/logger/handler/stream-handler.mjs.map +1 -0
  172. package/dist/esm/logger/handler/telegram-handler.mjs +157 -0
  173. package/dist/esm/logger/handler/telegram-handler.mjs.map +1 -0
  174. package/dist/esm/logger/handler/winston-adapter.mjs +57 -0
  175. package/dist/esm/logger/handler/winston-adapter.mjs.map +1 -0
  176. package/dist/esm/logger/logger-factory.mjs +67 -0
  177. package/dist/esm/logger/logger-factory.mjs.map +1 -0
  178. package/dist/esm/logger/logger.mjs +76 -0
  179. package/dist/esm/logger/logger.mjs.map +1 -0
  180. package/dist/esm/logger/null-logger.mjs +32 -0
  181. package/dist/esm/logger/null-logger.mjs.map +1 -0
  182. package/dist/esm/logger/processor/memory-usage-processor.mjs +20 -0
  183. package/dist/esm/logger/processor/memory-usage-processor.mjs.map +1 -0
  184. package/dist/esm/logger/processor/pid-processor.mjs +20 -0
  185. package/dist/esm/logger/processor/pid-processor.mjs.map +1 -0
  186. package/dist/esm/oauth/auth.mjs +211 -0
  187. package/dist/esm/oauth/auth.mjs.map +1 -0
  188. package/dist/esm/oauth/b24.mjs +117 -0
  189. package/dist/esm/oauth/b24.mjs.map +1 -0
  190. package/dist/esm/oauth/refresh-token-error.mjs +20 -0
  191. package/dist/esm/oauth/refresh-token-error.mjs.map +1 -0
  192. package/dist/esm/pullClient/abstract-connector.mjs +78 -0
  193. package/dist/esm/pullClient/abstract-connector.mjs.map +1 -0
  194. package/dist/esm/pullClient/channel-manager.mjs +89 -0
  195. package/dist/esm/pullClient/channel-manager.mjs.map +1 -0
  196. package/dist/esm/pullClient/client.mjs +2064 -0
  197. package/dist/esm/pullClient/client.mjs.map +1 -0
  198. package/dist/esm/pullClient/errors.mjs +31 -0
  199. package/dist/esm/pullClient/errors.mjs.map +1 -0
  200. package/dist/esm/pullClient/json-rpc.mjs +210 -0
  201. package/dist/esm/pullClient/json-rpc.mjs.map +1 -0
  202. package/dist/esm/pullClient/long-polling-connector.mjs +157 -0
  203. package/dist/esm/pullClient/long-polling-connector.mjs.map +1 -0
  204. package/dist/esm/pullClient/protobuf/index.mjs +17 -0
  205. package/dist/esm/pullClient/protobuf/index.mjs.map +1 -0
  206. package/dist/esm/pullClient/protobuf/model.mjs +1058 -0
  207. package/dist/esm/pullClient/protobuf/model.mjs.map +1 -0
  208. package/dist/esm/pullClient/protobuf/protobuf.mjs +4653 -0
  209. package/dist/esm/pullClient/protobuf/protobuf.mjs.map +1 -0
  210. package/dist/esm/pullClient/shared-config.mjs +133 -0
  211. package/dist/esm/pullClient/shared-config.mjs.map +1 -0
  212. package/dist/esm/pullClient/storage-manager.mjs +72 -0
  213. package/dist/esm/pullClient/storage-manager.mjs.map +1 -0
  214. package/dist/esm/pullClient/web-socket-connector.mjs +129 -0
  215. package/dist/esm/pullClient/web-socket-connector.mjs.map +1 -0
  216. package/dist/esm/tools/browser.mjs +154 -0
  217. package/dist/esm/tools/browser.mjs.map +1 -0
  218. package/dist/esm/tools/environment.mjs +29 -0
  219. package/dist/esm/tools/environment.mjs.map +1 -0
  220. package/dist/esm/tools/formatters/iban.mjs +304 -0
  221. package/dist/esm/tools/formatters/iban.mjs.map +1 -0
  222. package/dist/esm/tools/formatters/numbers.mjs +64 -0
  223. package/dist/esm/tools/formatters/numbers.mjs.map +1 -0
  224. package/dist/esm/tools/index.mjs +37 -0
  225. package/dist/esm/tools/index.mjs.map +1 -0
  226. package/dist/esm/tools/scroll-size.mjs +25 -0
  227. package/dist/esm/tools/scroll-size.mjs.map +1 -0
  228. package/dist/esm/tools/text.mjs +208 -0
  229. package/dist/esm/tools/text.mjs.map +1 -0
  230. package/dist/esm/tools/type.mjs +337 -0
  231. package/dist/esm/tools/type.mjs.map +1 -0
  232. package/dist/esm/tools/use-formatters.mjs +460 -0
  233. package/dist/esm/tools/use-formatters.mjs.map +1 -0
  234. package/dist/esm/tools/uuidv7.mjs +54 -0
  235. package/dist/esm/tools/uuidv7.mjs.map +1 -0
  236. package/dist/esm/types/b24-helper.mjs +56 -0
  237. package/dist/esm/types/b24-helper.mjs.map +1 -0
  238. package/dist/esm/types/b24.mjs +16 -0
  239. package/dist/esm/types/b24.mjs.map +1 -0
  240. package/dist/esm/types/bizproc/index.mjs +187 -0
  241. package/dist/esm/types/bizproc/index.mjs.map +1 -0
  242. package/dist/esm/types/catalog/index.mjs +35 -0
  243. package/dist/esm/types/catalog/index.mjs.map +1 -0
  244. package/dist/esm/types/common.mjs +31 -0
  245. package/dist/esm/types/common.mjs.map +1 -0
  246. package/dist/esm/types/crm/entity-type.mjs +57 -0
  247. package/dist/esm/types/crm/entity-type.mjs.map +1 -0
  248. package/dist/esm/types/crm/productrow.mjs +17 -0
  249. package/dist/esm/types/crm/productrow.mjs.map +1 -0
  250. package/dist/esm/types/logger.mjs +22 -0
  251. package/dist/esm/types/logger.mjs.map +1 -0
  252. package/dist/esm/types/pull.mjs +83 -0
  253. package/dist/esm/types/pull.mjs.map +1 -0
  254. package/dist/umd/index.js +31216 -26905
  255. package/dist/umd/index.js.map +1 -1
  256. package/dist/umd/index.min.js +63 -40
  257. package/dist/umd/index.min.js.map +1 -1
  258. package/package.json +36 -31
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.1
4
+ * @copyright (c) 2026 Bitrix24
5
+ * @license MIT
6
+ * @see https://github.com/bitrix24/b24jssdk
7
+ * @see https://bitrix24.github.io/b24jssdk/
8
+ */
9
+ import { AbstractHelper } from './abstract-helper.mjs';
10
+ import { StatusDescriptions } from '../types/b24-helper.mjs';
11
+
12
+ var __defProp = Object.defineProperty;
13
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
14
+ class AppManager extends AbstractHelper {
15
+ static {
16
+ __name(this, "AppManager");
17
+ }
18
+ _data = null;
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ async initData(data) {
23
+ this._data = data;
24
+ }
25
+ get data() {
26
+ if (null === this._data) {
27
+ throw new Error("AppManager.data not initialized");
28
+ }
29
+ return this._data;
30
+ }
31
+ get statusCode() {
32
+ return StatusDescriptions[this.data.status] || "Unknown status";
33
+ }
34
+ }
35
+
36
+ export { AppManager };
37
+ //# sourceMappingURL=app-manager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-manager.mjs","sources":["../../../src/helper/app-manager.ts"],"sourcesContent":["import type { TypeApp } from '../types/b24-helper'\nimport { AbstractHelper } from './abstract-helper'\nimport { StatusDescriptions } from '../types/b24-helper'\n\nexport class AppManager extends AbstractHelper {\n protected override _data: null | TypeApp = null\n\n /**\n * @inheritDoc\n */\n override async initData(data: TypeApp): Promise<void> {\n this._data = data\n }\n\n get data(): TypeApp {\n if (null === this._data) {\n throw new Error('AppManager.data not initialized')\n }\n\n return this._data\n }\n\n get statusCode(): string {\n return (\n StatusDescriptions[this.data.status as keyof typeof StatusDescriptions]\n || 'Unknown status'\n )\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAIO,MAAM,mBAAmB,cAAA,CAAe;AAAA,EAJ/C;AAI+C,IAAA,MAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA;AAAA,EAC1B,KAAA,GAAwB,IAAA;AAAA;AAAA;AAAA;AAAA,EAK3C,MAAe,SAAS,IAAA,EAA8B;AACpD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EACf;AAAA,EAEA,IAAI,IAAA,GAAgB;AAClB,IAAA,IAAI,IAAA,KAAS,KAAK,KAAA,EAAO;AACvB,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,IAAI,UAAA,GAAqB;AACvB,IAAA,OACE,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,MAAyC,CAAA,IACnE,gBAAA;AAAA,EAEP;AACF;;;;"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.1
4
+ * @copyright (c) 2026 Bitrix24
5
+ * @license MIT
6
+ * @see https://github.com/bitrix24/b24jssdk
7
+ * @see https://bitrix24.github.io/b24jssdk/
8
+ */
9
+ import { AbstractHelper, UnhandledMatchError } from './abstract-helper.mjs';
10
+ import { Type } from '../tools/type.mjs';
11
+ import { Text } from '../tools/text.mjs';
12
+
13
+ var __defProp = Object.defineProperty;
14
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
+ class CurrencyManager extends AbstractHelper {
16
+ static {
17
+ __name(this, "CurrencyManager");
18
+ }
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ async initData(data) {
23
+ this._data = {
24
+ currencyBase: "?",
25
+ currencyList: /* @__PURE__ */ new Map()
26
+ };
27
+ this.setBaseCurrency(data.currencyBase);
28
+ this.setCurrencyList(data.currencyList);
29
+ try {
30
+ await this.loadData();
31
+ } catch (error) {
32
+ if (error instanceof Error) {
33
+ throw error;
34
+ }
35
+ this.getLogger().error("Failed to load data", { error });
36
+ throw new Error("Failed to load data");
37
+ }
38
+ }
39
+ async loadData() {
40
+ const batchRequest = this.currencyList.map((currencyCode) => {
41
+ return {
42
+ method: "crm.currency.get",
43
+ params: {
44
+ id: currencyCode
45
+ }
46
+ };
47
+ });
48
+ if (batchRequest.length === 0) {
49
+ return Promise.resolve();
50
+ }
51
+ try {
52
+ const response = await this._b24.callBatchByChunk(batchRequest, true);
53
+ const data = response.getData();
54
+ data.forEach((row) => {
55
+ if (typeof row.LANG === "undefined") {
56
+ return;
57
+ }
58
+ const currencyCode = row.CURRENCY;
59
+ const currency = this.data.currencyList.get(currencyCode);
60
+ if (typeof currency === "undefined") {
61
+ return;
62
+ }
63
+ for (const [langCode, formatData] of Object.entries(row.LANG)) {
64
+ currency.lang[langCode] = {
65
+ decimals: Number.parseInt(formatData.DECIMALS),
66
+ decPoint: formatData.DEC_POINT,
67
+ formatString: formatData.FORMAT_STRING,
68
+ fullName: formatData.FULL_NAME,
69
+ isHideZero: formatData.HIDE_ZERO === "Y",
70
+ thousandsSep: formatData.THOUSANDS_SEP,
71
+ thousandsVariant: formatData.THOUSANDS_VARIANT
72
+ };
73
+ switch (currency.lang[langCode].thousandsVariant) {
74
+ case "N":
75
+ currency.lang[langCode].thousandsSep = "";
76
+ break;
77
+ case "D":
78
+ currency.lang[langCode].thousandsSep = ".";
79
+ break;
80
+ case "C":
81
+ currency.lang[langCode].thousandsSep = ",";
82
+ break;
83
+ case "S":
84
+ currency.lang[langCode].thousandsSep = " ";
85
+ break;
86
+ case "B":
87
+ currency.lang[langCode].thousandsSep = "&nbsp;";
88
+ break;
89
+ // case 'OWN': ////
90
+ default:
91
+ if (!Type.isStringFilled(currency.lang[langCode].thousandsSep)) {
92
+ currency.lang[langCode].thousandsSep = " ";
93
+ }
94
+ break;
95
+ }
96
+ }
97
+ });
98
+ } catch (error) {
99
+ this.getLogger().error("Failed to load data", { error });
100
+ }
101
+ }
102
+ get data() {
103
+ if (null === this._data) {
104
+ throw new Error("CurrencyManager.data not initialized");
105
+ }
106
+ return this._data;
107
+ }
108
+ // region BaseCurrency ////
109
+ setBaseCurrency(currencyBase) {
110
+ this._data.currencyBase = currencyBase;
111
+ }
112
+ get baseCurrency() {
113
+ return this.data.currencyBase;
114
+ }
115
+ // endregion ////
116
+ // region CurrencyList ////
117
+ setCurrencyList(list = []) {
118
+ this.data.currencyList.clear();
119
+ for (const row of list) {
120
+ this.data.currencyList.set(row.CURRENCY, {
121
+ amount: Number.parseFloat(row.CURRENCY),
122
+ amountCnt: Number.parseInt(row.AMOUNT_CNT),
123
+ isBase: row.BASE === "Y",
124
+ currencyCode: row.CURRENCY,
125
+ dateUpdate: Text.toDateTime(row.DATE_UPDATE),
126
+ decimals: Number.parseInt(row.DECIMALS),
127
+ decPoint: row.DEC_POINT,
128
+ formatString: row.FORMAT_STRING,
129
+ fullName: row.FULL_NAME,
130
+ lid: row.LID,
131
+ sort: Number.parseInt(row.SORT),
132
+ thousandsSep: row?.THOUSANDS_SEP || null,
133
+ lang: {}
134
+ });
135
+ }
136
+ }
137
+ // endregion ////
138
+ // region Info ////
139
+ getCurrencyFullName(currencyCode, langCode) {
140
+ const currency = this.data.currencyList.get(currencyCode);
141
+ if (typeof currency === "undefined") {
142
+ throw new UnhandledMatchError(currencyCode);
143
+ }
144
+ let fullName = currency.fullName;
145
+ if (!(typeof langCode === "undefined")) {
146
+ const langFormatter = currency.lang[langCode];
147
+ if (!Type.isUndefined(langFormatter)) {
148
+ fullName = langFormatter.fullName;
149
+ }
150
+ }
151
+ return fullName;
152
+ }
153
+ getCurrencyLiteral(currencyCode, langCode) {
154
+ const currency = this.data.currencyList.get(currencyCode);
155
+ if (typeof currency === "undefined") {
156
+ throw new UnhandledMatchError(currencyCode);
157
+ }
158
+ let formatString = currency.formatString;
159
+ if (!(typeof langCode === "undefined")) {
160
+ const langFormatter = currency.lang[langCode];
161
+ if (!Type.isUndefined(langFormatter)) {
162
+ formatString = langFormatter.formatString;
163
+ }
164
+ }
165
+ return formatString.replaceAll("&#", "&%").replaceAll("#", "").replaceAll("&%", "&#").trim() || "";
166
+ }
167
+ get currencyList() {
168
+ return [...this.data.currencyList.keys()];
169
+ }
170
+ // endregion ////
171
+ // region Format ////
172
+ format(value, currencyCode, langCode) {
173
+ const currency = this.data.currencyList.get(currencyCode);
174
+ if (typeof currency === "undefined") {
175
+ throw new UnhandledMatchError(currencyCode);
176
+ }
177
+ const options = {
178
+ formatString: currency.formatString,
179
+ decimals: currency.decimals,
180
+ decPoint: currency.decPoint,
181
+ thousandsSep: currency.thousandsSep
182
+ };
183
+ if (!Type.isStringFilled(options.thousandsSep)) {
184
+ options.thousandsSep = "";
185
+ }
186
+ const langFormatter = currency.lang[langCode];
187
+ if (!Type.isUndefined(langFormatter)) {
188
+ options.formatString = langFormatter.formatString;
189
+ options.decimals = langFormatter.decimals;
190
+ options.decPoint = langFormatter.decPoint;
191
+ options.thousandsSep = langFormatter.thousandsSep;
192
+ }
193
+ return options.formatString.replaceAll("&#", "&%").replace(
194
+ "#",
195
+ Text.numberFormat(
196
+ value,
197
+ options.decimals,
198
+ options.decPoint,
199
+ options.thousandsSep
200
+ )
201
+ ).replaceAll("&%", "&#") || "";
202
+ }
203
+ // endregion ////
204
+ }
205
+
206
+ export { CurrencyManager };
207
+ //# sourceMappingURL=currency-manager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"currency-manager.mjs","sources":["../../../src/helper/currency-manager.ts"],"sourcesContent":["import type { BoolString, ISODate, NumberString } from '../types/common'\nimport type { Currency, CurrencyFormat } from '../types/b24-helper'\nimport { AbstractHelper, UnhandledMatchError } from './abstract-helper'\nimport { Type } from '../tools/type'\nimport { Text } from '../tools/text'\n\ntype CurrencyFormatInit = {\n DECIMALS: NumberString\n DEC_POINT: string\n FORMAT_STRING: string\n FULL_NAME: string\n HIDE_ZERO: BoolString\n THOUSANDS_SEP?: string\n THOUSANDS_VARIANT: string\n}\n\ntype CurrencyInit = {\n AMOUNT: NumberString\n AMOUNT_CNT: NumberString\n BASE: BoolString\n CURRENCY: string\n DATE_UPDATE: ISODate\n DECIMALS: NumberString\n DEC_POINT: string\n FORMAT_STRING: string\n FULL_NAME: string\n LID: string\n SORT: NumberString\n THOUSANDS_SEP?: string\n LANG?: Record<string, CurrencyFormatInit>\n}\n\ntype CurrencyInitData = {\n currencyBase: string\n currencyList: CurrencyInit[]\n}\n\ntype CurrencyData = {\n currencyBase: string\n currencyList: Map<string, Currency>\n}\n\nexport class CurrencyManager extends AbstractHelper {\n /**\n * @inheritDoc\n */\n override async initData(data: CurrencyInitData): Promise<void> {\n this._data = {\n currencyBase: '?',\n currencyList: new Map()\n } as CurrencyData\n\n this.setBaseCurrency(data.currencyBase)\n this.setCurrencyList(data.currencyList)\n\n try {\n await this.loadData()\n } catch (error) {\n if (error instanceof Error) {\n throw error\n }\n\n this.getLogger().error('Failed to load data', { error })\n throw new Error('Failed to load data')\n }\n }\n\n async loadData(): Promise<void> {\n const batchRequest: {\n method: string\n params: { id: string }\n }[] = this.currencyList.map((currencyCode) => {\n return {\n method: 'crm.currency.get',\n params: {\n id: currencyCode\n }\n }\n })\n\n if (batchRequest.length === 0) {\n return Promise.resolve()\n }\n\n try {\n const response = await this._b24.callBatchByChunk(batchRequest, true)\n const data = response.getData()\n\n data.forEach((row: CurrencyInit) => {\n if (typeof row.LANG === 'undefined') {\n return\n }\n\n const currencyCode = row.CURRENCY\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n return\n }\n\n for (const [langCode, formatData] of Object.entries(row.LANG)) {\n currency.lang[langCode] = {\n decimals: Number.parseInt(formatData.DECIMALS),\n decPoint: formatData.DEC_POINT,\n formatString: formatData.FORMAT_STRING,\n fullName: formatData.FULL_NAME,\n isHideZero: formatData.HIDE_ZERO === 'Y',\n thousandsSep: formatData.THOUSANDS_SEP,\n thousandsVariant: formatData.THOUSANDS_VARIANT\n } as CurrencyFormat\n\n switch (currency.lang[langCode].thousandsVariant) {\n case 'N':\n currency.lang[langCode].thousandsSep = ''\n break\n case 'D':\n currency.lang[langCode].thousandsSep = '.'\n break\n case 'C':\n currency.lang[langCode].thousandsSep = ','\n break\n case 'S':\n currency.lang[langCode].thousandsSep = ' '\n break\n case 'B':\n currency.lang[langCode].thousandsSep = '&nbsp;'\n break\n // case 'OWN': ////\n default:\n if (!Type.isStringFilled(currency.lang[langCode].thousandsSep)) {\n currency.lang[langCode].thousandsSep = ' '\n }\n break\n }\n }\n })\n } catch (error) {\n this.getLogger().error('Failed to load data', { error })\n }\n }\n\n get data(): CurrencyData {\n if (null === this._data) {\n throw new Error('CurrencyManager.data not initialized')\n }\n\n return this._data\n }\n\n // region BaseCurrency ////\n setBaseCurrency(currencyBase: string) {\n this._data.currencyBase = currencyBase\n }\n\n get baseCurrency(): string {\n return this.data.currencyBase\n }\n // endregion ////\n\n // region CurrencyList ////\n setCurrencyList(list: CurrencyInit[] = []) {\n this.data.currencyList.clear()\n\n for (const row of list) {\n this.data.currencyList.set(row.CURRENCY, {\n amount: Number.parseFloat(row.CURRENCY),\n amountCnt: Number.parseInt(row.AMOUNT_CNT),\n isBase: row.BASE === 'Y',\n currencyCode: row.CURRENCY,\n dateUpdate: Text.toDateTime(row.DATE_UPDATE),\n decimals: Number.parseInt(row.DECIMALS),\n decPoint: row.DEC_POINT,\n formatString: row.FORMAT_STRING,\n fullName: row.FULL_NAME,\n lid: row.LID,\n sort: Number.parseInt(row.SORT),\n thousandsSep: row?.THOUSANDS_SEP || null,\n lang: {}\n } as Currency)\n }\n }\n // endregion ////\n\n // region Info ////\n getCurrencyFullName(currencyCode: string, langCode: string): string {\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n throw new UnhandledMatchError(currencyCode)\n }\n\n let fullName = currency.fullName\n\n if (!(typeof langCode === 'undefined')) {\n const langFormatter = currency.lang[langCode]\n if (!Type.isUndefined(langFormatter)) {\n fullName = langFormatter.fullName\n }\n }\n\n return fullName\n }\n\n getCurrencyLiteral(currencyCode: string, langCode?: string): string {\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n throw new UnhandledMatchError(currencyCode)\n }\n\n let formatString = currency.formatString\n\n if (!(typeof langCode === 'undefined')) {\n const langFormatter = currency.lang[langCode]\n if (!Type.isUndefined(langFormatter)) {\n formatString = langFormatter.formatString\n }\n }\n\n return (\n formatString\n .replaceAll('&#', '&%')\n .replaceAll('#', '')\n .replaceAll('&%', '&#')\n .trim() || ''\n )\n }\n\n get currencyList(): string[] {\n return [...this.data.currencyList.keys()]\n }\n // endregion ////\n\n // region Format ////\n format(value: number, currencyCode: string, langCode: string): string {\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n throw new UnhandledMatchError(currencyCode)\n }\n\n const options = {\n formatString: currency.formatString,\n decimals: currency.decimals,\n decPoint: currency.decPoint,\n thousandsSep: currency.thousandsSep\n }\n if (!Type.isStringFilled(options.thousandsSep)) {\n options.thousandsSep = ''\n }\n\n const langFormatter = currency.lang[langCode]\n if (!Type.isUndefined(langFormatter)) {\n options.formatString = langFormatter.formatString\n options.decimals = langFormatter.decimals\n options.decPoint = langFormatter.decPoint\n options.thousandsSep = langFormatter.thousandsSep\n }\n\n return (\n options.formatString\n .replaceAll('&#', '&%')\n .replace(\n '#',\n Text.numberFormat(\n value,\n options.decimals,\n options.decPoint,\n options.thousandsSep\n )\n )\n .replaceAll('&%', '&#') || ''\n )\n }\n // endregion ////\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,388 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.1
4
+ * @copyright (c) 2026 Bitrix24
5
+ * @license MIT
6
+ * @see https://github.com/bitrix24/b24jssdk
7
+ * @see https://bitrix24.github.io/b24jssdk/
8
+ */
9
+ import { ProfileManager } from './profile-manager.mjs';
10
+ import { AppManager } from './app-manager.mjs';
11
+ import { PaymentManager } from './payment-manager.mjs';
12
+ import { LicenseManager } from './license-manager.mjs';
13
+ import { CurrencyManager } from './currency-manager.mjs';
14
+ import { OptionsManager } from './options-manager.mjs';
15
+ import { Text } from '../tools/text.mjs';
16
+ import { LoadDataType, TypeSpecificUrl } from '../types/b24-helper.mjs';
17
+ import { PullClient } from '../pullClient/client.mjs';
18
+ import { LoggerFactory } from '../logger/logger-factory.mjs';
19
+
20
+ var __defProp = Object.defineProperty;
21
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
22
+ class B24HelperManager {
23
+ static {
24
+ __name(this, "B24HelperManager");
25
+ }
26
+ _b24;
27
+ _isInit = false;
28
+ _profile = null;
29
+ _app = null;
30
+ _payment = null;
31
+ _license = null;
32
+ _currency = null;
33
+ _appOptions = null;
34
+ _userOptions = null;
35
+ _b24PullClient = null;
36
+ _pullClientUnSubscribe = [];
37
+ _pullClientModuleId = "";
38
+ _logger;
39
+ constructor(b24) {
40
+ this._logger = LoggerFactory.createNullLogger();
41
+ this._b24 = b24;
42
+ }
43
+ setLogger(logger) {
44
+ this._logger = logger;
45
+ if (null !== this._profile) {
46
+ this._profile.setLogger(this.getLogger());
47
+ }
48
+ if (null !== this._app) {
49
+ this._app.setLogger(this.getLogger());
50
+ }
51
+ if (null !== this._payment) {
52
+ this._payment.setLogger(this.getLogger());
53
+ }
54
+ if (null !== this._license) {
55
+ this._license.setLogger(this.getLogger());
56
+ }
57
+ if (null !== this._currency) {
58
+ this._currency.setLogger(this.getLogger());
59
+ }
60
+ if (null !== this._appOptions) {
61
+ this._appOptions.setLogger(this.getLogger());
62
+ }
63
+ if (null !== this._userOptions) {
64
+ this._userOptions.setLogger(this.getLogger());
65
+ }
66
+ }
67
+ getLogger() {
68
+ return this._logger;
69
+ }
70
+ destroy() {
71
+ this._destroyPullClient();
72
+ }
73
+ // region loadData ////
74
+ async loadData(dataTypes = [LoadDataType.App, LoadDataType.Profile]) {
75
+ const batchMethods = {
76
+ [LoadDataType.App]: { method: "app.info" },
77
+ [LoadDataType.Profile]: { method: "profile" },
78
+ [LoadDataType.Currency]: [
79
+ { method: "crm.currency.base.get" },
80
+ { method: "crm.currency.list" }
81
+ ],
82
+ [LoadDataType.AppOptions]: { method: "app.option.get" },
83
+ [LoadDataType.UserOptions]: { method: "user.option.get" }
84
+ };
85
+ const batchRequest = dataTypes.reduce(
86
+ (acc, type) => {
87
+ if (batchMethods[type]) {
88
+ if (Array.isArray(batchMethods[type])) {
89
+ for (const [index, row] of batchMethods[type].entries()) {
90
+ acc[`get_${type}_${index}`] = row;
91
+ }
92
+ } else {
93
+ acc[`get_${type}`] = batchMethods[type];
94
+ }
95
+ }
96
+ return acc;
97
+ },
98
+ {}
99
+ );
100
+ try {
101
+ const response = await this._b24.callBatch(batchRequest);
102
+ const data = response.getData();
103
+ if (data[`get_${LoadDataType.App}`]) {
104
+ this._app = await this.parseAppData(data[`get_${LoadDataType.App}`]);
105
+ this._payment = await this.parsePaymentData(
106
+ data[`get_${LoadDataType.App}`]
107
+ );
108
+ this._license = await this.parseLicenseData(
109
+ data[`get_${LoadDataType.App}`]
110
+ );
111
+ }
112
+ if (data[`get_${LoadDataType.Profile}`]) {
113
+ this._profile = await this.parseUserData(
114
+ data[`get_${LoadDataType.Profile}`]
115
+ );
116
+ }
117
+ if (data[`get_${LoadDataType.Currency}_0`] && data[`get_${LoadDataType.Currency}_1`]) {
118
+ this._currency = await this.parseCurrencyData({
119
+ currencyBase: data[`get_${LoadDataType.Currency}_0`],
120
+ currencyList: data[`get_${LoadDataType.Currency}_1`]
121
+ });
122
+ }
123
+ if (data[`get_${LoadDataType.AppOptions}`]) {
124
+ this._appOptions = await this.parseOptionsData(
125
+ "app",
126
+ data[`get_${LoadDataType.AppOptions}`]
127
+ );
128
+ }
129
+ if (data[`get_${LoadDataType.UserOptions}`]) {
130
+ this._userOptions = await this.parseOptionsData(
131
+ "user",
132
+ data[`get_${LoadDataType.UserOptions}`]
133
+ );
134
+ }
135
+ this._isInit = true;
136
+ } catch (error) {
137
+ if (error instanceof Error) {
138
+ throw error;
139
+ }
140
+ this.getLogger().error("Failed to load data", { error });
141
+ throw new Error("Failed to load data");
142
+ }
143
+ }
144
+ async parseUserData(profileData) {
145
+ const manager = new ProfileManager(this._b24);
146
+ manager.setLogger(this.getLogger());
147
+ return manager.initData({
148
+ id: Number(profileData.ID),
149
+ isAdmin: profileData.ADMIN === true,
150
+ lastName: profileData?.LAST_NAME || "",
151
+ name: profileData?.NAME || "",
152
+ gender: profileData?.PERSONAL_GENDER || "",
153
+ photo: profileData?.PERSONAL_PHOTO || "",
154
+ TimeZone: profileData?.TIME_ZONE || "",
155
+ TimeZoneOffset: profileData?.TIME_ZONE_OFFSET
156
+ }).then(() => {
157
+ return manager;
158
+ });
159
+ }
160
+ async parseAppData(appData) {
161
+ const manager = new AppManager(this._b24);
162
+ manager.setLogger(this.getLogger());
163
+ return manager.initData({
164
+ id: Number.parseInt(appData.ID),
165
+ code: appData.CODE,
166
+ version: Number.parseInt(appData.VERSION),
167
+ status: appData.STATUS,
168
+ isInstalled: appData.INSTALLED
169
+ }).then(() => {
170
+ return manager;
171
+ });
172
+ }
173
+ async parsePaymentData(appData) {
174
+ const manager = new PaymentManager(this._b24);
175
+ manager.setLogger(this.getLogger());
176
+ return manager.initData({
177
+ isExpired: appData.PAYMENT_EXPIRED === "Y",
178
+ days: Number.parseInt(appData.DAYS || "0")
179
+ }).then(() => {
180
+ return manager;
181
+ });
182
+ }
183
+ async parseLicenseData(appData) {
184
+ const manager = new LicenseManager(this._b24);
185
+ manager.setLogger(this.getLogger());
186
+ return manager.initData({
187
+ languageId: appData.LANGUAGE_ID,
188
+ license: appData.LICENSE,
189
+ licensePrevious: appData.LICENSE_PREVIOUS,
190
+ licenseType: appData.LICENSE_TYPE,
191
+ licenseFamily: appData.LICENSE_FAMILY,
192
+ isSelfHosted: appData.LICENSE.includes("selfhosted")
193
+ }).then(() => {
194
+ return manager;
195
+ });
196
+ }
197
+ async parseCurrencyData(currencyData) {
198
+ const manager = new CurrencyManager(this._b24);
199
+ manager.setLogger(this.getLogger());
200
+ return manager.initData(currencyData).then(() => {
201
+ return manager;
202
+ });
203
+ }
204
+ async parseOptionsData(type, optionsData) {
205
+ const manager = new OptionsManager(this._b24, type);
206
+ manager.setLogger(this.getLogger());
207
+ return manager.initData(optionsData).then(() => {
208
+ return manager;
209
+ });
210
+ }
211
+ // endregion ////
212
+ // region Get ////
213
+ get isInit() {
214
+ return this._isInit;
215
+ }
216
+ get forB24Form() {
217
+ this.ensureInitialized();
218
+ if (null === this._profile) {
219
+ throw new Error("B24HelperManager.profileInfo not initialized");
220
+ }
221
+ if (null === this._app) {
222
+ throw new Error("B24HelperManager.appInfo not initialized");
223
+ }
224
+ return {
225
+ app_code: this.appInfo.data.code,
226
+ app_status: this.appInfo.data.status,
227
+ payment_expired: this.paymentInfo.data.isExpired ? "Y" : "N",
228
+ days: this.paymentInfo.data.days,
229
+ b24_plan: this.licenseInfo.data.license,
230
+ c_name: this.profileInfo.data.name,
231
+ c_last_name: this.profileInfo.data.lastName,
232
+ hostname: this.hostName
233
+ };
234
+ }
235
+ /**
236
+ * Get the account address BX24 (https://your_domain.bitrix24.com)
237
+ */
238
+ get hostName() {
239
+ return this._b24.getTargetOrigin();
240
+ }
241
+ get profileInfo() {
242
+ this.ensureInitialized();
243
+ if (null === this._profile) {
244
+ throw new Error("B24HelperManager.profileInfo not initialized");
245
+ }
246
+ return this._profile;
247
+ }
248
+ get appInfo() {
249
+ this.ensureInitialized();
250
+ if (null === this._app) {
251
+ throw new Error("B24HelperManager.appInfo not initialized");
252
+ }
253
+ return this._app;
254
+ }
255
+ get paymentInfo() {
256
+ this.ensureInitialized();
257
+ if (null === this._payment) {
258
+ throw new Error("B24HelperManager.paymentInfo not initialized");
259
+ }
260
+ return this._payment;
261
+ }
262
+ get licenseInfo() {
263
+ this.ensureInitialized();
264
+ if (null === this._license) {
265
+ throw new Error("B24HelperManager.licenseInfo not initialized");
266
+ }
267
+ return this._license;
268
+ }
269
+ get currency() {
270
+ this.ensureInitialized();
271
+ if (null === this._currency) {
272
+ throw new Error("B24HelperManager.currency not initialized");
273
+ }
274
+ return this._currency;
275
+ }
276
+ get appOptions() {
277
+ this.ensureInitialized();
278
+ if (null === this._appOptions) {
279
+ throw new Error("B24HelperManager.appOptions not initialized");
280
+ }
281
+ return this._appOptions;
282
+ }
283
+ get userOptions() {
284
+ this.ensureInitialized();
285
+ if (null === this._userOptions) {
286
+ throw new Error("B24HelperManager.userOptions not initialized");
287
+ }
288
+ return this._userOptions;
289
+ }
290
+ // endregion ////
291
+ // region Custom SelfHosted && Cloud ////
292
+ get isSelfHosted() {
293
+ return this.licenseInfo.data.isSelfHosted;
294
+ }
295
+ /**
296
+ * Returns the increment step of fields of type ID
297
+ * @memo in a cloud step = 2 in box step = 1
298
+ *
299
+ * @returns {number}
300
+ */
301
+ get primaryKeyIncrementValue() {
302
+ if (this.isSelfHosted) {
303
+ return 1;
304
+ }
305
+ return 2;
306
+ }
307
+ /**
308
+ * Defines specific URLs for a Bitrix24 box or cloud
309
+ */
310
+ get b24SpecificUrl() {
311
+ if (this.isSelfHosted) {
312
+ return {
313
+ [TypeSpecificUrl.MainSettings]: "/configs/",
314
+ [TypeSpecificUrl.UfList]: "/configs/userfield_list.php",
315
+ [TypeSpecificUrl.UfPage]: "/configs/userfield.php"
316
+ };
317
+ }
318
+ return {
319
+ [TypeSpecificUrl.MainSettings]: "/settings/configs/",
320
+ [TypeSpecificUrl.UfList]: "/settings/configs/userfield_list.php",
321
+ [TypeSpecificUrl.UfPage]: "/settings/configs/userfield.php"
322
+ };
323
+ }
324
+ // endregion ////
325
+ // region Pull.Client ////
326
+ usePullClient(prefix = "prefix", userId) {
327
+ if (this._b24PullClient) {
328
+ return this;
329
+ }
330
+ this.initializePullClient(
331
+ typeof userId === "undefined" ? this.profileInfo.data.id || 0 : userId,
332
+ prefix
333
+ );
334
+ return this;
335
+ }
336
+ initializePullClient(userId, prefix = "prefix") {
337
+ this._b24PullClient = new PullClient({
338
+ b24: this._b24,
339
+ restApplication: this._b24.auth.getUniq(prefix),
340
+ userId
341
+ });
342
+ }
343
+ subscribePullClient(callback, moduleId = "application") {
344
+ if (!this._b24PullClient) {
345
+ throw new Error("PullClient not init");
346
+ }
347
+ this._pullClientModuleId = moduleId;
348
+ this._pullClientUnSubscribe.push(
349
+ this._b24PullClient.subscribe({
350
+ moduleId: this._pullClientModuleId,
351
+ callback
352
+ })
353
+ );
354
+ return this;
355
+ }
356
+ startPullClient() {
357
+ if (!this._b24PullClient) {
358
+ throw new Error("PullClient not init");
359
+ }
360
+ this._b24PullClient.start().catch((error) => {
361
+ this.getLogger().error(`${Text.getDateForLog()}: Pull not running`, { error });
362
+ });
363
+ }
364
+ getModuleIdPullClient() {
365
+ if (!this._b24PullClient) {
366
+ throw new Error("PullClient not init");
367
+ }
368
+ return this._pullClientModuleId;
369
+ }
370
+ _destroyPullClient() {
371
+ for (const unsubscribeCallback of this._pullClientUnSubscribe) {
372
+ unsubscribeCallback();
373
+ }
374
+ this._b24PullClient?.destroy();
375
+ this._b24PullClient = null;
376
+ }
377
+ // endregion ////
378
+ // region Tools ////
379
+ ensureInitialized() {
380
+ if (!this._isInit) {
381
+ throw new Error("B24HelperManager not initialized");
382
+ }
383
+ }
384
+ // endregion ////
385
+ }
386
+
387
+ export { B24HelperManager };
388
+ //# sourceMappingURL=helper-manager.mjs.map