@bitrix24/b24jssdk 0.5.1 → 1.0.2

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 +309 -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 +178 -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 +253 -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 +2768 -534
  143. package/dist/esm/index.d.ts +2768 -534
  144. package/dist/esm/index.mjs +70 -14118
  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 +31312 -26912
  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 +34 -29
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.2
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 { B24LangList } from '../core/language/list.mjs';
10
+ import { ApiVersion } from '../types/b24.mjs';
11
+
12
+ var __defProp = Object.defineProperty;
13
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
14
+ class AppFrame {
15
+ static {
16
+ __name(this, "AppFrame");
17
+ }
18
+ #domain = "";
19
+ #protocol = true;
20
+ #appSid = null;
21
+ #path = null;
22
+ #lang = null;
23
+ #b24TargetRest;
24
+ #b24Target;
25
+ #b24TargetRestWithPath;
26
+ constructor(queryParams) {
27
+ if (queryParams.DOMAIN) {
28
+ this.#domain = queryParams.DOMAIN;
29
+ this.#domain = this.#domain.replace(/:(80|443)$/, "");
30
+ }
31
+ this.#protocol = queryParams.PROTOCOL === true;
32
+ if (queryParams.LANG) {
33
+ this.#lang = queryParams.LANG;
34
+ }
35
+ if (queryParams.APP_SID) {
36
+ this.#appSid = queryParams.APP_SID;
37
+ }
38
+ this.#b24TargetRestWithPath = /* @__PURE__ */ new Map();
39
+ this.#b24Target = `${this.#protocol ? "https" : "http"}://${this.#domain}`;
40
+ this.#b24TargetRest = `${this.#b24Target}/rest`;
41
+ this.#b24TargetRestWithPath.set(ApiVersion.v2, `${this.#b24TargetRest}`);
42
+ this.#b24TargetRestWithPath.set(ApiVersion.v3, `${this.#b24TargetRest}/api`);
43
+ }
44
+ /**
45
+ * Initializes the data received from the parent window message.
46
+ * @param data
47
+ */
48
+ initData(data) {
49
+ if (!this.#domain) {
50
+ this.#domain = data.DOMAIN;
51
+ }
52
+ if (!this.#path) {
53
+ this.#path = data.PATH;
54
+ }
55
+ if (!this.#lang) {
56
+ this.#lang = data.LANG;
57
+ }
58
+ this.#protocol = Number.parseInt(data.PROTOCOL) === 1;
59
+ this.#domain = this.#domain.replace(/:(80|443)$/, "");
60
+ this.#b24Target = `${this.#protocol ? "https" : "http"}://${this.#domain}`;
61
+ this.#b24TargetRest = `${this.#b24Target}/rest`;
62
+ this.#b24TargetRestWithPath.set(ApiVersion.v2, `${this.#b24TargetRest}`);
63
+ this.#b24TargetRestWithPath.set(ApiVersion.v3, `${this.#b24TargetRest}/api`);
64
+ return this;
65
+ }
66
+ /**
67
+ * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`
68
+ */
69
+ getAppSid() {
70
+ if (null === this.#appSid) {
71
+ throw new Error(`Not init appSid`);
72
+ }
73
+ return this.#appSid;
74
+ }
75
+ /**
76
+ * Get the account address BX24 (https://your_domain.bitrix24.com)
77
+ */
78
+ getTargetOrigin() {
79
+ return this.#b24Target;
80
+ }
81
+ /**
82
+ * Get the account address BX24 with path
83
+ * - ver2 `https://your_domain.bitrix24.com/rest/`
84
+ * - ver3` https://your_domain.bitrix24.com/rest/api/`
85
+ */
86
+ getTargetOriginWithPath() {
87
+ return this.#b24TargetRestWithPath;
88
+ }
89
+ /**
90
+ * Returns the localization of the B24 interface
91
+ * @return {B24LangList} - default `B24LangList.en`
92
+ *
93
+ * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-get-lang.html
94
+ */
95
+ getLang() {
96
+ return this.#lang || B24LangList.en;
97
+ }
98
+ }
99
+
100
+ export { AppFrame };
101
+ //# sourceMappingURL=frame.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.mjs","sources":["../../../src/frame/frame.ts"],"sourcesContent":["import type { B24FrameQueryParams, MessageInitData } from '../types/auth'\nimport { B24LangList } from '../core/language/list'\nimport { ApiVersion } from '../types/b24'\n\n/**\n * Application Frame Data Manager\n */\nexport class AppFrame {\n #domain: string = ''\n #protocol: boolean = true\n #appSid: null | string = null\n #path: null | string = null\n #lang: null | string = null\n #b24TargetRest: string\n #b24Target: string\n readonly #b24TargetRestWithPath: Map<ApiVersion, string>\n\n constructor(\n queryParams: B24FrameQueryParams\n ) {\n if (queryParams.DOMAIN) {\n this.#domain = queryParams.DOMAIN\n this.#domain = this.#domain.replace(/:(80|443)$/, '')\n }\n\n this.#protocol = queryParams.PROTOCOL === true\n\n if (queryParams.LANG) {\n this.#lang = queryParams.LANG\n }\n\n if (queryParams.APP_SID) {\n this.#appSid = queryParams.APP_SID\n }\n\n this.#b24TargetRestWithPath = new Map()\n\n this.#b24Target = `${this.#protocol ? 'https' : 'http'}://${this.#domain}`\n this.#b24TargetRest = `${this.#b24Target}/rest`\n\n this.#b24TargetRestWithPath.set(ApiVersion.v2, `${this.#b24TargetRest}`)\n this.#b24TargetRestWithPath.set(ApiVersion.v3, `${this.#b24TargetRest}/api`)\n }\n\n /**\n * Initializes the data received from the parent window message.\n * @param data\n */\n initData(data: MessageInitData): AppFrame {\n if (!this.#domain) {\n this.#domain = data.DOMAIN\n }\n\n if (!this.#path) {\n this.#path = data.PATH\n }\n\n if (!this.#lang) {\n this.#lang = data.LANG\n }\n\n this.#protocol = Number.parseInt(data.PROTOCOL) === 1\n this.#domain = this.#domain.replace(/:(80|443)$/, '')\n\n this.#b24Target = `${this.#protocol ? 'https' : 'http'}://${this.#domain}`\n this.#b24TargetRest = `${this.#b24Target}/rest`\n\n this.#b24TargetRestWithPath.set(ApiVersion.v2, `${this.#b24TargetRest}`)\n this.#b24TargetRestWithPath.set(ApiVersion.v3, `${this.#b24TargetRest}/api`)\n\n return this\n }\n\n /**\n * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`\n */\n getAppSid(): string {\n if (null === this.#appSid) {\n throw new Error(`Not init appSid`)\n }\n\n return this.#appSid\n }\n\n /**\n * Get the account address BX24 (https://your_domain.bitrix24.com)\n */\n getTargetOrigin(): string {\n return this.#b24Target\n }\n\n /**\n * Get the account address BX24 with path\n * - ver2 `https://your_domain.bitrix24.com/rest/`\n * - ver3` https://your_domain.bitrix24.com/rest/api/`\n */\n getTargetOriginWithPath(): Map<ApiVersion, string> {\n return this.#b24TargetRestWithPath\n }\n\n /**\n * Returns the localization of the B24 interface\n * @return {B24LangList} - default `B24LangList.en`\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-get-lang.html\n */\n getLang(): B24LangList {\n return (this.#lang as B24LangList) || B24LangList.en\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.2
4
+ * @copyright (c) 2026 Bitrix24
5
+ * @license MIT
6
+ * @see https://github.com/bitrix24/b24jssdk
7
+ * @see https://bitrix24.github.io/b24jssdk/
8
+ */
9
+ var MessageCommands = /* @__PURE__ */ ((MessageCommands2) => {
10
+ MessageCommands2["getInitData"] = "getInitData";
11
+ MessageCommands2["setInstallFinish"] = "setInstallFinish";
12
+ MessageCommands2["setInstall"] = "setInstall";
13
+ MessageCommands2["refreshAuth"] = "refreshAuth";
14
+ MessageCommands2["setAppOption"] = "setAppOption";
15
+ MessageCommands2["setUserOption"] = "setUserOption";
16
+ MessageCommands2["resizeWindow"] = "resizeWindow";
17
+ MessageCommands2["reloadWindow"] = "reloadWindow";
18
+ MessageCommands2["setTitle"] = "setTitle";
19
+ MessageCommands2["setScroll"] = "setScroll";
20
+ MessageCommands2["openApplication"] = "openApplication";
21
+ MessageCommands2["closeApplication"] = "closeApplication";
22
+ MessageCommands2["openPath"] = "openPath";
23
+ MessageCommands2["imCallTo"] = "imCallTo";
24
+ MessageCommands2["imPhoneTo"] = "imPhoneTo";
25
+ MessageCommands2["imOpenMessenger"] = "imOpenMessenger";
26
+ MessageCommands2["imOpenHistory"] = "imOpenHistory";
27
+ MessageCommands2["selectUser"] = "selectUser";
28
+ MessageCommands2["selectAccess"] = "selectAccess";
29
+ MessageCommands2["selectCRM"] = "selectCRM";
30
+ MessageCommands2["showAppForm"] = "showAppForm";
31
+ MessageCommands2["getInterface"] = "getInterface";
32
+ MessageCommands2["placementBindEvent"] = "placementBindEvent";
33
+ return MessageCommands2;
34
+ })(MessageCommands || {});
35
+
36
+ export { MessageCommands };
37
+ //# sourceMappingURL=commands.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.mjs","sources":["../../../../src/frame/message/commands.ts"],"sourcesContent":["/**\n * List of commands for the B24 parent window\n */\nexport enum MessageCommands {\n getInitData = 'getInitData',\n setInstallFinish = 'setInstallFinish',\n setInstall = 'setInstall',\n refreshAuth = 'refreshAuth',\n setAppOption = 'setAppOption',\n setUserOption = 'setUserOption',\n resizeWindow = 'resizeWindow',\n reloadWindow = 'reloadWindow',\n setTitle = 'setTitle',\n setScroll = 'setScroll',\n openApplication = 'openApplication',\n closeApplication = 'closeApplication',\n openPath = 'openPath',\n imCallTo = 'imCallTo',\n imPhoneTo = 'imPhoneTo',\n imOpenMessenger = 'imOpenMessenger',\n imOpenHistory = 'imOpenHistory',\n selectUser = 'selectUser',\n selectAccess = 'selectAccess',\n selectCRM = 'selectCRM',\n /**\n * @memo this not work. Need test\n */\n showAppForm = 'showAppForm',\n getInterface = 'getInterface',\n placementBindEvent = 'placementBindEvent'\n}\n"],"names":["MessageCommands"],"mappings":";;;;;;;;AAGO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AACL,EAAAA,iBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,iBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,iBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,iBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,iBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,iBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,iBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,iBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,iBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,iBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,iBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,iBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,iBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,iBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,iBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AAIZ,EAAAA,iBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,iBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,iBAAA,oBAAA,CAAA,GAAqB,oBAAA;AA1BX,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;;;;"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.2
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 { Type } from '../../tools/type.mjs';
10
+ import { Text } from '../../tools/text.mjs';
11
+ import { omit } from '../../tools/index.mjs';
12
+ import { LoggerFactory } from '../../logger/logger-factory.mjs';
13
+
14
+ var __defProp = Object.defineProperty;
15
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
16
+ class MessageManager {
17
+ static {
18
+ __name(this, "MessageManager");
19
+ }
20
+ #appFrame;
21
+ #callbackPromises;
22
+ #callbackSingletone;
23
+ _logger;
24
+ runCallbackHandler;
25
+ constructor(appFrame) {
26
+ this._logger = LoggerFactory.createNullLogger();
27
+ this.#appFrame = appFrame;
28
+ this.#callbackPromises = /* @__PURE__ */ new Map();
29
+ this.#callbackSingletone = /* @__PURE__ */ new Map();
30
+ this.runCallbackHandler = this._runCallback.bind(this);
31
+ }
32
+ setLogger(logger) {
33
+ this._logger = logger;
34
+ }
35
+ getLogger() {
36
+ return this._logger;
37
+ }
38
+ // region Events ////
39
+ /**
40
+ * Subscribe to the onMessage event of the parent window
41
+ */
42
+ subscribe() {
43
+ window.addEventListener("message", this.runCallbackHandler);
44
+ }
45
+ /**
46
+ * Unsubscribe from the onMessage event of the parent window
47
+ */
48
+ unsubscribe() {
49
+ window.removeEventListener("message", this.runCallbackHandler);
50
+ }
51
+ // endregion ////
52
+ /**
53
+ * Send message to parent window
54
+ * The answer (if) we will get in _runCallback
55
+ *
56
+ * @param command
57
+ * @param params
58
+ */
59
+ async send(command, params = null) {
60
+ return new Promise((resolve, reject) => {
61
+ let cmd;
62
+ const promiseHandler = {
63
+ resolve,
64
+ reject,
65
+ timeoutId: null
66
+ };
67
+ const keyPromise = this.#setCallbackPromise(promiseHandler);
68
+ let paramsSend = null;
69
+ const optionsSend = omit(params || {}, ["singleOption", "callBack", "isSafely", "safelyTime", "requestId"]);
70
+ const { callBack, singleOption, requestId } = params || {};
71
+ if (callBack) {
72
+ this.#callbackSingletone.set(keyPromise, callBack);
73
+ }
74
+ if (singleOption) {
75
+ paramsSend = singleOption;
76
+ } else if (Object.keys(optionsSend).length > 0) {
77
+ paramsSend = { ...optionsSend };
78
+ }
79
+ if (command.toString().includes(":")) {
80
+ cmd = {
81
+ method: command.toString(),
82
+ params: paramsSend || "",
83
+ callback: keyPromise,
84
+ appSid: this.#appFrame.getAppSid(),
85
+ requestId
86
+ };
87
+ } else {
88
+ cmd = command.toString();
89
+ if (params?.isRawValue !== true && paramsSend) {
90
+ paramsSend = JSON.stringify(paramsSend);
91
+ } else if (params?.isRawValue === true && paramsSend && Type.isPlainObject(paramsSend) && paramsSend["value"]) {
92
+ paramsSend = paramsSend["value"];
93
+ }
94
+ const listParams = [
95
+ paramsSend || "",
96
+ keyPromise,
97
+ this.#appFrame.getAppSid()
98
+ ];
99
+ cmd += ":" + listParams.filter(Boolean).join(":");
100
+ }
101
+ this.getLogger().debug(`send to ${this.#appFrame.getTargetOrigin()}`, {
102
+ cmd,
103
+ origin: this.#appFrame.getTargetOrigin()
104
+ });
105
+ parent.postMessage(cmd, this.#appFrame.getTargetOrigin());
106
+ if (params?.isSafely) {
107
+ const safelyTime = Number.parseInt(String(params?.safelyTime || 900));
108
+ this.#callbackPromises.get(keyPromise).timeoutId = window.setTimeout(
109
+ () => {
110
+ if (this.#callbackPromises.has(keyPromise)) {
111
+ this.getLogger().warning(`action ${command.toString()} stop by timeout`, {
112
+ command: command.toString(),
113
+ safelyTime
114
+ });
115
+ this.#callbackPromises.delete(keyPromise);
116
+ resolve({ isSafely: true });
117
+ }
118
+ },
119
+ safelyTime
120
+ );
121
+ }
122
+ });
123
+ }
124
+ /**
125
+ * Fulfilling a promise based on messages from the parent window
126
+ *
127
+ * @param event
128
+ * @private
129
+ */
130
+ _runCallback(event) {
131
+ if (event.origin !== this.#appFrame.getTargetOrigin()) {
132
+ return;
133
+ }
134
+ if (event.data) {
135
+ this.getLogger().debug(`get from ${event.origin}`, {
136
+ data: event.data,
137
+ origin: event.origin
138
+ });
139
+ const tmp = event.data.split(":");
140
+ const cmd = {
141
+ id: tmp[0],
142
+ args: tmp.slice(1).join(":")
143
+ };
144
+ if (cmd.args) {
145
+ cmd.args = JSON.parse(cmd.args);
146
+ }
147
+ if (this.#callbackPromises.has(cmd.id)) {
148
+ const promise = this.#callbackPromises.get(cmd.id);
149
+ if (promise.timeoutId) {
150
+ clearTimeout(promise.timeoutId);
151
+ }
152
+ this.#callbackPromises.delete(cmd.id);
153
+ promise.resolve(cmd.args);
154
+ } else if (this.#callbackSingletone.has(cmd.id)) {
155
+ const callBack = this.#callbackSingletone.get(cmd.id);
156
+ if (callBack) {
157
+ callBack.apply(globalThis, [cmd.args]);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ /**
163
+ * Storing a promise for a message from the parent window
164
+ *
165
+ * @param promiseHandler
166
+ * @private
167
+ *
168
+ * @memo We don't use Symbol here, because we need to pass it to the parent and then find and restore it.
169
+ */
170
+ #setCallbackPromise(promiseHandler) {
171
+ const key = Text.getUniqId();
172
+ this.#callbackPromises.set(key, promiseHandler);
173
+ return key;
174
+ }
175
+ }
176
+
177
+ export { MessageManager };
178
+ //# sourceMappingURL=controller.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.mjs","sources":["../../../../src/frame/message/controller.ts"],"sourcesContent":["import type { MessageCommands } from './commands'\nimport type { AppFrame } from '../frame'\nimport type { LoggerInterface } from '../../logger'\nimport { LoggerFactory } from '../../logger'\nimport { Type } from '../../tools/type'\nimport { Text } from '../../tools/text'\nimport { omit } from '../../tools'\n\ninterface PromiseHandlers {\n resolve: (value: any) => void\n reject: (reason?: any) => void\n timeoutId: any\n}\n\n/**\n * Parent Window Request Parameters\n * - `isRawValue?: boolean` if true then JSON.stringify will not be executed\n * - `isSafely?: boolean` auto completion mode Promise.resolve()\n * - `safelyTime?: number` after what time (900 ms) should it be automatically resolved Promise\n * - `callBack?: () => void` for placement event\n * - `requestId?: string` Unique request identifier for tracking. Used for query deduplication and debugging.\n */\nexport interface SendParams {\n isRawValue?: boolean\n isSafely?: boolean\n safelyTime?: number\n callBack?: (...args: any[]) => void\n requestId?: string\n // @todo add this\n // singleOption: any\n [index: string]: any\n}\n\n/**\n * Parent Window Communication Manager at B24\n */\nexport class MessageManager {\n #appFrame: AppFrame\n #callbackPromises: Map<string, PromiseHandlers>\n #callbackSingletone: Map<string, (...args: any[]) => void>\n\n protected _logger: LoggerInterface\n\n private readonly runCallbackHandler: OmitThisParameter<(event: MessageEvent) => void>\n\n constructor(appFrame: AppFrame) {\n this._logger = LoggerFactory.createNullLogger()\n this.#appFrame = appFrame\n\n this.#callbackPromises = new Map()\n this.#callbackSingletone = new Map()\n\n this.runCallbackHandler = this._runCallback.bind(this)\n }\n\n setLogger(logger: LoggerInterface): void {\n this._logger = logger\n }\n\n getLogger(): LoggerInterface {\n return this._logger\n }\n\n // region Events ////\n /**\n * Subscribe to the onMessage event of the parent window\n */\n subscribe() {\n window.addEventListener('message', this.runCallbackHandler)\n }\n\n /**\n * Unsubscribe from the onMessage event of the parent window\n */\n unsubscribe(): void {\n window.removeEventListener('message', this.runCallbackHandler)\n }\n\n // endregion ////\n\n /**\n * Send message to parent window\n * The answer (if) we will get in _runCallback\n *\n * @param command\n * @param params\n */\n async send(\n command: string | MessageCommands,\n params: null | SendParams = null\n ): Promise<any> {\n return new Promise((resolve, reject) => {\n let cmd: string | object\n const promiseHandler: PromiseHandlers = {\n resolve,\n reject,\n timeoutId: null\n }\n\n const keyPromise = this.#setCallbackPromise(promiseHandler)\n let paramsSend: null | string | Record<string, any> = null\n\n const optionsSend = omit(params || {}, ['singleOption', 'callBack', 'isSafely', 'safelyTime', 'requestId'])\n const { callBack, singleOption, requestId } = params || {}\n if (callBack) {\n this.#callbackSingletone.set(keyPromise, callBack)\n }\n\n if (singleOption) {\n paramsSend = singleOption\n } else if (Object.keys(optionsSend).length > 0) {\n paramsSend = { ...optionsSend }\n }\n\n if (command.toString().includes(':')) {\n cmd = {\n method: command.toString(),\n params: paramsSend || '',\n callback: keyPromise,\n appSid: this.#appFrame.getAppSid(),\n requestId\n }\n } else {\n cmd = command.toString()\n\n if (\n params?.isRawValue !== true\n && paramsSend\n ) {\n paramsSend = JSON.stringify(paramsSend)\n } else if (\n params?.isRawValue === true\n && paramsSend\n && Type.isPlainObject(paramsSend)\n && paramsSend['value']\n ) {\n paramsSend = paramsSend['value']\n }\n\n const listParams = [\n paramsSend || '',\n keyPromise,\n this.#appFrame.getAppSid()\n ]\n\n cmd += ':' + listParams.filter(Boolean).join(':')\n }\n\n this.getLogger().debug(`send to ${this.#appFrame.getTargetOrigin()}`, {\n cmd,\n origin: this.#appFrame.getTargetOrigin()\n })\n\n parent.postMessage(cmd, this.#appFrame.getTargetOrigin())\n\n if (params?.isSafely) {\n const safelyTime = Number.parseInt(String(params?.safelyTime || 900))\n this.#callbackPromises.get(keyPromise)!.timeoutId = window.setTimeout(\n () => {\n if (this.#callbackPromises.has(keyPromise)) {\n this.getLogger().warning(`action ${command.toString()} stop by timeout`, {\n command: command.toString(),\n safelyTime\n })\n\n this.#callbackPromises.delete(keyPromise)\n resolve({ isSafely: true })\n }\n },\n safelyTime\n )\n }\n })\n }\n\n /**\n * Fulfilling a promise based on messages from the parent window\n *\n * @param event\n * @private\n */\n public _runCallback(event: MessageEvent): void {\n if (event.origin !== this.#appFrame.getTargetOrigin()) {\n return\n }\n\n if (event.data) {\n this.getLogger().debug(`get from ${event.origin}`, {\n data: event.data,\n origin: event.origin\n })\n\n const tmp = event.data.split(':')\n\n const cmd: { id: string, args: any } = {\n id: tmp[0],\n args: tmp.slice(1).join(':')\n }\n\n if (cmd.args) {\n cmd.args = JSON.parse(cmd.args)\n }\n\n if (this.#callbackPromises.has(cmd.id)) {\n const promise = this.#callbackPromises.get(cmd.id) as PromiseHandlers\n if (promise.timeoutId) {\n clearTimeout(promise.timeoutId)\n }\n\n this.#callbackPromises.delete(cmd.id)\n\n promise.resolve(cmd.args)\n // promise.reject(cmd.args) ////\n } else if (this.#callbackSingletone.has(cmd.id)) {\n const callBack = this.#callbackSingletone.get(cmd.id) as (...args: any[]) => void\n if (callBack) {\n callBack.apply(globalThis, [cmd.args])\n }\n }\n }\n }\n\n /**\n * Storing a promise for a message from the parent window\n *\n * @param promiseHandler\n * @private\n *\n * @memo We don't use Symbol here, because we need to pass it to the parent and then find and restore it.\n */\n #setCallbackPromise(promiseHandler: PromiseHandlers): string {\n const key = Text.getUniqId()\n this.#callbackPromises.set(key, promiseHandler)\n return key\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @package @bitrix24/b24jssdk
3
+ * @version 1.0.2
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 { MessageCommands } from './message/commands.mjs';
10
+
11
+ var __defProp = Object.defineProperty;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ class OptionsManager {
14
+ static {
15
+ __name(this, "OptionsManager");
16
+ }
17
+ #messageManager;
18
+ #appOptions = null;
19
+ #userOptions = null;
20
+ constructor(messageManager) {
21
+ this.#messageManager = messageManager;
22
+ }
23
+ /**
24
+ * Initializes the data received from the parent window message.
25
+ * @param data
26
+ */
27
+ initData(data) {
28
+ if (data.APP_OPTIONS) {
29
+ this.#appOptions = data.APP_OPTIONS;
30
+ }
31
+ if (data.USER_OPTIONS) {
32
+ this.#userOptions = data.USER_OPTIONS;
33
+ }
34
+ return this;
35
+ }
36
+ /**
37
+ * Getting application option
38
+ *
39
+ * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-app-option-get.html
40
+ */
41
+ appGet(option) {
42
+ if (this.#appOptions && !!this.#appOptions[option]) {
43
+ return this.#appOptions[option];
44
+ }
45
+ throw new Error(`app.option.${option} not set`);
46
+ }
47
+ /**
48
+ * Updates application data through the parent window
49
+ *
50
+ * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-app-option-set.html
51
+ */
52
+ async appSet(option, value) {
53
+ if (!this.#appOptions) {
54
+ this.#appOptions = [];
55
+ }
56
+ this.#appOptions[option] = value;
57
+ return this.#sendParentMessage(
58
+ MessageCommands.setAppOption,
59
+ option,
60
+ this.#appOptions[option]
61
+ );
62
+ }
63
+ /**
64
+ * Getting user option
65
+ *
66
+ * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-user-option-get.html
67
+ */
68
+ userGet(option) {
69
+ if (this.#userOptions && !!this.#userOptions[option]) {
70
+ return this.#userOptions[option];
71
+ }
72
+ throw new Error(`user.option.${option} not set`);
73
+ }
74
+ /**
75
+ * Updates user data through the parent window
76
+ *
77
+ * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-user-option-set.html
78
+ */
79
+ async userSet(option, value) {
80
+ if (!this.#appOptions) {
81
+ this.#appOptions = [];
82
+ }
83
+ if (!this.#appOptions[option]) {
84
+ this.#appOptions[option] = null;
85
+ }
86
+ this.#userOptions[option] = value;
87
+ return this.#sendParentMessage(
88
+ MessageCommands.setUserOption,
89
+ option,
90
+ // @ts-expect-error this code work success
91
+ this.#userOptions[option]
92
+ );
93
+ }
94
+ async #sendParentMessage(command, option, value) {
95
+ return this.#messageManager.send(command, {
96
+ name: option,
97
+ value,
98
+ isSafely: true
99
+ }).then(() => {
100
+ return Promise.resolve();
101
+ });
102
+ }
103
+ }
104
+
105
+ export { OptionsManager };
106
+ //# sourceMappingURL=options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.mjs","sources":["../../../src/frame/options.ts"],"sourcesContent":["import type { MessageManager } from './message'\nimport { MessageCommands } from './message'\nimport type { MessageInitData } from '../types/auth'\n\n/**\n * Manager for working with application settings via communication with the parent window\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/index.html\n */\nexport class OptionsManager {\n #messageManager: MessageManager\n #appOptions: null | Record<string, any> = null\n #userOptions: null | Record<string, any> = null\n\n constructor(messageManager: MessageManager) {\n this.#messageManager = messageManager\n }\n\n /**\n * Initializes the data received from the parent window message.\n * @param data\n */\n initData(data: MessageInitData): OptionsManager {\n if (data.APP_OPTIONS) {\n this.#appOptions = data.APP_OPTIONS as Record<string, any>\n }\n\n if (data.USER_OPTIONS) {\n this.#userOptions = data.USER_OPTIONS as Record<string, any>\n }\n\n return this\n }\n\n /**\n * Getting application option\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-app-option-get.html\n */\n appGet(option: string): any {\n if (this.#appOptions && !!this.#appOptions[option]) {\n return this.#appOptions[option]\n }\n\n throw new Error(`app.option.${option} not set`)\n }\n\n /**\n * Updates application data through the parent window\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-app-option-set.html\n */\n async appSet(option: string, value: any): Promise<void> {\n if (!this.#appOptions) {\n this.#appOptions = []\n }\n\n this.#appOptions[option] = value\n\n return this.#sendParentMessage(\n MessageCommands.setAppOption,\n option,\n this.#appOptions[option]\n )\n }\n\n /**\n * Getting user option\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-user-option-get.html\n */\n userGet(option: string): any {\n if (this.#userOptions && !!this.#userOptions[option]) {\n return this.#userOptions[option]\n }\n\n throw new Error(`user.option.${option} not set`)\n }\n\n /**\n * Updates user data through the parent window\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-user-option-set.html\n */\n async userSet(option: string, value: any): Promise<void> {\n if (!this.#appOptions) {\n this.#appOptions = []\n }\n\n if (!this.#appOptions[option]) {\n this.#appOptions[option] = null\n }\n\n // @ts-expect-error this code work success\n this.#userOptions[option] = value\n\n return this.#sendParentMessage(\n MessageCommands.setUserOption,\n option,\n // @ts-expect-error this code work success\n this.#userOptions[option]\n )\n }\n\n async #sendParentMessage(\n command: string,\n option: string,\n value: any\n ): Promise<void> {\n return this.#messageManager\n .send(command, {\n name: option,\n value: value,\n isSafely: true\n })\n .then(() => {\n return Promise.resolve()\n })\n }\n}\n"],"names":[],"mappings":"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"}