mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-04 17:37:19 +00:00
c8ef1b1f68
The inbound's spiderX now acts as a per-client seed: exports emit sha256(seed|subKey) truncated to a 15-hex "/path", so a client's spx no longer changes on every subscription fetch (#5718) while different clients stop sharing one fingerprintable value. The form gains a regenerate button that rotates every client's path at once. The frontend link builders derive through the same function (lib/xray/spider-x.ts, @noble/hashes) keyed on subId-then-email like the Go subKey, so panel QR/copy links and subscription output agree — cross-language vector tests lock both sides byte-for-byte. streamData now tolerates malformed stored stream settings (unparseable JSON, null tls/reality settings) instead of panicking the subscription request.
11 lines
537 B
TypeScript
11 lines
537 B
TypeScript
import { sha256 } from '@noble/hashes/sha2.js';
|
|
import { bytesToHex, utf8ToBytes } from '@noble/hashes/utils.js';
|
|
|
|
// Mirrors deriveSpiderX in internal/sub/service.go byte-for-byte so panel
|
|
// links and subscription links agree; returns '' when there is no seed and
|
|
// no client key (the caller then omits spx, as the legacy builder did).
|
|
export function deriveSpiderX(seed: string, clientKey: string): string {
|
|
if (!seed && !clientKey) return '';
|
|
return `/${bytesToHex(sha256(utf8ToBytes(`${seed}|${clientKey}`))).slice(0, 15)}`;
|
|
}
|