public function run()
    {
        $this->validateOperations();
        $this->prepareTransport();
        $this->prepareTokenHelper();
        $this->preparePayloadAuth();

        try {
            $this->runApiOperations();
        } catch (\Exception $e) {
            if (
                $this->start
                && $e instanceof ContactClientException
                && Stat::TYPE_AUTH === $e->getStatType()
            ) {
                // We failed the pre-auth run due to an auth-related issue. Flush the tokenHelper.
                $this->prepareTokenHelper();
                // Try a standard run from the top assuming authentication is needed again.
                $this->start = 0;
                $this->runApiOperations();
            } else {
                throw $e;
            }
        }

        return $this;
    }