(async () => {
const db = await new Promise((res, rej) => {
const r = indexedDB.open("firebaseLocalStorageDb");
r.onsuccess = () => res(r.result);
r.onerror = () => rej(r.error);
});
const tx = db.transaction("firebaseLocalStorage", "readonly");
const store = tx.objectStore("firebaseLocalStorage");
const entries = await new Promise((res, rej) => {
const r = store.getAll();
r.onsuccess = () => res(r.result);
r.onerror = () => rej(r.error);
});
const entry = entries.find(e => e.fbase_key?.startsWith("firebase:authUser:"));
if (!entry) { console.error("no firebase auth entry — are you logged in?"); return; }
const token = entry.value?.stsTokenManager?.refreshToken;
if (!token) { console.error("no refreshToken in entry"); return; }
console.log(token);
await navigator.clipboard.writeText(token).then(
() => console.log("(copied to clipboard)"),
() => console.log("(clipboard copy blocked — copy from above)")
);
})();
note: the token only needs to be acquired once and can then be reused over and over
token.txt in the same directory as hellolive-stream.py and paste the token inside ithellolive-stream.py to begin downloadingpython hellolive-stream.py <url>
by default, the script pipe muxes the stream to a .ts file which can be opened in mpv to watch in real time. mpv does not automatically update subtitle files as they're appened to though, like it does with video files.
to work around this, download sub-reload.lua and place it in your mpv scripts directory. then when you open the .ts file, use F2 to toggle on automatic sub file reloading at 10 second intervals.