rxjs-grpc
    TypeScript icon, indicating that this package has built-in type declarations

    0.2.6 • Public • Published

    Build Status npm version

    rxjs-grpc

    Installation

    $ npm install rxjs-grpc rxjs grpc

    Quickstart

    Create your protobuf definition file sample.proto:

    syntax = "proto3";
    
    package sample;
    
    service Greeter {
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    message HelloRequest {
      string name = 1;
    }
    
    message HelloReply {
      string message = 1;
    }

    Generate your TypeScript interfaces:

    $ ./node_modules/.bin/rxjs-grpc -o grpc-namespaces.ts *.proto

    Implement your typesafe server returning Observable<sample.HelloReply>:

    import { of } from 'rxjs';
    import { serverBuilder } from 'rxjs-grpc';
    import { sample } from './grpc-namespaces';
    
    // Pass the path of proto file and the name of namespace
    const server = serverBuilder<sample.ServerBuilder>('sample.proto', 'sample')
    // Add implementation
    server.addGreeter({
      sayHello(request: sample.HelloRequest) {
        return of({
          message: 'Hello ' + request.name
        });
      }
    })
    // Start the server to listen on port 50051
    server.start('0.0.0.0:50051');

    Call it from a client:

    import { clientFactory } from 'rxjs-grpc';
    import { sample } from './grpc-namespaces';
    
    // Pass the path of proto file and the name of namespace
    const Services = clientFactory<sample.ClientFactory>('sample.proto', 'sample');
    // Create a client connecting to the server
    const services = new Services('localhost:50051');
    // Get a client for the Greeter service
    const greeter = services.getGreeter();
    
    // Call the service by passing a sample.HelloRequest
    greeter.sayHello({ name: 'world' }).forEach(response => {
      console.log(`Greeting: ${response.message}`);
    });

    Generated interfaces

    import { Observable } from 'rxjs';
    
    export namespace sample {
    
      export interface ClientFactory {
        getGreeter(): sample.Greeter;
      }
    
      export interface ServerBuilder {
        addGreeter(impl: sample.Greeter): sample.ServerBuilder;
      }
    
      export interface Greeter {
        sayHello(request: sample.HelloRequest): Observable<sample.HelloReply>;
      }
    
      export interface HelloRequest {
        name?: string;
      }
    
      export interface HelloReply {
        message?: string;
      }
    
    }

    Examples

    You can see a simple example project in the examples folder.

    Keywords

    none

    Install

    npm i rxjs-grpc

    DownloadsWeekly Downloads

    559

    Version

    0.2.6

    License

    MIT

    Unpacked Size

    262 kB

    Total Files

    30

    Last publish

    Collaborators

    • kondi