UNPKG

adonis-grpc-consumer

Version:

Adonis gRPC client provider for easily communicate with gRPC services

106 lines 5.45 kB
{ "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" }