šŸš€ Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more →
Socket
Sign inDemoInstall
Socket

grpc-pack

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

grpc-pack

Simpler use of grpc in Node.js

0.2.3
latest
Source
npm
Version published
Maintainers
1
Created
Source

gRPC Pack

Version License Forks Stars Watchers

Simpler use of grpc in Node.js.

Install

$ npm install grpc-pack or yarn add grpc-pack

Usage

Single Proto

  • Model and Service

    syntax = "proto3";
    
    package service;
    
    service Greeter {
      rpc Hello (Name) returns (Message) {}
    }
    
    message Name {
      string name = 1;
    }
    
    message Message {
      string message = 1;
    }
    

Server

const { createServer } = require('grpc-pack');
const server = createServer();

server.use({
  protoPath: 'path/to/directory_proto',
  protoName: 'greeter.proto',
  serviceName: 'Greeter',
  routes: {
    hello: (call, callback) => {
      callback(null, { message: `Hello, ${call.request.name}` });
    },
  },
});

server.listen('0.0.0.0:6969');

Client

const { createClient } = require('grpc-pack');
const client = createClient(
  {
    protoPath: 'path/to/directory_proto',
    protoName: 'greeter.proto',
    serviceName: 'Greeter',
  },
  '0.0.0.0:6969'
);

client.hello({ name: 'Seorang Eksa' }, (err, { message }) => {
  if(err) throw err;
  console.log(message);
});

Separate Proto Model and Service

  • Service

    syntax="proto3";
    
    package service;
    
    option go_package = "github.com/zoobc/zoobc-core/common/service";
    
    import "model/block.proto";
    import "google/api/annotations.proto";
    
    // BlockService represent request on Blockchain's Block
    service BlockService {
        rpc GetBlocks(model.GetBlocksRequest) returns (model.GetBlocksResponse) {
            option (google.api.http) = {
                get: "/v1/block/GetBlocks"
            };
        }
    }
    
  • Model

    // Block represent the block data structure stored in the database
    message Block {
      int64 ID = 1 [ jstype = JS_STRING ];
      uint32 Height = 2;
      string CumulativeDifficulty = 3;
      int64 TotalCoinBase = 4 [ jstype = JS_STRING ];
      uint32 Version = 5;
    }
    
    // BlockExtendedInfo represent the Block data plus part of block data not to be persisted to database
    message BlockExtendedInfo {
      Block Block = 1;
    }
    
    // GetBlocksRequest create request to get a list block
    message GetBlocksRequest {
      // Fetch block from `n` height
      uint32 Height = 1;
    }
    
    message GetBlocksResponse {
      // Number of block returned
      uint32 Count = 1;
      // Blocks height returned from
      uint32 Height = 2;
      // Blocks returned
      repeated Block Blocks = 3;
    }
    

Server

const { createServer } = require('grpc-pack');
const server = createServer();
const mockup = [
  {
    ID: '1',
    Height: 1,
    CumulativeDifficulty: 'Test 1',
    TotalCoinBase: 10000,
    Version: 1,
  },
  {
    ID: '2',
    Height: 2,
    CumulativeDifficulty: 'Test 2',
    TotalCoinBase: 20000,
    Version: 1,
  },
  {
    ID: '3',
    Height: 2,
    CumulativeDifficulty: 'Test 3',
    TotalCoinBase: 30000,
    Version: 1,
  },
];

server.use({
  protoPath: 'path/to/directory_proto',
  protoName: 'block.proto',
  servicePath: 'service',
  serviceName: 'BlockService',
  routes: {
    GetBlocks: (call, callback) => {
      const Height = call.request.Height;
      const Blocks = Height > 0 ? mockup.filter(f => f.Height === Height) : mockup;
      const Count = Blocks.length;
      const GetBlocksResponse = {
        Count,
        Height,
        Blocks,
      };
      callback(null, GetBlocksResponse);
    },
  },
});

server.listen('0.0.0.0:6969');

Client

const { createClient } = require('grpc-pack');
const client = createClient(
  {
    protoPath: 'path/to/directory_proto',
    protoName: 'block.proto',
    servicePath: 'service',
    serviceName: 'BlockService',
  },
  '0.0.0.0:6969'
);

const params = { Height: 1 };
client.GetBlocks(params, (err, res) => {
  if(err) throw err;
  console.log(res);
});

License

This project is licensed under the MIT License - see the LICENSE file for details

Keywords

grpc

FAQs

Package last updated on 17 Dec 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts