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.95 kB
Source Map (JSON)
{"version":3,"file":"utils.cjs","names":["chain: () => Promise<SendEventBaseOutput>","chain: () => Promise<Middleware.Response>","StepOpCode","isRecord"],"sources":["../../../src/components/middleware/utils.ts"],"sourcesContent":["import { isRecord } from \"../../helpers/types\";\nimport type { Logger } from \"../../middleware/logger\";\nimport { type SendEventBaseOutput, StepOpCode } from \"../../types\";\nimport type { InngestFunction } from \"../InngestFunction\";\nimport type { Middleware } from \"./middleware\";\nimport type { ExtractLiteralStrings } from \"./types\";\n\nexport function isTimeStrInput(\n value: unknown,\n): value is string | number | Date {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n value instanceof Date\n );\n}\n\n/**\n * Build an onion-style middleware chain for `wrapSendEvent`.\n *\n * Same pattern as `buildWrapRequestChain` but wraps the outgoing HTTP call\n * in `client.send()` instead of the incoming execution request.\n */\nexport function buildWrapSendEventChain(\n middleware: Middleware.BaseMiddleware[],\n handler: () => Promise<SendEventBaseOutput>,\n payloads: Middleware.WrapSendEventArgs[\"events\"],\n fn: InngestFunction.Any | null,\n): () => Promise<SendEventBaseOutput> {\n let chain: () => Promise<SendEventBaseOutput> = handler;\n for (let i = middleware.length - 1; i >= 0; i--) {\n const mw = middleware[i];\n if (mw?.wrapSendEvent) {\n const next = chain;\n chain = () => mw.wrapSendEvent!({ next, events: payloads, fn });\n }\n }\n return chain;\n}\n\n/**\n * Build an onion-style middleware chain for `wrapRequest`.\n *\n * Iterates in reverse order (so first middleware is outermost)\n * and returns a zero-arg function that kicks off the chain.\n */\nexport function buildWrapRequestChain({\n fn,\n handler,\n middleware,\n requestArgs,\n requestInfo,\n runId,\n}: {\n fn: InngestFunction.Any | null;\n handler: () => Promise<Middleware.Response>;\n middleware: Middleware.BaseMiddleware[];\n requestArgs: readonly unknown[];\n requestInfo: Middleware.Request;\n runId: string;\n}): () => Promise<Middleware.Response> {\n let chain: () => Promise<Middleware.Response> = handler;\n for (let i = middleware.length - 1; i >= 0; i--) {\n const mw = middleware[i];\n if (mw?.wrapRequest) {\n const next = chain;\n chain = () =>\n mw.wrapRequest!({ next, requestArgs, requestInfo, runId, fn });\n }\n }\n return chain;\n}\n\n// Replace the \"and can be any string\" union member with \"unknown\". This\n// improves static type safety within `stepTypeFromOpCode`, since it ensures we\n// aren't returning any unknown StepType besides \"unknown\". We should never\n// actually return \"unknown\" at runtime, but we need a default\ntype StepTypeFromOpCodeReturn =\n | ExtractLiteralStrings<Middleware.StepType>\n | \"unknown\";\n\n/**\n * Convert an opcode (from the op) to a step type.\n */\nexport function stepTypeFromOpCode(\n op: StepOpCode,\n opts: Record<string, unknown> | undefined,\n logger: Logger,\n): StepTypeFromOpCodeReturn {\n if (op === StepOpCode.AiGateway) {\n if (opts?.type === \"step.ai.infer\") {\n return \"ai.infer\";\n }\n if (opts?.type === \"step.ai.wrap\") {\n return \"ai.wrap\";\n }\n } else if (op === StepOpCode.Gateway) {\n return \"fetch\";\n } else if (op === StepOpCode.InvokeFunction) {\n return \"invoke\";\n } else if (op === StepOpCode.StepPlanned) {\n if (opts?.type === undefined) {\n return \"run\";\n }\n if (opts?.type === \"step.sendEvent\") {\n return \"sendEvent\";\n }\n if (opts?.type === \"step.realtime.publish\") {\n return \"realtime.publish\";\n }\n if (opts?.type === \"group.experiment\") {\n return \"group.experiment\";\n }\n } else if (op === StepOpCode.Sleep) {\n return \"sleep\";\n } else if (op === StepOpCode.WaitForEvent) {\n return \"waitForEvent\";\n }\n\n logger.warn({ op, type: opts?.type }, \"Unknown step type\");\n return \"unknown\";\n}\n\n/**\n * Convert the opts object (from the op) to a step input array.\n *\n * Paired with `optsFromStepInput` which reverses this for step kinds that\n * wrap the entire opts as `[opts]`.\n */\nexport function stepInputFromOpts(\n stepType: Middleware.StepType,\n opts?: Record<string, unknown>,\n): unknown[] | undefined {\n if (stepType === \"invoke\" || stepType === \"waitForEvent\") {\n return [opts];\n }\n if (Array.isArray(opts?.input)) {\n return opts.input;\n }\n return undefined;\n}\n\n/**\n * Reverse of `stepInputFromOpts`: given middleware-transformed input, derive\n * the opts to use in the outgoing op.\n *\n * Returns undefined when the step kind doesn't derive opts from input.\n */\nexport function optsFromStepInput(\n stepType: Middleware.StepType,\n input: unknown[] | undefined,\n): Record<string, unknown> | undefined {\n if (input === undefined) {\n return undefined;\n }\n\n // Step types where stepInputFromOpts wraps the entire opts as [opts]\n if (stepType === \"invoke\" || stepType === \"waitForEvent\") {\n const opts = input[0];\n if (isRecord(opts)) {\n return opts;\n }\n }\n\n return undefined;\n}\n\n/**\n * An error that is thrown when a code path is unreachable. Should never be\n * thrown at runtime.\n */\nexport class UnreachableError extends Error {\n constructor(...args: Parameters<typeof Error>) {\n super(...args);\n this.name = this.constructor.name;\n }\n}\n"],"mappings":";;;;AAOA,SAAgB,eACd,OACiC;AACjC,QACE,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,iBAAiB;;;;;;;;AAUrB,SAAgB,wBACd,YACA,SACA,UACA,IACoC;CACpC,IAAIA,QAA4C;AAChD,MAAK,IAAI,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;EAC/C,MAAM,KAAK,WAAW;AACtB,MAAI,IAAI,eAAe;GACrB,MAAM,OAAO;AACb,iBAAc,GAAG,cAAe;IAAE;IAAM,QAAQ;IAAU;IAAI,CAAC;;;AAGnE,QAAO;;;;;;;;AAST,SAAgB,sBAAsB,EACpC,IACA,SACA,YACA,aACA,aACA,SAQqC;CACrC,IAAIC,QAA4C;AAChD,MAAK,IAAI,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;EAC/C,MAAM,KAAK,WAAW;AACtB,MAAI,IAAI,aAAa;GACnB,MAAM,OAAO;AACb,iBACE,GAAG,YAAa;IAAE;IAAM;IAAa;IAAa;IAAO;IAAI,CAAC;;;AAGpE,QAAO;;;;;AAcT,SAAgB,mBACd,IACA,MACA,QAC0B;AAC1B,KAAI,OAAOC,yBAAW,WAAW;AAC/B,MAAI,MAAM,SAAS,gBACjB,QAAO;AAET,MAAI,MAAM,SAAS,eACjB,QAAO;YAEA,OAAOA,yBAAW,QAC3B,QAAO;UACE,OAAOA,yBAAW,eAC3B,QAAO;UACE,OAAOA,yBAAW,aAAa;AACxC,MAAI,MAAM,SAAS,OACjB,QAAO;AAET,MAAI,MAAM,SAAS,iBACjB,QAAO;AAET,MAAI,MAAM,SAAS,wBACjB,QAAO;AAET,MAAI,MAAM,SAAS,mBACjB,QAAO;YAEA,OAAOA,yBAAW,MAC3B,QAAO;UACE,OAAOA,yBAAW,aAC3B,QAAO;AAGT,QAAO,KAAK;EAAE;EAAI,MAAM,MAAM;EAAM,EAAE,oBAAoB;AAC1D,QAAO;;;;;;;;AAST,SAAgB,kBACd,UACA,MACuB;AACvB,KAAI,aAAa,YAAY,aAAa,eACxC,QAAO,CAAC,KAAK;AAEf,KAAI,MAAM,QAAQ,MAAM,MAAM,CAC5B,QAAO,KAAK;;;;;;;;AAWhB,SAAgB,kBACd,UACA,OACqC;AACrC,KAAI,UAAU,OACZ;AAIF,KAAI,aAAa,YAAY,aAAa,gBAAgB;EACxD,MAAM,OAAO,MAAM;AACnB,MAAIC,yBAAS,KAAK,CAChB,QAAO;;;;;;;AAWb,IAAa,mBAAb,cAAsC,MAAM;CAC1C,YAAY,GAAG,MAAgC;AAC7C,QAAM,GAAG,KAAK;AACd,OAAK,OAAO,KAAK,YAAY"}