adonis-grpc-consumer
Version:
Adonis gRPC client provider for easily communicate with gRPC services
106 lines • 5.45 kB
JSON
{
"adonisjs": {
"providers": [
"adonis-grpc-consumer"
],
"templates": {
"config": [
"grpc-consumer.txt"
]
},
"types": "adonis-grpc-consumer"
},
"author": "Julien Ripouteau <julien@ripouteau.com>",
"bin": {
"build-proto": "./node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js"
},
"bugs": {
"url": "https://github.com/Julien-R44/adonis-grpc-consumer/issues"
},
"dependencies": {
"@grpc/grpc-js": "^1.6.7",
"@grpc/proto-loader": "^0.6.9"
},
"description": "Adonis gRPC client provider for easily communicate with gRPC services",
"devDependencies": {
"@adonisjs/core": "^5.7.5",
"@adonisjs/mrm-preset": "^5.0.3",
"@adonisjs/require-ts": "^2.0.11",
"@types/node": "^17.0.30",
"bumpp": "^7.1.1",
"copyfiles": "^2.4.1",
"del-cli": "^4.0.1",
"eslint": "^8.14.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-adonis": "^2.1.0",
"eslint-plugin-prettier": "^4.0.0",
"japa": "^4.0.0",
"mrm": "^3.0.10",
"prettier": "^2.6.2",
"typescript": "^4.6.4"
},
"eslintConfig": {
"extends": [
"plugin:adonis/typescriptPackage",
"prettier"
],
"plugins": [
"prettier"
],
"rules": {
"prettier/prettier": [
"error",
{
"endOfLine": "auto"
}
]
}
},
"eslintIgnore": [
"build"
],
"files": [
"build/adonis-typings",
"build/providers",
"build/src",
"build/templates"
],
"homepage": "https://github.com/Julien-R44/adonis-grpc-consumer#readme",
"keywords": [
"adonis5",
"adonisjs",
"grpc"
],
"license": "MIT",
"main": "build/providers/GrpcConsumerProvider.js",
"name": "adonis-grpc-consumer",
"prettier": {
"arrowParens": "always",
"bracketSpacing": true,
"printWidth": 100,
"quoteProps": "consistent",
"semi": false,
"singleQuote": true,
"trailingComma": "es5",
"useTabs": false
},
"repository": {
"type": "git",
"url": "git+https://github.com/Julien-R44/adonis-grpc-consumer.git"
},
"typings": "./build/adonis-typings/index.d.ts",
"version": "0.1.2",
"scripts": {
"build": "npm run compile && npm run copyfiles",
"clean": "del-cli build",
"compile": "npm run lint && npm run clean && tsc",
"copyfiles": "copyfiles \"templates/**/*.txt\" build",
"format": "prettier --write .",
"lint": "eslint . --ext=.ts",
"mrm": "mrm --preset=@adonisjs/mrm-preset",
"pretest": "npm run lint",
"release": "bumpp --commit --push --tag && pnpm publish",
"test": "node .bin/test.js"
},
"readme": "<div align=\"center\">\n <img src=\"https://i.imgur.com/iiuiVlq.png\" width=\"250px\" /> \n <br/>\n <h3>Adonis gRPC Consumer</h3>\n <p>Communicate easily with gRPC services in Adonis</p>\n <a href=\"https://www.npmjs.com/package/adonis-grpc-consumer\">\n <img src=\"https://img.shields.io/npm/v/adonis-grpc-consumer.svg?style=for-the-badge&logo=npm\" />\n </a>\n <img src=\"https://img.shields.io/npm/l/adonis-grpc-consumer?color=blueviolet&style=for-the-badge\" />\n <img src=\"https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge&logo=typescript\" />\n</div>\n\n## Installation\n\n```\nnpm i adonis-grpc-consumer\nnode ace configure adonis-grpc-consumer\n```\n\n## Usage Example\n\nFirst of all, you need to create a \"proto\" folder at the root of your Adonis project in which you will obviously store your protobuf definition files.\n\nmy-app/proto/myService.proto :\n```protobuf\nsyntax = \"proto3\";\npackage my_service;\n\nmessage Empty {}\nservice MyService {\n rpc SendMessage (SendMessageRequest) returns (Empty) {};\n}\n\nmessage SendMessageRequest {\n string message = 1;\n}\n```\n\nNow you have to generate the type definitions for typescript. To do this, run :\n```\nnpx build-proto --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=./proto/ ./proto/*.proto\n```\n`build-proto` is an executable from `@grpc/proto-loader` package ( `proto-loader-gen-types` ) that is embedded in `adonis-grpc-consumer`.\n\nIf everything went well, in my-app/proto/ you should find your TS definition files next to your .proto file.\n\nNow we go back to Adonis, we will add our freshly created service as a consumable service, in config/grpc-consumer.ts : \n```typescript\nlet grpcConfig: GrpcConsumerConfig = {\n verbose: true,\n clients: [\n {\n name: 'MY_SERVICE',\n options: {\n package: 'my_service',\n serviceName: 'MyService',\n protoPath: path.join(__dirname + '/../proto/myService.proto'),\n url: '127.0.0.1:4545', // Don't forget to add your service url here\n },\n },\n ],\n}\n\nexport default grpcConfig\n```\n\nTry to launch your application, in case everything went well, you should see the following message (only with `verbose: true`):\n```\n[GRPC] Client MY_SERVICE connected !\n```\n\nTo use our service and call the `SendMessage` function defined in the protobuf file, we do the following: \n\n```typescript\nimport GrpcConsumer, { grpc } from '@ioc:Adonis/Addons/GrpcConsumer'\nimport { MyServiceClient } from 'proto/my_service/MyService'\n\nconst client = GrpcConsumer.getClient<MyServiceClient>('MY_SERVICE')\nclient.SendMessage({ message: 'hello !' }, (error?: grpc.ServiceError) => {\n if (error) {\n console.error(error.message)\n }\n }\n)\n```\n"
}