I mean why are ther multiple objects that have to be sent instead of a single cbor object. And why is some of it cbor and some of it json?
The answer is as far as I know:
Backwards compatibility with bad decisions made in U2F
Also; relying on base64url is odd as there are no built in functions in JavaScript to encode and decode it.
I'm probably missing something, but aren't window.atob and window.btoa just that? It's not available in Node though.