Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@aws-sdk/middleware-logger

Package Overview
Dependencies
Maintainers
5
Versions
143
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-sdk/middleware-logger - npm Package Compare versions

Comparing version 3.0.0 to 3.1.0

16

CHANGELOG.md

@@ -6,2 +6,18 @@ # Change Log

# [3.1.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.0.0...v3.1.0) (2020-12-23)
### Bug Fixes
* log requestId, extendedRequestId, cfId in $metadata ([#1819](https://github.com/aws/aws-sdk-js-v3/issues/1819)) ([f2a47e8](https://github.com/aws/aws-sdk-js-v3/commit/f2a47e80965f96b86fa42038bf2711b922eee302))
### Features
* **middleware-logger:** log clientName, commandName, input, output ([#1788](https://github.com/aws/aws-sdk-js-v3/issues/1788)) ([4f9e56f](https://github.com/aws/aws-sdk-js-v3/commit/4f9e56f1b7fd1cd9374b2577786e4ab0f6602aaa))
# [3.0.0](https://github.com/aws/aws-sdk-js-v3/compare/v1.0.0-rc.10...v3.0.0) (2020-12-15)

@@ -8,0 +24,0 @@

18

dist/cjs/loggerMiddleware.js

@@ -5,4 +5,3 @@ "use strict";

const loggerMiddleware = () => (next, context) => async (args) => {
var _a;
const { logger } = context;
const { clientName, commandName, inputFilterSensitiveLog, logger, outputFilterSensitiveLog } = context;
const response = await next(args);

@@ -12,11 +11,10 @@ if (!logger) {

}
const httpResponse = response.response;
if (typeof logger.info === "function") {
const { $metadata, ...outputWithoutMetadata } = response.output;
logger.info({
metadata: {
statusCode: httpResponse.statusCode,
requestId: (_a = httpResponse.headers["x-amzn-requestid"]) !== null && _a !== void 0 ? _a : httpResponse.headers["x-amzn-request-id"],
extendedRequestId: httpResponse.headers["x-amz-id-2"],
cfId: httpResponse.headers["x-amz-cf-id"],
},
clientName,
commandName,
input: inputFilterSensitiveLog(args.input),
output: outputFilterSensitiveLog(outputWithoutMetadata),
metadata: $metadata,
});

@@ -39,2 +37,2 @@ }

exports.getLoggerPlugin = getLoggerPlugin;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dnZXJNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVlPLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FDcEMsSUFBb0MsRUFDcEMsT0FBZ0MsRUFDQSxFQUFFLENBQUMsS0FBSyxFQUN4QyxJQUFxQyxFQUNLLEVBQUU7O0lBQzVDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0lBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQXdCLENBQUM7SUFFdkQsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixRQUFRLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVO2dCQUNuQyxTQUFTLFFBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxtQ0FBSSxZQUFZLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2dCQUNoRyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDckQsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQzFDO1NBQ0YsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUE1QlcsUUFBQSxnQkFBZ0Isb0JBNEIzQjtBQUVXLFFBQUEsdUJBQXVCLEdBQWdEO0lBQ2xGLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO0lBQ2hCLElBQUksRUFBRSxZQUFZO0NBQ25CLENBQUM7QUFFRiw2REFBNkQ7QUFDdEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFZLEVBQXVCLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLFlBQVksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQzVCLFdBQVcsQ0FBQyxHQUFHLENBQUMsd0JBQWdCLEVBQUUsRUFBRSwrQkFBdUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRixDQUFDLENBQUM7QUFKVSxRQUFBLGVBQWUsbUJBSXpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIjtcbmltcG9ydCB7XG4gIEFic29sdXRlTG9jYXRpb24sXG4gIEhhbmRsZXJFeGVjdXRpb25Db250ZXh0LFxuICBJbml0aWFsaXplSGFuZGxlcixcbiAgSW5pdGlhbGl6ZUhhbmRsZXJBcmd1bWVudHMsXG4gIEluaXRpYWxpemVIYW5kbGVyT3B0aW9ucyxcbiAgSW5pdGlhbGl6ZUhhbmRsZXJPdXRwdXQsXG4gIE1ldGFkYXRhQmVhcmVyLFxuICBQbHVnZ2FibGUsXG59IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgbG9nZ2VyTWlkZGxld2FyZSA9ICgpID0+IDxPdXRwdXQgZXh0ZW5kcyBNZXRhZGF0YUJlYXJlciA9IE1ldGFkYXRhQmVhcmVyPihcbiAgbmV4dDogSW5pdGlhbGl6ZUhhbmRsZXI8YW55LCBPdXRwdXQ+LFxuICBjb250ZXh0OiBIYW5kbGVyRXhlY3V0aW9uQ29udGV4dFxuKTogSW5pdGlhbGl6ZUhhbmRsZXI8YW55LCBPdXRwdXQ+ID0+IGFzeW5jIChcbiAgYXJnczogSW5pdGlhbGl6ZUhhbmRsZXJBcmd1bWVudHM8YW55PlxuKTogUHJvbWlzZTxJbml0aWFsaXplSGFuZGxlck91dHB1dDxPdXRwdXQ+PiA9PiB7XG4gIGNvbnN0IHsgbG9nZ2VyIH0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dChhcmdzKTtcblxuICBpZiAoIWxvZ2dlcikge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IGh0dHBSZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlIGFzIEh0dHBSZXNwb25zZTtcblxuICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuaW5mbyh7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzdGF0dXNDb2RlOiBodHRwUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgcmVxdWVzdElkOiBodHRwUmVzcG9uc2UuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0aWRcIl0gPz8gaHR0cFJlc3BvbnNlLmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdC1pZFwiXSxcbiAgICAgICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IGh0dHBSZXNwb25zZS5oZWFkZXJzW1wieC1hbXotaWQtMlwiXSxcbiAgICAgICAgY2ZJZDogaHR0cFJlc3BvbnNlLmhlYWRlcnNbXCJ4LWFtei1jZi1pZFwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG5leHBvcnQgY29uc3QgbG9nZ2VyTWlkZGxld2FyZU9wdGlvbnM6IEluaXRpYWxpemVIYW5kbGVyT3B0aW9ucyAmIEFic29sdXRlTG9jYXRpb24gPSB7XG4gIG5hbWU6IFwibG9nZ2VyTWlkZGxld2FyZVwiLFxuICB0YWdzOiBbXCJMT0dHRVJcIl0sXG4gIHN0ZXA6IFwiaW5pdGlhbGl6ZVwiLFxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGNvbnN0IGdldExvZ2dlclBsdWdpbiA9IChvcHRpb25zOiBhbnkpOiBQbHVnZ2FibGU8YW55LCBhbnk+ID0+ICh7XG4gIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgY2xpZW50U3RhY2suYWRkKGxvZ2dlck1pZGRsZXdhcmUoKSwgbG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMpO1xuICB9LFxufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dnZXJNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVlPLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FDcEMsSUFBb0MsRUFDcEMsT0FBZ0MsRUFDQSxFQUFFLENBQUMsS0FBSyxFQUN4QyxJQUFxQyxFQUNLLEVBQUU7SUFDNUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXZHLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxPQUFPLFFBQVEsQ0FBQztLQUNqQjtJQUVELElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcscUJBQXFCLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixVQUFVO1lBQ1YsV0FBVztZQUNYLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQztZQUN2RCxRQUFRLEVBQUUsU0FBUztTQUNwQixDQUFDLENBQUM7S0FDSjtJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQTFCVyxRQUFBLGdCQUFnQixvQkEwQjNCO0FBRVcsUUFBQSx1QkFBdUIsR0FBZ0Q7SUFDbEYsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDaEIsSUFBSSxFQUFFLFlBQVk7Q0FDbkIsQ0FBQztBQUVGLDZEQUE2RDtBQUN0RCxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQVksRUFBdUIsRUFBRSxDQUFDLENBQUM7SUFDckUsWUFBWSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDNUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyx3QkFBZ0IsRUFBRSxFQUFFLCtCQUF1QixDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUpVLFFBQUEsZUFBZSxtQkFJekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tIFwiQGF3cy1zZGsvcHJvdG9jb2wtaHR0cFwiO1xuaW1wb3J0IHtcbiAgQWJzb2x1dGVMb2NhdGlvbixcbiAgSGFuZGxlckV4ZWN1dGlvbkNvbnRleHQsXG4gIEluaXRpYWxpemVIYW5kbGVyLFxuICBJbml0aWFsaXplSGFuZGxlckFyZ3VtZW50cyxcbiAgSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zLFxuICBJbml0aWFsaXplSGFuZGxlck91dHB1dCxcbiAgTWV0YWRhdGFCZWFyZXIsXG4gIFBsdWdnYWJsZSxcbn0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBsb2dnZXJNaWRkbGV3YXJlID0gKCkgPT4gPE91dHB1dCBleHRlbmRzIE1ldGFkYXRhQmVhcmVyID0gTWV0YWRhdGFCZWFyZXI+KFxuICBuZXh0OiBJbml0aWFsaXplSGFuZGxlcjxhbnksIE91dHB1dD4sXG4gIGNvbnRleHQ6IEhhbmRsZXJFeGVjdXRpb25Db250ZXh0XG4pOiBJbml0aWFsaXplSGFuZGxlcjxhbnksIE91dHB1dD4gPT4gYXN5bmMgKFxuICBhcmdzOiBJbml0aWFsaXplSGFuZGxlckFyZ3VtZW50czxhbnk+XG4pOiBQcm9taXNlPEluaXRpYWxpemVIYW5kbGVyT3V0cHV0PE91dHB1dD4+ID0+IHtcbiAgY29uc3QgeyBjbGllbnROYW1lLCBjb21tYW5kTmFtZSwgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2csIGxvZ2dlciwgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nIH0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV4dChhcmdzKTtcblxuICBpZiAoIWxvZ2dlcikge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbG9nZ2VyLmluZm8gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IHsgJG1ldGFkYXRhLCAuLi5vdXRwdXRXaXRob3V0TWV0YWRhdGEgfSA9IHJlc3BvbnNlLm91dHB1dDtcbiAgICBsb2dnZXIuaW5mbyh7XG4gICAgICBjbGllbnROYW1lLFxuICAgICAgY29tbWFuZE5hbWUsXG4gICAgICBpbnB1dDogaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2coYXJncy5pbnB1dCksXG4gICAgICBvdXRwdXQ6IG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyhvdXRwdXRXaXRob3V0TWV0YWRhdGEpLFxuICAgICAgbWV0YWRhdGE6ICRtZXRhZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2dnZXJNaWRkbGV3YXJlT3B0aW9uczogSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zICYgQWJzb2x1dGVMb2NhdGlvbiA9IHtcbiAgbmFtZTogXCJsb2dnZXJNaWRkbGV3YXJlXCIsXG4gIHRhZ3M6IFtcIkxPR0dFUlwiXSxcbiAgc3RlcDogXCJpbml0aWFsaXplXCIsXG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgY29uc3QgZ2V0TG9nZ2VyUGx1Z2luID0gKG9wdGlvbnM6IGFueSk6IFBsdWdnYWJsZTxhbnksIGFueT4gPT4gKHtcbiAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICBjbGllbnRTdGFjay5hZGQobG9nZ2VyTWlkZGxld2FyZSgpLCBsb2dnZXJNaWRkbGV3YXJlT3B0aW9ucyk7XG4gIH0sXG59KTtcbiJdfQ==

@@ -28,2 +28,11 @@ "use strict";

};
const mockOutput = {
$metadata: {
statusCode: 200,
requestId: "requestId",
attempts: 2,
totalRetryDelay: 350,
},
outputKey: "outputValue",
};
const mockResponse = {

@@ -38,5 +47,3 @@ response: {

},
output: {
outputKey: "outputValue",
},
output: mockOutput,
};

@@ -59,51 +66,69 @@ afterEach(() => {

});
it("logs metadata if context.logger has info function", async () => {
mockNext.mockResolvedValueOnce(mockResponse);
const logger = { info: jest.fn() };
const context = {
logger,
};
const response = await loggerMiddleware_1.loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(mockResponse);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
metadata: {
statusCode: mockResponse.response.statusCode,
requestId: mockResponse.response.headers["x-amzn-requestid"],
extendedRequestId: mockResponse.response.headers["x-amz-id-2"],
cfId: mockResponse.response.headers["x-amz-cf-id"],
},
describe("logs if context.logger has info function", () => {
it("success case with clientName, commandName, input, metadata", async () => {
mockNext.mockResolvedValueOnce(mockResponse);
const logger = { info: jest.fn() };
const clientName = "mockClientName";
const commandName = "mockCommandName";
const mockInputLog = { inputKey: "inputKey", inputSensitiveKey: "SENSITIVE_VALUE" };
const inputFilterSensitiveLog = jest.fn().mockReturnValueOnce(mockInputLog);
const mockOutputLog = { outputKey: "outputKey", outputSensitiveKey: "SENSITIVE_VALUE" };
const outputFilterSensitiveLog = jest.fn().mockReturnValueOnce(mockOutputLog);
const context = {
logger,
clientName,
commandName,
inputFilterSensitiveLog,
outputFilterSensitiveLog,
};
const response = await loggerMiddleware_1.loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(mockResponse);
expect(inputFilterSensitiveLog).toHaveBeenCalledTimes(1);
expect(inputFilterSensitiveLog).toHaveBeenCalledWith(mockArgs.input);
const { $metadata, ...outputWithoutMetadata } = mockOutput;
expect(outputFilterSensitiveLog).toHaveBeenCalledTimes(1);
expect(outputFilterSensitiveLog).toHaveBeenCalledWith(outputWithoutMetadata);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
clientName,
commandName,
input: mockInputLog,
output: mockOutputLog,
metadata: $metadata,
});
});
});
it("logs header x-amzn-request-id as requestId if x-amzn-requestid is not present", async () => {
const requestIdBackup = "requestIdBackup";
const customResponse = {
...mockResponse,
response: {
...mockResponse.response,
headers: {
"x-amzn-request-id": requestIdBackup,
it("header x-amzn-request-id as requestId if x-amzn-requestid is not present", async () => {
const requestIdBackup = "requestIdBackup";
const customResponse = {
...mockResponse,
response: {
...mockResponse.response,
headers: {
"x-amzn-request-id": requestIdBackup,
},
},
},
};
mockNext.mockResolvedValueOnce(customResponse);
const logger = { info: jest.fn() };
const context = {
logger,
};
const response = await loggerMiddleware_1.loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(customResponse);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
metadata: {
statusCode: customResponse.response.statusCode,
requestId: requestIdBackup,
extendedRequestId: undefined,
cfId: undefined,
},
};
mockNext.mockResolvedValueOnce(customResponse);
const logger = { info: jest.fn() };
const inputFilterSensitiveLog = jest.fn().mockImplementationOnce((input) => input);
const outputFilterSensitiveLog = jest.fn().mockImplementationOnce((output) => output);
const context = {
logger,
inputFilterSensitiveLog,
outputFilterSensitiveLog,
};
const response = await loggerMiddleware_1.loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(customResponse);
const { $metadata, ...outputWithoutMetadata } = mockOutput;
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
input: mockArgs.input,
output: outputWithoutMetadata,
metadata: $metadata,
});
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZ2dlck1pZGRsZXdhcmUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLHlEQUFnRztBQUVoRyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0tBQ2YsQ0FBQztJQUVGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLGtDQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFFLGVBQXdELENBQUMsQ0FBQztRQUM1RixNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsMENBQXVCLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFM0IsTUFBTSxRQUFRLEdBQUc7UUFDZixLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsWUFBWTtTQUN2QjtRQUNELE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLEVBQUU7U0FDWjtLQUNGLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRztRQUNuQixRQUFRLEVB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RTtnQkFDUixHQUFHLFlBQVksQ0FBQyxRQUFRO2dCQUN4QixPQUFPLEVBQUU7b0JBQ1AsbUJBQW1CLEVBQUUsZUFBZTtpQkFDckM7YUFDRjtTQUNGLENBQUM7UUFDRixRQUFRLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUF3QixDQUFDO1FBRTFELE1BQU0sT0FBTyxHQUFHO1lBQ2QsTUFBTTtTQUNQLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLG1DQUFnQixFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztZQUN2QyxRQUFRLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsVUFBVTtnQkFDOUMsU0FBUyxFQUFFLGVBQWU7Z0JBQzFCLGlCQUFpQixFQUFFLFNBQVM7Z0JBQzVCLElBQUksRUFBRSxTQUFTO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlciwgTWlkZGxld2FyZVN0YWNrIH0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlclBsdWdpbiwgbG9nZ2VyTWlkZGxld2FyZSwgbG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tIFwiLi9sb2dnZXJNaWRkbGV3YXJlXCI7XG5cbmRlc2NyaWJlKFwiZ2V0TG9nZ2VyUGx1Z2luXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja0NsaWVudFN0YWNrID0ge1xuICAgIGFkZDogamVzdC5mbigpLFxuICB9O1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyBsb2dnZXJNaWRkbGV3YXJlXCIsICgpID0+IHtcbiAgICBnZXRMb2dnZXJQbHVnaW4oe30pLmFwcGx5VG9TdGFjaygobW9ja0NsaWVudFN0YWNrIGFzIHVua25vd24pIGFzIE1pZGRsZXdhcmVTdGFjazxhbnksIGFueT4pO1xuICAgIGV4cGVjdChtb2NrQ2xpZW50U3RhY2suYWRkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KG1vY2tDbGllbnRTdGFjay5hZGQubW9jay5jYWxsc1swXVsxXSkudG9FcXVhbChsb2dnZXJNaWRkbGV3YXJlT3B0aW9ucyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwibG9nZ2VyTWlkZGxld2FyZVwiLCAoKSA9PiB7XG4gIGNvbnN0IG1vY2tOZXh0ID0gamVzdC5mbigpO1xuXG4gIGNvbnN0IG1vY2tBcmdzID0ge1xuICAgIGlucHV0OiB7XG4gICAgICBpbnB1dEtleTogXCJpbnB1dFZhbHVlXCIsXG4gICAgfSxcbiAgICByZXF1ZXN0OiB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG1vY2tSZXNwb25zZSA9IHtcbiAgICByZXNwb25zZToge1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIngtYW16bi1yZXF1ZXN0aWRcIjogXCJyZXF1ZXN0SWRcIixcbiAgICAgICAgXCJ4LWFtei1pZC0yXCI6IFwiZXh0ZW5kZWRSZXF1ZXN0SWRcIixcbiAgICAgICAgXCJ4LWFtei1jZi1pZFwiOiBcImNmSWRcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvdXRwdXQ6IHtcbiAgICAgIG91dHB1dEtleTogXCJvdXRwdXRWYWx1ZVwiLFxuICAgIH0sXG4gIH07XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHdpdGhvdXQgbG9nZ2luZyBpZiBjb250ZXh0LmxvZ2dlciBpcyBub3QgZGVmaW5lZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja05leHQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKG1vY2tSZXNwb25zZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBsb2dnZXJNaWRkbGV3YXJlKCkobW9ja05leHQsIHt9KShtb2NrQXJncyk7XG4gICAgZXhwZWN0KG1vY2tOZXh0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KHJlc3BvbnNlKS50b1N0cmljdEVxdWFsKG1vY2tSZXNwb25zZSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyB3aXRob3V0IGxvZ2dpbmcgaWYgY29udGV4dC5sb2dnZXIgZG9lc24ndCBoYXZlIGluZm8gZnVuY3Rpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tOZXh0Lm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUmVzcG9uc2UpO1xuICAgIGNvbnN0IGxvZ2dlciA9IHt9IGFzIExvZ2dlcjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxvZ2dlck1pZGRsZXdhcmUoKShtb2NrTmV4dCwgeyBsb2dnZXIgfSkobW9ja0FyZ3MpO1xuICAgIGV4cGVjdChtb2NrTmV4dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChyZXNwb25zZSkudG9TdHJpY3RFcXVhbChtb2NrUmVzcG9uc2UpO1xuICB9KTtcblxuICBpdChcImxvZ3MgbWV0YWRhdGEgaWYgY29udGV4dC5sb2dnZXIgaGFzIGluZm8gZnVuY3Rpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tOZXh0Lm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUmVzcG9uc2UpO1xuICAgIGNvbnN0IGxvZ2dlciA9ICh7IGluZm86IGplc3QuZm4oKSB9IGFzIHVua25vd24pIGFzIExvZ2dlcjtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBsb2dnZXIsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbG9nZ2VyTWlkZGxld2FyZSgpKG1vY2tOZXh0LCBjb250ZXh0KShtb2NrQXJncyk7XG4gICAgZXhwZWN0KG1vY2tOZXh0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KHJlc3BvbnNlKS50b1N0cmljdEVxdWFsKG1vY2tSZXNwb25zZSk7XG5cbiAgICBleHBlY3QobG9nZ2VyLmluZm8pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgIGV4cGVjdChsb2dnZXIuaW5mbykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgc3RhdHVzQ29kZTogbW9ja1Jlc3BvbnNlLnJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgIHJlcXVlc3RJZDogbW9ja1Jlc3BvbnNlLnJlc3BvbnNlLmhlYWRlcnNbXCJ4LWFtem4tcmVxdWVzdGlkXCJdLFxuICAgICAgICBleHRlbmRlZFJlcXVlc3RJZDogbW9ja1Jlc3BvbnNlLnJlc3BvbnNlLmhlYWRlcnNbXCJ4LWFtei1pZC0yXCJdLFxuICAgICAgICBjZklkOiBtb2NrUmVzcG9uc2UucmVzcG9uc2UuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJsb2dzIGhlYWRlciB4LWFtem4tcmVxdWVzdC1pZCBhcyByZXF1ZXN0SWQgaWYgeC1hbXpuLXJlcXVlc3RpZCBpcyBub3QgcHJlc2VudFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdElkQmFja3VwID0gXCJyZXF1ZXN0SWRCYWNrdXBcIjtcbiAgICBjb25zdCBjdXN0b21SZXNwb25zZSA9IHtcbiAgICAgIC4uLm1vY2tSZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgIC4uLm1vY2tSZXNwb25zZS5yZXNwb25zZSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwieC1hbXpuLXJlcXVlc3QtaWRcIjogcmVxdWVzdElkQmFja3VwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIG1vY2tOZXh0Lm1vY2tSZXNvbHZlZFZhbHVlT25jZShjdXN0b21SZXNwb25zZSk7XG4gICAgY29uc3QgbG9nZ2VyID0gKHsgaW5mbzogamVzdC5mbigpIH0gYXMgdW5rbm93bikgYXMgTG9nZ2VyO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIGxvZ2dlcixcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBsb2dnZXJNaWRkbGV3YXJlKCkobW9ja05leHQsIGNvbnRleHQpKG1vY2tBcmdzKTtcbiAgICBleHBlY3QobW9ja05leHQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QocmVzcG9uc2UpLnRvU3RyaWN0RXF1YWwoY3VzdG9tUmVzcG9uc2UpO1xuXG4gICAgZXhwZWN0KGxvZ2dlci5pbmZvKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICBleHBlY3QobG9nZ2VyLmluZm8pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IGN1c3RvbVJlc3BvbnNlLnJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkQmFja3VwLFxuICAgICAgICBleHRlbmRlZFJlcXVlc3RJZDogdW5kZWZpbmVkLFxuICAgICAgICBjZklkOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZ2dlck1pZGRsZXdhcmUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLHlEQUFnRztBQUVoRyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0tBQ2YsQ0FBQztJQUVGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLGtDQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFFLGVBQXdELENBQUMsQ0FBQztRQUM1RixNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsMENBQXVCLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFM0IsTUFBTSxRQUFRLEdBQUc7UUFDZixLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsWUFBWTtTQUN2QjtRQUNELE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLEVBQUU7U0FDWjtLQUNGLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRztRQUNqQixTQUFTLEVB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YWNrIH0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlclBsdWdpbiwgbG9nZ2VyTWlkZGxld2FyZSwgbG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tIFwiLi9sb2dnZXJNaWRkbGV3YXJlXCI7XG5cbmRlc2NyaWJlKFwiZ2V0TG9nZ2VyUGx1Z2luXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja0NsaWVudFN0YWNrID0ge1xuICAgIGFkZDogamVzdC5mbigpLFxuICB9O1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyBsb2dnZXJNaWRkbGV3YXJlXCIsICgpID0+IHtcbiAgICBnZXRMb2dnZXJQbHVnaW4oe30pLmFwcGx5VG9TdGFjaygobW9ja0NsaWVudFN0YWNrIGFzIHVua25vd24pIGFzIE1pZGRsZXdhcmVTdGFjazxhbnksIGFueT4pO1xuICAgIGV4cGVjdChtb2NrQ2xpZW50U3RhY2suYWRkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KG1vY2tDbGllbnRTdGFjay5hZGQubW9jay5jYWxsc1swXVsxXSkudG9FcXVhbChsb2dnZXJNaWRkbGV3YXJlT3B0aW9ucyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwibG9nZ2VyTWlkZGxld2FyZVwiLCAoKSA9PiB7XG4gIGNvbnN0IG1vY2tOZXh0ID0gamVzdC5mbigpO1xuXG4gIGNvbnN0IG1vY2tBcmdzID0ge1xuICAgIGlucHV0OiB7XG4gICAgICBpbnB1dEtleTogXCJpbnB1dFZhbHVlXCIsXG4gICAgfSxcbiAgICByZXF1ZXN0OiB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG1vY2tPdXRwdXQgPSB7XG4gICAgJG1ldGFkYXRhOiB7XG4gICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICByZXF1ZXN0SWQ6IFwicmVxdWVzdElkXCIsXG4gICAgICBhdHRlbXB0czogMixcbiAgICAgIHRvdGFsUmV0cnlEZWxheTogMzUwLFxuICAgIH0sXG4gICAgb3V0cHV0S2V5OiBcIm91dHB1dFZhbHVlXCIsXG4gIH07XG5cbiAgY29uc3QgbW9ja1Jlc3BvbnNlID0ge1xuICAgIHJlc3BvbnNlOiB7XG4gICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwieC1hbXpuLXJlcXVlc3RpZFwiOiBcInJlcXVlc3RJZFwiLFxuICAgICAgICBcIngtYW16LWlkLTJcIjogXCJleHRlbmRlZFJlcXVlc3RJZFwiLFxuICAgICAgICBcIngtYW16LWNmLWlkXCI6IFwiY2ZJZFwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG91dHB1dDogbW9ja091dHB1dCxcbiAgfTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgd2l0aG91dCBsb2dnaW5nIGlmIGNvbnRleHQubG9nZ2VyIGlzIG5vdCBkZWZpbmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrTmV4dC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UobW9ja1Jlc3BvbnNlKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxvZ2dlck1pZGRsZXdhcmUoKShtb2NrTmV4dCwge30pKG1vY2tBcmdzKTtcbiAgICBleHBlY3QobW9ja05leHQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QocmVzcG9uc2UpLnRvU3RyaWN0RXF1YWwobW9ja1Jlc3BvbnNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHdpdGhvdXQgbG9nZ2luZyBpZiBjb250ZXh0LmxvZ2dlciBkb2Vzbid0IGhhdmUgaW5mbyBmdW5jdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja05leHQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKG1vY2tSZXNwb25zZSk7XG4gICAgY29uc3QgbG9nZ2VyID0ge30gYXMgTG9nZ2VyO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbG9nZ2VyTWlkZGxld2FyZSgpKG1vY2tOZXh0LCB7IGxvZ2dlciB9KShtb2NrQXJncyk7XG4gICAgZXhwZWN0KG1vY2tOZXh0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KHJlc3BvbnNlKS50b1N0cmljdEVxdWFsKG1vY2tSZXNwb25zZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwibG9ncyBpZiBjb250ZXh0LmxvZ2dlciBoYXMgaW5mbyBmdW5jdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzdWNjZXNzIGNhc2Ugd2l0aCBjbGllbnROYW1lLCBjb21tYW5kTmFtZSwgaW5wdXQsIG1ldGFkYXRhXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tOZXh0Lm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUmVzcG9uc2UpO1xuXG4gICAgICBjb25zdCBsb2dnZXIgPSAoeyBpbmZvOiBqZXN0LmZuKCkgfSBhcyB1bmtub3duKSBhcyBMb2dnZXI7XG4gICAgICBjb25zdCBjbGllbnROYW1lID0gXCJtb2NrQ2xpZW50TmFtZVwiO1xuICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBcIm1vY2tDb21tYW5kTmFtZVwiO1xuXG4gICAgICBjb25zdCBtb2NrSW5wdXRMb2cgPSB7IGlucHV0S2V5OiBcImlucHV0S2V5XCIsIGlucHV0U2Vuc2l0aXZlS2V5OiBcIlNFTlNJVElWRV9WQUxVRVwiIH07XG4gICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWVPbmNlKG1vY2tJbnB1dExvZyk7XG4gICAgICBjb25zdCBtb2NrT3V0cHV0TG9nID0geyBvdXRwdXRLZXk6IFwib3V0cHV0S2V5XCIsIG91dHB1dFNlbnNpdGl2ZUtleTogXCJTRU5TSVRJVkVfVkFMVUVcIiB9O1xuICAgICAgY29uc3Qgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZU9uY2UobW9ja091dHB1dExvZyk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgY29tbWFuZE5hbWUsXG4gICAgICAgIGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgICBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxvZ2dlck1pZGRsZXdhcmUoKShtb2NrTmV4dCwgY29udGV4dCkobW9ja0FyZ3MpO1xuICAgICAgZXhwZWN0KG1vY2tOZXh0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3QocmVzcG9uc2UpLnRvU3RyaWN0RXF1YWwobW9ja1Jlc3BvbnNlKTtcblxuICAgICAgZXhwZWN0KGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3QoaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tBcmdzLmlucHV0KTtcblxuICAgICAgY29uc3QgeyAkbWV0YWRhdGEsIC4uLm91dHB1dFdpdGhvdXRNZXRhZGF0YSB9ID0gbW9ja091dHB1dDtcbiAgICAgIGV4cGVjdChvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGV4cGVjdChvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG91dHB1dFdpdGhvdXRNZXRhZGF0YSk7XG5cbiAgICAgIGV4cGVjdChsb2dnZXIuaW5mbykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGxvZ2dlci5pbmZvKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICBpbnB1dDogbW9ja0lucHV0TG9nLFxuICAgICAgICBvdXRwdXQ6IG1vY2tPdXRwdXRMb2csXG4gICAgICAgIG1ldGFkYXRhOiAkbWV0YWRhdGEsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwiaGVhZGVyIHgtYW16bi1yZXF1ZXN0LWlkIGFzIHJlcXVlc3RJZCBpZiB4LWFtem4tcmVxdWVzdGlkIGlzIG5vdCBwcmVzZW50XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZEJhY2t1cCA9IFwicmVxdWVzdElkQmFja3VwXCI7XG4gICAgICBjb25zdCBjdXN0b21SZXNwb25zZSA9IHtcbiAgICAgICAgLi4ubW9ja1Jlc3BvbnNlLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIC4uLm1vY2tSZXNwb25zZS5yZXNwb25zZSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIngtYW16bi1yZXF1ZXN0LWlkXCI6IHJlcXVlc3RJZEJhY2t1cCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG1vY2tOZXh0Lm1vY2tSZXNvbHZlZFZhbHVlT25jZShjdXN0b21SZXNwb25zZSk7XG4gICAgICBjb25zdCBsb2dnZXIgPSAoeyBpbmZvOiBqZXN0LmZuKCkgfSBhcyB1bmtub3duKSBhcyBMb2dnZXI7XG4gICAgICBjb25zdCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKChpbnB1dCkgPT4gaW5wdXQpO1xuICAgICAgY29uc3Qgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKG91dHB1dCkgPT4gb3V0cHV0KTtcblxuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBsb2dnZXJNaWRkbGV3YXJlKCkobW9ja05leHQsIGNvbnRleHQpKG1vY2tBcmdzKTtcbiAgICAgIGV4cGVjdChtb2NrTmV4dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b1N0cmljdEVxdWFsKGN1c3RvbVJlc3BvbnNlKTtcblxuICAgICAgY29uc3QgeyAkbWV0YWRhdGEsIC4uLm91dHB1dFdpdGhvdXRNZXRhZGF0YSB9ID0gbW9ja091dHB1dDtcbiAgICAgIGV4cGVjdChsb2dnZXIuaW5mbykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGxvZ2dlci5pbmZvKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGlucHV0OiBtb2NrQXJncy5pbnB1dCxcbiAgICAgICAgb3V0cHV0OiBvdXRwdXRXaXRob3V0TWV0YWRhdGEsXG4gICAgICAgIG1ldGFkYXRhOiAkbWV0YWRhdGEsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==

@@ -1,9 +0,8 @@

import { __awaiter, __generator } from "tslib";
import { __awaiter, __generator, __rest } from "tslib";
export var loggerMiddleware = function () { return function (next, context) { return function (args) { return __awaiter(void 0, void 0, void 0, function () {
var logger, response, httpResponse;
var _a;
var clientName, commandName, inputFilterSensitiveLog, logger, outputFilterSensitiveLog, response, _a, $metadata, outputWithoutMetadata;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
logger = context.logger;
clientName = context.clientName, commandName = context.commandName, inputFilterSensitiveLog = context.inputFilterSensitiveLog, logger = context.logger, outputFilterSensitiveLog = context.outputFilterSensitiveLog;
return [4 /*yield*/, next(args)];

@@ -15,11 +14,10 @@ case 1:

}
httpResponse = response.response;
if (typeof logger.info === "function") {
_a = response.output, $metadata = _a.$metadata, outputWithoutMetadata = __rest(_a, ["$metadata"]);
logger.info({
metadata: {
statusCode: httpResponse.statusCode,
requestId: (_a = httpResponse.headers["x-amzn-requestid"]) !== null && _a !== void 0 ? _a : httpResponse.headers["x-amzn-request-id"],
extendedRequestId: httpResponse.headers["x-amz-id-2"],
cfId: httpResponse.headers["x-amz-cf-id"],
},
clientName: clientName,
commandName: commandName,
input: inputFilterSensitiveLog(args.input),
output: outputFilterSensitiveLog(outputWithoutMetadata),
metadata: $metadata,
});

@@ -42,2 +40,2 @@ }

}); };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dnZXJNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFZQSxNQUFNLENBQUMsSUFBTSxnQkFBZ0IsR0FBRyxjQUFNLE9BQUEsVUFDcEMsSUFBb0MsRUFDcEMsT0FBZ0MsSUFDRyxPQUFBLFVBQ25DLElBQXFDOzs7Ozs7Z0JBRTdCLE1BQU0sR0FBSyxPQUFPLE9BQVosQ0FBYTtnQkFFVixxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUE7O2dCQUEzQixRQUFRLEdBQUcsU0FBZ0I7Z0JBRWpDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ1gsc0JBQU8sUUFBUSxFQUFDO2lCQUNqQjtnQkFFSyxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQXdCLENBQUM7Z0JBRXZELElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtvQkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDVixRQUFRLEVBQUU7NEJBQ1IsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVOzRCQUNuQyxTQUFTLFFBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxtQ0FBSSxZQUFZLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDOzRCQUNoRyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQzs0QkFDckQsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO3lCQUMxQztxQkFDRixDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsc0JBQU8sUUFBUSxFQUFDOzs7S0FDakIsRUF6Qm9DLENBeUJwQyxFQTVCcUMsQ0E0QnJDLENBQUM7QUFFRixNQUFNLENBQUMsSUFBTSx1QkFBdUIsR0FBZ0Q7SUFDbEYsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDaEIsSUFBSSxFQUFFLFlBQVk7Q0FDbkIsQ0FBQztBQUVGLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsSUFBTSxlQUFlLEdBQUcsVUFBQyxPQUFZLElBQTBCLE9BQUEsQ0FBQztJQUNyRSxZQUFZLEVBQUUsVUFBQyxXQUFXO1FBQ3hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRixDQUFDLEVBSm9FLENBSXBFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tIFwiQGF3cy1zZGsvcHJvdG9jb2wtaHR0cFwiO1xuaW1wb3J0IHtcbiAgQWJzb2x1dGVMb2NhdGlvbixcbiAgSGFuZGxlckV4ZWN1dGlvbkNvbnRleHQsXG4gIEluaXRpYWxpemVIYW5kbGVyLFxuICBJbml0aWFsaXplSGFuZGxlckFyZ3VtZW50cyxcbiAgSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zLFxuICBJbml0aWFsaXplSGFuZGxlck91dHB1dCxcbiAgTWV0YWRhdGFCZWFyZXIsXG4gIFBsdWdnYWJsZSxcbn0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBsb2dnZXJNaWRkbGV3YXJlID0gKCkgPT4gPE91dHB1dCBleHRlbmRzIE1ldGFkYXRhQmVhcmVyID0gTWV0YWRhdGFCZWFyZXI+KFxuICBuZXh0OiBJbml0aWFsaXplSGFuZGxlcjxhbnksIE91dHB1dD4sXG4gIGNvbnRleHQ6IEhhbmRsZXJFeGVjdXRpb25Db250ZXh0XG4pOiBJbml0aWFsaXplSGFuZGxlcjxhbnksIE91dHB1dD4gPT4gYXN5bmMgKFxuICBhcmdzOiBJbml0aWFsaXplSGFuZGxlckFyZ3VtZW50czxhbnk+XG4pOiBQcm9taXNlPEluaXRpYWxpemVIYW5kbGVyT3V0cHV0PE91dHB1dD4+ID0+IHtcbiAgY29uc3QgeyBsb2dnZXIgfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KGFyZ3MpO1xuXG4gIGlmICghbG9nZ2VyKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgY29uc3QgaHR0cFJlc3BvbnNlID0gcmVzcG9uc2UucmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlO1xuXG4gIGlmICh0eXBlb2YgbG9nZ2VyLmluZm8gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5pbmZvKHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IGh0dHBSZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICByZXF1ZXN0SWQ6IGh0dHBSZXNwb25zZS5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3RpZFwiXSA/PyBodHRwUmVzcG9uc2UuaGVhZGVyc1tcIngtYW16bi1yZXF1ZXN0LWlkXCJdLFxuICAgICAgICBleHRlbmRlZFJlcXVlc3RJZDogaHR0cFJlc3BvbnNlLmhlYWRlcnNbXCJ4LWFtei1pZC0yXCJdLFxuICAgICAgICBjZklkOiBodHRwUmVzcG9uc2UuaGVhZGVyc1tcIngtYW16LWNmLWlkXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2dnZXJNaWRkbGV3YXJlT3B0aW9uczogSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zICYgQWJzb2x1dGVMb2NhdGlvbiA9IHtcbiAgbmFtZTogXCJsb2dnZXJNaWRkbGV3YXJlXCIsXG4gIHRhZ3M6IFtcIkxPR0dFUlwiXSxcbiAgc3RlcDogXCJpbml0aWFsaXplXCIsXG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgY29uc3QgZ2V0TG9nZ2VyUGx1Z2luID0gKG9wdGlvbnM6IGFueSk6IFBsdWdnYWJsZTxhbnksIGFueT4gPT4gKHtcbiAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICBjbGllbnRTdGFjay5hZGQobG9nZ2VyTWlkZGxld2FyZSgpLCBsb2dnZXJNaWRkbGV3YXJlT3B0aW9ucyk7XG4gIH0sXG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dnZXJNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFZQSxNQUFNLENBQUMsSUFBTSxnQkFBZ0IsR0FBRyxjQUFNLE9BQUEsVUFDcEMsSUFBb0MsRUFDcEMsT0FBZ0MsSUFDRyxPQUFBLFVBQ25DLElBQXFDOzs7OztnQkFFN0IsVUFBVSxHQUE2RSxPQUFPLFdBQXBGLEVBQUUsV0FBVyxHQUFnRSxPQUFPLFlBQXZFLEVBQUUsdUJBQXVCLEdBQXVDLE9BQU8sd0JBQTlDLEVBQUUsTUFBTSxHQUErQixPQUFPLE9BQXRDLEVBQUUsd0JBQXdCLEdBQUssT0FBTyx5QkFBWixDQUFhO2dCQUV0RixxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUE7O2dCQUEzQixRQUFRLEdBQUcsU0FBZ0I7Z0JBRWpDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ1gsc0JBQU8sUUFBUSxFQUFDO2lCQUNqQjtnQkFFRCxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7b0JBQy9CLEtBQTBDLFFBQVEsQ0FBQyxNQUFNLEVBQXZELFNBQVMsZUFBQSxFQUFLLHFCQUFxQixjQUFyQyxhQUF1QyxDQUFGLENBQXFCO29CQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNWLFVBQVUsWUFBQTt3QkFDVixXQUFXLGFBQUE7d0JBQ1gsS0FBSyxFQUFFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQzFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDdkQsUUFBUSxFQUFFLFNBQVM7cUJBQ3BCLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxzQkFBTyxRQUFRLEVBQUM7OztLQUNqQixFQXZCb0MsQ0F1QnBDLEVBMUJxQyxDQTBCckMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxJQUFNLHVCQUF1QixHQUFnRDtJQUNsRixJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztJQUNoQixJQUFJLEVBQUUsWUFBWTtDQUNuQixDQUFDO0FBRUYsNkRBQTZEO0FBQzdELE1BQU0sQ0FBQyxJQUFNLGVBQWUsR0FBRyxVQUFDLE9BQVksSUFBMEIsT0FBQSxDQUFDO0lBQ3JFLFlBQVksRUFBRSxVQUFDLFdBQVc7UUFDeEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGLENBQUMsRUFKb0UsQ0FJcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCI7XG5pbXBvcnQge1xuICBBYnNvbHV0ZUxvY2F0aW9uLFxuICBIYW5kbGVyRXhlY3V0aW9uQ29udGV4dCxcbiAgSW5pdGlhbGl6ZUhhbmRsZXIsXG4gIEluaXRpYWxpemVIYW5kbGVyQXJndW1lbnRzLFxuICBJbml0aWFsaXplSGFuZGxlck9wdGlvbnMsXG4gIEluaXRpYWxpemVIYW5kbGVyT3V0cHV0LFxuICBNZXRhZGF0YUJlYXJlcixcbiAgUGx1Z2dhYmxlLFxufSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IGxvZ2dlck1pZGRsZXdhcmUgPSAoKSA9PiA8T3V0cHV0IGV4dGVuZHMgTWV0YWRhdGFCZWFyZXIgPSBNZXRhZGF0YUJlYXJlcj4oXG4gIG5leHQ6IEluaXRpYWxpemVIYW5kbGVyPGFueSwgT3V0cHV0PixcbiAgY29udGV4dDogSGFuZGxlckV4ZWN1dGlvbkNvbnRleHRcbik6IEluaXRpYWxpemVIYW5kbGVyPGFueSwgT3V0cHV0PiA9PiBhc3luYyAoXG4gIGFyZ3M6IEluaXRpYWxpemVIYW5kbGVyQXJndW1lbnRzPGFueT5cbik6IFByb21pc2U8SW5pdGlhbGl6ZUhhbmRsZXJPdXRwdXQ8T3V0cHV0Pj4gPT4ge1xuICBjb25zdCB7IGNsaWVudE5hbWUsIGNvbW1hbmROYW1lLCBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZywgbG9nZ2VyLCBvdXRwdXRGaWx0ZXJTZW5zaXRpdmVMb2cgfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBuZXh0KGFyZ3MpO1xuXG4gIGlmICghbG9nZ2VyKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBsb2dnZXIuaW5mbyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3QgeyAkbWV0YWRhdGEsIC4uLm91dHB1dFdpdGhvdXRNZXRhZGF0YSB9ID0gcmVzcG9uc2Uub3V0cHV0O1xuICAgIGxvZ2dlci5pbmZvKHtcbiAgICAgIGNsaWVudE5hbWUsXG4gICAgICBjb21tYW5kTmFtZSxcbiAgICAgIGlucHV0OiBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyhhcmdzLmlucHV0KSxcbiAgICAgIG91dHB1dDogb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nKG91dHB1dFdpdGhvdXRNZXRhZGF0YSksXG4gICAgICBtZXRhZGF0YTogJG1ldGFkYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvZ2dlck1pZGRsZXdhcmVPcHRpb25zOiBJbml0aWFsaXplSGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uID0ge1xuICBuYW1lOiBcImxvZ2dlck1pZGRsZXdhcmVcIixcbiAgdGFnczogW1wiTE9HR0VSXCJdLFxuICBzdGVwOiBcImluaXRpYWxpemVcIixcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBjb25zdCBnZXRMb2dnZXJQbHVnaW4gPSAob3B0aW9uczogYW55KTogUGx1Z2dhYmxlPGFueSwgYW55PiA9PiAoe1xuICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgIGNsaWVudFN0YWNrLmFkZChsb2dnZXJNaWRkbGV3YXJlKCksIGxvZ2dlck1pZGRsZXdhcmVPcHRpb25zKTtcbiAgfSxcbn0pO1xuIl19

@@ -1,2 +0,2 @@

import { __assign, __awaiter, __generator } from "tslib";
import { __assign, __awaiter, __generator, __rest } from "tslib";
import { getLoggerPlugin, loggerMiddleware, loggerMiddlewareOptions } from "./loggerMiddleware";

@@ -27,2 +27,11 @@ describe("getLoggerPlugin", function () {

};
var mockOutput = {
$metadata: {
statusCode: 200,
requestId: "requestId",
attempts: 2,
totalRetryDelay: 350,
},
outputKey: "outputValue",
};
var mockResponse = {

@@ -37,5 +46,3 @@ response: {

},
output: {
outputKey: "outputValue",
},
output: mockOutput,
};

@@ -76,63 +83,81 @@ afterEach(function () {

}); });
it("logs metadata if context.logger has info function", function () { return __awaiter(void 0, void 0, void 0, function () {
var logger, context, response;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
mockNext.mockResolvedValueOnce(mockResponse);
logger = { info: jest.fn() };
context = {
logger: logger,
};
return [4 /*yield*/, loggerMiddleware()(mockNext, context)(mockArgs)];
case 1:
response = _a.sent();
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(mockResponse);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
metadata: {
statusCode: mockResponse.response.statusCode,
requestId: mockResponse.response.headers["x-amzn-requestid"],
extendedRequestId: mockResponse.response.headers["x-amz-id-2"],
cfId: mockResponse.response.headers["x-amz-cf-id"],
},
});
return [2 /*return*/];
}
});
}); });
it("logs header x-amzn-request-id as requestId if x-amzn-requestid is not present", function () { return __awaiter(void 0, void 0, void 0, function () {
var requestIdBackup, customResponse, logger, context, response;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
requestIdBackup = "requestIdBackup";
customResponse = __assign(__assign({}, mockResponse), { response: __assign(__assign({}, mockResponse.response), { headers: {
"x-amzn-request-id": requestIdBackup,
} }) });
mockNext.mockResolvedValueOnce(customResponse);
logger = { info: jest.fn() };
context = {
logger: logger,
};
return [4 /*yield*/, loggerMiddleware()(mockNext, context)(mockArgs)];
case 1:
response = _a.sent();
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(customResponse);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
metadata: {
statusCode: customResponse.response.statusCode,
requestId: requestIdBackup,
extendedRequestId: undefined,
cfId: undefined,
},
});
return [2 /*return*/];
}
});
}); });
describe("logs if context.logger has info function", function () {
it("success case with clientName, commandName, input, metadata", function () { return __awaiter(void 0, void 0, void 0, function () {
var logger, clientName, commandName, mockInputLog, inputFilterSensitiveLog, mockOutputLog, outputFilterSensitiveLog, context, response, $metadata, outputWithoutMetadata;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
mockNext.mockResolvedValueOnce(mockResponse);
logger = { info: jest.fn() };
clientName = "mockClientName";
commandName = "mockCommandName";
mockInputLog = { inputKey: "inputKey", inputSensitiveKey: "SENSITIVE_VALUE" };
inputFilterSensitiveLog = jest.fn().mockReturnValueOnce(mockInputLog);
mockOutputLog = { outputKey: "outputKey", outputSensitiveKey: "SENSITIVE_VALUE" };
outputFilterSensitiveLog = jest.fn().mockReturnValueOnce(mockOutputLog);
context = {
logger: logger,
clientName: clientName,
commandName: commandName,
inputFilterSensitiveLog: inputFilterSensitiveLog,
outputFilterSensitiveLog: outputFilterSensitiveLog,
};
return [4 /*yield*/, loggerMiddleware()(mockNext, context)(mockArgs)];
case 1:
response = _a.sent();
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(mockResponse);
expect(inputFilterSensitiveLog).toHaveBeenCalledTimes(1);
expect(inputFilterSensitiveLog).toHaveBeenCalledWith(mockArgs.input);
$metadata = mockOutput.$metadata, outputWithoutMetadata = __rest(mockOutput, ["$metadata"]);
expect(outputFilterSensitiveLog).toHaveBeenCalledTimes(1);
expect(outputFilterSensitiveLog).toHaveBeenCalledWith(outputWithoutMetadata);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
clientName: clientName,
commandName: commandName,
input: mockInputLog,
output: mockOutputLog,
metadata: $metadata,
});
return [2 /*return*/];
}
});
}); });
it("header x-amzn-request-id as requestId if x-amzn-requestid is not present", function () { return __awaiter(void 0, void 0, void 0, function () {
var requestIdBackup, customResponse, logger, inputFilterSensitiveLog, outputFilterSensitiveLog, context, response, $metadata, outputWithoutMetadata;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
requestIdBackup = "requestIdBackup";
customResponse = __assign(__assign({}, mockResponse), { response: __assign(__assign({}, mockResponse.response), { headers: {
"x-amzn-request-id": requestIdBackup,
} }) });
mockNext.mockResolvedValueOnce(customResponse);
logger = { info: jest.fn() };
inputFilterSensitiveLog = jest.fn().mockImplementationOnce(function (input) { return input; });
outputFilterSensitiveLog = jest.fn().mockImplementationOnce(function (output) { return output; });
context = {
logger: logger,
inputFilterSensitiveLog: inputFilterSensitiveLog,
outputFilterSensitiveLog: outputFilterSensitiveLog,
};
return [4 /*yield*/, loggerMiddleware()(mockNext, context)(mockArgs)];
case 1:
response = _a.sent();
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(customResponse);
$metadata = mockOutput.$metadata, outputWithoutMetadata = __rest(mockOutput, ["$metadata"]);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
input: mockArgs.input,
output: outputWithoutMetadata,
metadata: $metadata,
});
return [2 /*return*/];
}
});
}); });
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZ2dlck1pZGRsZXdhcmUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixJQUFNLGVBQWUsR0FBRztRQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtLQUNmLENBQUM7SUFFRixTQUFTLENBQUM7UUFDUixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUJBQXVCLEVBQUU7UUFDMUIsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBRSxlQUF3RCxDQUFDLENBQUM7UUFDNUYsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFM0IsSUFBTSxRQUFRLEdBQUc7UUFDZixLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsWUFBWTtTQUN2QjtRQUNELE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLEVBQUU7U0FDWjtLQUNGLENBQUM7SUFFRixJQUFNLFlBQVksR0FBRztR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Q3hCLE9BQU8sRUFBRTtnQ0FDUCxtQkFBbUIsRUFBRSxlQUFlOzZCQUNyQyxNQUVKLENBQUM7b0JBQ0YsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUN6QyxNQUFNLEdBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUF3QixDQUFDO29CQUVwRCxPQUFPLEdBQUc7d0JBQ2QsTUFBTSxRQUFBO3FCQUNQLENBQUM7b0JBRWUscUJBQU0sZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUE7O29CQUFoRSxRQUFRLEdBQUcsU0FBcUQ7b0JBQ3RFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFFL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDdkMsUUFBUSxFQUFFOzRCQUNSLFVBQVUsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVU7NEJBQzlDLFNBQVMsRUFBRSxlQUFlOzRCQUMxQixpQkFBaUIsRUFBRSxTQUFTOzRCQUM1QixJQUFJLEVBQUUsU0FBUzt5QkFDaEI7cUJBQ0YsQ0FBQyxDQUFDOzs7O1NBQ0osQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dnZXIsIE1pZGRsZXdhcmVTdGFjayB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXJQbHVnaW4sIGxvZ2dlck1pZGRsZXdhcmUsIGxvZ2dlck1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSBcIi4vbG9nZ2VyTWlkZGxld2FyZVwiO1xuXG5kZXNjcmliZShcImdldExvZ2dlclBsdWdpblwiLCAoKSA9PiB7XG4gIGNvbnN0IG1vY2tDbGllbnRTdGFjayA9IHtcbiAgICBhZGQ6IGplc3QuZm4oKSxcbiAgfTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBpdChcImFkZHMgbG9nZ2VyTWlkZGxld2FyZVwiLCAoKSA9PiB7XG4gICAgZ2V0TG9nZ2VyUGx1Z2luKHt9KS5hcHBseVRvU3RhY2soKG1vY2tDbGllbnRTdGFjayBhcyB1bmtub3duKSBhcyBNaWRkbGV3YXJlU3RhY2s8YW55LCBhbnk+KTtcbiAgICBleHBlY3QobW9ja0NsaWVudFN0YWNrLmFkZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChtb2NrQ2xpZW50U3RhY2suYWRkLm1vY2suY2FsbHNbMF1bMV0pLnRvRXF1YWwobG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImxvZ2dlck1pZGRsZXdhcmVcIiwgKCkgPT4ge1xuICBjb25zdCBtb2NrTmV4dCA9IGplc3QuZm4oKTtcblxuICBjb25zdCBtb2NrQXJncyA9IHtcbiAgICBpbnB1dDoge1xuICAgICAgaW5wdXRLZXk6IFwiaW5wdXRWYWx1ZVwiLFxuICAgIH0sXG4gICAgcmVxdWVzdDoge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBtb2NrUmVzcG9uc2UgPSB7XG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJ4LWFtem4tcmVxdWVzdGlkXCI6IFwicmVxdWVzdElkXCIsXG4gICAgICAgIFwieC1hbXotaWQtMlwiOiBcImV4dGVuZGVkUmVxdWVzdElkXCIsXG4gICAgICAgIFwieC1hbXotY2YtaWRcIjogXCJjZklkXCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAgb3V0cHV0OiB7XG4gICAgICBvdXRwdXRLZXk6IFwib3V0cHV0VmFsdWVcIixcbiAgICB9LFxuICB9O1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyB3aXRob3V0IGxvZ2dpbmcgaWYgY29udGV4dC5sb2dnZXIgaXMgbm90IGRlZmluZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tOZXh0Lm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUmVzcG9uc2UpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbG9nZ2VyTWlkZGxld2FyZSgpKG1vY2tOZXh0LCB7fSkobW9ja0FyZ3MpO1xuICAgIGV4cGVjdChtb2NrTmV4dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChyZXNwb25zZSkudG9TdHJpY3RFcXVhbChtb2NrUmVzcG9uc2UpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgd2l0aG91dCBsb2dnaW5nIGlmIGNvbnRleHQubG9nZ2VyIGRvZXNuJ3QgaGF2ZSBpbmZvIGZ1bmN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrTmV4dC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UobW9ja1Jlc3BvbnNlKTtcbiAgICBjb25zdCBsb2dnZXIgPSB7fSBhcyBMb2dnZXI7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBsb2dnZXJNaWRkbGV3YXJlKCkobW9ja05leHQsIHsgbG9nZ2VyIH0pKG1vY2tBcmdzKTtcbiAgICBleHBlY3QobW9ja05leHQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QocmVzcG9uc2UpLnRvU3RyaWN0RXF1YWwobW9ja1Jlc3BvbnNlKTtcbiAgfSk7XG5cbiAgaXQoXCJsb2dzIG1ldGFkYXRhIGlmIGNvbnRleHQubG9nZ2VyIGhhcyBpbmZvIGZ1bmN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrTmV4dC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UobW9ja1Jlc3BvbnNlKTtcbiAgICBjb25zdCBsb2dnZXIgPSAoeyBpbmZvOiBqZXN0LmZuKCkgfSBhcyB1bmtub3duKSBhcyBMb2dnZXI7XG5cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgbG9nZ2VyLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxvZ2dlck1pZGRsZXdhcmUoKShtb2NrTmV4dCwgY29udGV4dCkobW9ja0FyZ3MpO1xuICAgIGV4cGVjdChtb2NrTmV4dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChyZXNwb25zZSkudG9TdHJpY3RFcXVhbChtb2NrUmVzcG9uc2UpO1xuXG4gICAgZXhwZWN0KGxvZ2dlci5pbmZvKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICBleHBlY3QobG9nZ2VyLmluZm8pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IG1vY2tSZXNwb25zZS5yZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICByZXF1ZXN0SWQ6IG1vY2tSZXNwb25zZS5yZXNwb25zZS5oZWFkZXJzW1wieC1hbXpuLXJlcXVlc3RpZFwiXSxcbiAgICAgICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IG1vY2tSZXNwb25zZS5yZXNwb25zZS5oZWFkZXJzW1wieC1hbXotaWQtMlwiXSxcbiAgICAgICAgY2ZJZDogbW9ja1Jlc3BvbnNlLnJlc3BvbnNlLmhlYWRlcnNbXCJ4LWFtei1jZi1pZFwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwibG9ncyBoZWFkZXIgeC1hbXpuLXJlcXVlc3QtaWQgYXMgcmVxdWVzdElkIGlmIHgtYW16bi1yZXF1ZXN0aWQgaXMgbm90IHByZXNlbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZEJhY2t1cCA9IFwicmVxdWVzdElkQmFja3VwXCI7XG4gICAgY29uc3QgY3VzdG9tUmVzcG9uc2UgPSB7XG4gICAgICAuLi5tb2NrUmVzcG9uc2UsXG4gICAgICByZXNwb25zZToge1xuICAgICAgICAuLi5tb2NrUmVzcG9uc2UucmVzcG9uc2UsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIngtYW16bi1yZXF1ZXN0LWlkXCI6IHJlcXVlc3RJZEJhY2t1cCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBtb2NrTmV4dC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoY3VzdG9tUmVzcG9uc2UpO1xuICAgIGNvbnN0IGxvZ2dlciA9ICh7IGluZm86IGplc3QuZm4oKSB9IGFzIHVua25vd24pIGFzIExvZ2dlcjtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBsb2dnZXIsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbG9nZ2VyTWlkZGxld2FyZSgpKG1vY2tOZXh0LCBjb250ZXh0KShtb2NrQXJncyk7XG4gICAgZXhwZWN0KG1vY2tOZXh0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KHJlc3BvbnNlKS50b1N0cmljdEVxdWFsKGN1c3RvbVJlc3BvbnNlKTtcblxuICAgIGV4cGVjdChsb2dnZXIuaW5mbykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXG4gICAgZXhwZWN0KGxvZ2dlci5pbmZvKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzdGF0dXNDb2RlOiBjdXN0b21SZXNwb25zZS5yZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZEJhY2t1cCxcbiAgICAgICAgZXh0ZW5kZWRSZXF1ZXN0SWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgY2ZJZDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyTWlkZGxld2FyZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZ2dlck1pZGRsZXdhcmUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixJQUFNLGVBQWUsR0FBRztRQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtLQUNmLENBQUM7SUFFRixTQUFTLENBQUM7UUFDUixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUJBQXVCLEVBQUU7UUFDMUIsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBRSxlQUF3RCxDQUFDLENBQUM7UUFDNUYsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFM0IsSUFBTSxRQUFRLEdBQUc7UUFDZixLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsWUFBWTtTQUN2QjtRQUNELE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLEVBQUU7U0FDWjtLQUNGLENBQUM7SUFFRixJQUFNLFVBQVUsR0FBRztR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b2dnZXIsIE1pZGRsZXdhcmVTdGFjayB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXJQbHVnaW4sIGxvZ2dlck1pZGRsZXdhcmUsIGxvZ2dlck1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSBcIi4vbG9nZ2VyTWlkZGxld2FyZVwiO1xuXG5kZXNjcmliZShcImdldExvZ2dlclBsdWdpblwiLCAoKSA9PiB7XG4gIGNvbnN0IG1vY2tDbGllbnRTdGFjayA9IHtcbiAgICBhZGQ6IGplc3QuZm4oKSxcbiAgfTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBpdChcImFkZHMgbG9nZ2VyTWlkZGxld2FyZVwiLCAoKSA9PiB7XG4gICAgZ2V0TG9nZ2VyUGx1Z2luKHt9KS5hcHBseVRvU3RhY2soKG1vY2tDbGllbnRTdGFjayBhcyB1bmtub3duKSBhcyBNaWRkbGV3YXJlU3RhY2s8YW55LCBhbnk+KTtcbiAgICBleHBlY3QobW9ja0NsaWVudFN0YWNrLmFkZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChtb2NrQ2xpZW50U3RhY2suYWRkLm1vY2suY2FsbHNbMF1bMV0pLnRvRXF1YWwobG9nZ2VyTWlkZGxld2FyZU9wdGlvbnMpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImxvZ2dlck1pZGRsZXdhcmVcIiwgKCkgPT4ge1xuICBjb25zdCBtb2NrTmV4dCA9IGplc3QuZm4oKTtcblxuICBjb25zdCBtb2NrQXJncyA9IHtcbiAgICBpbnB1dDoge1xuICAgICAgaW5wdXRLZXk6IFwiaW5wdXRWYWx1ZVwiLFxuICAgIH0sXG4gICAgcmVxdWVzdDoge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBtb2NrT3V0cHV0ID0ge1xuICAgICRtZXRhZGF0YToge1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgcmVxdWVzdElkOiBcInJlcXVlc3RJZFwiLFxuICAgICAgYXR0ZW1wdHM6IDIsXG4gICAgICB0b3RhbFJldHJ5RGVsYXk6IDM1MCxcbiAgICB9LFxuICAgIG91dHB1dEtleTogXCJvdXRwdXRWYWx1ZVwiLFxuICB9O1xuXG4gIGNvbnN0IG1vY2tSZXNwb25zZSA9IHtcbiAgICByZXNwb25zZToge1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIngtYW16bi1yZXF1ZXN0aWRcIjogXCJyZXF1ZXN0SWRcIixcbiAgICAgICAgXCJ4LWFtei1pZC0yXCI6IFwiZXh0ZW5kZWRSZXF1ZXN0SWRcIixcbiAgICAgICAgXCJ4LWFtei1jZi1pZFwiOiBcImNmSWRcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvdXRwdXQ6IG1vY2tPdXRwdXQsXG4gIH07XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHdpdGhvdXQgbG9nZ2luZyBpZiBjb250ZXh0LmxvZ2dlciBpcyBub3QgZGVmaW5lZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja05leHQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKG1vY2tSZXNwb25zZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBsb2dnZXJNaWRkbGV3YXJlKCkobW9ja05leHQsIHt9KShtb2NrQXJncyk7XG4gICAgZXhwZWN0KG1vY2tOZXh0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KHJlc3BvbnNlKS50b1N0cmljdEVxdWFsKG1vY2tSZXNwb25zZSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyB3aXRob3V0IGxvZ2dpbmcgaWYgY29udGV4dC5sb2dnZXIgZG9lc24ndCBoYXZlIGluZm8gZnVuY3Rpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tOZXh0Lm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUmVzcG9uc2UpO1xuICAgIGNvbnN0IGxvZ2dlciA9IHt9IGFzIExvZ2dlcjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxvZ2dlck1pZGRsZXdhcmUoKShtb2NrTmV4dCwgeyBsb2dnZXIgfSkobW9ja0FyZ3MpO1xuICAgIGV4cGVjdChtb2NrTmV4dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChyZXNwb25zZSkudG9TdHJpY3RFcXVhbChtb2NrUmVzcG9uc2UpO1xuICB9KTtcblxuICBkZXNjcmliZShcImxvZ3MgaWYgY29udGV4dC5sb2dnZXIgaGFzIGluZm8gZnVuY3Rpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic3VjY2VzcyBjYXNlIHdpdGggY2xpZW50TmFtZSwgY29tbWFuZE5hbWUsIGlucHV0LCBtZXRhZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrTmV4dC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UobW9ja1Jlc3BvbnNlKTtcblxuICAgICAgY29uc3QgbG9nZ2VyID0gKHsgaW5mbzogamVzdC5mbigpIH0gYXMgdW5rbm93bikgYXMgTG9nZ2VyO1xuICAgICAgY29uc3QgY2xpZW50TmFtZSA9IFwibW9ja0NsaWVudE5hbWVcIjtcbiAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gXCJtb2NrQ29tbWFuZE5hbWVcIjtcblxuICAgICAgY29uc3QgbW9ja0lucHV0TG9nID0geyBpbnB1dEtleTogXCJpbnB1dEtleVwiLCBpbnB1dFNlbnNpdGl2ZUtleTogXCJTRU5TSVRJVkVfVkFMVUVcIiB9O1xuICAgICAgY29uc3QgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlT25jZShtb2NrSW5wdXRMb2cpO1xuICAgICAgY29uc3QgbW9ja091dHB1dExvZyA9IHsgb3V0cHV0S2V5OiBcIm91dHB1dEtleVwiLCBvdXRwdXRTZW5zaXRpdmVLZXk6IFwiU0VOU0lUSVZFX1ZBTFVFXCIgfTtcbiAgICAgIGNvbnN0IG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWVPbmNlKG1vY2tPdXRwdXRMb2cpO1xuXG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICBsb2dnZXIsXG4gICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICBpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgICAgb3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBsb2dnZXJNaWRkbGV3YXJlKCkobW9ja05leHQsIGNvbnRleHQpKG1vY2tBcmdzKTtcbiAgICAgIGV4cGVjdChtb2NrTmV4dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b1N0cmljdEVxdWFsKG1vY2tSZXNwb25zZSk7XG5cbiAgICAgIGV4cGVjdChpbnB1dEZpbHRlclNlbnNpdGl2ZUxvZykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGlucHV0RmlsdGVyU2Vuc2l0aXZlTG9nKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQXJncy5pbnB1dCk7XG5cbiAgICAgIGNvbnN0IHsgJG1ldGFkYXRhLCAuLi5vdXRwdXRXaXRob3V0TWV0YWRhdGEgfSA9IG1vY2tPdXRwdXQ7XG4gICAgICBleHBlY3Qob3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3Qob3V0cHV0RmlsdGVyU2Vuc2l0aXZlTG9nKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChvdXRwdXRXaXRob3V0TWV0YWRhdGEpO1xuXG4gICAgICBleHBlY3QobG9nZ2VyLmluZm8pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGV4cGVjdChsb2dnZXIuaW5mbykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgaW5wdXQ6IG1vY2tJbnB1dExvZyxcbiAgICAgICAgb3V0cHV0OiBtb2NrT3V0cHV0TG9nLFxuICAgICAgICBtZXRhZGF0YTogJG1ldGFkYXRhLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcImhlYWRlciB4LWFtem4tcmVxdWVzdC1pZCBhcyByZXF1ZXN0SWQgaWYgeC1hbXpuLXJlcXVlc3RpZCBpcyBub3QgcHJlc2VudFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWRCYWNrdXAgPSBcInJlcXVlc3RJZEJhY2t1cFwiO1xuICAgICAgY29uc3QgY3VzdG9tUmVzcG9uc2UgPSB7XG4gICAgICAgIC4uLm1vY2tSZXNwb25zZSxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAuLi5tb2NrUmVzcG9uc2UucmVzcG9uc2UsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJ4LWFtem4tcmVxdWVzdC1pZFwiOiByZXF1ZXN0SWRCYWNrdXAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBtb2NrTmV4dC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoY3VzdG9tUmVzcG9uc2UpO1xuICAgICAgY29uc3QgbG9nZ2VyID0gKHsgaW5mbzogamVzdC5mbigpIH0gYXMgdW5rbm93bikgYXMgTG9nZ2VyO1xuICAgICAgY29uc3QgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2cgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoaW5wdXQpID0+IGlucHV0KTtcbiAgICAgIGNvbnN0IG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKChvdXRwdXQpID0+IG91dHB1dCk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgaW5wdXRGaWx0ZXJTZW5zaXRpdmVMb2csXG4gICAgICAgIG91dHB1dEZpbHRlclNlbnNpdGl2ZUxvZyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbG9nZ2VyTWlkZGxld2FyZSgpKG1vY2tOZXh0LCBjb250ZXh0KShtb2NrQXJncyk7XG4gICAgICBleHBlY3QobW9ja05leHQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZSkudG9TdHJpY3RFcXVhbChjdXN0b21SZXNwb25zZSk7XG5cbiAgICAgIGNvbnN0IHsgJG1ldGFkYXRhLCAuLi5vdXRwdXRXaXRob3V0TWV0YWRhdGEgfSA9IG1vY2tPdXRwdXQ7XG4gICAgICBleHBlY3QobG9nZ2VyLmluZm8pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGV4cGVjdChsb2dnZXIuaW5mbykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBpbnB1dDogbW9ja0FyZ3MuaW5wdXQsXG4gICAgICAgIG91dHB1dDogb3V0cHV0V2l0aG91dE1ldGFkYXRhLFxuICAgICAgICBtZXRhZGF0YTogJG1ldGFkYXRhLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
{
"name": "@aws-sdk/middleware-logger",
"version": "3.0.0",
"version": "3.1.0",
"scripts": {

@@ -25,4 +25,4 @@ "prepublishOnly": "yarn build:cjs && yarn build:es",

"devDependencies": {
"@aws-sdk/protocol-http": "3.0.0",
"@aws-sdk/types": "3.0.0",
"@aws-sdk/protocol-http": "3.1.0",
"@aws-sdk/types": "3.1.0",
"@types/jest": "^26.0.4",

@@ -29,0 +29,0 @@ "@types/node": "^10.0.0",

# @aws-sdk/middleware-logger
[![NPM version](https://img.shields.io/npm/v/@aws-sdk/middleware-logger/rc.svg)](https://www.npmjs.com/package/@aws-sdk/middleware-logger)
[![NPM version](https://img.shields.io/npm/v/@aws-sdk/middleware-logger/latest.svg)](https://www.npmjs.com/package/@aws-sdk/middleware-logger)
[![NPM downloads](https://img.shields.io/npm/dm/@aws-sdk/middleware-logger.svg)](https://www.npmjs.com/package/@aws-sdk/middleware-logger)

@@ -34,2 +34,12 @@ import { Logger, MiddlewareStack } from "@aws-sdk/types";

const mockOutput = {
$metadata: {
statusCode: 200,
requestId: "requestId",
attempts: 2,
totalRetryDelay: 350,
},
outputKey: "outputValue",
};
const mockResponse = {

@@ -44,5 +54,3 @@ response: {

},
output: {
outputKey: "outputValue",
},
output: mockOutput,
};

@@ -69,59 +77,79 @@

it("logs metadata if context.logger has info function", async () => {
mockNext.mockResolvedValueOnce(mockResponse);
const logger = ({ info: jest.fn() } as unknown) as Logger;
describe("logs if context.logger has info function", () => {
it("success case with clientName, commandName, input, metadata", async () => {
mockNext.mockResolvedValueOnce(mockResponse);
const context = {
logger,
};
const logger = ({ info: jest.fn() } as unknown) as Logger;
const clientName = "mockClientName";
const commandName = "mockCommandName";
const response = await loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(mockResponse);
const mockInputLog = { inputKey: "inputKey", inputSensitiveKey: "SENSITIVE_VALUE" };
const inputFilterSensitiveLog = jest.fn().mockReturnValueOnce(mockInputLog);
const mockOutputLog = { outputKey: "outputKey", outputSensitiveKey: "SENSITIVE_VALUE" };
const outputFilterSensitiveLog = jest.fn().mockReturnValueOnce(mockOutputLog);
expect(logger.info).toHaveBeenCalledTimes(1);
const context = {
logger,
clientName,
commandName,
inputFilterSensitiveLog,
outputFilterSensitiveLog,
};
expect(logger.info).toHaveBeenCalledWith({
metadata: {
statusCode: mockResponse.response.statusCode,
requestId: mockResponse.response.headers["x-amzn-requestid"],
extendedRequestId: mockResponse.response.headers["x-amz-id-2"],
cfId: mockResponse.response.headers["x-amz-cf-id"],
},
const response = await loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(mockResponse);
expect(inputFilterSensitiveLog).toHaveBeenCalledTimes(1);
expect(inputFilterSensitiveLog).toHaveBeenCalledWith(mockArgs.input);
const { $metadata, ...outputWithoutMetadata } = mockOutput;
expect(outputFilterSensitiveLog).toHaveBeenCalledTimes(1);
expect(outputFilterSensitiveLog).toHaveBeenCalledWith(outputWithoutMetadata);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
clientName,
commandName,
input: mockInputLog,
output: mockOutputLog,
metadata: $metadata,
});
});
});
it("logs header x-amzn-request-id as requestId if x-amzn-requestid is not present", async () => {
const requestIdBackup = "requestIdBackup";
const customResponse = {
...mockResponse,
response: {
...mockResponse.response,
headers: {
"x-amzn-request-id": requestIdBackup,
it("header x-amzn-request-id as requestId if x-amzn-requestid is not present", async () => {
const requestIdBackup = "requestIdBackup";
const customResponse = {
...mockResponse,
response: {
...mockResponse.response,
headers: {
"x-amzn-request-id": requestIdBackup,
},
},
},
};
mockNext.mockResolvedValueOnce(customResponse);
const logger = ({ info: jest.fn() } as unknown) as Logger;
};
mockNext.mockResolvedValueOnce(customResponse);
const logger = ({ info: jest.fn() } as unknown) as Logger;
const inputFilterSensitiveLog = jest.fn().mockImplementationOnce((input) => input);
const outputFilterSensitiveLog = jest.fn().mockImplementationOnce((output) => output);
const context = {
logger,
};
const context = {
logger,
inputFilterSensitiveLog,
outputFilterSensitiveLog,
};
const response = await loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(customResponse);
const response = await loggerMiddleware()(mockNext, context)(mockArgs);
expect(mockNext).toHaveBeenCalledTimes(1);
expect(response).toStrictEqual(customResponse);
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
metadata: {
statusCode: customResponse.response.statusCode,
requestId: requestIdBackup,
extendedRequestId: undefined,
cfId: undefined,
},
const { $metadata, ...outputWithoutMetadata } = mockOutput;
expect(logger.info).toHaveBeenCalledTimes(1);
expect(logger.info).toHaveBeenCalledWith({
input: mockArgs.input,
output: outputWithoutMetadata,
metadata: $metadata,
});
});
});
});

@@ -19,3 +19,3 @@ import { HttpResponse } from "@aws-sdk/protocol-http";

): Promise<InitializeHandlerOutput<Output>> => {
const { logger } = context;
const { clientName, commandName, inputFilterSensitiveLog, logger, outputFilterSensitiveLog } = context;

@@ -28,12 +28,10 @@ const response = await next(args);

const httpResponse = response.response as HttpResponse;
if (typeof logger.info === "function") {
const { $metadata, ...outputWithoutMetadata } = response.output;
logger.info({
metadata: {
statusCode: httpResponse.statusCode,
requestId: httpResponse.headers["x-amzn-requestid"] ?? httpResponse.headers["x-amzn-request-id"],
extendedRequestId: httpResponse.headers["x-amz-id-2"],
cfId: httpResponse.headers["x-amz-cf-id"],
},
clientName,
commandName,
input: inputFilterSensitiveLog(args.input),
output: outputFilterSensitiveLog(outputWithoutMetadata),
metadata: $metadata,
});

@@ -40,0 +38,0 @@ }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc