js-algorand-sdk
js-algorand-sdk copied to clipboard
Stop using `Buffer` in browser code
Summary
We use the npm buffer package to allow our library to use node's Buffer
class in the browser.
I think we should stop doing this for a few reasons:
- buffer does not appear to be maintained anymore, as it hasn't been updated in ~2 years and has numerous issue and PRs open.
- Webpack v4 projects provide an even older version of buffer, and we're unable to do anything about it. This is pretty concerning, as we don't test with this older version.
- Most of our
Buffer
usage seems to be encoding and decoding base64. We should be able to do this in the browser withoutBuffer
.
Suggestions
Instead of relying on a browser Buffer
implementation, we could make better use of Uint8Array
and Dataview
, which are supported in both node and browser. Some things will still require Buffer
usage in node (like base64 encoding), but we can investigate ways to have an alternative code path for browsers.
There are a few public APIs which reference Buffer
, so changing these would likely have to wait for a major release of the library.
https://github.com/algorand/js-algorand-sdk/issues/742 doesn't use buffers
Some things will still require Buffer usage in node (like base64 encoding), but we can investigate ways to have an alternative code path for browsers.
@jasonpaulos why does base64 encoding require it?
@algoanne require is a bit of a strong word, but using Buffer
for base64 encoding is likely the easiest/most efficient option for node, so that's why I suggested continuing to use it there. It is however not a strict requirement.