@celerity-sdk/serverless-aws 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entry.cjs +484 -60
- package/dist/entry.cjs.map +1 -1
- package/dist/entry.d.cts +1 -3
- package/dist/entry.d.ts +1 -3
- package/dist/entry.js +484 -60
- package/dist/entry.js.map +1 -1
- package/dist/index.cjs +454 -76
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +34 -5
- package/dist/index.d.ts +34 -5
- package/dist/index.js +449 -77
- package/dist/index.js.map +1 -1
- package/package.json +13 -3
package/dist/entry.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entry.ts","../src/event-mapper.ts"],"sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport createDebug from \"debug\";\nimport type { APIGatewayProxyEventV2, APIGatewayProxyResultV2 } from \"aws-lambda\";\nimport type { PipelineOptions } from \"@celerity-sdk/core\";\nimport {\n discoverModule,\n bootstrap,\n executeHandlerPipeline,\n createDefaultSystemLayers,\n disposeLayers,\n resolveHandlerByModuleRef,\n} from \"@celerity-sdk/core\";\nimport type { HandlerRegistry } from \"@celerity-sdk/core\";\nimport { mapApiGatewayV2Event, mapHttpResponseToResult } from \"./event-mapper\";\n\nconst debug = createDebug(\"celerity:serverless-aws\");\n\nlet cached: {\n registry: HandlerRegistry;\n options: PipelineOptions;\n moduleDir: string;\n} | null = null;\nlet shutdownRegistered = false;\n\nfunction registerShutdownHandler(options: PipelineOptions): void {\n if (shutdownRegistered) return;\n shutdownRegistered = true;\n debug(\"entry: SIGTERM shutdown handler registered\");\n\n process.on(\"SIGTERM\", async () => {\n await options.container.closeAll();\n await disposeLayers([...(options.systemLayers ?? []), ...(options.appLayers ?? [])]);\n process.exit(0);\n });\n}\n\nasync function ensureBootstrapped(): Promise<{\n registry: HandlerRegistry;\n options: PipelineOptions;\n moduleDir: string;\n}> {\n if (!cached) {\n debug(\"entry: cold start, bootstrapping\");\n const systemLayers = await createDefaultSystemLayers();\n debug(\"entry: %d system layers created\", systemLayers.length);\n const rootModule = await discoverModule();\n const result = await bootstrap(rootModule);\n const modulePath = process.env.CELERITY_MODULE_PATH;\n cached = {\n registry: result.registry,\n options: {\n container: result.container,\n systemLayers,\n },\n moduleDir: modulePath ? dirname(resolve(modulePath)) : process.cwd(),\n };\n debug(\"entry: bootstrap complete\");\n }\n return cached;\n}\n\nexport async function handler(event: unknown, _context: unknown): Promise<APIGatewayProxyResultV2> {\n const { registry, options, moduleDir } = await ensureBootstrapped();\n registerShutdownHandler(options);\n const apiEvent = event as APIGatewayProxyEventV2;\n const httpRequest = mapApiGatewayV2Event(apiEvent);\n debug(\"entry: %s %s\", httpRequest.method, httpRequest.path);\n\n const handlerId = process.env.CELERITY_HANDLER_ID;\n\n let resolved = handlerId ? registry.getHandlerById(handlerId) : undefined;\n\n if (!resolved && handlerId) {\n resolved = (await resolveHandlerByModuleRef(handlerId, registry, moduleDir)) ?? undefined;\n }\n\n if (!resolved) {\n resolved = registry.getHandler(httpRequest.path, httpRequest.method);\n }\n\n if (!resolved) {\n return {\n statusCode: 404,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n statusCode: 404,\n message: `No handler for ${httpRequest.method} ${httpRequest.path}`,\n }),\n };\n }\n\n const httpResponse = await executeHandlerPipeline(resolved, httpRequest, options);\n return mapHttpResponseToResult(httpResponse);\n}\n","import createDebug from \"debug\";\nimport type { HttpMethod, HttpRequest, HttpResponse } from \"@celerity-sdk/types\";\nimport type { APIGatewayProxyEventV2, APIGatewayProxyStructuredResultV2 } from \"aws-lambda\";\n\nconst debug = createDebug(\"celerity:serverless-aws\");\n\nfunction parseBody(event: APIGatewayProxyEventV2): {\n textBody: string | null;\n binaryBody: Buffer | null;\n} {\n if (!event.body) return { textBody: null, binaryBody: null };\n if (event.isBase64Encoded)\n return { textBody: null, binaryBody: Buffer.from(event.body, \"base64\") };\n return { textBody: event.body, binaryBody: null };\n}\n\nfunction parseHeaders(event: APIGatewayProxyEventV2): Record<string, string | string[]> {\n const headers: Record<string, string | string[]> = {};\n if (!event.headers) return headers;\n\n for (const [key, value] of Object.entries(event.headers)) {\n if (value !== undefined) {\n headers[key.toLowerCase()] = value;\n }\n }\n return headers;\n}\n\nfunction parseCookies(event: APIGatewayProxyEventV2): Record<string, string> {\n const cookies: Record<string, string> = {};\n if (!event.cookies) return cookies;\n\n for (const cookie of event.cookies) {\n const eqIndex = cookie.indexOf(\"=\");\n if (eqIndex > 0) {\n cookies[cookie.slice(0, eqIndex).trim()] = cookie.slice(eqIndex + 1).trim();\n }\n }\n return cookies;\n}\n\nfunction parsePathParams(event: APIGatewayProxyEventV2): Record<string, string> {\n const params: Record<string, string> = {};\n if (!event.pathParameters) return params;\n\n for (const [key, value] of Object.entries(event.pathParameters)) {\n if (value !== undefined) {\n params[key] = value;\n }\n }\n return params;\n}\n\nexport function mapApiGatewayV2Event(event: APIGatewayProxyEventV2): HttpRequest {\n const method = event.requestContext.http.method.toUpperCase() as HttpMethod;\n const headers = parseHeaders(event);\n const { textBody, binaryBody } = parseBody(event);\n\n const authorizer = (\n event.requestContext as unknown as {\n authorizer?: { jwt?: { claims?: Record<string, unknown> } };\n }\n ).authorizer;\n\n const contentType = (headers[\"content-type\"] as string | undefined) ?? null;\n const xrayHeader = (headers[\"x-amzn-trace-id\"] as string | undefined) ?? null;\n\n const request: HttpRequest = {\n method,\n path: event.rawPath,\n pathParams: parsePathParams(event),\n query: (event.queryStringParameters ?? {}) as Record<string, string | string[]>,\n headers,\n cookies: parseCookies(event),\n textBody,\n binaryBody,\n contentType,\n requestId: event.requestContext.requestId,\n requestTime: event.requestContext.time ?? new Date().toISOString(),\n auth: authorizer?.jwt?.claims ?? null,\n clientIp: event.requestContext.http.sourceIp,\n traceContext: xrayHeader ? { \"x-amzn-trace-id\": xrayHeader } : null,\n userAgent: event.requestContext.http.userAgent ?? null,\n matchedRoute: event.routeKey ?? null,\n };\n\n debug(\n \"mapEvent: %s %s (auth=%s, traceContext=%s)\",\n method,\n event.rawPath,\n !!authorizer?.jwt?.claims,\n !!xrayHeader,\n );\n\n return request;\n}\n\nexport function mapHttpResponseToResult(response: HttpResponse): APIGatewayProxyStructuredResultV2 {\n const result: APIGatewayProxyStructuredResultV2 = {\n statusCode: response.status,\n };\n\n if (response.headers) {\n result.headers = response.headers;\n }\n\n if (response.binaryBody) {\n result.body = response.binaryBody.toString(\"base64\");\n result.isBase64Encoded = true;\n } else if (response.body) {\n result.body = response.body;\n }\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;uBAAiC;AACjC,IAAAA,gBAAwB;AAGxB,kBAOO;;;ACXP,mBAAwB;AAIxB,IAAMC,YAAQC,aAAAA,SAAY,yBAAA;AAE1B,SAASC,UAAUC,OAA6B;AAI9C,MAAI,CAACA,MAAMC,KAAM,QAAO;IAAEC,UAAU;IAAMC,YAAY;EAAK;AAC3D,MAAIH,MAAMI,gBACR,QAAO;IAAEF,UAAU;IAAMC,YAAYE,OAAOC,KAAKN,MAAMC,MAAM,QAAA;EAAU;AACzE,SAAO;IAAEC,UAAUF,MAAMC;IAAME,YAAY;EAAK;AAClD;AARSJ;AAUT,SAASQ,aAAaP,OAA6B;AACjD,QAAMQ,UAA6C,CAAC;AACpD,MAAI,CAACR,MAAMQ,QAAS,QAAOA;AAE3B,aAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQZ,MAAMQ,OAAO,GAAG;AACxD,QAAIE,UAAUG,QAAW;AACvBL,cAAQC,IAAIK,YAAW,CAAA,IAAMJ;IAC/B;EACF;AACA,SAAOF;AACT;AAVSD;AAYT,SAASQ,aAAaf,OAA6B;AACjD,QAAMgB,UAAkC,CAAC;AACzC,MAAI,CAAChB,MAAMgB,QAAS,QAAOA;AAE3B,aAAWC,UAAUjB,MAAMgB,SAAS;AAClC,UAAME,UAAUD,OAAOE,QAAQ,GAAA;AAC/B,QAAID,UAAU,GAAG;AACfF,cAAQC,OAAOG,MAAM,GAAGF,OAAAA,EAASG,KAAI,CAAA,IAAMJ,OAAOG,MAAMF,UAAU,CAAA,EAAGG,KAAI;IAC3E;EACF;AACA,SAAOL;AACT;AAXSD;AAaT,SAASO,gBAAgBtB,OAA6B;AACpD,QAAMuB,SAAiC,CAAC;AACxC,MAAI,CAACvB,MAAMwB,eAAgB,QAAOD;AAElC,aAAW,CAACd,KAAKC,KAAAA,KAAUC,OAAOC,QAAQZ,MAAMwB,cAAc,GAAG;AAC/D,QAAId,UAAUG,QAAW;AACvBU,aAAOd,GAAAA,IAAOC;IAChB;EACF;AACA,SAAOa;AACT;AAVSD;AAYF,SAASG,qBAAqBzB,OAA6B;AAChE,QAAM0B,SAAS1B,MAAM2B,eAAeC,KAAKF,OAAOG,YAAW;AAC3D,QAAMrB,UAAUD,aAAaP,KAAAA;AAC7B,QAAM,EAAEE,UAAUC,WAAU,IAAKJ,UAAUC,KAAAA;AAE3C,QAAM8B,aACJ9B,MAAM2B,eAGNG;AAEF,QAAMC,cAAevB,QAAQ,cAAA,KAA0C;AACvE,QAAMwB,aAAcxB,QAAQ,iBAAA,KAA6C;AAEzE,QAAMyB,UAAuB;IAC3BP;IACAQ,MAAMlC,MAAMmC;IACZC,YAAYd,gBAAgBtB,KAAAA;IAC5BqC,OAAQrC,MAAMsC,yBAAyB,CAAC;IACxC9B;IACAQ,SAASD,aAAaf,KAAAA;IACtBE;IACAC;IACA4B;IACAQ,WAAWvC,MAAM2B,eAAeY;IAChCC,aAAaxC,MAAM2B,eAAec,SAAQ,oBAAIC,KAAAA,GAAOC,YAAW;IAChEC,MAAMd,YAAYe,KAAKC,UAAU;IACjCC,UAAU/C,MAAM2B,eAAeC,KAAKoB;IACpCC,cAAcjB,aAAa;MAAE,mBAAmBA;IAAW,IAAI;IAC/DkB,WAAWlD,MAAM2B,eAAeC,KAAKsB,aAAa;IAClDC,cAAcnD,MAAMoD,YAAY;EAClC;AAEAvD,QACE,8CACA6B,QACA1B,MAAMmC,SACN,CAAC,CAACL,YAAYe,KAAKC,QACnB,CAAC,CAACd,UAAAA;AAGJ,SAAOC;AACT;AA1CgBR;AA4CT,SAAS4B,wBAAwBC,UAAsB;AAC5D,QAAMC,SAA4C;IAChDC,YAAYF,SAASG;EACvB;AAEA,MAAIH,SAAS9C,SAAS;AACpB+C,WAAO/C,UAAU8C,SAAS9C;EAC5B;AAEA,MAAI8C,SAASnD,YAAY;AACvBoD,WAAOtD,OAAOqD,SAASnD,WAAWuD,SAAS,QAAA;AAC3CH,WAAOnD,kBAAkB;EAC3B,WAAWkD,SAASrD,MAAM;AACxBsD,WAAOtD,OAAOqD,SAASrD;EACzB;AAEA,SAAOsD;AACT;AAjBgBF;;;ADlFhB,IAAMM,aAAQC,cAAAA,SAAY,yBAAA;AAE1B,IAAIC,SAIO;AACX,IAAIC,qBAAqB;AAEzB,SAASC,wBAAwBC,SAAwB;AACvD,MAAIF,mBAAoB;AACxBA,uBAAqB;AACrBH,EAAAA,OAAM,4CAAA;AAENM,UAAQC,GAAG,WAAW,YAAA;AACpB,UAAMF,QAAQG,UAAUC,SAAQ;AAChC,cAAMC,2BAAc;SAAKL,QAAQM,gBAAgB,CAAA;SAASN,QAAQO,aAAa,CAAA;KAAI;AACnFN,YAAQO,KAAK,CAAA;EACf,CAAA;AACF;AAVST;AAYT,eAAeU,qBAAAA;AAKb,MAAI,CAACZ,QAAQ;AACXF,IAAAA,OAAM,kCAAA;AACN,UAAMW,eAAe,UAAMI,uCAAAA;AAC3Bf,IAAAA,OAAM,mCAAmCW,aAAaK,MAAM;AAC5D,UAAMC,aAAa,UAAMC,4BAAAA;AACzB,UAAMC,SAAS,UAAMC,uBAAUH,UAAAA;AAC/B,UAAMI,aAAaf,QAAQgB,IAAIC;AAC/BrB,aAAS;MACPsB,UAAUL,OAAOK;MACjBnB,SAAS;QACPG,WAAWW,OAAOX;QAClBG;MACF;MACAc,WAAWJ,iBAAaK,8BAAQC,0BAAQN,UAAAA,CAAAA,IAAef,QAAQsB,IAAG;IACpE;AACA5B,IAAAA,OAAM,2BAAA;EACR;AACA,SAAOE;AACT;AAvBeY;AAyBf,eAAsBe,QAAQC,OAAgBC,UAAiB;AAC7D,QAAM,EAAEP,UAAUnB,SAASoB,UAAS,IAAK,MAAMX,mBAAAA;AAC/CV,0BAAwBC,OAAAA;AACxB,QAAM2B,WAAWF;AACjB,QAAMG,cAAcC,qBAAqBF,QAAAA;AACzChC,EAAAA,OAAM,gBAAgBiC,YAAYE,QAAQF,YAAYG,IAAI;AAE1D,QAAMC,YAAY/B,QAAQgB,IAAIgB;AAE9B,MAAIC,WAAWF,YAAYb,SAASgB,eAAeH,SAAAA,IAAaI;AAEhE,MAAI,CAACF,YAAYF,WAAW;AAC1BE,eAAY,UAAMG,uCAA0BL,WAAWb,UAAUC,SAAAA,KAAegB;EAClF;AAEA,MAAI,CAACF,UAAU;AACbA,eAAWf,SAASmB,WAAWV,YAAYG,MAAMH,YAAYE,MAAM;EACrE;AAEA,MAAI,CAACI,UAAU;AACb,WAAO;MACLK,YAAY;MACZC,SAAS;QAAE,gBAAgB;MAAmB;MAC9CC,MAAMC,KAAKC,UAAU;QACnBJ,YAAY;QACZK,SAAS,kBAAkBhB,YAAYE,MAAM,IAAIF,YAAYG,IAAI;MACnE,CAAA;IACF;EACF;AAEA,QAAMc,eAAe,UAAMC,oCAAuBZ,UAAUN,aAAa5B,OAAAA;AACzE,SAAO+C,wBAAwBF,YAAAA;AACjC;AAhCsBrB;","names":["import_debug","debug","createDebug","parseBody","event","body","textBody","binaryBody","isBase64Encoded","Buffer","from","parseHeaders","headers","key","value","Object","entries","undefined","toLowerCase","parseCookies","cookies","cookie","eqIndex","indexOf","slice","trim","parsePathParams","params","pathParameters","mapApiGatewayV2Event","method","requestContext","http","toUpperCase","authorizer","contentType","xrayHeader","request","path","rawPath","pathParams","query","queryStringParameters","requestId","requestTime","time","Date","toISOString","auth","jwt","claims","clientIp","sourceIp","traceContext","userAgent","matchedRoute","routeKey","mapHttpResponseToResult","response","result","statusCode","status","toString","debug","createDebug","cached","shutdownRegistered","registerShutdownHandler","options","process","on","container","closeAll","disposeLayers","systemLayers","appLayers","exit","ensureBootstrapped","createDefaultSystemLayers","length","rootModule","discoverModule","result","bootstrap","modulePath","env","CELERITY_MODULE_PATH","registry","moduleDir","dirname","resolve","cwd","handler","event","_context","apiEvent","httpRequest","mapApiGatewayV2Event","method","path","handlerId","CELERITY_HANDLER_ID","resolved","getHandlerById","undefined","resolveHandlerByModuleRef","getHandler","statusCode","headers","body","JSON","stringify","message","httpResponse","executeHandlerPipeline","mapHttpResponseToResult"]}
|
|
1
|
+
{"version":3,"sources":["../src/entry.ts","../src/event-mapper.ts","../src/adapter.ts","../src/websocket-sender.ts"],"sourcesContent":["import createDebug from \"debug\";\nimport type { ServerlessHandler } from \"@celerity-sdk/core\";\nimport { CelerityFactory, discoverModule } from \"@celerity-sdk/core\";\nimport { ServerlessApplication } from \"@celerity-sdk/core\";\nimport { detectEventType } from \"./event-mapper\";\nimport { AwsLambdaAdapter } from \"./adapter\";\n\nconst debug = createDebug(\"celerity:serverless-aws\");\n\nlet app: ServerlessApplication | null = null;\nlet cachedHandler: ServerlessHandler | null = null;\nlet shutdownRegistered = false;\n\nasync function ensureBootstrapped(): Promise<ServerlessApplication> {\n if (!app) {\n debug(\"entry: cold start, bootstrapping via CelerityFactory\");\n const rootModule = await discoverModule();\n app = (await CelerityFactory.create(rootModule, {\n adapter: new AwsLambdaAdapter(),\n })) as ServerlessApplication;\n debug(\"entry: bootstrap complete\");\n }\n return app;\n}\n\nfunction registerShutdownHandler(application: ServerlessApplication): void {\n if (shutdownRegistered) return;\n shutdownRegistered = true;\n debug(\"entry: SIGTERM shutdown handler registered\");\n process.on(\"SIGTERM\", async () => {\n await application.close();\n process.exit(0);\n });\n}\n\n// ---------------------------------------------------------------------------\n// Unified Lambda handler\n// ---------------------------------------------------------------------------\n\nexport async function handler(event: unknown, context: unknown): Promise<unknown> {\n const application = await ensureBootstrapped();\n registerShutdownHandler(application);\n\n if (!cachedHandler) {\n const eventType = detectEventType(event);\n debug(\"entry: creating handler for type=%s\", eventType);\n cachedHandler = application.createHandler(eventType);\n }\n\n return cachedHandler(event, context);\n}\n","import createDebug from \"debug\";\nimport { unmarshall } from \"@aws-sdk/util-dynamodb\";\nimport { mapBucketEventType, mapDatastoreEventType } from \"@celerity-sdk/common\";\nimport type {\n HttpMethod,\n HandlerType,\n HttpRequest,\n HttpResponse,\n WebSocketMessage,\n WebSocketEventType,\n ConsumerEventInput,\n ConsumerMessage,\n ScheduleEventInput,\n} from \"@celerity-sdk/types\";\nimport type {\n APIGatewayProxyEventV2,\n APIGatewayProxyStructuredResultV2,\n APIGatewayProxyWebsocketEventV2,\n SQSEvent,\n SQSRecord,\n SQSBatchResponse,\n SQSBatchItemFailure,\n} from \"aws-lambda\";\nimport type { EventBridgeEvent } from \"aws-lambda/trigger/eventbridge\";\n\nconst debug = createDebug(\"celerity:serverless-aws\");\n\nfunction parseBody(event: APIGatewayProxyEventV2): {\n textBody: string | null;\n binaryBody: Buffer | null;\n} {\n if (!event.body) return { textBody: null, binaryBody: null };\n if (event.isBase64Encoded)\n return { textBody: null, binaryBody: Buffer.from(event.body, \"base64\") };\n return { textBody: event.body, binaryBody: null };\n}\n\nfunction parseHeaders(event: APIGatewayProxyEventV2): Record<string, string | string[]> {\n const headers: Record<string, string | string[]> = {};\n if (!event.headers) return headers;\n\n for (const [key, value] of Object.entries(event.headers)) {\n if (value !== undefined) {\n headers[key.toLowerCase()] = value;\n }\n }\n return headers;\n}\n\nfunction parseCookies(event: APIGatewayProxyEventV2): Record<string, string> {\n const cookies: Record<string, string> = {};\n if (!event.cookies) return cookies;\n\n for (const cookie of event.cookies) {\n const eqIndex = cookie.indexOf(\"=\");\n if (eqIndex > 0) {\n cookies[cookie.slice(0, eqIndex).trim()] = cookie.slice(eqIndex + 1).trim();\n }\n }\n return cookies;\n}\n\nfunction parsePathParams(event: APIGatewayProxyEventV2): Record<string, string> {\n const params: Record<string, string> = {};\n if (!event.pathParameters) return params;\n\n for (const [key, value] of Object.entries(event.pathParameters)) {\n if (value !== undefined) {\n params[key] = value;\n }\n }\n return params;\n}\n\nexport function mapApiGatewayV2Event(event: APIGatewayProxyEventV2): HttpRequest {\n const method = event.requestContext.http.method.toUpperCase() as HttpMethod;\n const headers = parseHeaders(event);\n const { textBody, binaryBody } = parseBody(event);\n\n const authorizer = (\n event.requestContext as unknown as {\n authorizer?: { jwt?: { claims?: Record<string, unknown> } };\n }\n ).authorizer;\n\n const contentType = (headers[\"content-type\"] as string | undefined) ?? null;\n const xrayHeader = (headers[\"x-amzn-trace-id\"] as string | undefined) ?? null;\n\n const request: HttpRequest = {\n method,\n path: event.rawPath,\n pathParams: parsePathParams(event),\n query: (event.queryStringParameters ?? {}) as Record<string, string | string[]>,\n headers,\n cookies: parseCookies(event),\n textBody,\n binaryBody,\n contentType,\n requestId: event.requestContext.requestId,\n requestTime: event.requestContext.time ?? new Date().toISOString(),\n auth: authorizer?.jwt?.claims ?? null,\n clientIp: event.requestContext.http.sourceIp,\n traceContext: xrayHeader ? { \"x-amzn-trace-id\": xrayHeader } : null,\n userAgent: event.requestContext.http.userAgent ?? null,\n matchedRoute: event.routeKey ?? null,\n };\n\n debug(\n \"mapEvent: %s %s (auth=%s, traceContext=%s)\",\n method,\n event.rawPath,\n !!authorizer?.jwt?.claims,\n !!xrayHeader,\n );\n\n return request;\n}\n\nexport function mapHttpResponseToResult(response: HttpResponse): APIGatewayProxyStructuredResultV2 {\n const result: APIGatewayProxyStructuredResultV2 = {\n statusCode: response.status,\n };\n\n if (response.headers) {\n result.headers = response.headers;\n }\n\n if (response.binaryBody) {\n result.body = response.binaryBody.toString(\"base64\");\n result.isBase64Encoded = true;\n } else if (response.body) {\n result.body = response.body;\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Handler type detection\n// ---------------------------------------------------------------------------\n\nexport type { HandlerType };\n\nconst VALID_HANDLER_TYPES = new Set<string>([\n \"http\",\n \"websocket\",\n \"consumer\",\n \"schedule\",\n \"custom\",\n]);\n\nfunction hasNested(obj: Record<string, unknown>, key: string, nested: string): boolean {\n const child = obj[key];\n return (\n child !== null && typeof child === \"object\" && nested in (child as Record<string, unknown>)\n );\n}\n\nexport function detectEventType(event: unknown): HandlerType {\n const envType = process.env.CELERITY_HANDLER_TYPE;\n if (envType && VALID_HANDLER_TYPES.has(envType)) {\n debug(\"detectEventType: using env var CELERITY_HANDLER_TYPE=%s\", envType);\n return envType as HandlerType;\n }\n\n if (!event || typeof event !== \"object\") return \"custom\";\n const e = event as Record<string, unknown>;\n\n if (hasNested(e, \"requestContext\", \"http\")) return \"http\";\n if (hasNested(e, \"requestContext\", \"connectionId\") && hasNested(e, \"requestContext\", \"eventType\"))\n return \"websocket\";\n if (\n Array.isArray(e.Records) &&\n e.Records.length > 0 &&\n (e.Records[0] as Record<string, unknown>)?.eventSource === \"aws:sqs\"\n )\n return \"consumer\";\n if (\"source\" in e && \"detail-type\" in e) return \"schedule\";\n\n return \"custom\";\n}\n\n// ---------------------------------------------------------------------------\n// WebSocket event mapper\n// ---------------------------------------------------------------------------\n\nconst WS_EVENT_TYPE_MAP: Record<string, WebSocketEventType> = {\n CONNECT: \"connect\",\n MESSAGE: \"message\",\n DISCONNECT: \"disconnect\",\n};\n\nexport type WebSocketMappedEvent = {\n message: WebSocketMessage;\n routeKey: string;\n endpoint: string;\n};\n\nexport function mapApiGatewayWebSocketEvent(\n event: APIGatewayProxyWebsocketEventV2,\n): WebSocketMappedEvent {\n const rc = event.requestContext;\n const eventType = WS_EVENT_TYPE_MAP[rc.eventType] ?? \"message\";\n\n let jsonBody: unknown | undefined;\n let binaryBody: Buffer | undefined;\n\n if (event.body) {\n if (event.isBase64Encoded) {\n binaryBody = Buffer.from(event.body, \"base64\");\n } else {\n try {\n jsonBody = JSON.parse(event.body);\n } catch {\n jsonBody = event.body;\n }\n }\n }\n\n const message: WebSocketMessage = {\n messageType: binaryBody ? \"binary\" : \"json\",\n eventType,\n connectionId: rc.connectionId,\n messageId: rc.requestId,\n jsonBody,\n binaryBody,\n requestContext: {\n requestId: rc.requestId,\n requestTime: rc.requestTimeEpoch,\n path: `/${rc.stage}`,\n protocolVersion: \"websocket\",\n headers: {},\n clientIp: \"\",\n query: {},\n cookies: {},\n },\n traceContext: null,\n };\n\n const routeKey = rc.routeKey;\n const endpoint = `https://${rc.domainName}/${rc.stage}`;\n\n debug(\"mapWebSocketEvent: %s connectionId=%s routeKey=%s\", eventType, rc.connectionId, routeKey);\n\n return { message, routeKey, endpoint };\n}\n\n// ---------------------------------------------------------------------------\n// Event-sourced SQS message detection and body transformation\n// ---------------------------------------------------------------------------\n\ntype S3Record = {\n eventSource: string;\n eventName: string;\n s3: {\n bucket: { name: string };\n object: { key: string; size?: number; eTag?: string };\n };\n};\n\ntype S3Notification = {\n Records: S3Record[];\n};\n\ntype DynamoDBStreamRecord = {\n eventSource: string;\n eventName: string;\n eventSourceARN?: string;\n dynamodb?: {\n Keys?: Record<string, Record<string, unknown>>;\n NewImage?: Record<string, Record<string, unknown>>;\n OldImage?: Record<string, Record<string, unknown>>;\n };\n};\n\nfunction tryParseJson(body: string): unknown | undefined {\n try {\n return JSON.parse(body);\n } catch {\n return undefined;\n }\n}\n\nfunction isS3Notification(parsed: unknown): parsed is S3Notification {\n if (!parsed || typeof parsed !== \"object\") return false;\n const obj = parsed as Record<string, unknown>;\n if (!Array.isArray(obj.Records) || obj.Records.length === 0) return false;\n const first = obj.Records[0] as Record<string, unknown>;\n return first.eventSource === \"aws:s3\";\n}\n\nfunction isDynamoDBStreamRecord(parsed: unknown): parsed is DynamoDBStreamRecord {\n if (!parsed || typeof parsed !== \"object\") return false;\n return (parsed as Record<string, unknown>).eventSource === \"aws:dynamodb\";\n}\n\nfunction extractTableName(eventSourceARN?: string): string | undefined {\n if (!eventSourceARN) return undefined;\n // arn:aws:dynamodb:region:account:table/TABLE_NAME/stream/timestamp\n const match = eventSourceARN.match(/table\\/([^/]+)/);\n return match?.[1];\n}\n\nfunction transformS3Body(record: S3Record): string {\n return JSON.stringify({\n key: record.s3.object.key,\n ...(record.s3.object.size !== undefined && { size: record.s3.object.size }),\n ...(record.s3.object.eTag !== undefined && { eTag: record.s3.object.eTag }),\n });\n}\n\nfunction unmarshallRecord(\n attrs: Record<string, Record<string, unknown>> | undefined,\n): Record<string, unknown> | undefined {\n if (!attrs) return undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return unmarshall(attrs as any);\n}\n\nfunction transformDynamoDBBody(record: DynamoDBStreamRecord): string {\n const db = record.dynamodb;\n return JSON.stringify({\n keys: unmarshallRecord(db?.Keys) ?? {},\n ...(db?.NewImage !== undefined && { newItem: unmarshallRecord(db.NewImage) }),\n ...(db?.OldImage !== undefined && { oldItem: unmarshallRecord(db.OldImage) }),\n });\n}\n\nfunction mapSqsRecord(record: SQSRecord): ConsumerMessage {\n const sqsVendor = {\n receiptHandle: record.receiptHandle,\n attributes: record.attributes,\n md5OfBody: record.md5OfBody,\n eventSource: record.eventSource,\n awsRegion: record.awsRegion,\n };\n\n const parsed = tryParseJson(record.body);\n\n // S3 notification → bucket event\n if (isS3Notification(parsed)) {\n const s3Record = parsed.Records[0];\n return {\n messageId: record.messageId,\n body: transformS3Body(s3Record),\n source: record.eventSourceARN,\n sourceType: \"bucket\",\n sourceName: s3Record.s3.bucket.name,\n eventType: mapBucketEventType(s3Record.eventName),\n messageAttributes: record.messageAttributes,\n vendor: { ...sqsVendor, originalBody: parsed },\n };\n }\n\n // DynamoDB stream record → datastore event\n if (isDynamoDBStreamRecord(parsed)) {\n return {\n messageId: record.messageId,\n body: transformDynamoDBBody(parsed),\n source: record.eventSourceARN,\n sourceType: \"datastore\",\n sourceName: extractTableName(parsed.eventSourceARN),\n eventType: mapDatastoreEventType(parsed.eventName),\n messageAttributes: record.messageAttributes,\n vendor: { ...sqsVendor, originalBody: parsed },\n };\n }\n\n // Plain SQS message (queue/topic consumer)\n return {\n messageId: record.messageId,\n body: record.body,\n source: record.eventSourceARN,\n messageAttributes: record.messageAttributes,\n vendor: sqsVendor,\n };\n}\n\nexport function mapSqsEvent(event: SQSEvent, handlerTag: string): ConsumerEventInput {\n const messages = event.Records.map(mapSqsRecord);\n\n const firstTraceHeader = event.Records[0]?.attributes?.AWSTraceHeader;\n const traceContext = firstTraceHeader ? { \"x-amzn-trace-id\": firstTraceHeader } : null;\n\n debug(\"mapSqsEvent: %d records, handlerTag=%s\", messages.length, handlerTag);\n\n return {\n handlerTag,\n messages,\n vendor: { eventSource: \"aws:sqs\" },\n traceContext,\n };\n}\n\nexport function mapConsumerResultToSqsBatchResponse(\n failures: Array<{ messageId: string }> | undefined,\n): SQSBatchResponse {\n const batchItemFailures: SQSBatchItemFailure[] = (failures ?? []).map((f) => ({\n itemIdentifier: f.messageId,\n }));\n return { batchItemFailures };\n}\n\n// ---------------------------------------------------------------------------\n// EventBridge / Schedule event mapper\n// ---------------------------------------------------------------------------\n\nexport function mapEventBridgeEvent(\n event: EventBridgeEvent<string, unknown>,\n handlerTag: string,\n): ScheduleEventInput {\n debug(\"mapEventBridgeEvent: id=%s handlerTag=%s\", event.id, handlerTag);\n\n return {\n handlerTag,\n scheduleId: event.id,\n messageId: event.id,\n schedule: \"\",\n input: event.detail,\n vendor: {\n source: event.source,\n detailType: event[\"detail-type\"],\n account: event.account,\n region: event.region,\n },\n traceContext: null,\n };\n}\n","import { dirname, resolve } from \"node:path\";\nimport createDebug from \"debug\";\nimport type {\n APIGatewayProxyEventV2,\n APIGatewayProxyResultV2,\n APIGatewayProxyWebsocketEventV2,\n SQSEvent,\n SQSBatchResponse,\n} from \"aws-lambda\";\nimport type { EventBridgeEvent } from \"aws-lambda/trigger/eventbridge\";\nimport type {\n HandlerRegistry,\n ServerlessAdapter,\n ServerlessHandler,\n ResolvedHttpHandler,\n ResolvedWebSocketHandler,\n ResolvedConsumerHandler,\n ResolvedScheduleHandler,\n ResolvedCustomHandler,\n PipelineOptions,\n} from \"@celerity-sdk/core\";\nimport {\n executeHttpPipeline,\n executeWebSocketPipeline,\n executeConsumerPipeline,\n executeSchedulePipeline,\n executeCustomPipeline,\n resolveHandlerByModuleRef,\n} from \"@celerity-sdk/core\";\nimport { WebSocketSender as WS_SENDER_TOKEN } from \"@celerity-sdk/types\";\nimport {\n mapApiGatewayV2Event,\n mapHttpResponseToResult,\n mapApiGatewayWebSocketEvent,\n mapSqsEvent,\n mapEventBridgeEvent,\n mapConsumerResultToSqsBatchResponse,\n} from \"./event-mapper\";\nimport { ApiGatewayWebSocketSender } from \"./websocket-sender\";\n\nconst debug = createDebug(\"celerity:serverless-aws\");\n\ntype AwsLambdaAdapterConfig = {\n handlerId?: string;\n handlerTag?: string;\n moduleDir: string;\n};\n\nexport class AwsLambdaAdapter implements ServerlessAdapter {\n config: AwsLambdaAdapterConfig;\n private wsSenderRegistered = false;\n\n constructor() {\n this.config = captureAwsLambdaConfig();\n }\n\n createHttpHandler(registry: HandlerRegistry, options: PipelineOptions): ServerlessHandler {\n let cachedHandler: ResolvedHttpHandler | null = null;\n\n return async (event: unknown, _context: unknown): Promise<APIGatewayProxyResultV2> => {\n const apiEvent = event as APIGatewayProxyEventV2;\n const httpRequest = mapApiGatewayV2Event(apiEvent);\n\n if (!cachedHandler) {\n debug(\n \"adapter: cache miss, looking up handler for %s %s\",\n httpRequest.method,\n httpRequest.path,\n );\n\n cachedHandler =\n (this.config.handlerId\n ? registry.getHandlerById(\"http\", this.config.handlerId)\n : undefined) ?? null;\n\n if (!cachedHandler && this.config.handlerId) {\n cachedHandler = (await resolveHandlerByModuleRef(\n this.config.handlerId,\n \"http\",\n registry,\n this.config.moduleDir,\n )) as ResolvedHttpHandler | null;\n }\n\n if (!cachedHandler) {\n cachedHandler =\n registry.getHandler(\"http\", `${httpRequest.method} ${httpRequest.path}`) ?? null;\n }\n } else {\n debug(\"adapter: using cached handler for %s %s\", httpRequest.method, httpRequest.path);\n }\n\n if (!cachedHandler) {\n debug(\"adapter: no handler found → 404\");\n return {\n statusCode: 404,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n message: `No handler for ${httpRequest.method} ${httpRequest.path}`,\n }),\n };\n }\n\n const httpResponse = await executeHttpPipeline(cachedHandler, httpRequest, options);\n return mapHttpResponseToResult(httpResponse);\n };\n }\n\n createWebSocketHandler(registry: HandlerRegistry, options: PipelineOptions): ServerlessHandler {\n let cachedHandler: ResolvedWebSocketHandler | null = null;\n\n return async (event: unknown, _context: unknown): Promise<{ statusCode: number }> => {\n const wsEvent = event as APIGatewayProxyWebsocketEventV2;\n const { message, routeKey, endpoint } = mapApiGatewayWebSocketEvent(wsEvent);\n\n // Register WebSocket sender once\n if (!this.wsSenderRegistered) {\n const sender = new ApiGatewayWebSocketSender(endpoint);\n options.container.register(WS_SENDER_TOKEN, { useValue: sender });\n this.wsSenderRegistered = true;\n debug(\"adapter: registered ApiGatewayWebSocketSender for endpoint=%s\", endpoint);\n }\n\n if (!cachedHandler) {\n debug(\"adapter: cache miss, looking up WebSocket handler for routeKey=%s\", routeKey);\n\n cachedHandler =\n (this.config.handlerId\n ? registry.getHandlerById(\"websocket\", this.config.handlerId)\n : undefined) ?? null;\n\n if (!cachedHandler && this.config.handlerId) {\n cachedHandler = (await resolveHandlerByModuleRef(\n this.config.handlerId,\n \"websocket\",\n registry,\n this.config.moduleDir,\n )) as ResolvedWebSocketHandler | null;\n }\n\n if (!cachedHandler) {\n cachedHandler = registry.getHandler(\"websocket\", routeKey) ?? null;\n }\n } else {\n debug(\"adapter: using cached WebSocket handler\");\n }\n\n if (!cachedHandler) {\n debug(\"adapter: no WebSocket handler found → 404\");\n return { statusCode: 404 };\n }\n\n await executeWebSocketPipeline(cachedHandler, message, options);\n return { statusCode: 200 };\n };\n }\n\n createConsumerHandler(registry: HandlerRegistry, options: PipelineOptions): ServerlessHandler {\n let cachedHandler: ResolvedConsumerHandler | null = null;\n\n return async (event: unknown, _context: unknown): Promise<SQSBatchResponse> => {\n const sqsEvent = event as SQSEvent;\n const handlerTag = this.config.handlerTag ?? sqsEvent.Records[0]?.eventSourceARN ?? \"unknown\";\n const consumerEvent = mapSqsEvent(sqsEvent, handlerTag);\n\n if (!cachedHandler) {\n debug(\"adapter: cache miss, looking up Consumer handler for tag=%s\", handlerTag);\n\n cachedHandler =\n (this.config.handlerId\n ? registry.getHandlerById(\"consumer\", this.config.handlerId)\n : undefined) ?? null;\n\n if (!cachedHandler && this.config.handlerId) {\n cachedHandler = (await resolveHandlerByModuleRef(\n this.config.handlerId,\n \"consumer\",\n registry,\n this.config.moduleDir,\n )) as ResolvedConsumerHandler | null;\n }\n\n if (!cachedHandler) {\n cachedHandler = registry.getHandler(\"consumer\", handlerTag) ?? null;\n }\n } else {\n debug(\"adapter: using cached Consumer handler\");\n }\n\n if (!cachedHandler) {\n debug(\"adapter: no Consumer handler found → empty response\");\n return { batchItemFailures: [] };\n }\n\n const result = await executeConsumerPipeline(cachedHandler, consumerEvent, options);\n return mapConsumerResultToSqsBatchResponse(result.failures);\n };\n }\n\n createScheduleHandler(registry: HandlerRegistry, options: PipelineOptions): ServerlessHandler {\n let cachedHandler: ResolvedScheduleHandler | null = null;\n\n return async (event: unknown, _context: unknown): Promise<unknown> => {\n const ebEvent = event as EventBridgeEvent<string, unknown>;\n const handlerTag = this.config.handlerTag ?? ebEvent.resources?.[0] ?? \"unknown\";\n const scheduleEvent = mapEventBridgeEvent(ebEvent, handlerTag);\n\n if (!cachedHandler) {\n debug(\"adapter: cache miss, looking up Schedule handler for tag=%s\", handlerTag);\n\n cachedHandler =\n (this.config.handlerId\n ? registry.getHandlerById(\"schedule\", this.config.handlerId)\n : undefined) ?? null;\n\n if (!cachedHandler && this.config.handlerId) {\n cachedHandler = (await resolveHandlerByModuleRef(\n this.config.handlerId,\n \"schedule\",\n registry,\n this.config.moduleDir,\n )) as ResolvedScheduleHandler | null;\n }\n\n if (!cachedHandler) {\n cachedHandler = registry.getHandler(\"schedule\", handlerTag) ?? null;\n }\n } else {\n debug(\"adapter: using cached Schedule handler\");\n }\n\n if (!cachedHandler) {\n debug(\"adapter: no Schedule handler found\");\n return { success: false, errorMessage: `No handler for schedule tag: ${handlerTag}` };\n }\n\n return executeSchedulePipeline(cachedHandler, scheduleEvent, options);\n };\n }\n\n createCustomHandler(registry: HandlerRegistry, options: PipelineOptions): ServerlessHandler {\n let cachedHandler: ResolvedCustomHandler | null = null;\n\n return async (event: unknown, _context: unknown): Promise<unknown> => {\n let handlerName: string | undefined = this.config.handlerId;\n let payload: unknown = event;\n\n if (!handlerName && event && typeof event === \"object\") {\n const e = event as Record<string, unknown>;\n if (typeof e.handlerName === \"string\") {\n handlerName = e.handlerName;\n payload = e.payload ?? {};\n }\n }\n\n if (!cachedHandler) {\n debug(\"adapter: cache miss, looking up Custom handler for name=%s\", handlerName);\n\n cachedHandler =\n (handlerName ? registry.getHandlerById(\"custom\", handlerName) : undefined) ?? null;\n\n if (!cachedHandler && handlerName) {\n cachedHandler = (await resolveHandlerByModuleRef(\n handlerName,\n \"custom\",\n registry,\n this.config.moduleDir,\n )) as ResolvedCustomHandler | null;\n }\n\n if (!cachedHandler && handlerName) {\n cachedHandler = registry.getHandler(\"custom\", handlerName) ?? null;\n }\n\n if (!cachedHandler) {\n const allCustom = registry.getHandlersByType(\"custom\");\n if (allCustom.length === 1) cachedHandler = allCustom[0];\n }\n } else {\n debug(\"adapter: using cached Custom handler\");\n }\n\n if (!cachedHandler) {\n debug(\"adapter: no Custom handler found\");\n return { error: `No handler found for custom invoke: ${handlerName ?? \"unknown\"}` };\n }\n\n return executeCustomPipeline(cachedHandler, payload, options);\n };\n }\n}\n\nfunction captureAwsLambdaConfig(): AwsLambdaAdapterConfig {\n const modulePath = process.env.CELERITY_MODULE_PATH;\n return {\n handlerId: process.env.CELERITY_HANDLER_ID,\n handlerTag: process.env.CELERITY_HANDLER_TAG,\n moduleDir: modulePath ? dirname(resolve(modulePath)) : process.cwd(),\n };\n}\n","import createDebug from \"debug\";\nimport type { WebSocketSender, WebSocketSendOptions } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:serverless-aws\");\n\n// Dynamic import path (variable prevents static TS resolution)\nconst API_GW_MGMT_PKG = \"@aws-sdk/client-apigatewaymanagementapi\";\n\nexport class ApiGatewayWebSocketSender implements WebSocketSender {\n private client: unknown = null;\n\n constructor(private endpoint: string) {\n debug(\"ApiGatewayWebSocketSender: created with endpoint=%s\", endpoint);\n }\n\n async sendMessage(\n connectionId: string,\n data: unknown,\n _options?: WebSocketSendOptions,\n ): Promise<void> {\n const client = await this.getClient();\n const payload = typeof data === \"string\" ? data : JSON.stringify(data);\n\n const { PostToConnectionCommand } = await import(API_GW_MGMT_PKG);\n await (client as { send: (cmd: unknown) => Promise<unknown> }).send(\n new PostToConnectionCommand({\n ConnectionId: connectionId,\n Data: new TextEncoder().encode(payload),\n }),\n );\n\n debug(\"ApiGatewayWebSocketSender: sent message to connectionId=%s\", connectionId);\n }\n\n private async getClient(): Promise<unknown> {\n if (!this.client) {\n const { ApiGatewayManagementApiClient } = await import(API_GW_MGMT_PKG);\n this.client = new ApiGatewayManagementApiClient({ endpoint: this.endpoint });\n debug(\"ApiGatewayWebSocketSender: client initialized for endpoint=%s\", this.endpoint);\n }\n return this.client;\n }\n}\n"],"mappings":"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","names":["import_debug","import_core","debug","createDebug","parseBody","event","body","textBody","binaryBody","isBase64Encoded","Buffer","from","parseHeaders","headers","key","value","Object","entries","undefined","toLowerCase","parseCookies","cookies","cookie","eqIndex","indexOf","slice","trim","parsePathParams","params","pathParameters","mapApiGatewayV2Event","method","requestContext","http","toUpperCase","authorizer","contentType","xrayHeader","request","path","rawPath","pathParams","query","queryStringParameters","requestId","requestTime","time","Date","toISOString","auth","jwt","claims","clientIp","sourceIp","traceContext","userAgent","matchedRoute","routeKey","mapHttpResponseToResult","response","result","statusCode","status","toString","VALID_HANDLER_TYPES","Set","hasNested","obj","nested","child","detectEventType","envType","process","env","CELERITY_HANDLER_TYPE","has","e","Array","isArray","Records","length","eventSource","WS_EVENT_TYPE_MAP","CONNECT","MESSAGE","DISCONNECT","mapApiGatewayWebSocketEvent","rc","eventType","jsonBody","JSON","parse","message","messageType","connectionId","messageId","requestTimeEpoch","stage","protocolVersion","endpoint","domainName","tryParseJson","isS3Notification","parsed","first","isDynamoDBStreamRecord","extractTableName","eventSourceARN","match","transformS3Body","record","stringify","s3","object","size","eTag","unmarshallRecord","attrs","unmarshall","transformDynamoDBBody","db","dynamodb","keys","Keys","NewImage","newItem","OldImage","oldItem","mapSqsRecord","sqsVendor","receiptHandle","attributes","md5OfBody","awsRegion","s3Record","source","sourceType","sourceName","bucket","name","mapBucketEventType","eventName","messageAttributes","vendor","originalBody","mapDatastoreEventType","mapSqsEvent","handlerTag","messages","map","firstTraceHeader","AWSTraceHeader","mapConsumerResultToSqsBatchResponse","failures","batchItemFailures","f","itemIdentifier","mapEventBridgeEvent","id","scheduleId","schedule","input","detail","detailType","account","region","import_debug","import_debug","debug","createDebug","API_GW_MGMT_PKG","ApiGatewayWebSocketSender","client","endpoint","sendMessage","connectionId","data","_options","getClient","payload","JSON","stringify","PostToConnectionCommand","send","ConnectionId","Data","TextEncoder","encode","ApiGatewayManagementApiClient","debug","createDebug","AwsLambdaAdapter","config","wsSenderRegistered","captureAwsLambdaConfig","createHttpHandler","registry","options","cachedHandler","event","_context","apiEvent","httpRequest","mapApiGatewayV2Event","method","path","handlerId","getHandlerById","undefined","resolveHandlerByModuleRef","moduleDir","getHandler","statusCode","headers","body","JSON","stringify","message","httpResponse","executeHttpPipeline","mapHttpResponseToResult","createWebSocketHandler","wsEvent","routeKey","endpoint","mapApiGatewayWebSocketEvent","sender","ApiGatewayWebSocketSender","container","register","WS_SENDER_TOKEN","useValue","executeWebSocketPipeline","createConsumerHandler","sqsEvent","handlerTag","Records","eventSourceARN","consumerEvent","mapSqsEvent","batchItemFailures","result","executeConsumerPipeline","mapConsumerResultToSqsBatchResponse","failures","createScheduleHandler","ebEvent","resources","scheduleEvent","mapEventBridgeEvent","success","errorMessage","executeSchedulePipeline","createCustomHandler","handlerName","payload","e","allCustom","getHandlersByType","length","error","executeCustomPipeline","modulePath","process","env","CELERITY_MODULE_PATH","CELERITY_HANDLER_ID","CELERITY_HANDLER_TAG","dirname","resolve","cwd","debug","createDebug","app","cachedHandler","shutdownRegistered","ensureBootstrapped","rootModule","discoverModule","CelerityFactory","create","adapter","AwsLambdaAdapter","registerShutdownHandler","application","process","on","close","exit","handler","event","context","eventType","detectEventType","createHandler"]}
|
package/dist/entry.d.cts
CHANGED
package/dist/entry.d.ts
CHANGED