В каком месте JS примитивный?
Сейчас у него одна из сложнейших экосистем с очень долгим временем до джуна.
Потому что трейни поймет джуна, но может не понять мидла
код с 10 последовательными именованными колбеками
Переписал как два асинк метода
Библиотеку async в свое время не от хорошей жизни использовали.
неплохо бы каждую функцию пояснять с помощью jsdoc, понятно что у нас будет с коллбеками.
В коллбек передаем маленькую лямбду, которая забирает все что нужно из замыкания и передает на вход именованной.
Линейное полотно из промисов воспринимается проще.
HttpContext, которая ничего не делает, кроме проксирования вызовов к этому классу и потому в тестировании не нуждается. При этом любые такие вызовы (даже статические) делаются от экземпляра класса. Это позволит легко заменять его на Mock. Он будет зависимостью AuthUserService.AuthUserService не подходит потому, что он содержит логику. Кстати, странно, что сервис аутентификации не содержит самой аутентификации) Я бы назвал это LoginService
Отлаживать. Задача - определить, на каком шаге программа падает. Как умеете. Если умеете пользоваться дебаггером - прогуляться с ним по алгоритму. Или по-колхозному - отладочной печатью, вставляя лог-записи перед и после каждой подозрительной операции.
А когда появятся конкретные вопросы - приходите снова.