💬 Документация
Написание документации по обновлению потребует какого-то времени, поэтому в ближайшее время её ждать не стоит. Тем не менее, я верю в вас, вы быстро поймёте, что да как устроено. Тем более, что я скорее выпилил ненужный код, нежели чем добавил какой-то новый.
⭐️ @telegram-apps/types@2.0.0
Как уже и было упомянуто раннее, библиотека теперь содержит лишь типы, специфичные для самой платформы. Типы описаны так, как изначально задуманы разработчиками Telegram.
⭐️ @telegram-apps/transformers@2.0.0
Теперь библиотека в значительной мере использует другую — valibot. Пакет предоставляет набор функций для работы с самыми распространенными типами данных в Telegram Mini Apps.
⭐️ @telegram-apps/init-data-node@2.0.0
Ввиду того, что типы у нас теперь по умолчанию в snake case, тут тоже был сделан major release. Функции возвращают и принимают объекты в нотации snake case.
⭐️ @telegram-apps/bridge@2.0.0
Удаленные функции
В связи с переходом на mitt и переиспользованием его кода, я отказался от функций subscribe и unsubscribe в пользу on и off. Теперь для того, чтобы подписаться на все события, необходимо использовать код такого формата:
import { on } from '@telegram-apps/bridge';
on('*', event => {
if (event[0] === 'theme_changed') {
const { theme_params } = event[1];
// ..
};
});
Из библиотеки также была удалена функция defineEventHandlers. Теперь нет необходимости вызывать её явно, можно сразу использовать on.
Переменная $targetOrigin была переименована в targetOrigin, а из экспорта пропала переменная $debug. Теперь для установки debug-режима используется функция setDebug.
Улучшенная функция mockTelegramEnv
Функция mockTelegramEnv была значительно улучшена. Теперь она позволяет не только задать параметры запуска в среде, но и задать кастомную обработку вызываемых методов Telegram Mini Apps. Теперь вы сами решаете, как реагировать на методы, вызываемые приложением.
import { mockTelegramEnv, emitEvent } from '@telegram-apps/bridge';
mockTelegramEnv({
launchParams: { ... },
onEvent(event) {
if (event[0] === 'web_app_request_theme') {
emitEvent('theme_changed', { theme_params: { ... } })
}
}
})
Изменения в isTMA
Теперь по умолчанию функция isTMA использует простую проверку. Таким образом, вы не можете вызвать код isTMA('simple'), но можете вызвать isTMA() или await isTMA('complete').
Напомню, что под простой проверкой подразумевается попытка извлечь параметры запуска из текущей среды. Сложная заключается в вызове метода Telegram Mini Apps и ожидании ответа. Таким образом, вторая проверка более надежная, но может быть излишней.
Прочие изменения
Функция retrieveLaunchParams была немного упрощена и теперь позволяет извлекать параметры запуска как в snake case, так и camel case нотациях.
В библиотеке мы ушли от класса TypedError в пользу отдельных классов под каждую ошибку.
⭐️ @telegram-apps/sdk@3.0.0
В этом релизе я больше поработал над QOL-изменениями, дабы упростить поддержку библиотеки, поэтому качественных изменений в данном контексте не так много.
Про sendData
Функция получила дополнительную проверку на inline-режим. Если приложение открыто вне inline-режима, isAvailable вернет false.
Про themeParams и miniApp
Теперь оба этих компонента монтируются асинхронно. Как выяснилось, предыдущая реализация themeParams.mount() была не совсем корректной.
Учтите, что miniApp.mount() под капотом монтирует themeParams, поэтому нет нужды вызывать themeParams.mount(), когда вы уже вызвали miniApp.mount().
Прочие изменения
Как и в bridge, было добавлено множество кастомных ошибок. Помните, что SDK почти полностью экспортирует bridge, поэтому изменения, представленные в секции @telegram-apps/bridge, коснулись и этой библиотеки.
💬 Заключение
На этом пока что всё. Я мог что-то упустить, но прошу не карить меня за это. Учтите, что в обновлении могли быть допущены какие-то ошибки, поэтому как только обнаружите что-то странное, не стесняйтесь создать issue в
репозитории. Я рассмотрю его в более быстрой манере.
Комфортной разработки! 👋