[{"data":1,"prerenderedAt":2863},["ShallowReactive",2],{"navigation":3,"-docs-working-with-the-rest-api-oauth":459,"-docs-working-with-the-rest-api-oauth-description":2852},[4],{"title":5,"path":6,"stem":7,"children":8,"page":47},"Docs","\u002Fdocs","docs",[9,78,351],{"title":10,"path":11,"stem":12,"children":13,"restApiVersion":15,"category":15,"description":15,"badge":15},"Начало работы","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,17,48,63],{"title":10,"path":11,"stem":12,"restApiVersion":15,"category":15,"description":16,"badge":15},null,"Краткое руководство по работе с SDK для REST API Bitrix24",{"title":18,"path":19,"stem":20,"children":21,"page":47},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[22,27,32,37,42],{"title":23,"path":24,"stem":25,"restApiVersion":15,"category":15,"description":26,"badge":15},"Vue","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F1.vue","Руководство по установке Bitrix24 JS SDK в приложениях Vue.",{"title":28,"path":29,"stem":30,"restApiVersion":15,"category":15,"description":31,"badge":15},"Nuxt","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F2.nuxt","Руководство по установке Bitrix24 JS SDK в приложениях Nuxt.",{"title":33,"path":34,"stem":35,"restApiVersion":15,"category":15,"description":36,"badge":15},"React","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Freact","docs\u002F1.getting-started\u002F2.installation\u002F3.react","Руководство по установке Bitrix24 JS SDK в приложениях React.",{"title":38,"path":39,"stem":40,"restApiVersion":15,"category":15,"description":41,"badge":15},"Node.js","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnodejs","docs\u002F1.getting-started\u002F2.installation\u002F4.nodejs","Руководство по установке Bitrix24 JS SDK в приложениях Node.js.",{"title":43,"path":44,"stem":45,"restApiVersion":15,"category":15,"description":46,"badge":15},"UMD","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fumd","docs\u002F1.getting-started\u002F2.installation\u002F5.umd","Руководство по использованию UMD-версии Bitrix24 JS SDK в ваших приложениях.",false,{"title":49,"restApiVersion":15,"category":15,"description":15,"badge":15,"shadow":47,"path":50,"stem":51,"children":52,"page":47},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[53,58],{"title":54,"path":55,"stem":56,"restApiVersion":15,"category":15,"description":57,"badge":15},"v0 → v1","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv1","docs\u002F1.getting-started\u002F3.migration\u002F1.v1","Подробное руководство по миграции приложения с Bitrix24 JS SDK v0 на Bitrix24 JS SDK v1.",{"title":59,"path":60,"stem":61,"restApiVersion":15,"category":15,"description":62,"badge":15},"v2 → v3","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv3","docs\u002F1.getting-started\u002F3.migration\u002F2.v3","Как уйти с устаревшей REST-поверхности, которая удаляется в Bitrix24 JS SDK 3.0.0.",{"title":64,"restApiVersion":15,"category":15,"description":15,"badge":15,"path":65,"stem":66,"children":67,"page":47},"AI-инструменты","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[68,73],{"title":69,"path":70,"stem":71,"restApiVersion":15,"category":15,"description":72,"badge":15},"Навыки","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F1.skills","Узкоспециализированные skill-файлы для AI-агентов разработчика, работающих с @bitrix24\u002Fb24jssdk.",{"title":74,"path":75,"stem":76,"restApiVersion":15,"category":15,"description":77,"badge":15},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","Как сделать, чтобы AI-инструменты вроде Cursor, Windsurf, GitHub Copilot, ChatGPT и Claude понимали методы, инструменты и лучшие практики Bitrix24 JS SDK.",{"title":79,"path":80,"stem":81,"children":82,"restApiVersion":15,"category":15,"description":15,"badge":15},"Работа с REST API","\u002Fdocs\u002Fworking-with-the-rest-api","docs\u002F2.working-with-the-rest-api\u002F0.index",[83,86,93,98,103,107,112,116,121,126,130,135,140,145,150,155,160,165,170,175,179,184,189,194,200,205,210,215,220,225,230,235,240,245,251,256,261,267,272,277,282,287,293,299,305,310,315,320,326,331,336,341,346],{"title":84,"path":80,"stem":81,"restApiVersion":15,"category":15,"description":85,"badge":15},"Введение","Обзор возможностей SDK для работы с REST API Bitrix24",{"title":87,"path":88,"stem":89,"restApiVersion":90,"category":91,"description":92,"badge":15},"Call","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver2","rest-api-ver2","actions","Метод для вызовов REST API Bitrix24 версии 2.",{"title":87,"path":94,"stem":95,"restApiVersion":96,"category":91,"description":97,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver3","rest-api-ver3","Метод для вызовов REST API Bitrix24 версии 3.",{"title":99,"path":100,"stem":101,"restApiVersion":90,"category":91,"description":102,"badge":15},"CallList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver2","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 2.",{"title":99,"path":104,"stem":105,"restApiVersion":96,"category":91,"description":106,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver3","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 3.",{"title":108,"path":109,"stem":110,"restApiVersion":90,"category":91,"description":111,"badge":15},"FetchList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver2","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 2 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":108,"path":113,"stem":114,"restApiVersion":96,"category":91,"description":115,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver3","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 3 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":117,"path":118,"stem":119,"restApiVersion":15,"category":117,"description":120,"badge":15},"B24Hook","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhook","docs\u002F2.working-with-the-rest-api\u002F20.hook","Серверная точка входа для работы с REST API Bitrix24 через входящий вебхук (постоянный токен).",{"title":122,"path":123,"stem":124,"restApiVersion":90,"category":91,"description":125,"badge":15},"Batch","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver2","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 2. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":122,"path":127,"stem":128,"restApiVersion":96,"category":91,"description":129,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":84,"path":131,"stem":132,"restApiVersion":15,"category":133,"description":134,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe","docs\u002F2.working-with-the-rest-api\u002F30.frame","B24Frame","Предназначен для управления приложениями Bitrix24, работающими внутри placement-iframe. Наследуется от AbstractB24 и предоставляет менеджеры для аутентификации, обмена сообщениями с родительским окном, слайдеров, диалогов, placement и опций.",{"title":136,"path":137,"stem":138,"restApiVersion":15,"category":133,"description":139,"badge":15},"Инициализация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-initialize-b24-frame","docs\u002F2.working-with-the-rest-api\u002F30.frame-initialize-b24-frame","Функция предназначена для инициализации B24Frame",{"title":141,"path":142,"stem":143,"restApiVersion":15,"category":133,"description":144,"badge":15},"Авторизация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-auth","docs\u002F2.working-with-the-rest-api\u002F31.frame-auth","Предназначен для управления аутентификацией в приложениях Bitrix24. Обрабатывает данные аутентификации, полученные от родительского окна, и предоставляет методы для их обновления и получения.",{"title":146,"path":147,"stem":148,"restApiVersion":15,"category":133,"description":149,"badge":15},"Диалог","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-dialog","docs\u002F2.working-with-the-rest-api\u002F31.frame-dialog","Оборачивает системные диалоги BX24 (выбор пользователя, выбор прав доступа, выбор CRM-сущности), чтобы их можно было открывать изнутри iframe приложения Bitrix24.",{"title":151,"path":152,"stem":153,"restApiVersion":15,"category":133,"description":154,"badge":15},"Опции","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-options","docs\u002F2.working-with-the-rest-api\u002F31.frame-options","Используется для управления настройками приложения и пользователя в приложении Bitrix24. Позволяет инициализировать данные, получать и устанавливать опции через сообщения родительскому окну.",{"title":156,"path":157,"stem":158,"restApiVersion":15,"category":133,"description":159,"badge":15},"Родительское окно","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-parent","docs\u002F2.working-with-the-rest-api\u002F31.frame-parent","Предоставляет методы для управления родительским окном приложения в Bitrix24, включая изменение размера окна, управление прокруткой, инициацию звонков и открытие мессенджера.",{"title":161,"path":162,"stem":163,"restApiVersion":15,"category":133,"description":164,"badge":15},"Placement","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-placement","docs\u002F2.working-with-the-rest-api\u002F31.frame-placement","Используется для управления placement виджетов в приложении Bitrix24.",{"title":166,"path":167,"stem":168,"restApiVersion":15,"category":133,"description":169,"badge":15},"Слайдер","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-slider","docs\u002F2.working-with-the-rest-api\u002F31.frame-slider","Предоставляет методы для работы со слайдерами в приложении Bitrix24. Позволяет открывать и закрывать слайдеры, а также управлять их содержимым.",{"title":171,"path":172,"stem":173,"restApiVersion":90,"category":91,"description":174,"badge":15},"BatchByChunk","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver2","Метод для выполнения пакетных запросов с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":171,"path":176,"stem":177,"restApiVersion":96,"category":91,"description":178,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3 с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":180,"path":181,"stem":182,"restApiVersion":15,"category":180,"description":183,"badge":15},"B24OAuth","\u002Fdocs\u002Fworking-with-the-rest-api\u002Foauth","docs\u002F2.working-with-the-rest-api\u002F40.oauth","Серверная точка входа для работы с REST API Bitrix24 по access token OAuth 2.0 (с автоматическим обновлением).",{"title":185,"path":186,"stem":187,"restApiVersion":15,"category":15,"description":188,"badge":15},"Выбор метода","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fchoosing-the-right-method","docs\u002F2.working-with-the-rest-api\u002F5.choosing-the-right-method","Руководство по выбору между Call, CallList, FetchList, Batch и BatchByChunk в REST API v2 и v3.",{"title":190,"path":191,"stem":192,"restApiVersion":15,"category":15,"description":193,"badge":15},"Фильтрация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffiltering","docs\u002F2.working-with-the-rest-api\u002F5.filtering","Справочник по построению параметров фильтра в Bitrix24 REST API v2 (префиксные операторы) и v3 (массив троек), включая формат дат и правило отбрасывания order.",{"title":195,"path":196,"stem":197,"restApiVersion":15,"category":198,"description":199,"badge":15},"B24HelperManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper","docs\u002F2.working-with-the-rest-api\u002F50.helper","Helper","Агрегирующий менеджер, который загружает данные профиля, приложения, оплаты, лицензии, валют и опций одним батч-запросом REST, а также подключает Pull-клиент.",{"title":201,"path":202,"stem":203,"restApiVersion":15,"category":198,"description":204,"badge":15},"useB24Helper","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-use-b24-helper","docs\u002F2.working-with-the-rest-api\u002F51.helper-use-b24-helper","Основанный на замыкании composable, который владеет единственным экземпляром B24HelperManager и предоставляет хелперы жизненного цикла (init \u002F destroy \u002F связка с Pull-клиентом).",{"title":206,"path":207,"stem":208,"restApiVersion":15,"category":198,"description":209,"badge":15},"ProfileManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-profile-manager","docs\u002F2.working-with-the-rest-api\u002F52.helper-profile-manager","Разобранный ответ REST-метода `profile`: id, имя, фамилия, пол, фото, часовой пояс, флаг администратора.",{"title":211,"path":212,"stem":213,"restApiVersion":15,"category":198,"description":214,"badge":15},"AppManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-app-manager","docs\u002F2.working-with-the-rest-api\u002F53.helper-app-manager","Разобранный ответ REST-метода `app.info`: id приложения, код, версия, статус, флаг установки.",{"title":216,"path":217,"stem":218,"restApiVersion":15,"category":198,"description":219,"badge":15},"PaymentManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-payment-manager","docs\u002F2.working-with-the-rest-api\u002F54.helper-payment-manager","Статус оплаты приложения Bitrix24 — извлекается из `app.info`.",{"title":221,"path":222,"stem":223,"restApiVersion":15,"category":198,"description":224,"badge":15},"LicenseManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-license-manager","docs\u002F2.working-with-the-rest-api\u002F55.helper-license-manager","Информация о лицензии Bitrix24 из `app.info` — и автоматическая перенастройка менеджера ограничений под соответствующий тарифный план.",{"title":226,"path":227,"stem":228,"restApiVersion":15,"category":198,"description":229,"badge":15},"CurrencyManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-currency-manager","docs\u002F2.working-with-the-rest-api\u002F56.helper-currency-manager","Каталог валют, кэшируемый в памяти — базовая валюта, форматтеры для каждой валюты и форматтер числа в строку.",{"title":231,"path":232,"stem":233,"restApiVersion":15,"category":198,"description":234,"badge":15},"OptionsManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-options-manager","docs\u002F2.working-with-the-rest-api\u002F57.helper-options-manager","Типизированный доступ к `app.option.get` \u002F `user.option.get`, плюс save(), который батчит `*.option.set` с необязательным Pull-уведомлением.",{"title":236,"path":237,"stem":238,"restApiVersion":15,"category":15,"description":239,"badge":15},"Ошибки","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferrors","docs\u002F2.working-with-the-rest-api\u002F6.errors","Справочник кодов SdkError и AjaxError, выбрасываемых SDK, плюс коды ошибок REST Bitrix24, которые через них проявляются.",{"title":241,"path":242,"stem":243,"restApiVersion":15,"category":241,"description":244,"badge":15},"Pull","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fpull","docs\u002F2.working-with-the-rest-api\u002F60.pull","Поток сообщений в реальном времени от Bitrix24 к вашему приложению — WebSocket как основной канал, long-polling как запасной. Только для фрейма.",{"title":246,"path":247,"stem":248,"restApiVersion":15,"category":249,"description":250,"badge":15},"Logger","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger","docs\u002F2.working-with-the-rest-api\u002F66.logger","logger","Логгер, вдохновлённый PHP Monolog, предоставляет структурированную систему логирования с поддержкой каналов, обработчиков, процессоров и форматтеров. Реализация следует принципам PSR-3 и паттерну цепочки ответственности.",{"title":252,"path":253,"stem":254,"restApiVersion":15,"category":249,"description":255,"badge":15},"Telegram","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger-telegram","docs\u002F2.working-with-the-rest-api\u002F66.logger-telegram","Отправка логов в Telegram",{"title":257,"path":258,"stem":259,"restApiVersion":15,"category":15,"description":260,"badge":15},"Обнаружение v3-методов","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-v3-methods","docs\u002F2.working-with-the-rest-api\u002F7.discovering-v3-methods","Используйте rest.documentation.openapi, чтобы получить собственный машиночитаемый список всех доступных методов REST API v3 портала — источник истины, на который SDK опирается вместо захардкоженного allowlist. Особенно полезно для AI-агентов и кодогенерации.",{"title":262,"path":263,"stem":264,"restApiVersion":15,"category":265,"description":266,"badge":15},"AjaxResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-ajax-result","docs\u002F2.working-with-the-rest-api\u002F70.core-ajax-result","Core","Специализированный Result, возвращаемый каждым REST-хелпером. Предоставляет `isMore() \u002F getNext() \u002F getTotal() \u002F getStatus()` для постраничных ответов и неизменяемые данные.",{"title":268,"path":269,"stem":270,"restApiVersion":15,"category":265,"description":271,"badge":15},"Http","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-http","docs\u002F2.working-with-the-rest-api\u002F70.core-http","Низкоуровневый интерфейс транспорта, возвращаемый `b24.getHttpClient(version)`. Прямой доступ к axios-клиентам, параметрам ограничений, статистике и сбросу.",{"title":273,"path":274,"stem":275,"restApiVersion":15,"category":265,"description":276,"badge":15},"B24LangList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-lang-list","docs\u002F2.working-with-the-rest-api\u002F70.core-lang-list","Enum языков интерфейса облачного Bitrix24 плюс карта локалей BCP-47.",{"title":278,"path":279,"stem":280,"restApiVersion":15,"category":265,"description":281,"badge":15},"RequestIdGenerator","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-request-id-generator","docs\u002F2.working-with-the-rest-api\u002F70.core-request-id-generator","Реализация `IRequestIdGenerator` по умолчанию. Генерирует request id в формате UUID v7 и предоставляет имена HTTP-заголовка \u002F query-параметра, используемые SDK.",{"title":283,"path":284,"stem":285,"restApiVersion":15,"category":265,"description":286,"badge":15},"Result","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-result","docs\u002F2.working-with-the-rest-api\u002F70.core-result","Обобщённый результат операции с флагом успеха, данными и картой ошибок. Аналог \\\\Bitrix\\\\Main\\\\Result из Bitrix Framework.",{"title":288,"path":289,"stem":290,"restApiVersion":15,"category":291,"description":292,"badge":15},"Лимитеры","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flimiters","docs\u002F2.working-with-the-rest-api\u002F77.limiters","limiters","Система ограничений предоставляет комплексный механизм управления частотой запросов, временем выполнения операций и адаптивными задержками.",{"title":294,"path":295,"stem":296,"restApiVersion":15,"category":297,"description":298,"badge":15},"Логирование и редактирование","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogging","docs\u002F2.working-with-the-rest-api\u002F78.logging","logging","Что SDK редактирует автоматически до того, как информация о запросе попадёт в логгер или AjaxError, что он не редактирует, и как подключить кастомный логгер через setLogger(...) без повторного появления утечек учётных данных.",{"title":300,"path":301,"stem":302,"restApiVersion":15,"category":303,"description":304,"badge":15},"Browser","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-browser","docs\u002F2.working-with-the-rest-api\u002F80.tools-browser","tools","Дешёвый детектор user-agent \u002F платформы \u002F возможностей. Полезен для runtime-ветвлений во фронтенд-коде.",{"title":306,"path":307,"stem":308,"restApiVersion":15,"category":303,"description":309,"badge":15},"Text","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-text","docs\u002F2.working-with-the-rest-api\u002F80.tools-text","Утилиты для текста и дат — UUID v4 \u002F v7, кодирование \u002F декодирование HTML-сущностей, преобразования типов, хелперы регистра, `toDateTime` \u002F `toB24Format` на Luxon, форматирование чисел и конструктор query-строки.",{"title":311,"path":312,"stem":313,"restApiVersion":15,"category":303,"description":314,"badge":15},"Type","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-type","docs\u002F2.working-with-the-rest-api\u002F80.tools-type","Runtime type guards — строки, числа, обычные объекты, массивы, DOM-узлы, Blob, FormData, формы JSON-RPC сообщений.",{"title":316,"path":317,"stem":318,"restApiVersion":15,"category":303,"description":319,"badge":15},"useFormatter","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-use-formatters","docs\u002F2.working-with-the-rest-api\u002F80.tools-use-formatters","Composable, возвращающий общие экземпляры `FormatterNumbers` и `FormatterIban`, преднастроенные спецификациями стран.",{"title":321,"path":322,"stem":323,"restApiVersion":15,"category":324,"description":325,"badge":15},"IResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-iresult","docs\u002F2.working-with-the-rest-api\u002F90.types-iresult","Types","Обобщённый интерфейс результата операции. Реализуется `Result\u003CT>` и (транзитивно) `AjaxResult\u003CT>`.",{"title":327,"path":328,"stem":329,"restApiVersion":15,"category":324,"description":330,"badge":15},"TypeB24","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-type-b24","docs\u002F2.working-with-the-rest-api\u002F90.types-type-b24","Публичный контракт, реализуемый каждым классом-точкой входа (B24Frame, B24Hook, B24OAuth). Единый источник истины для поверхности SDK.",{"title":332,"path":333,"stem":334,"restApiVersion":15,"category":265,"description":335,"badge":15},"Телеметрия","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftelemetry","docs\u002F2.working-with-the-rest-api\u002F95.telemetry","Query-параметры request id, версии SDK и типа SDK, добавляемые к каждому REST-вызову Bitrix24.",{"title":337,"path":338,"stem":339,"restApiVersion":15,"category":265,"description":340,"badge":15},"Коды ошибок","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferror-codes","docs\u002F2.working-with-the-rest-api\u002F96.error-codes","Каталог кодов ошибок, которые распознаёт SDK — разделённых на «hard» (выбрасываются) и «soft» (возвращаются как AjaxError внутри AjaxResult).",{"title":342,"path":343,"stem":344,"restApiVersion":15,"category":303,"description":345,"badge":15},"HealthCheck","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-health-check","docs\u002F2.working-with-the-rest-api\u002Ftools-health-check","Метод для проверки доступности REST API Bitrix24. Выполняет простой запрос к REST API для проверки работоспособности сервиса.",{"title":347,"path":348,"stem":349,"restApiVersion":15,"category":303,"description":350,"badge":15},"Ping","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-ping","docs\u002F2.working-with-the-rest-api\u002Ftools-ping","Метод для измерения скорости ответа REST API Bitrix24. Выполняет тестовый запрос и возвращает время ответа в миллисекундах.",{"title":352,"path":353,"stem":354,"children":355,"restApiVersion":15,"category":15,"description":15,"badge":15},"Примеры","\u002Fdocs\u002Fexamples","docs\u002F99.examples\u002F0.index",[356,358,364,369,374,379,384,389,394,399,404,409,414,419,424,429,434,439,444,449,454],{"title":84,"path":353,"stem":354,"restApiVersion":15,"category":15,"description":357,"badge":15},"Рецепты, сочетающие SDK с реалистичными сценариями — аналитика CRM, массовые рассылки, AI-ассистенты, установка по OAuth и не только. Каждый рецепт — отдельный файл, удобный для копирования.",{"title":359,"path":360,"stem":361,"restApiVersion":15,"category":362,"description":363,"badge":15},"Аналитика CRM","\u002Fdocs\u002Fexamples\u002Fcrm-analytics","docs\u002F99.examples\u002F1.crm-analytics","examples","Стримит все сделки через actions.v2.fetchList.make, группирует по стадиям, печатает отчёт по воронке (количество, конверсия %, средний чек, win rate).",{"title":365,"path":366,"stem":367,"restApiVersion":15,"category":362,"description":368,"badge":15},"Сделки → CSV","\u002Fdocs\u002Fexamples\u002Fdashboard-deals-csv","docs\u002F99.examples\u002F1.dashboard-deals-csv","Стримит каждую сделку CRM, подходящую под фильтр по дате, в CSV-файл через вебхук и FetchListV2.",{"title":370,"path":371,"stem":372,"restApiVersion":15,"category":15,"description":373,"badge":15},"Список сущностей","\u002Fdocs\u002Fexamples\u002Fentity-list","docs\u002F99.examples\u002F10.entity-list","Рендерит постраничный список сущностей Bitrix24 с компонентами B24UI и SDK-действием callList.",{"title":375,"path":376,"stem":377,"restApiVersion":15,"category":362,"description":378,"badge":15},"Обработка ошибок","\u002Fdocs\u002Fexamples\u002Ferror-handling","docs\u002F99.examples\u002F10.error-handling","Демонстрирует четыре слоя ошибок (SdkError \u002F AjaxError \u002F сетевые \u002F soft) и настройки hardErrorCodes \u002F softErrorCodes \u002F retryOnNetworkError у менеджера ограничений.",{"title":380,"path":381,"stem":382,"restApiVersion":15,"category":362,"description":383,"badge":15},"Регистрация событий","\u002Fdocs\u002Fexamples\u002Fevent-registration","docs\u002F99.examples\u002F11.event-registration","CLI-инструмент — список, привязка и отвязка исходящих событий вебхуков Bitrix24 через event.get \u002F event.bind \u002F event.unbind. В паре с рецептом обработчика вебхуков.",{"title":385,"path":386,"stem":387,"restApiVersion":15,"category":362,"description":388,"badge":15},"Установка OAuth","\u002Fdocs\u002Fexamples\u002Foauth-install","docs\u002F99.examples\u002F12.oauth-install","Express-сервер, который обрабатывает события ONAPPINSTALL \u002F ONAPPUPDATE \u002F ONAPPUNINSTALL для маркетплейс-приложения Bitrix24, сохраняет токены по порталам и создаёт клиент B24OAuth по требованию с callback обновления, подключённым к хранилищу.",{"title":390,"path":391,"stem":392,"restApiVersion":15,"category":362,"description":393,"badge":15},"Скелет frame-приложения","\u002Fdocs\u002Fexamples\u002Fframe-app-skeleton","docs\u002F99.examples\u002F2.frame-app-skeleton","Минимально жизнеспособное iframe-приложение Bitrix24: рукопожатие init, установка заголовка, сохранение состояния приложения, открытие слайдера, чистое закрытие.",{"title":395,"path":396,"stem":397,"restApiVersion":15,"category":362,"description":398,"badge":15},"Массовые рассылки","\u002Fdocs\u002Fexamples\u002Fmass-messaging","docs\u002F99.examples\u002F2.mass-messaging","Фильтрует контакты в CRM, персонализирует шаблон, отправляет IM-уведомления ответственным менеджерам.",{"title":400,"path":401,"stem":402,"restApiVersion":15,"category":15,"description":403,"badge":15},"Мастер установки","\u002Fdocs\u002Fexamples\u002Fapp-installation-wizard","docs\u002F99.examples\u002F20.app-installation-wizard","Многошаговый процесс установки, который создаёт пользовательские поля, регистрирует placement-ы, финализирует установку и празднует конфетти.",{"title":405,"path":406,"stem":407,"restApiVersion":15,"category":362,"description":408,"badge":15},"Автоматизация задач","\u002Fdocs\u002Fexamples\u002Ftask-automation","docs\u002F99.examples\u002F3.task-automation","Опрашивает стадии сделок каждые 60 с. При отслеживаемом переходе создаёт задачу с описанием, дедлайном и приоритетом.",{"title":410,"path":411,"stem":412,"restApiVersion":15,"category":362,"description":413,"badge":15},"Вебхук CLI","\u002Fdocs\u002Fexamples\u002Fwebhook-cli-node","docs\u002F99.examples\u002F3.webhook-cli-node","Node-скрипт на 30 строк, который аутентифицируется на портале Bitrix24 через входящий вебхук и печатает вызывающего пользователя — полезно как первое, что вы запускаете после создания вебхука.",{"title":415,"path":416,"stem":417,"restApiVersion":15,"category":15,"description":418,"badge":15},"Экспорт Node + Hook","\u002Fdocs\u002Fexamples\u002Fnode-hook-company-export","docs\u002F99.examples\u002F30.node-hook-company-export","Экспорт компаний Bitrix24 в CSV-файл из чистого Node.js-скрипта через B24Hook.",{"title":420,"path":421,"stem":422,"restApiVersion":15,"category":362,"description":423,"badge":15},"Массовое обновление","\u002Fdocs\u002Fexamples\u002Fbulk-update-deals","docs\u002F99.examples\u002F4.bulk-update-deals","Переносит тысячи сделок CRM на новую стадию через BatchByChunkV2 — автоматическое разбиение на чанки, обработка частичных ошибок и одна строка прогресса.",{"title":425,"path":426,"stem":427,"restApiVersion":15,"category":362,"description":428,"badge":15},"Синхронизация ERP","\u002Fdocs\u002Fexamples\u002Ferp-sync","docs\u002F99.examples\u002F4.erp-sync","Двусторонняя синхронизация контактов между Bitrix24 и внешней ERP. Сопоставление по ИНН (основное) или email (запасное). Cron каждый час.",{"title":430,"path":431,"stem":432,"restApiVersion":15,"category":362,"description":433,"badge":15},"Файлы Диска","\u002Fdocs\u002Fexamples\u002Fdisk-files","docs\u002F99.examples\u002F5.disk-files","Список хранилищ и содержимого папок, создание подпапок, просмотр файлов. Загрузка файлов (multipart) намеренно вне области.",{"title":435,"path":436,"stem":437,"restApiVersion":15,"category":362,"description":438,"badge":15},"Подписка на Pull","\u002Fdocs\u002Fexamples\u002Fpull-subscribe-frame","docs\u002F99.examples\u002F5.pull-subscribe-frame","Открыть живой канал из frame-приложения Bitrix24 и реагировать на push-события через useB24Helper + Pull-клиент.",{"title":440,"path":441,"stem":442,"restApiVersion":15,"category":362,"description":443,"badge":15},"Telegram-бот","\u002Fdocs\u002Fexamples\u002Ftelegram-bot","docs\u002F99.examples\u002F6.telegram-bot","Опрашивает новые сделки CRM каждые две минуты; уведомляет Telegram-чат HTML-карточкой.",{"title":445,"path":446,"stem":447,"restApiVersion":15,"category":362,"description":448,"badge":15},"Обработчик вебхуков","\u002Fdocs\u002Fexamples\u002Fwebhook-handler","docs\u002F99.examples\u002F7.webhook-handler","Express-сервер, который принимает исходящие события Bitrix24, подгружает детали через REST, маршрутизирует по имени события. Всегда возвращает 200.",{"title":450,"path":451,"stem":452,"restApiVersion":15,"category":362,"description":453,"badge":15},"AI-ассистент","\u002Fdocs\u002Fexamples\u002Fai-assistant","docs\u002F99.examples\u002F8.ai-assistant","Загружает сделку и её дела, спрашивает у GPT-4o лучшее следующее действие, создаёт задачу, привязанную к сделке, с приоритетом и дедлайном.",{"title":455,"path":456,"stem":457,"restApiVersion":15,"category":362,"description":458,"badge":15},"Веб-поиск + LLM","\u002Fdocs\u002Fexamples\u002Fweb-search-llm","docs\u002F99.examples\u002F9.web-search-llm","Двухшаговый RAG: запрос к любому провайдеру веб-поиска, прогон результата через ваш LLM с цитатами [N], публикация ответа комментарием в таймлайн CRM на сделке.",{"id":460,"title":461,"audited":15,"badge":15,"body":462,"category":180,"description":183,"extension":2840,"links":2841,"meta":2848,"navigation":2849,"path":181,"restApiVersion":15,"seo":2850,"stem":182,"__hash__":2851},"docs\u002Fdocs\u002F2.working-with-the-rest-api\u002F40.oauth.md","Класс B24OAuth",{"type":463,"value":464,"toc":2808},"minimark",[465,517,522,540,573,577,1062,1067,1138,1145,1383,1389,1440,1444,1451,1472,1512,1537,1541,1544,1547,1686,1692,1696,1707,1709,1956,1961,1965,1971,2003,2035,2037,2094,2103,2136,2142,2150,2180,2186,2191,2204,2212,2221,2255,2264,2285,2302,2322,2326,2330,2350,2413,2419,2437,2446,2449,2452,2744,2748,2804],[466,467,469,489],"caution",{"title":468},"⚠️ ВНИМАНИЕ: БЕЗОПАСНОСТЬ",[470,471,472,473,483,484,488],"p",{},"Объект ",[474,475,479],"code",{"className":476,"language":477,"style":478},"language-ts-type shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ts-type","",[480,481,180],"span",{"class":482},"sBMFI"," предназначен ",[485,486,487],"strong",{},"исключительно для использования на сервере",".",[490,491,492,499,509],"ul",{},[493,494,495,498],"li",{},[474,496,497],{},"clientSecret",", access token и refresh token никогда не должны попадать в код браузера.",[493,500,501,502,488],{},"Предупреждение о клиентской стороне по умолчанию включено на обоих HTTP-клиентах; см. ",[503,504,506],"a",{"href":505},"#offclientsidewarning",[474,507,508],{},"offClientSideWarning",[493,510,511,512,488],{},"Для клиентских сценариев используйте ",[503,513,515],{"href":514},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe\u002F",[474,516,133],{},[518,519,521],"h2",{"id":520},"overview","Обзор",[470,523,524,528,529,535,536,539],{},[474,525,526],{"className":476,"language":477,"style":478},[480,527,180],{"class":482}," — это точка входа SDK для ",[503,530,534],{"href":531,"rel":532},"https:\u002F\u002Fapidocs.bitrix24.ru\u002Fsettings\u002Foauth\u002Findex.html",[533],"nofollow","локальных приложений OAuth 2.0",". Он принимает существующую пару токенов (выданную Bitrix24 при установке), использует access token для REST-вызовов и обновляет пару через ",[474,537,538],{},"oauth.bitrix.info",", когда access token истекает.",[470,541,542,543,548,549,557,558,561,562,561,565,568,569,572],{},"Класс наследуется от ",[474,544,545],{"className":476,"language":477,"style":478},[480,546,547],{"class":482},"AbstractB24"," и реализует ",[503,550,553],{"href":551,"rel":552},"https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Ftypes\u002Fb24.ts",[533],[474,554,555],{"className":476,"language":477,"style":478},[480,556,327],{"class":482},", поэтому полный набор REST-методов (",[474,559,560],{},"actions.v2.*",", ",[474,563,564],{},"actions.v3.*",[474,566,567],{},"tools.*",") доступен сразу после создания экземпляра — шаг ",[474,570,571],{},"await b24.init()"," не требуется.",[518,574,576],{"id":575},"creating-a-b24oauth-instance","Создание экземпляра B24OAuth",[578,579,583],"pre",{"className":580,"code":581,"language":582,"meta":478,"style":478},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { B24OAuth, EnumAppStatus } from '@bitrix24\u002Fb24jssdk'\n\nconst $b24 = new B24OAuth(\n  \u002F\u002F 1) Данные токена, полученные от Bitrix24 (payload события, OAuth-рукопожатие и т.д.)\n  {\n    applicationToken: '\u003Cyour_application_token>',\n    userId: 1,\n    memberId: '\u003Cyour_member_id>',\n    accessToken: '\u003Cyour_access_token>',\n    refreshToken: '\u003Cyour_refresh_token>',\n    expires: 1745997853,        \u002F\u002F unix-таймстамп, секунды\n    expiresIn: 3600,            \u002F\u002F секунды\n    scope: 'crm,catalog,user_brief',\n    domain: 'your_domain.bitrix24.com',\n    clientEndpoint: 'https:\u002F\u002Fyour_domain.bitrix24.com\u002Frest\u002F',\n    serverEndpoint: 'https:\u002F\u002Foauth.bitrix.info\u002Frest\u002F',\n    status: EnumAppStatus.Free\n  },\n  \u002F\u002F 2) Учётные данные приложения, выданные в Bitrix24 → Разработчикам → Приложения\n  {\n    clientId: 'local.xxxxxx.xxxxxx',\n    clientSecret: '\u003Cyour_client_secret>'\n  }\n)\n\nconst response = await $b24.actions.v2.call.make({\n  method: 'tasks.task.list',\n  params: { select: ['ID', 'TITLE', 'STATUS'] },\n  requestId: 'tasks-list'\n})\n","ts",[474,584,585,623,630,652,659,665,686,700,717,734,751,767,783,800,817,834,851,866,872,878,883,900,915,921,927,932,973,990,1039,1054],{"__ignoreMap":478},[480,586,589,593,597,601,604,607,610,613,616,620],{"class":587,"line":588},"line",1,[480,590,592],{"class":591},"s7zQu","import",[480,594,596],{"class":595},"sMK4o"," {",[480,598,600],{"class":599},"sTEyZ"," B24OAuth",[480,602,603],{"class":595},",",[480,605,606],{"class":599}," EnumAppStatus",[480,608,609],{"class":595}," }",[480,611,612],{"class":591}," from",[480,614,615],{"class":595}," '",[480,617,619],{"class":618},"sfazB","@bitrix24\u002Fb24jssdk",[480,621,622],{"class":595},"'\n",[480,624,626],{"class":587,"line":625},2,[480,627,629],{"emptyLinePlaceholder":628},true,"\n",[480,631,633,637,640,643,646,649],{"class":587,"line":632},3,[480,634,636],{"class":635},"spNyl","const",[480,638,639],{"class":599}," $b24 ",[480,641,642],{"class":595},"=",[480,644,645],{"class":595}," new",[480,647,600],{"class":648},"s2Zo4",[480,650,651],{"class":599},"(\n",[480,653,655],{"class":587,"line":654},4,[480,656,658],{"class":657},"sHwdD","  \u002F\u002F 1) Данные токена, полученные от Bitrix24 (payload события, OAuth-рукопожатие и т.д.)\n",[480,660,662],{"class":587,"line":661},5,[480,663,664],{"class":595},"  {\n",[480,666,668,672,675,677,680,683],{"class":587,"line":667},6,[480,669,671],{"class":670},"swJcz","    applicationToken",[480,673,674],{"class":595},":",[480,676,615],{"class":595},[480,678,679],{"class":618},"\u003Cyour_application_token>",[480,681,682],{"class":595},"'",[480,684,685],{"class":595},",\n",[480,687,689,692,694,698],{"class":587,"line":688},7,[480,690,691],{"class":670},"    userId",[480,693,674],{"class":595},[480,695,697],{"class":696},"sbssI"," 1",[480,699,685],{"class":595},[480,701,703,706,708,710,713,715],{"class":587,"line":702},8,[480,704,705],{"class":670},"    memberId",[480,707,674],{"class":595},[480,709,615],{"class":595},[480,711,712],{"class":618},"\u003Cyour_member_id>",[480,714,682],{"class":595},[480,716,685],{"class":595},[480,718,720,723,725,727,730,732],{"class":587,"line":719},9,[480,721,722],{"class":670},"    accessToken",[480,724,674],{"class":595},[480,726,615],{"class":595},[480,728,729],{"class":618},"\u003Cyour_access_token>",[480,731,682],{"class":595},[480,733,685],{"class":595},[480,735,737,740,742,744,747,749],{"class":587,"line":736},10,[480,738,739],{"class":670},"    refreshToken",[480,741,674],{"class":595},[480,743,615],{"class":595},[480,745,746],{"class":618},"\u003Cyour_refresh_token>",[480,748,682],{"class":595},[480,750,685],{"class":595},[480,752,754,757,759,762,764],{"class":587,"line":753},11,[480,755,756],{"class":670},"    expires",[480,758,674],{"class":595},[480,760,761],{"class":696}," 1745997853",[480,763,603],{"class":595},[480,765,766],{"class":657},"        \u002F\u002F unix-таймстамп, секунды\n",[480,768,770,773,775,778,780],{"class":587,"line":769},12,[480,771,772],{"class":670},"    expiresIn",[480,774,674],{"class":595},[480,776,777],{"class":696}," 3600",[480,779,603],{"class":595},[480,781,782],{"class":657},"            \u002F\u002F секунды\n",[480,784,786,789,791,793,796,798],{"class":587,"line":785},13,[480,787,788],{"class":670},"    scope",[480,790,674],{"class":595},[480,792,615],{"class":595},[480,794,795],{"class":618},"crm,catalog,user_brief",[480,797,682],{"class":595},[480,799,685],{"class":595},[480,801,803,806,808,810,813,815],{"class":587,"line":802},14,[480,804,805],{"class":670},"    domain",[480,807,674],{"class":595},[480,809,615],{"class":595},[480,811,812],{"class":618},"your_domain.bitrix24.com",[480,814,682],{"class":595},[480,816,685],{"class":595},[480,818,820,823,825,827,830,832],{"class":587,"line":819},15,[480,821,822],{"class":670},"    clientEndpoint",[480,824,674],{"class":595},[480,826,615],{"class":595},[480,828,829],{"class":618},"https:\u002F\u002Fyour_domain.bitrix24.com\u002Frest\u002F",[480,831,682],{"class":595},[480,833,685],{"class":595},[480,835,837,840,842,844,847,849],{"class":587,"line":836},16,[480,838,839],{"class":670},"    serverEndpoint",[480,841,674],{"class":595},[480,843,615],{"class":595},[480,845,846],{"class":618},"https:\u002F\u002Foauth.bitrix.info\u002Frest\u002F",[480,848,682],{"class":595},[480,850,685],{"class":595},[480,852,854,857,859,861,863],{"class":587,"line":853},17,[480,855,856],{"class":670},"    status",[480,858,674],{"class":595},[480,860,606],{"class":599},[480,862,488],{"class":595},[480,864,865],{"class":599},"Free\n",[480,867,869],{"class":587,"line":868},18,[480,870,871],{"class":595},"  },\n",[480,873,875],{"class":587,"line":874},19,[480,876,877],{"class":657},"  \u002F\u002F 2) Учётные данные приложения, выданные в Bitrix24 → Разработчикам → Приложения\n",[480,879,881],{"class":587,"line":880},20,[480,882,664],{"class":595},[480,884,886,889,891,893,896,898],{"class":587,"line":885},21,[480,887,888],{"class":670},"    clientId",[480,890,674],{"class":595},[480,892,615],{"class":595},[480,894,895],{"class":618},"local.xxxxxx.xxxxxx",[480,897,682],{"class":595},[480,899,685],{"class":595},[480,901,903,906,908,910,913],{"class":587,"line":902},22,[480,904,905],{"class":670},"    clientSecret",[480,907,674],{"class":595},[480,909,615],{"class":595},[480,911,912],{"class":618},"\u003Cyour_client_secret>",[480,914,622],{"class":595},[480,916,918],{"class":587,"line":917},23,[480,919,920],{"class":595},"  }\n",[480,922,924],{"class":587,"line":923},24,[480,925,926],{"class":599},")\n",[480,928,930],{"class":587,"line":929},25,[480,931,629],{"emptyLinePlaceholder":628},[480,933,935,937,940,942,945,948,950,952,954,957,959,962,964,967,970],{"class":587,"line":934},26,[480,936,636],{"class":635},[480,938,939],{"class":599}," response ",[480,941,642],{"class":595},[480,943,944],{"class":591}," await",[480,946,947],{"class":599}," $b24",[480,949,488],{"class":595},[480,951,91],{"class":599},[480,953,488],{"class":595},[480,955,956],{"class":599},"v2",[480,958,488],{"class":595},[480,960,961],{"class":599},"call",[480,963,488],{"class":595},[480,965,966],{"class":648},"make",[480,968,969],{"class":599},"(",[480,971,972],{"class":595},"{\n",[480,974,976,979,981,983,986,988],{"class":587,"line":975},27,[480,977,978],{"class":670},"  method",[480,980,674],{"class":595},[480,982,615],{"class":595},[480,984,985],{"class":618},"tasks.task.list",[480,987,682],{"class":595},[480,989,685],{"class":595},[480,991,993,996,998,1000,1003,1005,1008,1010,1013,1015,1017,1019,1022,1024,1026,1028,1031,1033,1036],{"class":587,"line":992},28,[480,994,995],{"class":670},"  params",[480,997,674],{"class":595},[480,999,596],{"class":595},[480,1001,1002],{"class":670}," select",[480,1004,674],{"class":595},[480,1006,1007],{"class":599}," [",[480,1009,682],{"class":595},[480,1011,1012],{"class":618},"ID",[480,1014,682],{"class":595},[480,1016,603],{"class":595},[480,1018,615],{"class":595},[480,1020,1021],{"class":618},"TITLE",[480,1023,682],{"class":595},[480,1025,603],{"class":595},[480,1027,615],{"class":595},[480,1029,1030],{"class":618},"STATUS",[480,1032,682],{"class":595},[480,1034,1035],{"class":599},"] ",[480,1037,1038],{"class":595},"},\n",[480,1040,1042,1045,1047,1049,1052],{"class":587,"line":1041},29,[480,1043,1044],{"class":670},"  requestId",[480,1046,674],{"class":595},[480,1048,615],{"class":595},[480,1050,1051],{"class":618},"tasks-list",[480,1053,622],{"class":595},[480,1055,1057,1060],{"class":587,"line":1056},30,[480,1058,1059],{"class":595},"}",[480,1061,926],{"class":599},[1063,1064,1066],"h3",{"id":1065},"constructor-signature","Сигнатура конструктора",[578,1068,1070],{"className":476,"code":1069,"language":477,"meta":478,"style":478},"constructor(\n  authOptions: B24OAuthParams,\n  oAuthSecret: B24OAuthSecret,\n  options?: { restrictionParams?: Partial\u003CRestrictionParams> }\n)\n",[474,1071,1072,1079,1092,1104,1134],{"__ignoreMap":478},[480,1073,1074,1077],{"class":587,"line":588},[480,1075,1076],{"class":482},"constructor",[480,1078,651],{"class":599},[480,1080,1081,1085,1087,1090],{"class":587,"line":625},[480,1082,1084],{"class":1083},"sHdIc","  authOptions",[480,1086,674],{"class":595},[480,1088,1089],{"class":482}," B24OAuthParams",[480,1091,685],{"class":595},[480,1093,1094,1097,1099,1102],{"class":587,"line":632},[480,1095,1096],{"class":1083},"  oAuthSecret",[480,1098,674],{"class":595},[480,1100,1101],{"class":482}," B24OAuthSecret",[480,1103,685],{"class":595},[480,1105,1106,1109,1112,1114,1117,1119,1122,1125,1128,1131],{"class":587,"line":654},[480,1107,1108],{"class":1083},"  options",[480,1110,1111],{"class":595},"?:",[480,1113,596],{"class":595},[480,1115,1116],{"class":670}," restrictionParams",[480,1118,1111],{"class":595},[480,1120,1121],{"class":482}," Partial",[480,1123,1124],{"class":595},"\u003C",[480,1126,1127],{"class":482},"RestrictionParams",[480,1129,1130],{"class":595},">",[480,1132,1133],{"class":595}," }\n",[480,1135,1136],{"class":587,"line":661},[480,1137,926],{"class":599},[1063,1139,1141,1142,478],{"id":1140},"b24oauthparams-fields","Поля ",[474,1143,1144],{},"B24OAuthParams",[1146,1147,1148,1164],"table",{},[1149,1150,1151],"thead",{},[1152,1153,1154,1158,1161],"tr",{},[1155,1156,1157],"th",{},"Поле",[1155,1159,1160],{},"Тип",[1155,1162,1163],{},"Описание",[1165,1166,1167,1185,1202,1218,1234,1253,1273,1289,1307,1326,1345,1363],"tbody",{},[1152,1168,1169,1175,1182],{},[1170,1171,1172],"td",{},[474,1173,1174],{},"applicationToken",[1170,1176,1177],{},[474,1178,1179],{"className":476,"language":477,"style":478},[480,1180,1181],{"class":482},"string",[1170,1183,1184],{},"Application token, выданный при установке.",[1152,1186,1187,1192,1199],{},[1170,1188,1189],{},[474,1190,1191],{},"userId",[1170,1193,1194],{},[474,1195,1196],{"className":476,"language":477,"style":478},[480,1197,1198],{"class":482},"number",[1170,1200,1201],{},"Идентификатор пользователя, которому принадлежит токен.",[1152,1203,1204,1209,1215],{},[1170,1205,1206],{},[474,1207,1208],{},"memberId",[1170,1210,1211],{},[474,1212,1213],{"className":476,"language":477,"style":478},[480,1214,1181],{"class":482},[1170,1216,1217],{},"member id портала.",[1152,1219,1220,1225,1231],{},[1170,1221,1222],{},[474,1223,1224],{},"accessToken",[1170,1226,1227],{},[474,1228,1229],{"className":476,"language":477,"style":478},[480,1230,1181],{"class":482},[1170,1232,1233],{},"Текущий access token.",[1152,1235,1236,1241,1247],{},[1170,1237,1238],{},[474,1239,1240],{},"refreshToken",[1170,1242,1243],{},[474,1244,1245],{"className":476,"language":477,"style":478},[480,1246,1181],{"class":482},[1170,1248,1249,1250,488],{},"Refresh token, используемый ",[474,1251,1252],{},"refreshAuth",[1152,1254,1255,1260,1266],{},[1170,1256,1257],{},[474,1258,1259],{},"expires",[1170,1261,1262],{},[474,1263,1264],{"className":476,"language":477,"style":478},[480,1265,1198],{"class":482},[1170,1267,1268,1269,1272],{},"Срок действия access token (unix-таймстамп, ",[485,1270,1271],{},"секунды",").",[1152,1274,1275,1280,1286],{},[1170,1276,1277],{},[474,1278,1279],{},"expiresIn",[1170,1281,1282],{},[474,1283,1284],{"className":476,"language":477,"style":478},[480,1285,1198],{"class":482},[1170,1287,1288],{},"Время жизни токена, секунды.",[1152,1290,1291,1296,1302],{},[1170,1292,1293],{},[474,1294,1295],{},"scope",[1170,1297,1298],{},[474,1299,1300],{"className":476,"language":477,"style":478},[480,1301,1181],{"class":482},[1170,1303,1304,1305,1272],{},"Список scope через запятую (например, ",[474,1306,795],{},[1152,1308,1309,1314,1320],{},[1170,1310,1311],{},[474,1312,1313],{},"domain",[1170,1315,1316],{},[474,1317,1318],{"className":476,"language":477,"style":478},[480,1319,1181],{"class":482},[1170,1321,1322,1323,1272],{},"Домен портала (",[474,1324,1325],{},"xxx.bitrix24.com",[1152,1327,1328,1333,1339],{},[1170,1329,1330],{},[474,1331,1332],{},"clientEndpoint",[1170,1334,1335],{},[474,1336,1337],{"className":476,"language":477,"style":478},[480,1338,1181],{"class":482},[1170,1340,1341,1342,488],{},"Корень REST портала, например ",[474,1343,1344],{},"https:\u002F\u002Fxxx.bitrix24.com\u002Frest\u002F",[1152,1346,1347,1352,1358],{},[1170,1348,1349],{},[474,1350,1351],{},"serverEndpoint",[1170,1353,1354],{},[474,1355,1356],{"className":476,"language":477,"style":478},[480,1357,1181],{"class":482},[1170,1359,1360,1361,488],{},"OAuth-сервер, обычно ",[474,1362,846],{},[1152,1364,1365,1370,1377],{},[1170,1366,1367],{},[474,1368,1369],{},"status",[1170,1371,1372],{},[474,1373,1374],{"className":476,"language":477,"style":478},[480,1375,1376],{"class":482},"TypeEnumAppStatus",[1170,1378,1379,1380,488],{},"Одно из ",[474,1381,1382],{},"EnumAppStatus.Free \u002F Demo \u002F Trial \u002F Paid \u002F Local \u002F Subscription",[1063,1384,1141,1386,478],{"id":1385},"b24oauthsecret-fields",[474,1387,1388],{},"B24OAuthSecret",[1146,1390,1391,1401],{},[1149,1392,1393],{},[1152,1394,1395,1397,1399],{},[1155,1396,1157],{},[1155,1398,1160],{},[1155,1400,1163],{},[1165,1402,1403,1423],{},[1152,1404,1405,1410,1416],{},[1170,1406,1407],{},[474,1408,1409],{},"clientId",[1170,1411,1412],{},[474,1413,1414],{"className":476,"language":477,"style":478},[480,1415,1181],{"class":482},[1170,1417,1418,1419,1422],{},"OAuth ",[474,1420,1421],{},"client_id"," вашего приложения.",[1152,1424,1425,1429,1435],{},[1170,1426,1427],{},[474,1428,497],{},[1170,1430,1431],{},[474,1432,1433],{"className":476,"language":477,"style":478},[480,1434,1181],{"class":482},[1170,1436,1418,1437,1422],{},[474,1438,1439],{},"client_secret",[518,1441,1443],{"id":1442},"refresh-token-flow","Процесс обновления токена",[470,1445,1446,1450],{},[474,1447,1448],{"className":476,"language":477,"style":478},[480,1449,180],{"class":482}," обновляет access token автоматически, когда:",[490,1452,1453,1462],{},[493,1454,1455,1456,561,1459],{},"REST-вызов возвращает ",[474,1457,1458],{},"expired_token",[485,1460,1461],{},"или",[493,1463,1464,1465,1468,1469,488],{},"вызывается ",[474,1466,1467],{},"getAuthData()"," и ",[474,1470,1471],{},"expires \u003C= Date.now()",[470,1473,1474,1475,1478,1479,1481,1482,1484,1485,1488,1489,561,1491,1468,1493,1495,1496,561,1498,561,1500,561,1502,561,1504,561,1506,561,1508,1468,1510,488],{},"Путь обновления по умолчанию вызывает ",[474,1476,1477],{},"GET \u002Foauth\u002Ftoken\u002F"," на ",[474,1480,1351],{}," (обычно ",[474,1483,846],{},") с ",[474,1486,1487],{},"grant_type=refresh_token",", переданными ",[474,1490,1240],{},[474,1492,1409],{},[474,1494,497],{},". При успехе менеджер обновляет ",[474,1497,1224],{},[474,1499,1240],{},[474,1501,1259],{},[474,1503,1279],{},[474,1505,1332],{},[474,1507,1351],{},[474,1509,1295],{},[474,1511,1369],{},[470,1513,1514,1515,1522,1523,1528,1529,561,1531,1534,1535,488],{},"Если запрос обновления завершается неудачей, SDK выбрасывает ",[503,1516,1519],{"href":1517,"rel":1518},"https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Foauth\u002Frefresh-token-error.ts",[533],[474,1520,1521],{},"RefreshTokenError"," (подкласс ",[474,1524,1525],{"className":476,"language":477,"style":478},[480,1526,1527],{"class":482},"SdkError","), несущий ",[474,1530,474],{},[474,1532,1533],{},"description"," и HTTP-",[474,1536,1369],{},[1063,1538,1540],{"id":1539},"persisting-refreshed-tokens","Сохранение обновлённых токенов",[470,1542,1543],{},"Зарегистрируйте callback, чтобы ваше приложение могло сохранить новую пару токенов (БД, менеджер секретов и т.д.):",[470,1545,1546],{},"\u002F\u002F @check-ignore: B24OAuth-specific method, ambient $b24 is typed as B24Frame",[578,1548,1550],{"className":580,"code":1549,"language":582,"meta":478,"style":478},"$b24.setCallbackRefreshAuth(async ({ authData, b24OAuthParams }) => {\n  await tokenStore.save({\n    accessToken: b24OAuthParams.accessToken,\n    refreshToken: b24OAuthParams.refreshToken,\n    expires: b24OAuthParams.expires,\n    expiresIn: b24OAuthParams.expiresIn,\n    memberId: authData.member_id\n  })\n})\n",[474,1551,1552,1587,1604,1618,1632,1646,1660,1673,1680],{"__ignoreMap":478},[480,1553,1554,1557,1559,1562,1564,1567,1570,1573,1575,1578,1581,1584],{"class":587,"line":588},[480,1555,1556],{"class":599},"$b24",[480,1558,488],{"class":595},[480,1560,1561],{"class":648},"setCallbackRefreshAuth",[480,1563,969],{"class":599},[480,1565,1566],{"class":635},"async",[480,1568,1569],{"class":595}," ({",[480,1571,1572],{"class":1083}," authData",[480,1574,603],{"class":595},[480,1576,1577],{"class":1083}," b24OAuthParams",[480,1579,1580],{"class":595}," })",[480,1582,1583],{"class":635}," =>",[480,1585,1586],{"class":595}," {\n",[480,1588,1589,1592,1595,1597,1600,1602],{"class":587,"line":625},[480,1590,1591],{"class":591},"  await",[480,1593,1594],{"class":599}," tokenStore",[480,1596,488],{"class":595},[480,1598,1599],{"class":648},"save",[480,1601,969],{"class":670},[480,1603,972],{"class":595},[480,1605,1606,1608,1610,1612,1614,1616],{"class":587,"line":632},[480,1607,722],{"class":670},[480,1609,674],{"class":595},[480,1611,1577],{"class":599},[480,1613,488],{"class":595},[480,1615,1224],{"class":599},[480,1617,685],{"class":595},[480,1619,1620,1622,1624,1626,1628,1630],{"class":587,"line":654},[480,1621,739],{"class":670},[480,1623,674],{"class":595},[480,1625,1577],{"class":599},[480,1627,488],{"class":595},[480,1629,1240],{"class":599},[480,1631,685],{"class":595},[480,1633,1634,1636,1638,1640,1642,1644],{"class":587,"line":661},[480,1635,756],{"class":670},[480,1637,674],{"class":595},[480,1639,1577],{"class":599},[480,1641,488],{"class":595},[480,1643,1259],{"class":599},[480,1645,685],{"class":595},[480,1647,1648,1650,1652,1654,1656,1658],{"class":587,"line":667},[480,1649,772],{"class":670},[480,1651,674],{"class":595},[480,1653,1577],{"class":599},[480,1655,488],{"class":595},[480,1657,1279],{"class":599},[480,1659,685],{"class":595},[480,1661,1662,1664,1666,1668,1670],{"class":587,"line":688},[480,1663,705],{"class":670},[480,1665,674],{"class":595},[480,1667,1572],{"class":599},[480,1669,488],{"class":595},[480,1671,1672],{"class":599},"member_id\n",[480,1674,1675,1678],{"class":587,"line":702},[480,1676,1677],{"class":595},"  }",[480,1679,926],{"class":670},[480,1681,1682,1684],{"class":587,"line":719},[480,1683,1059],{"class":595},[480,1685,926],{"class":599},[470,1687,1688,1689,488],{},"Удаляется через ",[474,1690,1691],{},"$b24.removeCallbackRefreshAuth()",[1063,1693,1695],{"id":1694},"custom-refresh-logic","Кастомная логика обновления",[470,1697,1698,1699,1704,1705,674],{},"Если ваше приложение получает refresh-токены из отдельного сервиса (например, централизованного брокера токенов), передайте функцию ",[474,1700,1701],{"className":476,"language":477,"style":478},[480,1702,1703],{"class":482},"CustomRefreshAuth",". SDK вызовет её вместо обращения к ",[474,1706,538],{},[470,1708,1546],{},[578,1710,1712],{"className":580,"code":1711,"language":582,"meta":478,"style":478},"import type { HandlerRefreshAuth } from '@bitrix24\u002Fb24jssdk'\n\n$b24.setCustomRefreshAuth(async (): Promise\u003CHandlerRefreshAuth> => {\n  const fresh = await tokenBroker.fetch()\n  return {\n    access_token: fresh.accessToken,\n    refresh_token: fresh.refreshToken,\n    expires: fresh.expires,\n    expires_in: fresh.expiresIn,\n    client_endpoint: fresh.clientEndpoint,\n    server_endpoint: fresh.serverEndpoint,\n    member_id: fresh.memberId,\n    scope: fresh.scope,\n    status: fresh.status,\n    domain: fresh.domain\n  }\n})\n",[474,1713,1714,1736,1740,1770,1794,1801,1816,1831,1845,1860,1875,1890,1905,1919,1933,1946,1950],{"__ignoreMap":478},[480,1715,1716,1718,1721,1723,1726,1728,1730,1732,1734],{"class":587,"line":588},[480,1717,592],{"class":591},[480,1719,1720],{"class":591}," type",[480,1722,596],{"class":595},[480,1724,1725],{"class":599}," HandlerRefreshAuth",[480,1727,609],{"class":595},[480,1729,612],{"class":591},[480,1731,615],{"class":595},[480,1733,619],{"class":618},[480,1735,622],{"class":595},[480,1737,1738],{"class":587,"line":625},[480,1739,629],{"emptyLinePlaceholder":628},[480,1741,1742,1744,1746,1749,1751,1753,1756,1759,1761,1764,1766,1768],{"class":587,"line":632},[480,1743,1556],{"class":599},[480,1745,488],{"class":595},[480,1747,1748],{"class":648},"setCustomRefreshAuth",[480,1750,969],{"class":599},[480,1752,1566],{"class":635},[480,1754,1755],{"class":595}," ():",[480,1757,1758],{"class":482}," Promise",[480,1760,1124],{"class":595},[480,1762,1763],{"class":482},"HandlerRefreshAuth",[480,1765,1130],{"class":595},[480,1767,1583],{"class":635},[480,1769,1586],{"class":595},[480,1771,1772,1775,1778,1781,1783,1786,1788,1791],{"class":587,"line":654},[480,1773,1774],{"class":635},"  const",[480,1776,1777],{"class":599}," fresh",[480,1779,1780],{"class":595}," =",[480,1782,944],{"class":591},[480,1784,1785],{"class":599}," tokenBroker",[480,1787,488],{"class":595},[480,1789,1790],{"class":648},"fetch",[480,1792,1793],{"class":670},"()\n",[480,1795,1796,1799],{"class":587,"line":661},[480,1797,1798],{"class":591},"  return",[480,1800,1586],{"class":595},[480,1802,1803,1806,1808,1810,1812,1814],{"class":587,"line":667},[480,1804,1805],{"class":670},"    access_token",[480,1807,674],{"class":595},[480,1809,1777],{"class":599},[480,1811,488],{"class":595},[480,1813,1224],{"class":599},[480,1815,685],{"class":595},[480,1817,1818,1821,1823,1825,1827,1829],{"class":587,"line":688},[480,1819,1820],{"class":670},"    refresh_token",[480,1822,674],{"class":595},[480,1824,1777],{"class":599},[480,1826,488],{"class":595},[480,1828,1240],{"class":599},[480,1830,685],{"class":595},[480,1832,1833,1835,1837,1839,1841,1843],{"class":587,"line":702},[480,1834,756],{"class":670},[480,1836,674],{"class":595},[480,1838,1777],{"class":599},[480,1840,488],{"class":595},[480,1842,1259],{"class":599},[480,1844,685],{"class":595},[480,1846,1847,1850,1852,1854,1856,1858],{"class":587,"line":719},[480,1848,1849],{"class":670},"    expires_in",[480,1851,674],{"class":595},[480,1853,1777],{"class":599},[480,1855,488],{"class":595},[480,1857,1279],{"class":599},[480,1859,685],{"class":595},[480,1861,1862,1865,1867,1869,1871,1873],{"class":587,"line":736},[480,1863,1864],{"class":670},"    client_endpoint",[480,1866,674],{"class":595},[480,1868,1777],{"class":599},[480,1870,488],{"class":595},[480,1872,1332],{"class":599},[480,1874,685],{"class":595},[480,1876,1877,1880,1882,1884,1886,1888],{"class":587,"line":753},[480,1878,1879],{"class":670},"    server_endpoint",[480,1881,674],{"class":595},[480,1883,1777],{"class":599},[480,1885,488],{"class":595},[480,1887,1351],{"class":599},[480,1889,685],{"class":595},[480,1891,1892,1895,1897,1899,1901,1903],{"class":587,"line":769},[480,1893,1894],{"class":670},"    member_id",[480,1896,674],{"class":595},[480,1898,1777],{"class":599},[480,1900,488],{"class":595},[480,1902,1208],{"class":599},[480,1904,685],{"class":595},[480,1906,1907,1909,1911,1913,1915,1917],{"class":587,"line":785},[480,1908,788],{"class":670},[480,1910,674],{"class":595},[480,1912,1777],{"class":599},[480,1914,488],{"class":595},[480,1916,1295],{"class":599},[480,1918,685],{"class":595},[480,1920,1921,1923,1925,1927,1929,1931],{"class":587,"line":802},[480,1922,856],{"class":670},[480,1924,674],{"class":595},[480,1926,1777],{"class":599},[480,1928,488],{"class":595},[480,1930,1369],{"class":599},[480,1932,685],{"class":595},[480,1934,1935,1937,1939,1941,1943],{"class":587,"line":819},[480,1936,805],{"class":670},[480,1938,674],{"class":595},[480,1940,1777],{"class":599},[480,1942,488],{"class":595},[480,1944,1945],{"class":599},"domain\n",[480,1947,1948],{"class":587,"line":836},[480,1949,920],{"class":595},[480,1951,1952,1954],{"class":587,"line":853},[480,1953,1059],{"class":595},[480,1955,926],{"class":599},[470,1957,1688,1958,488],{},[474,1959,1960],{},"$b24.removeCustomRefreshAuth()",[518,1962,1964],{"id":1963},"methods","Методы",[1063,1966,1968,478],{"id":1967},"initisadmin",[474,1969,1970],{},"initIsAdmin",[578,1972,1974],{"className":476,"code":1973,"language":477,"meta":478,"style":478},"initIsAdmin(requestId?: string): Promise\u003Cvoid>\n",[474,1975,1976],{"__ignoreMap":478},[480,1977,1978,1980,1982,1985,1987,1990,1993,1995,1997,2000],{"class":587,"line":588},[480,1979,1970],{"class":482},[480,1981,969],{"class":595},[480,1983,1984],{"class":1083},"requestId",[480,1986,1111],{"class":595},[480,1988,1989],{"class":482}," string",[480,1991,1992],{"class":595},"):",[480,1994,1758],{"class":482},[480,1996,1124],{"class":595},[480,1998,1999],{"class":482},"void",[480,2001,2002],{"class":595},">\n",[470,2004,2005,2006,2009,2010,2016,2017,2034],{},"Один раз вызывает REST-метод ",[474,2007,2008],{},"profile"," и кэширует, есть ли у аутентифицированного пользователя права администратора. Требуется перед чтением ",[503,2011,2013],{"href":2012},"#getter-auth",[474,2014,2015],{},"auth.isAdmin"," — геттер выбрасывает ",[474,2018,2019,2022,2024,2026,2029,2031],{"className":476,"language":477,"style":478},[480,2020,2021],{"class":482},"Error",[480,2023,969],{"class":599},[480,2025,682],{"class":595},[480,2027,2028],{"class":618},"isAdmin not init. You need call B24OAuth::initIsAdmin().",[480,2030,682],{"class":595},[480,2032,2033],{"class":599},")"," при слишком раннем вызове.",[470,2036,1546],{},[578,2038,2040],{"className":580,"code":2039,"language":582,"meta":478,"style":478},"await $b24.initIsAdmin('boot:isAdmin')\nif ($b24.auth.isAdmin) {\n  \u002F\u002F ...\n}\n",[474,2041,2042,2064,2084,2089],{"__ignoreMap":478},[480,2043,2044,2047,2049,2051,2053,2055,2057,2060,2062],{"class":587,"line":588},[480,2045,2046],{"class":591},"await",[480,2048,947],{"class":599},[480,2050,488],{"class":595},[480,2052,1970],{"class":648},[480,2054,969],{"class":599},[480,2056,682],{"class":595},[480,2058,2059],{"class":618},"boot:isAdmin",[480,2061,682],{"class":595},[480,2063,926],{"class":599},[480,2065,2066,2069,2072,2074,2077,2079,2082],{"class":587,"line":625},[480,2067,2068],{"class":591},"if",[480,2070,2071],{"class":599}," ($b24",[480,2073,488],{"class":595},[480,2075,2076],{"class":599},"auth",[480,2078,488],{"class":595},[480,2080,2081],{"class":599},"isAdmin) ",[480,2083,972],{"class":595},[480,2085,2086],{"class":587,"line":632},[480,2087,2088],{"class":657},"  \u002F\u002F ...\n",[480,2090,2091],{"class":587,"line":654},[480,2092,2093],{"class":595},"}\n",[1063,2095,2097,2099,2100,478],{"id":2096},"setcallbackrefreshauth-removecallbackrefreshauth",[474,2098,1561],{}," \u002F ",[474,2101,2102],{},"removeCallbackRefreshAuth",[578,2104,2106],{"className":476,"code":2105,"language":477,"meta":478,"style":478},"setCallbackRefreshAuth(cb: CallbackRefreshAuth): void\nremoveCallbackRefreshAuth(): void\n",[474,2107,2108,2127],{"__ignoreMap":478},[480,2109,2110,2112,2114,2117,2119,2122,2124],{"class":587,"line":588},[480,2111,1561],{"class":482},[480,2113,969],{"class":595},[480,2115,2116],{"class":1083},"cb",[480,2118,674],{"class":595},[480,2120,2121],{"class":482}," CallbackRefreshAuth",[480,2123,1992],{"class":595},[480,2125,2126],{"class":482}," void\n",[480,2128,2129,2131,2134],{"class":587,"line":625},[480,2130,2102],{"class":482},[480,2132,2133],{"class":595},"():",[480,2135,2126],{"class":482},[470,2137,2138,2139,488],{},"Регистрирует \u002F снимает callback, выполняемый после каждого успешного обновления. См. ",[503,2140,1540],{"href":2141},"#persisting-refreshed-tokens",[1063,2143,2145,2099,2147,478],{"id":2144},"setcustomrefreshauth-removecustomrefreshauth",[474,2146,1748],{},[474,2148,2149],{},"removeCustomRefreshAuth",[578,2151,2153],{"className":476,"code":2152,"language":477,"meta":478,"style":478},"setCustomRefreshAuth(cb: CustomRefreshAuth): void\nremoveCustomRefreshAuth(): void\n",[474,2154,2155,2172],{"__ignoreMap":478},[480,2156,2157,2159,2161,2163,2165,2168,2170],{"class":587,"line":588},[480,2158,1748],{"class":482},[480,2160,969],{"class":595},[480,2162,2116],{"class":1083},[480,2164,674],{"class":595},[480,2166,2167],{"class":482}," CustomRefreshAuth",[480,2169,1992],{"class":595},[480,2171,2126],{"class":482},[480,2173,2174,2176,2178],{"class":587,"line":625},[480,2175,2149],{"class":482},[480,2177,2133],{"class":595},[480,2179,2126],{"class":482},[470,2181,2182,2183,488],{},"Регистрирует \u002F снимает кастомную реализацию обновления. См. ",[503,2184,1695],{"href":2185},"#custom-refresh-logic",[1063,2187,2189,478],{"id":2188},"offclientsidewarning",[474,2190,508],{},[578,2192,2194],{"className":476,"code":2193,"language":477,"meta":478,"style":478},"offClientSideWarning(): void\n",[474,2195,2196],{"__ignoreMap":478},[480,2197,2198,2200,2202],{"class":587,"line":588},[480,2199,508],{"class":482},[480,2201,2133],{"class":595},[480,2203,2126],{"class":482},[470,2205,2206,2207,2211],{},"Отключает runtime-предупреждение, возникающее при обнаружении ",[474,2208,2209],{"className":476,"language":477,"style":478},[480,2210,180],{"class":482}," в браузерном окружении. Используйте только когда вы проксируете OAuth-токены через серверную обёртку.",[1063,2213,2215,2099,2218,478],{"id":2214},"gettargetorigin-gettargetoriginwithpath",[474,2216,2217],{},"getTargetOrigin",[474,2219,2220],{},"getTargetOriginWithPath",[578,2222,2224],{"className":476,"code":2223,"language":477,"meta":478,"style":478},"getTargetOrigin(): string\ngetTargetOriginWithPath(): Map\u003CApiVersion, string>\n",[474,2225,2226,2235],{"__ignoreMap":478},[480,2227,2228,2230,2232],{"class":587,"line":588},[480,2229,2217],{"class":482},[480,2231,2133],{"class":595},[480,2233,2234],{"class":482}," string\n",[480,2236,2237,2239,2241,2244,2246,2249,2251,2253],{"class":587,"line":625},[480,2238,2220],{"class":482},[480,2240,2133],{"class":595},[480,2242,2243],{"class":482}," Map",[480,2245,1124],{"class":595},[480,2247,2248],{"class":482},"ApiVersion",[480,2250,603],{"class":595},[480,2252,1989],{"class":482},[480,2254,2002],{"class":595},[470,2256,2257,2258,2261,2262,488],{},"Возвращают origin портала (например, ",[474,2259,2260],{},"https:\u002F\u002Fxxx.bitrix24.com",") и REST-endpoint-ы для каждой версии, выведенные из ",[474,2263,1332],{},[1063,2265,2267,2099,2270,2099,2273,2099,2276,2099,2279,2099,2282,478],{"id":2266},"gethttpclient-sethttpclient-setrestrictionmanagerparams-getlogger-setlogger-destroy",[474,2268,2269],{},"getHttpClient",[474,2271,2272],{},"setHttpClient",[474,2274,2275],{},"setRestrictionManagerParams",[474,2277,2278],{},"getLogger",[474,2280,2281],{},"setLogger",[474,2283,2284],{},"destroy",[470,2286,2287,2288,2292,2293,1468,2297,2301],{},"Унаследованы от ",[474,2289,2290],{"className":476,"language":477,"style":478},[480,2291,547],{"class":482}," — та же структура, что и у ",[474,2294,2295],{"className":476,"language":477,"style":478},[480,2296,117],{"class":482},[474,2298,2299],{"className":476,"language":477,"style":478},[480,2300,133],{"class":482},". См.:",[490,2303,2304,2312],{},[493,2305,2306,2309,2310,488],{},[503,2307,288],{"href":2308},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Flimiters\u002F"," — ",[474,2311,2275],{},[493,2313,2314,2309,2318,2099,2320,488],{},[503,2315,2317],{"href":2316},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger\u002F","Логгер",[474,2319,2278],{},[474,2321,2281],{},[518,2323,2325],{"id":2324},"getters","Геттеры",[1063,2327,2328,478],{"id":2076},[474,2329,2076],{},[470,2331,2332,2333,2340,2341,674],{},"Возвращает экземпляр ",[503,2334,2337],{"href":2335,"rel":2336},"https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Foauth\u002Fauth.ts",[533],[474,2338,2339],{},"AuthOAuthManager",", который реализует ",[503,2342,2345],{"href":2343,"rel":2344},"https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Ftypes\u002Fauth.ts",[533],[474,2346,2347],{"className":476,"language":477,"style":478},[480,2348,2349],{"class":482},"AuthActions",[490,2351,2352,2369,2380,2404],{},[493,2353,2354,2356,2357,2362,2363,2368],{},[474,2355,1467],{}," — возвращает текущий ",[474,2358,2359],{"className":476,"language":477,"style":478},[480,2360,2361],{"class":482},"AuthData"," или ",[474,2364,2365],{"className":476,"language":477,"style":478},[480,2366,2367],{"class":482},"false",", если access token истёк (следующий REST-вызов вызовет автоматическое обновление).",[493,2370,2371,2374,2375,2379],{},[474,2372,2373],{},"refreshAuth()"," — ручное обновление; выбрасывает ",[474,2376,2377],{"className":476,"language":477,"style":478},[480,2378,1521],{"class":482}," при неудаче.",[493,2381,2382,2385,2386,488],{},[474,2383,2384],{},"getUniq(prefix: string)"," — возвращает ",[474,2387,2388,2390,2393,2395,2398,2400,2402],{"className":476,"language":477,"style":478},[480,2389,1124],{"class":595},[480,2391,2392],{"class":482},"prefix",[480,2394,1130],{"class":595},[480,2396,2397],{"class":482},"_",[480,2399,1124],{"class":595},[480,2401,1208],{"class":482},[480,2403,1130],{"class":595},[493,2405,2406,2409,2410,488],{},[474,2407,2408],{},"isAdmin"," — требует предварительного вызова ",[474,2411,2412],{},"initIsAdmin()",[1063,2414,2416,478],{"id":2415},"isinit",[474,2417,2418],{},"isInit",[578,2420,2422],{"className":476,"code":2421,"language":477,"meta":478,"style":478},"get isInit(): boolean\n",[474,2423,2424],{"__ignoreMap":478},[480,2425,2426,2429,2432,2434],{"class":587,"line":588},[480,2427,2428],{"class":482},"get",[480,2430,2431],{"class":482}," isInit",[480,2433,2133],{"class":595},[480,2435,2436],{"class":482}," boolean\n",[470,2438,2439,2440,2445],{},"Всегда ",[474,2441,2442],{"className":476,"language":477,"style":478},[480,2443,2444],{"class":482},"true"," сразу после создания экземпляра.",[518,2447,375],{"id":2448},"error-handling",[470,2450,2451],{},"\u002F\u002F @check-ignore: top-level return in error-handling illustration",[578,2453,2455],{"className":580,"code":2454,"language":582,"meta":478,"style":478},"import { B24OAuth, RefreshTokenError } from '@bitrix24\u002Fb24jssdk'\n\ntry {\n  const response = await $b24.actions.v3.call.make({\n    method: 'tasks.task.get',\n    params: { id: 1, select: ['id', 'title'] },\n    requestId: 'task-get-1'\n  })\n  if (!response.isSuccess) {\n    \u002F\u002F Обработка ошибок уровня REST\n    console.error(response.getErrorMessages())\n  }\n} catch (error) {\n  if (error instanceof RefreshTokenError) {\n    \u002F\u002F Refresh token мёртв — переавторизуйте приложение\n    console.error('OAuth refresh failed:', error.message)\n    return\n  }\n  throw error\n}\n",[474,2456,2457,2480,2484,2491,2525,2541,2585,2599,2605,2629,2634,2656,2660,2672,2689,2694,2723,2728,2732,2740],{"__ignoreMap":478},[480,2458,2459,2461,2463,2465,2467,2470,2472,2474,2476,2478],{"class":587,"line":588},[480,2460,592],{"class":591},[480,2462,596],{"class":595},[480,2464,600],{"class":599},[480,2466,603],{"class":595},[480,2468,2469],{"class":599}," RefreshTokenError",[480,2471,609],{"class":595},[480,2473,612],{"class":591},[480,2475,615],{"class":595},[480,2477,619],{"class":618},[480,2479,622],{"class":595},[480,2481,2482],{"class":587,"line":625},[480,2483,629],{"emptyLinePlaceholder":628},[480,2485,2486,2489],{"class":587,"line":632},[480,2487,2488],{"class":591},"try",[480,2490,1586],{"class":595},[480,2492,2493,2495,2498,2500,2502,2504,2506,2508,2510,2513,2515,2517,2519,2521,2523],{"class":587,"line":654},[480,2494,1774],{"class":635},[480,2496,2497],{"class":599}," response",[480,2499,1780],{"class":595},[480,2501,944],{"class":591},[480,2503,947],{"class":599},[480,2505,488],{"class":595},[480,2507,91],{"class":599},[480,2509,488],{"class":595},[480,2511,2512],{"class":599},"v3",[480,2514,488],{"class":595},[480,2516,961],{"class":599},[480,2518,488],{"class":595},[480,2520,966],{"class":648},[480,2522,969],{"class":670},[480,2524,972],{"class":595},[480,2526,2527,2530,2532,2534,2537,2539],{"class":587,"line":661},[480,2528,2529],{"class":670},"    method",[480,2531,674],{"class":595},[480,2533,615],{"class":595},[480,2535,2536],{"class":618},"tasks.task.get",[480,2538,682],{"class":595},[480,2540,685],{"class":595},[480,2542,2543,2546,2548,2550,2553,2555,2557,2559,2561,2563,2565,2567,2570,2572,2574,2576,2579,2581,2583],{"class":587,"line":667},[480,2544,2545],{"class":670},"    params",[480,2547,674],{"class":595},[480,2549,596],{"class":595},[480,2551,2552],{"class":670}," id",[480,2554,674],{"class":595},[480,2556,697],{"class":696},[480,2558,603],{"class":595},[480,2560,1002],{"class":670},[480,2562,674],{"class":595},[480,2564,1007],{"class":670},[480,2566,682],{"class":595},[480,2568,2569],{"class":618},"id",[480,2571,682],{"class":595},[480,2573,603],{"class":595},[480,2575,615],{"class":595},[480,2577,2578],{"class":618},"title",[480,2580,682],{"class":595},[480,2582,1035],{"class":670},[480,2584,1038],{"class":595},[480,2586,2587,2590,2592,2594,2597],{"class":587,"line":688},[480,2588,2589],{"class":670},"    requestId",[480,2591,674],{"class":595},[480,2593,615],{"class":595},[480,2595,2596],{"class":618},"task-get-1",[480,2598,622],{"class":595},[480,2600,2601,2603],{"class":587,"line":702},[480,2602,1677],{"class":595},[480,2604,926],{"class":670},[480,2606,2607,2610,2613,2616,2619,2621,2624,2627],{"class":587,"line":719},[480,2608,2609],{"class":591},"  if",[480,2611,2612],{"class":670}," (",[480,2614,2615],{"class":595},"!",[480,2617,2618],{"class":599},"response",[480,2620,488],{"class":595},[480,2622,2623],{"class":599},"isSuccess",[480,2625,2626],{"class":670},") ",[480,2628,972],{"class":595},[480,2630,2631],{"class":587,"line":736},[480,2632,2633],{"class":657},"    \u002F\u002F Обработка ошибок уровня REST\n",[480,2635,2636,2639,2641,2644,2646,2648,2650,2653],{"class":587,"line":753},[480,2637,2638],{"class":599},"    console",[480,2640,488],{"class":595},[480,2642,2643],{"class":648},"error",[480,2645,969],{"class":670},[480,2647,2618],{"class":599},[480,2649,488],{"class":595},[480,2651,2652],{"class":648},"getErrorMessages",[480,2654,2655],{"class":670},"())\n",[480,2657,2658],{"class":587,"line":769},[480,2659,920],{"class":595},[480,2661,2662,2664,2667,2670],{"class":587,"line":785},[480,2663,1059],{"class":595},[480,2665,2666],{"class":591}," catch",[480,2668,2669],{"class":599}," (error) ",[480,2671,972],{"class":595},[480,2673,2674,2676,2678,2680,2683,2685,2687],{"class":587,"line":802},[480,2675,2609],{"class":591},[480,2677,2612],{"class":670},[480,2679,2643],{"class":599},[480,2681,2682],{"class":595}," instanceof",[480,2684,2469],{"class":482},[480,2686,2626],{"class":670},[480,2688,972],{"class":595},[480,2690,2691],{"class":587,"line":819},[480,2692,2693],{"class":657},"    \u002F\u002F Refresh token мёртв — переавторизуйте приложение\n",[480,2695,2696,2698,2700,2702,2704,2706,2709,2711,2713,2716,2718,2721],{"class":587,"line":836},[480,2697,2638],{"class":599},[480,2699,488],{"class":595},[480,2701,2643],{"class":648},[480,2703,969],{"class":670},[480,2705,682],{"class":595},[480,2707,2708],{"class":618},"OAuth refresh failed:",[480,2710,682],{"class":595},[480,2712,603],{"class":595},[480,2714,2715],{"class":599}," error",[480,2717,488],{"class":595},[480,2719,2720],{"class":599},"message",[480,2722,926],{"class":670},[480,2724,2725],{"class":587,"line":853},[480,2726,2727],{"class":591},"    return\n",[480,2729,2730],{"class":587,"line":868},[480,2731,920],{"class":595},[480,2733,2734,2737],{"class":587,"line":874},[480,2735,2736],{"class":591},"  throw",[480,2738,2739],{"class":599}," error\n",[480,2741,2742],{"class":587,"line":880},[480,2743,2093],{"class":595},[518,2745,2747],{"id":2746},"faq","FAQ",[2749,2750,2751,2774,2783,2792],"accordion",{},[2752,2753,2755],"accordion-item",{"label":2754},"Где взять начальную пару токенов?",[470,2756,2757,2758,2768,2769,2773],{},"Bitrix24 отправляет их при установке вашего локального приложения и повторно на событиях ",[503,2759,2762,2099,2765],{"href":2760,"rel":2761},"https:\u002F\u002Fapidocs.bitrix24.ru\u002Fapi-reference\u002Fevents\u002Findex.html",[533],[474,2763,2764],{},"ONAPPINSTALL",[474,2766,2767],{},"ONAPPUPDATE",". Сохраняйте их и передавайте в ",[474,2770,2771],{"className":476,"language":477,"style":478},[480,2772,180],{"class":482}," при каждом старте сервера.",[2752,2775,2777],{"label":2776},"Почему `expires` в секундах, а не в миллисекундах?",[470,2778,2779,2780,488],{},"Bitrix24 возвращает Unix-таймстампы в секундах. SDK конвертирует внутри; вы должны передавать секунды в ",[474,2781,2782],{},"B24OAuthParams.expires",[2752,2784,2786],{"label":2785},"Можно ли использовать один экземпляр B24OAuth между запросами?",[470,2787,2788,2789,2791],{},"Да — и нужно. Совместное использование сохраняет состояние лимитера и access token в памяти согласованными. Сохраняйте обновлённую пару токенов через ",[474,2790,1561],{},", чтобы после перезапуска использовались последние токены.",[2752,2793,2795],{"label":2794},"А как насчёт методов только для чтения, которым не нужны права администратора?",[470,2796,2797,2798,2800,2801,2803],{},"Вы можете пропустить ",[474,2799,2412],{},", если ваш код никогда не читает ",[474,2802,2015],{},". Сами REST-вызовы от него не зависят.",[2805,2806,2807],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":478,"searchDepth":625,"depth":625,"links":2809},[2810,2811,2818,2822,2834,2838,2839],{"id":520,"depth":625,"text":521},{"id":575,"depth":625,"text":576,"children":2812},[2813,2814,2816],{"id":1065,"depth":632,"text":1066},{"id":1140,"depth":632,"text":2815},"Поля B24OAuthParams",{"id":1385,"depth":632,"text":2817},"Поля B24OAuthSecret",{"id":1442,"depth":625,"text":1443,"children":2819},[2820,2821],{"id":1539,"depth":632,"text":1540},{"id":1694,"depth":632,"text":1695},{"id":1963,"depth":625,"text":1964,"children":2823},[2824,2825,2827,2829,2830,2832],{"id":1967,"depth":632,"text":1970},{"id":2096,"depth":632,"text":2826},"setCallbackRefreshAuth \u002F removeCallbackRefreshAuth",{"id":2144,"depth":632,"text":2828},"setCustomRefreshAuth \u002F removeCustomRefreshAuth",{"id":2188,"depth":632,"text":508},{"id":2214,"depth":632,"text":2831},"getTargetOrigin \u002F getTargetOriginWithPath",{"id":2266,"depth":632,"text":2833},"getHttpClient \u002F setHttpClient \u002F setRestrictionManagerParams \u002F getLogger \u002F setLogger \u002F destroy",{"id":2324,"depth":625,"text":2325,"children":2835},[2836,2837],{"id":2076,"depth":632,"text":2076},{"id":2415,"depth":632,"text":2418},{"id":2448,"depth":625,"text":375},{"id":2746,"depth":625,"text":2747},"md",[2842,2845,2846,2847],{"label":180,"iconName":2843,"to":2844},"GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Foauth\u002Fb24.ts",{"label":2339,"iconName":2843,"to":2335},{"label":1521,"iconName":2843,"to":1517},{"label":327,"iconName":2843,"to":551},{},{"title":180},{"title":461,"description":183},"NtrWEjUDFJ49StpMA_VotlLujZsrV32oFFg2z9kK-FE",{"data":2853,"body":2854},{},{"type":2855,"children":2856},"root",[2857],{"type":2858,"tag":470,"props":2859,"children":2860},"element",{},[2861],{"type":2862,"value":183},"text",1783080224141]