Я написал свой TON Wallet connector
Меня зовут Иван, я фуллстек-разработчик, и это мой первый пост на VC. В последнее время львиная доля проектов, с которыми мне приходилось работать - финтех-продукты в экосистеме TON/Telegram. Почти всегда приходилось использовать готовые решения для интеграции с TON-совместимыми кошельками пользователей, что и вылилось в основную боль, особенно на фронтенде - от регулярных фризов и залипаний UI (ну и .. собственно - UX), до разросшегося бандла из-за одной библиотеки и непредсказуемого даже мне, как разработчику, поведения.
После множества попыток оптимизировать всё это добро, множества патчей, я сам для себя принял решение - написать свой инструмент, который был бы давал качественный и гибкий DX и предсказуемый UX.
Так появился TBridge или @tbridge/sdk.
Что это вообще за велосипед? - спросите вы
Это клиентский SDK (для браузера): коннектор TON-совместимых кошельков + возможность использовать минимально необходимый UI (выбор кошелька, подключение, транзакции, события). Пара пунктов, которые я хотел бы выделить:
- без привязки к UI-библиотеке (React, Vue, Svelte или любой другой) - чистый Typescript (на выходе само собой - js), который можно воткнуть куда угодно, хоть в голый HTML. Короче говоря - framework-agnostic;
- адаптивное, но предсказуемое поведение в Telegram мини-аппах, in-app браузерах, веб-браузерах и на десктопе и на мобильных;
- опциональный UI "из коробки";
- возможность гибко настраивать на клиенте: что уходит в storage, какой storage, какие бриджи кошельков можно, а какие нельзя и как парсится этот реестр)
Как устроено (в двух словах)
- Discovery - список кошельков из реестра (по умолчанию официальный от TON, но можно свой).
- HTTP-bridge - SSE+POST encrypted message (NaCl box), как принятно в протоколе.
- JS-bridge - если кошелек встроен на страницу/хост (injected).
- UI - модалка выбора кошелька, QR для подключения, bottom sheet подтверждения операции в кошельке (если вдруг не удалось выполнить авторедирект, например, если сам кошелек на другом устройстве или не установлен вовсе); само собой - светлая и темная темы и i18n (EN/RU).
- Всего две зависимости: QR и Tweetnacl (крипто), без "комбайна".
Минимальный пример
Подключение
Честно про безопасность
Браузерный коннектор не может быть безопасней своего хоста (origin страницы). Если на сайте XXS - сессию можно увести, как и у любого другого клиентского SDK. Шифрование storage в TBridge - это защита на слое хранения, а не замена CSP и нормальной гигиены фронта.
Запросы с SDK ходят строго по маршрутам, требуемым в протоколе: реестр кошельков и bridgeURL, и это не "скрытый телеметрийный канал", а рабочая модель подключения.
Для кого
- Команды на TON и/или Telegram mini-app, которым нужен свой UI/UX и контроль над клиентом.
- Продукты, в которые нельзя тащить тяжелый UI-кит и кучу бесполезного кода под один фреймворк.
- Для тех, кто хочет читать и форкать Typescript-пакет, а не размазанный монорепозиторий.
Ссылки
Telegram Mini-App (SDK Demo): https://t.me/t_sdkbot
Спасибо за уделенное время! Присылайте багрепорты - на v0.3.x это особенно важно)