-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
errors.rb
135 lines (109 loc) 路 4.2 KB
/
errors.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
module Spaceship
# Base class for errors that want to present their message as
# preferred error info for fastlane error handling. See:
# fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb
class BasicPreferredInfoError < StandardError
TITLE = 'The request could not be completed because:'.freeze
def preferred_error_info
message ? [TITLE, message] : nil
end
end
# Invalid user credentials were provided
class InvalidUserCredentialsError < BasicPreferredInfoError; end
# Raised when no user credentials were passed at all
class NoUserCredentialsError < BasicPreferredInfoError; end
class ProgramLicenseAgreementUpdated < BasicPreferredInfoError
def show_github_issues
false
end
end
class AppleIDAndPrivacyAcknowledgementNeeded < BasicPreferredInfoError
def show_github_issues
false
end
end
# User doesn't have enough permission for given action
class InsufficientPermissions < BasicPreferredInfoError
TITLE = 'Insufficient permissions for your Apple ID:'.freeze
def preferred_error_info
message ? [TITLE, message] : nil
end
# We don't want to show similar GitHub issues, as the error message
# should be pretty clear
def show_github_issues
false
end
end
# Raised when 429 is received from App Store Connect
class TooManyRequestsError < BasicPreferredInfoError
attr_reader :retry_after
attr_reader :rate_limit_user
def initialize(resp_hash)
headers = resp_hash[:response_headers] || {}
@retry_after = (headers['retry-after'] || 60).to_i
@rate_limit_user = headers['x-daiquiri-rate-limit-user']
message = 'Apple 429 detected'
message += " - #{rate_limit_user}" if rate_limit_user
super(message)
end
def show_github_issues
false
end
end
class UnexpectedResponse < StandardError
attr_reader :error_info
def initialize(error_info = nil)
super(error_info)
@error_info = error_info
end
def preferred_error_info
return nil unless @error_info.kind_of?(Hash) && @error_info['resultString']
[
"Apple provided the following error info:",
@error_info['resultString'],
@error_info['userString']
].compact.uniq # sometimes 'resultString' and 'userString' are the same value
end
end
# Raised when 302 is received from portal request
class AppleTimeoutError < BasicPreferredInfoError; end
# Raised when 401 is received from portal request
class UnauthorizedAccessError < BasicPreferredInfoError; end
# Raised when 500 is received from App Store Connect
class InternalServerError < BasicPreferredInfoError; end
# Raised when 502 is received from App Store Connect
class BadGatewayError < BasicPreferredInfoError; end
# Raised when 504 is received from App Store Connect
class GatewayTimeoutError < BasicPreferredInfoError; end
# Raised when 403 is received from portal request
class AccessForbiddenError < BasicPreferredInfoError; end
# Base class for errors coming from App Store Connect locale changes
class AppStoreLocaleError < BasicPreferredInfoError
def initialize(msg)
@message = (msg ? "An exception occurred for locale: #{msg}." : nil)
super
end
# no need to search github issues since the error is specific
def show_github_issues
false
end
end
# Raised for localized text errors from App Store Connect
class AppStoreLocalizationError < AppStoreLocaleError
def preferred_error_info
"#{@message} Check the localization requirements here: https://help.apple.com/app-store-connect/en.lproj/static.html#dev354659071"
end
end
# Raised for localized screenshots errors from App Store Connect
class AppStoreScreenshotError < AppStoreLocaleError
def preferred_error_info
"#{@message} Check the screenshot requirements here: https://help.apple.com/app-store-connect/en.lproj/static.html#devd274dd925"
end
end
# Raised for localized app preview errors from App Store Connect
class AppStoreAppPreviewError < AppStoreLocaleError
def preferred_error_info
"#{@message} Check the app preview requirements here: https://help.apple.com/app-store-connect/en.lproj/static.html#dev4e413fcb8"
end
end
end