Zoeken op website

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