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 • 6.99 kB
Source Map (JSON)
{"version":3,"file":"edge.cjs","names":["frameworkName: SupportedFrameworkName","InngestCommHandler","headers: Record<string, string>","handleDurableEndpointProxyRequest","InngestEndpointAdapter"],"sources":["../src/edge.ts"],"sourcesContent":["/**\n * An adapter for any request that handles standard Web APIs such as `fetch`,\n * `Request,` and `Response` to serve and register any declared functions with\n * Inngest, making them available to be triggered by events.\n *\n * This is reused by many other adapters, but can be used directly.\n *\n * @example\n * ```ts\n * import { serve } from \"inngest/edge\";\n * import functions from \"~/inngest\";\n *\n * export const handler = serve({ id: \"my-edge-app\", functions });\n * ```\n *\n * @module\n */\n\nimport type { Inngest } from \"./components/Inngest.ts\";\nimport {\n InngestCommHandler,\n type ServeHandlerOptions,\n type SyncHandlerOptions,\n} from \"./components/InngestCommHandler.ts\";\nimport { handleDurableEndpointProxyRequest } from \"./components/InngestDurableEndpointProxy.ts\";\nimport { InngestEndpointAdapter } from \"./components/InngestEndpointAdapter.ts\";\nimport type { RegisterOptions, 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 = \"edge\";\n\nexport type EdgeHandler = (req: Request) => Promise<Response>;\n\nconst commHandler = (\n options: RegisterOptions & { client: Inngest.Like },\n syncOptions?: SyncHandlerOptions,\n) => {\n const handler = new InngestCommHandler({\n frameworkName,\n ...options,\n syncOptions,\n handler: (req: Request) => {\n return {\n body: () => req.text(),\n headers: (key: string) => req.headers.get(key),\n method: () => req.method,\n url: () => new URL(req.url, `https://${req.headers.get(\"host\") || \"\"}`),\n transformResponse: ({ body, status, headers }) => {\n return new Response(body, { status, headers });\n },\n experimentalTransformSyncResponse: async (data) => {\n const res = data as Response;\n\n const headers: Record<string, string> = {};\n res.headers.forEach((v, k) => {\n headers[k] = v;\n });\n\n return {\n headers: headers,\n status: res.status,\n body: await res.clone().text(),\n };\n },\n };\n },\n });\n\n return handler;\n};\n\n/**\n * In an edge runtime, serve and register any declared functions with Inngest,\n * making them available to be triggered by events.\n *\n * The edge runtime is a generic term for any serverless runtime that supports\n * only standard Web APIs such as `fetch`, `Request`, and `Response`, such as\n * Cloudflare Workers, Vercel Edge Functions, and AWS Lambda@Edge.\n *\n * @example\n * ```ts\n * import { serve } from \"inngest/edge\";\n * import functions from \"~/inngest\";\n *\n * export const handler = serve({ id: \"my-edge-app\", functions });\n * ```\n *\n * @public\n */\n// Has explicit return type to avoid JSR-defined \"slow types\"\nexport const serve = (options: ServeHandlerOptions): EdgeHandler => {\n return commHandler(options).createHandler();\n};\n\n/**\n * Creates a durable endpoint proxy handler for edge environments.\n *\n * This handler extracts `runId` and `token` from query parameters,\n * fetches the run output from Inngest, decrypts it via middleware\n * (if configured), and returns it with CORS headers.\n */\nconst createDurableEndpointProxyHandler = (\n options: InngestEndpointAdapter.ProxyHandlerOptions,\n): EdgeHandler => {\n return async (req: Request): Promise<Response> => {\n const url = new URL(req.url);\n\n const result = await handleDurableEndpointProxyRequest(\n options.client as Inngest.Any,\n {\n runId: url.searchParams.get(\"runId\"),\n token: url.searchParams.get(\"token\"),\n method: req.method,\n },\n );\n\n return new Response(result.body, {\n status: result.status,\n headers: result.headers,\n });\n };\n};\n\n/**\n * In an edge runtime, create a function that can wrap any endpoint to be able\n * to use steps seamlessly within that API.\n *\n * The edge runtime is a generic term for any serverless runtime that supports\n * only standard Web APIs such as `fetch`, `Request`, and `Response`, such as\n * Cloudflare Workers, Vercel Edge Functions, and AWS Lambda@Edge.\n *\n * @example\n * ```ts\n * import { Inngest, step } from \"inngest\";\n * import { endpointAdapter } from \"inngest/edge\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * endpointAdapter,\n * });\n *\n * Bun.serve({\n * routes: {\n * \"/\": inngest.endpoint(async (req) => {\n * const foo = await step.run(\"my-step\", () => ({ foo: \"bar\" }));\n *\n * return new Response(`Result: ${JSON.stringify(foo)}`);\n * }),\n * },\n * });\n * ```\n *\n * You can also configure a custom redirect URL and create a proxy endpoint:\n *\n * @example\n * ```ts\n * import { Inngest } from \"inngest\";\n * import { endpointAdapter } from \"inngest/edge\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * endpointAdapter: endpointAdapter.withOptions({\n * asyncRedirectUrl: \"/api/inngest/poll\",\n * }),\n * });\n *\n * // Your durable endpoint\n * export const GET = inngest.endpoint(async (req) => {\n * const result = await step.run(\"work\", () => \"done\");\n * return new Response(result);\n * });\n *\n * // Proxy endpoint at /api/inngest/poll - handles CORS and decryption\n * export const GET = inngest.endpointProxy();\n * ```\n */\nexport const endpointAdapter = InngestEndpointAdapter.create((options) => {\n return commHandler(options, options).createSyncHandler();\n}, createDurableEndpointProxyHandler);\n"],"mappings":";;;;;;;;;AAgCA,MAAaA,gBAAwC;AAIrD,MAAM,eACJ,SACA,gBACG;AAgCH,QA/BgB,IAAIC,8CAAmB;EACrC;EACA,GAAG;EACH;EACA,UAAU,QAAiB;AACzB,UAAO;IACL,YAAY,IAAI,MAAM;IACtB,UAAU,QAAgB,IAAI,QAAQ,IAAI,IAAI;IAC9C,cAAc,IAAI;IAClB,WAAW,IAAI,IAAI,IAAI,KAAK,WAAW,IAAI,QAAQ,IAAI,OAAO,IAAI,KAAK;IACvE,oBAAoB,EAAE,MAAM,QAAQ,cAAc;AAChD,YAAO,IAAI,SAAS,MAAM;MAAE;MAAQ;MAAS,CAAC;;IAEhD,mCAAmC,OAAO,SAAS;KACjD,MAAM,MAAM;KAEZ,MAAMC,UAAkC,EAAE;AAC1C,SAAI,QAAQ,SAAS,GAAG,MAAM;AAC5B,cAAQ,KAAK;OACb;AAEF,YAAO;MACI;MACT,QAAQ,IAAI;MACZ,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM;MAC/B;;IAEJ;;EAEJ,CAAC;;;;;;;;;;;;;;;;;;;;AAwBJ,MAAa,SAAS,YAA8C;AAClE,QAAO,YAAY,QAAQ,CAAC,eAAe;;;;;;;;;AAU7C,MAAM,qCACJ,YACgB;AAChB,QAAO,OAAO,QAAoC;EAChD,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI;EAE5B,MAAM,SAAS,MAAMC,sEACnB,QAAQ,QACR;GACE,OAAO,IAAI,aAAa,IAAI,QAAQ;GACpC,OAAO,IAAI,aAAa,IAAI,QAAQ;GACpC,QAAQ,IAAI;GACb,CACF;AAED,SAAO,IAAI,SAAS,OAAO,MAAM;GAC/B,QAAQ,OAAO;GACf,SAAS,OAAO;GACjB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDN,MAAa,kBAAkBC,sDAAuB,QAAQ,YAAY;AACxE,QAAO,YAAY,SAAS,QAAQ,CAAC,mBAAmB;GACvD,kCAAkC"}