we have a lot of operations that are asynchronous... what happens if we get 1 call while a previous call has not finished yet?

I'm sorry of thinking about this so late, but probably we need to separate the part that receives the message from the part that handles the message... Doing something like a task runner, and a task scheduler.

When all the promise-based functions will be done, I think it will be easier to do it, so maybe do the promise stuff first, and only then try to separate this in 2 parts.