@azure-utils/durable-functions
Version:
Utilities for Azure Durable functions.
222 lines (220 loc) • 9.65 kB
JavaScript
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