import { HttpResponse } from "@aws-sdk/protocol-http"; import { AbsoluteLocation, HandlerExecutionContext, InitializeHandler, InitializeHandlerArguments, InitializeHandlerOptions, InitializeHandlerOutput, MetadataBearer, Pluggable, } from "@aws-sdk/types"; export const loggerMiddleware = () => ( next: InitializeHandler, context: HandlerExecutionContext ): InitializeHandler => async (args: InitializeHandlerArguments): Promise> => { const { clientName, commandName, inputFilterSensitiveLog, logger, outputFilterSensitiveLog } = context; const response = await next(args); if (!logger) { return response; } if (typeof logger.info === "function") { const { $metadata, ...outputWithoutMetadata } = response.output; logger.info({ clientName, commandName, input: inputFilterSensitiveLog(args.input), output: outputFilterSensitiveLog(outputWithoutMetadata), metadata: $metadata, }); } return response; }; export const loggerMiddlewareOptions: InitializeHandlerOptions & AbsoluteLocation = { name: "loggerMiddleware", tags: ["LOGGER"], step: "initialize", override: true, }; // eslint-disable-next-line @typescript-eslint/no-unused-vars export const getLoggerPlugin = (options: any): Pluggable => ({ applyToStack: (clientStack) => { clientStack.add(loggerMiddleware(), loggerMiddlewareOptions); }, });