From 5ae3b5d91c5663783430c75324fb563bd8662078 Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Fri, 30 Jan 2026 22:39:34 +0100 Subject: [PATCH] Ensuring affiliate URL is valid. --- src/affiliates.js | 30 +++++++++++++++++++++--------- src/entities.js | 2 +- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/affiliates.js b/src/affiliates.js index d4fdf88..57e7815 100644 --- a/src/affiliates.js +++ b/src/affiliates.js @@ -1,16 +1,20 @@ import format from 'template-format'; function getWatchUrl(scene) { - if (scene.url) { - return scene.url; - } + try { + if (scene.url) { + return new URL(scene.url).href; + } - if (scene.channel && (scene.channel.isIndependent || scene.channel.type === 'network')) { - return scene.channel.url; - } + if (scene.channel && (scene.channel.isIndependent || scene.channel.type === 'network')) { + return new URL(scene.channel.url).href; + } - if (scene.network) { - return scene.network.url; + if (scene.network) { + return new URL(scene.network.url).href; + } + } catch (_error) { + // invalid URL } return null; @@ -73,8 +77,16 @@ export function getAffiliateSceneUrl(scene) { return watchUrl; } +function getEntityUrl(entity) { + try { + return new URL(entity.url || entity.parent?.url).href; + } catch (_error) { + return null; + } +} + export function getAffiliateEntityUrl(entity) { - const entityUrl = entity.url || entity.parent?.url; + const entityUrl = getEntityUrl(entity); if (!entityUrl) { return null; diff --git a/src/entities.js b/src/entities.js index 16cc6b5..06e1082 100644 --- a/src/entities.js +++ b/src/entities.js @@ -39,7 +39,7 @@ export function curateEntity(entity, context) { }, }; - curatedEntity.affiliateUrl = getAffiliateEntityUrl(curatedEntity, curatedEntity); + curatedEntity.affiliateUrl = getAffiliateEntityUrl(curatedEntity); return curatedEntity; }