gRPC-Web client for browsers (JS/TS)
npm install @injectivelabs/grpc-webThis library is intended for both JavaScript and TypeScript usage from a web browser or NodeJS (see Usage with NodeJS).
Note: This only works if the server supports gRPC-Web
A Golang gRPC-Web middleware and a Golang-based gRPC-Web proxy are available here.
Please see the full gRPC-Web README for known limitations.
@improbable-eng/grpc-web has peer dependencies of google-protobuf and @types/google-protobuf.
npm install google-protobuf @types/google-protobuf @improbable-eng/grpc-web --save
There is an example project available here
ts-protoc-gen with protoc to generate .js and .d.ts files for your request and response classes. ts-protoc-gen can also generate gRPC service definitions with the service=true argument.unary(), invoke() or client()``javascript
import {grpc} from "@injectivelabs/grpc-web";
// Import code-generated data structures.
import {BookService} from "./generated/proto/examplecom/library/book_service_pb_service";
import {GetBookRequest} from "./generated/proto/examplecom/library/book_service_pb";
const getBookRequest = new GetBookRequest();
getBookRequest.setIsbn(60929871);
grpc.unary(BookService.GetBook, {
request: getBookRequest,
host: host,
onEnd: res => {
const { status, statusMessage, headers, message, trailers } = res;
if (status === grpc.Code.OK && message) {
console.log("all ok. got book: ", message.toObject());
}
}
});
`
* Requests can be aborted/closed before they complete:
`javascript`
const request = grpc.unary(BookService.GetBook, { ... });
request.close();
There are three functions for making gRPC requests:
`protobuf`
rpc GetBook(GetBookRequest) returns (Book) {}
`protobuf`
rpc GetBook(GetBookRequest) returns (Book) {}
rpc QueryBooks(QueryBooksRequest) returns (stream Book) {}
returns a client. Dependant upon transport compatibility this client is capable of sending multiple request messages (client-streaming) and receiving multiple response messages (server-streaming). It can be used with any type of method, but will enforce limiting the sending of messages for unary methods.`protobuf
rpc GetBook(GetBookRequest) returns (Book) {}
rpc QueryBooks(QueryBooksRequest) returns (stream Book) {}
rpc LogReadPages(stream PageRead) returns (google.protobuf.Empty) {}
rpc ListenForBooks(stream QueryBooksRequest) returns (stream Book) {}
``* unary()
* invoke()
* client()
* Code Generation
* Concepts
* Transport
* Client-side streaming