import { Link } from "../common"; /** * Contextual information provided to every operation handler method. * * @experimental */ export interface OperationContext { /** * Name of the service that contains the operation. */ readonly service: string; /** * Name of the operation. */ readonly operation: string; /** * Request header fields. */ readonly headers: Record; /** * An AbortSignal that is signaled when the current request is canceled, e.g. because the request * timed out or the client disconnected. * * The framework will cancel the abort controller with an unspecified error type. The handler * must rethrow the error object to confirm cancelation. The handler may ignore cancelation * and return a result anyway, but there is no guarantee that the client will still be waiting * for the result of that request. * * Note that cancelation of the current _request_ is not the same thing - and does not relate * with - cancelation of the _operation_ itself, which is notified by calling the * {@link OperationHandler.cancel} method. */ readonly abortSignal: AbortSignal; /** * Get the deadline for the operation handler method. * * Note that this is the time by which the current _request_ should complete, * not the _operation_'s deadline. */ readonly requestDeadline?: Date; } /** * Context for the {@link OperationHandler.start} method. * * @experimental */ export interface StartOperationContext extends OperationContext { /** * Callbacks are used to deliver completion of async operations. * * A callback URL may optionally be provided by the client and should be called by this handler * upon completion if the started operation is async. */ readonly callbackUrl?: string; /** * Optional header fields set by a client that are required to be attached to the callback request * when an asynchronous operation completes. */ readonly callbackHeaders?: Record; /** * Request ID that may be used by the server handler to dedupe a start request. * By default a v4 UUID will be generated by the client. */ readonly requestId: string; /** * Links received in the request. * * This list is automatically populated when handling a start request. Handlers may use these * links, for example to add information about the caller to a resource associated with the * operation execution. */ readonly inboundLinks: Link[]; /** * Links to be returned by the handler. * * This list is initially empty. Handlers may add to this list, for example links describing * resources associated with the operation execution that may be of use to the caller. */ readonly outboundLinks: Link[]; } /** * Context for the {@link OperationHandler.cancel} method. * * @experimental */ export type CancelOperationContext = OperationContext;