@energica-city/shared-amplify-utils
Version:
Shared utilities for AWS Amplify projects
69 lines • 3.22 kB
TypeScript
import type { WebSocketInputWithModels, WebSocketResponse, WebSocketMiddlewareChain } from './types';
import type { AmplifyModelType } from '../../queries/types';
/**
* 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 declare function createWebSocketChain<TTypes extends Record<string, AmplifyModelType>, TSelected extends keyof TTypes & string = keyof TTypes & string, TReturn = WebSocketResponse>(config?: {
enableDebugLogging?: boolean;
onError?: (error: unknown, middlewareName: string) => void;
}): WebSocketMiddlewareChain<TTypes, TSelected, TReturn>;
/**
* 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 declare function wrapWebSocketHandler<TTypes extends Record<string, AmplifyModelType>, TSelected extends keyof TTypes & string = keyof TTypes & string, TReturn extends WebSocketResponse = WebSocketResponse>(chain: WebSocketMiddlewareChain<TTypes, TSelected, TReturn>, handler: (input: WebSocketInputWithModels<TTypes, TSelected>) => Promise<TReturn>): (event: WebSocketInputWithModels<TTypes, TSelected>['event'], context: WebSocketInputWithModels<TTypes, TSelected>['context']) => Promise<TReturn>;
//# sourceMappingURL=WebSocketMiddlewareChain.d.ts.map