@aaronpowell/graphql-cosmosdb-subscriptions
v0.3.0
Published
A GraphQL subscription library that uses the CosmosDB change feed as the event source
Downloads
10
Readme
CosmosDB GraphQL Subscriptions
This package contains support for Apollo GraphQL Subscriptions, using the Azure CosmosDB Change Feed.
Installation
Install via npm or GitHub Packages:
$> npm install --save @aaronpowell/graphql-cosmosdb-subscriptions
Usage
You'll need a SignalR Service account (if you don't have an Azure account sign up for free). Copy the connection string and provide it when you create an instance of SignalRPubSub
:
import { CosmosDBPubSub } from "@aaronpowell/graphql-cosmosdb-subscriptions";
const cosmosPubSub = new CosmosDBPubSub(
new CosmosClient(process.env.COSMOS_CONNECTION_STRING || "")
.database(process.env.COSMOS_DB || "")
.container(process.env.COSMOS_CONTAINER || "")
);
Unlike most pubsub libraries, you don't need to publish directly, messages are received when the Change Feed receives messages. When creating the subscription, you subscribe to a CosmosDB partition key value (in the below example type
is the partition key and we're subscription when type = 'message'
).
export const resolvers = {
Query: {
async hello(parent, args, { dataSources }) {
const text = `Message! ${Date.now()}`;
await dataSources.messages.createOne({
id: Date.now() + "",
text,
type: "message",
});
return text;
},
},
Subscription: {
getMessage: {
subscribe: () => cosmosPubSub.asyncIterator(["message"]),
},
},
};