@energica-city/shared-amplify-utils
Version:
Shared utilities for AWS Amplify projects
72 lines • 2.54 kB
JavaScript
import { MiddlewareChain } from '../middlewareChain';
/**
* Create a WebSocket-specific middleware chain
*
* This function creates a middleware chain optimized for WebSocket handlers with
* proper typing for WebSocket events, contexts, and model access. It extends the
* base MiddlewareChain with WebSocket-specific input types.
*
* @template TTypes - Record of available Amplify model types
* @template TSelected - Selected model types for this chain
* @template TReturn - Expected return type of the WebSocket handler
* @param config - Configuration options for the middleware chain
* @returns A typed middleware chain for WebSocket handlers
*
* @example
* ```typescript
* interface MyModels {
* User: AmplifyModelType;
* Message: AmplifyModelType;
* }
*
* const chain = createWebSocketChain<MyModels, 'User' | 'Message'>({
* enableDebugLogging: true,
* onError: (error, middlewareName) => {
* console.error(`WebSocket middleware ${middlewareName} failed:`, error);
* }
* });
* ```
*/
export function createWebSocketChain(config = {}) {
return new MiddlewareChain(config);
}
/**
* Wrap a WebSocket handler with middleware chain functionality
*
* This function creates a Lambda-compatible WebSocket handler that executes
* the middleware chain before calling the original handler. It handles the
* conversion between Lambda's individual event/context parameters and the
* middleware chain's combined input object.
*
* @template TTypes - Record of available Amplify model types
* @template TSelected - Selected model types for this handler
* @template TReturn - Expected return type of the WebSocket handler
* @param chain - The middleware chain to execute
* @param handler - The original WebSocket handler function
* @returns A Lambda-compatible WebSocket handler function
*
* @example
* ```typescript
* const wrappedHandler = wrapWebSocketHandler(
* chain,
* async (input) => {
* const { event, context, models } = input;
*
* // Handle WebSocket message
* if (event.requestContext.eventType === 'MESSAGE') {
* const user = await models.User.get({ id: event.requestContext.connectionId });
* return { statusCode: 200 };
* }
*
* return { statusCode: 200 };
* }
* );
* ```
*/
export function wrapWebSocketHandler(chain, handler) {
return async (event, context) => {
const input = { event, context };
return await chain.execute(input, handler);
};
}
//# sourceMappingURL=WebSocketMiddlewareChain.js.map