diff --git a/app/jobs/send_form_completed_webhook_request_job.rb b/app/jobs/send_form_completed_webhook_request_job.rb index ff098e53..f50e41ca 100644 --- a/app/jobs/send_form_completed_webhook_request_job.rb +++ b/app/jobs/send_form_completed_webhook_request_job.rb @@ -15,21 +15,25 @@ class SendFormCompletedWebhookRequestJob < ApplicationJob ActiveStorage::Current.url_options = Docuseal.default_url_options - resp = Faraday.post(config.value, - { - event_type: 'form.completed', - timestamp: Time.current, - data: Submitters::SerializeForWebhook.call(submitter) - }.to_json, - 'Content-Type' => 'application/json', - 'User-Agent' => USER_AGENT) - - if resp.status.to_i >= 400 && attempt <= MAX_ATTEMPTS && + resp = begin + Faraday.post(config.value, + { + event_type: 'form.completed', + timestamp: Time.current, + data: Submitters::SerializeForWebhook.call(submitter) + }.to_json, + 'Content-Type' => 'application/json', + 'User-Agent' => USER_AGENT) + rescue Faraday::TimeoutError + nil + end + + if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS && (!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan)) SendFormCompletedWebhookRequestJob.set(wait: (2**attempt).minutes) .perform_later(submitter, { attempt: attempt + 1, - last_status: resp.status.to_i + last_status: resp&.status.to_i }) end end diff --git a/app/jobs/send_form_started_webhook_request_job.rb b/app/jobs/send_form_started_webhook_request_job.rb index 61a992f2..cdf4a079 100644 --- a/app/jobs/send_form_started_webhook_request_job.rb +++ b/app/jobs/send_form_started_webhook_request_job.rb @@ -13,21 +13,25 @@ class SendFormStartedWebhookRequestJob < ApplicationJob ActiveStorage::Current.url_options = Docuseal.default_url_options - resp = Faraday.post(config.value, - { - event_type: 'form.started', - timestamp: Time.current, - data: Submitters::SerializeForWebhook.call(submitter) - }.to_json, - 'Content-Type' => 'application/json', - 'User-Agent' => USER_AGENT) + resp = begin + Faraday.post(config.value, + { + event_type: 'form.started', + timestamp: Time.current, + data: Submitters::SerializeForWebhook.call(submitter) + }.to_json, + 'Content-Type' => 'application/json', + 'User-Agent' => USER_AGENT) + rescue Faraday::TimeoutError + nil + end - if resp.status.to_i >= 400 && attempt <= MAX_ATTEMPTS && + if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS && (!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan)) SendFormStartedWebhookRequestJob.set(wait: (2**attempt).minutes) .perform_later(submitter, { attempt: attempt + 1, - last_status: resp.status.to_i + last_status: resp&.status.to_i }) end end diff --git a/app/jobs/send_form_viewed_webhook_request_job.rb b/app/jobs/send_form_viewed_webhook_request_job.rb index 25496a94..8abfae7d 100644 --- a/app/jobs/send_form_viewed_webhook_request_job.rb +++ b/app/jobs/send_form_viewed_webhook_request_job.rb @@ -13,21 +13,25 @@ class SendFormViewedWebhookRequestJob < ApplicationJob ActiveStorage::Current.url_options = Docuseal.default_url_options - resp = Faraday.post(config.value, - { - event_type: 'form.viewed', - timestamp: Time.current, - data: Submitters::SerializeForWebhook.call(submitter) - }.to_json, - 'Content-Type' => 'application/json', - 'User-Agent' => USER_AGENT) + resp = begin + Faraday.post(config.value, + { + event_type: 'form.viewed', + timestamp: Time.current, + data: Submitters::SerializeForWebhook.call(submitter) + }.to_json, + 'Content-Type' => 'application/json', + 'User-Agent' => USER_AGENT) + rescue Faraday::TimeoutError + nil + end - if resp.status.to_i >= 400 && attempt <= MAX_ATTEMPTS && + if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS && (!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan)) SendFormViewedWebhookRequestJob.set(wait: (2**attempt).minutes) .perform_later(submitter, { attempt: attempt + 1, - last_status: resp.status.to_i + last_status: resp&.status.to_i }) end end