samples-ts/functions/httpSyncStart.ts (45 lines of code) (raw):

import { app, HttpHandler, HttpRequest, HttpResponse, HttpResponseInit, InvocationContext, } from "@azure/functions"; import * as df from "durable-functions"; const timeout = "timeout"; const retryInterval = "retryInterval"; const httpSyncStart: HttpHandler = async function ( request: HttpRequest, context: InvocationContext ): Promise<HttpResponse> { const client = df.getClient(context); const body: unknown = await request.json(); const instanceId: string = await client.startNew(request.params.orchestratorName, { input: body, }); context.log(`Started orchestration with ID = '${instanceId}'.`); const timeoutInMilliseconds: number = getTimeInMilliseconds(request, timeout) || 30000; const retryIntervalInMilliseconds: number = getTimeInMilliseconds(request, retryInterval) || 1000; const response = await client.waitForCompletionOrCreateCheckStatusResponse( request, instanceId, { timeoutInMilliseconds, retryIntervalInMilliseconds, } ); return response; }; app.http("httpSyncStart", { methods: ["POST"], route: "orchestrators/wait/{orchestratorName}", authLevel: "anonymous", extraInputs: [df.input.durableClient()], handler: httpSyncStart, }); function getTimeInMilliseconds(req: HttpRequest, queryParameterName: string): number { // parameters are passed in as seconds const queryValue: number = parseInt(req.query.get(queryParameterName)); // return as milliseconds return queryValue ? queryValue * 1000 : undefined; }