Не ответ на полный вопрос, но я думаю, что стоит упомянуть, что в Node.js 10 была добавлена новая функция использования, названная isPromise
, которая проверяет, является ли объект родным обещанием или не:
const utilTypes = require('util').types
const b_Promise = require('bluebird')
utilTypes.isPromise(Promise.resolve(5)) // true
utilTypes.isPromise(b_Promise.resolve(5)) // false