6

In an NX monorepo I'm building 3 nestjs application, an auth-service + user-service and a gateway to start off with. They're all powered by apollo graphql and following the official nestjs documentation.

The issue that I'm having is that with both the user-service and auth-service up and processing requests successfully as individual servers, at the same time, the gateway throws

 Couldn't load service definitions for "auth" at http://localhost:3100/apis/auth-service/graphql: 400: Bad Request

The services themselves are standard graphql applications, nothing basic.

The definitions for the gateway are as such:

{
server: {
          debug: true,
          playground: true,
          autoSchemaFile: './apps/gateway/schema.gql',
          sortSchema: true,
          introspection: true,
          cors: ['*'],
          path: '/apis/gateway/graphql';
        },
gateway: {
            supergraphSdl: new IntrospectAndCompose({
              subgraphHealthCheck: true,
              subgraphs: [
                {
                  name: 'user',
                  url: resolveSubgraphUrl('user'),
                },
                {
                  name: 'auth',
                  url: resolveSubgraphUrl('auth'),
                },
              ],
            }),
          }
}

I have created an nx based monorepository that allows you to reproduce this issue easily, by spinning up all 3 servers in watch mode at the same time, on localhost, on different ports.

Everything is mapped as it should. Link: https://github.com/sebastiangug/nestjs-federation.git

The README contains the two commands necessary to run it as well as the same set of instructions plus the health-checks queries available from each service.

Versions used:

    "@apollo/subgraph": "2.1.3",
    "@apollo/federation": "0.37.1",
    "@apollo/gateway": "2.1.3",
    "apollo-server-express": "3.6.7",
    "graphql": "16.5.0",
    "@nestjs/graphql": "10.1.3",
    "@nestjs/platform-express": "9.0.8",

Any ideas what I'm doing wrong here or what further configuration is necessary to achieve this?

Thank you

SebastianG
  • 8,563
  • 8
  • 47
  • 111

0 Answers0