@energica-city/shared-amplify-utils
Version:
Shared utilities for AWS Amplify projects
82 lines • 3.13 kB
JavaScript
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