UNPKG

p2p-media-loader-core

Version:
29 lines 1.45 kB
import { sha1 } from "./hash.js"; 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) { // A BitTorrent tracker `infoHash` MUST be exactly 20 bytes. // We take 15 bytes of the binary SHA-1 and encode it to Base64. // This produces exactly a 20-character ASCII string (no padding). // In this codebase, the tracker client uses utf8ToUintArray() on this string, // so it correctly receives exactly 20 bytes. Note: this is a 20-byte ASCII // representation, not a standard 20-byte binary SHA-1 infoHash. return btoa(sha1(streamId).slice(0, 15)); } export function generatePeerId(trackerClientVersionPrefix) { 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) { const splittedVersion = versionString.split("."); const v0 = `00${splittedVersion[0]}`.slice(-2); const v1 = `00${splittedVersion[1]}`.slice(-2); return `${v0}${v1}`; } //# sourceMappingURL=peer.js.map