Improved banner URL calculation.

This commit is contained in:
2026-02-02 23:48:13 +01:00
parent 750b30d896
commit 5b53f53fd3
4 changed files with 36 additions and 17 deletions

View File

@@ -38,8 +38,6 @@ const props = defineProps({
}, },
}); });
// console.log(props.campaign?.banner);
const bannerSrc = (() => { const bannerSrc = (() => {
if (props.campaign.banner) { if (props.campaign.banner) {
if (props.campaign.banner.entity.type === 'network' || !props.campaign.banner.entity.parent) { if (props.campaign.banner.entity.type === 'network' || !props.campaign.banner.entity.parent) {

View File

@@ -89,31 +89,32 @@ function getEntityUrl(entity) {
} }
} }
export function getAffiliateEntityUrl(entity) { export function getAffiliateEntityUrl(entity, affiliate) {
const entityUrl = getEntityUrl(entity); const entityUrl = getEntityUrl(entity);
const entityAffiliate = affiliate || entity.affiliate;
if (!entityUrl) { if (!entityUrl) {
return null; return null;
} }
if (!entity.affiliate) { if (!entityAffiliate) {
return entityUrl; return entityUrl;
} }
if (entity.affiliate.parameters?.query) { // used by e.g. Bang if (entityAffiliate.parameters?.query) { // used by e.g. Bang
const newParams = new URLSearchParams({ const newParams = new URLSearchParams({
...Object.fromEntries(new URL(entityUrl).searchParams), ...Object.fromEntries(new URL(entityUrl).searchParams),
...Object.fromEntries(new URLSearchParams(entity.affiliate.parameters.query)), ...Object.fromEntries(new URLSearchParams(entityAffiliate.parameters.query)),
}); });
return `${entityUrl}?${newParams.toString()}`; return `${entityUrl}?${newParams.toString()}`;
} }
const affiliateUrl = entity.affiliate.parameters.replaceEntity?.hostname === new URL(entityUrl).hostname const affiliateUrl = entityAffiliate.parameters?.replaceEntity?.hostname === new URL(entityUrl).hostname
? entity.affiliate.parameters.replaceEntity.url ? entityAffiliate.parameters.replaceEntity.url
: entity.affiliate.url; : entityAffiliate.url;
if (entity.id === entity.affiliate.entityId || entityUrl === entity.parent?.url) { if (entity.id === entityAffiliate.entityId || entityUrl === entity.parent?.url) {
return affiliateUrl; return affiliateUrl;
} }
@@ -126,18 +127,18 @@ export function getAffiliateEntityUrl(entity) {
return entityUrl; return entityUrl;
} }
if (entity.affiliate.parameters.dynamicEntity) { if (entityAffiliate.parameters.dynamicEntity) {
const entityPath = new URL(entityUrl).pathname; const entityPath = new URL(entityUrl).pathname;
return format(entity.affiliate.parameters.dynamicEntity, { return format(entityAffiliate.parameters.dynamicEntity, {
entityPath: entity.affiliate.parameters.prefixSlash entityPath: entityAffiliate.parameters.prefixSlash
? entityPath ? entityPath
: entityPath.replace(/^\//, ''), : entityPath.replace(/^\//, ''),
}); });
} }
if (affiliateUrl?.includes('/track') if (affiliateUrl?.includes('/track')
&& entity.affiliate.parameters.channel !== false) { && entityAffiliate.parameters.channel !== false) {
const { pathname, search } = new URL(entityUrl); const { pathname, search } = new URL(entityUrl);
return `${affiliateUrl}${pathname.replace(/^\/trial/, '')}${search}`; // replace needed for Jules Jordan, verify behavior on other sites return `${affiliateUrl}${pathname.replace(/^\/trial/, '')}${search}`; // replace needed for Jules Jordan, verify behavior on other sites

View File

@@ -4,17 +4,33 @@ import { knexOwner as knex } from './knex.js';
import { curateEntity } from './entities.js'; import { curateEntity } from './entities.js';
import redis from './redis.js'; import redis from './redis.js';
import initLogger from './logger.js'; import initLogger from './logger.js';
import { getAffiliateEntityUrl } from './affiliates.js';
const logger = initLogger(); const logger = initLogger();
function getCampaignUrl(campaign) {
if (!campaign) {
return null;
}
if (campaign.url) {
return campaign.url;
}
if (campaign.entity) {
return getAffiliateEntityUrl(campaign.entity, campaign.affiliate);
}
return null;
}
function curateCampaign(campaign) { function curateCampaign(campaign) {
if (!campaign) { if (!campaign) {
return null; return null;
} }
return { const curatedCampaign = {
id: campaign.id, id: campaign.id,
url: campaign.url,
entity: campaign.entity && curateEntity({ ...campaign.entity, parent: campaign.parent_entity }), entity: campaign.entity && curateEntity({ ...campaign.entity, parent: campaign.parent_entity }),
banner: campaign.banner && { banner: campaign.banner && {
id: campaign.banner.id, id: campaign.banner.id,
@@ -31,6 +47,10 @@ function curateCampaign(campaign) {
parameters: campaign.affiliate.parameters, parameters: campaign.affiliate.parameters,
}, },
}; };
curatedCampaign.url = getCampaignUrl(curatedCampaign);
return curatedCampaign;
} }
function selectRandomCampaign(primaryCampaigns, entityCampaigns, preferredCampaigns) { function selectRandomCampaign(primaryCampaigns, entityCampaigns, preferredCampaigns) {

2
static

Submodule static updated: 7887d3f52e...4b6b7e5e73