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