From 81e68c37f500218ce79793981678941ee97879b6 Mon Sep 17 00:00:00 2001 From: dumbmoron Date: Thu, 14 Dec 2023 23:04:05 +0000 Subject: [PATCH] processing: pass URL object instead of string --- src/modules/api.js | 2 +- src/modules/processing/match.js | 8 ++++++-- src/modules/processing/services/soundcloud.js | 7 ++++--- src/modules/processing/services/tumblr.js | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/modules/api.js b/src/modules/api.js index eebbfe27..21132022 100644 --- a/src/modules/api.js +++ b/src/modules/api.js @@ -27,7 +27,7 @@ export async function getJSON(originalURL, lang, obj) { return apiJSON(0, { t: errorUnsupported(lang) }); } - return await match(host, patternMatch, url.toString(), lang, obj) + return await match(host, patternMatch, url, lang, obj) } catch (e) { return apiJSON(0, { t: loc(lang, 'ErrorSomethingWentWrong') }) } diff --git a/src/modules/processing/match.js b/src/modules/processing/match.js index 096cf47f..fd7e6ec9 100644 --- a/src/modules/processing/match.js +++ b/src/modules/processing/match.js @@ -1,3 +1,5 @@ +import { strict as assert } from "node:assert"; + import { apiJSON } from "../sub/utils.js"; import { errorUnsupported, genericError, brokenLink } from "../sub/errors.js"; @@ -23,6 +25,8 @@ import twitch from "./services/twitch.js"; import rutube from "./services/rutube.js"; export default async function(host, patternMatch, url, lang, obj) { + assert(url instanceof URL); + try { let r, isAudioOnly = !!obj.isAudioOnly, disableMetadata = !!obj.disableMetadata; @@ -57,7 +61,7 @@ export default async function(host, patternMatch, url, lang, obj) { dubLang: obj.dubLang } - if (new URL(url).hostname === 'music.youtube.com' || isAudioOnly === true) { + if (url.hostname === 'music.youtube.com' || isAudioOnly === true) { fetchInfo.quality = "max"; fetchInfo.format = "vp9"; fetchInfo.isAudioOnly = true @@ -100,7 +104,7 @@ export default async function(host, patternMatch, url, lang, obj) { case "soundcloud": isAudioOnly = true; r = await soundcloud({ - url: url, + url, author: patternMatch["author"], song: patternMatch["song"], shortLink: patternMatch["shortLink"] || false, diff --git a/src/modules/processing/services/soundcloud.js b/src/modules/processing/services/soundcloud.js index fcc6de02..b13c0440 100644 --- a/src/modules/processing/services/soundcloud.js +++ b/src/modules/processing/services/soundcloud.js @@ -39,17 +39,18 @@ export default async function(obj) { if (!clientId) return { error: 'ErrorSoundCloudNoClientId' }; let link; - if (obj.shortLink && !obj.author && !obj.song) { + if (obj.url.hostname === 'on.soundcloud.com' && obj.shortLink) { link = await fetch(`https://on.soundcloud.com/${obj.shortLink}/`, { redirect: "manual" }).then((r) => { if (r.status === 302 && r.headers.get("location").startsWith("https://soundcloud.com/")) { return r.headers.get("location").split('?', 1)[0] } - return false - }).catch(() => { return false }); + }).catch(() => {}); } + if (!link && obj.author && obj.song) { link = `https://soundcloud.com/${obj.author}/${obj.song}${obj.accessKey ? `/s-${obj.accessKey}` : ''}` } + if (!link) return { error: 'ErrorCouldntFetch' }; let json = await fetch(`https://api-v2.soundcloud.com/resolve?url=${link}&client_id=${clientId}`).then((r) => { diff --git a/src/modules/processing/services/tumblr.js b/src/modules/processing/services/tumblr.js index f978e5a4..f894e4e4 100644 --- a/src/modules/processing/services/tumblr.js +++ b/src/modules/processing/services/tumblr.js @@ -2,7 +2,7 @@ import psl from "psl"; import { genericUserAgent } from "../../config.js"; export default async function(obj) { - const { subdomain } = psl.parse(obj.url); + const { subdomain } = psl.parse(obj.url.hostname); if (subdomain?.includes('.')) return { error: 'ErrorBrokenLink' }