import { Composite, mergeDefaults, type Value } from "@intentius/chant"; import { Permission } from "../generated"; import { LambdaFunction, type LambdaFunctionProps, type LambdaFunctionResult } from "./lambda-function"; export interface LambdaApiProps extends LambdaFunctionProps { /** `Value`: an ARN is routinely built with `Sub` from pseudo-parameters (#1366). */ sourceArn?: Value; defaults?: LambdaFunctionProps["defaults"] & { permission?: Partial[0]>; }; } export type LambdaApiResult = LambdaFunctionResult & { permission: InstanceType; }; export const LambdaApi = Composite((props) => { const { defaults } = props; const { role, func } = LambdaFunction(props); const permission = new Permission(mergeDefaults({ FunctionName: func.Arn, Action: "lambda:InvokeFunction", Principal: "apigateway.amazonaws.com", SourceArn: props.sourceArn, }, defaults?.permission)); return { role, func, permission }; }, "LambdaApi");