{"_id":"nice-grpc","_rev":"3816372","name":"nice-grpc","description":"A Node.js gRPC library that is nice to you","dist-tags":{"latest":"2.1.12"},"maintainers":[{"name":"aikoven","email":""}],"time":{"modified":"2025-06-05T11:30:07.000Z","created":"2021-02-08T10:37:23.363Z","2.1.12":"2025-03-26T10:45:10.308Z","2.1.11":"2025-02-18T14:01:33.350Z","2.1.10":"2024-09-24T07:19:16.514Z","2.1.9":"2024-06-06T18:13:50.203Z","2.1.8":"2024-03-11T15:25:19.044Z","2.1.7":"2023-10-19T14:08:07.459Z","2.1.6":"2023-10-17T16:18:15.229Z","2.1.5":"2023-07-16T10:14:38.861Z","2.1.4":"2023-03-31T21:29:05.057Z","2.1.3":"2023-03-21T10:47:29.248Z","2.1.2":"2023-03-11T09:35:37.548Z","2.1.1":"2023-03-05T21:24:23.909Z","2.1.0":"2023-01-18T05:49:01.505Z","2.0.1":"2022-11-02T12:44:30.202Z","2.0.0":"2022-08-11T10:14:40.173Z","1.2.2":"2022-08-01T03:52:31.666Z","1.2.1":"2022-07-28T07:13:41.562Z","1.2.0":"2022-05-04T02:40:39.031Z","1.1.1":"2022-04-18T03:15:03.935Z","1.1.0":"2022-04-04T03:18:24.247Z","1.0.8":"2022-03-09T04:12:36.160Z","1.0.7":"2022-03-05T11:17:38.451Z","1.0.6":"2022-01-16T06:21:45.915Z","1.0.5":"2022-01-16T04:01:51.681Z","1.0.4":"2021-09-21T06:54:01.375Z","1.0.3":"2021-07-01T10:30:15.607Z","1.0.2":"2021-06-30T07:10:39.561Z","1.0.1":"2021-06-29T04:49:28.601Z","1.0.0":"2021-06-29T04:25:46.881Z","0.1.5":"2021-05-26T04:35:18.701Z","0.1.4":"2021-04-16T10:07:38.214Z","0.1.3":"2021-03-01T07:48:18.187Z","0.1.2":"2021-02-14T06:48:00.319Z","0.1.1":"2021-02-14T05:33:33.354Z","0.1.0":"2021-02-08T10:37:23.363Z"},"users":{},"author":"Daniel Lytkin <aikoven@deeplay.io>","repository":"deeplay-io/nice-grpc","versions":{"2.1.12":{"name":"nice-grpc","version":"2.1.12","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":"deeplay-io/nice-grpc","main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":"Daniel Lytkin <aikoven@deeplay.io>","license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/google-protobuf":"^3.7.4","@types/node":"^18.0.0","defer-promise":"^2.0.1","google-protobuf":"^3.14.0","grpc-tools":"^1.12.4","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^2.5.1"},"dependencies":{"@grpc/grpc-js":"^1.13.1","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"7458e8a57aec763d854c2e6eb119bfe6820b17dd","_nodeVersion":"20.12.2","_npmVersion":"lerna/8.1.9/node@v20.12.2+arm64 (darwin)","_id":"nice-grpc@2.1.12","dist":{"shasum":"56ffdcc4d5bc3d0271c176210680c4bd10c5149b","size":36046,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.12.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.12.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nice-grpc_2.1.12_1742985910131_0.8713773081401528"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-03-26T10:45:10.308Z","publish_time":1742985910308,"_source_registry_name":"default","_cnpm_publish_time":1742985910308},"2.1.11":{"name":"nice-grpc","version":"2.1.11","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":"deeplay-io/nice-grpc","main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":"Daniel Lytkin <aikoven@deeplay.io>","license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/google-protobuf":"^3.7.4","@types/node":"^18.0.0","defer-promise":"^2.0.1","google-protobuf":"^3.14.0","grpc-tools":"^1.12.4","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^2.5.1"},"dependencies":{"@grpc/grpc-js":"^1.10.8","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"b2d568504d2d0409eb4a25a6adbd25a5346a4c34","_nodeVersion":"20.12.2","_npmVersion":"lerna/8.1.9/node@v20.12.2+arm64 (darwin)","_id":"nice-grpc@2.1.11","dist":{"shasum":"18136ef6971a111b240145be575058408d2e4ecf","size":36046,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.11.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.11.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nice-grpc_2.1.11_1739887293076_0.11541291143201016"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-02-18T14:01:33.350Z","publish_time":1739887293350,"_source_registry_name":"default","_cnpm_publish_time":1739887293350},"2.1.10":{"name":"nice-grpc","version":"2.1.10","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":"deeplay-io/nice-grpc","main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":"Daniel Lytkin <aikoven@deeplay.io>","license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/google-protobuf":"^3.7.4","@types/node":"^18.0.0","defer-promise":"^2.0.1","google-protobuf":"^3.14.0","grpc-tools":"^1.12.4","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.10.8","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"a164fb1b6dfd0e329da80d00bc9cdcc5bad369de","_nodeVersion":"20.12.2","_npmVersion":"lerna/8.1.7/node@v20.12.2+arm64 (darwin)","_id":"nice-grpc@2.1.10","dist":{"shasum":"64355848951a143fc2a2d40d1d6b0f49f47567bb","size":35816,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.10.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.10_1727162356277_0.8790832999368945"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-09-24T07:19:16.514Z","publish_time":1727162356514,"_source_registry_name":"default","_cnpm_publish_time":1727162356514},"2.1.9":{"name":"nice-grpc","version":"2.1.9","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/google-protobuf":"^3.7.4","@types/node":"^18.0.0","defer-promise":"^2.0.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.10.8","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"706e43411400630c951a391695ca639f2af4d943","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.9","_nodeVersion":"18.20.2","_npmVersion":"lerna/8.1.3/node@v18.20.2+arm64 (darwin)","dist":{"shasum":"5c4b26e7051eebd31b5f54ce1348524ab151ee2d","size":35974,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.9.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.9_1717697630023_0.3577429216127932"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-06-06T18:13:50.203Z","publish_time":1717697630203,"_source_registry_name":"default","_cnpm_publish_time":1717697630203},"2.1.8":{"name":"nice-grpc","version":"2.1.8","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"~1.9.14","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"2d8eccc332adbf869b6450efe5de14125d7cb4e6","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.8","_nodeVersion":"18.18.1","_npmVersion":"lerna/8.1.2/node@v18.18.1+arm64 (darwin)","dist":{"shasum":"2d26eae2470573d692c5fdded1b5be7a30d48aac","size":35314,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.8.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.8_1710170718888_0.9858445174457442"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-03-11T15:25:19.044Z","publish_time":1710170719044,"_source_registry_name":"default","_cnpm_publish_time":1710170719044},"2.1.7":{"name":"nice-grpc","version":"2.1.7","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.9.5","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"fa26b226f2ab9f5cdaae1773b0064d7d4c84544a","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.7","_nodeVersion":"18.18.1","_npmVersion":"lerna/6.6.2/node@v18.18.1+arm64 (darwin)","dist":{"shasum":"0ad0495dee85514f0d895e3797cedc8eabd0462f","size":35332,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.7.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.7_1697724487202_0.9048504153284729"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-10-19T14:08:07.459Z","publish_time":1697724487459,"_source_registry_name":"default","_cnpm_publish_time":1697724487459},"2.1.6":{"name":"nice-grpc","version":"2.1.6","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.9.5","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"dcb7b98bb34e99d16e276e806fdccad60e6072ab","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.6","_nodeVersion":"18.18.1","_npmVersion":"lerna/6.6.2/node@v18.18.1+arm64 (darwin)","dist":{"shasum":"7a1d13c5a4c07a70383218d61de35e7ff12a9c2e","size":35161,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.6.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.6_1697559494900_0.8026614642566461"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-10-17T16:18:15.229Z","publish_time":1697559495229,"_source_registry_name":"default","_cnpm_publish_time":1697559495229},"2.1.5":{"name":"nice-grpc","version":"2.1.5","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^14.1.0","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.8.18","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"e25d70ac3d241c17781797bfd075f2ade2f28268","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.5","_nodeVersion":"18.15.0","_npmVersion":"lerna/6.6.2/node@v18.15.0+x64 (darwin)","dist":{"shasum":"8d547b713e76b9df467aca1aa0fd65191b8bb03b","size":36003,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.5.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.5_1689502478594_0.5047582705921778"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-07-16T10:14:38.861Z","publish_time":1689502478861,"_source_registry_name":"default","_cnpm_publish_time":1689502478861},"2.1.4":{"name":"nice-grpc","version":"2.1.4","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^1.0.3","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.7.3","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.2"},"gitHead":"a2987f236be78513ea607faf691c9471d640bd0e","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.4","_nodeVersion":"18.15.0","_npmVersion":"lerna/6.5.1/node@v18.15.0+x64 (darwin)","dist":{"shasum":"f0d2fe5879ed55157be672b2691242a800339ce0","size":36002,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.4.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.4_1680298144841_0.1944203388907042"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-03-31T21:29:05.057Z","publish_time":1680298145057,"_cnpm_publish_time":1680298145057},"2.1.3":{"name":"nice-grpc","version":"2.1.3","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^1.0.3","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.7.3","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.1"},"gitHead":"0e773a1697c7fdcacdf9a244f78e813577c8c8bd","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.3","_nodeVersion":"18.15.0","_npmVersion":"lerna/6.5.1/node@v18.15.0+x64 (darwin)","dist":{"shasum":"13b72d0aaa24db403d7667d5213d6bd97cf9a27f","size":34069,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.3.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.3_1679395649056_0.21539397787412273"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-03-21T10:47:29.248Z","publish_time":1679395649248,"_cnpm_publish_time":1679395649248},"2.1.2":{"name":"nice-grpc","version":"2.1.2","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^1.0.3","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.7.3","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.1"},"gitHead":"b7da78d63a8d75858755778197fa90ae43900fd7","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.2","_nodeVersion":"16.19.1","_npmVersion":"lerna/6.5.1/node@v16.19.1+x64 (darwin)","dist":{"shasum":"83f4199740c108d9cf5f970a23e07d7ad3b01c54","size":33997,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.2.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.2_1678527337353_0.5987774294166319"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-03-11T09:35:37.548Z","publish_time":1678527337548,"_cnpm_publish_time":1678527337548},"2.1.1":{"name":"nice-grpc","version":"2.1.1","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^1.0.3","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.7.3","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.1"},"gitHead":"32f276646579d3fdb7ae18fc72bb17c1b86b5ef3","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.1","_nodeVersion":"18.12.1","_npmVersion":"lerna/6.5.1/node@v18.12.1+x64 (darwin)","dist":{"shasum":"e40e9e94000cceaa1bce7eaeecf48cb184ecfc1e","size":33975,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.1.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.1_1678051463722_0.08151149381754208"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-03-05T21:24:23.909Z","publish_time":1678051463909,"_cnpm_publish_time":1678051463909},"2.1.0":{"name":"nice-grpc","version":"2.1.0","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^1.0.3","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.7.3","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.1"},"gitHead":"090b1090ea4ac6859d7f240386fdac48415c1969","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.1.0","_nodeVersion":"18.12.1","_npmVersion":"lerna/6.3.0/node@v18.12.1+x64 (darwin)","dist":{"shasum":"ee2546db9aed6fde55972768c1adcc0925f9f06f","size":33740,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.1.0.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.1.0_1674020941306_0.06000009952161456"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-01-18T05:49:01.505Z","publish_time":1674020941505,"_cnpm_publish_time":1674020941505},"2.0.1":{"name":"nice-grpc","version":"2.0.1","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^1.0.3","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.7.3","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.0"},"gitHead":"b0afa3e8c3c1c471f9b1307b122cc434da2c2151","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.0.1","_nodeVersion":"16.14.2","_npmVersion":"lerna/6.0.1/node@v16.14.2+x64 (darwin)","dist":{"shasum":"6de22f841efded64e544625c331d61710db966f1","size":33613,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.0.1.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.0.1_1667393070012_0.3920762340703221"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-11-02T13:03:18.202Z","publish_time":1667393070202,"_cnpm_publish_time":1667393070202},"2.0.0":{"name":"nice-grpc","version":"2.0.0","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node14":"^1.0.3","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/node":"^14.18.23","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.6.1","abort-controller-x":"^0.4.0","nice-grpc-common":"^2.0.0"},"gitHead":"0174f605350065a6d9f89df38c6694ba75b891ac","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@2.0.0","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"shasum":"0fa3f04e5f45905349cf44330ae26e54e77c6b1c","size":33612,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-2.0.0.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_2.0.0_1660212880015_0.4072995937134056"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-08-11T10:44:25.873Z","publish_time":1660212880173,"_cnpm_publish_time":1660212880173},"1.2.2":{"name":"nice-grpc","version":"1.2.2","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.6.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.1.0","node-abort-controller":"^1.2.1"},"gitHead":"1eae2167ee0eeb1e7ab0f56278716b59269ffe46","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.2.2","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"shasum":"5e31ebfdbd26285857077961ffea2e61ee5d9ad8","size":33363,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.2.2.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.2.2_1659325951510_0.44035648691043305"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-08-01T03:53:24.615Z","publish_time":1659325951666,"_cnpm_publish_time":1659325951666},"1.2.1":{"name":"nice-grpc","version":"1.2.1","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.6.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.1.0","node-abort-controller":"^1.2.1"},"gitHead":"22d3f9e050a8804787a4c0959a773eb5dc99bd48","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.2.1","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"shasum":"bcf7a9360ce101797927e1a2e2edf26489c22e0a","size":33421,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.2.1.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.2.1_1658992421255_0.3789826383275203"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-07-28T07:24:56.315Z","publish_time":1658992421562,"_cnpm_publish_time":1658992421562},"1.2.0":{"name":"nice-grpc","version":"1.2.0","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.112.0"},"dependencies":{"@grpc/grpc-js":"^1.6.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.1.0","node-abort-controller":"^1.2.1"},"gitHead":"77acb86429dbf13439b3335812c9b01daef94641","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.2.0","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"shasum":"43b7cbf373c9bab8c21080c2c3bcd181ee9e9645","size":33361,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.2.0.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.2.0_1651632038754_0.3649418029092546"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-05-04T02:40:50.995Z","publish_time":1651632039031,"_cnpm_publish_time":1651632039031},"1.1.1":{"name":"nice-grpc","version":"1.1.1","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.97.0"},"dependencies":{"@grpc/grpc-js":"^1.6.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.1.0","node-abort-controller":"^1.2.1"},"gitHead":"560ec0721e2a59cf3c3d6ffdfded79d31c464db1","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.1.1","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"shasum":"fa1453894c6f1ab7bd895dad332eac974574df9d","size":33334,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.1.1.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.1.1_1650251703807_0.7358411847146173"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-04-18T03:15:11.468Z","publish_time":1650251703935,"_cnpm_publish_time":1650251703935},"1.1.0":{"name":"nice-grpc","version":"1.1.0","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.97.0"},"dependencies":{"@grpc/grpc-js":"^1.6.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.6","node-abort-controller":"^1.2.1"},"gitHead":"c69b087b0e3748e31e31551c59240a3696ce6e4e","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.1.0","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"shasum":"ce1ffc677cec89a21b7c30ed3689274eea12728e","size":33335,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.1.0.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.1.0_1649042304085_0.06437871976290532"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-04-04T03:18:28.050Z","publish_time":1649042304247,"_cnpm_publish_time":1649042304247},"1.0.8":{"name":"nice-grpc","version":"1.0.8","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.97.0"},"dependencies":{"@grpc/grpc-js":"^1.5.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.6","node-abort-controller":"^1.2.1"},"gitHead":"3c1c4e803cd73e6b5feddf50d64710256d1a12db","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.8","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"shasum":"2f3090056ed6fee4bc4d9fb893c25c52f4d4011e","size":33192,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.8.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.8_1646799155965_0.43866141179327167"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-03-09T04:12:47.303Z","publish_time":1646799156160,"_cnpm_publish_time":1646799156160},"1.0.7":{"name":"nice-grpc","version":"1.0.7","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.97.0"},"dependencies":{"@grpc/grpc-js":"^1.5.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.5","node-abort-controller":"^1.2.1"},"gitHead":"12db5997fa193e32536f8843abacc3182ee90aef","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.7","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"shasum":"5932b841802b02b0010a82e36bab26bfbd6ca2a8","size":33199,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.7.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.7_1646479058261_0.8085263084797694"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-03-05T11:17:46.804Z","publish_time":1646479058451,"_cnpm_publish_time":1646479058451},"1.0.6":{"name":"nice-grpc","version":"1.0.6","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.97.0"},"dependencies":{"@grpc/grpc-js":"^1.5.1","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.4","node-abort-controller":"^1.2.1"},"gitHead":"c1a525d031cd5f2f4498b92c9756970eff760b16","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.6","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"shasum":"d204a58677cb0f1bb933483df78d77e8179d2bc5","size":33194,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.6.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.6_1642314105767_0.5546971794641193"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-01-16T06:21:54.511Z","publish_time":1642314105915,"_cnpm_publish_time":1642314105915},"1.0.5":{"name":"nice-grpc","version":"1.0.5","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,useExactTypes=false,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.97.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.4","node-abort-controller":"^1.2.1"},"gitHead":"5d08d062313f513648d2632af85d77607513637c","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.5","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"shasum":"92ad058f973c0186990a0cd574725fa6b152ae0c","size":33121,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.5.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.5_1642305711266_0.43616011877774996"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-01-16T04:02:02.258Z","publish_time":1642305711681,"_cnpm_publish_time":1642305711681},"1.0.4":{"name":"nice-grpc","version":"1.0.4","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable","abort-controller","abort-signal","typescript"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.82.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.3","node-abort-controller":"^1.2.1"},"gitHead":"44e6462e3fd71bfbf2aa6a8717575f406baa75c2","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.4","_nodeVersion":"16.6.1","_npmVersion":"lerna/4.0.0/node@v16.6.1+x64 (darwin)","dist":{"shasum":"68959c1b71b6c0a302add8776f44a44569395645","size":33114,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.4.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.4_1632207241230_0.7318108006793058"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:44.309Z","publish_time":1632207241375,"_cnpm_publish_time":1632207241375},"1.0.3":{"name":"nice-grpc","version":"1.0.3","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.82.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.2","node-abort-controller":"^1.2.1"},"gitHead":"512bf522275b5f5f9e9b94bfa49fb0f339c2b488","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.3","_nodeVersion":"15.8.0","_npmVersion":"lerna/4.0.0/node@v15.8.0+x64 (darwin)","dist":{"shasum":"a5dc38835b6be87d9cb2489e8efa28535ed242e9","size":32980,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.3.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.3_1625135415475_0.0022010064343802593"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:43.219Z","publish_time":1625135415607,"_cnpm_publish_time":1625135415607},"1.0.2":{"name":"nice-grpc","version":"1.0.2","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.82.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.2","node-abort-controller":"^1.2.1"},"gitHead":"cdbbac0eb25c182e1af7fdb65bd8db7e37b3343a","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.2","_nodeVersion":"15.8.0","_npmVersion":"lerna/4.0.0/node@v15.8.0+x64 (darwin)","dist":{"shasum":"79d7a94dc072efbf2cc2f3f92f0bf90e9eb48513","size":32950,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.2.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.2_1625037039415_0.6874697458310646"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:42.175Z","publish_time":1625037039561,"_cnpm_publish_time":1625037039561},"1.0.1":{"name":"nice-grpc","version":"1.0.1","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.82.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.1","node-abort-controller":"^1.2.1"},"gitHead":"c82b2964c890dbf38654b908664a7b55535b5fba","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.1","_nodeVersion":"15.8.0","_npmVersion":"lerna/4.0.0/node@v15.8.0+x64 (darwin)","dist":{"shasum":"6628df5c1454fef660cb3884cc7926fd098aad07","size":32995,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.1.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.1_1624942168420_0.4218401150222981"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:41.098Z","publish_time":1624942168601,"_cnpm_publish_time":1624942168601},"1.0.0":{"name":"nice-grpc","version":"1.0.0","description":"A Node.js gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm run clean && npm run build && npm test","prepare:proto:grpc-js":"mkdirp ./fixtures/grpc-js && grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures/grpc-js --ts_out=grpc_js:./fixtures/grpc-js --grpc_out=grpc_js:./fixtures/grpc-js -I fixtures fixtures/*.proto","prepare:proto:ts-proto":"mkdirp ./fixtures/ts-proto && grpc_tools_node_protoc --ts_proto_out=./fixtures/ts-proto --ts_proto_opt=outputServices=generic-definitions,esModuleInterop=true -I fixtures fixtures/*.proto","prepare:proto":"npm run prepare:proto:grpc-js && npm run prepare:proto:ts-proto","prepare":"npm run prepare:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@tsconfig/node12":"^1.0.8","@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","mkdirp":"^1.0.4","rimraf":"^2.6.3","ts-proto":"^1.82.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","nice-grpc-common":"^1.0.0","node-abort-controller":"^1.2.1"},"gitHead":"c064bde8b718844e1e986ee6e5df450de590b7da","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@1.0.0","_nodeVersion":"15.8.0","_npmVersion":"lerna/4.0.0/node@v15.8.0+x64 (darwin)","dist":{"shasum":"1f7df4eef4ceaf73253f935e7cb26f73218be4d5","size":32935,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-1.0.0.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_1.0.0_1624940746698_0.3912142099371563"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:39.803Z","publish_time":1624940746881,"_cnpm_publish_time":1624940746881},"0.1.5":{"name":"nice-grpc","version":"0.1.5","description":"A gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm test && npm run clean && npm run build","build:proto":"grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures --ts_out=grpc_js:./fixtures --grpc_out=grpc_js:./fixtures -I fixtures fixtures/*.proto","prepare":"npm run build:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/jest":"^26.0.14","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","jest":"^26.5.0","prettier":"^2.1.2","rimraf":"^2.6.3","ts-jest":"^26.4.1","typescript":"~4.2.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","node-abort-controller":"^1.2.1"},"gitHead":"fde8c2fe5087f11b96bea10a77cd7b72af11e3f8","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@0.1.5","_nodeVersion":"15.8.0","_npmVersion":"7.11.2","dist":{"shasum":"2abe2416c03344ab24c15be56e7c73eb92a041c8","size":30719,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-0.1.5.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_0.1.5_1622003718582_0.9797906355368049"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:38.498Z","publish_time":1622003718701,"_cnpm_publish_time":1622003718701},"0.1.4":{"name":"nice-grpc","version":"0.1.4","description":"A gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm test && npm run clean && npm run build","build:proto":"grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures --ts_out=grpc_js:./fixtures --grpc_out=grpc_js:./fixtures -I fixtures fixtures/*.proto","prepare":"npm run build:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/jest":"^26.0.14","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","jest":"^26.5.0","prettier":"^2.1.2","rimraf":"^2.6.3","ts-jest":"^26.4.1","typescript":"~4.2.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.4","node-abort-controller":"^1.2.1"},"gitHead":"8288822a6a9e03f86f96c9a49b7d37861942db56","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@0.1.4","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"e709c2a70c2dd0bfbda7706e58bc15deb82f6917","size":30808,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-0.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-0.1.4.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_0.1.4_1618567658053_0.3232638356647859"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:37.214Z","publish_time":1618567658214,"_cnpm_publish_time":1618567658214},"0.1.3":{"name":"nice-grpc","version":"0.1.3","description":"A gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm test && npm run clean && npm run build","build:proto":"grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures --ts_out=grpc_js:./fixtures --grpc_out=grpc_js:./fixtures -I fixtures fixtures/*.proto","prepare":"npm run build:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/jest":"^26.0.14","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","jest":"^26.5.0","prettier":"^2.1.2","rimraf":"^2.6.3","ts-jest":"^26.4.1","typescript":"~4.2.0"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.0","node-abort-controller":"^1.1.0"},"gitHead":"021d0c7802ef4d4c07764ce3ae2577307f666196","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@0.1.3","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"48bbe2bb5dc93671f10c8fdd24b650dc5bf3ad27","size":30364,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-0.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-0.1.3.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_0.1.3_1614584897988_0.2973039770926227"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:36.135Z","publish_time":1614584898187,"_cnpm_publish_time":1614584898187},"0.1.2":{"name":"nice-grpc","version":"0.1.2","description":"A gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm test && npm run clean && npm run build","build:proto":"grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures --ts_out=grpc_js:./fixtures --grpc_out=grpc_js:./fixtures -I fixtures fixtures/*.proto","prepare":"npm run build:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/jest":"^26.0.14","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","jest":"^26.5.0","prettier":"^2.1.2","rimraf":"^2.6.3","ts-jest":"^26.4.1","typescript":"^4.0.3"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.0","node-abort-controller":"^1.1.0"},"gitHead":"9cb96251ff164b84e7242bcf335f174fb853a210","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@0.1.2","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"544409589acf40287774131b88ceda28275949ea","size":30305,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-0.1.2.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_0.1.2_1613285280164_0.09431786115500218"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:35.041Z","publish_time":1613285280319,"_cnpm_publish_time":1613285280319},"0.1.1":{"name":"nice-grpc","version":"0.1.1","description":"A gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm test && npm run clean && npm run build","build:proto":"grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures --ts_out=grpc_js:./fixtures --grpc_out=grpc_js:./fixtures -I fixtures fixtures/*.proto","prepare":"npm run build:proto"},"author":{"name":"Daniel Lytkin","email":"aikoven@deeplay.io"},"license":"MIT","devDependencies":{"@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/jest":"^26.0.14","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","jest":"^26.5.0","prettier":"^2.1.2","rimraf":"^2.6.3","ts-jest":"^26.4.1","typescript":"^4.0.3"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.0","node-abort-controller":"^1.1.0"},"gitHead":"e7e651ff133ea81654552bc6b91444fe5490678f","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@0.1.1","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"25c142f073aa8b223de1fa0ec1cb11f70437cc38","size":29475,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-0.1.1.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_0.1.1_1613280813212_0.5398043487326829"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:33.949Z","publish_time":1613280813354,"_cnpm_publish_time":1613280813354},"0.1.0":{"name":"nice-grpc","version":"0.1.0","description":"A gRPC library that is nice to you","keywords":["grpc","promise","async-iterable"],"repository":{"type":"git","url":"git+https://github.com/deeplay-io/nice-grpc.git"},"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"clean":"rimraf lib","test":"jest","build":"tsc -P tsconfig.build.json","prepublishOnly":"npm test && npm run clean && npm run build","build:proto":"grpc_tools_node_protoc --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --js_out=import_style=commonjs,binary:./fixtures --ts_out=grpc_js:./fixtures --grpc_out=grpc_js:./fixtures -I fixtures fixtures/*.proto","prepare":"npm run build:proto"},"author":{"name":"Daniel Lytkin","email":"dan.lytkin@gmail.com"},"license":"MIT","devDependencies":{"@types/defer-promise":"^1.0.0","@types/get-port":"^4.2.0","@types/google-protobuf":"^3.7.4","@types/jest":"^26.0.14","defer-promise":"^2.0.1","get-port":"^5.1.1","google-protobuf":"^3.14.0","grpc-tools":"^1.10.0","grpc_tools_node_protoc_ts":"^5.0.1","jest":"^26.5.0","prettier":"^2.1.2","rimraf":"^2.6.3","ts-jest":"^26.4.1","typescript":"^4.0.3"},"dependencies":{"@grpc/grpc-js":"^1.2.6","abort-controller-x":"^0.2.0","node-abort-controller":"^1.1.0"},"gitHead":"2ecadc2a759351750cdd4d43a062a406339b18d8","bugs":{"url":"https://github.com/deeplay-io/nice-grpc/issues"},"homepage":"https://github.com/deeplay-io/nice-grpc#readme","_id":"nice-grpc@0.1.0","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"shasum":"2fc4940ed5e696ac81d0a80ef9f1557f54e35ada","size":29753,"noattachment":false,"key":"/nice-grpc/-/nice-grpc-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/nice-grpc/download/nice-grpc-0.1.0.tgz"},"_npmUser":{"name":"aikoven","email":"dan.lytkin@gmail.com"},"directories":{},"maintainers":[{"name":"aikoven","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nice-grpc_0.1.0_1612780643234_0.8855145320389819"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-27T00:20:32.865Z","publish_time":1612780643363,"_cnpm_publish_time":1612780643363}},"readme":"# nice-grpc [![npm version][npm-image]][npm-url] <!-- omit in toc -->\n\nA Node.js gRPC library that is nice to you. Built on top of\n[`grpc-js`](https://www.npmjs.com/package/@grpc/grpc-js).\n\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Compiling Protobuf files](#compiling-protobuf-files)\n    - [Using `ts-proto`](#using-ts-proto)\n    - [Using `google-protobuf`](#using-google-protobuf)\n  - [Server](#server)\n    - [Call context](#call-context)\n    - [Errors](#errors)\n    - [Metadata](#metadata)\n    - [Cancelling calls](#cancelling-calls)\n    - [Server streaming](#server-streaming)\n      - [Example: IxJS](#example-ixjs)\n      - [Example: Observables](#example-observables)\n    - [Client streaming](#client-streaming)\n    - [Middleware](#middleware)\n      - [Example: Logging](#example-logging)\n      - [Example: Error handling](#example-error-handling)\n      - [Example: Authentication](#example-authentication)\n  - [Client](#client)\n    - [Call options](#call-options)\n    - [Channels](#channels)\n    - [Metadata](#metadata-1)\n    - [Errors](#errors-1)\n    - [Cancelling calls](#cancelling-calls-1)\n    - [Server streaming](#server-streaming-1)\n    - [Client streaming](#client-streaming-1)\n    - [Middleware](#middleware-1)\n      - [Example: Logging](#example-logging-1)\n\n## Features\n\n- Written in TypeScript for TypeScript.\n- Modern API that uses Promises and Async Iterables for streaming.\n- Easy cancellation propagation with\n  [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal).\n- Client and server middleware support via concise API that uses Async\n  Generators.\n\n## Prerequisites\n\nSupports NodeJS 14+. Global `AbortController` is required which is\n[available in NodeJS](https://nodejs.org/api/globals.html#class-abortcontroller)\nsince 15.0.0, NodeJS 14.17+ requires the\n[--experimental-abortcontroller](https://nodejs.org/docs/latest-v14.x/api/cli.html#cli_experimental_abortcontroller)\nflag. A [polyfill](https://www.npmjs.com/package/abort-controller) is available\nfor older NodeJS versions.\n\n## Installation\n\n```\nnpm install nice-grpc\n```\n\n## Usage\n\n### Compiling Protobuf files\n\nThe recommended way is to use\n[`ts-proto`](https://github.com/stephenh/ts-proto).\n\n#### Using `ts-proto`\n\nInstall necessary tools:\n\n```\nnpm install protobufjs long\nnpm install --save-dev grpc-tools ts-proto\n```\n\n> Use `ts-proto` version not older than `1.112.0`.\n\nGiven a Protobuf file `./proto/example.proto`, generate TypeScript code into\ndirectory `./compiled_proto`:\n\n```\n./node_modules/.bin/grpc_tools_node_protoc \\\n  --plugin=protoc-gen-ts_proto=./node_modules/.bin/protoc-gen-ts_proto \\\n  --ts_proto_out=./compiled_proto \\\n  --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false \\\n  --proto_path=./proto \\\n  ./proto/example.proto\n```\n\n> You can omit the `--plugin` flag if you invoke this command via\n> [npm script](https://docs.npmjs.com/cli/v7/using-npm/scripts).\n\nWhen running on Windows command line, you may need to wrap the `ts_proto_opt`\nvalue with double quotes:\n\n```\n--ts_proto_opt=\"outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false\"\n```\n\n#### Using `google-protobuf`\n\nInstall necessary tools:\n\n```\nnpm install google-protobuf\nnpm install --save-dev grpc-tools grpc_tools_node_protoc_ts @types/google-protobuf\n```\n\nGiven a Protobuf file `./proto/example.proto`, generate JS code and TypeScript\ndefinitions into directory `./compiled_proto`:\n\n```\n./node_modules/.bin/grpc_tools_node_protoc \\\n  --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin \\\n  --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts \\\n  --js_out=import_style=commonjs,binary:./compiled_proto \\\n  --ts_out=grpc_js:./compiled_proto \\\n  --grpc_out=grpc_js:./compiled_proto \\\n  --proto_path=./proto \\\n  ./proto/example.proto\n```\n\n### Server\n\nConsider the following Protobuf definition:\n\n```proto\nsyntax = \"proto3\";\n\npackage nice_grpc.example;\n\nservice ExampleService {\n  rpc ExampleUnaryMethod(ExampleRequest) returns (ExampleResponse) {};\n}\n\nmessage ExampleRequest {\n  // ...\n}\nmessage ExampleResponse {\n  // ...\n}\n```\n\nAfter compiling Protobuf file, we can write service implementation:\n\nWhen compiling Protobufs using `ts-proto`:\n\n```ts\nimport {\n  ExampleServiceImplementation,\n  ExampleRequest,\n  ExampleResponse,\n  DeepPartial,\n} from './compiled_proto/example';\n\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async exampleUnaryMethod(\n    request: ExampleRequest,\n  ): Promise<DeepPartial<ExampleResponse>> {\n    // ... method logic\n\n    return response;\n  },\n};\n```\n\nAlternatively, you can use classes:\n\n```ts\nclass ExampleServiceImpl implements ExampleServiceImplementation {\n  async exampleUnaryMethod(\n    request: ExampleRequest,\n  ): Promise<DeepPartial<ExampleResponse>> {\n    // ... method logic\n\n    return response;\n  }\n}\n```\n\nWith `ts-proto`, response is automatically wrapped with `fromPartial`.\n\nWhen compiling Protobufs using `google-protobuf`:\n\n```ts\nimport {ServiceImplementation} from 'nice-grpc';\nimport {ExampleRequest, ExampleResponse} from './compiled_proto/example_pb';\nimport {IExampleService} from './compiled_proto/example_grpc_pb';\n\nconst exampleServiceImpl: ServiceImplementation<IExampleService> = {\n  async exampleUnaryMethod(request: ExampleRequest): Promise<ExampleResponse> {\n    // ... method logic\n\n    return response;\n  },\n};\n```\n\nFurther examples use `ts-proto`.\n\nNow we can create and start a server that exposes our service:\n\n```ts\nimport {createServer} from 'nice-grpc';\nimport {ExampleServiceDefinition} from './compiled_proto/example';\n\nconst server = createServer();\n\nserver.add(ExampleServiceDefinition, exampleServiceImpl);\n\nawait server.listen('0.0.0.0:8080');\n```\n\nOnce we need to stop, gracefully shut down the server:\n\n```ts\nawait server.shutdown();\n```\n\n#### Call context\n\nEach service implementation method receives `CallContext` as a second argument,\nthat has type:\n\n```ts\ntype CallContext = {\n  /**\n   * Request metadata from client.\n   */\n  metadata: Metadata;\n  /**\n   * Client address.\n   */\n  peer: string;\n  /**\n   * Response header. Sent with the first response, or when `sendHeader` is\n   * called.\n   */\n  header: Metadata;\n  /**\n   * Manually send response header.\n   */\n  sendHeader(): void;\n  /**\n   * Response trailer. Sent when server method returns or throws.\n   */\n  trailer: Metadata;\n  /**\n   * Signal that is aborted once the call gets cancelled.\n   */\n  signal: AbortSignal;\n};\n```\n\nCall context may be augmented by [Middleware](#middleware).\n\n#### Errors\n\nTo report an error to a client, use `ServerError`.\n\n> Any thrown errors other than `ServerError` will result in client receiving\n> error with status code `UNKNOWN`. Use server middleware for custom handling of\n> uncaught errors.\n\nSee [gRPC docs](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) for\nthe correct usage of status codes.\n\n```ts\nimport {ServerError, Status} from 'nice-grpc';\n\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async exampleUnaryMethod(\n    request: ExampleRequest,\n  ): Promise<DeepPartial<ExampleResponse>> {\n    // ... method logic\n\n    throw new ServerError(Status.NOT_FOUND, 'Requested data does not exist');\n  },\n};\n```\n\n#### Metadata\n\nA server receives client metadata along with request, and can send response\nmetadata in header and trailer.\n\n```ts\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async exampleUnaryMethod(\n    request: ExampleRequest,\n    context: CallContext,\n  ): Promise<DeepPartial<ExampleResponse>> {\n    // read client metadata\n    const someValue = context.metadata.get('some-key');\n\n    // add metadata to header\n    context.header.set('some-key', 'some-value');\n\n    // ... method logic\n\n    // add metadata to trailer\n    context.trailer.set('some-key', 'some-value');\n\n    return response;\n  },\n};\n```\n\n#### Cancelling calls\n\nA server receives\n[`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)\nthat gets aborted once the call is cancelled by the client. You can use it to\ncancel any inner requests.\n\n```ts\nimport fetch from 'node-fetch';\n\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async exampleUnaryMethod(\n    request: ExampleRequest,\n    context: CallContext,\n  ): Promise<DeepPartial<ExampleResponse>> {\n    const response = await fetch('http://example.com', {\n      signal: context.signal,\n    });\n\n    // ...\n  },\n};\n```\n\n#### Server streaming\n\nConsider the following Protobuf definition:\n\n```proto\nservice ExampleService {\n  rpc ExampleStreamingMethod(ExampleRequest)\n    returns (stream ExampleResponse) {};\n}\n```\n\nService implementation defines this method as an Async Generator:\n\n```ts\nimport {delay} from 'abort-controller-x';\n\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async *exampleStreamingMethod(\n    request: ExampleRequest,\n    context: CallContext,\n  ): AsyncIterable<DeepPartial<ExampleResponse>> {\n    for (let i = 0; i < 10; i++) {\n      await delay(context.signal, 1000);\n\n      yield response;\n    }\n  },\n};\n```\n\n##### Example: IxJS\n\n```ts\nimport {range} from 'ix/asynciterable';\nimport {withAbort, map} from 'ix/asynciterable/operators';\n\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async *exampleStreamingMethod(\n    request: ExampleRequest,\n    context: CallContext,\n  ): AsyncIterable<DeepPartial<ExampleResponse>> {\n    yield* range(0, 10).pipe(\n      withAbort(context.signal),\n      map(() => response),\n    );\n  },\n};\n```\n\n##### Example: Observables\n\n```ts\nimport {Observable} from 'rxjs';\nimport {from} from 'ix/asynciterable';\nimport {withAbort} from 'ix/asynciterable/operators';\n\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async *exampleStreamingMethod(\n    request: ExampleRequest,\n    context: CallContext,\n  ): AsyncIterable<DeepPartial<ExampleResponse>> {\n    const observable: Observable<DeepPartial<ExampleResponse>>;\n\n    yield* from(observable).pipe(withAbort(context.signal));\n  },\n};\n```\n\n#### Client streaming\n\nGiven a client streaming method:\n\n```proto\nservice ExampleService {\n  rpc ExampleClientStreamingMethod(stream ExampleRequest)\n    returns (ExampleResponse) {};\n}\n```\n\nService implementation method receives request as an Async Iterable:\n\n```ts\nconst exampleServiceImpl: ExampleServiceImplementation = {\n  async exampleUnaryMethod(\n    request: AsyncIterable<ExampleRequest>,\n  ): Promise<DeepPartial<ExampleResponse>> {\n    for await (const item of request) {\n      // ...\n    }\n\n    return response;\n  },\n};\n```\n\n#### Middleware\n\nServer middleware intercepts incoming calls allowing to:\n\n- Execute any logic before and after implementation methods\n- Look into request, request metadata and response\n- Interrupt a call before it reaches implementation by throwing a `ServerError`\n- Catch implementation errors and return friendly `ServerError`s to a client\n- Augment call context\n- Modify response header and trailer metadata\n\nServer middleware is defined as an Async Generator. The most basic no-op\nmiddleware looks like this:\n\n```ts\nimport {ServerMiddlewareCall, CallContext} from 'nice-grpc';\n\nasync function* middleware<Request, Response>(\n  call: ServerMiddlewareCall<Request, Response>,\n  context: CallContext,\n) {\n  return yield* call.next(call.request, context);\n}\n```\n\nFor unary and client streaming methods, the `call.next` generator yields no\nitems and returns a single response; for server streaming and bidirectional\nstreaming methods, it yields each response and returns void. By doing\n`return yield*` we cover both cases. To handle these cases separately, we can\nwrite a middleware as follows:\n\n```ts\nasync function* middleware<Request, Response>(\n  call: ServerMiddlewareCall<Request, Response>,\n  context: CallContext,\n) {\n  if (!call.responseStream) {\n    const response = yield* call.next(call.request, context);\n\n    return response;\n  } else {\n    for await (const response of call.next(call.request, context)) {\n      yield response;\n    }\n\n    return;\n  }\n}\n```\n\nTo attach a middleware to a server, use a `server.use` method. Note that\n`server.use` returns a new server instance.\n\n```ts\nconst server = createServer().use(middleware1).use(middleware2);\n```\n\nA middleware that is attached first, will be invoked first.\n\nYou can also attach middleware per-service:\n\n```ts\nconst server = createServer().use(middlewareA);\n\nserver.with(middlewareB).add(Service1, service1Impl);\nserver.with(middlewareC).add(Service2, service2Impl);\n```\n\nIn the above example, `Service1` gets `middlewareA` and `middlewareB`, and\n`Service2` gets `middlewareA` and `middlewareC`.\n\n##### Example: Logging\n\nLog all calls:\n\n```ts\nimport {Status} from 'nice-grpc';\nimport {isAbortError} from 'abort-controller-x';\n\nasync function* loggingMiddleware<Request, Response>(\n  call: ServerMiddlewareCall<Request, Response>,\n  context: CallContext,\n) {\n  const {path} = call.method;\n\n  console.log('Server call', path, 'start');\n\n  try {\n    const result = yield* call.next(call.request, context);\n\n    console.log('Server call', path, 'end: OK');\n\n    return result;\n  } catch (error) {\n    if (error instanceof ServerError) {\n      console.log(\n        'Server call',\n        path,\n        `end: ${Status[error.code]}: ${error.details}`,\n      );\n    } else if (isAbortError(error)) {\n      console.log('Server call', path, 'cancel');\n    } else {\n      console.log('Server call', path, `error: ${error?.stack}`);\n    }\n\n    throw error;\n  }\n}\n```\n\n##### Example: Error handling\n\nCatch unknown errors and wrap them into `ServerError`s with friendly messages:\n\n```ts\nimport {Status} from 'nice-grpc';\nimport {isAbortError} from 'abort-controller-x';\n\nasync function* errorHandlingMiddleware<Request, Response>(\n  call: ServerMiddlewareCall<Request, Response>,\n  context: CallContext,\n) {\n  try {\n    return yield* call.next(call.request, context);\n  } catch (error: unknown) {\n    if (error instanceof ServerError || isAbortError(error)) {\n      throw error;\n    }\n\n    let details = 'Unknown server error occurred';\n\n    if (process.env.NODE_ENV === 'development') {\n      details += `: ${error.stack}`;\n    }\n\n    throw new ServerError(Status.UNKNOWN, details);\n  }\n}\n```\n\n##### Example: Authentication\n\nValidate JSON Web Token (JWT) from request metadata and put its claims to\n`CallContext`:\n\n```ts\nimport {Status} from 'nice-grpc';\nimport createRemoteJWKSet from 'jose/jwks/remote';\nimport jwtVerify, {JWTPayload} from 'jose/jwt/verify';\nimport {JOSEError} from 'jose/util/errors';\n\nconst jwks = createRemoteJWKSet(\n  new URL('https://example.com/.well-known/jwks.json'),\n);\n\ntype AuthCallContextExt = {\n  auth: JWTPayload;\n};\n\nasync function* authMiddleware<Request, Response>(\n  call: ServerMiddlewareCall<Request, Response, AuthCallContextExt>,\n  context: CallContext,\n) {\n  const authorization = context.metadata.get('Authorization');\n\n  if (authorization == null) {\n    throw new ServerError(\n      Status.UNAUTHENTICATED,\n      'Missing Authorization metadata',\n    );\n  }\n\n  const parts = authorization.toString().split(' ');\n\n  if (parts.length !== 2 || parts[0] !== 'Bearer') {\n    throw new ServerError(\n      Status.UNAUTHENTICATED,\n      'Invalid Authorization metadata format. Expected \"Bearer <token>\"',\n    );\n  }\n\n  const token = parts[1];\n\n  const {payload} = await jwtVerify(token, jwks).catch(error => {\n    if (error instanceof JOSEError) {\n      throw new ServerError(Status.UNAUTHENTICATED, error.message);\n    } else {\n      throw error;\n    }\n  });\n\n  return yield* call.next(call.request, {\n    ...context,\n    auth: payload,\n  });\n}\n```\n\nService implementation can then access JWT claims via call context:\n\n```ts\nconst exampleServiceImpl: ExampleServiceImplementation<AuthCallContextExt> = {\n  async exampleUnaryMethod(\n    request: ExampleRequest,\n    context: CallContext & AuthCallContextExt,\n  ): Promise<DeepPartial<ExampleResponse>> {\n    const userId = context.auth.sub;\n\n    // ...\n  },\n};\n```\n\n### Client\n\nConsider the following Protobuf definition:\n\n```proto\nsyntax = \"proto3\";\n\npackage nice_grpc.example;\n\nservice ExampleService {\n  rpc ExampleUnaryMethod(ExampleRequest) returns (ExampleResponse) {};\n}\n\nmessage ExampleRequest {\n  // ...\n}\nmessage ExampleResponse {\n  // ...\n}\n```\n\nAfter compiling Protobuf file, we can create the client:\n\nWhen compiling Protobufs using `ts-proto`:\n\n```ts\nimport {createChannel, createClient} from 'nice-grpc';\nimport {\n  ExampleServiceClient,\n  ExampleServiceDefinition,\n} from './compiled_proto/example';\n\nconst channel = createChannel('localhost:8080');\n\nconst client: ExampleServiceClient = createClient(\n  ExampleServiceDefinition,\n  channel,\n);\n```\n\nWhen compiling Protobufs using `google-protobuf`:\n\n```ts\nimport {createChannel, createClient, Client} from 'nice-grpc';\nimport {\n  ExampleService,\n  IExampleService,\n} from './compiled_proto/example_grpc_pb';\n\nconst channel = createChannel('localhost:8080');\n\nconst client: Client<IExampleService> = createClient(ExampleService, channel);\n```\n\nFurther examples use `ts-proto`.\n\nCall the method:\n\n```ts\nconst response = await client.exampleUnaryMethod(request);\n```\n\nWith `ts-proto`, request is automatically wrapped with `fromPartial`.\n\nOnce we've done with the client, close the channel:\n\n```ts\nchannel.close();\n```\n\n#### Call options\n\nEach client method accepts `CallOptions` as an optional second argument, that\nhas type:\n\n```ts\ntype CallOptions = {\n  /**\n   * Request metadata.\n   */\n  metadata?: Metadata;\n  /**\n   * Signal that cancels the call once aborted.\n   */\n  signal?: AbortSignal;\n  /**\n   * Called when header is received.\n   */\n  onHeader?(header: Metadata): void;\n  /**\n   * Called when trailer is received.\n   */\n  onTrailer?(trailer: Metadata): void;\n};\n```\n\nCall options may be augmented by [Middleware](#middleware-1).\n\nWhen creating a client, you may specify default call options per method, or for\nall methods. This doesn't make much sense for built-in options, but may do for\nmiddleware, for example,\n[nice-grpc-client-middleware-deadline](/packages/nice-grpc-client-middleware-deadline):\n\n```ts\nconst client = createClient(ExampleServiceDefinition, channel, {\n  '*': {\n    // applies for all methods\n    deadline: 30_000,\n  },\n  exampleUnaryMethod: {\n    // applies for single method\n    deadline: 10_000,\n  },\n});\n```\n\nTo add default metadata, instead use a middleware that merges it with the\nmetadata passed to the call:\n\n```ts\nconst token = '...';\n\nconst client = createClientFactory().use((call, options) =>\n  call.next(call.request, {\n    ...options,\n    metadata: Metadata(options.metadata).set(\n      'Authorization',\n      `Bearer ${token}`,\n    ),\n  }),\n);\n```\n\n#### Channels\n\nBy default, a channel uses insecure connection. The following are equivalent:\n\n```ts\nimport {createChannel, ChannelCredentials} from 'nice-grpc';\n\ncreateChannel('example.com:8080');\ncreateChannel('http://example.com:8080');\ncreateChannel('example.com:8080', ChannelCredentials.createInsecure());\n```\n\nTo connect over TLS, use one of the following:\n\n```ts\ncreateChannel('https://example.com:8080');\ncreateChannel('example.com:8080', ChannelCredentials.createSsl());\n```\n\nIf the port is omitted, it defaults to `80` for insecure connections, and `443`\nfor secure connections.\n\n#### Metadata\n\nClient can send request metadata and receive response header and trailer:\n\n```ts\nimport {Metadata} from 'nice-grpc';\n\nconst response = await client.exampleUnaryMethod(request, {\n  metadata: Metadata({key: 'value'}),\n  onHeader(header: Metadata) {\n    // ...\n  },\n  onTrailer(trailer: Metadata) {\n    // ...\n  },\n});\n```\n\n#### Errors\n\nClient calls may throw gRPC errors represented as `ClientError`, that contain\nstatus code and description.\n\n```ts\nimport {ClientError, Status} from 'nice-grpc';\nimport {ExampleResponse} from './compiled_proto/example';\n\nlet response: ExampleResponse | null;\n\ntry {\n  response = await client.exampleUnaryMethod(request);\n} catch (error: unknown) {\n  if (error instanceof ClientError && error.code === Status.NOT_FOUND) {\n    response = null;\n  } else {\n    throw error;\n  }\n}\n```\n\n#### Cancelling calls\n\nA client call can be cancelled using\n[`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal).\n\n```ts\nimport {isAbortError} from 'abort-controller-x';\n\nconst abortController = new AbortController();\n\nclient\n  .exampleUnaryMethod(request, {\n    signal: abortController.signal,\n  })\n  .catch(error => {\n    if (isAbortError(error)) {\n      // aborted\n    } else {\n      throw error;\n    }\n  });\n\nabortController.abort();\n```\n\n#### Server streaming\n\nConsider the following Protobuf definition:\n\n```proto\nservice ExampleService {\n  rpc ExampleStreamingMethod(ExampleRequest)\n    returns (stream ExampleResponse) {};\n}\n```\n\nClient method returns an Async Iterable:\n\n```ts\nfor await (const response of client.exampleStreamingMethod(request)) {\n  // ...\n}\n```\n\n#### Client streaming\n\nGiven a client streaming method:\n\n```proto\nservice ExampleService {\n  rpc ExampleClientStreamingMethod(stream ExampleRequest)\n    returns (ExampleResponse) {};\n}\n```\n\nClient method expects an Async Iterable as its first argument:\n\n```ts\nimport {ExampleRequest, DeepPartial} from './compiled_proto/example';\n\nasync function* createRequest(): AsyncIterable<DeepPartial<ExampleRequest>> {\n  for (let i = 0; i < 10; i++) {\n    yield request;\n  }\n}\n\nconst response = await client.exampleClientStreamingMethod(createRequest());\n```\n\n#### Middleware\n\nClient middleware intercepts outgoing calls allowing to:\n\n- Execute any logic before and after reaching server\n- Modify request metadata\n- Look into request, response and response metadata\n- Send call multiple times for retries or hedging\n- Augment call options type to have own configuration\n\nClient middleware is defined as an Async Generator and is very similar to\n[Server middleware](#middleware). Key differences:\n\n- Middleware invocation order is reversed: middleware that is attached first,\n  will be invoked last.\n- There's no such thing as `CallContext` for client middleware; instead,\n  `CallOptions` are passed through the chain and can be accessed or altered by a\n  middleware.\n\nThe most basic no-op middleware looks like this:\n\n```ts\nimport {ClientMiddlewareCall, CallOptions} from 'nice-grpc';\n\nasync function* middleware<Request, Response>(\n  call: ClientMiddlewareCall<Request, Response>,\n  options: CallOptions,\n) {\n  return yield* call.next(call.request, options);\n}\n```\n\nFor unary and client streaming methods, the `call.next` generator yields no\nitems and returns a single response; for server streaming and bidirectional\nstreaming methods, it yields each response and returns void. By doing\n`return yield*` we cover both cases. To handle these cases separately, we can\nwrite a middleware as follows:\n\n```ts\nasync function* middleware<Request, Response>(\n  call: ClientMiddlewareCall<Request, Response>,\n  options: CallOptions,\n) {\n  if (!call.responseStream) {\n    const response = yield* call.next(call.request, options);\n\n    return response;\n  } else {\n    for await (const response of call.next(call.request, options)) {\n      yield response;\n    }\n\n    return;\n  }\n}\n```\n\nTo create a client with middleware, use a client factory:\n\n```ts\nimport {createClientFactory} from 'nice-grpc';\n\nconst client = createClientFactory()\n  .use(middleware1)\n  .use(middleware2)\n  .create(ExampleService, channel);\n```\n\nA middleware that is attached first, will be invoked last.\n\nYou can reuse a single factory to create multiple clients:\n\n```ts\nconst clientFactory = createClientFactory().use(middleware);\n\nconst client1 = clientFactory.create(Service1, channel1);\nconst client2 = clientFactory.create(Service2, channel2);\n```\n\nYou can also attach middleware per-client:\n\n```ts\nconst factory = createClientFactory().use(middlewareA);\n\nconst client1 = clientFactory.use(middlewareB).create(Service1, channel1);\nconst client2 = clientFactory.use(middlewareC).create(Service2, channel2);\n```\n\nIn the above example, `Service1` client gets `middlewareA` and `middlewareB`,\nand `Service2` client gets `middlewareA` and `middlewareC`.\n\nType augmentation to `Client` CallOptions is done automatically by adding a middleware, but can also be done by passing a generic. This code example shows how to correctly annotate client type given that middleware has type `ClientMiddleware<{callOption?: number}>`.\n\n```ts\nlet client: ExampleServiceClient<{callOption?: number}>;\nclient = createClientFactory()\n  .use(middleware)\n  .create(ExampleService, channel);\n```\n\n##### Example: Logging\n\nLog all calls:\n\n```ts\nimport {\n  ClientMiddlewareCall,\n  CallOptions,\n  ClientError,\n  Status,\n} from 'nice-grpc';\nimport {isAbortError} from 'abort-controller-x';\n\nasync function* loggingMiddleware<Request, Response>(\n  call: ClientMiddlewareCall<Request, Response>,\n  options: CallOptions,\n) {\n  const {path} = call.method;\n\n  console.log('Client call', path, 'start');\n\n  try {\n    const result = yield* call.next(call.request, options);\n\n    console.log('Client call', path, 'end: OK');\n\n    return result;\n  } catch (error) {\n    if (error instanceof ClientError) {\n      console.log(\n        'Client call',\n        path,\n        `end: ${Status[error.code]}: ${error.details}`,\n      );\n    } else if (isAbortError(error)) {\n      console.log('Client call', path, 'cancel');\n    } else {\n      console.log('Client call', path, `error: ${error?.stack}`);\n    }\n\n    throw error;\n  }\n}\n```\n\n[npm-image]: https://badge.fury.io/js/nice-grpc.svg\n[npm-url]: https://badge.fury.io/js/nice-grpc\n","_attachments":{},"license":"MIT"}