Added improved affiliate URL logic for entities.
This commit is contained in:
78
src/affiliates.js
Normal file
78
src/affiliates.js
Normal file
@@ -0,0 +1,78 @@
|
||||
function getWatchUrl(scene) {
|
||||
if (scene.url) {
|
||||
return scene.url;
|
||||
}
|
||||
|
||||
if (scene.channel && (scene.channel.isIndependent || scene.channel.type === 'network')) {
|
||||
return scene.channel.url;
|
||||
}
|
||||
|
||||
if (scene.network) {
|
||||
return scene.network.url;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getAffiliateSceneUrl(scene) {
|
||||
const watchUrl = getWatchUrl(scene);
|
||||
|
||||
if (!watchUrl) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!scene.affiliate) {
|
||||
return watchUrl;
|
||||
}
|
||||
|
||||
if (scene.affiliate.url?.includes('/track')
|
||||
&& scene.affiliate.parameters.scene !== false
|
||||
&& (!scene.channel.isIndependent || scene.channel.id === scene.affiliate.entityId)) { // standard NATS redirect
|
||||
const { pathname, search } = new URL(watchUrl);
|
||||
|
||||
return `${scene.affiliate.url}${pathname.replace(/^\/trial/, '')}${search}`; // replace needed for Jules Jordan, verify behavior on other sites
|
||||
}
|
||||
|
||||
if (scene.affiliate.parameters.query) { // used by e.g. Bang
|
||||
const newParams = new URLSearchParams({
|
||||
...Object.fromEntries(new URL(watchUrl).searchParams),
|
||||
...Object.fromEntries(new URLSearchParams(scene.affiliate.parameters.query)),
|
||||
});
|
||||
|
||||
return `${watchUrl}?${newParams.toString()}`;
|
||||
}
|
||||
|
||||
return watchUrl;
|
||||
}
|
||||
|
||||
export function getAffiliateEntityUrl(entity) {
|
||||
if (!entity.affiliate) {
|
||||
return entity.url;
|
||||
}
|
||||
|
||||
if (entity.id === entity.affiliate.entityId) {
|
||||
return entity.affiliate.url;
|
||||
}
|
||||
|
||||
if (entity.isIndependent) {
|
||||
return entity.url;
|
||||
}
|
||||
|
||||
if (entity.affiliate.url?.includes('/track')
|
||||
&& entity.affiliate.parameters.channel !== false) {
|
||||
const { pathname, search } = new URL(entity.url);
|
||||
|
||||
return `${entity.affiliate.url}${pathname.replace(/^\/trial/, '')}${search}`; // replace needed for Jules Jordan, verify behavior on other sites
|
||||
}
|
||||
|
||||
if (entity.affiliate.parameters.query) { // used by e.g. Bang
|
||||
const newParams = new URLSearchParams({
|
||||
...Object.fromEntries(new URL(entity.url).searchParams),
|
||||
...Object.fromEntries(new URLSearchParams(entity.affiliate.parameters.query)),
|
||||
});
|
||||
|
||||
return `${entity.url}?${newParams.toString()}`;
|
||||
}
|
||||
|
||||
return entity.url;
|
||||
}
|
||||
Reference in New Issue
Block a user