UNPKG

@energica-city/shared-amplify-utils

Version:

Shared utilities for AWS Amplify projects

73 lines 2.52 kB
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