НазадДобавить комментарий
Браузерная сборка @incy/link-encoder - генерация crypt1-ссылок без Node
⭐ PremiumПриоритетная поддержка
ИдеяГотовоПубличныйДругое
Автор: p************@gmail.com
Создан: 22.08.2026, 23:08:05
Приветствую! Спасибо, что выложили link-encoder открыто: благодаря ему crypt1-ссылки можно собирать у себя, не завися от сторонних сервисов. Есть одна деталь, которая мешает применить его там, где такие ссылки нужнее всего - на страницах подписки и в личных кабинетах. Пакет 1.0.1 рассчитан только на Node: внутри createHash, createCipheriv и randomBytes из node:crypto, интерфейс синхронный. В браузерной сборке он не работает. Из-за этого интеграция с Remnawave не состоялась уже дважды: - https://github.com/remnawave/backend/pull/190 - эндпоинт шифрования в панели, закрыт; - https://github.com/remnawave/subscription-page/pull/52 - то же на странице подписки, закрыт с объяснением мейнтейнера: «Библиотека от Incy не позволяет ее использовать напрямую в фронтенд-приложениях, так как она опирается на node:crypto, который в браузере недоступен» (https://github.com/remnawave/subscription-page/pull/52#issuecomment-4996761919); - https://github.com/remnawave/subscription-page/pull/53 — открыт с июля: автор обошёл ограничение форком библиотеки, и из-за зависимости на форк PR не принимают. Просьба: добавить второй вход на Web Crypto, сохранив нынешний нодовый. В том же ответе мейнтейнер Remnawave приводит свой пакет для аналогичных ссылок Happ как пример такого устройства - https://github.com/kastov/cryptohapp, там два входа с одинаковым внешним интерфейсом. Дополнительных секретов это не раскрывает: ключ и так поставляется в клиентах и в опубликованном пакете, о чём вы прямо пишете в README. Если сочтёте нужным, я готов собрать и прислать PR. Заранее благодарю за любой ответ.
Комментарии (6)
Команда INCYadmin122.08.2026, 23:36:26
Добрый день, взяли в работу.
p************@gmail.com22.08.2026, 23:37:29
Приятно это видеть =) спасибо, буду ждать!
Команда INCYadmin123.08.2026, 00:14:52
Интеграция успешно проведена по вашему запросу: https://github.com/INCY-DEV/incy-link-encoder
p************@gmail.com123.08.2026, 14:46:28
Спасибо за 1.2.0, браузерный вход работает, я уже выкатил его у себя в трёх местах. Появилась смежная просьба, уже не только от меня. Мейнтейнер Remnawave добавил ключ `INCY_CRYPT1_LINK` в свои Template Variables (`@remnawave/subscription-page-types` 0.5.1), чтобы страница подписки умела отдавать crypt1 из коробки. Но встроить туда `/web` вход мешает одна деталь: подстановка переменных на странице подписки синхронная, а WebCrypto асинхронный. Сделать её асинхронной нельзя: на iOS и в Safari переход по своей схеме после await теряет «свежесть нажатия», и ссылка просто не открывается. У Happ это решено так: во фронтовой сборке шифрование сделано на чистом JS (`jsencrypt`), без WebCrypto, и потому синхронное. Поэтому их ключи подставляются одной строкой, а ваш нет. Просьба: добавить в `@incy/link-encoder` синхронный вход на чистом JS. Тот же формат crypt1, тот же ключ, просто AES-256-GCM без обращения к `crypto.subtle`, например отдельной точкой `@incy/link-encoder/sync`. Тогда `INCY_CRYPT1_LINK` встанет в Remnawave ровно так же, как ключи Happ. Если удобно, могу прислать PR сам, скажите только, принимаете ли вы их в репозиторий. Реализацию вижу на `@noble/ciphers` (MIT, без зависимостей, аудированная, AES-GCM синхронный): новая точка входа рядом с существующими, тот же keymat, и прогон против вашего же кросс-платформенного тест-вектора, чтобы байты сходились с node и web входами. Ничего в текущем API при этом не меняется. Обсуждение на стороне Remnawave: https://github.com/remnawave/subscription-page/pull/53
Команда INCYadminРешение23.08.2026, 21:52:23
Добавили
Команда INCYadmin23.08.2026, 00:32:33
Мы были бы благодарны за вашу помощь с PR в Remnawave