apollographql / graphql-subscriptions

:newspaper: A small module that implements GraphQL subscriptions for Node.js
MIT License
1.58k stars 133 forks source link

Ability to dynamically add/remove topics to/from asyncIterator #256

Open dimatillck opened 2 years ago

dimatillck commented 2 years ago

Hi, I wonder if there is a place for such functionality in this library. What I'm trying to achieve is to be able to do something like that:

const SOMETHING_CHANGED_TOPIC = 'something_changed';
const SOMETHING_OTHER_CHANGED_TOPIC = 'something_other_changed';

export const resolvers = {
  Subscription: {
    anythingChanged: {
      subscribe: () => {
        const asyncIterator = pubsub.asyncIterator(SOMETHING_CHANGED_TOPIC);

        subscribeToInternalEvent('internal_event', (event) => {
          if (event.shouldSubscribeToSomethingOther) {
            asyncIterator.subscribe(SOMETHING_OTHER_CHANGED_TOPIC);
          }

          if (event.shouldUnsubscribeFromSomethingOther) {
            asyncIterator.unsubscribe(SOMETHING_OTHER_CHANGED_TOPIC);
          }
        });

        return asyncIterator;
      },
    },
  },
}

I have some implementation of this feature and I can create a PR to continue the discussion if there is a place for this feature in this library.