import type { StandardSchemaV1 } from '#compiled/@standard-schema/spec/index.js'; import type { Hook as HookEntity } from '#compiled/@workflow/world/index.js'; import type { Hook, HookOptions } from './create-hook.js'; /** * A typed hook interface for type-safe hook creation and resumption. */ export interface TypedHook { /** * Creates a new hook with the defined output type. * * Note: This method is not available in runtime bundles. Use it from workflow contexts only. * * @param options - Optional hook configuration * @returns A Hook that resolves to the defined output type */ create(options?: HookOptions): Hook; /** * Resumes a hook by sending a payload with the defined input type. * This is a type-safe wrapper around the `resumeHook` runtime function. * * @param token - The unique token identifying the hook * @param payload - The payload to send; if a `schema` is configured it is validated/transformed before resuming * @returns Promise resolving to the hook entity * @throws Error if the hook is not found or if there's an error during the process */ resume(token: string, payload: TInput): Promise; } export declare namespace TypedHook { /** * Extracts the input type from a {@link TypedHook} */ type Input> = T extends TypedHook ? I : never; } /** * Defines a typed hook for type-safe hook creation and resumption. * * This helper provides type safety by allowing you to define the input and output types * for the hook's payload, with optional validation and transformation via a schema. * * @param schema - Schema used to validate and transform the input payload before resuming * @returns An object with `create` and `resume` functions pre-typed with the input and output types * * @example * * ```ts * // Define a hook with a specific payload type * const approvalHook = defineHook<{ approved: boolean; comment: string }>(); * * // In a workflow * export async function workflowWithApproval() { * "use workflow"; * * const hook = approvalHook.create(); * const result = await hook; // Fully typed as { approved: boolean; comment: string; } * } * * // In an API route * export async function POST(request: Request) { * const { token, approved, comment } = await request.json(); * await approvalHook.resume(token, { approved, comment }); // Input type * return Response.json({ success: true }); * } * ``` */ export declare function defineHook({ schema, }?: { schema?: StandardSchemaV1; }): TypedHook; //# sourceMappingURL=define-hook.d.ts.map