Condo Bridge – это JS-библиотека, позволяющая интерфейсу вашего мини-приложения взаимодействовать с основным интерфейсом приложения.
Установка
Чтобы установить библиотеку, просто выполните следующую команду в соответствии с вашим пакетным менеджером:
npm
yarn
pnpm
bashnpm i @open-condo/bridge
Пример использования
Вы можете использовать bridge как внутри вашего frontend-фреймворка, так и напрямую браузерном окружении:
JS
<script/>
typescriptimport bridge from '@open-condo/bridge' // Send event bridge.send('<event-name>') // Send event with args bridge.send('<event-name>', { someArg: 'some value' }) // Send event and process response bridge.send('<event-name>', { someArg: 'some value' }) .then((response) => { // successful state processing }).catch((error) => { // error processing })
API Reference
bridge.send(method[, params])
Отправляет главному клиенту метод для запуска с его параметрами и возвращает
Promise с результатами его выполнения.Если выполнение метода прошло успешно, то в
Promise будет содержаться возвращаемое значение метода.
Если же в процессе выполнения возникла ошибка, то Promise будет отклонен, а саму ошибку можно будет найти в блоке catch.Параметры метода:
method(обязательный) Имя вызываемого методаparams(опциональный) Объект с аргументами метода
Пример использования:
typescript// Sending event to client bridge .send('CondoWebAppResizeWindow', { height: 800 }) .then(data => { // Handling response console.log(data.height) }) .catch(error => { // Handling an error })
Поскольку
bridge.send возвращает Promise, вы также можете использовать паттерн async / await для обработки событий:typescripttry { const response = await bridge.send('CondoWebAppResizeWindow', { height: 800 }) // Handling response console.log(response.height) } catch (err) { // Handling error }
bridge.subscribe(listener)
Подписывает обработчик на все входящие события и ответы от главного клиента.
При вызове метода "<method-name>" в случае ошибки в обработчик поступит событие с типом "<method-name>Error>",
а в случае успешного выполнения - с типом "<method-name>Result".
Это общее поведение для всех методов Condo Bridge.
Параметры метода:
listener(обязательный) Функция, обрабатывающая поступающие события.
Пример использования:
typescript// Subscribing to receive events bridge.subscribe((event) => { const { type, data } = event if (type === 'CondoWebAppResizeWindowResult') { // Processing event result console.log(data.height) } else if (type === 'CondoWebAppResizeWindowError') { // Processing event error const { errorType, errorMessage } = data } })
bridge.unsubscribe(listener)
Убирает обработчик событий из списка обработчиков.
Параметры метода:
listener(обязательный) Функция, обрабатывающая поступающие события.
Пример использования:
typescriptimport bridge, { type CondoBridgeSubscriptionListener } from '@open-condo/bridge' const myListener: CondoBridgeSubscriptionListener = (event) => { logger.info(event) } // Subscribing bridge.subscribe(myListener) // Unsubscribing bridge.unsubscribe(myListener)
bridge.supports(method)
Проверяет, поддерживает ли текущий клиент данный метод.
Параметры метода:
method(обязательный) метод Condo Bridge
Пример использования:
typescript// Checking if event is available if (bridge.supports('CondoWebAppResizeWindow')) { // Then sending actual event bridge.send('CondoWebAppResizeWindow', { height: document.body.scrollHeight }) }
Типы ошибок
Каждая ошибка в Condo Bridge имеет следующую структуру:
typescripttype ClientErrorResponseData<Reason extends ErrorReason> = { errorType: 'client', errorReason: Reason errorCode: ErrorCode<Reason>, errorMessage: string }
Прочитать подробную информацию об ошибке можно в поле
errorMessage, а обрабатывать ошибку можно по ее коду / причине:| Тип ошибки | Код ошибки | Описание ошибки |
|---|---|---|
| ACCESS_DENIED | 0 | У вашего приложения нет права на вызов данного метода |
| UNKNOWN_ERROR | 1 | Что-то пошло не так на стороне Condo |
| UNKNOWN_METHOD | 2 | Приложение попыталось вызвать неизвестный или неподдерживаемый на платформе метод |
| INVALID_PARAMETERS | 3 | Неверные параметры метода |
| HANDLER_ERROR | 4 | В процессе вызова метода была выкинута ошибка |
| TIMEOUT_REACHED | 5 | Ответ от клиента не был получен в течение заданного времени |