Skip to content

Commit

Permalink
feat: 🐛 The URL injection broke some Amazon functionality
Browse files Browse the repository at this point in the history
It uses now correct Amazon affiliate URL structure on only relevant Amazon pages.
  • Loading branch information
simwai committed Dec 5, 2023
1 parent 5fd6d7d commit ebb1a54
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions background.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,16 @@ async function handleNavigation(details) {
console.log('Handling navigation');

const websites = websitesData.map(x => x.hostSuffix);
const currentWebsite = new URL(details.url).hostname.replace(/^(www\.)/, '').replace(/^\./, ''); ;
const currentWebsite = new URL(details.url).hostname.replace(/^(www\.)/, '').replace(/^\./, '');

if (currentWebsite && websites.includes(currentWebsite) && !currentWebsite.includes('/ap/signin')) {
console.log('Generating affiliate link URL');
console.log('Generating affiliate URL...');
const websiteKey = currentWebsite.includes('amazon') ? 'amazon' : (currentWebsite.includes('aliexpress') ? 'aliexpress' : '');
let affiliateId = null;

try {
affiliateId = await getAffiliateIdForWebsite(websiteKey);
console.log('Found affiliate ID in LocalStorage: ' + affiliateId);
} catch (error) {
return console.error('Failed to get chrome storage. Refresh page.\n', error);
}
Expand All @@ -71,20 +72,25 @@ async function handleNavigation(details) {
}

function getAffiliateIdForWebsite(websiteKey) {
return new Promise(resolve => {
chrome.storage.sync.get(`${websiteKey}AffiliateId`, result => {
const affiliateId = result[`${websiteKey}AffiliateId`] || null;
resolve(affiliateId);
});
return new Promise((resolve, reject) => {
try {
chrome.storage.sync.get(`${websiteKey}AffiliateId`, result => {
const affiliateId = result[`${websiteKey}AffiliateId`] || null;
resolve(affiliateId);
});
} catch (error) {
reject(error);
}
});
}

function generateAffiliateLink(url, affiliateId, websiteKey) {
let modifiedURL = removeAffiliateParameters(url);
let modifiedURL = url;

if (websiteKey === 'amazon') {
modifiedURL = insertAffiliateId(modifiedURL, affiliateId);
modifiedURL = generateAmazonAffiliateLink(modifiedURL, affiliateId);
} else if (websiteKey === 'aliexpress') {
removeAffiliateParameters(url);
modifiedURL = generateAliExpressAffiliateLink(modifiedURL, affiliateId);
}

Expand All @@ -95,19 +101,25 @@ function removeAffiliateParameters(url) {
const baseURL = new URL(url);
const parameters = new URLSearchParams(baseURL.search);

parameters.delete('tag');
parameters.delete('aff_id');

baseURL.search = parameters.toString();
return baseURL.href;
}

function insertAffiliateId(url, affiliateId) {
function generateAmazonAffiliateLink(url, affiliateId) {
const baseURL = new URL(url);
const parameters = new URLSearchParams(baseURL.search);
parameters.set('tag', affiliateId);
baseURL.search = parameters.toString();
return baseURL.href;
const dpMatch = baseURL.pathname.match(/(.*)\/dp\/([A-Z0-9]{10})/g);
if (dpMatch?.[0]) {
// Rebuild the URL with the '/dp/[ASIN]' pattern
baseURL.pathname = dpMatch[0] + '/ref=nosim';
const parameters = new URLSearchParams();
parameters.set('tag', affiliateId);
baseURL.search = parameters.toString();
return baseURL.href;
} else {
return url;
}
}

function generateAliExpressAffiliateLink(url, affiliateId) {
Expand Down

0 comments on commit ebb1a54

Please sign in to comment.