Udało mi się rozwiązać problem.
Problem nie dotyczył poniższego kodu
await session.commitTransaction(); (success)
session.endSession(); (failure)
} catch (error) { (entered)
await session.abortTransaction(); (invoked)
ale tak było z pętlą records.forEach.
records.forEach(async (el: any) => {...});
wewnątrz foreach podczas zgłaszania błędu nie jest on przechwytywany przez zewnętrzny blok try catch, ponieważ zawartość wewnątrz pętli znajduje się w innym kontekście funkcjonalnym niż kod poza pętlą.
Kiedy zmieniłem pętlę z .forEach
do
for (const el of records) {}
działa zgodnie z oczekiwaniami. Wysyłanie odpowiedzi na wypadek, gdyby ktoś spotkał się z tym samym w przyszłości. Dzięki za wsparcie :)