frontend: replace timeouts with promises
frontend: asset file upload progress and abort