{
  "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"
}