diff --git a/components/campaigns/campaign.vue b/components/campaigns/campaign.vue index 8b2f76d..fc71fb8 100644 --- a/components/campaigns/campaign.vue +++ b/components/campaigns/campaign.vue @@ -38,8 +38,6 @@ const props = defineProps({ }, }); -// console.log(props.campaign?.banner); - const bannerSrc = (() => { if (props.campaign.banner) { if (props.campaign.banner.entity.type === 'network' || !props.campaign.banner.entity.parent) { diff --git a/src/affiliates.js b/src/affiliates.js index 51888e8..1261ab5 100644 --- a/src/affiliates.js +++ b/src/affiliates.js @@ -89,31 +89,32 @@ function getEntityUrl(entity) { } } -export function getAffiliateEntityUrl(entity) { +export function getAffiliateEntityUrl(entity, affiliate) { const entityUrl = getEntityUrl(entity); + const entityAffiliate = affiliate || entity.affiliate; if (!entityUrl) { return null; } - if (!entity.affiliate) { + if (!entityAffiliate) { 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({ ...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()}`; } - const affiliateUrl = entity.affiliate.parameters.replaceEntity?.hostname === new URL(entityUrl).hostname - ? entity.affiliate.parameters.replaceEntity.url - : entity.affiliate.url; + const affiliateUrl = entityAffiliate.parameters?.replaceEntity?.hostname === new URL(entityUrl).hostname + ? entityAffiliate.parameters.replaceEntity.url + : entityAffiliate.url; - if (entity.id === entity.affiliate.entityId || entityUrl === entity.parent?.url) { + if (entity.id === entityAffiliate.entityId || entityUrl === entity.parent?.url) { return affiliateUrl; } @@ -126,18 +127,18 @@ export function getAffiliateEntityUrl(entity) { return entityUrl; } - if (entity.affiliate.parameters.dynamicEntity) { + if (entityAffiliate.parameters.dynamicEntity) { const entityPath = new URL(entityUrl).pathname; - return format(entity.affiliate.parameters.dynamicEntity, { - entityPath: entity.affiliate.parameters.prefixSlash + return format(entityAffiliate.parameters.dynamicEntity, { + entityPath: entityAffiliate.parameters.prefixSlash ? entityPath : entityPath.replace(/^\//, ''), }); } if (affiliateUrl?.includes('/track') - && entity.affiliate.parameters.channel !== false) { + && entityAffiliate.parameters.channel !== false) { const { pathname, search } = new URL(entityUrl); return `${affiliateUrl}${pathname.replace(/^\/trial/, '')}${search}`; // replace needed for Jules Jordan, verify behavior on other sites diff --git a/src/campaigns.js b/src/campaigns.js index 7a6c0c4..397d871 100644 --- a/src/campaigns.js +++ b/src/campaigns.js @@ -4,17 +4,33 @@ import { knexOwner as knex } from './knex.js'; import { curateEntity } from './entities.js'; import redis from './redis.js'; import initLogger from './logger.js'; +import { getAffiliateEntityUrl } from './affiliates.js'; 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) { if (!campaign) { return null; } - return { + const curatedCampaign = { id: campaign.id, - url: campaign.url, entity: campaign.entity && curateEntity({ ...campaign.entity, parent: campaign.parent_entity }), banner: campaign.banner && { id: campaign.banner.id, @@ -31,6 +47,10 @@ function curateCampaign(campaign) { parameters: campaign.affiliate.parameters, }, }; + + curatedCampaign.url = getCampaignUrl(curatedCampaign); + + return curatedCampaign; } function selectRandomCampaign(primaryCampaigns, entityCampaigns, preferredCampaigns) { diff --git a/static b/static index 7887d3f..4b6b7e5 160000 --- a/static +++ b/static @@ -1 +1 @@ -Subproject commit 7887d3f52eade5827b96cb7c9fa46f3b4b978690 +Subproject commit 4b6b7e5e732033884089a65bdf65b5960b94b28d