UNPKG

@energica-city/shared-amplify-utils

Version:

Shared utilities for AWS Amplify projects

82 lines 3.13 kB
import { setupStructuredLoggingWith, getErrorMessage as sharedGetErrorMessage, getErrorStack as sharedGetErrorStack, parseJsonBody as sharedParseJsonBody, buildErrorContextWith, getModelsFromInput as sharedGetModelsFromInput, } from '../utils/common'; /** * Build standardized log context for WebSocket operations */ export function buildWebSocketContext(input, additionalContext = {}) { const { event, context } = input; const requestContext = event.requestContext; return { ...additionalContext, connectionId: requestContext?.connectionId, eventType: requestContext?.eventType, messageId: requestContext?.messageId, // Add null checks to prevent undefined values from being logged requestId: context?.awsRequestId || undefined, functionName: context?.functionName || undefined, functionVersion: context?.functionVersion || undefined, }; } /** * Extract basic event information for logging */ export function extractEventInfo(event) { const anyEvent = event; return { connectionId: anyEvent.requestContext?.connectionId ?? '', // routeKey may be in requestContext (WS) or top-level (authorizer V2) routeKey: anyEvent.requestContext?.routeKey ?? anyEvent.routeKey, eventType: anyEvent.requestContext?.eventType, messageId: anyEvent.requestContext?.messageId, hasBody: !!anyEvent.body, bodyLength: anyEvent.body?.length || 0, rawQueryString: anyEvent.rawQueryString, }; } /** * Safely parse JSON body with error handling */ export function parseJsonBody(body, context) { return sharedParseJsonBody(body, context, 'WebSocket'); } /** * Setup structured logging for WebSocket middleware */ export function setupStructuredLogging(input, forceStructuredLogging = true, defaultContext = {}) { const typedInput = input; const buildContext = (i, extra) => buildWebSocketContext(i, extra); setupStructuredLoggingWith(typedInput, buildContext, forceStructuredLogging, defaultContext); } export function isMessageEvent(event) { const rc = event .requestContext; return rc?.eventType === 'MESSAGE'; } /** * Extract error message safely */ export function getErrorMessage(error) { return sharedGetErrorMessage(error); } /** * Get error stack trace if available */ export function getErrorStack(error) { return sharedGetErrorStack(error); } /** * Build error context with WebSocket information */ export function buildErrorContext(input, error, additionalContext = {}) { const typedInput = input; const buildContext = (i, extra) => buildWebSocketContext(i, extra); return buildErrorContextWith(typedInput, buildContext, error, additionalContext); } export function getConnectionId(event) { const rc = event.requestContext; return rc?.connectionId ?? ''; } export function getModelsFromInput(input) { const typedInput = input; return sharedGetModelsFromInput(typedInput, 'Models not available. Ensure WebSocketModelInitializer middleware is used before this handler.'); } //# sourceMappingURL=utils.js.map