Promise + progress + pause + cancel + retry, using SwiftState (state machine).