Успях да разреша проблема.
Проблемът не беше с кода по-долу
await session.commitTransaction(); (success)
session.endSession(); (failure)
} catch (error) { (entered)
await session.abortTransaction(); (invoked)
но беше с цикъла records.forEach.
records.forEach(async (el: any) => {...});
вътре в foreach, когато хвърля грешка, тя не се улавя от най-външния блок try catch, тъй като съдържанието вътре в цикъла е в различен функционален контекст от кода извън цикъла.
Веднъж промених цикъла от .forEach
до
for (const el of records) {}
работи според очакванията. Публикуване на отговора в случай, че някой се сблъска със същото в бъдеще. Благодаря за подкрепата момчета :)