UNPKG

@azure-utils/durable-functions

Version:
222 lines (220 loc) 9.65 kB
import { requestAzureFunctionsDurableTaskWebhookOrThrow } from "./durable-webhook-CL8hkdP6.mjs"; //#region src/durable-orchestrations-api.ts /** * An object that contains all the functions for interacting with Azure Functions Durable Orchestrations. * * @throws Each method can throw an error if the operation fails. */ const durableOrchestrations = { start: startAzureFunctionsOrchestrationOrThrow, list: listAzureFunctionsOrchestrationInstancesOrThrow, get: getAzureFunctionsOrchestrationInstanceOrThrow, purge: purgeAzureFunctionsOrchestrationInstanceOrThrow, purgeAll: purgeAzureFunctionsOrchestrationInstancesOrThrow, raiseEvent: raiseAzureFunctionsOrchestrationInstanceEventOrThrow, terminate: terminateAzureFunctionsOrchestrationInstanceOrThrow, suspend: suspendAzureFunctionsOrchestrationInstanceOrThrow, resume: resumeAzureFunctionsOrchestrationInstanceOrThrow, rewind: rewindAzureFunctionsOrchestrationInstanceOrThrow }; /** * Starts executing a new instance of the specified orchestrator function. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#start-orchestration * * The HTTP response is intended to be compatible with the Polling Consumer Pattern. It also includes the following notable response headers: * Location (The URL of the status endpoint) and Retry-After (The number of seconds to wait before polling again). */ async function startAzureFunctionsOrchestrationOrThrow(options, requestOptions) { const { functionName, instanceId = "", input } = options; if (!functionName) throw new Error("Orchestration function name is required."); if (!input) throw new Error("Orchestration input object is required."); const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(`orchestrators/${functionName}/${instanceId}`, { ...requestOptions, body: JSON.stringify(input), method: "POST" }); return { result: await response.json(), status: response.status, headers: response.headers }; } /** * List Azure Functions Orchestration Instances. They can be filtered by * created time, runtime status, instance ID prefix, and other parameters. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#get-all-instances-status */ async function listAzureFunctionsOrchestrationInstancesOrThrow(options, requestOptions) { const { createdTimeFrom, createdTimeTo, instanceIdPrefix, runtimeStatuses, showInput, showHistoryOutput, top, continuationToken } = options; const searchParams = new URLSearchParams(); if (createdTimeFrom) searchParams.set("createdTimeFrom", createdTimeFrom.toISOString()); if (createdTimeTo) searchParams.set("createdTimeTo", createdTimeTo.toISOString()); if (runtimeStatuses) searchParams.set("runtimeStatus", runtimeStatuses.join(",")); if (instanceIdPrefix) searchParams.set("instanceIdPrefix", instanceIdPrefix); searchParams.set("showInput", showInput === false ? "false" : "true"); searchParams.set("showHistoryOutput", showHistoryOutput === true ? "true" : "false"); searchParams.set("showOutput", "false"); if (top) searchParams.set("top", top.toString()); const continuationTokenHeader = "x-ms-continuation-token"; const headers = new Headers(); if (continuationToken) headers.set(continuationTokenHeader, continuationToken); const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances`, { ...requestOptions, searchParams, headers }); const instances = await response.json(); return { instances, top: top ?? null, continuationToken: response.headers.get(continuationTokenHeader) }; } /** * Gets the status of a specified orchestration instance. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#get-instance-status */ async function getAzureFunctionsOrchestrationInstanceOrThrow(options, requestOptions) { const { instanceId, showHistory, showHistoryOutput, showInput, returnInternalServerErrorOnFailure } = options; if (!instanceId) throw new Error("Orchestration task instanceId is required."); const searchParams = new URLSearchParams(); if (showHistory) searchParams.set("showHistory", "true"); if (showHistoryOutput) searchParams.set("showHistoryOutput", "true"); if (showInput === false) searchParams.set("showInput", "false"); if (returnInternalServerErrorOnFailure) searchParams.set("returnInternalServerErrorOnFailure", "true"); const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances/${instanceId}`, { ...requestOptions, searchParams }); return { instance: await response.json(), status: response.status, headers: response.headers }; } /** * Deletes the history and related artifacts for a specified orchestration instance. */ async function purgeAzureFunctionsOrchestrationInstanceOrThrow(options, requestOptions) { const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances/${options.instanceId}`, { ...requestOptions, method: "DELETE" }); const data = await response.json(); return data.instancesDeleted > 0; } /** * Delete the history and related artifacts for multiple instances within a task hub * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#purge-multiple-instance-histories * * @returns The number of instances deleted. */ async function purgeAzureFunctionsOrchestrationInstancesOrThrow(options, requestOptions) { const { createdTimeFrom, createdTimeTo, runtimeStatuses } = options; const searchParams = new URLSearchParams(); searchParams.set("createdTimeFrom", createdTimeFrom.toISOString()); if (createdTimeTo) searchParams.set("createdTimeTo", createdTimeTo.toISOString()); if (runtimeStatuses) searchParams.set("runtimeStatus", runtimeStatuses.join(",")); const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances`, { ...requestOptions, method: "DELETE", searchParams }); const data = await response.json(); return data.instancesDeleted; } /** * Sends an event notification message to a running orchestration instance. * Does not return a response. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#raise-event */ async function raiseAzureFunctionsOrchestrationInstanceEventOrThrow(options, requestOptions) { const { instanceId, eventName, eventBody = {} } = options; await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances/${instanceId}/raiseEvent/${eventName}`, { ...requestOptions, method: "POST", body: JSON.stringify(eventBody) }); return; } /** * Terminates a running orchestration instance. * Does not return a response. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#terminate-instance */ async function terminateAzureFunctionsOrchestrationInstanceOrThrow(options, requestOptions) { const { instanceId, reason } = options; await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances/${instanceId}/terminate`, { ...requestOptions, method: "POST", searchParams: { reason } }); return; } /** * Suspend/pause Azure Functions Orchestration Instance . * Does not return a response. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#suspend-instance */ async function suspendAzureFunctionsOrchestrationInstanceOrThrow(options, requestOptions) { const { instanceId, reason } = options; await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances/${instanceId}/suspend`, { ...requestOptions, method: "POST", searchParams: { reason } }); return; } /** * Resume Azure Functions Orchestration Instance. * Does not return a response. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#resume-instance */ async function resumeAzureFunctionsOrchestrationInstanceOrThrow(options, requestOptions) { const { instanceId, reason } = options; await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances/${instanceId}/resume`, { ...requestOptions, method: "POST", searchParams: { reason } }); return; } /** * Restores a failed orchestration instance into a running state by replaying the most recent failed operations. * Does not return a response. * * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#rewind-instance-preview */ async function rewindAzureFunctionsOrchestrationInstanceOrThrow(options, requestOptions) { const { instanceId, reason } = options; await requestAzureFunctionsDurableTaskWebhookOrThrow(`instances/${instanceId}/resume`, { ...requestOptions, method: "POST", searchParams: { reason } }); return; } /** * The runtime status of an orchestration instance. */ const AzureFunctionsOrchestrationRuntimeStatuses = { Running: "Running", Completed: "Completed", ContinuedAsNew: "ContinuedAsNew", Failed: "Failed", Canceled: "Canceled", Terminated: "Terminated", Pending: "Pending", Suspended: "Suspended" }; //#endregion export { AzureFunctionsOrchestrationRuntimeStatuses, durableOrchestrations, getAzureFunctionsOrchestrationInstanceOrThrow, listAzureFunctionsOrchestrationInstancesOrThrow, purgeAzureFunctionsOrchestrationInstanceOrThrow, purgeAzureFunctionsOrchestrationInstancesOrThrow, raiseAzureFunctionsOrchestrationInstanceEventOrThrow, resumeAzureFunctionsOrchestrationInstanceOrThrow, rewindAzureFunctionsOrchestrationInstanceOrThrow, startAzureFunctionsOrchestrationOrThrow, suspendAzureFunctionsOrchestrationInstanceOrThrow, terminateAzureFunctionsOrchestrationInstanceOrThrow }; //# sourceMappingURL=durable-orchestrations-api-DjADye2N.mjs.map