https://www.npmjs.com/package/semaphore-async-await