0

I am trying to test an Apollo Federation 2 gateway. For that purpose, I generated schema from two subgraphs using Rover.

This results in supergraph.graphql:

schema
  @link(url: "https://specs.apollo.dev/link/v1.0")
  @link(url: "https://specs.apollo.dev/join/v0.2", for: EXECUTION)
{
  query: Query
}

directive @join__field(graph: join__Graph!, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION

directive @join__graph(name: String!, url: String!) on ENUM_VALUE

directive @join__implements(graph: join__Graph!, interface: String!) repeatable on OBJECT | INTERFACE

directive @join__type(graph: join__Graph!, key: join__FieldSet, extension: Boolean! = false, resolvable: Boolean! = true) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR

directive @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA

scalar DateTime
  @join__type(graph: OFFERS)

scalar join__FieldSet

enum join__Graph {
  OFFERS @join__graph(name: "offers", url: "http://offers-service.local/offer-service")
  ORDERS @join__graph(name: "orders", url: "http://orders-service.local/graphql")
}

scalar link__Import

enum link__Purpose {
  """
  `SECURITY` features provide metadata necessary to securely resolve fields.
  """
  SECURITY

  """
  `EXECUTION` features provide metadata necessary for operation execution.
  """
  EXECUTION
}

type Offer
  @join__type(graph: OFFERS)
{
  id: ID!
  title: String!
  category: String!
  created_at: DateTime!
  updated_at: DateTime!
}

type Query
  @join__type(graph: OFFERS)
  @join__type(graph: ORDERS)
{
  """List all offers."""
  getOffers: [Offer!]! @join__field(graph: OFFERS)
  me: User @join__field(graph: ORDERS)
}

type User
  @join__type(graph: ORDERS)
{
  id: ID!
  username: String
}

My entrypoint looks like:

import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';
import gql from 'graphql-tag';
import {readFileSync} from 'fs';

const schemaString = readFileSync('./supergraph.graphql').toString()
const supergraphSdl = gql` ${schemaString} `;

const server = new ApolloServer({
    supergraphSdl
});

const { url } = await startStandaloneServer(server, {
    listen: { port: 5001 }
});
console.log(`  Server ready at ${url}`);

However when I try to run the server, it throws me an error Error: Query root type must be provided. with no additional info. Query is clearly defined there. What could be the issue?

Denis
  • 322
  • 1
  • 4
  • 15

0 Answers0