11import { Injectable } from '@nestjs/common' ;
22import { loadPackage } from '@nestjs/common/utils/load-package.util' ;
33import { ModulesContainer } from '@nestjs/core' ;
4- import { extend , GraphQLFederationFactory } from '@nestjs/graphql' ;
4+ import {
5+ extend ,
6+ GqlSubscriptionService ,
7+ GraphQLFederationFactory ,
8+ SubscriptionConfig ,
9+ } from '@nestjs/graphql' ;
510import { GraphQLSchema } from 'graphql' ;
611import { ApolloDriverConfig } from '../interfaces' ;
712import { PluginsExplorerService } from '../services/plugins-explorer.service' ;
@@ -12,6 +17,7 @@ import { ApolloBaseDriver } from './apollo-base.driver';
1217 */
1318@Injectable ( )
1419export class ApolloFederationDriver extends ApolloBaseDriver {
20+ private _subscriptionService ?: GqlSubscriptionService ;
1521 private readonly pluginsExplorerService : PluginsExplorerService ;
1622
1723 constructor (
@@ -43,9 +49,16 @@ export class ApolloFederationDriver extends ApolloBaseDriver {
4349 await super . start ( options ) ;
4450
4551 if ( options . installSubscriptionHandlers || options . subscriptions ) {
46- // TL;DR <https://github.com/apollographql/apollo-server/issues/2776>
47- throw new Error (
48- 'No support for subscriptions yet when using Apollo Federation' ,
52+ const subscriptionsOptions : SubscriptionConfig =
53+ options . subscriptions || { 'subscriptions-transport-ws' : { } } ;
54+ this . _subscriptionService = new GqlSubscriptionService (
55+ {
56+ schema : options . schema ,
57+ path : options . path ,
58+ context : options . context ,
59+ ...subscriptionsOptions ,
60+ } ,
61+ this . httpAdapterHost . httpAdapter ?. getHttpServer ( ) ,
4962 ) ;
5063 }
5164 }
0 commit comments