UNPKG

@energica-city/shared-amplify-utils

Version:

Shared utilities for AWS Amplify projects

72 lines 2.54 kB
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