Live preview · Report an issue
A browser-based workbench for happ:// deep links: decrypt encrypted subscription links, edit the destination URL, re-encrypt through the official Happ API, and convert between client import formats. All cryptographic operations run locally in the browser.
Supported link formats: crypt, crypt2, crypt3, crypt4, crypt5 (legacy and salted layouts).
- Decryption — generations 1–4 are RSA-PKCS1v15 wrappers decrypted with node-forge;
crypt5uses RSA-4096 key recovery plus ChaCha20-Poly1305 via noble-ciphers. A native-library CPU emulator (unicorn.js) remains as an automatic fallback. 36 bundledcrypt5keys. - Link editor — edit the destination URL and its query parameters (repeated parameters preserved), bind a HWID into the link, and generate every supported output format: plain URL, Base64 text, JSON,
v2raytun://import,clash://install-config,sing-box://import, plus QR codes. - Device identity — send subscription requests with the Happ HWID header set (
x-hwid,x-device-os,x-ver-os,x-device-model,User-Agent) and inspect the panel response, includingx-hwid-max-devices-reachedand related headers. Requests go through a local bridge (Vite middleware) or a public proxy route. - happ-relay-cloudflare — companion project: a self-hosted Cloudflare Worker that lets unlimited devices share one HWID identity on panels with device limits.
- happ-relay-cloudflare-vercel — the same one-HWID relay on Vercel, for networks where Cloudflare is not the best fit.
- Official encryption — wrap any URL into a
happ://crypt5link via the official crypto.happ.su API, gated behind explicit consent. - English / Russian interface, persisted across visits.
| Workspace | Request | Guide |
|---|---|---|
![]() |
![]() |
![]() |
npm install
npm run dev # local server with the request bridge
npm test # unit tests (node --test)
npm run test:browser # browser tests (Playwright, headless)
npm run build # production build to dist/
npm run preview # serve the production build with the bridgeThe request bridge is a Vite middleware (server/bridge.js) mounted in both configureServer and configurePreviewServer. It forwards device headers to the target server and enforces loopback-only access, DNS pinning, redirect rejection, and request/response size and time limits.
- 59 unit tests covering the crypt5/legacy encryption round trips, link parsing and editing, converters, and the HWID header contract.
- 10 Playwright browser tests covering the editor workflow, error handling, language switching, identity persistence, and mobile layout.
If this project helped you, consider a donation — USDT on the TON network (Tonkeeper, @wallet, any TON wallet):
UQCcN9hahBxM5q3GGwx79UNEu82EF0kFTwnRRklL_1OLtK15
Educational project: it demonstrates how happ:// link encryption and HWID device counting work. You are responsible for complying with your provider's terms and applicable law. Not affiliated with Happ or Remnawave; no warranty (see LICENSE).
Based on LeeeeT/happ-decryptor. The original repository is published without a license; this project keeps a visible attribution accordingly.


