diff --git a/package-lock.json b/package-lock.json index 980038a..4e7518c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@leanstacks/serverless-common", - "version": "1.2.0", + "version": "1.3.0-alpha.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@leanstacks/serverless-common", - "version": "1.2.0", + "version": "1.3.0-alpha.2", "license": "MIT", "devDependencies": { "@aws-sdk/client-cognito-identity-provider": "^3.523.0", diff --git a/package.json b/package.json index 6ff4f5c..2801e33 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@leanstacks/serverless-common", - "version": "1.2.0", + "version": "1.3.0-alpha.2", "description": "LeanStacks organization common serverless components.", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", diff --git a/src/utils/middyfy.ts b/src/utils/middyfy.ts index 14ba0f0..91f8ae9 100644 --- a/src/utils/middyfy.ts +++ b/src/utils/middyfy.ts @@ -3,6 +3,9 @@ import httpEventNormalizer from '@middy/http-event-normalizer'; import jsonBodyParser from '@middy/http-json-body-parser'; import { APIGatewayProxyEvent, + APIGatewayProxyEventBase, + APIGatewayProxyEventPathParameters, + APIGatewayProxyEventQueryStringParameters, APIGatewayProxyResult, Context, ScheduledEvent, @@ -16,11 +19,58 @@ import { loggerInitializer } from '../middlewares/logger-initializer'; import { validator } from '../middlewares/validator-joi'; import { httpErrorHandler } from '../middlewares/error-handler-http'; +/** + * An API Gateway authorizer context for requests authorized with the + * LeanStacks client token. + */ +export type LSAPIClientAuthorizerContext = { + preferred_username: string; +}; + +/** + * An API Gateway authorizer context for requests authorized with a + * Cognito token. + */ +export type LSCognitoAuthorizerContext = { + email: string; + family_name: string; + given_name: string; + permissions: { + [teamId: string]: string[]; + }; + preferred_username: string; + user_id: string; +}; + +/** + * An API Gateway event which has been normalized by middleware. + * @template TAuthorizerContext - The authorizer context type. + * @template TBody - Optional. The body type. Default: `null`. + * @template TPathParameters - Optional. The path parameters type. Default: `APIGatewayProxyEventPathParameters`. + * @template TQueryString - Optional. The query string parameters type. Default: `APIGatewayProxyEventQueryStringParameters`. + * @see {@link APIGatewayProxyEventBase} + * @see {@link APIGatewayProxyEventPathParameters} + * @see {@link APIGatewayProxyEventQueryStringParameters} + */ +export type NormalizedAPIGatewayProxyEvent< + TAuthorizerContext, + TBody = null, + TPathParameters = APIGatewayProxyEventPathParameters, + TQueryString = APIGatewayProxyEventQueryStringParameters, +> = Omit< + APIGatewayProxyEventBase, + 'body' | 'pathParameters' | 'queryStringParameters' +> & { + body: TBody; + pathParameters: TPathParameters; + queryStringParameters: TQueryString; +}; + /** * The AWS Lambda handler function signature for API Gateway proxy events. */ -export type APIGatewayHandlerFn = ( - event: APIGatewayProxyEvent, +export type APIGatewayHandlerFn = ( + event: TEvent, context: Context, ) => Promise;