use DelayQueue to track offer lifecycle events, refactor API for clarity