private awaitStateMachineEnd()

in src/commands/repair-package-data.ts [130:151]


  private awaitStateMachineEnd(SFN: SFNClient, executionArn: string): Promise<{readonly arn: string; readonly status: string}> {
    return new Promise((ok, ko) => {
      const command = new DescribeExecutionCommand({ executionArn });
      (function evaluate() {
        SFN.send(command).then(
          result => {
            if (result.status !== 'RUNNING') {
              return ok({ arn: executionArn, status: result.status! });
            }
            // 30 seconds + up to 30 seconds jitter
            setImmediate(evaluate, 30_000 + 30_000 * Math.random());
          },
          (cause) => {
            if (cause.name !== 'ThrottlingException' && cause.name !== 'TimeoutError') {
              return ko(cause);
            }
            setImmediate(evaluate, 30_000 + 30_000 * Math.random());
          },
        );
      })();
    });
  }