{"version":3,"file":"manager.cjs","names":["stepTypeFromOpCode","stepInputFromOpts","opName: string | undefined","isSleepInput","timeStr","optsFromStepInput","actualHandler: (() => Promise<unknown>) | undefined","result: Middleware.TransformFunctionInputArgs[\"steps\"]","result: Middleware.TransformFunctionInputArgs","chain: () => Promise<unknown>","result: Middleware.TransformStepInputArgs","UnreachableError"],"sources":["../../../src/components/middleware/manager.ts"],"sourcesContent":["import { timeStr } from \"../../helpers/strings.ts\";\nimport type { Logger } from \"../../middleware/logger.ts\";\nimport type { Context, StepOpCode } from \"../../types.ts\";\nimport type { MemoizedOp } from \"../execution/InngestExecution.ts\";\nimport type { InngestFunction } from \"../InngestFunction.ts\";\nimport type { Middleware } from \"./middleware.ts\";\nimport {\n  isSleepInput,\n  optsFromStepInput,\n  stepInputFromOpts,\n  stepTypeFromOpCode,\n  UnreachableError,\n} from \"./utils.ts\";\n\nexport interface StepInfoOptions {\n  hashedId: string;\n  userlandId: string;\n  displayName?: string;\n  memoized: boolean;\n  stepType: Middleware.StepType;\n  input?: unknown[];\n}\n\nexport interface ApplyToStepInput {\n  op: StepOpCode;\n  opts?: Record<string, unknown>;\n  hashedId: string;\n  userlandId: string;\n  displayName?: string;\n  memoized: boolean;\n}\n\nexport interface PreparedStep {\n  entryPoint: () => Promise<unknown>;\n\n  /**\n   * Only used for sleep steps. The sleep's wake-up time must be in the op name,\n   * and that may be changed by the `transformStepInput` hook. The user-facing\n   * name is actually the op's `displayName` field (yes, that's confusing).\n   */\n  opName?: string;\n\n  /**\n   * For step kinds where middleware input maps to the outgoing op's opts\n   * (e.g. invoke, waitForEvent). Derived by reversing `stepInputFromOpts`.\n   */\n  opOpts?: Record<string, unknown>;\n\n  setActualHandler: (handler: () => Promise<unknown>) => void;\n  stepInfo: Middleware.StepInfo;\n}\n\n/**\n * Manages middleware. Hides middleware complexity from elsewhere in the\n * codebase. Not for for public use.\n */\nexport class MiddlewareManager {\n  private readonly fnArg: Context.Any;\n  private readonly getStepState: () => Record<string, MemoizedOp>;\n\n  /**\n   * Whether any middleware defines `transformStepInput`. Used for perf\n   * optimization.\n   */\n  private readonly hasTransformStepInput: boolean;\n\n  /**\n   * Whether memoization has ended. Used for idempotency, since memoization must\n   * only call once per request.\n   */\n  private memoizationEnded = false;\n\n  private readonly fn: InngestFunction.Any;\n  private readonly middleware: Middleware.BaseMiddleware[];\n  private readonly internalLogger: Logger;\n\n  /**\n   * Infinite recursion guard for `wrapStep`. Prevents a middleware from\n   * wrapping steps it creates inside its own `wrapStep` via `ctx.step.run`.\n   */\n  private readonly activeWrapStep = new Set<Middleware.BaseMiddleware>();\n\n  constructor(\n    fnArg: Context.Any,\n    getStepState: () => Record<string, MemoizedOp>,\n    middleware: Middleware.BaseMiddleware[] = [],\n    fn: InngestFunction.Any,\n    logger: Logger,\n  ) {\n    this.fnArg = fnArg;\n    this.getStepState = getStepState;\n    this.middleware = middleware;\n    this.fn = fn;\n    this.internalLogger = logger;\n\n    this.hasTransformStepInput = middleware.some((mw) =>\n      Boolean(mw?.transformStepInput),\n    );\n  }\n\n  hasMiddleware(): boolean {\n    return this.middleware.length > 0;\n  }\n\n  /**\n   * Derives step-kind, extracts input, runs `transformStepInput` middleware,\n   * and creates a deferred handler entry point. Does NOT build the wrapStep\n   * chain — the caller should do that after any post-processing (e.g. ID\n   * collision resolution) so middleware sees final values.\n   */\n  async applyToStep(input: ApplyToStepInput): Promise<PreparedStep> {\n    const stepType = stepTypeFromOpCode(\n      input.op,\n      input.opts,\n      this.internalLogger,\n    );\n    const stepInput = stepInputFromOpts(stepType, input.opts);\n\n    const stepInfo = this.buildStepInfo({\n      hashedId: input.hashedId,\n      userlandId: input.userlandId,\n      displayName: input.displayName,\n      memoized: input.memoized,\n      stepType,\n      input: stepInput,\n    });\n\n    // Only run transformStepInput if at least one middleware defines it.  This\n    // avoids some allocations that are unnecessary when no middleware will read\n    // or mutate them.\n    if (this.hasTransformStepInput) {\n      const originalInput = stepInfo.input;\n      const transformed = await this.transformStepInput(stepInfo);\n      stepInfo.options = transformed.stepOptions;\n\n      // Preserve undefined if input wasn't changed from the initial empty array\n      if (originalInput === undefined && transformed.input.length === 0) {\n        stepInfo.input = undefined;\n      } else {\n        stepInfo.input = transformed.input;\n      }\n    }\n\n    // For sleep steps, if middleware transformed the input, re-derive the op\n    // name (which encodes the wake-up time). If there's no input, the matchOp\n    // already set the name directly.\n    let opName: string | undefined;\n    if (stepType === \"sleep\" && stepInfo.input !== undefined) {\n      if (!isSleepInput(stepInfo.input[0])) {\n        throw new Error(\n          \"Sleep time must be a string, number, Date, or Temporal.Duration\",\n        );\n      }\n      opName = timeStr(stepInfo.input[0]);\n    }\n\n    // Reverse the input→opts mapping for step kinds where the whole opts\n    // object was wrapped as input (e.g. invoke, waitForEvent).\n    const opOpts = optsFromStepInput(stepType, stepInfo.input);\n\n    // Deferred handler pattern — actual handler set later based on memoization\n    let actualHandler: (() => Promise<unknown>) | undefined;\n    const entryPoint = async () => {\n      if (!actualHandler) {\n        throw new Error(\"Handler not initialized\");\n      }\n      return actualHandler();\n    };\n    const setActualHandler = (handler: () => Promise<unknown>) => {\n      actualHandler = handler;\n    };\n\n    return {\n      entryPoint,\n      opName,\n      opOpts,\n      setActualHandler,\n      stepInfo,\n    };\n  }\n\n  private buildStepInfo(opts: StepInfoOptions): Middleware.StepInfo {\n    return {\n      hashedId: opts.hashedId,\n      input: opts.input,\n      memoized: opts.memoized,\n      options: {\n        id: opts.userlandId,\n        ...(opts.displayName !== undefined && { name: opts.displayName }),\n      },\n      stepType: opts.stepType,\n    };\n  }\n\n  private buildSteps(): Middleware.TransformFunctionInputArgs[\"steps\"] {\n    const result: Middleware.TransformFunctionInputArgs[\"steps\"] = {};\n    const stepState = this.getStepState();\n\n    for (const [id, op] of Object.entries(stepState)) {\n      if (op.error !== undefined) {\n        result[id] = {\n          type: \"error\" as const,\n          error: op.error,\n        };\n      } else if (op.input !== undefined) {\n        result[id] = {\n          type: \"input\" as const,\n          input: op.input,\n        };\n      } else {\n        result[id] = {\n          type: \"data\" as const,\n          data: op.data,\n        };\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Apply transformFunctionInput middleware in forward order.\n   * Each middleware builds on the previous result.\n   */\n  async transformFunctionInput(): Promise<Middleware.TransformFunctionInputArgs> {\n    let result: Middleware.TransformFunctionInputArgs = {\n      ctx: this.fnArg,\n      fn: this.fn,\n      steps: this.buildSteps(),\n    };\n\n    for (const mw of this.middleware) {\n      if (mw?.transformFunctionInput) {\n        result = await mw.transformFunctionInput(result);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Wrap a run handler with wrapFunctionHandler middlewares (reverse order for\n   * onion layering, same pattern as wrapStepHandler).\n   */\n  wrapRunHandler(handler: () => Promise<unknown>): () => Promise<unknown> {\n    let chain: () => Promise<unknown> = handler;\n    for (let i = this.middleware.length - 1; i >= 0; i--) {\n      const mw = this.middleware[i];\n      if (mw?.wrapFunctionHandler) {\n        const next = chain;\n        chain = () =>\n          mw.wrapFunctionHandler!({\n            ctx: this.fnArg,\n            fn: this.fn,\n            next,\n          });\n      }\n    }\n    return chain;\n  }\n\n  /**\n   * Apply transformStepInput middleware in forward order.\n   * Each middleware builds on the previous result.\n   */\n  private async transformStepInput(\n    stepInfo: Middleware.StepInfo,\n  ): Promise<Middleware.TransformStepInputArgs> {\n    let result: Middleware.TransformStepInputArgs = {\n      fn: this.fn,\n      stepInfo: {\n        hashedId: stepInfo.hashedId,\n        memoized: stepInfo.memoized,\n        stepType: stepInfo.stepType,\n      },\n      stepOptions: { ...stepInfo.options },\n      input: [...(stepInfo.input ?? [])],\n    };\n\n    for (const mw of this.middleware) {\n      if (mw?.transformStepInput) {\n        result = await mw.transformStepInput(result);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Wrap a step handler with wrapStep middlewares (reverse order for\n   * onion layering). Returns the wrapped handler.\n   */\n  buildWrapStepChain(\n    handler: () => Promise<unknown>,\n    stepInfo: Middleware.StepInfo,\n  ): () => Promise<unknown> {\n    let chain: () => Promise<unknown> = handler;\n    for (let i = this.middleware.length - 1; i >= 0; i--) {\n      const mw = this.middleware[i];\n      if (mw?.wrapStep) {\n        const next = chain;\n        chain = () => {\n          if (!mw.wrapStep) {\n            throw new UnreachableError(\"wrapStep is undefined\");\n          }\n\n          // Infinite recursion guard: skip if this middleware is already\n          // executing\n          if (this.activeWrapStep.has(mw)) {\n            return next();\n          }\n\n          this.activeWrapStep.add(mw);\n\n          // Remove from active while inside next() so only the middleware\n          // that directly calls ctx.step.run() is guarded.\n          const guardedNext = () => {\n            this.activeWrapStep.delete(mw);\n            return next().finally(() => {\n              this.activeWrapStep.add(mw);\n            });\n          };\n\n          return mw.wrapStep!({\n            ctx: this.fnArg,\n            fn: this.fn,\n            next: guardedNext,\n            stepInfo,\n          }).finally(() => {\n            this.activeWrapStep.delete(mw);\n          });\n        };\n      }\n    }\n    return chain;\n  }\n\n  async onStepStart(stepInfo: Middleware.StepInfo): Promise<void> {\n    for (const mw of this.middleware) {\n      if (mw?.onStepStart) {\n        try {\n          await mw.onStepStart({\n            ctx: this.fnArg,\n            fn: this.fn,\n            stepInfo,\n          });\n        } catch (err) {\n          this.internalLogger.error(\n            {\n              err,\n              hook: \"onStepStart\",\n              mw: mw.id,\n            },\n            \"middleware error\",\n          );\n        }\n      }\n    }\n  }\n\n  async onStepComplete(\n    stepInfo: Middleware.StepInfo,\n    output: unknown,\n  ): Promise<void> {\n    for (const mw of this.middleware) {\n      if (mw?.onStepComplete) {\n        try {\n          await mw.onStepComplete({\n            ctx: this.fnArg,\n            fn: this.fn,\n            output,\n            stepInfo,\n          });\n        } catch (err) {\n          this.internalLogger.error(\n            {\n              err,\n              hook: \"onStepComplete\",\n              mw: mw.id,\n            },\n            \"middleware error\",\n          );\n        }\n      }\n    }\n  }\n\n  /**\n   * Build a wrapStepHandler chain around the actual step handler.\n   * Called once per `step.run` attempt (not for memoized steps).\n   * Simpler than buildWrapStepChain — no recursion guard needed.\n   */\n  buildWrapStepHandlerChain(\n    handler: () => Promise<unknown>,\n    stepInfo: Middleware.StepInfo,\n  ): () => Promise<unknown> {\n    let chain: () => Promise<unknown> = handler;\n    for (let i = this.middleware.length - 1; i >= 0; i--) {\n      const mw = this.middleware[i];\n      if (mw?.wrapStepHandler) {\n        const next = chain;\n        chain = () =>\n          mw.wrapStepHandler!({\n            ctx: this.fnArg,\n            fn: this.fn,\n            next,\n            stepInfo,\n          });\n      }\n    }\n    return chain;\n  }\n\n  async onStepError(\n    stepInfo: Middleware.StepInfo,\n    error: Error,\n    isFinalAttempt: boolean,\n  ): Promise<void> {\n    for (const mw of this.middleware) {\n      if (mw?.onStepError) {\n        try {\n          await mw.onStepError({\n            ctx: this.fnArg,\n            error,\n            fn: this.fn,\n            isFinalAttempt,\n            stepInfo,\n          });\n        } catch (err) {\n          this.internalLogger.error(\n            {\n              err,\n              hook: \"onStepError\",\n              mw: mw.id,\n            },\n            \"middleware error\",\n          );\n        }\n      }\n    }\n  }\n\n  /**\n   * Idempotent: safe to call from every code path that might end memoization.\n   */\n  async onMemoizationEnd(): Promise<void> {\n    if (this.memoizationEnded) {\n      return;\n    }\n    this.memoizationEnded = true;\n\n    for (const mw of this.middleware) {\n      if (mw?.onMemoizationEnd) {\n        try {\n          await mw.onMemoizationEnd({\n            ctx: this.fnArg,\n            fn: this.fn,\n          });\n        } catch (err) {\n          this.internalLogger.error(\n            {\n              err,\n              hook: \"onMemoizationEnd\",\n              mw: mw.id,\n            },\n            \"middleware error\",\n          );\n        }\n      }\n    }\n  }\n\n  async onRunStart(): Promise<void> {\n    for (const mw of this.middleware) {\n      if (mw?.onRunStart) {\n        try {\n          await mw.onRunStart({\n            ctx: this.fnArg,\n            fn: this.fn,\n          });\n        } catch (err) {\n          this.internalLogger.error(\n            {\n              err,\n              hook: \"onRunStart\",\n              mw: mw.id,\n            },\n            \"middleware error\",\n          );\n        }\n      }\n    }\n  }\n\n  async onRunComplete(output: unknown): Promise<void> {\n    for (const mw of this.middleware) {\n      if (mw?.onRunComplete) {\n        try {\n          await mw.onRunComplete({\n            ctx: this.fnArg,\n            fn: this.fn,\n            output,\n          });\n        } catch (err) {\n          this.internalLogger.error(\n            {\n              err,\n              hook: \"onRunComplete\",\n              mw: mw.id,\n            },\n            \"middleware error\",\n          );\n        }\n      }\n    }\n  }\n\n  async onRunError(error: Error, isFinalAttempt: boolean): Promise<void> {\n    for (const mw of this.middleware) {\n      if (mw?.onRunError) {\n        try {\n          await mw.onRunError({\n            ctx: this.fnArg,\n            error,\n            fn: this.fn,\n            isFinalAttempt,\n          });\n        } catch (err) {\n          this.internalLogger.error(\n            {\n              err,\n              hook: \"onRunError\",\n              mw: mw.id,\n            },\n            \"middleware error\",\n          );\n        }\n      }\n    }\n  }\n}\n"],"mappings":"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"}