UNPKG

serverless-spy

Version:

CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.

46 lines (45 loc) 1.85 kB
import { NoOpLogger } from "@smithy/smithy-client"; export const resolveQueueUrlConfig = (config) => { return { ...config, useQueueUrlAsEndpoint: config.useQueueUrlAsEndpoint ?? true, }; }; export function queueUrlMiddleware({ useQueueUrlAsEndpoint, endpoint }) { return (next, context) => { return async (args) => { const { input } = args; const resolvedEndpoint = context.endpointV2; if (!endpoint && input.QueueUrl && resolvedEndpoint && useQueueUrlAsEndpoint) { const logger = context.logger instanceof NoOpLogger || !context.logger?.warn ? console : context.logger; try { const queueUrl = new URL(input.QueueUrl); const queueUrlOrigin = new URL(queueUrl.origin); if (resolvedEndpoint.url.origin !== queueUrlOrigin.origin) { logger.warn(`QueueUrl=${input.QueueUrl} differs from SQSClient resolved endpoint=${resolvedEndpoint.url.toString()}, using QueueUrl host as endpoint. Set [endpoint=string] or [useQueueUrlAsEndpoint=false] on the SQSClient.`); context.endpointV2 = { ...resolvedEndpoint, url: queueUrlOrigin, }; } } catch (e) { logger.warn(e); } } return next(args); }; }; } export const queueUrlMiddlewareOptions = { name: "queueUrlMiddleware", relation: "after", toMiddleware: "endpointV2Middleware", override: true, }; export const getQueueUrlPlugin = (config) => ({ applyToStack: (clientStack) => { clientStack.addRelativeTo(queueUrlMiddleware(config), queueUrlMiddlewareOptions); }, });