0

I have an Express + Apollo Server backend. I enabled subscriptions on it using ws and graphql-ws. Everything is working fine.

Now, I would like to handle resolvers errors properly: hide backend details in production, change message based on error type, add a unique ID, etc. On regular mutations, I'm able to do so using the formatResponse function.

On subscriptions, I can't find where I could do it. All I need is a function called before sending data to the client where I have access to data and errors.

How can I do that?

Here's how the WS Server is created:

// Create Web Socket Server
const wsServer = new WebSocketServer({
    server: httpServer,
    path: '/graphql'
});

const serverCleanup = graphqlWS.useServer(
    {
        schema: graphqlApp.schema,
        context: async (ctx: any) => {
            try {
                // ...Some auth checking...

                return context;
            } catch (e) {
                throw new ApolloAuthenticationError('you must be logged in');
            }
        }
    },
    wsServer
);

And an example of event sending:

import {PubSub} from 'graphql-subscriptions';
// ... 
Subscription: {
    tree: {
        subscribe: withFilter(
            () => pubsub.asyncIterator('some_id'),
            (payload, variables) => {
                const canReturn = true;
                //...Some filtering logic...

                return canReturn;
            }
        )
    }
},
Tdy
  • 863
  • 12
  • 28

0 Answers0