UNPKG

inngest

Version:

Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.

1 lines 5.25 kB
{"version":3,"file":"lambda.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler"],"sources":["../src/lambda.ts"],"sourcesContent":["/**\n * An adapter for AWS Lambda to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * @example\n *\n * ```ts\n * import { Inngest } from \"inngest\";\n * import { serve } from \"inngest/lambda\";\n *\n * const inngest = new Inngest({ id: \"my-lambda-app\" });\n *\n * const fn = inngest.createFunction(\n * { id: \"hello-world\", triggers: [{ event: \"test/hello.world\" }] },\n * async ({ event }) => {\n * return \"Hello World\";\n * }\n * );\n *\n * export const handler = serve({ client: inngest, functions: [fn] });\n * ```\n *\n * @module\n */\n\nimport type {\n APIGatewayEvent,\n APIGatewayProxyEventV2,\n APIGatewayProxyResult,\n Context,\n} from \"aws-lambda\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport type { Either } from \"./helpers/types.ts\";\nimport type { SupportedFrameworkName } from \"./types.ts\";\n\n/**\n * The name of the framework, used to identify the framework in Inngest\n * dashboards and during testing.\n */\nexport const frameworkName: SupportedFrameworkName = \"aws-lambda\";\n\n/**\n * With AWS Lambda, serve and register any declared functions with Inngest,\n * making them available to be triggered by events.\n *\n * @example\n *\n * ```ts\n * import { Inngest } from \"inngest\";\n * import { serve } from \"inngest/lambda\";\n *\n * const inngest = new Inngest({ id: \"my-lambda-app\" });\n *\n * const fn = inngest.createFunction(\n * { id: \"hello-world\", triggers: [{ event: \"test/hello.world\" }] },\n * async ({ event }) => {\n * return \"Hello World\";\n * }\n * );\n *\n * export const handler = serve({ client: inngest, functions: [fn] });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (\n options: ServeHandlerOptions,\n): ((\n event: Either<APIGatewayEvent, APIGatewayProxyEventV2>,\n _context: Context,\n) => Promise<APIGatewayProxyResult>) => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n handler: (\n event: Either<APIGatewayEvent, APIGatewayProxyEventV2>,\n _context: Context,\n ) => {\n /**\n * Try to handle multiple incoming event types, as Lambda can have many\n * triggers.\n *\n * This still doesn't handle all cases, but it's a start.\n */\n const eventIsV2 = ((\n ev: APIGatewayEvent | APIGatewayProxyEventV2,\n ): ev is APIGatewayProxyEventV2 => {\n return (ev as APIGatewayProxyEventV2).version === \"2.0\";\n })(event);\n\n // Create a map of headers\n const headersMap = new Map<string, string | undefined>([\n ...Object.entries(event.headers).map(\n ([key, value]) =>\n [key.toLowerCase().trim(), value] as [string, string | undefined],\n ),\n ]);\n\n const getHeader = (key: string): string | undefined => {\n return headersMap.get(key.toLowerCase().trim());\n };\n\n return {\n body: () => {\n return JSON.parse(\n event.body\n ? event.isBase64Encoded\n ? Buffer.from(event.body, \"base64\").toString()\n : event.body\n : \"{}\",\n );\n },\n headers: getHeader,\n method: () => {\n return eventIsV2\n ? event.requestContext.http.method\n : event.httpMethod;\n },\n url: () => {\n const path = eventIsV2 ? event.requestContext.http.path : event.path;\n const proto = getHeader(\"x-forwarded-proto\") || \"https\";\n const url = new URL(path, `${proto}://${getHeader(\"host\") || \"\"}`);\n\n return url;\n },\n queryString: (key) => {\n return event.queryStringParameters?.[key];\n },\n transformResponse: ({\n body,\n status: statusCode,\n headers,\n }): Promise<APIGatewayProxyResult> => {\n return Promise.resolve({ body, statusCode, headers });\n },\n };\n },\n });\n\n return handler.createHandler();\n};\n"],"mappings":";;;;;;;AA0CA,MAAaA,gBAAwC;;;;;;;;;;;;;;;;;;;;;;;;;AA2BrD,MAAa,SACX,YAIsC;AAqEtC,QApEgB,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH,UACE,OACA,aACG;;;;;;;GAOH,MAAM,cACJ,OACiC;AACjC,WAAQ,GAA8B,YAAY;MACjD,MAAM;GAGT,MAAM,aAAa,IAAI,IAAgC,CACrD,GAAG,OAAO,QAAQ,MAAM,QAAQ,CAAC,KAC9B,CAAC,KAAK,WACL,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CACpC,CACF,CAAC;GAEF,MAAM,aAAa,QAAoC;AACrD,WAAO,WAAW,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC;;AAGjD,UAAO;IACL,YAAY;AACV,YAAO,KAAK,MACV,MAAM,OACF,MAAM,kBACJ,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC,UAAU,GAC5C,MAAM,OACR,KACL;;IAEH,SAAS;IACT,cAAc;AACZ,YAAO,YACH,MAAM,eAAe,KAAK,SAC1B,MAAM;;IAEZ,WAAW;KACT,MAAM,OAAO,YAAY,MAAM,eAAe,KAAK,OAAO,MAAM;KAChE,MAAM,QAAQ,UAAU,oBAAoB,IAAI;AAGhD,YAFY,IAAI,IAAI,MAAM,GAAG,MAAM,KAAK,UAAU,OAAO,IAAI,KAAK;;IAIpE,cAAc,QAAQ;AACpB,YAAO,MAAM,wBAAwB;;IAEvC,oBAAoB,EAClB,MACA,QAAQ,YACR,cACoC;AACpC,YAAO,QAAQ,QAAQ;MAAE;MAAM;MAAY;MAAS,CAAC;;IAExD;;EAEJ,CAAC,CAEa,eAAe"}