From a2f71ec0a2a08d626c1d8f8b6b9bc386b65f622e Mon Sep 17 00:00:00 2001 From: Pchol22 Date: Tue, 16 Aug 2022 18:24:11 +0200 Subject: [PATCH] fix(StepFunctions): make apiPollingDelay an optionnal parameter of StepFunctions helper to avoid API throttling issues --- src/helpers/stepFunctions.ts | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/helpers/stepFunctions.ts b/src/helpers/stepFunctions.ts index 46387b4..439f304 100644 --- a/src/helpers/stepFunctions.ts +++ b/src/helpers/stepFunctions.ts @@ -1,30 +1,47 @@ import { StepFunctions as AWSStepFunctions } from "aws-sdk"; import { AWSClient } from "./general"; -const API_POLLING_DELAY_MS = 1000; +const DEFAULT_API_POLLING_DELAY_MS = 1000; + +type StepFunctionOptions = { apiPollingDelay?: number }; export default class StepFunctions { stepFunctions: AWSStepFunctions | undefined; allStateMachines: AWSStepFunctions.ListStateMachinesOutput | undefined; + apiPollingDelay = DEFAULT_API_POLLING_DELAY_MS; - async init(): Promise { + async init(options: StepFunctionOptions = {}): Promise { this.stepFunctions = new AWSClient.StepFunctions(); this.allStateMachines = await this.stepFunctions .listStateMachines() .promise(); + const { apiPollingDelay } = options; + if (apiPollingDelay !== undefined && apiPollingDelay > 0) { + this.apiPollingDelay = apiPollingDelay; + } } - static async build(): Promise { + static async build( + options: StepFunctionOptions = {} + ): Promise { const stepFunction = new StepFunctions(); - await stepFunction.init(); + await stepFunction.init(options); return stepFunction; } + // eslint-disable-next-line max-params async runExecution( stateMachineName: string, - input: unknown + input: unknown, + options: StepFunctionOptions = {} ): Promise { + const { apiPollingDelay } = options; + const executionApiPollingDelay = + apiPollingDelay !== undefined && apiPollingDelay > 0 + ? apiPollingDelay + : this.apiPollingDelay; + if (this.allStateMachines === undefined) { throw new Error( "The list of state machines is undefined. You might have forgotten to run build()." @@ -63,7 +80,9 @@ export default class StepFunctions { .promise(); // Wait before retrying to avoid throttle limits - await new Promise((resolve) => setTimeout(resolve, API_POLLING_DELAY_MS)); + await new Promise((resolve) => + setTimeout(resolve, executionApiPollingDelay) + ); } return await this.stepFunctions