Комментарии 2
Интересно, что вы отдельно не тащите платформу в общую фичу. В TMA я бы еще жестко разделял три вещи: client_hint, initData и источник первого входа. client_hint можно подделать, initData подтверждает Telegram, а first-touch нужен для аналитики. Если смешать эти слои, легко принять «открыли TMA» за подтвержденную атрибуцию. Особенно после оплаты: redirect или deep link лучше считать отдельным транспортным событием, а не новой сессией. Тогда общий код не размывает ни безопасность, ни воронку.
Согласен, это три разных слоя. X-Client у меня - client hint: web | mobile | telegram. Не для авторизации, только для некритичного поведения — в основном return URL после оплаты. initData использую на фронте для детекта mini app, но не как proof на api - логин общий, sms + jwt. First-touch отдельно пока не выделил; если пойду в атрибуцию, зафиксирую один раз при первом заходе, а не на redirect после оплаты. Redirect/deep link после оплаты - транспорт: ?intent= обрабатывается в wallet flow, query чистится, контекст в sessionStorage. Это не новая сессия.
Спасибо за уточнение)

Как я собрал на одном Angular коде: личный кабинет для сайта, Telegram Mini App, iOS и Android