@graphql-mesh/serve-runtime
Version:
38 lines (37 loc) • 1.62 kB
JavaScript
import { defaultTransportsOption, getOnSubgraphExecute, } from '@graphql-mesh/fusion-runtime';
export function getProxyExecutor(config, configContext, getSchema) {
const fakeTransportEntryMap = {};
let subgraphName = 'upstream';
const onSubgraphExecute = getOnSubgraphExecute({
plugins: config.plugins?.(configContext),
getFusiongraph: getSchema,
transports() {
if (typeof config.transport === 'object') {
return config.transport;
}
if (typeof config.transport === 'function') {
return config.transport();
}
return defaultTransportsOption('http');
},
transportEntryMap: new Proxy(fakeTransportEntryMap, {
get(fakeTransportEntryMap, subgraphNameProp) {
if (!fakeTransportEntryMap[subgraphNameProp]) {
subgraphName = subgraphNameProp;
fakeTransportEntryMap[subgraphNameProp] = {
kind: 'http',
subgraph: subgraphName.toString(),
location: config.proxy?.endpoint,
headers: config.proxy?.headers,
options: config.proxy,
};
}
return fakeTransportEntryMap[subgraphNameProp];
},
}),
transportBaseContext: configContext,
});
return function proxyExecutor(executionRequest) {
return onSubgraphExecute(subgraphName, executionRequest.document, executionRequest.variables, executionRequest.context);
};
}