{"id":23263159,"url":"https://github.com/wavesplatform/waves-browser-bus","last_synced_at":"2025-07-24T10:36:42.931Z","repository":{"id":34980982,"uuid":"139015826","full_name":"wavesplatform/waves-browser-bus","owner":"wavesplatform","description":null,"archived":false,"fork":false,"pushed_at":"2023-02-28T08:34:22.000Z","size":647,"stargazers_count":32,"open_issues_count":5,"forks_count":8,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-07-03T23:35:24.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wavesplatform.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-28T12:35:16.000Z","updated_at":"2023-09-24T09:22:23.000Z","dependencies_parsed_at":"2024-06-18T18:30:52.540Z","dependency_job_id":"d3a0f80b-55d9-46b4-85c6-eb8576e4ef51","html_url":"https://github.com/wavesplatform/waves-browser-bus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wavesplatform/waves-browser-bus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesplatform%2Fwaves-browser-bus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesplatform%2Fwaves-browser-bus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesplatform%2Fwaves-browser-bus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesplatform%2Fwaves-browser-bus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wavesplatform","download_url":"https://codeload.github.com/wavesplatform/waves-browser-bus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesplatform%2Fwaves-browser-bus/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266828731,"owners_count":23991220,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-19T14:15:02.606Z","updated_at":"2025-07-24T10:36:42.898Z","avatar_url":"https://github.com/wavesplatform.png","language":"TypeScript","readme":"# Browser Bus     \n\nБиблиотека для работы над текстовым протоколом.\nПозволяет реализовать связь например для:\n * двух различных окон браузера\n * окно браузера с iframe\n\n## Browser Bus API\n\nВ библиотеке содержится классы Bus, Adapter и WindowAdapter, кроме того есть конфигурирование \nуровня логирования.\nДля работы библиотеки должны быть 2 \nстороны между которыми можно отправлять сообщения любого формата.\nС каждой из этих сторон нужно создать по экземпляру класса Bus для отправки и получения\nзапросов и событий.\n\n## Bus\n\nПозволяет отправлять и подписываться на события. \n\nПринимает экземпляр класса Adapter отвечающий за реализацию протокола отправки сообщений \nи время ожидания ответа по умолчанию (в миллисекундах).\nВремя ответа не обязательный параметр и по умолчанию равен 5 секунд.\n\nПример связи iframe и родительского окна:\n\nНа стороне родительского окна:\n```javascript\n    import { Bus, WindowAdapter } from '@waves/waves-browser-bus';\n\n    const url = 'https://some-iframe-content-url.com';\n    const iframe = document.createElement('iframe');\n    \n    WindowAdapter.createSimpleWindowAdapter(iframe).then(adapter =\u003e {\n        const bus = new Bus(adapter);\n        \n        bus.once('ready', () =\u003e {\n            // Получено сообщение от iframe \n        });\n    });\n    iframe.src = url; // Предпочтительно присваивать url после вызова WindowAdapter.createSimpleWindowAdapter\n    document.body.appendChild(iframe);\n```\nНа стороне iframe:\n```javascript\n    import { Bus, WindowAdapter } from '@waves/waves-browser-bus';\n    WindowAdapter.createSimpleWindowAdapter().then(adapter =\u003e {\n        const bus = new Bus(adapter);\n        \n        bus.dispatchEvent('ready', null); // Отправили сообщение в родительское окно\n    });\n    \n```\n\n### dispatchEvent\n\nОтправляет событие. Все экземпляры Bus, с которыми установлена связь и есть подписка на это событие, получат это сообщение.\nВторым аргументом передаются данные для обработчиков. \nВезде, кроме IE, допустимы объекты, которые клонируются, а в IE – только строка. \n\n```javascript\n\nbus.dispatchEvent('some-event-name', jsonLikeData);\n\n```\n\n### request\n\nПараметры:\n+ name - метод запроса котоый вызовится на другом экземпляре Bus\n+ [data] - данные которые будут переданы в метод\n+ [timeout] - время ожидания ответа (default = 5000)\n\nЕсли за время `timeout` ответа не последует - будет сгенерирована ошибка по таймауту.\nЕсли другой экземпляр Bus не имеет обработчика с именем `name` будет сгенерирована ошибка \n(см. `registerRequestHandler`)\nЕсли во время выполнения метода произойдёт ошибка - она вернётся в Promise.reject.\n\nОтправляет запрос к другому экземпляру Bus.\n\n```javascript\n\nbus.request('some-event-name', jsonLikeData, 100).then(data =\u003e {\n    // data - ответ от Bus \n});\n\n```\n\n### on\nПозволяет подписаться на события из Bus.  \n\nПример:\n```javascript\n   bus.on('some-event', data =\u003e {\n        //data - данные пришедшие в событии  \n   });\n```\n\n\n### once\nПозволяет однократно подписаться на события из Bus.  \n\nПример:\n```javascript\n   bus.once('some-event', data =\u003e {\n        //data - данные пришедшие в событии  \n   });\n```\n\n### off\nПозволяет отписаться от событий другого Bus.\n\nПараметры:\n+ [eventName] - имя события. Если не передано отпишется от всех событий с переданным `handler`.  \n+ [handler] - обработчик событий. Если не передан - отпишется от всех обработчиков с данным `eventName`.\n\nЕсли параметры не переданы - отпишется от всех событий.\n\nПример:\n```javascript\n   bus.off('some-event', handler); // Отпишется от `some-event` с обработчиком `handler`\n   bus.off('some-event'); // Отпишется от всех обработчиков на имя `some-event`\n   bus.off(null, handler); // Отпишется во всех именах от обработчика `handler`\n   bus.off(); // Отпишется от всех событий\n```\n\n\n\n### registerRequestHandler\nМетод для обработки запроса из другого экземпляра bus.\n\nПараметры:\n+ name - имя метода который будет доступен для вызова из другого bus\n+ handler - обработчик который будет отвечать в другой bus\nЕсли обработчик возвращает `Promise`, то bus дождется окончания и отправит результат.\n\nПример:\n```javascript\n    // В коде c одним из bus (например в iframe)\n    bus.registerRequestHandler('get-random', () =\u003e Math.random());\n    \n    // В основном коде приложения\n    bus.request('get-random').then(num =\u003e {\n        // Получили ответ из окна в iframe\n    })\n\n    \n```\n\nили\n\n```javascript\n    // В коде c одним из bus (например в iframe)\n    bus.registerRequestHandler('get-random', () =\u003e Promise.resolve(Math.random()));\n    \n    // В основном коде приложения\n    bus.request('get-random').then(num =\u003e {\n        // Получили ответ из окна в iframe\n    })\n\n    \n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwavesplatform%2Fwaves-browser-bus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwavesplatform%2Fwaves-browser-bus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwavesplatform%2Fwaves-browser-bus/lists"}