p2p-media-loader-core
Version:
P2P Media Loader core functionality
35 lines (26 loc) • 1.16 kB
text/typescript
import md5 from "nano-md5";
import { PACKAGE_VERSION } from "./version.js";
export const TRACKER_CLIENT_VERSION_PREFIX = `-PM${formatVersion(PACKAGE_VERSION)}-`;
const HASH_SYMBOLS =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
const PEER_ID_LENGTH = 20;
export function getStreamHash(streamId: string): string {
// slice one byte to have 15 bytes binary string
const binary15BytesHashString = md5.fromUtf8(streamId).slice(1);
const base64Hash20CharsString = btoa(binary15BytesHashString);
return base64Hash20CharsString;
}
export function generatePeerId(trackerClientVersionPrefix: string): string {
const trackerClientId = [trackerClientVersionPrefix];
const randomCharsCount = PEER_ID_LENGTH - trackerClientVersionPrefix.length;
for (let i = 0; i < randomCharsCount; i++) {
trackerClientId.push(
HASH_SYMBOLS[Math.floor(Math.random() * HASH_SYMBOLS.length)],
);
}
return trackerClientId.join("");
}
function formatVersion(versionString: string) {
const splittedVersion = versionString.split(".");
return `${splittedVersion[0].padStart(2, "0")}${splittedVersion[1].padStart(2, "0")}`;
}