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",