У меня есть локальная схема и удаленная схема. Локальная схема содержит подмножество удаленной схемы и должна передавать их на удаленный сервер graphql.
Обычно я бы использовал что-то вроде:
public async getCar(
obj: any,
args: any,
context: any,
info: any
): Promise<Car> {
return info.mergeInfo.delegateToSchema({
args: {
id: context.userId,
},
context: {},
fieldName: 'car',
info,
operation: 'query',
schema: carExecutableSchema,
transforms: [],
});
}
, но mergeInfo
недоступно в поле info
.
Чтобы получить удаленную схему, я использую:
const fetchRemoteSchema = async (): Promise<GraphQLSchema> => {
const http = new HttpLink({
fetch: nodeFetch,
uri: process.env.CAR_GRAPHQL_URL,
});
const link = setContext((request, previousContext) => ({
headers: {
Authorization: `Basic ${process.env.CAR_BASIC_AUTH_TOKEN}`,
},
})).concat(http);
const carSchema = await introspectSchema(link);
const executableSchema = makeRemoteExecutableSchema({
link,
schema: carSchema,
});
return executableSchema;
};
, и я использую это в модуле для инициализации graphql
GraphQLModule.forRootAsync({
imports: [CarModule],
inject: [CarService],
useFactory: (mainAppService: MainAppService) => ({
context: async ({ req }) => {
return {
userId: 1
};
},
definitions: {
outputAs: 'interface',
path: '../../myschema.gql',
},
typePaths: ['./**/*.graphql'],
}),
}),
Как я могу сделать mergeInfo
доступным? Или есть более простой способ делегировать запрос graphql?