UNPKG

workflow

Version:

Workflow DevKit - Build durable, resilient, and observable workflows

163 lines (122 loc) 3.98 kB
--- title: resumeHook description: Resume a paused workflow by sending a payload to a hook token. type: reference summary: Use resumeHook to send a payload to a hook token and resume a paused workflow. prerequisites: - /docs/foundations/hooks related: - /docs/api-reference/workflow-api/resume-webhook --- Resumes a workflow run by sending a payload to a hook identified by its token. It creates a `hook_received` event and re-triggers the workflow to continue execution. <Callout type="warn"> `resumeHook` is a runtime function that must be called from outside a workflow function. </Callout> ```typescript lineNumbers import { resumeHook } from "workflow/api"; export async function POST(request: Request) { const { token, data } = await request.json(); try { const result = await resumeHook(token, data); // [!code highlight] return Response.json({ runId: result.runId }); } catch (error) { return new Response("Hook not found", { status: 404 }); } } ``` ## API Signature ### Parameters <TSDoc definition={` import { resumeHook } from "workflow/api"; export default resumeHook;`} showSections={["parameters"]} /> ### Returns Returns a `Promise<Hook>` that resolves to: <TSDoc definition={` import type { Hook } from "@workflow/world"; export default Hook;`} showSections={["returns"]} /> ## Examples ### Basic API Route Using `resumeHook` in a basic API route to resume a hook: ```typescript lineNumbers import { resumeHook } from "workflow/api"; export async function POST(request: Request) { const { token, data } = await request.json(); try { const result = await resumeHook(token, data); // [!code highlight] return Response.json({ success: true, runId: result.runId }); } catch (error) { return new Response("Hook not found", { status: 404 }); } } ``` ### With Type Safety Defining a payload type and using `resumeHook` to resume a hook with type safety: ```typescript lineNumbers import { resumeHook } from "workflow/api"; type ApprovalPayload = { approved: boolean; comment: string; }; export async function POST(request: Request) { const { token, approved, comment } = await request.json(); try { const result = await resumeHook<ApprovalPayload>(token, { // [!code highlight] approved, // [!code highlight] comment, // [!code highlight] }); // [!code highlight] return Response.json({ runId: result.runId }); } catch (error) { return Response.json({ error: "Invalid token" }, { status: 404 }); } } ``` ### Server Action (Next.js) Using `resumeHook` in Next.js server actions to resume a hook: ```typescript lineNumbers "use server"; import { resumeHook } from "workflow/api"; export async function approveRequest(token: string, approved: boolean) { try { const result = await resumeHook(token, { approved }); return result.runId; } catch (error) { throw new Error("Invalid approval token"); } } ``` ### Webhook Handler Using `resumeHook` in a generic webhook handler to resume a hook: ```typescript lineNumbers import { resumeHook } from "workflow/api"; // Generic webhook handler that forwards data to a hook export async function POST(request: Request) { const url = new URL(request.url); const token = url.searchParams.get("token"); if (!token) { return Response.json({ error: "Missing token" }, { status: 400 }); } try { const body = await request.json(); const result = await resumeHook(token, body); return Response.json({ success: true, runId: result.runId }); } catch (error) { return Response.json({ error: "Hook not found" }, { status: 404 }); } } ``` ## Related Functions - [`getHookByToken()`](/docs/api-reference/workflow-api/get-hook-by-token) - Get hook details before resuming. - [`createHook()`](/docs/api-reference/workflow/create-hook) - Create a hook in a workflow. - [`defineHook()`](/docs/api-reference/workflow/define-hook) - Type-safe hook helper.