bitbox-api 0.12.0

A library to interact with BitBox hardware wallets
Documentation
# BitBox02 Rust and TypeScript library

This repo contains both a BitBox02 client library for Rust and for TypeScript. The latter is
produced from the Rust code using [Rust WASM](https://rustwasm.github.io/docs/book/).

## Rust

See [README-rust.md](../README-rust.md).

## TypeScript

The NPM package's README is located at [README-npm.md](../README-npm.md).

The version of NPM package is defined in [NPM_VERSION](../NPM_VERSION).

To build the TypeScript library, follow these steps:

Install wasm-pack using:

    cargo install wasm-pack

If not yet installed, install clang so libsecp256k1 can be cross compiled, e.g. on Ubuntu:

    sudo apt-get install clang

Also install the `jq` tool:

    sudo apt-get install jq

The Rust library can be compiled to WASM package including TypeScript definitions using:

    make wasm

The output of this compilation will be in `./pkg`, which is a NPM package ready to be used.

### M1 Macs

The default system clang installation currently cannot build wasm32 targets on M1 Macs.
Therefore a new clang compiler and archiver needs to be installed via:

    brew install llvm

In order to use that new clang compiler and archiver specify it when runing `make wasm`:

    AR=/opt/homebrew/opt/llvm/bin/llvm-ar CC=/opt/homebrew/opt/llvm/bin/clang make wasm

## Sandbox

A demo React project showcasing the TypeScript API. See [sandbox](../sandbox).

## Command to update the BitBox02 protobuf message files

Normally, Prost protobuf files are generated in `build.rs` during each compilation. This has a
number of downsides:

- The generated .rs file is not committed and depends on the particular version of `prost-build`
  that is used, as well as on the system installation of the `protoc` compiler.
- As a consequence, re-building older version of this library might become tricky if the particular
  versions of these tools are not easy to install in the future.
- Downstream projects need to install `protoc` in order to build this library, on dev-machines, in
  CI scripts, etc.

By pre-generating the file and making it a regular committed source file, these problems fall away.

As a maintainer/developer of this library, to update the protobuf messages, follow these steps:

Clone the [BitBox02 firmware repo](https://github.com/digitalbitbox/bitbox02-firmware):

Make sure you have `protoc` installed:

On Ubuntu:

    sudo apt-get install protobuf-compiler

On MacOS:

    brew install protobuf

Install `rust-script`:

    cargo install rust-script

Then:

```sh
rm -rf messages/*.proto
cp /path/to/bitbox02-firmware/messages/*.proto messages/
rm messages/backup.proto
make build-protos
```

This will generate/update [src/shiftcrypto.bitbox02.rs](../src/shiftcrypto.bitbox02.rs).