## BDLedger API ### Documentation See [API documentation](..\docs\apis.md) ### Development #### Generating gRPC code in languages ##### Installling tools Download the [Protocol Buffers compiler](https://github.com/protocolbuffers/protobuf/releases) (protoc-3.21.9-*)+ for your platform and add `protoc` to `PATH` environment variable For generating Go code, install `protoc-gen-go` (v1.28.1+): ```shell GIT_TAG="v1.28.1" go get -d -u google.golang.org/protobuf/cmd/protoc-gen-go git -C "$(go env GOPATH)"/src/google.golang.org/protobuf checkout $GIT_TAG go install google.golang.org/protobuf/cmd/protoc-gen-go ``` Also install `protoc-gen-go-grpc` v1.2.0+: ```shell go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc ``` Or install using [gobin](https://github.com/myitcv/gobin): ```shell gobin google.golang.org/protobuf/cmd/protoc-gen-go gobin google.golang.org/grpc/cmd/protoc-gen-go-grpc ``` For generating HTTP JSON APIs with [grpc-gateway](https://grpc-ecosystem.github.io/grpc-gateway/), follow the [documentation](https://github.com/grpc-ecosystem/grpc-gateway#installation). For generating validators install [go-proto-validators](https://github.com/mwitkow/go-proto-validators/tree/master/protoc-gen-govalidators): ```shell go get github.com/mwitkow/go-proto-validators/protoc-gen-govalidators ``` For generating Java code: From `bdledger-sdk-java` run `gradle generateProto` For generating Node.js code and/or TypeScript definitions), install Node.js then run: ```shell npm install ``` For frontend JavaScript: ```shell git clone https://github.com/grpc/grpc-web cd grpc-web sudo make install-plugin ``` References: - [Go Quick Start](https://grpc.io/docs/quickstart/go.html#prerequisites) - [gRPC Go FAQ](https://github.com/grpc/grpc-go#faq) **TODO: Look into [protobuf.js](https://github.com/protobufjs/protobuf.js) for Nodes.js and frontend** **TODO: Look into [Kroto+](https://github.com/marcoferrer/kroto-plus) for Kotlin** ##### Generating code Run: For generating TypeScript client code with `ts-proto`, run: ```shell invoke gen -t ts ``` For generating TypeScript definitions to be used with `@grpc/proto-loader`, run: ```shell invoke gen -t types ``` Others: ```shell ./scripts/gen [-a, --async] [go] [gohttp] [nodejs] [docs] ``` `nodejs`: For generating static Node.js code and TypeScript definitions Use `-a` or `--async` to speed up generation by asynchronously and concurrently generating all code and documentation ( script will exit without waiting for completion) #### Generateing documentation Install Go then run: ```shell go get -u github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc ./scripts/gen [-a, --async] docs ```