const { createClient } = require('graphql-ws'); const WebSocket = require('ws'); const { PubSub } = require('graphql-subscriptions'); const pubsub = new PubSub(); const PROJECTS_MUTATED = 'PROJECTS_MUTATED'; const client = createClient({ url: 'wss://directus.andert.me/graphql', keepAlive: 30000, webSocketImpl: WebSocket, connectionParams: async () => { return { access_token: 'Mb3NMqKwiyesxDeJRTD72VZZ6f4t3mBr' }; }, }); client.subscribe( { query: ` subscription { projects_mutated { key event data { id text date_updated user_updated { first_name } } } } `, }, { next: data => { if (data && data.data && data.data.projects_mutated) { pubsub.publish(PROJECTS_MUTATED, { projects_mutated: data.data.projects_mutated }); } }, error: error => console.error('error:', error), } ); module.exports = { Subscription: { projects_mutated: { subscribe: () => pubsub.asyncIterator([PROJECTS_MUTATED]), resolve: payload => payload.projects_mutated, }, }, };