spaceship/lib/spaceship/connect_api/api_client.rb in fastlane-2.176.0 vs spaceship/lib/spaceship/connect_api/api_client.rb in fastlane-2.177.0

- old
+ new

@@ -148,28 +148,34 @@ handle_response(response) end protected + class TimeoutRetryError < StandardError + def initialize(msg) + super + end + end + def with_asc_retry(tries = 5, &_block) tries = 1 if Object.const_defined?("SpecHelper") response = yield status = response.status if response if [500, 504].include?(status) msg = "Timeout received! Retrying after 3 seconds (remaining: #{tries})..." - raise msg + raise TimeoutRetryError, msg end return response rescue UnauthorizedAccessError => error # Catch unathorized access and re-raising # There is no need to try again raise error - rescue => error + rescue TimeoutRetryError => error tries -= 1 puts(error) if Spaceship::Globals.verbose? if tries.zero? return response else @@ -188,23 +194,35 @@ raise UnexpectedResponse, response.body end raise UnexpectedResponse, response.body['error'] if response.body['error'] - raise UnexpectedResponse, handle_errors(response) if response.body['errors'] + raise UnexpectedResponse, format_errors(response) if response.body['errors'] raise UnexpectedResponse, "Temporary App Store Connect error: #{response.body}" if response.body['statusCode'] == 'ERROR' store_csrf_tokens(response) return Spaceship::ConnectAPI::Response.new(body: response.body, status: response.status, headers: response.headers, client: self) end - def handle_401(response) - raise UnauthorizedAccessError, handle_errors(response) if response && (response.body || {})['errors'] + # Overridden from Spaceship::Client + def handle_error(response) + case response.status.to_i + when 401 + raise UnauthorizedAccessError, format_errors(response) if response && (response.body || {})['errors'] + when 403 + error = (response.body['errors'] || []).first || {} + error_code = error['code'] + if error_code == "FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED" + raise ProgramLicenseAgreementUpdated, format_errors(response) if response && (response.body || {})['errors'] + else + raise AccessForbiddenError, format_errors(response) if response && (response.body || {})['errors'] + end + end end - def handle_errors(response) + def format_errors(response) # Example error format # { # "errors":[ # { # "id":"cbfd8674-4802-4857-bfe8-444e1ea36e32",