@graphql-mesh/transport-rest
Version:
32 lines (31 loc) • 1.92 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.processPubSubOperationAnnotations = void 0;
const string_interpolation_1 = require("@graphql-mesh/string-interpolation");
const utils_1 = require("@graphql-tools/utils");
function processPubSubOperationAnnotations({ field, globalPubsub, pubsubTopic, logger: globalLogger, }) {
field.subscribe = function pubSubSubscribeFn(root, args, context, info) {
const logger = context?.logger || globalLogger;
const operationLogger = logger.child(`${info.parentType.name}.${field.name}`);
const pubsub = context?.pubsub || globalPubsub;
if (!pubsub) {
return (0, utils_1.createGraphQLError)(`You should have PubSub defined in either the config or the context!`);
}
const interpolationData = { root, args, context, info, env: process.env };
let interpolatedPubSubTopic = string_interpolation_1.stringInterpolator.parse(pubsubTopic, interpolationData);
if (interpolatedPubSubTopic.startsWith('webhook:')) {
const [, expectedMethod, expectedUrl] = interpolatedPubSubTopic.split(':');
const expectedPath = new URL(expectedUrl, 'http://localhost').pathname;
interpolatedPubSubTopic = `webhook:${expectedMethod}:${expectedPath}`;
}
operationLogger.debug(`${info.parentType.name}.${field.name} => Subscribing to pubSubTopic: ${interpolatedPubSubTopic}`);
return pubsub.asyncIterator(interpolatedPubSubTopic);
};
field.resolve = function pubSubResolver(root, args, context, info) {
const logger = context?.logger || globalLogger;
const operationLogger = logger.child(`${info.parentType.name}.${field.name}`);
operationLogger.debug('Received ', root, ' from ', pubsubTopic);
return root;
};
}
exports.processPubSubOperationAnnotations = processPubSubOperationAnnotations;
;