googlevideo
Version:
A set of utilities for working with Google Video APIs.
102 lines (101 loc) • 5.7 kB
JavaScript
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _CustomEvent_detail;
export var QUALITY;
(function (QUALITY) {
QUALITY[QUALITY["AUTO"] = 0] = "AUTO";
QUALITY[QUALITY["TINY"] = 144] = "TINY";
QUALITY[QUALITY["SMALL"] = 240] = "SMALL";
QUALITY[QUALITY["MEDIUM"] = 360] = "MEDIUM";
// eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
QUALITY[QUALITY["LIGHT"] = 144] = "LIGHT";
QUALITY[QUALITY["LARGE"] = 480] = "LARGE";
QUALITY[QUALITY["HD720"] = 720] = "HD720";
QUALITY[QUALITY["HD1080"] = 1080] = "HD1080";
QUALITY[QUALITY["HD1440"] = 1440] = "HD1440";
QUALITY[QUALITY["HD2160"] = 2160] = "HD2160";
QUALITY[QUALITY["HD2880"] = 2880] = "HD2880";
QUALITY[QUALITY["HIGHRES"] = 4320] = "HIGHRES";
})(QUALITY || (QUALITY = {}));
export var PART;
(function (PART) {
PART[PART["ONESIE_HEADER"] = 10] = "ONESIE_HEADER";
PART[PART["ONESIE_DATA"] = 11] = "ONESIE_DATA";
PART[PART["MEDIA_HEADER"] = 20] = "MEDIA_HEADER";
PART[PART["MEDIA"] = 21] = "MEDIA";
PART[PART["MEDIA_END"] = 22] = "MEDIA_END";
PART[PART["LIVE_METADATA"] = 31] = "LIVE_METADATA";
PART[PART["HOSTNAME_CHANGE_HINT"] = 32] = "HOSTNAME_CHANGE_HINT";
PART[PART["LIVE_METADATA_PROMISE"] = 33] = "LIVE_METADATA_PROMISE";
PART[PART["LIVE_METADATA_PROMISE_CANCELLATION"] = 34] = "LIVE_METADATA_PROMISE_CANCELLATION";
PART[PART["NEXT_REQUEST_POLICY"] = 35] = "NEXT_REQUEST_POLICY";
PART[PART["USTREAMER_VIDEO_AND_FORMAT_DATA"] = 36] = "USTREAMER_VIDEO_AND_FORMAT_DATA";
PART[PART["FORMAT_SELECTION_CONFIG"] = 37] = "FORMAT_SELECTION_CONFIG";
PART[PART["USTREAMER_SELECTED_MEDIA_STREAM"] = 38] = "USTREAMER_SELECTED_MEDIA_STREAM";
PART[PART["FORMAT_INITIALIZATION_METADATA"] = 42] = "FORMAT_INITIALIZATION_METADATA";
PART[PART["SABR_REDIRECT"] = 43] = "SABR_REDIRECT";
PART[PART["SABR_ERROR"] = 44] = "SABR_ERROR";
PART[PART["SABR_SEEK"] = 45] = "SABR_SEEK";
PART[PART["RELOAD_PLAYER_RESPONSE"] = 46] = "RELOAD_PLAYER_RESPONSE";
PART[PART["PLAYBACK_START_POLICY"] = 47] = "PLAYBACK_START_POLICY";
PART[PART["ALLOWED_CACHED_FORMATS"] = 48] = "ALLOWED_CACHED_FORMATS";
PART[PART["START_BW_SAMPLING_HINT"] = 49] = "START_BW_SAMPLING_HINT";
PART[PART["PAUSE_BW_SAMPLING_HINT"] = 50] = "PAUSE_BW_SAMPLING_HINT";
PART[PART["SELECTABLE_FORMATS"] = 51] = "SELECTABLE_FORMATS";
PART[PART["REQUEST_IDENTIFIER"] = 52] = "REQUEST_IDENTIFIER";
PART[PART["REQUEST_CANCELLATION_POLICY"] = 53] = "REQUEST_CANCELLATION_POLICY";
PART[PART["ONESIE_PREFETCH_REJECTION"] = 54] = "ONESIE_PREFETCH_REJECTION";
PART[PART["TIMELINE_CONTEXT"] = 55] = "TIMELINE_CONTEXT";
PART[PART["REQUEST_PIPELINING"] = 56] = "REQUEST_PIPELINING";
PART[PART["SABR_CONTEXT_UPDATE"] = 57] = "SABR_CONTEXT_UPDATE";
PART[PART["STREAM_PROTECTION_STATUS"] = 58] = "STREAM_PROTECTION_STATUS";
PART[PART["SABR_CONTEXT_SENDING_POLICY"] = 59] = "SABR_CONTEXT_SENDING_POLICY";
PART[PART["LAWNMOWER_POLICY"] = 60] = "LAWNMOWER_POLICY";
PART[PART["SABR_ACK"] = 61] = "SABR_ACK";
PART[PART["END_OF_TRACK"] = 62] = "END_OF_TRACK";
PART[PART["CACHE_LOAD_POLICY"] = 63] = "CACHE_LOAD_POLICY";
PART[PART["LAWNMOWER_MESSAGING_POLICY"] = 64] = "LAWNMOWER_MESSAGING_POLICY";
PART[PART["PREWARM_CONNECTION"] = 65] = "PREWARM_CONNECTION";
})(PART || (PART = {}));
export function u8ToBase64(u8) {
return btoa(String.fromCharCode.apply(null, Array.from(u8)));
}
export function base64ToU8(base64) {
const standard_base64 = base64.replace(/-/g, '+').replace(/_/g, '/');
const padded_base64 = standard_base64.padEnd(standard_base64.length + (4 - standard_base64.length % 4) % 4, '=');
return new Uint8Array(atob(padded_base64).split('').map((char) => char.charCodeAt(0)));
}
export function getFormatKey(formatId) {
return `${formatId.itag};${formatId.lastModified};`;
}
export function concatenateChunks(chunks) {
const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
const result = new Uint8Array(totalLength);
let offset = 0;
for (const chunk of chunks) {
result.set(chunk, offset);
offset += chunk.length;
}
return result;
}
// See https://github.com/nodejs/node/issues/40678#issuecomment-1126944677
export class CustomEvent extends Event {
constructor(type, options) {
super(type, options);
_CustomEvent_detail.set(this, void 0);
__classPrivateFieldSet(this, _CustomEvent_detail, options?.detail ?? null, "f");
}
get detail() {
return __classPrivateFieldGet(this, _CustomEvent_detail, "f");
}
}
_CustomEvent_detail = new WeakMap();