208 lines
7.6 KiB
TypeScript
208 lines
7.6 KiB
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>;
|
|
/**
|
|
* 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 {
|
|
(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 */
|
|
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 {
|
|
workflow?: WorkflowClientInterceptors | WorkflowClientInterceptor[];
|
|
schedule?: ScheduleClientInterceptor[];
|
|
}
|