Aliexpress min price

Update minimum available price

// ==UserScript==
// @name         Aliexpress min price
// @namespace    https://greasyfork.org/en/scripts/374715-aliexpress-min-price
// @version      0.3
// @author       Mateusz Kula
// @description  Update minimum available price
// @icon         https://kulam.pl/script/aliexpress-min%20price/icon.jpg
// @icon64       https://kulam.pl/script/aliexpress-min%20price/icon.jpg
// @supportURL   https://kulam.pl/kontakt
// @match        https://*.aliexpress.com/*
// @match        http://*.aliexpress.com/*
// @match        http://aliexpress.com/*
// @match        https://aliexpress.com/*
// @grant        GM_registerMenuCommand
// @grant        unsafeWindow
// @homepageURL  https://kulam.pl


// ==/UserScript==

var displaySwitch = true; //show min price [true/false]
var replaceSwitch = false; //deprecated! replace aliexpress min price [true/false]
var alertSwitch = true; //show min price and quantity, [true/false]
var showCheapestVariantName = true;//show names of cheaper item

var cheapestVariantName = [];
var skuProducts = unsafeWindow.runParams.data.skuModule.skuPriceList;
if (alertSwitch || displaySwitch || showCheapestVariantName) {
	var first = true;
	for (var counter = 0; counter < skuProducts.length; counter++) {
		if (+skuProducts[counter].skuVal.availQuantity > 0) {

			var price = null;
			if (skuProducts[counter].skuVal.skuActivityAmount && skuProducts[counter].skuVal.skuActivityAmount.value) { price = 'skuActivityAmount'; }
			else {
				price = 'skuAmount';
			}

			if (first)//set first available item price as min
			{
				var mini = +skuProducts[counter].skuVal[price].value;
				var quantity = +skuProducts[counter].skuVal.availQuantity;
				first = false;
				cheapestVariantName.push(skuProducts[counter].skuAttr);
			}
			else {
				if (+skuProducts[counter].skuVal[price].value <= mini)//found lower/the same price price
				{
					if (+skuProducts[counter].skuVal[price].value < mini)//lower price
					{
						mini = +skuProducts[counter].skuVal[price].value; quantity = +skuProducts[counter].skuVal.availQuantity;
						cheapestVariantName = [];
						cheapestVariantName.push(skuProducts[counter].skuAttr);
					}
					else//same price
					{
						quantity += +skuProducts[counter].skuVal.availQuantity;
						cheapestVariantName.push(skuProducts[counter].skuAttr);
					}
				}
			}
		}
	}
}
var cheapestProductsNames = parseItemsAttr(cheapestVariantName);
if (displaySwitch && +mini > 0) {
	var productPriceCurrent = document.querySelector('.product-info div.product-price-current,.product-info .uniform-banner-box-price');
	var miniNode = document.createElement("span");
	miniNode.innerHTML = ('<span id="aliminprice" style="cursor: help;">[' + mini + '] </span>');
	miniNode.title = cheapestProductsNames;
	productPriceCurrent.insertBefore(miniNode, productPriceCurrent.childNodes[0]);
}

function parseItemsAttr(cheapestVariantName) {
	//arrayOfItems example: ["14:200002984#Shape28;5:361386;154:1433"]
	var items = cheapestVariantName.map(parseItemAttr);
	/*
	items example:
	[
		[
			{"Id":"14","ValueId":"200002984"},{"Id":"5","ValueId":"361386"},{"Id":"154","ValueId":"1433"}
		]
	]
	*/
	var productsNamesArray = items.map(findProductNames);
	//productNames example: ["Shape28:M:3PCS","Shape30:L:3PCS"]
	var productNamesS = productsNamesArray.join(", \n");
	return productNamesS;

}
function parseItemAttr(e, i) {
	//e example: 14:200002984#Shape28;5:361386;154:1433
	const properties = e.split(";").map(formatProp);
	return properties;
}
function formatProp(e, i) {
	var temp = e.split(":");
	var prop = { Id: temp[0], ValueId: temp[1].split("#")[0] }
	return prop;
}
function findProductNames(e, i) {
	//e example:  {"Id":"14","ValueId":"200002984"},{"Id":"5","ValueId":"361386"},{"Id":"154","ValueId":"1433"}
	var productNames = e.map(productName)
	return productNames.join(" + ");
}
function productName(e, i) {
	//e example: {"Id":"14","ValueId":"200002984"}
	//search
	var productSKUPropertyList = unsafeWindow.runParams.data.skuModule.productSKUPropertyList;
	var productSKUPropertyListElement = productSKUPropertyList.find(({ skuPropertyId }) => skuPropertyId == e.Id);
	var skuPropertyValues = productSKUPropertyListElement.skuPropertyValues.find(({ propertyValueId }) => propertyValueId == e.ValueId);
	return skuPropertyValues.propertyValueDisplayName;
}

function formatSkuAttr(skuAttr) {
	let name = "";
	const specs = skuAttr.split(';');
	specs.forEach(function (spec) {
		const specName = spec.split('#');
		if (specName.length == 2) { name += specName[1] + " | "; }
		else { name += "name not found "; }
	});
	return name
}

GM_registerMenuCommand('Ali min price', function find() {
	if (alertSwitch) {
		var minPriceAlertMessage = "";
		if (first == true) { minPriceAlertMessage = "not found\n"; }
		else {
			minPriceAlertMessage = "minimum price: " + mini + "\nquantity: " + quantity + "\n Variants:\n" + cheapestProductsNames;
		}
		alert(minPriceAlertMessage);
	}

}, 'q');