Adding encrypted INCY links - #53
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
|
Hi @densds, the blocker on this PR just went away. INCY published an official browser build:
It keeps the same function names, the same wire format and the same -import { encryptLink } from '@densds/link-encoder'
+import { encryptLink } from '@incy/link-encoder/web'Some context: I asked INCY for a browser build on their feedback board (https://feedback.incy.cc/issues/cmt4zocxi003w4sam3txk9izj). They shipped it within the hour and asked whether someone could help land the Remnawave side. Happy to help and to test it on a live INCY deployment. If you would rather not touch this PR, just say so and I will open one, with credit to your work here. |
|
Hi @Pinkerton28, the dependencies have been updated, they now link to the official package from the INCY team, tested on my server, all functions work |
This comment was marked as resolved.
This comment was marked as resolved.
|
@densds nice, that was fast. Confirming from a live deployment: we shipped the same library today (1.2.0, |
|
Боюсь, что данная реализация не может принята. Конкретно этот PR затрагивает вещи/файлы, которые ему фактически не нужны, например включение обязательной подгрузки Telegram JS SDK. Для так называемых Template Variables, коим и являются Проблема вот в чем – Incy реализовал энкрипт через асинхронный WebCrypto, что накладывает мягко скажем некоторые ограничения. iOS/Safari очень плохо переваривает асинхронные клики, поэтому сам "движок по замене" асинхронным делать нельзя. Так что, даже не знаю... есть предложения? |
|
Есть вариант, у нас он уже крутится в проде. Движок оставляем синхронным, асинхронность просто убирается из клика. crypt1 считается один раз заранее, как только известен INCY_CRYPT1_LINK: () =>
incyCrypt.get(metaInfo.subscriptionUrl) ?? `incy://add/${metaInfo.subscriptionUrl}`Если значение ещё не готово или WebCrypto недоступен (http, старый вебвью), подставится обычная По файлам трогается только Мы это выкатили сегодня в трёх местах на живых пользователях: страница подписки, свой веб-кабинет и мини-аппа в телеге. iOS, Android, десктоп, импорт везде проходит. Второй вариант, если хочется полной симметрии с Скажите, какой путь ближе, и пришлю минимальный PR. |
|
Синхронный вариант, конечно, был бы предпочтительнее. Давайте попробуем попросить. Вариант с "прогревом" оставим на запаску пока что.
|
Adds an INCY_CRYPT1_LINK template placeholder for INCY deep links (incy://crypt1/...), alongside the existing HAPP_CRYPT3_LINK/HAPP_CRYPT4_LINK support for Happ. Encryption runs entirely client-side via the official @incy/link-encoder/web (Web Crypto) build, using the already-loaded, already-validated subscription info — no backend endpoint involved. Split out from remnawave#53 at the maintainer's request, dropping the unrelated Telegram WebView / docker-compose / index.html changes so this PR only covers the INCY feature itself.
0.5.1 registers INCY_CRYPT1_LINK as a recognized Template Variable (SUBSCRIPTION_PAGE_TEMPLATE_KEYS / TSubscriptionPageTemplateKey) so the panel's button-link picker can offer it alongside HAPP_CRYPT3_LINK / HAPP_CRYPT4_LINK. Per maintainer request on remnawave#53. No code changes needed — diffed 0.5.0 vs 0.5.1 directly, the only change in the package is this constant.
|
Убрал лишние изменения в diff, как только или если incy сделают библиотеку синхронной то смогу обновить |
|
@kastov Как уже было сказано выше, выпущен синхронный вход, @incy/link-encoder 1.3.0, точка ./sync. Внутри @noble/ciphers (MIT, без зависимостей от WebCrypto), то есть работает и в браузере, и синхронно. Все проверено: возвращает строку сразу, не промис, формат байт в байт совпадает с node и web входами, ссылки читаются между всеми тремя. Получается, в template-engine.ts это ложится одной строкой, ровно как ключи Happ: INCY_CRYPT1_LINK: () => encryptLink(metaInfo.subscriptionUrl, { name: '' }) Ни прогрева, ни кеша, ни асинхронности в обработчике клика. Могу прислать PR: импорт, одна строка в движке и бамп версии пакета. Скажите, нужно ли, или сделаете сами. |
|
Релиз на днях. |
Moved subscription encryption from the backend to the frontend, modified the original INCY library, and now all logic is moved to the frontend without public API endpoints