typescript - GraphQL-schema's samenvoegen en header behouden
Ik heb een GraphQL-gateway gemaakt die een beetje werkt. Hij haalt schema's op en verbindt ze van 2 verschillende GraphQL-API's
momenteel ziet het er zo uit
import { loadSchema } from '@graphql-tools/load';
import { UrlLoader } from '@graphql-tools/url-loader';
import { addResolversToSchema } from '@graphql-tools/schema';
import { stitchSchemas } from '@graphql-tools/stitch';
import { print } from 'graphql';
export class SchemaLoader {
jwt: string;
constructor(jwt: string) {
this.jwt = jwt;
}
async loadSchemas() {
let schemas = [];
for (let url of ['http://localhost:4000/graphql', 'http://localhost:4001/graphql'])
schemas.push({
schema: await loadSchema(url, {
loaders: [new UrlLoader()]
}),
executor: async (context) => {
const { document, variables } = context;
const query = print(document);
console.log('fetching gql ' + this.jwt);
const fetchResult = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
jwt: this.jwt
},
body: JSON.stringify({ query: query, variables })
});
return fetchResult.json();
}
});
let schema = addResolversToSchema({
schema: stitchSchemas({
subschemas: schemas
}),
resolvers: {}
});
return schema;
}
}
en voor de meeste bewerkingen werkt dit. Echter niet voor geauthenticeerde verzoeken die de jwt header nodig hebben en ik kan echt niet achterhalen waarom/wat te doen.
de console.log print de jwt als null, maar als ik de print naar het begin van de functie verplaats, is er een token beschikbaar