Files
bitvid/js/magnetUtils.js
T

93 lines
1.8 KiB
JavaScript

// js/magnetUtils.js
import { WSS_TRACKERS } from "./constants.js";
import {
buildMagnetUri,
ensureTrackers,
ensureTorrentHint,
ensureWebSeeds,
normalizeMagnetInput,
resolveAppProtocol,
safeDecodeMagnet as sharedSafeDecodeMagnet,
} from "./magnetShared.js";
export { WSS_TRACKERS };
export const safeDecodeMagnet = sharedSafeDecodeMagnet;
export function normalizeAndAugmentMagnet(
rawValue,
{
webSeed,
torrentUrl,
xs,
extraTrackers = [],
logger,
appProtocol,
} = {}
) {
const {
initial,
canonicalValue,
didMutate,
isMagnet,
normalizedScheme,
fragment,
params,
} = normalizeMagnetInput(rawValue);
if (!initial) {
return { magnet: "", didChange: false };
}
if (!isMagnet) {
const magnet = canonicalValue;
return {
magnet,
didChange: didMutate || magnet !== initial,
};
}
let didChange = didMutate;
if (ensureTrackers(params, [...WSS_TRACKERS, ...extraTrackers])) {
didChange = true;
}
const torrentHint = typeof torrentUrl === "string" && torrentUrl.trim()
? torrentUrl
: typeof xs === "string"
? xs.trim()
: "";
if (torrentHint) {
if (ensureTorrentHint(params, torrentHint, { requireHttp: true })) {
didChange = true;
}
}
const seedInputs = Array.isArray(webSeed)
? webSeed
: typeof webSeed === "string"
? [webSeed]
: [];
const resolvedProtocol = resolveAppProtocol(appProtocol);
if (
ensureWebSeeds(params, seedInputs, {
allowHttp: resolvedProtocol === "http:",
allowUnparsed: false,
logger,
})
) {
didChange = true;
}
const finalMagnet = buildMagnetUri(normalizedScheme, params, fragment);
return {
magnet: finalMagnet,
didChange: didChange || finalMagnet !== initial,
};
}