@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.cjs","sources":["../../../../src/core/http/redact.ts"],"sourcesContent":["/**\n * Bounded-depth redact for params that may contain credentials before they\n * enter any logger or error-rendering surface.\n *\n * Callers: `Http._sanitizeParams` (logger context), `_makeAxiosRequest`\n * (`post/send` and `post/catchError` info logs), `AjaxError` constructor\n * (stores `requestInfo.params` exposed by `toJSON()` / `toString()`).\n * Keeping a single source of truth means the redaction list stays\n * consistent across all of them.\n *\n * Two complementary passes run over each value:\n * 1. Key match — a property whose (lower-cased) name is in\n * {@link SENSITIVE_PARAM_KEYS} has its whole value replaced, so a nested\n * credential object (e.g. `auth: { application_token }`) is masked\n * wholesale (#151).\n * 2. Query-string scrub — a *string* value is scanned for\n * `<sensitive-key>=<value>` pairs and the value is masked. This catches the\n * batch `cmd[i]` shape (`method?auth=<token>&...`) where `_prepareParams`\n * has already serialised the credential into text the key walk can't see\n * (#229).\n *\n * The object walk descends two levels into nested objects and arrays — the\n * minimum that covers batch payloads (`{ cmd: [{ method, params:\n * { ...credentials... } }, ...] }`) and flat one-level-nested payloads like\n * `{ data: { token } }`.\n *\n * Residual risk (documented, accepted):\n * - credential keys nested deeper than two object levels are NOT masked —\n * redact at the callsite for those;\n * - the query-string scrub only masks a `key=value` pair whose key is itself\n * a sensitive key; a bracketed/encoded query key (`auth[application_token]=`)\n * is not matched by the string pass (its `auth` prefix object form is,\n * though, via pass 1).\n * - `key` is deliberately broad: any property literally named `key` (and any\n * `?key=…` query pair) is masked. In Bitrix24 REST `key` is a credential\n * parameter (e.g. the Pull shared config), so this is a conservative,\n * accepted trade-off — it can over-redact a non-credential field that\n * happens to be named `key`.\n * - `signature` is broad in the same way (added in #43 for the Pull channel\n * HMAC, `TypeChanel.signature`): any property named `signature` and any\n * `?signature=…` query pair is masked. In the Bitrix24 push/pull domain\n * `signature` is the channel HMAC, so the breadth is accepted — at the cost\n * of over-redacting a non-credential field that happens to be named so.\n * - empty / nullish values are still treated as sensitive — an empty\n * `access_token` is unusual but not safe to leave un-redacted.\n */\n\nexport const SENSITIVE_PARAM_KEYS: readonly string[] = [\n 'auth',\n 'password',\n 'token',\n 'secret',\n 'access_token',\n 'refresh_token',\n 'client_secret',\n 'application_token',\n 'sessid',\n 'key',\n 'signature'\n]\n\nexport const REDACTED_PLACEHOLDER = '***REDACTED***'\n\n// Matches `<sep><sensitive-key>=<value>` inside a string, case-insensitively,\n// and masks the value. The `([?&]|^)` prefix anchors to a real query-param\n// boundary so a credential name appearing inside a value (`foo=token=x`) or as\n// the tail of a longer key (`access_token` vs `token`) is not mis-matched. The\n// value runs to the next `&`, `#`, or `;`, so a `;`-separated adjacent param is\n// not swallowed into the redacted span. An embedded `?token=…` inside a nested\n// URL value IS masked (intended — still a credential). Single-line: `^` carries\n// no `m` flag, so a credential after a newline in a multi-line string value is\n// not caught (accepted residual risk, same class as encoded/bracketed keys).\nconst QS_SENSITIVE_RE = new RegExp(\n `([?&]|^)(${SENSITIVE_PARAM_KEYS.join('|')})=[^&#;]*`,\n 'gi'\n)\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction redactQueryString(value: string): string {\n if (!value.includes('=')) return value\n return value.replace(\n QS_SENSITIVE_RE,\n (_match, sep: string, key: string) => `${sep}${key}=${REDACTED_PLACEHOLDER}`\n )\n}\n\n// String scrubbing runs before the `depth <= 0` guard on purpose: scanning a\n// string is cheap and bounded, so a serialised credential is masked even at a\n// level the object walk would stop descending into. Arrays do not consume a\n// depth slot (only object descent decrements `depth`), so an array nested in an\n// array is still walked.\nfunction redactValue(value: unknown, depth: number): unknown {\n if (typeof value === 'string') return redactQueryString(value)\n if (depth <= 0) return value\n if (isPlainObject(value)) return redactObject(value, depth - 1)\n if (Array.isArray(value)) return value.map(item => redactValue(item, depth))\n return value\n}\n\nfunction redactObject(\n source: Record<string, unknown>,\n depth: number\n): Record<string, unknown> {\n const sanitized: Record<string, unknown> = { ...source }\n for (const key of Object.keys(sanitized)) {\n if (SENSITIVE_PARAM_KEYS.includes(key.toLowerCase())) {\n sanitized[key] = REDACTED_PLACEHOLDER\n continue\n }\n sanitized[key] = redactValue(sanitized[key], depth)\n }\n return sanitized\n}\n\nconst DEFAULT_REDACT_DEPTH = 2\n\n/**\n * Returns a copy of `params` with any known credential-bearing key replaced by\n * `REDACTED_PLACEHOLDER`, and any credential value embedded in a query-string\n * value masked in place. Walks up to two levels into nested objects/arrays so\n * batch-shaped payloads (`cmd[i].params.<key>` and `cmd[i]` query strings) are\n * covered. Non-object inputs are returned as-is so callers don't have to\n * pre-check.\n */\nexport function redactSensitiveParams(\n params: Record<string, unknown>\n): Record<string, unknown>\nexport function redactSensitiveParams<T>(params: T): T\nexport function redactSensitiveParams(params: unknown): unknown {\n if (!isPlainObject(params)) return params\n return redactObject(params, DEFAULT_REDACT_DEPTH)\n}\n\n/**\n * Redact credential query-string values in a URL string — e.g. a Pull\n * `connectionPath` surfaced by `getDebugInfo()`. Masks every\n * {@link SENSITIVE_PARAM_KEYS} value plus any caller-supplied `extraKeys`\n * (e.g. Pull's `CHANNEL_ID`, a private identifier that is not a global\n * credential key). `extraKeys` are regex-escaped, so any literal key name is\n * safe to pass. Anchored and bounded exactly like the in-object scrub, so a\n * value-position `=` and non-query strings are left intact. Non-string input is\n * returned unchanged (a defensive guard for untyped JS callers).\n */\nexport function redactSensitiveUrl(url: string, extraKeys: readonly string[] = []): string {\n if (typeof url !== 'string' || !url.includes('=')) return url\n if (extraKeys.length === 0) return redactQueryString(url)\n const escaped = extraKeys.map(key => key.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n const re = new RegExp(\n `([?&]|^)(${[...SENSITIVE_PARAM_KEYS, ...escaped].join('|')})=[^&#;]*`,\n 'gi'\n )\n return url.replace(re, (_match, sep: string, key: string) => `${sep}${key}=${REDACTED_PLACEHOLDER}`)\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const abstractHttp = require('./abstract-http.cjs');
|
|
12
|
+
const b24 = require('../../types/b24.cjs');
|
|
13
|
+
const v2 = require('../interaction/batch/v2.cjs');
|
|
14
|
+
const asArray = require('../interaction/batch/processing/v2/as-array.cjs');
|
|
15
|
+
const asObject = require('../interaction/batch/processing/v2/as-object.cjs');
|
|
16
|
+
const ajaxError = require('./ajax-error.cjs');
|
|
17
|
+
|
|
18
|
+
var __defProp = Object.defineProperty;
|
|
19
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
20
|
+
class HttpV2 extends abstractHttp.AbstractHttp {
|
|
21
|
+
static {
|
|
22
|
+
__name(this, "HttpV2");
|
|
23
|
+
}
|
|
24
|
+
constructor(authActions, options, restrictionParams) {
|
|
25
|
+
super(authActions, options, restrictionParams);
|
|
26
|
+
this._version = b24.ApiVersion.v2;
|
|
27
|
+
}
|
|
28
|
+
// region batch ////
|
|
29
|
+
async batch(calls, options) {
|
|
30
|
+
const opts = {
|
|
31
|
+
isHaltOnError: true,
|
|
32
|
+
...options
|
|
33
|
+
};
|
|
34
|
+
const requestId = opts.requestId ?? this._requestIdGenerator.getRequestId();
|
|
35
|
+
this._logBatchStart(requestId, calls, opts);
|
|
36
|
+
const interactionBatch = new v2.InteractionBatchV2({
|
|
37
|
+
requestId,
|
|
38
|
+
parallelDefaultValue: !opts.isHaltOnError,
|
|
39
|
+
restrictionManager: this._restrictionManager
|
|
40
|
+
});
|
|
41
|
+
if (Array.isArray(calls)) {
|
|
42
|
+
interactionBatch.setProcessingStrategy(new asArray.ProcessingAsArrayV2());
|
|
43
|
+
} else {
|
|
44
|
+
interactionBatch.setProcessingStrategy(new asObject.ProcessingAsObjectV2());
|
|
45
|
+
}
|
|
46
|
+
interactionBatch.addCommands(calls);
|
|
47
|
+
if (interactionBatch.size > interactionBatch.maxSize) {
|
|
48
|
+
throw new ajaxError.AjaxError({
|
|
49
|
+
code: "JSSDK_BATCH_TOO_LARGE",
|
|
50
|
+
description: `Batch too large: ${interactionBatch.size} commands (max: ${interactionBatch.maxSize})`,
|
|
51
|
+
status: 400,
|
|
52
|
+
requestInfo: { method: "batch", params: { cmd: calls }, requestId },
|
|
53
|
+
originalError: null
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (interactionBatch.size === 0) {
|
|
57
|
+
throw new ajaxError.AjaxError({
|
|
58
|
+
code: "JSSDK_BATCH_EMPTY",
|
|
59
|
+
description: "Batch must contain at least one command",
|
|
60
|
+
status: 400,
|
|
61
|
+
requestInfo: { method: "batch", params: { cmd: calls }, requestId },
|
|
62
|
+
originalError: null
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const responseBatch = await this.call(
|
|
66
|
+
"batch",
|
|
67
|
+
{
|
|
68
|
+
halt: opts.isHaltOnError ? 1 : 0,
|
|
69
|
+
cmd: interactionBatch.getCommandsForCall()
|
|
70
|
+
},
|
|
71
|
+
requestId
|
|
72
|
+
);
|
|
73
|
+
const response = await interactionBatch.prepareResponse(responseBatch);
|
|
74
|
+
this._logBatchCompletion(
|
|
75
|
+
requestId,
|
|
76
|
+
response.getData()?.result?.size ?? 0,
|
|
77
|
+
response.getErrorMessages().length
|
|
78
|
+
);
|
|
79
|
+
return response;
|
|
80
|
+
}
|
|
81
|
+
// endregion ////
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
exports.HttpV2 = HttpV2;
|
|
85
|
+
//# sourceMappingURL=v2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2.cjs","sources":["../../../../src/core/http/v2.ts"],"sourcesContent":["import type {\n BatchCommandsArrayUniversal,\n BatchCommandsObjectUniversal,\n BatchNamedCommandsUniversal, ICallBatchOptions, ICallBatchResult,\n TypeHttp\n} from '../../types/http'\nimport type { AuthActions } from '../../types/auth'\nimport type { RestrictionParams } from '../../types/limiters'\nimport type { Result } from '../result'\nimport type { BatchPayload } from '../../types/payloads'\nimport { AbstractHttp } from './abstract-http'\nimport { ApiVersion } from '../../types/b24'\nimport { InteractionBatchV2 } from '../interaction/batch/v2'\nimport { ProcessingAsArrayV2 } from '../interaction/batch/processing/v2/as-array'\nimport { ProcessingAsObjectV2 } from '../interaction/batch/processing/v2/as-object'\nimport { AjaxError } from './ajax-error'\n\n/**\n * Class for working with RestApi v2 requests via http\n *\n * @link https://bitrix24.github.io/b24jssdk/\n *\n * @todo docs\n */\nexport class HttpV2 extends AbstractHttp implements TypeHttp {\n constructor(\n authActions: AuthActions,\n options?: null | object,\n restrictionParams?: Partial<RestrictionParams>\n ) {\n super(authActions, options, restrictionParams)\n this._version = ApiVersion.v2\n }\n\n // region batch ////\n public async batch<T = unknown>(\n calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal,\n options?: ICallBatchOptions\n ): Promise<Result<ICallBatchResult<T>>> {\n const opts = {\n isHaltOnError: true,\n ...options\n }\n\n const requestId = opts.requestId ?? this._requestIdGenerator.getRequestId()\n\n this._logBatchStart(requestId, calls, opts)\n\n const interactionBatch = new InteractionBatchV2({\n requestId,\n parallelDefaultValue: !(opts.isHaltOnError),\n restrictionManager: this._restrictionManager\n })\n\n if (Array.isArray(calls)) {\n interactionBatch.setProcessingStrategy(new ProcessingAsArrayV2())\n } else {\n interactionBatch.setProcessingStrategy(new ProcessingAsObjectV2())\n }\n\n interactionBatch.addCommands(calls)\n\n if (interactionBatch.size > interactionBatch.maxSize) {\n throw new AjaxError({\n code: 'JSSDK_BATCH_TOO_LARGE',\n description: `Batch too large: ${interactionBatch.size} commands (max: ${interactionBatch.maxSize})`,\n status: 400,\n requestInfo: { method: 'batch', params: { cmd: calls }, requestId },\n originalError: null\n })\n }\n\n if (interactionBatch.size === 0) {\n throw new AjaxError({\n code: 'JSSDK_BATCH_EMPTY',\n description: 'Batch must contain at least one command',\n status: 400,\n requestInfo: { method: 'batch', params: { cmd: calls }, requestId },\n originalError: null\n })\n }\n\n const responseBatch = await this.call<BatchPayload<T>>(\n 'batch',\n {\n halt: opts.isHaltOnError ? 1 : 0,\n cmd: interactionBatch.getCommandsForCall()\n },\n requestId\n )\n\n const response = await interactionBatch.prepareResponse<T>(responseBatch)\n\n // Log the results\n this._logBatchCompletion(\n requestId,\n response.getData()?.result?.size ?? 0,\n response.getErrorMessages().length\n )\n\n return response\n }\n // endregion ////\n}\n"],"names":["AbstractHttp","ApiVersion","InteractionBatchV2","ProcessingAsArrayV2","ProcessingAsObjectV2","AjaxError"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const abstractHttp = require('./abstract-http.cjs');
|
|
12
|
+
const b24 = require('../../types/b24.cjs');
|
|
13
|
+
const ajaxError = require('./ajax-error.cjs');
|
|
14
|
+
const v3 = require('../interaction/batch/v3.cjs');
|
|
15
|
+
const asArray = require('../interaction/batch/processing/v3/as-array.cjs');
|
|
16
|
+
const asObject = require('../interaction/batch/processing/v3/as-object.cjs');
|
|
17
|
+
|
|
18
|
+
var __defProp = Object.defineProperty;
|
|
19
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
20
|
+
class HttpV3 extends abstractHttp.AbstractHttp {
|
|
21
|
+
static {
|
|
22
|
+
__name(this, "HttpV3");
|
|
23
|
+
}
|
|
24
|
+
constructor(authActions, options, restrictionParams) {
|
|
25
|
+
super(authActions, options, restrictionParams);
|
|
26
|
+
this._version = b24.ApiVersion.v3;
|
|
27
|
+
}
|
|
28
|
+
// region batch ////
|
|
29
|
+
async batch(calls, options) {
|
|
30
|
+
const opts = {
|
|
31
|
+
isHaltOnError: true,
|
|
32
|
+
...options
|
|
33
|
+
};
|
|
34
|
+
const requestId = opts.requestId ?? this._requestIdGenerator.getRequestId();
|
|
35
|
+
this._logBatchStart(requestId, calls, opts);
|
|
36
|
+
const interactionBatch = new v3.InteractionBatchV3({
|
|
37
|
+
requestId,
|
|
38
|
+
parallelDefaultValue: !opts.isHaltOnError,
|
|
39
|
+
restrictionManager: this._restrictionManager
|
|
40
|
+
});
|
|
41
|
+
if (Array.isArray(calls)) {
|
|
42
|
+
interactionBatch.setProcessingStrategy(new asArray.ProcessingAsArrayV3());
|
|
43
|
+
} else {
|
|
44
|
+
interactionBatch.setProcessingStrategy(new asObject.ProcessingAsObjectV3());
|
|
45
|
+
}
|
|
46
|
+
interactionBatch.addCommands(calls);
|
|
47
|
+
if (interactionBatch.size > interactionBatch.maxSize) {
|
|
48
|
+
throw new ajaxError.AjaxError({
|
|
49
|
+
code: "JSSDK_BATCH_TOO_LARGE",
|
|
50
|
+
description: `Batch too large: ${interactionBatch.size} commands (max: ${interactionBatch.maxSize})`,
|
|
51
|
+
status: 400,
|
|
52
|
+
requestInfo: { method: "batch", params: { cmd: calls }, requestId },
|
|
53
|
+
originalError: null
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (interactionBatch.size === 0) {
|
|
57
|
+
throw new ajaxError.AjaxError({
|
|
58
|
+
code: "JSSDK_BATCH_EMPTY",
|
|
59
|
+
description: "Batch must contain at least one command",
|
|
60
|
+
status: 400,
|
|
61
|
+
requestInfo: { method: "batch", params: { cmd: calls }, requestId },
|
|
62
|
+
originalError: null
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const responseBatch = await this.call(
|
|
66
|
+
"batch",
|
|
67
|
+
interactionBatch.getCommandsForCall(),
|
|
68
|
+
requestId
|
|
69
|
+
);
|
|
70
|
+
const response = await interactionBatch.prepareResponse(responseBatch);
|
|
71
|
+
this._logBatchCompletion(
|
|
72
|
+
requestId,
|
|
73
|
+
response.getData()?.result?.size ?? 0,
|
|
74
|
+
response.getErrorMessages().length
|
|
75
|
+
);
|
|
76
|
+
return response;
|
|
77
|
+
}
|
|
78
|
+
// endregion ////
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
exports.HttpV3 = HttpV3;
|
|
82
|
+
//# sourceMappingURL=v3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3.cjs","sources":["../../../../src/core/http/v3.ts"],"sourcesContent":["import type {\n BatchCommandsArrayUniversal, BatchCommandsObjectUniversal,\n BatchNamedCommandsUniversal,\n ICallBatchOptions,\n ICallBatchResult, TypeCallParams,\n TypeHttp\n} from '../../types/http'\nimport type { AuthActions } from '../../types/auth'\nimport type { RestrictionParams } from '../../types/limiters'\nimport type { BatchPayload } from '../../types/payloads'\nimport type { Result } from '../result'\nimport { AbstractHttp } from './abstract-http'\nimport { ApiVersion } from '../../types/b24'\nimport { AjaxError } from './ajax-error'\nimport { InteractionBatchV3 } from '../interaction/batch/v3'\nimport { ProcessingAsArrayV3 } from '../interaction/batch/processing/v3/as-array'\nimport { ProcessingAsObjectV3 } from '../interaction/batch/processing/v3/as-object'\n\n/**\n * Class for working with RestApi v3 requests via http\n *\n * @link https://bitrix24.github.io/b24jssdk/\n * @link https://apidocs.bitrix24.com/api-reference/rest-v3/index.html\n *\n * @todo docs\n */\nexport class HttpV3 extends AbstractHttp implements TypeHttp {\n constructor(\n authActions: AuthActions,\n options?: null | object,\n restrictionParams?: Partial<RestrictionParams>\n ) {\n super(authActions, options, restrictionParams)\n this._version = ApiVersion.v3\n }\n\n // region batch ////\n public async batch<T = unknown>(\n calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal,\n options?: ICallBatchOptions\n ): Promise<Result<ICallBatchResult<T>>> {\n const opts = {\n isHaltOnError: true,\n ...options\n }\n\n const requestId = opts.requestId ?? this._requestIdGenerator.getRequestId()\n\n this._logBatchStart(requestId, calls, opts)\n\n const interactionBatch = new InteractionBatchV3({\n requestId,\n parallelDefaultValue: !(opts.isHaltOnError),\n restrictionManager: this._restrictionManager\n })\n\n if (Array.isArray(calls)) {\n interactionBatch.setProcessingStrategy(new ProcessingAsArrayV3())\n } else {\n interactionBatch.setProcessingStrategy(new ProcessingAsObjectV3())\n }\n\n interactionBatch.addCommands(calls)\n\n if (interactionBatch.size > interactionBatch.maxSize) {\n throw new AjaxError({\n code: 'JSSDK_BATCH_TOO_LARGE',\n description: `Batch too large: ${interactionBatch.size} commands (max: ${interactionBatch.maxSize})`,\n status: 400,\n requestInfo: { method: 'batch', params: { cmd: calls }, requestId },\n originalError: null\n })\n }\n\n if (interactionBatch.size === 0) {\n throw new AjaxError({\n code: 'JSSDK_BATCH_EMPTY',\n description: 'Batch must contain at least one command',\n status: 400,\n requestInfo: { method: 'batch', params: { cmd: calls }, requestId },\n originalError: null\n })\n }\n\n const responseBatch = await this.call<BatchPayload<T>>(\n 'batch',\n interactionBatch.getCommandsForCall() as TypeCallParams,\n requestId\n )\n\n const response = await interactionBatch.prepareResponse<T>(responseBatch)\n\n // Log the results\n this._logBatchCompletion(\n requestId,\n response.getData()?.result?.size ?? 0,\n response.getErrorMessages().length\n )\n\n return response\n }\n // endregion ////\n}\n"],"names":["AbstractHttp","ApiVersion","InteractionBatchV3","ProcessingAsArrayV3","ProcessingAsObjectV3","AjaxError"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BO,MAAM,eAAeA,yBAAA,CAAiC;AAAA,EA1B7D;AA0B6D,IAAA,MAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AAAA,EAC3D,WAAA,CACE,WAAA,EACA,OAAA,EACA,iBAAA,EACA;AACA,IAAA,KAAA,CAAM,WAAA,EAAa,SAAS,iBAAiB,CAAA;AAC7C,IAAA,IAAA,CAAK,WAAWC,cAAA,CAAW,EAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAa,KAAA,CACX,KAAA,EACA,OAAA,EACsC;AACtC,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,aAAA,EAAe,IAAA;AAAA,MACf,GAAG;AAAA,KACL;AAEA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,oBAAoB,YAAA,EAAa;AAE1E,IAAA,IAAA,CAAK,cAAA,CAAe,SAAA,EAAW,KAAA,EAAO,IAAI,CAAA;AAE1C,IAAA,MAAM,gBAAA,GAAmB,IAAIC,qBAAA,CAAmB;AAAA,MAC9C,SAAA;AAAA,MACA,oBAAA,EAAsB,CAAE,IAAA,CAAK,aAAA;AAAA,MAC7B,oBAAoB,IAAA,CAAK;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,gBAAA,CAAiB,qBAAA,CAAsB,IAAIC,2BAAA,EAAqB,CAAA;AAAA,IAClE,CAAA,MAAO;AACL,MAAA,gBAAA,CAAiB,qBAAA,CAAsB,IAAIC,6BAAA,EAAsB,CAAA;AAAA,IACnE;AAEA,IAAA,gBAAA,CAAiB,YAAY,KAAK,CAAA;AAElC,IAAA,IAAI,gBAAA,CAAiB,IAAA,GAAO,gBAAA,CAAiB,OAAA,EAAS;AACpD,MAAA,MAAM,IAAIC,mBAAA,CAAU;AAAA,QAClB,IAAA,EAAM,uBAAA;AAAA,QACN,aAAa,CAAA,iBAAA,EAAoB,gBAAA,CAAiB,IAAI,CAAA,gBAAA,EAAmB,iBAAiB,OAAO,CAAA,CAAA,CAAA;AAAA,QACjG,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAQ,EAAE,GAAA,EAAK,KAAA,EAAM,EAAG,SAAA,EAAU;AAAA,QAClE,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAIA,mBAAA,CAAU;AAAA,QAClB,IAAA,EAAM,mBAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAQ,EAAE,GAAA,EAAK,KAAA,EAAM,EAAG,SAAA,EAAU;AAAA,QAClE,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,IAAA;AAAA,MAC/B,OAAA;AAAA,MACA,iBAAiB,kBAAA,EAAmB;AAAA,MACpC;AAAA,KACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,eAAA,CAAmB,aAAa,CAAA;AAGxE,IAAA,IAAA,CAAK,mBAAA;AAAA,MACH,SAAA;AAAA,MACA,QAAA,CAAS,OAAA,EAAQ,EAAG,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAAA,MACpC,QAAA,CAAS,kBAAiB,CAAE;AAAA,KAC9B;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAEF;;;;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const sdkError = require('../../sdk-error.cjs');
|
|
12
|
+
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
class AbstractInteractionBatch {
|
|
16
|
+
static {
|
|
17
|
+
__name(this, "AbstractInteractionBatch");
|
|
18
|
+
}
|
|
19
|
+
parallelDefaultValue;
|
|
20
|
+
requestId;
|
|
21
|
+
restrictionManager;
|
|
22
|
+
// @memo this regeneration -> isObjectMode
|
|
23
|
+
processingStrategy;
|
|
24
|
+
_commands = [];
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.parallelDefaultValue = options.parallelDefaultValue;
|
|
27
|
+
this.requestId = options.requestId;
|
|
28
|
+
this.restrictionManager = options.restrictionManager;
|
|
29
|
+
this.processingStrategy = options.processingStrategy;
|
|
30
|
+
}
|
|
31
|
+
// region Setter Strategy ////
|
|
32
|
+
setProcessingStrategy(processingStrategy) {
|
|
33
|
+
this.processingStrategy = processingStrategy;
|
|
34
|
+
}
|
|
35
|
+
// endregion ////
|
|
36
|
+
// region Getter ////
|
|
37
|
+
get size() {
|
|
38
|
+
return this._commands.length;
|
|
39
|
+
}
|
|
40
|
+
get maxSize() {
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
// endregion ////
|
|
44
|
+
// region Request ////
|
|
45
|
+
addCommands(calls) {
|
|
46
|
+
if (!this.processingStrategy) {
|
|
47
|
+
throw new sdkError.SdkError({
|
|
48
|
+
code: "JSSDK_INTERACTION_BATCH_EMPTY_PROCESSING_STRATEGY",
|
|
49
|
+
description: "ProcessingStrategy not set",
|
|
50
|
+
status: 500
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
this._commands = this.processingStrategy.prepareCommands(calls, {
|
|
54
|
+
parallelDefaultValue: this.parallelDefaultValue
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
getCommandsForCall() {
|
|
58
|
+
if (!this.processingStrategy) {
|
|
59
|
+
throw new sdkError.SdkError({
|
|
60
|
+
code: "JSSDK_INTERACTION_BATCH_EMPTY_PROCESSING_STRATEGY",
|
|
61
|
+
description: "ProcessingStrategy not set",
|
|
62
|
+
status: 500
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return this.processingStrategy.buildCommands(this._commands);
|
|
66
|
+
}
|
|
67
|
+
// endregion ////
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
exports.AbstractInteractionBatch = AbstractInteractionBatch;
|
|
71
|
+
//# sourceMappingURL=abstract-interaction-batch.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-interaction-batch.cjs","sources":["../../../../../src/core/interaction/batch/abstract-interaction-batch.ts"],"sourcesContent":["import type { IProcessingStrategy } from './processing/interface-strategy'\nimport type {\n BatchCommandsArrayUniversal,\n BatchCommandsObjectUniversal,\n BatchCommandV3, BatchNamedCommandsUniversal,\n ICallBatchOptions, ICallBatchResult\n} from '../../../types/http'\nimport type { RestrictionManager } from '../../http/limiters/manager'\nimport type { BatchPayload, PayloadTime } from '../../../types/payloads'\nimport type { Result } from '../../result'\nimport type { AjaxResult } from '../../http/ajax-result'\nimport type { NumberString } from '../../../types/common'\nimport type { TypeDescriptionError } from '../../../types/auth'\nimport { SdkError } from '../../sdk-error'\n\nexport interface BatchResponseData<T = unknown> {\n readonly result?: T[] | Record<string | number, T>\n readonly result_error?: (string | TypeDescriptionError)[] | Record<string | number, string | TypeDescriptionError>\n readonly result_total?: NumberString[] | Record<string | number, NumberString>\n readonly result_next?: NumberString[] | Record<string | number, NumberString>\n readonly result_time?: PayloadTime[] | Record<string | number, PayloadTime>\n}\n\nexport type InteractionBatchOptions = Required<Omit<ICallBatchOptions, 'isHaltOnError' | 'isObjectMode'>> & {\n /**\n * @memo this regeneration is `isHaltOnError` and it is currently `!isHaltOnError`\n */\n parallelDefaultValue: boolean\n restrictionManager: RestrictionManager\n processingStrategy?: IProcessingStrategy\n}\n\nexport type ResponseHelper = {\n requestId: string\n status: number\n time: PayloadTime\n restrictionManager: RestrictionManager\n}\n\n/**\n * Working with batch requests\n */\nexport abstract class AbstractInteractionBatch {\n protected parallelDefaultValue: boolean\n protected requestId: string\n protected restrictionManager: RestrictionManager\n // @memo this regeneration -> isObjectMode\n protected processingStrategy?: IProcessingStrategy\n\n protected _commands: BatchCommandV3[] = []\n\n constructor(options: InteractionBatchOptions) {\n this.parallelDefaultValue = options.parallelDefaultValue\n this.requestId = options.requestId\n this.restrictionManager = options.restrictionManager\n this.processingStrategy = options.processingStrategy\n }\n\n // region Setter Strategy ////\n public setProcessingStrategy(processingStrategy: IProcessingStrategy) {\n this.processingStrategy = processingStrategy\n }\n // endregion ////\n\n // region Getter ////\n get size(): number {\n return this._commands.length\n }\n\n get maxSize(): number {\n return 0\n }\n // endregion ////\n\n // region Request ////\n public addCommands(\n calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal\n ): void {\n if (!this.processingStrategy) {\n throw new SdkError({\n code: 'JSSDK_INTERACTION_BATCH_EMPTY_PROCESSING_STRATEGY',\n description: 'ProcessingStrategy not set',\n status: 500\n })\n }\n\n this._commands = this.processingStrategy.prepareCommands(calls, {\n parallelDefaultValue: this.parallelDefaultValue\n })\n }\n\n public getCommandsForCall(): unknown {\n if (!this.processingStrategy) {\n throw new SdkError({\n code: 'JSSDK_INTERACTION_BATCH_EMPTY_PROCESSING_STRATEGY',\n description: 'ProcessingStrategy not set',\n status: 500\n })\n }\n\n return this.processingStrategy.buildCommands(this._commands)\n }\n // endregion ////\n\n // region Response ////\n public abstract prepareResponse<T>(response: AjaxResult<BatchPayload<T>>): Promise<Result<ICallBatchResult<T>>>\n // endregion ////\n}\n"],"names":["SdkError"],"mappings":";;;;;;;;;;;;;;AA0CO,MAAe,wBAAA,CAAyB;AAAA,EA1C/C;AA0C+C,IAAA,MAAA,CAAA,IAAA,EAAA,0BAAA,CAAA;AAAA;AAAA,EACnC,oBAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA;AAAA,EAEA,kBAAA;AAAA,EAEA,YAA8B,EAAC;AAAA,EAEzC,YAAY,OAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,uBAAuB,OAAA,CAAQ,oBAAA;AACpC,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AACzB,IAAA,IAAA,CAAK,qBAAqB,OAAA,CAAQ,kBAAA;AAClC,IAAA,IAAA,CAAK,qBAAqB,OAAA,CAAQ,kBAAA;AAAA,EACpC;AAAA;AAAA,EAGO,sBAAsB,kBAAA,EAAyC;AACpE,IAAA,IAAA,CAAK,kBAAA,GAAqB,kBAAA;AAAA,EAC5B;AAAA;AAAA;AAAA,EAIA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,SAAA,CAAU,MAAA;AAAA,EACxB;AAAA,EAEA,IAAI,OAAA,GAAkB;AACpB,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA;AAAA,EAIO,YACL,KAAA,EACM;AACN,IAAA,IAAI,CAAC,KAAK,kBAAA,EAAoB;AAC5B,MAAA,MAAM,IAAIA,iBAAA,CAAS;AAAA,QACjB,IAAA,EAAM,mDAAA;AAAA,QACN,WAAA,EAAa,4BAAA;AAAA,QACb,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,eAAA,CAAgB,KAAA,EAAO;AAAA,MAC9D,sBAAsB,IAAA,CAAK;AAAA,KAC5B,CAAA;AAAA,EACH;AAAA,EAEO,kBAAA,GAA8B;AACnC,IAAA,IAAI,CAAC,KAAK,kBAAA,EAAoB;AAC5B,MAAA,MAAM,IAAIA,iBAAA,CAAS;AAAA,QACjB,IAAA,EAAM,mDAAA;AAAA,QACN,WAAA,EAAa,4BAAA;AAAA,QACb,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,aAAA,CAAc,IAAA,CAAK,SAAS,CAAA;AAAA,EAC7D;AAAA;AAMF;;;;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const sdkError = require('../../sdk-error.cjs');
|
|
12
|
+
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
class ParseRow {
|
|
16
|
+
static {
|
|
17
|
+
__name(this, "ParseRow");
|
|
18
|
+
}
|
|
19
|
+
static getBatchCommand(row, options) {
|
|
20
|
+
if (row) {
|
|
21
|
+
if (typeof row === "object" && "method" in row && typeof row.method === "string") {
|
|
22
|
+
return {
|
|
23
|
+
method: row.method,
|
|
24
|
+
query: row.params,
|
|
25
|
+
as: row.as ?? options.asDefaultValue,
|
|
26
|
+
parallel: row.parallel ?? options.parallelDefaultValue
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(row) && row.length > 0 && typeof row[0] === "string") {
|
|
30
|
+
return {
|
|
31
|
+
method: row[0],
|
|
32
|
+
query: row[1],
|
|
33
|
+
as: options.asDefaultValue,
|
|
34
|
+
parallel: options.parallelDefaultValue
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
throw new sdkError.SdkError({
|
|
39
|
+
code: "JSSDK_INTERACTION_BATCH_ROW_FAIL",
|
|
40
|
+
description: `There were difficulties parsing the command for batch.
|
|
41
|
+
${JSON.stringify({
|
|
42
|
+
row,
|
|
43
|
+
options
|
|
44
|
+
})}`,
|
|
45
|
+
status: 500
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
static getMethodsFromCommands(calls) {
|
|
49
|
+
const result = [];
|
|
50
|
+
const optsFake = {
|
|
51
|
+
parallelDefaultValue: false
|
|
52
|
+
};
|
|
53
|
+
if (Array.isArray(calls)) {
|
|
54
|
+
calls.forEach((row) => {
|
|
55
|
+
const command = ParseRow.getBatchCommand(row, optsFake);
|
|
56
|
+
result.push(command.method);
|
|
57
|
+
});
|
|
58
|
+
} else {
|
|
59
|
+
Object.entries(calls).forEach(([index, row]) => {
|
|
60
|
+
const command = ParseRow.getBatchCommand(row, { ...optsFake, asDefaultValue: index });
|
|
61
|
+
result.push(command.method);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
exports.ParseRow = ParseRow;
|
|
69
|
+
//# sourceMappingURL=parse-row.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-row.cjs","sources":["../../../../../src/core/interaction/batch/parse-row.ts"],"sourcesContent":["import type {\n BatchCommandsArrayUniversal,\n BatchCommandsObjectUniversal,\n BatchCommandV3, BatchNamedCommandsUniversal,\n CommandObject,\n CommandTuple\n} from '../../../types/http'\nimport { SdkError } from '../../sdk-error'\n\n/**\n * Class for formatting/parsing a set of Batch commands\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class ParseRow {\n public static getBatchCommand(\n row: CommandObject | CommandTuple,\n options: {\n parallelDefaultValue: boolean\n asDefaultValue?: string\n }\n ): BatchCommandV3 {\n if (row) {\n if (typeof row === 'object' && 'method' in row && typeof row.method === 'string') {\n return {\n method: row.method,\n query: row.params,\n as: row.as ?? options.asDefaultValue,\n parallel: row.parallel ?? options.parallelDefaultValue\n }\n }\n\n if (Array.isArray(row) && row.length > 0 && typeof row[0] === 'string') {\n return {\n method: row[0],\n query: row[1],\n as: options.asDefaultValue,\n parallel: options.parallelDefaultValue\n }\n }\n }\n\n throw new SdkError({\n code: 'JSSDK_INTERACTION_BATCH_ROW_FAIL',\n description: `There were difficulties parsing the command for batch.\\n${JSON.stringify({\n row, options\n })}`,\n status: 500\n })\n }\n\n public static getMethodsFromCommands(\n calls: BatchCommandsArrayUniversal | BatchCommandsObjectUniversal | BatchNamedCommandsUniversal\n ): string[] {\n const result: string[] = []\n const optsFake = {\n parallelDefaultValue: false\n }\n\n if (Array.isArray(calls)) {\n calls.forEach((row) => {\n const command = ParseRow.getBatchCommand(row, optsFake)\n result.push(command.method)\n })\n } else {\n Object.entries(calls).forEach(([index, row]) => {\n const command = ParseRow.getBatchCommand(row, { ...optsFake, asDefaultValue: index })\n result.push(command.method)\n })\n }\n\n return result\n }\n}\n"],"names":["SdkError"],"mappings":";;;;;;;;;;;;;;AAaO,MAAM,QAAA,CAAS;AAAA,EAbtB;AAasB,IAAA,MAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AAAA;AAAA,EACpB,OAAc,eAAA,CACZ,GAAA,EACA,OAAA,EAIgB;AAChB,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,IAAI,OAAO,QAAQ,QAAA,IAAY,QAAA,IAAY,OAAO,OAAO,GAAA,CAAI,WAAW,QAAA,EAAU;AAChF,QAAA,OAAO;AAAA,UACL,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,OAAO,GAAA,CAAI,MAAA;AAAA,UACX,EAAA,EAAI,GAAA,CAAI,EAAA,IAAM,OAAA,CAAQ,cAAA;AAAA,UACtB,QAAA,EAAU,GAAA,CAAI,QAAA,IAAY,OAAA,CAAQ;AAAA,SACpC;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,IAAK,GAAA,CAAI,MAAA,GAAS,CAAA,IAAK,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,EAAU;AACtE,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA,UACb,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,UACZ,IAAI,OAAA,CAAQ,cAAA;AAAA,UACZ,UAAU,OAAA,CAAQ;AAAA,SACpB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,IAAIA,iBAAA,CAAS;AAAA,MACjB,IAAA,EAAM,kCAAA;AAAA,MACN,WAAA,EAAa,CAAA;AAAA,EAA2D,KAAK,SAAA,CAAU;AAAA,QACrF,GAAA;AAAA,QAAK;AAAA,OACN,CAAC,CAAA,CAAA;AAAA,MACF,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,OAAc,uBACZ,KAAA,EACU;AACV,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,oBAAA,EAAsB;AAAA,KACxB;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACrB,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,eAAA,CAAgB,GAAA,EAAK,QAAQ,CAAA;AACtD,QAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,MAC5B,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,KAAM;AAC9C,QAAA,MAAM,OAAA,GAAU,SAAS,eAAA,CAAgB,GAAA,EAAK,EAAE,GAAG,QAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,CAAA;AACpF,QAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,MAC5B,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;;"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const result = require('../../../result.cjs');
|
|
12
|
+
const ajaxError = require('../../../http/ajax-error.cjs');
|
|
13
|
+
|
|
14
|
+
var __defProp = Object.defineProperty;
|
|
15
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
16
|
+
class AbstractProcessing {
|
|
17
|
+
static {
|
|
18
|
+
__name(this, "AbstractProcessing");
|
|
19
|
+
}
|
|
20
|
+
// region prepareItems ////
|
|
21
|
+
/**
|
|
22
|
+
* Template method. The soft-error envelope guard lives here ONCE so v2 and v3
|
|
23
|
+
* can't drift on it (#228 — hoisted from the duplicated #145 fix).
|
|
24
|
+
*
|
|
25
|
+
* When the batch CALL itself soft-errors (a top-level code in the restriction
|
|
26
|
+
* manager's `exceptionCodeForSoft` set, surfaced as a soft `Result` instead of
|
|
27
|
+
* a throw), the envelope carries `{ error }` and no `result`, so
|
|
28
|
+
* `response.getData()` is `undefined`. Skip per-row parsing — it would
|
|
29
|
+
* dereference `getData()!.result` — and let {@link handleResults} surface the
|
|
30
|
+
* top-level errors. The version-specific success path is {@link _prepareItemsSuccess}.
|
|
31
|
+
*/
|
|
32
|
+
async prepareItems(commands, responseHelper) {
|
|
33
|
+
const results = /* @__PURE__ */ new Map();
|
|
34
|
+
if (!responseHelper.response.isSuccess) {
|
|
35
|
+
return results;
|
|
36
|
+
}
|
|
37
|
+
return this._prepareItemsSuccess(commands, responseHelper, results);
|
|
38
|
+
}
|
|
39
|
+
// endregion ////
|
|
40
|
+
// region handleResults ////
|
|
41
|
+
/**
|
|
42
|
+
* Template method. Same single soft-error guard as {@link prepareItems} (#228):
|
|
43
|
+
* there is no per-row data and `getData()` is `undefined`, so surface the
|
|
44
|
+
* envelope's top-level errors and return an empty data map instead of
|
|
45
|
+
* dereferencing `getData()!.time`. The version-specific success path is
|
|
46
|
+
* {@link _handleResultsSuccess}.
|
|
47
|
+
*/
|
|
48
|
+
async handleResults(commands, results, responseHelper) {
|
|
49
|
+
const result$1 = new result.Result();
|
|
50
|
+
if (!responseHelper.response.isSuccess) {
|
|
51
|
+
for (const [index, error] of responseHelper.response.errors) {
|
|
52
|
+
result$1.addError(error, index);
|
|
53
|
+
}
|
|
54
|
+
result$1.setData({
|
|
55
|
+
result: /* @__PURE__ */ new Map(),
|
|
56
|
+
time: void 0
|
|
57
|
+
});
|
|
58
|
+
return result$1;
|
|
59
|
+
}
|
|
60
|
+
return this._handleResultsSuccess(commands, results, responseHelper, result$1);
|
|
61
|
+
}
|
|
62
|
+
// endregion ////
|
|
63
|
+
// region Tools ////
|
|
64
|
+
_getBatchResultByIndex(data, index) {
|
|
65
|
+
if (!data) return void 0;
|
|
66
|
+
if (Array.isArray(data)) {
|
|
67
|
+
return data[index];
|
|
68
|
+
}
|
|
69
|
+
return data[index];
|
|
70
|
+
}
|
|
71
|
+
_createErrorFromAjaxResult(ajaxResult) {
|
|
72
|
+
if (ajaxResult.hasError("base-error")) {
|
|
73
|
+
return ajaxResult.errors.get("base-error");
|
|
74
|
+
}
|
|
75
|
+
return new ajaxError.AjaxError({
|
|
76
|
+
code: "JSSDK_BATCH_SUB_ERROR",
|
|
77
|
+
description: ajaxResult.getErrorMessages().join("; "),
|
|
78
|
+
status: ajaxResult.getStatus(),
|
|
79
|
+
requestInfo: { ...ajaxResult.getQuery() },
|
|
80
|
+
originalError: ajaxResult.getErrors().next().value
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// endregion ////
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
exports.AbstractProcessing = AbstractProcessing;
|
|
87
|
+
//# sourceMappingURL=interface-strategy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface-strategy.cjs","sources":["../../../../../../src/core/interaction/batch/processing/interface-strategy.ts"],"sourcesContent":["import type { BatchCommandV3, ICallBatchResult } from '../../../../types/http'\nimport type { BatchPayload } from '../../../../types/payloads'\nimport type { AjaxResult } from '../../../http/ajax-result'\nimport type { RestrictionManager } from '../../../http/limiters/manager'\nimport { Result } from '../../../result'\nimport { AjaxError } from '../../../http/ajax-error'\n\nexport type GetCommandsOptions = {\n // @memo this regeneration `isHaltOnError` -> !isHaltOnError\n parallelDefaultValue: boolean\n}\n\nexport type ResponseHelper<T> = {\n requestId: string\n parallelDefaultValue: boolean\n response: AjaxResult<BatchPayload<T>>\n // status: number\n // data: BatchPayloadResult<T>\n // time: PayloadTime\n restrictionManager: RestrictionManager\n}\n\nexport type ResultItems<T> = Map<string | number, AjaxResult<T>>\n\nexport interface IProcessingStrategy {\n prepareCommands(calls: unknown, options: GetCommandsOptions): BatchCommandV3[]\n buildCommands(commands: BatchCommandV3[]): unknown\n prepareItems<T>(commands: BatchCommandV3[], responseHelper: ResponseHelper<T>): Promise<ResultItems<T>>\n handleResults<T>(commands: BatchCommandV3[], results: ResultItems<T>, responseHelper: ResponseHelper<T>): Promise<Result<ICallBatchResult<T>>>\n}\n\nexport abstract class AbstractProcessing implements IProcessingStrategy {\n public abstract prepareCommands(calls: unknown, options: GetCommandsOptions): BatchCommandV3[]\n public abstract buildCommands(commands: BatchCommandV3[]): unknown\n\n // region prepareItems ////\n /**\n * Template method. The soft-error envelope guard lives here ONCE so v2 and v3\n * can't drift on it (#228 — hoisted from the duplicated #145 fix).\n *\n * When the batch CALL itself soft-errors (a top-level code in the restriction\n * manager's `exceptionCodeForSoft` set, surfaced as a soft `Result` instead of\n * a throw), the envelope carries `{ error }` and no `result`, so\n * `response.getData()` is `undefined`. Skip per-row parsing — it would\n * dereference `getData()!.result` — and let {@link handleResults} surface the\n * top-level errors. The version-specific success path is {@link _prepareItemsSuccess}.\n */\n public async prepareItems<T>(\n commands: BatchCommandV3[],\n responseHelper: ResponseHelper<T>\n ): Promise<ResultItems<T>> {\n const results: ResultItems<T> = new Map()\n\n if (!responseHelper.response.isSuccess) {\n return results\n }\n\n return this._prepareItemsSuccess<T>(commands, responseHelper, results)\n }\n\n /** Per-version success path: parse the response payload into `results` (the empty accumulator created by {@link prepareItems}). */\n protected abstract _prepareItemsSuccess<T>(\n commands: BatchCommandV3[],\n responseHelper: ResponseHelper<T>,\n results: ResultItems<T>\n ): Promise<ResultItems<T>>\n\n protected abstract _processResponseItem<T>(\n command: BatchCommandV3,\n index: string | number,\n responseHelper: ResponseHelper<T>,\n results: Map<string | number, AjaxResult<T>>\n ): Promise<void>\n // endregion ////\n\n // region handleResults ////\n /**\n * Template method. Same single soft-error guard as {@link prepareItems} (#228):\n * there is no per-row data and `getData()` is `undefined`, so surface the\n * envelope's top-level errors and return an empty data map instead of\n * dereferencing `getData()!.time`. The version-specific success path is\n * {@link _handleResultsSuccess}.\n */\n public async handleResults<T>(\n commands: BatchCommandV3[],\n results: ResultItems<T>,\n responseHelper: ResponseHelper<T>\n ): Promise<Result<ICallBatchResult<T>>> {\n const result = new Result<ICallBatchResult<T>>()\n\n if (!responseHelper.response.isSuccess) {\n for (const [index, error] of responseHelper.response.errors) {\n result.addError(error, index)\n }\n result.setData({\n result: new Map() as ResultItems<T>,\n time: undefined\n })\n return result\n }\n\n return this._handleResultsSuccess<T>(commands, results, responseHelper, result)\n }\n\n /**\n * Per-version success path: fold per-command `results` into `result` — the\n * empty accumulator created by {@link handleResults}. Mutate and RETURN that\n * same `result`; do not construct a new one (the base relies on the instance\n * it passed in).\n */\n protected abstract _handleResultsSuccess<T>(\n commands: BatchCommandV3[],\n results: ResultItems<T>,\n responseHelper: ResponseHelper<T>,\n result: Result<ICallBatchResult<T>>\n ): Promise<Result<ICallBatchResult<T>>>\n\n protected abstract _processResponseError<T>(result: Result<ICallBatchResult<T>>, ajaxError: AjaxError, index: string): void\n // endregion ////\n\n // region Tools ////\n protected _getBatchResultByIndex<T>(\n data: T[] | Record<string | number, T> | undefined,\n index: string | number\n ): T | undefined {\n if (!data) return undefined\n\n if (Array.isArray(data)) {\n return data[index as number]\n }\n\n return (data as Record<string | number, T>)[index]\n }\n\n protected _createErrorFromAjaxResult(ajaxResult: AjaxResult): AjaxError {\n if (ajaxResult.hasError('base-error')) {\n return ajaxResult.errors.get('base-error') as AjaxError\n }\n\n return new AjaxError({\n code: 'JSSDK_BATCH_SUB_ERROR',\n description: ajaxResult.getErrorMessages().join('; '),\n status: ajaxResult.getStatus(),\n requestInfo: { ...ajaxResult.getQuery() },\n originalError: ajaxResult.getErrors().next().value\n })\n }\n // endregion ////\n}\n"],"names":["result","Result","AjaxError"],"mappings":";;;;;;;;;;;;;;;AA+BO,MAAe,kBAAA,CAAkD;AAAA,EA/BxE;AA+BwE,IAAA,MAAA,CAAA,IAAA,EAAA,oBAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBtE,MAAa,YAAA,CACX,QAAA,EACA,cAAA,EACyB;AACzB,IAAA,MAAM,OAAA,uBAA8B,GAAA,EAAI;AAExC,IAAA,IAAI,CAAC,cAAA,CAAe,QAAA,CAAS,SAAA,EAAW;AACtC,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,oBAAA,CAAwB,QAAA,EAAU,cAAA,EAAgB,OAAO,CAAA;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAa,aAAA,CACX,QAAA,EACA,OAAA,EACA,cAAA,EACsC;AACtC,IAAA,MAAMA,QAAA,GAAS,IAAIC,aAAA,EAA4B;AAE/C,IAAA,IAAI,CAAC,cAAA,CAAe,QAAA,CAAS,SAAA,EAAW;AACtC,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,cAAA,CAAe,SAAS,MAAA,EAAQ;AAC3D,QAAAD,QAAA,CAAO,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,MAC9B;AACA,MAAAA,QAAA,CAAO,OAAA,CAAQ;AAAA,QACb,MAAA,sBAAY,GAAA,EAAI;AAAA,QAChB,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,OAAOA,QAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAyB,QAAA,EAAU,OAAA,EAAS,gBAAgBA,QAAM,CAAA;AAAA,EAChF;AAAA;AAAA;AAAA,EAmBU,sBAAA,CACR,MACA,KAAA,EACe;AACf,IAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAElB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,MAAA,OAAO,KAAK,KAAe,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAQ,KAAoC,KAAK,CAAA;AAAA,EACnD;AAAA,EAEU,2BAA2B,UAAA,EAAmC;AACtE,IAAA,IAAI,UAAA,CAAW,QAAA,CAAS,YAAY,CAAA,EAAG;AACrC,MAAA,OAAO,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,IAAIE,mBAAA,CAAU;AAAA,MACnB,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,UAAA,CAAW,gBAAA,EAAiB,CAAE,KAAK,IAAI,CAAA;AAAA,MACpD,MAAA,EAAQ,WAAW,SAAA,EAAU;AAAA,MAC7B,WAAA,EAAa,EAAE,GAAG,UAAA,CAAW,UAAS,EAAE;AAAA,MACxC,aAAA,EAAe,UAAA,CAAW,SAAA,EAAU,CAAE,MAAK,CAAE;AAAA,KAC9C,CAAA;AAAA,EACH;AAAA;AAEF;;;;"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const qs = require('qs-esm');
|
|
12
|
+
const interfaceStrategy = require('../interface-strategy.cjs');
|
|
13
|
+
const sdkError = require('../../../../sdk-error.cjs');
|
|
14
|
+
const ajaxResult = require('../../../../http/ajax-result.cjs');
|
|
15
|
+
|
|
16
|
+
function _interopNamespace(e) {
|
|
17
|
+
if (e && e.__esModule) return e;
|
|
18
|
+
const n = Object.create(null);
|
|
19
|
+
if (e) {
|
|
20
|
+
for (const k in e) {
|
|
21
|
+
n[k] = e[k];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
n.default = e;
|
|
25
|
+
return n;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const qs__namespace = /*#__PURE__*/_interopNamespace(qs);
|
|
29
|
+
|
|
30
|
+
var __defProp = Object.defineProperty;
|
|
31
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
32
|
+
class AbstractProcessingV2 extends interfaceStrategy.AbstractProcessing {
|
|
33
|
+
static {
|
|
34
|
+
__name(this, "AbstractProcessingV2");
|
|
35
|
+
}
|
|
36
|
+
_buildRow(command) {
|
|
37
|
+
return `${command.method}?${qs__namespace.stringify(command.query || {})}`;
|
|
38
|
+
}
|
|
39
|
+
buildCommands(commands) {
|
|
40
|
+
if (commands.length < 1) {
|
|
41
|
+
throw new sdkError.SdkError({
|
|
42
|
+
code: "JSSDK_INTERACTION_BATCH_STRATEGY_V2_EMPTY_COMMANDS",
|
|
43
|
+
description: "commands not set",
|
|
44
|
+
status: 500
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const firstCommand = commands[0];
|
|
48
|
+
const asObject = typeof firstCommand.as === "string" && firstCommand.as.length > 0;
|
|
49
|
+
if (asObject) {
|
|
50
|
+
const result2 = {};
|
|
51
|
+
for (const command of commands) {
|
|
52
|
+
result2[command.as] = this._buildRow(command);
|
|
53
|
+
}
|
|
54
|
+
return result2;
|
|
55
|
+
}
|
|
56
|
+
const result = [];
|
|
57
|
+
for (const command of commands) {
|
|
58
|
+
result.push(this._buildRow(command));
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
// region prepareItems ////
|
|
63
|
+
// Soft-error guard lives in AbstractProcessing.prepareItems (#228); this is the
|
|
64
|
+
// success-only path for apiVer2.
|
|
65
|
+
async _prepareItemsSuccess(commands, responseHelper, results) {
|
|
66
|
+
for (const [index, command] of commands.entries()) {
|
|
67
|
+
await this._processResponseItem(
|
|
68
|
+
command,
|
|
69
|
+
// @memo for apiVer2 in this pace we get objectIndex from `command.as` OR array `index` from `commands[]`
|
|
70
|
+
command.as ?? index,
|
|
71
|
+
responseHelper,
|
|
72
|
+
results
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return results;
|
|
76
|
+
}
|
|
77
|
+
async _processResponseItem(command, index, responseHelper, results) {
|
|
78
|
+
const responseResult = responseHelper.response.getData().result;
|
|
79
|
+
const resultData = this._getBatchResultByIndex(responseResult.result, index);
|
|
80
|
+
const resultError = this._getBatchResultByIndex(responseResult.result_error, index);
|
|
81
|
+
if (typeof resultData !== "undefined" || typeof resultError !== "undefined") {
|
|
82
|
+
const methodName = command.method;
|
|
83
|
+
const resultTime = this._getBatchResultByIndex(responseResult.result_time, index);
|
|
84
|
+
if (typeof resultTime !== "undefined") {
|
|
85
|
+
await responseHelper.restrictionManager.updateStats(responseHelper.requestId, `batch::${methodName}`, resultTime);
|
|
86
|
+
}
|
|
87
|
+
const result = new ajaxResult.AjaxResult({
|
|
88
|
+
answer: {
|
|
89
|
+
error: resultError ? typeof resultError === "string" ? resultError : resultError.error : void 0,
|
|
90
|
+
error_description: resultError ? typeof resultError === "string" ? void 0 : resultError.error_description : void 0,
|
|
91
|
+
result: resultData,
|
|
92
|
+
total: Number.parseInt(this._getBatchResultByIndex(responseResult.result_total, index) || "0"),
|
|
93
|
+
next: Number.parseInt(this._getBatchResultByIndex(responseResult.result_next, index) || "0"),
|
|
94
|
+
time: resultTime
|
|
95
|
+
},
|
|
96
|
+
query: {
|
|
97
|
+
method: methodName,
|
|
98
|
+
params: command.query || {},
|
|
99
|
+
requestId: responseHelper.requestId
|
|
100
|
+
},
|
|
101
|
+
status: responseHelper.response.getStatus()
|
|
102
|
+
});
|
|
103
|
+
results.set(index, result);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (responseHelper.parallelDefaultValue) {
|
|
107
|
+
throw new sdkError.SdkError({
|
|
108
|
+
code: "JSSDK_INTERACTION_BATCH_STRATEGY_V2_EMPTY_COMMAND_RESPONSE",
|
|
109
|
+
description: `There were difficulties parsing the response for batch { index: ${index}, method: ${command.method} }`,
|
|
110
|
+
status: 500
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// endregion ////
|
|
115
|
+
// region handleResults ////
|
|
116
|
+
// Soft-error guard lives in AbstractProcessing.handleResults (#228); this is the
|
|
117
|
+
// success-only path for apiVer2.
|
|
118
|
+
async _handleResultsSuccess(_commands, results, responseHelper, result) {
|
|
119
|
+
const dataResult = /* @__PURE__ */ new Map();
|
|
120
|
+
for (const [index, data] of results) {
|
|
121
|
+
if (data.getStatus() !== 200 || !data.isSuccess) {
|
|
122
|
+
const ajaxError = this._createErrorFromAjaxResult(data);
|
|
123
|
+
this._processResponseError(result, ajaxError, `${index}`);
|
|
124
|
+
dataResult.set(index, data);
|
|
125
|
+
}
|
|
126
|
+
dataResult.set(index, data);
|
|
127
|
+
}
|
|
128
|
+
result.setData({
|
|
129
|
+
result: dataResult,
|
|
130
|
+
time: responseHelper.response.getData().time
|
|
131
|
+
});
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
// endregion ////
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
exports.AbstractProcessingV2 = AbstractProcessingV2;
|
|
138
|
+
//# sourceMappingURL=abstract-processing.cjs.map
|