@energica-city/shared-amplify-utils
Version:
Shared utilities for AWS Amplify projects
73 lines • 2.52 kB
JavaScript
import { logger } from '../../log';
import { sanitizeObject } from '../utils/sanitization';
import { setupStructuredLogging } from './utils';
function summarizeResponse(response, config) {
const { excludeResponseFields = [], maxDepth = 6 } = config;
if (response &&
typeof response === 'object' &&
'statusCode' in response &&
'body' in response) {
const r = response;
const info = {
statusCode: r.statusCode,
isBase64Encoded: r.isBase64Encoded,
};
if (r.body) {
try {
const parsed = JSON.parse(r.body);
info.body = sanitizeObject(parsed, {
excludeFields: excludeResponseFields,
maxDepth,
});
}
catch {
info.body = '[Non-JSON response]';
info.bodyLength = r.body.length;
}
}
if (r.headers && Object.keys(r.headers).length > 0) {
info.headers = sanitizeObject(r.headers, {
excludeFields: excludeResponseFields,
maxDepth,
});
}
return info;
}
return {
responseType: typeof response,
responseData: sanitizeObject(response, {
excludeFields: excludeResponseFields,
maxDepth,
}),
};
}
export function createRestRequestLogger(config = {}) {
const { defaultContext = {} } = config;
return async (input, next) => {
const start = Date.now();
const { context } = input;
setupStructuredLogging(input, true, defaultContext);
try {
logger.info('REST request received', {
event: input.event,
...defaultContext,
requestId: context?.awsRequestId || undefined,
functionName: context?.functionName || undefined,
functionVersion: context?.functionVersion || undefined,
});
const result = await next(input);
const responseInfo = summarizeResponse(result, config);
logger.info('REST response sent', {
...responseInfo,
...defaultContext,
duration: `${Date.now() - start}ms`,
requestId: context?.awsRequestId || undefined,
});
return result;
}
finally {
logger.clearContext();
}
};
}
//# sourceMappingURL=RestRequestLogger.js.map