Skip to content

Commit 9ba4f31

Browse files
committed
feat(graphql): added subscriptions to the apollo federation driver
1 parent 5be746c commit 9ba4f31

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

packages/apollo/lib/drivers/apollo-federation.driver.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { Injectable } from '@nestjs/common';
22
import { loadPackage } from '@nestjs/common/utils/load-package.util';
33
import { 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';
510
import { GraphQLSchema } from 'graphql';
611
import { ApolloDriverConfig } from '../interfaces';
712
import { PluginsExplorerService } from '../services/plugins-explorer.service';
@@ -12,6 +17,7 @@ import { ApolloBaseDriver } from './apollo-base.driver';
1217
*/
1318
@Injectable()
1419
export 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

Comments
 (0)