UNPKG

@graphql-mesh/transport-rest

Version:
32 lines (31 loc) 1.92 kB
"use strict"; 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;