@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.
- package/README-AI.md +6 -5
- package/README.md +2 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs +19 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +1 -0
- package/dist/cjs/_virtual/protobuf.cjs +20 -0
- package/dist/cjs/_virtual/protobuf.cjs.map +1 -0
- package/dist/cjs/_virtual/protobuf2.cjs +14 -0
- package/dist/cjs/_virtual/protobuf2.cjs.map +1 -0
- package/dist/cjs/core/abstract-b24.cjs +357 -0
- package/dist/cjs/core/abstract-b24.cjs.map +1 -0
- package/dist/cjs/core/actions/abstract-action.cjs +26 -0
- package/dist/cjs/core/actions/abstract-action.cjs.map +1 -0
- package/dist/cjs/core/actions/abstract-batch.cjs +97 -0
- package/dist/cjs/core/actions/abstract-batch.cjs.map +1 -0
- package/dist/cjs/core/actions/manager.cjs +55 -0
- package/dist/cjs/core/actions/manager.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/batch-by-chunk.cjs +95 -0
- package/dist/cjs/core/actions/v2/batch-by-chunk.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/batch.cjs +128 -0
- package/dist/cjs/core/actions/v2/batch.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/call-list.cjs +144 -0
- package/dist/cjs/core/actions/v2/call-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/call.cjs +56 -0
- package/dist/cjs/core/actions/v2/call.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/fetch-list.cjs +145 -0
- package/dist/cjs/core/actions/v2/fetch-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/manager-v2.cjs +76 -0
- package/dist/cjs/core/actions/v2/manager-v2.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/_keyset-paginate.cjs +69 -0
- package/dist/cjs/core/actions/v3/_keyset-paginate.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/aggregate.cjs +96 -0
- package/dist/cjs/core/actions/v3/aggregate.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/batch-by-chunk.cjs +93 -0
- package/dist/cjs/core/actions/v3/batch-by-chunk.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/batch.cjs +122 -0
- package/dist/cjs/core/actions/v3/batch.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/call-list.cjs +126 -0
- package/dist/cjs/core/actions/v3/call-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/call-tail.cjs +118 -0
- package/dist/cjs/core/actions/v3/call-tail.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/call.cjs +51 -0
- package/dist/cjs/core/actions/v3/call.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/fetch-list.cjs +122 -0
- package/dist/cjs/core/actions/v3/fetch-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/fetch-tail.cjs +112 -0
- package/dist/cjs/core/actions/v3/fetch-tail.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/manager-v3.cjs +100 -0
- package/dist/cjs/core/actions/v3/manager-v3.cjs.map +1 -0
- package/dist/cjs/core/http/abstract-http.cjs +641 -0
- package/dist/cjs/core/http/abstract-http.cjs.map +1 -0
- package/dist/cjs/core/http/ajax-error.cjs +113 -0
- package/dist/cjs/core/http/ajax-error.cjs.map +1 -0
- package/dist/cjs/core/http/ajax-result.cjs +219 -0
- package/dist/cjs/core/http/ajax-result.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/adaptive-delayer.cjs +137 -0
- package/dist/cjs/core/http/limiters/adaptive-delayer.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/manager.cjs +373 -0
- package/dist/cjs/core/http/limiters/manager.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/operating-limiter.cjs +173 -0
- package/dist/cjs/core/http/limiters/operating-limiter.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/params-factory.cjs +124 -0
- package/dist/cjs/core/http/limiters/params-factory.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/rate-limiter.cjs +404 -0
- package/dist/cjs/core/http/limiters/rate-limiter.cjs.map +1 -0
- package/dist/cjs/core/http/redact.cjs +85 -0
- package/dist/cjs/core/http/redact.cjs.map +1 -0
- package/dist/cjs/core/http/v2.cjs +85 -0
- package/dist/cjs/core/http/v2.cjs.map +1 -0
- package/dist/cjs/core/http/v3.cjs +82 -0
- package/dist/cjs/core/http/v3.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/abstract-interaction-batch.cjs +71 -0
- package/dist/cjs/core/interaction/batch/abstract-interaction-batch.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/parse-row.cjs +69 -0
- package/dist/cjs/core/interaction/batch/parse-row.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/interface-strategy.cjs +87 -0
- package/dist/cjs/core/interaction/batch/processing/interface-strategy.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v2/abstract-processing.cjs +138 -0
- package/dist/cjs/core/interaction/batch/processing/v2/abstract-processing.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-array.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-array.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-object.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-object.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v3/abstract-processing.cjs +115 -0
- package/dist/cjs/core/interaction/batch/processing/v3/abstract-processing.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-array.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-array.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-object.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-object.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/v2.cjs +47 -0
- package/dist/cjs/core/interaction/batch/v2.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/v3.cjs +45 -0
- package/dist/cjs/core/interaction/batch/v3.cjs.map +1 -0
- package/dist/cjs/core/language/list.cjs +59 -0
- package/dist/cjs/core/language/list.cjs.map +1 -0
- package/dist/cjs/core/request-id-generator.cjs +44 -0
- package/dist/cjs/core/request-id-generator.cjs.map +1 -0
- package/dist/cjs/core/result.cjs +137 -0
- package/dist/cjs/core/result.cjs.map +1 -0
- package/dist/cjs/core/sdk-error.cjs +85 -0
- package/dist/cjs/core/sdk-error.cjs.map +1 -0
- package/dist/cjs/core/tools/abstract-tool.cjs +26 -0
- package/dist/cjs/core/tools/abstract-tool.cjs.map +1 -0
- package/dist/cjs/core/tools/healthcheck.cjs +50 -0
- package/dist/cjs/core/tools/healthcheck.cjs.map +1 -0
- package/dist/cjs/core/tools/manager.cjs +52 -0
- package/dist/cjs/core/tools/manager.cjs.map +1 -0
- package/dist/cjs/core/tools/ping.cjs +58 -0
- package/dist/cjs/core/tools/ping.cjs.map +1 -0
- package/dist/cjs/core/version-manager.cjs +57 -0
- package/dist/cjs/core/version-manager.cjs.map +1 -0
- package/dist/cjs/frame/auth.cjs +100 -0
- package/dist/cjs/frame/auth.cjs.map +1 -0
- package/dist/cjs/frame/b24.cjs +178 -0
- package/dist/cjs/frame/b24.cjs.map +1 -0
- package/dist/cjs/frame/dialog.cjs +120 -0
- package/dist/cjs/frame/dialog.cjs.map +1 -0
- package/dist/cjs/frame/frame.cjs +103 -0
- package/dist/cjs/frame/frame.cjs.map +1 -0
- package/dist/cjs/frame/message/commands.cjs +39 -0
- package/dist/cjs/frame/message/commands.cjs.map +1 -0
- package/dist/cjs/frame/message/controller.cjs +191 -0
- package/dist/cjs/frame/message/controller.cjs.map +1 -0
- package/dist/cjs/frame/options.cjs +108 -0
- package/dist/cjs/frame/options.cjs.map +1 -0
- package/dist/cjs/frame/parent.cjs +259 -0
- package/dist/cjs/frame/parent.cjs.map +1 -0
- package/dist/cjs/frame/placement.cjs +156 -0
- package/dist/cjs/frame/placement.cjs.map +1 -0
- package/dist/cjs/frame/slider.cjs +162 -0
- package/dist/cjs/frame/slider.cjs.map +1 -0
- package/dist/cjs/helper/abstract-helper.cjs +55 -0
- package/dist/cjs/helper/abstract-helper.cjs.map +1 -0
- package/dist/cjs/helper/app-manager.cjs +39 -0
- package/dist/cjs/helper/app-manager.cjs.map +1 -0
- package/dist/cjs/helper/currency-manager.cjs +215 -0
- package/dist/cjs/helper/currency-manager.cjs.map +1 -0
- package/dist/cjs/helper/helper-manager.cjs +397 -0
- package/dist/cjs/helper/helper-manager.cjs.map +1 -0
- package/dist/cjs/helper/license-manager.cjs +52 -0
- package/dist/cjs/helper/license-manager.cjs.map +1 -0
- package/dist/cjs/helper/options-manager.cjs +205 -0
- package/dist/cjs/helper/options-manager.cjs.map +1 -0
- package/dist/cjs/helper/payment-manager.cjs +35 -0
- package/dist/cjs/helper/payment-manager.cjs.map +1 -0
- package/dist/cjs/helper/profile-manager.cjs +35 -0
- package/dist/cjs/helper/profile-manager.cjs.map +1 -0
- package/dist/cjs/helper/use-b24-helper.cjs +85 -0
- package/dist/cjs/helper/use-b24-helper.cjs.map +1 -0
- package/dist/cjs/hook/auth.cjs +79 -0
- package/dist/cjs/hook/auth.cjs.map +1 -0
- package/dist/cjs/hook/b24.cjs +117 -0
- package/dist/cjs/hook/b24.cjs.map +1 -0
- package/dist/cjs/index.cjs +176 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +6415 -0
- package/dist/cjs/index.d.mts +6415 -0
- package/dist/cjs/index.d.ts +6415 -0
- package/dist/cjs/loader-b24frame.cjs +103 -0
- package/dist/cjs/loader-b24frame.cjs.map +1 -0
- package/dist/cjs/logger/abstract-logger.cjs +71 -0
- package/dist/cjs/logger/abstract-logger.cjs.map +1 -0
- package/dist/cjs/logger/browser.cjs +165 -0
- package/dist/cjs/logger/browser.cjs.map +1 -0
- package/dist/cjs/logger/formatter/abstract-formatter.cjs +36 -0
- package/dist/cjs/logger/formatter/abstract-formatter.cjs.map +1 -0
- package/dist/cjs/logger/formatter/json-formatter.cjs +36 -0
- package/dist/cjs/logger/formatter/json-formatter.cjs.map +1 -0
- package/dist/cjs/logger/formatter/line-formatter.cjs +43 -0
- package/dist/cjs/logger/formatter/line-formatter.cjs.map +1 -0
- package/dist/cjs/logger/formatter/telegram-formatter.cjs +105 -0
- package/dist/cjs/logger/formatter/telegram-formatter.cjs.map +1 -0
- package/dist/cjs/logger/handler/abstract-handler.cjs +41 -0
- package/dist/cjs/logger/handler/abstract-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/consola-adapter.cjs +64 -0
- package/dist/cjs/logger/handler/consola-adapter.cjs.map +1 -0
- package/dist/cjs/logger/handler/console-handler.cjs +100 -0
- package/dist/cjs/logger/handler/console-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/console-v2-handler.cjs +53 -0
- package/dist/cjs/logger/handler/console-v2-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/memory-handler.cjs +50 -0
- package/dist/cjs/logger/handler/memory-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/stream-handler.cjs +75 -0
- package/dist/cjs/logger/handler/stream-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/telegram-handler.cjs +159 -0
- package/dist/cjs/logger/handler/telegram-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/winston-adapter.cjs +59 -0
- package/dist/cjs/logger/handler/winston-adapter.cjs.map +1 -0
- package/dist/cjs/logger/logger-factory.cjs +69 -0
- package/dist/cjs/logger/logger-factory.cjs.map +1 -0
- package/dist/cjs/logger/logger.cjs +78 -0
- package/dist/cjs/logger/logger.cjs.map +1 -0
- package/dist/cjs/logger/null-logger.cjs +34 -0
- package/dist/cjs/logger/null-logger.cjs.map +1 -0
- package/dist/cjs/logger/processor/memory-usage-processor.cjs +22 -0
- package/dist/cjs/logger/processor/memory-usage-processor.cjs.map +1 -0
- package/dist/cjs/logger/processor/pid-processor.cjs +22 -0
- package/dist/cjs/logger/processor/pid-processor.cjs.map +1 -0
- package/dist/cjs/oauth/auth.cjs +214 -0
- package/dist/cjs/oauth/auth.cjs.map +1 -0
- package/dist/cjs/oauth/b24.cjs +119 -0
- package/dist/cjs/oauth/b24.cjs.map +1 -0
- package/dist/cjs/oauth/refresh-token-error.cjs +22 -0
- package/dist/cjs/oauth/refresh-token-error.cjs.map +1 -0
- package/dist/cjs/pullClient/abstract-connector.cjs +80 -0
- package/dist/cjs/pullClient/abstract-connector.cjs.map +1 -0
- package/dist/cjs/pullClient/channel-manager.cjs +91 -0
- package/dist/cjs/pullClient/channel-manager.cjs.map +1 -0
- package/dist/cjs/pullClient/client.cjs +2177 -0
- package/dist/cjs/pullClient/client.cjs.map +1 -0
- package/dist/cjs/pullClient/errors.cjs +34 -0
- package/dist/cjs/pullClient/errors.cjs.map +1 -0
- package/dist/cjs/pullClient/json-rpc.cjs +213 -0
- package/dist/cjs/pullClient/json-rpc.cjs.map +1 -0
- package/dist/cjs/pullClient/long-polling-connector.cjs +159 -0
- package/dist/cjs/pullClient/long-polling-connector.cjs.map +1 -0
- package/dist/cjs/pullClient/protobuf/index.cjs +22 -0
- package/dist/cjs/pullClient/protobuf/index.cjs.map +1 -0
- package/dist/cjs/pullClient/protobuf/model.cjs +1060 -0
- package/dist/cjs/pullClient/protobuf/model.cjs.map +1 -0
- package/dist/cjs/pullClient/protobuf/protobuf.cjs +4655 -0
- package/dist/cjs/pullClient/protobuf/protobuf.cjs.map +1 -0
- package/dist/cjs/pullClient/shared-config.cjs +135 -0
- package/dist/cjs/pullClient/shared-config.cjs.map +1 -0
- package/dist/cjs/pullClient/storage-manager.cjs +74 -0
- package/dist/cjs/pullClient/storage-manager.cjs.map +1 -0
- package/dist/cjs/pullClient/web-socket-connector.cjs +131 -0
- package/dist/cjs/pullClient/web-socket-connector.cjs.map +1 -0
- package/dist/cjs/tools/batch-ref-v3.cjs +54 -0
- package/dist/cjs/tools/batch-ref-v3.cjs.map +1 -0
- package/dist/cjs/tools/browser.cjs +156 -0
- package/dist/cjs/tools/browser.cjs.map +1 -0
- package/dist/cjs/tools/environment.cjs +32 -0
- package/dist/cjs/tools/environment.cjs.map +1 -0
- package/dist/cjs/tools/filter-v3.cjs +139 -0
- package/dist/cjs/tools/filter-v3.cjs.map +1 -0
- package/dist/cjs/tools/formatters/iban.cjs +307 -0
- package/dist/cjs/tools/formatters/iban.cjs.map +1 -0
- package/dist/cjs/tools/formatters/numbers.cjs +68 -0
- package/dist/cjs/tools/formatters/numbers.cjs.map +1 -0
- package/dist/cjs/tools/index.cjs +42 -0
- package/dist/cjs/tools/index.cjs.map +1 -0
- package/dist/cjs/tools/scroll-size.cjs +29 -0
- package/dist/cjs/tools/scroll-size.cjs.map +1 -0
- package/dist/cjs/tools/text.cjs +210 -0
- package/dist/cjs/tools/text.cjs.map +1 -0
- package/dist/cjs/tools/type.cjs +339 -0
- package/dist/cjs/tools/type.cjs.map +1 -0
- package/dist/cjs/tools/use-formatters.cjs +462 -0
- package/dist/cjs/tools/use-formatters.cjs.map +1 -0
- package/dist/cjs/tools/uuidv7.cjs +58 -0
- package/dist/cjs/tools/uuidv7.cjs.map +1 -0
- package/dist/cjs/types/b24-helper.cjs +62 -0
- package/dist/cjs/types/b24-helper.cjs.map +1 -0
- package/dist/cjs/types/b24.cjs +18 -0
- package/dist/cjs/types/b24.cjs.map +1 -0
- package/dist/cjs/types/bizproc/index.cjs +195 -0
- package/dist/cjs/types/bizproc/index.cjs.map +1 -0
- package/dist/cjs/types/catalog/index.cjs +39 -0
- package/dist/cjs/types/catalog/index.cjs.map +1 -0
- package/dist/cjs/types/common.cjs +33 -0
- package/dist/cjs/types/common.cjs.map +1 -0
- package/dist/cjs/types/crm/entity-type.cjs +62 -0
- package/dist/cjs/types/crm/entity-type.cjs.map +1 -0
- package/dist/cjs/types/crm/productrow.cjs +19 -0
- package/dist/cjs/types/crm/productrow.cjs.map +1 -0
- package/dist/cjs/types/logger.cjs +24 -0
- package/dist/cjs/types/logger.cjs.map +1 -0
- package/dist/cjs/types/pull.cjs +94 -0
- package/dist/cjs/types/pull.cjs.map +1 -0
- package/dist/esm/_virtual/_commonjsHelpers.mjs +1 -1
- package/dist/esm/_virtual/protobuf.mjs +1 -1
- package/dist/esm/_virtual/protobuf2.mjs +1 -1
- package/dist/esm/core/abstract-b24.mjs +1 -1
- package/dist/esm/core/actions/abstract-action.mjs +1 -1
- package/dist/esm/core/actions/abstract-batch.mjs +1 -1
- package/dist/esm/core/actions/manager.mjs +1 -1
- package/dist/esm/core/actions/v2/batch-by-chunk.mjs +1 -1
- package/dist/esm/core/actions/v2/batch.mjs +1 -1
- package/dist/esm/core/actions/v2/call-list.mjs +17 -10
- package/dist/esm/core/actions/v2/call-list.mjs.map +1 -1
- package/dist/esm/core/actions/v2/call.mjs +1 -15
- package/dist/esm/core/actions/v2/call.mjs.map +1 -1
- package/dist/esm/core/actions/v2/fetch-list.mjs +17 -10
- package/dist/esm/core/actions/v2/fetch-list.mjs.map +1 -1
- package/dist/esm/core/actions/v2/manager-v2.mjs +6 -6
- package/dist/esm/core/actions/v2/manager-v2.mjs.map +1 -1
- package/dist/esm/core/actions/v3/_keyset-paginate.mjs +66 -0
- package/dist/esm/core/actions/v3/_keyset-paginate.mjs.map +1 -0
- package/dist/esm/core/actions/v3/aggregate.mjs +94 -0
- package/dist/esm/core/actions/v3/aggregate.mjs.map +1 -0
- package/dist/esm/core/actions/v3/batch-by-chunk.mjs +1 -1
- package/dist/esm/core/actions/v3/batch.mjs +1 -10
- package/dist/esm/core/actions/v3/batch.mjs.map +1 -1
- package/dist/esm/core/actions/v3/call-list.mjs +40 -47
- package/dist/esm/core/actions/v3/call-list.mjs.map +1 -1
- package/dist/esm/core/actions/v3/call-tail.mjs +116 -0
- package/dist/esm/core/actions/v3/call-tail.mjs.map +1 -0
- package/dist/esm/core/actions/v3/call.mjs +1 -10
- package/dist/esm/core/actions/v3/call.mjs.map +1 -1
- package/dist/esm/core/actions/v3/fetch-list.mjs +34 -44
- package/dist/esm/core/actions/v3/fetch-list.mjs.map +1 -1
- package/dist/esm/core/actions/v3/fetch-tail.mjs +110 -0
- package/dist/esm/core/actions/v3/fetch-tail.mjs.map +1 -0
- package/dist/esm/core/actions/v3/manager-v3.mjs +30 -6
- package/dist/esm/core/actions/v3/manager-v3.mjs.map +1 -1
- package/dist/esm/core/http/abstract-http.mjs +96 -21
- package/dist/esm/core/http/abstract-http.mjs.map +1 -1
- package/dist/esm/core/http/ajax-error.mjs +1 -1
- package/dist/esm/core/http/ajax-result.mjs +9 -8
- package/dist/esm/core/http/ajax-result.mjs.map +1 -1
- package/dist/esm/core/http/limiters/adaptive-delayer.mjs +1 -1
- package/dist/esm/core/http/limiters/manager.mjs +2 -1
- package/dist/esm/core/http/limiters/manager.mjs.map +1 -1
- package/dist/esm/core/http/limiters/operating-limiter.mjs +1 -1
- package/dist/esm/core/http/limiters/params-factory.mjs +1 -1
- package/dist/esm/core/http/limiters/rate-limiter.mjs +1 -1
- package/dist/esm/core/http/redact.mjs +41 -13
- package/dist/esm/core/http/redact.mjs.map +1 -1
- package/dist/esm/core/http/v2.mjs +1 -18
- package/dist/esm/core/http/v2.mjs.map +1 -1
- package/dist/esm/core/http/v3.mjs +1 -15
- package/dist/esm/core/http/v3.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs +1 -1
- package/dist/esm/core/interaction/batch/parse-row.mjs +1 -1
- package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs +44 -1
- package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs +7 -6
- package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs +3 -3
- package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs +1 -1
- package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs +7 -19
- package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs +3 -3
- package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs +1 -1
- package/dist/esm/core/interaction/batch/v2.mjs +1 -1
- package/dist/esm/core/interaction/batch/v3.mjs +1 -1
- package/dist/esm/core/language/list.mjs +1 -1
- package/dist/esm/core/request-id-generator.mjs +1 -1
- package/dist/esm/core/result.mjs +35 -1
- package/dist/esm/core/result.mjs.map +1 -1
- package/dist/esm/core/sdk-error.mjs +1 -1
- package/dist/esm/core/tools/abstract-tool.mjs +1 -1
- package/dist/esm/core/tools/healthcheck.mjs +1 -1
- package/dist/esm/core/tools/manager.mjs +3 -3
- package/dist/esm/core/tools/manager.mjs.map +1 -1
- package/dist/esm/core/tools/ping.mjs +1 -1
- package/dist/esm/core/version-manager.mjs +19 -80
- package/dist/esm/core/version-manager.mjs.map +1 -1
- package/dist/esm/frame/auth.mjs +1 -1
- package/dist/esm/frame/b24.mjs +8 -2
- package/dist/esm/frame/b24.mjs.map +1 -1
- package/dist/esm/frame/dialog.mjs +1 -1
- package/dist/esm/frame/frame.mjs +1 -1
- package/dist/esm/frame/message/commands.mjs +1 -1
- package/dist/esm/frame/message/controller.mjs +17 -6
- package/dist/esm/frame/message/controller.mjs.map +1 -1
- package/dist/esm/frame/options.mjs +1 -1
- package/dist/esm/frame/parent.mjs +6 -2
- package/dist/esm/frame/parent.mjs.map +1 -1
- package/dist/esm/frame/placement.mjs +1 -1
- package/dist/esm/frame/slider.mjs +5 -1
- package/dist/esm/frame/slider.mjs.map +1 -1
- package/dist/esm/helper/abstract-helper.mjs +1 -1
- package/dist/esm/helper/app-manager.mjs +1 -1
- package/dist/esm/helper/currency-manager.mjs +1 -1
- package/dist/esm/helper/helper-manager.mjs +1 -1
- package/dist/esm/helper/license-manager.mjs +1 -1
- package/dist/esm/helper/options-manager.mjs +1 -1
- package/dist/esm/helper/payment-manager.mjs +1 -1
- package/dist/esm/helper/profile-manager.mjs +1 -1
- package/dist/esm/helper/use-b24-helper.mjs +1 -1
- package/dist/esm/hook/auth.mjs +1 -1
- package/dist/esm/hook/b24.mjs +3 -3
- package/dist/esm/hook/b24.mjs.map +1 -1
- package/dist/esm/index.d.mts +501 -49
- package/dist/esm/index.d.ts +501 -49
- package/dist/esm/index.mjs +3 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/loader-b24frame.mjs +1 -1
- package/dist/esm/logger/abstract-logger.mjs +1 -1
- package/dist/esm/logger/browser.mjs +1 -1
- package/dist/esm/logger/formatter/abstract-formatter.mjs +1 -1
- package/dist/esm/logger/formatter/json-formatter.mjs +1 -1
- package/dist/esm/logger/formatter/line-formatter.mjs +1 -1
- package/dist/esm/logger/formatter/telegram-formatter.mjs +1 -1
- package/dist/esm/logger/handler/abstract-handler.mjs +1 -1
- package/dist/esm/logger/handler/consola-adapter.mjs +1 -1
- package/dist/esm/logger/handler/console-handler.mjs +1 -1
- package/dist/esm/logger/handler/console-v2-handler.mjs +1 -1
- package/dist/esm/logger/handler/memory-handler.mjs +1 -1
- package/dist/esm/logger/handler/stream-handler.mjs +1 -1
- package/dist/esm/logger/handler/telegram-handler.mjs +1 -1
- package/dist/esm/logger/handler/winston-adapter.mjs +1 -1
- package/dist/esm/logger/logger-factory.mjs +1 -1
- package/dist/esm/logger/logger.mjs +1 -1
- package/dist/esm/logger/null-logger.mjs +1 -1
- package/dist/esm/logger/processor/memory-usage-processor.mjs +1 -1
- package/dist/esm/logger/processor/pid-processor.mjs +1 -1
- package/dist/esm/oauth/auth.mjs +13 -16
- package/dist/esm/oauth/auth.mjs.map +1 -1
- package/dist/esm/oauth/b24.mjs +1 -1
- package/dist/esm/oauth/refresh-token-error.mjs +1 -1
- package/dist/esm/pullClient/abstract-connector.mjs +1 -1
- package/dist/esm/pullClient/channel-manager.mjs +1 -1
- package/dist/esm/pullClient/client.mjs +141 -30
- package/dist/esm/pullClient/client.mjs.map +1 -1
- package/dist/esm/pullClient/errors.mjs +1 -1
- package/dist/esm/pullClient/json-rpc.mjs +5 -4
- package/dist/esm/pullClient/json-rpc.mjs.map +1 -1
- package/dist/esm/pullClient/long-polling-connector.mjs +1 -1
- package/dist/esm/pullClient/protobuf/index.mjs +1 -1
- package/dist/esm/pullClient/protobuf/model.mjs +1 -1
- package/dist/esm/pullClient/protobuf/protobuf.mjs +1 -1
- package/dist/esm/pullClient/shared-config.mjs +1 -1
- package/dist/esm/pullClient/storage-manager.mjs +1 -1
- package/dist/esm/pullClient/web-socket-connector.mjs +1 -1
- package/dist/esm/tools/batch-ref-v3.mjs +52 -0
- package/dist/esm/tools/batch-ref-v3.mjs.map +1 -0
- package/dist/esm/tools/browser.mjs +1 -1
- package/dist/esm/tools/environment.mjs +1 -1
- package/dist/esm/tools/filter-v3.mjs +137 -0
- package/dist/esm/tools/filter-v3.mjs.map +1 -0
- package/dist/esm/tools/formatters/iban.mjs +1 -1
- package/dist/esm/tools/formatters/numbers.mjs +1 -1
- package/dist/esm/tools/index.mjs +1 -1
- package/dist/esm/tools/scroll-size.mjs +1 -1
- package/dist/esm/tools/text.mjs +1 -1
- package/dist/esm/tools/type.mjs +1 -1
- package/dist/esm/tools/use-formatters.mjs +1 -1
- package/dist/esm/tools/uuidv7.mjs +1 -1
- package/dist/esm/types/b24-helper.mjs +1 -1
- package/dist/esm/types/b24.mjs +1 -1
- package/dist/esm/types/bizproc/index.mjs +1 -1
- package/dist/esm/types/catalog/index.mjs +1 -1
- package/dist/esm/types/common.mjs +1 -1
- package/dist/esm/types/crm/entity-type.mjs +1 -1
- package/dist/esm/types/crm/productrow.mjs +1 -1
- package/dist/esm/types/logger.mjs +1 -1
- package/dist/esm/types/pull.mjs +1 -1
- package/dist/umd/index.js +1384 -680
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/index.min.js +26 -26
- package/dist/umd/index.min.js.map +1 -1
- package/dist/umd/package.json +3 -0
- package/package.json +12 -4
package/dist/esm/core/result.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package @bitrix24/b24jssdk
|
|
3
|
-
* @version
|
|
3
|
+
* @version 2.0.0
|
|
4
4
|
* @copyright (c) 2026 Bitrix24
|
|
5
5
|
* @license MIT
|
|
6
6
|
* @see https://github.com/bitrix24/b24jssdk
|
|
@@ -60,6 +60,40 @@ class Result {
|
|
|
60
60
|
getErrorMessages() {
|
|
61
61
|
return Array.from(this._errors.values(), (e) => e.message);
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Retrieves all errors as a plain object (a snapshot copy) keyed by their
|
|
65
|
+
* identifier, preserving which request produced each error. Unlike
|
|
66
|
+
* {@link Result.getErrors}, the keys are not discarded — useful for batch
|
|
67
|
+
* calls with `isHaltOnError: false`.
|
|
68
|
+
*
|
|
69
|
+
* For batch calls the key tells you *which* command failed:
|
|
70
|
+
* - an **object / named-command batch** keys each error by the command label;
|
|
71
|
+
* - an **array-mode batch** keys each per-command error by its **numeric
|
|
72
|
+
* position** (`'0'`, `'1'`, … as a string), matching the command order you
|
|
73
|
+
* passed in. (#255 — previously these fell back to a random UUID.)
|
|
74
|
+
*
|
|
75
|
+
* An envelope-level soft error (not tied to one command) lands under the
|
|
76
|
+
* internal `'base-error'` key, and {@link Result.addErrors} (no explicit key)
|
|
77
|
+
* still uses generated UUIDs — for those, prefer {@link Result.getErrors} /
|
|
78
|
+
* {@link Result.getErrorMessages}. (#230)
|
|
79
|
+
*
|
|
80
|
+
* @returns {Record<string, Error>} A map of error key to Error object.
|
|
81
|
+
*/
|
|
82
|
+
getErrorsByKey() {
|
|
83
|
+
return Object.fromEntries(this._errors);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Retrieves all error messages as a plain object (a snapshot copy) keyed by
|
|
87
|
+
* their identifier. Unlike {@link Result.getErrorMessages}, the keys are
|
|
88
|
+
* preserved. See {@link Result.getErrorsByKey} for when keys are meaningful.
|
|
89
|
+
*
|
|
90
|
+
* @returns {Record<string, string>} A map of error key to error message.
|
|
91
|
+
*/
|
|
92
|
+
getErrorMessagesByKey() {
|
|
93
|
+
return Object.fromEntries(
|
|
94
|
+
Array.from(this._errors, ([key, error]) => [key, error.message])
|
|
95
|
+
);
|
|
96
|
+
}
|
|
63
97
|
/**
|
|
64
98
|
* Converts the Result object to a string.
|
|
65
99
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.mjs","sources":["../../../src/core/result.ts"],"sourcesContent":["import { Text } from '../tools/text'\n\n/**\n * Interface defining the structure and methods of a Result object.\n */\nexport interface IResult<T = any> {\n /**\n * Indicates whether the operation resulted in success (no errors).\n */\n readonly isSuccess: boolean\n /**\n * Collection of errors\n */\n readonly errors: Map<string, Error>\n\n /**\n * Sets the data associated with the result.\n *\n * @param data The data to be stored in the result.\n * @returns The current Result object for chaining methods.\n */\n setData: (data: T) => IResult<T>\n /**\n * Retrieves the data associated with the result.\n *\n * @returns The data stored in the result, if any.\n */\n getData: () => T | null | undefined\n\n /**\n * Adds an error message or Error object to the result.\n * @param error The error message or Error object to be added.\n * @param key Error key. You can leave it blank. Then it will be generated automatically.\n * @returns {IResult} The current Result object for chaining methods.\n */\n addError: (error: Error | string, key?: string) => IResult\n /**\n * Adds multiple errors to the result in a single call.\n *\n * @param errors An array of errors or strings that will be converted to errors.\n * @returns {IResult} The current Result object for chaining methods.\n */\n addErrors: (errors: (Error | string)[]) => IResult\n /**\n * Retrieves an iterator for the errors collected in the result.\n *\n * @returns {IterableIterator<Error>} An iterator over the stored Error objects.\n */\n getErrors: () => IterableIterator<Error>\n\n /**\n * Retrieves an array of error messages from the collected errors.\n *\n * @returns {string[]} An array of strings representing the error messages.\n */\n getErrorMessages: () => string[]\n /**\n * Checks for an error in a collection by key\n * @param key - Error key\n */\n hasError(key: string): boolean\n /**\n * Converts the Result object to a string.\n *\n * @returns {string} Returns a string representation of the result operation\n */\n toString: () => string\n}\n\n/**\n * A class representing an operation result with success/failure status, data, and errors.\n * Similar to \\Bitrix\\Main\\Result from Bitrix Framework.\n * @link https://dev.1c-bitrix.ru/api_d7/bitrix/main/result/index.php\n */\nexport class Result<T = any> implements IResult<T> {\n protected _errors: Map<string, Error>\n protected _data: T | null | undefined\n\n constructor(data?: T) {\n this._errors = new Map()\n this._data = data ?? null\n }\n\n get isSuccess(): boolean {\n return this._errors.size === 0\n }\n\n get errors(): Map<string, Error> {\n return this._errors\n }\n\n setData(data: T | null | undefined): Result<T> {\n this._data = data\n\n return this\n }\n\n getData(): T | null | undefined {\n return this._data\n }\n\n addError(error: Error | string, key?: string): Result<T> {\n const errorKey = key ?? Text.getUuidRfc4122()\n const errorObj = typeof error === 'string' ? new Error(error) : error\n\n this._errors.set(errorKey, errorObj)\n\n return this\n }\n\n addErrors(errors: (Error | string)[]): Result<T> {\n for (const error of errors) {\n this.addError(error)\n }\n\n return this\n }\n\n getErrors(): IterableIterator<Error> {\n return this._errors.values()\n }\n\n hasError(key: string): boolean {\n return this._errors.has(key)\n }\n\n /**\n * Retrieves an array of error messages from the collected errors.\n *\n * @returns An array of strings representing the error messages. Each string\n * contains the message of a corresponding error object.\n */\n getErrorMessages(): string[] {\n return Array.from(this._errors.values(), e => e.message)\n }\n\n /**\n * Converts the Result object to a string.\n *\n * @returns {string} Returns a string representation of the result operation\n */\n toString(): string {\n const status = this.isSuccess ? 'success' : 'failure'\n const data = this.safeStringify(this._data)\n\n return this.isSuccess\n ? `Result(${status}): ${data}`\n : `Result(${status}): ${data}\\nErrors: ${this.getErrorMessages().join(', ')}`\n }\n\n private safeStringify(data: unknown): string {\n try {\n return JSON.stringify(data, this.replacer, 2)\n } catch {\n return '[Unable to serialize data]'\n }\n }\n\n private replacer(_: string, value: unknown) {\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack\n }\n }\n return value\n }\n\n // Static constructors\n static ok<U>(data?: U): Result<U> {\n return new Result<U>(data)\n }\n\n static fail<U>(error: Error | string, key?: string): Result<U> {\n return new Result<U>().addError(error, key)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"result.mjs","sources":["../../../src/core/result.ts"],"sourcesContent":["import { Text } from '../tools/text'\n\n/**\n * Interface defining the structure and methods of a Result object.\n */\nexport interface IResult<T = any> {\n /**\n * Indicates whether the operation resulted in success (no errors).\n */\n readonly isSuccess: boolean\n /**\n * Collection of errors\n */\n readonly errors: Map<string, Error>\n\n /**\n * Sets the data associated with the result.\n *\n * @param data The data to be stored in the result.\n * @returns The current Result object for chaining methods.\n */\n setData: (data: T) => IResult<T>\n /**\n * Retrieves the data associated with the result.\n *\n * @returns The data stored in the result, if any.\n */\n getData: () => T | null | undefined\n\n /**\n * Adds an error message or Error object to the result.\n * @param error The error message or Error object to be added.\n * @param key Error key. You can leave it blank. Then it will be generated automatically.\n * @returns {IResult} The current Result object for chaining methods.\n */\n addError: (error: Error | string, key?: string) => IResult\n /**\n * Adds multiple errors to the result in a single call.\n *\n * @param errors An array of errors or strings that will be converted to errors.\n * @returns {IResult} The current Result object for chaining methods.\n */\n addErrors: (errors: (Error | string)[]) => IResult\n /**\n * Retrieves an iterator for the errors collected in the result.\n *\n * @returns {IterableIterator<Error>} An iterator over the stored Error objects.\n * @see {@link IResult.getErrorsByKey} — keeps the request keys.\n */\n getErrors: () => IterableIterator<Error>\n\n /**\n * Retrieves an array of error messages from the collected errors.\n *\n * @returns {string[]} An array of strings representing the error messages.\n */\n getErrorMessages: () => string[]\n\n /**\n * Retrieves all errors keyed by their identifier (e.g. the batch request key),\n * preserving which request produced each error. Unlike {@link getErrors}, the\n * keys are not discarded — useful for batch calls with `isHaltOnError: false`.\n *\n * @returns {Record<string, Error>} A map of error key to Error object.\n */\n getErrorsByKey: () => Record<string, Error>\n\n /**\n * Retrieves all error messages keyed by their identifier (e.g. the batch\n * request key). Unlike {@link getErrorMessages}, the keys are preserved.\n *\n * @returns {Record<string, string>} A map of error key to error message.\n */\n getErrorMessagesByKey: () => Record<string, string>\n\n /**\n * Checks for an error in a collection by key\n * @param key - Error key\n */\n hasError(key: string): boolean\n /**\n * Converts the Result object to a string.\n *\n * @returns {string} Returns a string representation of the result operation\n */\n toString: () => string\n}\n\n/**\n * A class representing an operation result with success/failure status, data, and errors.\n * Similar to \\Bitrix\\Main\\Result from Bitrix Framework.\n * @link https://dev.1c-bitrix.ru/api_d7/bitrix/main/result/index.php\n */\nexport class Result<T = any> implements IResult<T> {\n protected _errors: Map<string, Error>\n protected _data: T | null | undefined\n\n constructor(data?: T) {\n this._errors = new Map()\n this._data = data ?? null\n }\n\n get isSuccess(): boolean {\n return this._errors.size === 0\n }\n\n get errors(): Map<string, Error> {\n return this._errors\n }\n\n setData(data: T | null | undefined): Result<T> {\n this._data = data\n\n return this\n }\n\n getData(): T | null | undefined {\n return this._data\n }\n\n addError(error: Error | string, key?: string): Result<T> {\n const errorKey = key ?? Text.getUuidRfc4122()\n const errorObj = typeof error === 'string' ? new Error(error) : error\n\n this._errors.set(errorKey, errorObj)\n\n return this\n }\n\n addErrors(errors: (Error | string)[]): Result<T> {\n for (const error of errors) {\n this.addError(error)\n }\n\n return this\n }\n\n getErrors(): IterableIterator<Error> {\n return this._errors.values()\n }\n\n hasError(key: string): boolean {\n return this._errors.has(key)\n }\n\n /**\n * Retrieves an array of error messages from the collected errors.\n *\n * @returns An array of strings representing the error messages. Each string\n * contains the message of a corresponding error object.\n */\n getErrorMessages(): string[] {\n return Array.from(this._errors.values(), e => e.message)\n }\n\n /**\n * Retrieves all errors as a plain object (a snapshot copy) keyed by their\n * identifier, preserving which request produced each error. Unlike\n * {@link Result.getErrors}, the keys are not discarded — useful for batch\n * calls with `isHaltOnError: false`.\n *\n * For batch calls the key tells you *which* command failed:\n * - an **object / named-command batch** keys each error by the command label;\n * - an **array-mode batch** keys each per-command error by its **numeric\n * position** (`'0'`, `'1'`, … as a string), matching the command order you\n * passed in. (#255 — previously these fell back to a random UUID.)\n *\n * An envelope-level soft error (not tied to one command) lands under the\n * internal `'base-error'` key, and {@link Result.addErrors} (no explicit key)\n * still uses generated UUIDs — for those, prefer {@link Result.getErrors} /\n * {@link Result.getErrorMessages}. (#230)\n *\n * @returns {Record<string, Error>} A map of error key to Error object.\n */\n getErrorsByKey(): Record<string, Error> {\n return Object.fromEntries(this._errors)\n }\n\n /**\n * Retrieves all error messages as a plain object (a snapshot copy) keyed by\n * their identifier. Unlike {@link Result.getErrorMessages}, the keys are\n * preserved. See {@link Result.getErrorsByKey} for when keys are meaningful.\n *\n * @returns {Record<string, string>} A map of error key to error message.\n */\n getErrorMessagesByKey(): Record<string, string> {\n // `Object.fromEntries` (like getErrorsByKey) is prototype-safe: a literal\n // `__proto__` key becomes an own property instead of being silently dropped.\n return Object.fromEntries(\n Array.from(this._errors, ([key, error]): [string, string] => [key, error.message])\n )\n }\n\n /**\n * Converts the Result object to a string.\n *\n * @returns {string} Returns a string representation of the result operation\n */\n toString(): string {\n const status = this.isSuccess ? 'success' : 'failure'\n const data = this.safeStringify(this._data)\n\n return this.isSuccess\n ? `Result(${status}): ${data}`\n : `Result(${status}): ${data}\\nErrors: ${this.getErrorMessages().join(', ')}`\n }\n\n private safeStringify(data: unknown): string {\n try {\n return JSON.stringify(data, this.replacer, 2)\n } catch {\n return '[Unable to serialize data]'\n }\n }\n\n private replacer(_: string, value: unknown) {\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack\n }\n }\n return value\n }\n\n // Static constructors\n static ok<U>(data?: U): Result<U> {\n return new Result<U>(data)\n }\n\n static fail<U>(error: Error | string, key?: string): Result<U> {\n return new Result<U>().addError(error, key)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package @bitrix24/b24jssdk
|
|
3
|
-
* @version
|
|
3
|
+
* @version 2.0.0
|
|
4
4
|
* @copyright (c) 2026 Bitrix24
|
|
5
5
|
* @license MIT
|
|
6
6
|
* @see https://github.com/bitrix24/b24jssdk
|
|
@@ -12,8 +12,8 @@ import { LoggerFactory } from '../../logger/logger-factory.mjs';
|
|
|
12
12
|
|
|
13
13
|
var __defProp = Object.defineProperty;
|
|
14
14
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
-
const pingName = Symbol("ping");
|
|
16
|
-
const healthCheckName = Symbol("healthCheck");
|
|
15
|
+
const pingName = /* @__PURE__ */ Symbol("ping");
|
|
16
|
+
const healthCheckName = /* @__PURE__ */ Symbol("healthCheck");
|
|
17
17
|
class ToolsManager {
|
|
18
18
|
static {
|
|
19
19
|
__name(this, "ToolsManager");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.mjs","sources":["../../../../src/core/tools/manager.ts"],"sourcesContent":["import type { TypeB24 } from '../../types/b24'\nimport type { LoggerInterface } from '../../types/logger'\nimport type { AbstractTool } from './abstract-tool'\nimport { LoggerFactory } from '../../logger'\nimport { Ping } from './ping'\nimport { HealthCheck } from './healthcheck'\n\nconst pingName = Symbol('ping')\nconst healthCheckName = Symbol('healthCheck')\n/**\n * Some tools for TypeB24\n * @todo add docs\n */\nexport class ToolsManager {\n protected _b24: TypeB24\n protected _logger: LoggerInterface\n\n protected _mapTools: Map<symbol, AbstractTool>\n\n constructor(b24: TypeB24) {\n this._b24 = b24\n this._logger = LoggerFactory.createNullLogger()\n\n this._mapTools = new Map()\n }\n\n public setLogger(logger: LoggerInterface): void {\n this._logger = logger\n }\n\n public getLogger(): LoggerInterface {\n return this._logger\n }\n\n get ping(): Ping {\n if (!this._mapTools.has(pingName)) {\n this._mapTools.set(pingName, new Ping(this._b24, this._logger))\n }\n return this._mapTools.get(pingName)! as Ping\n }\n\n get healthCheck(): HealthCheck {\n if (!this._mapTools.has(healthCheckName)) {\n this._mapTools.set(healthCheckName, new HealthCheck(this._b24, this._logger))\n }\n return this._mapTools.get(healthCheckName)! as HealthCheck\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAOA,MAAM,QAAA,
|
|
1
|
+
{"version":3,"file":"manager.mjs","sources":["../../../../src/core/tools/manager.ts"],"sourcesContent":["import type { TypeB24 } from '../../types/b24'\nimport type { LoggerInterface } from '../../types/logger'\nimport type { AbstractTool } from './abstract-tool'\nimport { LoggerFactory } from '../../logger'\nimport { Ping } from './ping'\nimport { HealthCheck } from './healthcheck'\n\nconst pingName = Symbol('ping')\nconst healthCheckName = Symbol('healthCheck')\n/**\n * Some tools for TypeB24\n * @todo add docs\n */\nexport class ToolsManager {\n protected _b24: TypeB24\n protected _logger: LoggerInterface\n\n protected _mapTools: Map<symbol, AbstractTool>\n\n constructor(b24: TypeB24) {\n this._b24 = b24\n this._logger = LoggerFactory.createNullLogger()\n\n this._mapTools = new Map()\n }\n\n public setLogger(logger: LoggerInterface): void {\n this._logger = logger\n }\n\n public getLogger(): LoggerInterface {\n return this._logger\n }\n\n get ping(): Ping {\n if (!this._mapTools.has(pingName)) {\n this._mapTools.set(pingName, new Ping(this._b24, this._logger))\n }\n return this._mapTools.get(pingName)! as Ping\n }\n\n get healthCheck(): HealthCheck {\n if (!this._mapTools.has(healthCheckName)) {\n this._mapTools.set(healthCheckName, new HealthCheck(this._b24, this._logger))\n }\n return this._mapTools.get(healthCheckName)! as HealthCheck\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAOA,MAAM,QAAA,0BAAkB,MAAM,CAAA;AAC9B,MAAM,eAAA,0BAAyB,aAAa,CAAA;AAKrC,MAAM,YAAA,CAAa;AAAA,EAb1B;AAa0B,IAAA,MAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA,EACd,IAAA;AAAA,EACA,OAAA;AAAA,EAEA,SAAA;AAAA,EAEV,YAAY,GAAA,EAAc;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,cAAc,gBAAA,EAAiB;AAE9C,IAAA,IAAA,CAAK,SAAA,uBAAgB,GAAA,EAAI;AAAA,EAC3B;AAAA,EAEO,UAAU,MAAA,EAA+B;AAC9C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AAAA,EAEO,SAAA,GAA6B;AAClC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,IAAI,IAAA,GAAa;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,EAAG;AACjC,MAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAA,EAAU,IAAI,KAAK,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAAA,EACpC;AAAA,EAEA,IAAI,WAAA,GAA2B;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,eAAe,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,SAAA,CAAU,IAAI,eAAA,EAAiB,IAAI,YAAY,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IAC9E;AACA,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,eAAe,CAAA;AAAA,EAC3C;AACF;;;;"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package @bitrix24/b24jssdk
|
|
3
|
-
* @version
|
|
3
|
+
* @version 2.0.0
|
|
4
4
|
* @copyright (c) 2026 Bitrix24
|
|
5
5
|
* @license MIT
|
|
6
6
|
* @see https://github.com/bitrix24/b24jssdk
|
|
7
7
|
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
8
|
*/
|
|
9
9
|
import { ApiVersion } from '../types/b24.mjs';
|
|
10
|
-
import { ParseRow } from './interaction/batch/parse-row.mjs';
|
|
11
|
-
import { SdkError } from './sdk-error.mjs';
|
|
12
10
|
|
|
13
11
|
var __defProp = Object.defineProperty;
|
|
14
12
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -16,97 +14,38 @@ class VersionManager {
|
|
|
16
14
|
static {
|
|
17
15
|
__name(this, "VersionManager");
|
|
18
16
|
}
|
|
19
|
-
#supportMethods;
|
|
20
|
-
constructor() {
|
|
21
|
-
this.#supportMethods = [
|
|
22
|
-
"/batch",
|
|
23
|
-
// done
|
|
24
|
-
"/scopes",
|
|
25
|
-
// done
|
|
26
|
-
"/rest.scope.list",
|
|
27
|
-
// done
|
|
28
|
-
"/rest.documentation.openapi",
|
|
29
|
-
"/documentation",
|
|
30
|
-
/** @see /settings/configs/event_log.php */
|
|
31
|
-
"/main.eventlog.list",
|
|
32
|
-
// done
|
|
33
|
-
"/main.eventlog.get",
|
|
34
|
-
// done
|
|
35
|
-
"/main.eventlog.tail",
|
|
36
|
-
// done
|
|
37
|
-
"/tasks.task.chat.message.send",
|
|
38
|
-
"/tasks.task.access.get",
|
|
39
|
-
"/tasks.task.file.attach",
|
|
40
|
-
"/tasks.task.update",
|
|
41
|
-
// done
|
|
42
|
-
"/tasks.task.delete",
|
|
43
|
-
"/tasks.task.add",
|
|
44
|
-
"/tasks.task.get"
|
|
45
|
-
// done
|
|
46
|
-
// @todo When API.v3 arrives - change in AuthOAuthManager.initIsAdmin()
|
|
47
|
-
// '/profile' // waite
|
|
48
|
-
// '/main.message.get' // waite
|
|
49
|
-
// '/main.chat.update' // waite
|
|
50
|
-
// '/main.chat.list' // waite
|
|
51
|
-
// '/main.user.list' // waite
|
|
52
|
-
];
|
|
53
|
-
}
|
|
54
17
|
static create() {
|
|
55
18
|
return new VersionManager();
|
|
56
19
|
}
|
|
57
20
|
/**
|
|
58
|
-
* List of supported API versions
|
|
59
|
-
* The highest version must be first
|
|
21
|
+
* List of supported API versions.
|
|
22
|
+
* The highest version must be first.
|
|
60
23
|
*/
|
|
61
24
|
getAllApiVersions() {
|
|
62
25
|
return [ApiVersion.v3, ApiVersion.v2];
|
|
63
26
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
#v3Support(method) {
|
|
74
|
-
return this.#supportMethods.includes(`/${method}`);
|
|
27
|
+
/**
|
|
28
|
+
* Retained for backward compatibility. The SDK no longer keeps a v3 method
|
|
29
|
+
* allowlist, so support is not decided client-side any more — always returns
|
|
30
|
+
* `true`. Method existence is validated by the server.
|
|
31
|
+
*/
|
|
32
|
+
isSupport(_version, _method) {
|
|
33
|
+
return true;
|
|
75
34
|
}
|
|
76
35
|
/**
|
|
77
|
-
*
|
|
36
|
+
* Returns the API version to use when the caller did not specify one. With the
|
|
37
|
+
* allowlist removed there is no client-side signal that a method is a v3
|
|
38
|
+
* method, so this defaults to v2 (the universal endpoint). Use the explicit
|
|
39
|
+
* `actions.v3.*` surface to call a method on v3.
|
|
78
40
|
*/
|
|
79
|
-
automaticallyObtainApiVersion(
|
|
80
|
-
|
|
81
|
-
if (!version) {
|
|
82
|
-
throw new SdkError({
|
|
83
|
-
code: "JSSDK_VERSION_MANAGER_NOT_DETECT_FOR_METHOD",
|
|
84
|
-
description: `No API version found that supports method ${method}.`,
|
|
85
|
-
status: 500
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
return version;
|
|
41
|
+
automaticallyObtainApiVersion(_method) {
|
|
42
|
+
return ApiVersion.v2;
|
|
89
43
|
}
|
|
90
44
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* @todo test methods
|
|
94
|
-
* `[['crm.item.get', { entityTypeId: 3, id: 1 }]]`
|
|
95
|
-
* `[{ method: 'crm.item.get', params: { entityTypeId: 3, id: 1 } }]`
|
|
96
|
-
* `{ cmd1: { method: 'crm.item.get', params: { entityTypeId: 3, id: 1 } }, cmd2: ['crm.item.get', { entityTypeId: 2, id: 2 }] }`
|
|
45
|
+
* Batch counterpart of {@link automaticallyObtainApiVersion}. Defaults to v2;
|
|
46
|
+
* call `actions.v3.batch.make` explicitly to run a batch on v3.
|
|
97
47
|
*/
|
|
98
|
-
automaticallyObtainApiVersionForBatch(
|
|
99
|
-
const commands = ParseRow.getMethodsFromCommands(calls);
|
|
100
|
-
let isAllSupportV3 = true;
|
|
101
|
-
for (const [_, method] of commands.entries()) {
|
|
102
|
-
if (!this.isSupport(ApiVersion.v3, method)) {
|
|
103
|
-
isAllSupportV3 = false;
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (isAllSupportV3) {
|
|
108
|
-
return ApiVersion.v3;
|
|
109
|
-
}
|
|
48
|
+
automaticallyObtainApiVersionForBatch(_calls) {
|
|
110
49
|
return ApiVersion.v2;
|
|
111
50
|
}
|
|
112
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-manager.mjs","sources":["../../../src/core/version-manager.ts"],"sourcesContent":["import { ApiVersion } from '../types/b24'\nimport type {\n BatchCommandsArrayUniversal,\n BatchCommandsObjectUniversal,\n BatchNamedCommandsUniversal\n} from '../types/http'\
|
|
1
|
+
{"version":3,"file":"version-manager.mjs","sources":["../../../src/core/version-manager.ts"],"sourcesContent":["import { ApiVersion } from '../types/b24'\nimport type {\n BatchCommandsArrayUniversal,\n BatchCommandsObjectUniversal,\n BatchNamedCommandsUniversal\n} from '../types/http'\n\n/**\n * Decides which REST API version a method is routed through.\n *\n * The SDK no longer maintains a hardcoded v3 method allowlist. A portal's set of\n * v3 methods is large and version/edition-dependent (the authoritative list is\n * the portal's own OpenAPI document, `rest.documentation.openapi`), so gating on\n * a static list both lagged behind the server and blocked valid methods. The\n * server is now the single source of truth: an unknown v3 method simply comes\n * back as `METHODNOTFOUNDEXCEPTION`.\n *\n * Consequences:\n * - `actions.v3.*` no longer pre-flight-rejects a method — it is sent to the v3\n * endpoint and the server validates it.\n * - v3 is opt-in only via the explicit `actions.v3.*` surface; version\n * auto-detection therefore defaults to v2 (the universal endpoint).\n */\nclass VersionManager {\n static create(): VersionManager {\n return new VersionManager()\n }\n\n /**\n * List of supported API versions.\n * The highest version must be first.\n */\n public getAllApiVersions(): ApiVersion[] {\n return [ApiVersion.v3, ApiVersion.v2]\n }\n\n /**\n * Retained for backward compatibility. The SDK no longer keeps a v3 method\n * allowlist, so support is not decided client-side any more — always returns\n * `true`. Method existence is validated by the server.\n */\n public isSupport(_version: ApiVersion, _method: string): boolean {\n return true\n }\n\n /**\n * Returns the API version to use when the caller did not specify one. With the\n * allowlist removed there is no client-side signal that a method is a v3\n * method, so this defaults to v2 (the universal endpoint). Use the explicit\n * `actions.v3.*` surface to call a method on v3.\n */\n public automaticallyObtainApiVersion(_method: string): ApiVersion {\n return ApiVersion.v2\n }\n\n /**\n * Batch counterpart of {@link automaticallyObtainApiVersion}. Defaults to v2;\n * call `actions.v3.batch.make` explicitly to run a batch on v3.\n */\n public automaticallyObtainApiVersionForBatch(\n _calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal\n ): ApiVersion {\n return ApiVersion.v2\n }\n}\n\nexport const versionManager = VersionManager.create()\n"],"names":[],"mappings":";;;;;;;;;;;;AAuBA,MAAM,cAAA,CAAe;AAAA,EAvBrB;AAuBqB,IAAA,MAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AAAA,EACnB,OAAO,MAAA,GAAyB;AAC9B,IAAA,OAAO,IAAI,cAAA,EAAe;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,iBAAA,GAAkC;AACvC,IAAA,OAAO,CAAC,UAAA,CAAW,EAAA,EAAI,UAAA,CAAW,EAAE,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAA,CAAU,UAAsB,OAAA,EAA0B;AAC/D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,8BAA8B,OAAA,EAA6B;AAChE,IAAA,OAAO,UAAA,CAAW,EAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,sCACL,MAAA,EACY;AACZ,IAAA,OAAO,UAAA,CAAW,EAAA;AAAA,EACpB;AACF;AAEO,MAAM,cAAA,GAAiB,eAAe,MAAA;;;;"}
|
package/dist/esm/frame/auth.mjs
CHANGED
package/dist/esm/frame/b24.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package @bitrix24/b24jssdk
|
|
3
|
-
* @version
|
|
3
|
+
* @version 2.0.0
|
|
4
4
|
* @copyright (c) 2026 Bitrix24
|
|
5
5
|
* @license MIT
|
|
6
6
|
* @see https://github.com/bitrix24/b24jssdk
|
|
@@ -95,7 +95,13 @@ class B24Frame extends AbstractB24 {
|
|
|
95
95
|
}
|
|
96
96
|
async init() {
|
|
97
97
|
const data = await this.#messageManager.send(MessageCommands.getInitData, {});
|
|
98
|
-
this.getLogger().debug("init data", {
|
|
98
|
+
this.getLogger().debug("init data", {
|
|
99
|
+
PLACEMENT: data.PLACEMENT,
|
|
100
|
+
LANG: data.LANG,
|
|
101
|
+
INSTALL: data.INSTALL,
|
|
102
|
+
IS_ADMIN: data.IS_ADMIN,
|
|
103
|
+
FIRST_RUN: data.FIRST_RUN
|
|
104
|
+
});
|
|
99
105
|
this.#appFrame.initData(data);
|
|
100
106
|
this.#authManager.initData(data);
|
|
101
107
|
this.#placementManager.initData(data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"b24.mjs","sources":["../../../src/frame/b24.ts"],"sourcesContent":["import type { LoggerInterface } from '../logger'\nimport type { B24LangList } from '../core/language/list'\nimport type { AuthActions, MessageInitData, B24FrameQueryParams } from '../types/auth'\nimport type { RestrictionParams } from '../types/limiters'\nimport type { TypeB24, ApiVersion } from '../types/b24'\nimport { AbstractB24 } from '../core/abstract-b24'\nimport { HttpV2 } from '../core/http/v2'\nimport { HttpV3 } from '../core/http/v3'\nimport { AppFrame } from './frame'\nimport { MessageManager, MessageCommands } from './message'\nimport { AuthManager } from './auth'\nimport { ParentManager } from './parent'\nimport { OptionsManager } from './options'\nimport { DialogManager } from './dialog'\nimport { SliderManager } from './slider'\nimport { PlacementManager } from './placement'\n\n/**\n * B24 Manager. Replacement api.bitrix24.com\n *\n * @link https://api.bitrix24.com/api/v1/\n * @link https://bitrix24.github.io/b24jssdk/docs/frame/\n * @see /bitrix/js/rest/applayout.js\n *\n * @todo add docs\n */\nexport class B24Frame extends AbstractB24 implements TypeB24 {\n #isInstallMode: boolean = false\n #isFirstRun: boolean = false\n\n readonly #appFrame: AppFrame\n readonly #messageManager: MessageManager\n readonly #authManager: AuthManager\n readonly #parentManager: ParentManager\n readonly #optionsManager: OptionsManager\n readonly #dialogManager: DialogManager\n readonly #sliderManager: SliderManager\n readonly #placementManager: PlacementManager\n\n readonly #restrictionParams: undefined | Partial<RestrictionParams>\n\n // region Init ////\n constructor(\n queryParams: B24FrameQueryParams,\n options?: {\n restrictionParams?: Partial<RestrictionParams>\n }\n ) {\n super()\n\n this.#restrictionParams = options?.restrictionParams\n\n this.#appFrame = new AppFrame(queryParams)\n\n this.#messageManager = new MessageManager(this.#appFrame)\n this.#messageManager.subscribe()\n\n this.#authManager = new AuthManager(\n this.#appFrame,\n this.#messageManager\n )\n this.#parentManager = new ParentManager(this.#messageManager)\n this.#optionsManager = new OptionsManager(this.#messageManager)\n this.#dialogManager = new DialogManager(this.#messageManager)\n this.#sliderManager = new SliderManager(\n this.#appFrame,\n this.#messageManager\n )\n this.#placementManager = new PlacementManager(this.#messageManager)\n\n this._isInit = false\n }\n\n public override setLogger(logger: LoggerInterface): void {\n super.setLogger(logger)\n this.#messageManager.setLogger(this.getLogger())\n }\n\n get isFirstRun(): boolean {\n this._ensureInitialized()\n return this.#isFirstRun\n }\n\n get isInstallMode(): boolean {\n this._ensureInitialized()\n return this.#isInstallMode\n }\n\n get parent(): ParentManager {\n this._ensureInitialized()\n return this.#parentManager\n }\n\n override get auth(): AuthActions {\n this._ensureInitialized()\n return this.#authManager\n }\n\n get slider(): SliderManager {\n this._ensureInitialized()\n return this.#sliderManager\n }\n\n get placement(): PlacementManager {\n this._ensureInitialized()\n return this.#placementManager\n }\n\n get options(): OptionsManager {\n this._ensureInitialized()\n return this.#optionsManager\n }\n\n get dialog(): DialogManager {\n this._ensureInitialized()\n return this.#dialogManager\n }\n\n public override async init(): Promise<void> {\n const data: MessageInitData = await this.#messageManager.send(MessageCommands.getInitData, {})\n\n this.getLogger().debug('init data', { data })\n\n this.#appFrame.initData(data)\n this.#authManager.initData(data)\n this.#placementManager.initData(data)\n this.#optionsManager.initData(data)\n\n this.#isInstallMode = data.INSTALL\n this.#isFirstRun = data.FIRST_RUN\n\n this._httpV2 = new HttpV2(this.#authManager, this._getHttpOptions(), this.#restrictionParams)\n this._httpV3 = new HttpV3(this.#authManager, this._getHttpOptions(), this.#restrictionParams)\n\n this._isInit = true\n\n /**\n * @memo Writes the fact of the 1st launch to `app_options`\n */\n if (this.#isFirstRun) {\n return this.#messageManager.send(MessageCommands.setInstall, { install: true })\n }\n\n return Promise.resolve()\n }\n\n /**\n * Destructor.\n * Removes an event subscription\n */\n public override destroy() {\n this.#messageManager.unsubscribe()\n super.destroy()\n }\n // endregion ////\n\n // region Core ////\n /**\n * Signals that the installer or application setup has finished running.\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/system-functions/bx24-install-finish.html\n */\n public async installFinish(): Promise<any> {\n if (!this.isInstallMode) {\n return Promise.reject(new Error('Application was previously installed. You cannot call installFinish'))\n }\n\n return this.#messageManager.send(MessageCommands.setInstallFinish, {})\n }\n // endregion ////\n\n // region Get ////\n /**\n * @inheritDoc\n */\n public override getTargetOrigin(): string {\n this._ensureInitialized()\n return this.#authManager.getTargetOrigin()\n }\n\n /**\n * @inheritDoc\n */\n public override getTargetOriginWithPath(): Map<ApiVersion, string> {\n this._ensureInitialized()\n return this.#authManager.getTargetOriginWithPath()\n }\n\n /**\n * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`\n */\n public getAppSid(): string {\n this._ensureInitialized()\n return this.#appFrame.getAppSid()\n }\n\n /**\n * Returns the localization of the B24 interface\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-get-lang.html\n */\n public getLang(): B24LangList {\n this._ensureInitialized()\n return this.#appFrame.getLang()\n }\n // endregion ////\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"b24.mjs","sources":["../../../src/frame/b24.ts"],"sourcesContent":["import type { LoggerInterface } from '../logger'\nimport type { B24LangList } from '../core/language/list'\nimport type { AuthActions, MessageInitData, B24FrameQueryParams } from '../types/auth'\nimport type { RestrictionParams } from '../types/limiters'\nimport type { TypeB24, ApiVersion } from '../types/b24'\nimport { AbstractB24 } from '../core/abstract-b24'\nimport { HttpV2 } from '../core/http/v2'\nimport { HttpV3 } from '../core/http/v3'\nimport { AppFrame } from './frame'\nimport { MessageManager, MessageCommands } from './message'\nimport { AuthManager } from './auth'\nimport { ParentManager } from './parent'\nimport { OptionsManager } from './options'\nimport { DialogManager } from './dialog'\nimport { SliderManager } from './slider'\nimport { PlacementManager } from './placement'\n\n/**\n * B24 Manager. Replacement api.bitrix24.com\n *\n * @link https://api.bitrix24.com/api/v1/\n * @link https://bitrix24.github.io/b24jssdk/docs/frame/\n * @see /bitrix/js/rest/applayout.js\n *\n * @todo add docs\n */\nexport class B24Frame extends AbstractB24 implements TypeB24 {\n #isInstallMode: boolean = false\n #isFirstRun: boolean = false\n\n readonly #appFrame: AppFrame\n readonly #messageManager: MessageManager\n readonly #authManager: AuthManager\n readonly #parentManager: ParentManager\n readonly #optionsManager: OptionsManager\n readonly #dialogManager: DialogManager\n readonly #sliderManager: SliderManager\n readonly #placementManager: PlacementManager\n\n readonly #restrictionParams: undefined | Partial<RestrictionParams>\n\n // region Init ////\n constructor(\n queryParams: B24FrameQueryParams,\n options?: {\n restrictionParams?: Partial<RestrictionParams>\n }\n ) {\n super()\n\n this.#restrictionParams = options?.restrictionParams\n\n this.#appFrame = new AppFrame(queryParams)\n\n this.#messageManager = new MessageManager(this.#appFrame)\n this.#messageManager.subscribe()\n\n this.#authManager = new AuthManager(\n this.#appFrame,\n this.#messageManager\n )\n this.#parentManager = new ParentManager(this.#messageManager)\n this.#optionsManager = new OptionsManager(this.#messageManager)\n this.#dialogManager = new DialogManager(this.#messageManager)\n this.#sliderManager = new SliderManager(\n this.#appFrame,\n this.#messageManager\n )\n this.#placementManager = new PlacementManager(this.#messageManager)\n\n this._isInit = false\n }\n\n public override setLogger(logger: LoggerInterface): void {\n super.setLogger(logger)\n this.#messageManager.setLogger(this.getLogger())\n }\n\n get isFirstRun(): boolean {\n this._ensureInitialized()\n return this.#isFirstRun\n }\n\n get isInstallMode(): boolean {\n this._ensureInitialized()\n return this.#isInstallMode\n }\n\n get parent(): ParentManager {\n this._ensureInitialized()\n return this.#parentManager\n }\n\n override get auth(): AuthActions {\n this._ensureInitialized()\n return this.#authManager\n }\n\n get slider(): SliderManager {\n this._ensureInitialized()\n return this.#sliderManager\n }\n\n get placement(): PlacementManager {\n this._ensureInitialized()\n return this.#placementManager\n }\n\n get options(): OptionsManager {\n this._ensureInitialized()\n return this.#optionsManager\n }\n\n get dialog(): DialogManager {\n this._ensureInitialized()\n return this.#dialogManager\n }\n\n public override async init(): Promise<void> {\n const data: MessageInitData = await this.#messageManager.send(MessageCommands.getInitData, {})\n\n // Log only a fixed allowlist of known-safe scalar fields. The raw `data`\n // carries the bearer tokens AUTH_ID (access) / REFRESH_ID (refresh), the\n // MEMBER_ID portal identifier, and the app-defined APP_OPTIONS /\n // USER_OPTIONS / PLACEMENT_OPTIONS stores (which may hold developer-stored\n // secrets) — none of which must reach a wired logger sink (#43).\n this.getLogger().debug('init data', {\n PLACEMENT: data.PLACEMENT,\n LANG: data.LANG,\n INSTALL: data.INSTALL,\n IS_ADMIN: data.IS_ADMIN,\n FIRST_RUN: data.FIRST_RUN\n })\n\n this.#appFrame.initData(data)\n this.#authManager.initData(data)\n this.#placementManager.initData(data)\n this.#optionsManager.initData(data)\n\n this.#isInstallMode = data.INSTALL\n this.#isFirstRun = data.FIRST_RUN\n\n this._httpV2 = new HttpV2(this.#authManager, this._getHttpOptions(), this.#restrictionParams)\n this._httpV3 = new HttpV3(this.#authManager, this._getHttpOptions(), this.#restrictionParams)\n\n this._isInit = true\n\n /**\n * @memo Writes the fact of the 1st launch to `app_options`\n */\n if (this.#isFirstRun) {\n return this.#messageManager.send(MessageCommands.setInstall, { install: true })\n }\n\n return Promise.resolve()\n }\n\n /**\n * Destructor.\n * Removes an event subscription\n */\n public override destroy() {\n this.#messageManager.unsubscribe()\n super.destroy()\n }\n // endregion ////\n\n // region Core ////\n /**\n * Signals that the installer or application setup has finished running.\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/system-functions/bx24-install-finish.html\n */\n public async installFinish(): Promise<any> {\n if (!this.isInstallMode) {\n return Promise.reject(new Error('Application was previously installed. You cannot call installFinish'))\n }\n\n return this.#messageManager.send(MessageCommands.setInstallFinish, {})\n }\n // endregion ////\n\n // region Get ////\n /**\n * @inheritDoc\n */\n public override getTargetOrigin(): string {\n this._ensureInitialized()\n return this.#authManager.getTargetOrigin()\n }\n\n /**\n * @inheritDoc\n */\n public override getTargetOriginWithPath(): Map<ApiVersion, string> {\n this._ensureInitialized()\n return this.#authManager.getTargetOriginWithPath()\n }\n\n /**\n * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`\n */\n public getAppSid(): string {\n this._ensureInitialized()\n return this.#appFrame.getAppSid()\n }\n\n /**\n * Returns the localization of the B24 interface\n *\n * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-get-lang.html\n */\n public getLang(): B24LangList {\n this._ensureInitialized()\n return this.#appFrame.getLang()\n }\n // endregion ////\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/frame/frame.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package @bitrix24/b24jssdk
|
|
3
|
-
* @version
|
|
3
|
+
* @version 2.0.0
|
|
4
4
|
* @copyright (c) 2026 Bitrix24
|
|
5
5
|
* @license MIT
|
|
6
6
|
* @see https://github.com/bitrix24/b24jssdk
|
|
@@ -20,6 +20,9 @@ class MessageManager {
|
|
|
20
20
|
#appFrame;
|
|
21
21
|
#callbackPromises;
|
|
22
22
|
#callbackSingletone;
|
|
23
|
+
// origins already warned about (#244) — dedup so a peer spamming postMessage
|
|
24
|
+
// from a foreign origin can't flood a wired logger sink
|
|
25
|
+
#rejectedOrigins = /* @__PURE__ */ new Set();
|
|
23
26
|
_logger;
|
|
24
27
|
runCallbackHandler;
|
|
25
28
|
constructor(appFrame) {
|
|
@@ -99,7 +102,8 @@ class MessageManager {
|
|
|
99
102
|
cmd += ":" + listParams.filter(Boolean).join(":");
|
|
100
103
|
}
|
|
101
104
|
this.getLogger().debug(`send to ${this.#appFrame.getTargetOrigin()}`, {
|
|
102
|
-
|
|
105
|
+
command: command.toString(),
|
|
106
|
+
callbackKey: keyPromise,
|
|
103
107
|
origin: this.#appFrame.getTargetOrigin()
|
|
104
108
|
});
|
|
105
109
|
parent.postMessage(cmd, this.#appFrame.getTargetOrigin());
|
|
@@ -129,18 +133,25 @@ class MessageManager {
|
|
|
129
133
|
*/
|
|
130
134
|
_runCallback(event) {
|
|
131
135
|
if (event.origin !== this.#appFrame.getTargetOrigin()) {
|
|
136
|
+
if (!this.#rejectedOrigins.has(event.origin)) {
|
|
137
|
+
this.#rejectedOrigins.add(event.origin);
|
|
138
|
+
this.getLogger().warning("message rejected: unexpected origin", {
|
|
139
|
+
origin: event.origin,
|
|
140
|
+
expected: this.#appFrame.getTargetOrigin()
|
|
141
|
+
});
|
|
142
|
+
}
|
|
132
143
|
return;
|
|
133
144
|
}
|
|
134
145
|
if (event.data) {
|
|
135
|
-
this.getLogger().debug(`get from ${event.origin}`, {
|
|
136
|
-
data: event.data,
|
|
137
|
-
origin: event.origin
|
|
138
|
-
});
|
|
139
146
|
const tmp = event.data.split(":");
|
|
140
147
|
const cmd = {
|
|
141
148
|
id: tmp[0],
|
|
142
149
|
args: tmp.slice(1).join(":")
|
|
143
150
|
};
|
|
151
|
+
this.getLogger().debug(`get from ${event.origin}`, {
|
|
152
|
+
id: cmd.id,
|
|
153
|
+
origin: event.origin
|
|
154
|
+
});
|
|
144
155
|
if (cmd.args) {
|
|
145
156
|
cmd.args = JSON.parse(cmd.args);
|
|
146
157
|
}
|
|
@@ -1 +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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"}
|
|
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 // origins already warned about (#244) — dedup so a peer spamming postMessage\n // from a foreign origin can't flood a wired logger sink\n #rejectedOrigins: Set<string> = new Set()\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 // Log only the command + callback key, never the assembled `cmd` string:\n // for setAppOption / setUserOption it carries the serialised option\n // `value`, which an app may use to store a credential (#43).\n this.getLogger().debug(`send to ${this.#appFrame.getTargetOrigin()}`, {\n command: command.toString(),\n callbackKey: keyPromise,\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 // Surface a message from an unexpected origin (a probe, or a misconfigured\n // parent) — log the origins only, never event.data, which may carry the\n // AUTH_ID / REFRESH_ID a foreign sender must not have echoed back (#244).\n // Log once per distinct origin so a spamming peer can't flood the sink.\n if (!this.#rejectedOrigins.has(event.origin)) {\n this.#rejectedOrigins.add(event.origin)\n this.getLogger().warning('message rejected: unexpected origin', {\n origin: event.origin,\n expected: this.#appFrame.getTargetOrigin()\n })\n }\n\n return\n }\n\n if (event.data) {\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 // Log only the callback id and origin — never `event.data` / `cmd.args`.\n // The inbound message carries the auth tokens (AUTH_ID / REFRESH_ID) for\n // refreshAuth / getInitData responses, embedded in the colon-joined\n // payload as an opaque substring a redactor can't see (#43).\n this.getLogger().debug(`get from ${event.origin}`, {\n id: cmd.id,\n origin: event.origin\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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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @package @bitrix24/b24jssdk
|
|
3
|
-
* @version
|
|
3
|
+
* @version 2.0.0
|
|
4
4
|
* @copyright (c) 2026 Bitrix24
|
|
5
5
|
* @license MIT
|
|
6
6
|
* @see https://github.com/bitrix24/b24jssdk
|
|
@@ -159,7 +159,11 @@ class ParentManager {
|
|
|
159
159
|
});
|
|
160
160
|
}
|
|
161
161
|
/**
|
|
162
|
-
*
|
|
162
|
+
* Sets the in-layout page title (the `#pagetitle` element the portal renders around the app).
|
|
163
|
+
*
|
|
164
|
+
* Does NOT change the browser tab title (`document.title`): the portal applies this command to
|
|
165
|
+
* `#pagetitle`, never to the tab. To set the browser tab title, open the view as a slider via
|
|
166
|
+
* `SliderManager.openSliderAppPage` with a `bx24_title` option.
|
|
163
167
|
*
|
|
164
168
|
* @param {string} title
|
|
165
169
|
*
|