import { pick } from 'ramda'; import { APIGatewayProxyHandler } from 'aws-lambda'; export type Params = { [name: string]: string; }; export type Usecase = ({}: { args?: {}, params?: Params | null, tenant?: string, email?: string }) => Promise; const toLambda = (usecase: Usecase, fields: string[], parameters: string[]) => { const callback: APIGatewayProxyHandler = (event) => { // @ts-ignore - hmmm probably shouldn't, but we pass custom fields in here normally... const { tenant, email } = event.requestContext.authorizer; let args = JSON.parse(event.body as string); let params = event.pathParameters; if (parameters[0] !== '*') { params = pick(parameters, params); } if (fields[0] !== '*') { args = pick(fields, args); } return usecase({ args, params, tenant, email }); }; return callback; } export default toLambda;