@temporalio/client
Version:
Temporal.io SDK Client sub-package
251 lines (224 loc) • 7.85 kB
text/typescript
/**
* Definitions for Connection interceptors.
*
* @module
*/
import { Headers, Next } from '@temporalio/common';
import { temporal } from '@temporalio/proto';
import { CompiledScheduleOptions } from './schedule-types';
import {
DescribeWorkflowExecutionResponse,
RequestCancelWorkflowExecutionResponse,
TerminateWorkflowExecutionResponse,
WorkflowExecution,
} from './types';
import { CompiledWorkflowOptions, WorkflowUpdateOptions } from './workflow-options';
export { Headers, Next };
/** Input for WorkflowClientInterceptor.start */
export interface WorkflowStartInput {
/** Name of Workflow to start */
readonly workflowType: string;
readonly headers: Headers;
readonly options: CompiledWorkflowOptions;
}
/** Input for WorkflowClientInterceptor.update */
export interface WorkflowStartUpdateInput {
readonly updateName: string;
readonly args: unknown[];
readonly workflowExecution: WorkflowExecution;
readonly firstExecutionRunId?: string;
readonly headers: Headers;
readonly options: WorkflowUpdateOptions;
}
/** Output for WorkflowClientInterceptor.startWithDetails */
export interface WorkflowStartOutput {
readonly runId: string;
readonly eagerlyStarted: boolean;
}
/** Output for WorkflowClientInterceptor.startUpdate */
export interface WorkflowStartUpdateOutput {
readonly updateId: string;
readonly workflowRunId: string;
readonly outcome?: temporal.api.update.v1.IOutcome;
}
/**
* Input for WorkflowClientInterceptor.startUpdateWithStart
*/
export interface WorkflowStartUpdateWithStartInput {
readonly workflowType: string;
readonly workflowStartOptions: CompiledWorkflowOptions;
readonly workflowStartHeaders: Headers;
readonly updateName: string;
readonly updateArgs: unknown[];
readonly updateOptions: WorkflowUpdateOptions;
readonly updateHeaders: Headers;
}
/**
* Output for WorkflowClientInterceptor.startUpdateWithStart
*/
export interface WorkflowStartUpdateWithStartOutput {
readonly workflowExecution: WorkflowExecution;
readonly updateId: string;
readonly updateOutcome?: temporal.api.update.v1.IOutcome;
}
/** Input for WorkflowClientInterceptor.signal */
export interface WorkflowSignalInput {
readonly signalName: string;
readonly args: unknown[];
readonly workflowExecution: WorkflowExecution;
readonly headers: Headers;
}
/** Input for WorkflowClientInterceptor.signalWithStart */
export interface WorkflowSignalWithStartInput {
readonly workflowType: string;
readonly signalName: string;
readonly signalArgs: unknown[];
readonly headers: Headers;
readonly options: CompiledWorkflowOptions;
}
/** Input for WorkflowClientInterceptor.query */
export interface WorkflowQueryInput {
readonly queryType: string;
readonly args: unknown[];
readonly workflowExecution: WorkflowExecution;
readonly queryRejectCondition?: temporal.api.enums.v1.QueryRejectCondition;
readonly headers: Headers;
}
/** Input for WorkflowClientInterceptor.terminate */
export interface WorkflowTerminateInput {
readonly workflowExecution: WorkflowExecution;
readonly reason?: string;
readonly details?: unknown[];
readonly firstExecutionRunId?: string;
}
/** Input for WorkflowClientInterceptor.cancel */
export interface WorkflowCancelInput {
readonly workflowExecution: WorkflowExecution;
readonly firstExecutionRunId?: string;
}
/** Input for WorkflowClientInterceptor.describe */
export interface WorkflowDescribeInput {
readonly workflowExecution: WorkflowExecution;
}
/**
* Implement any of these methods to intercept WorkflowClient outbound calls
*/
export interface WorkflowClientInterceptor {
/**
* Intercept a service call to startWorkflowExecution
*
* If you implement this method,
* {@link signalWithStart} most likely needs to be implemented too
*
* @deprecated in favour of {@link startWithDetails}
*/
start?: (input: WorkflowStartInput, next: Next<this, 'start'>) => Promise<string /* runId */>;
/**
* Intercept a service call to startWorkflowExecution
*
* This method returns start details via {@link WorkflowStartOutput}.
*
* If you implement this method,
* {@link signalWithStart} most likely needs to be implemented too
*/
startWithDetails?: (input: WorkflowStartInput, next: Next<this, 'startWithDetails'>) => Promise<WorkflowStartOutput>;
/**
* Intercept a service call to updateWorkflowExecution
*/
startUpdate?: (
input: WorkflowStartUpdateInput,
next: Next<this, 'startUpdate'>
) => Promise<WorkflowStartUpdateOutput>;
/**
* Intercept a service call to startUpdateWithStart
*/
startUpdateWithStart?: (
input: WorkflowStartUpdateWithStartInput,
next: Next<this, 'startUpdateWithStart'>
) => Promise<WorkflowStartUpdateWithStartOutput>;
/**
* Intercept a service call to signalWorkflowExecution
*
* If you implement this method,
* {@link signalWithStart} most likely needs to be implemented too
*/
signal?: (input: WorkflowSignalInput, next: Next<this, 'signal'>) => Promise<void>;
/**
* Intercept a service call to signalWithStartWorkflowExecution
*/
signalWithStart?: (input: WorkflowSignalWithStartInput, next: Next<this, 'signalWithStart'>) => Promise<string>;
/**
* Intercept a service call to queryWorkflow
*/
query?: (input: WorkflowQueryInput, next: Next<this, 'query'>) => Promise<unknown>;
/**
* Intercept a service call to terminateWorkflowExecution
*/
terminate?: (
input: WorkflowTerminateInput,
next: Next<this, 'terminate'>
) => Promise<TerminateWorkflowExecutionResponse>;
/**
* Intercept a service call to requestCancelWorkflowExecution
*/
cancel?: (input: WorkflowCancelInput, next: Next<this, 'cancel'>) => Promise<RequestCancelWorkflowExecutionResponse>;
/**
* Intercept a service call to describeWorkflowExecution
*/
describe?: (input: WorkflowDescribeInput, next: Next<this, 'describe'>) => Promise<DescribeWorkflowExecutionResponse>;
}
/** @deprecated: Use WorkflowClientInterceptor instead */
export type WorkflowClientCallsInterceptor = WorkflowClientInterceptor;
/** @deprecated */
export interface WorkflowClientCallsInterceptorFactoryInput {
workflowId: string;
runId?: string;
}
/**
* A function that takes {@link CompiledWorkflowOptions} and returns an interceptor
*
* @deprecated: Please define interceptors directly, without factory
*/
export interface WorkflowClientCallsInterceptorFactory {
// eslint-disable-next-line deprecation/deprecation
(input: WorkflowClientCallsInterceptorFactoryInput): WorkflowClientCallsInterceptor;
}
/**
* A mapping of interceptor type of a list of factory functions
*
* @deprecated: Please define interceptors directly, without factory
*/
export interface WorkflowClientInterceptors {
/** @deprecated */
// eslint-disable-next-line deprecation/deprecation
calls?: WorkflowClientCallsInterceptorFactory[];
}
/**
* Implement any of these methods to intercept ScheduleClient outbound calls
*/
export interface ScheduleClientInterceptor {
/**
* Intercept a service call to CreateSchedule
*/
create?: (input: CreateScheduleInput, next: Next<this, 'create'>) => Promise<CreateScheduleOutput>;
}
/**
* Input for {@link ScheduleClientInterceptor.create}
*/
export interface CreateScheduleInput {
readonly headers: Headers;
readonly options: CompiledScheduleOptions;
}
export type CreateScheduleOutput = {
readonly conflictToken: Uint8Array;
};
/**
* Interceptors for any high-level SDK client.
*
* NOTE: Currently only for {@link WorkflowClient} and {@link ScheduleClient}. More will be added later as needed.
*/
export interface ClientInterceptors {
// eslint-disable-next-line deprecation/deprecation
workflow?: WorkflowClientInterceptors | WorkflowClientInterceptor[];
schedule?: ScheduleClientInterceptor[];
}