How npm Supply Chain Attacks Actually Work and How Teams Are Stopping Them