53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
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,
|
|
},
|
|
},
|
|
}; |