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.
99 lines (97 loc) • 5.4 kB
text/typescript
import { internalEvents } from "../helpers/consts.cjs";
import { Marker, markerKey } from "../helpers/marker.cjs";
import { Middleware } from "./middleware/middleware.cjs";
import { createStepTools } from "./InngestStepTools.cjs";
import { InngestFunction } from "./InngestFunction.cjs";
import { ApplyAllMiddlewareCtxExtensions, ApplyAllMiddlewareStepExtensions, BaseContext, FunctionConfig, Handler } from "../types.cjs";
import { ClientOptionsFromInngest, Inngest, builtInMiddleware } from "./Inngest.cjs";
import { StandardSchemaV1 } from "@standard-schema/spec";
//#region src/components/DeferredFunction.d.ts
/**
* EXPERIMENTAL: This API is not yet stable and may change in the future without
* a major version bump.
*
* A defer (companion) function created via `createDefer(...)`. Real
* `InngestFunction` at runtime, but with the trigger pinned to
* `inngest/deferred.schedule` (see `getConfigTriggers`), `triggers` and
* `onFailure` disallowed, and the schema carried as a typed instance
* property so callers of `defer(id, { function, data })` can extract it.
*
* Identify a defer function at runtime via `isDeferredFunction(value)` from
* `helpers/marker.ts`. Prefer that over `instanceof`, which fails across
* duplicate SDK copies in the same process.
*
* @public
*/
declare class DeferredFunction<TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined = undefined> extends InngestFunction<InngestFunction.Options<[], never>, Handler.Any, never, Inngest.Any, []> {
readonly schema: TSchema;
readonly [markerKey]: Marker;
constructor(client: Inngest.Any, opts: DeferredFunction.Options, handler: Handler.Any, schema: TSchema);
protected getConfigTriggers(fnId: string): FunctionConfig["triggers"];
}
/**
* @public
*/
declare namespace DeferredFunction {
/**
* Matches any `DeferredFunction` regardless of its schema. Use as the
* constraint for the `function` argument of `defer()`.
*/
type Any = DeferredFunction<StandardSchemaV1<any> | undefined>;
/**
* The user-facing options accepted by `createDefer(client, opts, handler)`.
* Mirrors `InngestFunction.Options` minus `triggers` (implicit), `onFailure`
* (not yet supported), and `batchEvents` (each `defer(...)` is its own run).
*/
type Options = Omit<InngestFunction.Options<[], never>, "triggers" | "onFailure" | "batchEvents">;
}
/**
* The `event` shape a defer handler receives. With a schema, `data`
* narrows to its inferred type; without one, it falls back to
* `Record<string, any>`.
*/
type DeferEvent<TSchema> = {
name: internalEvents.DeferredSchedule;
data: TSchema extends StandardSchemaV1<infer D extends Record<string, unknown>> ? D : Record<string, any>;
};
/**
* Base ctx shape for a defer handler: the standard function context
* (`runId`, `attempt`, `group`, `step` with middleware step extensions)
* with `event`/`events` pinned to `inngest/deferred.schedule` and the
* schema-typed payload.
*/
type BaseDeferCtx<TClient extends Inngest.Any, TFnMiddleware extends Middleware.Class[] | undefined, TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined> = Omit<BaseContext<TClient>, "event" | "events" | "step"> & {
event: DeferEvent<TSchema>;
events: [DeferEvent<TSchema>];
step: ReturnType<typeof createStepTools<TClient, TFnMiddleware>> & ApplyAllMiddlewareStepExtensions<ClientOptionsFromInngest<TClient>["middleware"]> & ApplyAllMiddlewareStepExtensions<TFnMiddleware>;
};
/**
* Input type for `createDefer`. Same shape as `DeferredFunction.Options`
* plus `schema` (the StandardSchema describing `event.data` that flows
* to caller `defer(id, { function, data })` call sites) and `middleware`.
*/
type CreateDeferInput<TFnMiddleware extends Middleware.Class[] | undefined, TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined> = DeferredFunction.Options & {
schema?: TSchema;
middleware?: TFnMiddleware;
};
/**
* EXPERIMENTAL: This API is not yet stable and may change in the future without
* a major version bump.
*
* Create a typed defer function. One `createDefer` call = one Inngest
* function. Returns a `DeferredFunction<TSchema>` so callers of `defer(id,
* { function, data })` get the data type inferred from the schema.
*
* Mirrors `inngest.createFunction(opts, handler)`, with three differences:
* the client is the first positional arg, `triggers` is not accepted (the
* SDK emits an implicit `inngest/deferred.schedule` trigger), and `schema`
* describes the payload that callers will send via `defer(id, { function,
* data })`.
*
* Pass the result to `serve()` alongside regular functions so the SDK
* registers it.
*/
declare function createDefer<TClient extends Inngest.Any, TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined = undefined, const TFnMiddleware extends Middleware.Class[] | undefined = undefined, THandler extends Handler.Any = (ctx: BaseDeferCtx<TClient, TFnMiddleware, TSchema> & ApplyAllMiddlewareCtxExtensions<[...ReturnType<typeof builtInMiddleware>]> & ApplyAllMiddlewareCtxExtensions<ClientOptionsFromInngest<TClient>["middleware"]> & ApplyAllMiddlewareCtxExtensions<TFnMiddleware>) => unknown>(client: TClient, options: CreateDeferInput<TFnMiddleware, TSchema>, handler: THandler): DeferredFunction<TSchema>;
//#endregion
export { DeferredFunction, createDefer };
//# sourceMappingURL=DeferredFunction.d.cts.map