Modernize Node EventEmitter Code

Convert low-level EventEmitter patterns into clearer async flows.

category:modernization
node
eventemitter
async
backend
0

Prompt

Refactor this EventEmitter-based flow into modern patterns.

Options:
- Replace one-off events with async function calls returning Promises
- Use observables or pub/sub only when there's a clear benefit
- Simplify error channels
- Remove fragile string event names where possible

Explain your design choices and how they improve maintainability.