I don't think you can get rid of all your boilerplate, but you could implement a custom trait for Result<T, B2Error> to turn it into a Result<T, ErrorWrapper>.
A more robust solution is submitting a pull request adding an Error implementation to the backblaze crate.
A custom trait that then gets picked up by the question mark operator to do the conversion? I thought it's called Try, but I can't find the docs right now.
You can implement impl From<B2Error> for ErrorWrapper this should allow to use the ? on Result<T, B2Error> in functions that return Result<T, ErrorWrapper> but only in those cases. If you return Result<T, Box<dyn Error>> Rust can not decide which into() implementation should be used.
To reduce the boilerplate a little bit you can use a custom extension trait like:
You are welcome to submit PRs to the synchronous version of the library, and I will happily review them, merge them, and publish them. That said, I'm not going to be working on the library for a while.
It is an oversight that it does not implement the Error trait.
Note also that a friend of mine wrote the raze crate, which has the same purpose, except that it has no plans to add an asynchronous api. It may suit your purposes better.