{"_id":"@brandonxiang/ges","name":"@brandonxiang/ges","dist-tags":{"latest":"3.0.0"},"versions":{"3.0.0":{"name":"@brandonxiang/ges","version":"3.0.0","description":"gRPC experimental server that support koa-like interceptor","keywords":["grpc","koa","interceptor","server"],"author":{"name":"edvardchen"},"homepage":"https://github.com/edvardchen/node-grpc-experimental-server-interceptors/tree/master/packages/grpc-experimental-server#readme","license":"ISC","main":"lib/index.js","directories":{"lib":"lib","test":"__tests__"},"repository":{"type":"git","url":"git+https://github.com/edvardchen/node-grpc-experimental-server-interceptors.git"},"bugs":{"url":"https://github.com/edvardchen/node-grpc-experimental-server-interceptors/issues"},"scripts":{"prepublish":"tsc"},"peerDependencies":{"@grpc/grpc-js":"^1.1.5"},"dependencies":{"koa-compose":"^4.1.0"},"devDependencies":{"@grpc/grpc-js":"^1.1.5","@types/koa-compose":"^3.2.6","typescript":"^5.2.2"},"types":"./lib/index.d.ts","gitHead":"65dce5f705448cae5f0a637273fe463f4a5c716e","_id":"@brandonxiang/ges@3.0.0","_nodeVersion":"14.19.0","_npmVersion":"9.3.0","dist":{"integrity":"sha512-PK4P3AJsinJlKBgGqJxLKxl3DFoMiV/T/0lX87MT/N88sgl0WnNasGwpK6dcbKlKWMk1bEYGmsbpYDCKFzZOHw==","shasum":"5811f90638eea8e6c202bcebf8288e3cc328da95","tarball":"https://registry.npmjs.org/@brandonxiang/ges/-/ges-3.0.0.tgz","fileCount":5,"unpackedSize":11154,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHSU9nu8iywQyVwumRB0utqBAha0DMH3muNh5ZkyWQyaAiEA2qb6XcbpsPhVaZfbCdJWcpLGl5oWJqz29Kyr8TB8GFc="}]},"_npmUser":{"name":"brandonxiang","email":"1132500533@qq.com"},"maintainers":[{"name":"brandonxiang","email":"1132500533@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ges_3.0.0_1697017353870_0.1975280981714933"},"_hasShrinkwrap":false}},"time":{"created":"2023-10-11T09:42:33.769Z","3.0.0":"2023-10-11T09:42:34.109Z","modified":"2023-10-11T09:42:34.394Z"},"maintainers":[{"name":"brandonxiang","email":"1132500533@qq.com"}],"description":"gRPC experimental server that support koa-like interceptor","homepage":"https://github.com/edvardchen/node-grpc-experimental-server-interceptors/tree/master/packages/grpc-experimental-server#readme","keywords":["grpc","koa","interceptor","server"],"repository":{"type":"git","url":"git+https://github.com/edvardchen/node-grpc-experimental-server-interceptors.git"},"author":{"name":"edvardchen"},"bugs":{"url":"https://github.com/edvardchen/node-grpc-experimental-server-interceptors/issues"},"license":"ISC","readme":"# `grpc-experimental-server`\n\ngRPC experimental server that supports koa-like interceptors\n\n## Usage\n\n```bash\nnpm i ges grpc\n```\n\n```javascript\nimport ExperimentalServer from 'ges';\n\nconst server = new ExperimentalServer();\n\nserver.addService(/* ... */);\n\n// add interceptor\nserver.use(async (context, next) => {\n  // preprocess\n  const start = Date.now();\n  try {\n    await next();\n  } finally {\n    // postprocess\n    const costtime = Date.now() - start;\n    console.log('costtime is', costtime);\n    console.log('unary response is ', context.response);\n  }\n});\n\nserer.bind(/* ... */);\nserver.start();\n```\n\n`gRPC` has 4 kinds of call:\n\n| handle type               | request is stream or not | response is stream or not |\n| ------------------------- | :----------------------: | :-----------------------: |\n| handleUnaryCall           |            ❌            |            ❌             |\n| handleClientStreamingCall |            ✅            |            ❌             |\n| handleServerStreamingCall |            ❌            |            ✅             |\n| handleBidiStreamingCall   |            ✅            |            ✅             |\n\n### Context\n\n- `call` current gRPC call\n- `definition` the method definition of current call\n- `response` response if response is not `stream`\n- `onFinished(...)` you can listen on call finish event, no matter response of current call is stream or not. So you don't need to care about what kind is the call. **It is very useful to do something like `tracing`, `logging`**\n\n## Notes\n\n- `await next()` would wait the call to be finished if response is not stream.\n","readmeFilename":"README.md"}