From 273816b9a34f3f1fbbb4f10b9f1373580eac6a61 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:13:15 +0300 Subject: [PATCH] Update utils.ts --- scripts/utils.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/scripts/utils.ts b/scripts/utils.ts index ecce8da58..0d27fe79d 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -1,4 +1,9 @@ +import { MasterPlaylist, MediaPlaylist, Variant } from 'hls-parser/types' +import { parse as parsePlaylist } from 'hls-parser' +import { TESTING } from './constants.js' import normalizeUrl from 'normalize-url' +import { orderBy } from 'es-toolkit' +import axios from 'axios' export function isURI(string: string): boolean { try { @@ -21,3 +26,33 @@ export function truncate(string: string, limit: number = 100) { return string.slice(0, limit - 3) + '...' } + +export async function getStreamInfo( + url: string, + options: { httpUserAgent: string | null; httpReferrer: string | null } +): Promise { + let playlist: MasterPlaylist | MediaPlaylist | undefined + + if (TESTING) { + playlist = (await import('../tests/__data__/input/playlist_update/playlist.mjs')) + .default as unknown as MasterPlaylist + } else { + try { + const response = await axios(url, { + signal: AbortSignal.timeout(30000), + headers: { + 'User-Agent': options.httpUserAgent || 'Mozilla/5.0', + Referer: options.httpReferrer + } + }) + + playlist = parsePlaylist(response.data) + } catch {} + } + + if (playlist && playlist.isMasterPlaylist && playlist.variants.length) { + return orderBy(playlist.variants, ['bandwidth'], ['desc'])[0] + } + + return undefined +}