{"_id":"@benvp/graphql-kafkajs-subscriptions","name":"@benvp/graphql-kafkajs-subscriptions","dist-tags":{"latest":"3.1.0"},"versions":{"3.1.0":{"name":"@benvp/graphql-kafkajs-subscriptions","version":"3.1.0","description":"Apollo graphql subscription over Kafka protocol","keywords":["graphql","kafka","apollo","subscriptions"],"homepage":"https://github.com/benvp/graphql-kafkajs-subscriptions#readme","bugs":{"url":"https://github.com/benvp/graphql-kafkajs-subscriptions/issues"},"repository":{"type":"git","url":"git+https://github.com/benvp/graphql-kafkajs-subscriptions.git"},"license":"MIT","author":{"name":"Tomas Alabes"},"main":"dist/index.js","typings":"dist/index.d.ts","scripts":{"build":"tsc","format":"prettier --write src","prepublishOnly":"yarn build","release":"yarn build && standard-version","test":"jest","test:watch":"jest --watchAll","watch":"tsc -w","prepare":"husky install"},"jest":{"moduleFileExtensions":["ts","js"],"roots":["<rootDir>/src/test"],"testRegex":"(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$","transform":{"\\.(ts|tsx)$":"ts-jest"}},"dependencies":{"graphql-subscriptions":"^2.0.0","iterall":"^1.3.0"},"devDependencies":{"@commitlint/cli":"^17.0.3","@commitlint/config-conventional":"^17.0.3","@types/jest":"^28.1.7","@types/node":"^14.18.24","husky":"^8.0.1","jest":"28.1.3","kafkajs":"^2.2.0","prettier":"2.7.1","standard-version":"^9.3.2","ts-jest":"28.0.8","tslint":"6.1.3","typescript":"^4.7.4"},"peerDependencies":{"kafkajs":"^2.2.0"},"gitHead":"c377c1a52c30eebeeadf9a715f699035d76b72d6","_id":"@benvp/graphql-kafkajs-subscriptions@3.1.0","_nodeVersion":"18.12.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-99oFw1rh0uc78+8P68sptd30dU5z02uIXSnZ5CO9YG44LUiGvyYQeXvTYS6MqSL5vnGNxaFwpyVwLXqwDbFC9w==","shasum":"7d8b5cfd981d3c0f7efef0d7b92cf47bbbe981db","tarball":"https://registry.npmjs.org/@benvp/graphql-kafkajs-subscriptions/-/graphql-kafkajs-subscriptions-3.1.0.tgz","fileCount":18,"unpackedSize":49461,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0zp0hKWeIjcNEnPyODrmDAuF4rD9U99t9S///dGFfngIgY7Q1yJVeZfqiW5mlRYFioBuZIoDyQFno0VOCljHbxV4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjoAxLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpJFw/+JUpN6wwZfe6XR2rrH1AiJO6SykE1okuWXWHCEO+Iv2dFjDS7\r\ntzk9KWkZzpl4MuP07KSosXqqG1FA92L0k1IohPzKc4g9y8J1gIIMMfNwDfhA\r\njf7TXq/keKJpVbySXvuH8ODtiOWjiiflqvnlDA1Q7KWKp768/jEI/y8Mveet\r\nX4t/J2GH9oC9ZHzp4X8nxE9T0w9DCMVeWhJqOKEa3UT2Iy8UKZOTozjuDQrf\r\nisdt4tVn/GAAaFEkEr25KnaBsgo8OHjhPwjKFpWXGltuPA4Y7X4+shML7ZUb\r\nXuvD//yrJBgjdissItnluhLTsbzqx8LkLm5P0BFG0SFjOGWG2f2wbdTDpbUC\r\nUrpCKfVTfGo9sY42Vns7HliREEaKNz7jxdlwiA4un4y6WX7tua4GTF162+na\r\np8G9zVlL6K7Qy0mhMFLPhy9/4N+OblNhFgdOyHSV1po0mJ6CwoMk9dHszbSr\r\nYgSKWO5xZ5UanleHmqY/pbGsonSdGVX579LFmKW2N6rw/E0h6mvEiFJeg0RQ\r\nE3vE5p8A7aVvIIdnDdjxTxPPSnE9+dWxSMewQQH5RELAlvMwO6DRFkG2jB7y\r\n/I2qkTX51qNGouvLsg2kNCSTXfJhRM9PEafPXIvtBUJUaJVkJBZyrzBjkjas\r\nSCguuKMXOpCbGJ0OMuNhDa9qCpNjl/hpJc0=\r\n=tT0X\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"benvp","email":"ben@vp.solutions"},"directories":{},"maintainers":[{"name":"benvp","email":"ben@vp.solutions"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/graphql-kafkajs-subscriptions_3.1.0_1671433290932_0.18961064180693477"},"_hasShrinkwrap":false}},"time":{"created":"2022-12-19T07:01:30.870Z","3.1.0":"2022-12-19T07:01:31.107Z","modified":"2022-12-19T07:01:31.220Z"},"maintainers":[{"name":"benvp","email":"ben@vp.solutions"}],"description":"Apollo graphql subscription over Kafka protocol","homepage":"https://github.com/benvp/graphql-kafkajs-subscriptions#readme","keywords":["graphql","kafka","apollo","subscriptions"],"repository":{"type":"git","url":"git+https://github.com/benvp/graphql-kafkajs-subscriptions.git"},"author":{"name":"Tomas Alabes"},"bugs":{"url":"https://github.com/benvp/graphql-kafkajs-subscriptions/issues"},"license":"MIT","readme":"# graphql-kafkajs-subscriptions\n\nApollo graphql subscriptions over Kafka, using [kafkajs](https://github.com/tulios/kafkajs). Inspired on [graphql-kafka-subscriptions](https://github.com/ancashoria/graphql-kafka-subscriptions).\n\nCommunication is done through 1 kafka topic specified in the `KafkaPubSub` `create` function. Then\nchannels are used to identify the right subscription.\n\n## Installation\n\n```shell\n  npm install graphql-kafkajs-subscriptions\n```\n\n```shell\n  yarn add graphql-kafkajs-subscriptions\n```\n\n## Usage\n\n### Kafka Pub Sub\n\n```javascript\nimport { Kafka } from 'kafkajs';\nimport { KafkaPubSub } from 'graphql-kafkajs-subscriptions'\n\nexport const pubsub = KafkaPubSub.create({\n  topic: 'my-topic',\n  kafka: new Kafka({/* ... */})\n  groupIdPrefix: \"my-group-id-prefix\", // used for kafka pub/sub,\n  producerConfig: {}, // optional kafkajs producer configuration\n  consumerConfig: {} // optional kafkajs consumer configuration\n})\n```\n\n### Subscription Resolver\n\n```javascript\n{\n    collaboration: {\n      resolve: (payload: KafkaMessage) => {\n        // payload.value will be whatever you sent\n        return payload.value;\n      },\n      subscribe: (_, args) => {\n        return pubsub.asyncIterator<YourType>(\"my channel\");\n      }\n    }\n  };\n```\n\nYou can also use the subscription payload for the channel.\n\n```javascript\n{\n    collaboration: {\n      resolve: (payload: KafkaMessage) => {\n        // what you publish will end up passing through here and to the client\n        return payload.value;\n      },\n      subscribe: (_, args) => {\n        // this is called from the client\n        return pubsub.asyncIterator<YourType>(`channel-${args.myId}`);\n      }\n    }\n  };\n```\n\n### Publication\n\nSomewhere in your code, you call this:\n\n```javascript\npubsub.publish(\"my channel\", {\n  /* your event data */\n});\n```\n\nUse the rest of the kafkajs options:\n\n```javascript\nconst event = {/* ... */};\nconst headers = {\n  header1: \"value\"\n};\nconst producerOptions = { /* options from kafka.js.org/docs/producing: acks, timeout, etc */ };\n\npubsub.publish(\"my channel\", event, headers, producerOptions);\n```\n\nThis ends up publishing the event to kafka (to the topic you used to create the `kafkaPubSub`)\nand received by all consumers. The consumer which is listening to `my channel` will send it\nto the client.\n","readmeFilename":"README.md"}