esi-sdk 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +9 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. data/.github/ISSUE_TEMPLATE/support.md +7 -0
  6. data/.github/PULL_REQUEST_TEMPLATE.md +37 -0
  7. data/.github/dependabot.yml +17 -0
  8. data/.github/workflows/cicd.yml +181 -0
  9. data/.gitignore +11 -0
  10. data/.rspec +2 -0
  11. data/.rubocop.yml +36 -0
  12. data/.ruby-version +1 -0
  13. data/.yardext.rb +18 -0
  14. data/.yardopts +17 -0
  15. data/CHANGELOG.md +17 -0
  16. data/CODE_OF_CONDUCT.md +84 -0
  17. data/CONTRIBUTING.md +69 -0
  18. data/Gemfile +24 -0
  19. data/Gemfile.lock +141 -0
  20. data/LICENSE.txt +21 -0
  21. data/README.md +87 -0
  22. data/Rakefile +349 -0
  23. data/SECURITY.md +13 -0
  24. data/bin/console +15 -0
  25. data/bin/setup +8 -0
  26. data/esi-sdk.gemspec +32 -0
  27. data/exe/esi-sdk +4 -0
  28. data/lib/esi/client/alliance.rb +104 -0
  29. data/lib/esi/client/assets.rb +179 -0
  30. data/lib/esi/client/bookmarks.rb +126 -0
  31. data/lib/esi/client/calendar.rb +139 -0
  32. data/lib/esi/client/character.rb +389 -0
  33. data/lib/esi/client/clones.rb +69 -0
  34. data/lib/esi/client/contacts.rb +277 -0
  35. data/lib/esi/client/contracts.rb +274 -0
  36. data/lib/esi/client/corporation.rb +626 -0
  37. data/lib/esi/client/dogma.rb +117 -0
  38. data/lib/esi/client/faction_warfare.rb +196 -0
  39. data/lib/esi/client/fittings.rb +93 -0
  40. data/lib/esi/client/fleets.rb +428 -0
  41. data/lib/esi/client/incursions.rb +30 -0
  42. data/lib/esi/client/industry.rb +237 -0
  43. data/lib/esi/client/insurance.rb +30 -0
  44. data/lib/esi/client/killmails.rb +95 -0
  45. data/lib/esi/client/location.rb +100 -0
  46. data/lib/esi/client/loyalty.rb +61 -0
  47. data/lib/esi/client/mail.rb +244 -0
  48. data/lib/esi/client/market.rb +302 -0
  49. data/lib/esi/client/opportunities.rb +124 -0
  50. data/lib/esi/client/planetary_interaction.rb +122 -0
  51. data/lib/esi/client/routes.rb +37 -0
  52. data/lib/esi/client/search.rb +68 -0
  53. data/lib/esi/client/skills.rb +97 -0
  54. data/lib/esi/client/sovereignty.rb +74 -0
  55. data/lib/esi/client/status.rb +31 -0
  56. data/lib/esi/client/universe.rb +640 -0
  57. data/lib/esi/client/user_interface.rb +145 -0
  58. data/lib/esi/client/wallet.rb +191 -0
  59. data/lib/esi/client/wars.rb +82 -0
  60. data/lib/esi/client.rb +225 -0
  61. data/lib/esi/errors.rb +51 -0
  62. data/lib/esi/version.rb +5 -0
  63. data/lib/esi-sdk.rb +8 -0
  64. data/release.config.js +32 -0
  65. data/yard/fulldoc/html/css/pygments-default.css +69 -0
  66. data/yard/fulldoc/html/setup.rb +6 -0
  67. data/yard/layout/html/setup.rb +6 -0
  68. metadata +156 -0
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ class Client
5
+ # ESI user interface operations.
6
+ module UserInterface
7
+ # Set a solar system as autopilot waypoint.
8
+ #
9
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
10
+ #
11
+ # @esi_scope esi-ui.write_waypoint.v1
12
+ #
13
+ # @esi_version dev
14
+ # @esi_version legacy
15
+ # @esi_version v2
16
+ #
17
+ # @param add_to_beginning [Boolean] Whether this solar system should be added to the beginning of all waypoints
18
+ # @param clear_other_waypoints [Boolean] Whether clean other waypoints beforing adding this one
19
+ # @param destination_id [Integer] The destination to travel to, can be solar system, station or structure's id
20
+ # @param headers [Hash] Additional headers
21
+ #
22
+ # @raise [ESI::Errors::BadRequestError] Bad request
23
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
24
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
25
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
26
+ # @raise [ESI::Errors::InternalServerError] Internal server error
27
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
28
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
29
+ #
30
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_autopilot_waypoint
31
+ def post_ui_autopilot_waypoint(add_to_beginning:, clear_other_waypoints:, destination_id:, headers: {})
32
+ query_string = URI.encode_www_form([["add_to_beginning", add_to_beginning], ["clear_other_waypoints", clear_other_waypoints], ["destination_id", destination_id]])
33
+ post("/ui/autopilot/waypoint/?#{query_string}", headers: headers)
34
+ end
35
+
36
+ # Open the contract window inside the client.
37
+ #
38
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
39
+ #
40
+ # @esi_scope esi-ui.open_window.v1
41
+ #
42
+ # @esi_version dev
43
+ # @esi_version legacy
44
+ # @esi_version v1
45
+ #
46
+ # @param contract_id [Integer] The contract to open
47
+ # @param headers [Hash] Additional headers
48
+ #
49
+ # @raise [ESI::Errors::BadRequestError] Bad request
50
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
51
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
52
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
53
+ # @raise [ESI::Errors::InternalServerError] Internal server error
54
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
55
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
56
+ #
57
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_contract
58
+ def post_ui_openwindow_contract(contract_id:, headers: {})
59
+ query_string = URI.encode_www_form([["contract_id", contract_id]])
60
+ post("/ui/openwindow/contract/?#{query_string}", headers: headers)
61
+ end
62
+
63
+ # Open the information window for a character, corporation or alliance inside the client.
64
+ #
65
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
66
+ #
67
+ # @esi_scope esi-ui.open_window.v1
68
+ #
69
+ # @esi_version dev
70
+ # @esi_version legacy
71
+ # @esi_version v1
72
+ #
73
+ # @param target_id [Integer] The target to open
74
+ # @param headers [Hash] Additional headers
75
+ #
76
+ # @raise [ESI::Errors::BadRequestError] Bad request
77
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
78
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
79
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
80
+ # @raise [ESI::Errors::InternalServerError] Internal server error
81
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
82
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
83
+ #
84
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_information
85
+ def post_ui_openwindow_information(target_id:, headers: {})
86
+ query_string = URI.encode_www_form([["target_id", target_id]])
87
+ post("/ui/openwindow/information/?#{query_string}", headers: headers)
88
+ end
89
+
90
+ # Open the market details window for a specific typeID inside the client.
91
+ #
92
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
93
+ #
94
+ # @esi_scope esi-ui.open_window.v1
95
+ #
96
+ # @esi_version dev
97
+ # @esi_version legacy
98
+ # @esi_version v1
99
+ #
100
+ # @param type_id [Integer] The item type to open in market window
101
+ # @param headers [Hash] Additional headers
102
+ #
103
+ # @raise [ESI::Errors::BadRequestError] Bad request
104
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
105
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
106
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
107
+ # @raise [ESI::Errors::InternalServerError] Internal server error
108
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
109
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
110
+ #
111
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_marketdetails
112
+ def post_ui_openwindow_marketdetails(type_id:, headers: {})
113
+ query_string = URI.encode_www_form([["type_id", type_id]])
114
+ post("/ui/openwindow/marketdetails/?#{query_string}", headers: headers)
115
+ end
116
+
117
+ # Open the New Mail window, according to settings from the request if applicable.
118
+ #
119
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
120
+ #
121
+ # @esi_scope esi-ui.open_window.v1
122
+ #
123
+ # @esi_version dev
124
+ # @esi_version legacy
125
+ # @esi_version v1
126
+ #
127
+ # @param new_mail [Hash] The details of mail to create
128
+ # @param headers [Hash] Additional headers
129
+ #
130
+ # @raise [ESI::Errors::BadRequestError] Bad request
131
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
132
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
133
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
134
+ # @raise [ESI::Errors::UnprocessableEntityError] Invalid request
135
+ # @raise [ESI::Errors::InternalServerError] Internal server error
136
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
137
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
138
+ #
139
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_newmail
140
+ def post_ui_openwindow_newmail(new_mail:, headers: {})
141
+ post("/ui/openwindow/newmail/", headers: headers, payload: new_mail)
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,191 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ class Client
5
+ # ESI wallet operations.
6
+ module Wallet
7
+ # Returns a character's wallet balance.
8
+ #
9
+ # This endpoint is cached for up to 120 seconds.
10
+ #
11
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
12
+ #
13
+ # @esi_scope esi-wallet.read_character_wallet.v1
14
+ #
15
+ # @esi_version legacy
16
+ # @esi_version v1
17
+ #
18
+ # @param character_id [Integer,String] An EVE character ID
19
+ # @param params [Hash] Additional query string parameters
20
+ # @param headers [Hash] Additional headers
21
+ #
22
+ # @raise [ESI::Errors::BadRequestError] Bad request
23
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
24
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
25
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
26
+ # @raise [ESI::Errors::InternalServerError] Internal server error
27
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
28
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
29
+ #
30
+ # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet
31
+ def get_character_wallet(character_id:, params: {}, headers: {})
32
+ get("/characters/#{character_id}/wallet/", headers: headers, params: params)
33
+ end
34
+ alias get_characters_character_id_wallet get_character_wallet
35
+
36
+ # Retrieve the given character's wallet journal going 30 days back.
37
+ #
38
+ # This endpoint is cached for up to 3600 seconds.
39
+ #
40
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
41
+ #
42
+ # @esi_scope esi-wallet.read_character_wallet.v1
43
+ #
44
+ # @esi_version dev
45
+ # @esi_version v6
46
+ #
47
+ # @param character_id [Integer,String] An EVE character ID
48
+ # @param params [Hash] Additional query string parameters
49
+ # @param headers [Hash] Additional headers
50
+ #
51
+ # @raise [ESI::Errors::BadRequestError] Bad request
52
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
53
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
54
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
55
+ # @raise [ESI::Errors::InternalServerError] Internal server error
56
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
57
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
58
+ #
59
+ # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet_journal
60
+ def get_character_wallet_journal(character_id:, params: {}, headers: {})
61
+ get("/characters/#{character_id}/wallet/journal/", headers: headers, params: params)
62
+ end
63
+ alias get_characters_character_id_wallet_journal get_character_wallet_journal
64
+
65
+ # Get wallet transactions of a character.
66
+ #
67
+ # This endpoint is cached for up to 3600 seconds.
68
+ #
69
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
70
+ #
71
+ # @esi_scope esi-wallet.read_character_wallet.v1
72
+ #
73
+ # @esi_version dev
74
+ # @esi_version legacy
75
+ # @esi_version v1
76
+ #
77
+ # @param character_id [Integer,String] An EVE character ID
78
+ # @param from_id [Integer] Only show transactions happened before the one referenced by this id
79
+ # @param params [Hash] Additional query string parameters
80
+ # @param headers [Hash] Additional headers
81
+ #
82
+ # @raise [ESI::Errors::BadRequestError] Bad request
83
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
84
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
85
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
86
+ # @raise [ESI::Errors::InternalServerError] Internal server error
87
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
88
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
89
+ #
90
+ # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet_transactions
91
+ def get_character_wallet_transactions(character_id:, from_id:, params: {}, headers: {})
92
+ query_string = URI.encode_www_form([["from_id", from_id]])
93
+ get("/characters/#{character_id}/wallet/transactions/?#{query_string}", headers: headers, params: params)
94
+ end
95
+ alias get_characters_character_id_wallet_transactions get_character_wallet_transactions
96
+
97
+ # Get a corporation's wallets.
98
+ #
99
+ # This endpoint is cached for up to 300 seconds.
100
+ #
101
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
102
+ #
103
+ # @esi_scope esi-wallet.read_corporation_wallets.v1
104
+ #
105
+ # @esi_version dev
106
+ # @esi_version legacy
107
+ # @esi_version v1
108
+ #
109
+ # @param corporation_id [Integer,String] An EVE corporation ID
110
+ # @param params [Hash] Additional query string parameters
111
+ # @param headers [Hash] Additional headers
112
+ #
113
+ # @raise [ESI::Errors::BadRequestError] Bad request
114
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
115
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
116
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
117
+ # @raise [ESI::Errors::InternalServerError] Internal server error
118
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
119
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
120
+ #
121
+ # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets
122
+ def get_corporation_wallets(corporation_id:, params: {}, headers: {})
123
+ get("/corporations/#{corporation_id}/wallets/", headers: headers, params: params)
124
+ end
125
+ alias get_corporations_corporation_id_wallets get_corporation_wallets
126
+
127
+ # Retrieve the given corporation's wallet journal for the given division going 30 days back.
128
+ #
129
+ # This endpoint is cached for up to 3600 seconds.
130
+ #
131
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
132
+ #
133
+ # @esi_scope esi-wallet.read_corporation_wallets.v1
134
+ #
135
+ # @esi_version dev
136
+ # @esi_version v4
137
+ #
138
+ # @param corporation_id [Integer,String] An EVE corporation ID
139
+ # @param division [Integer,String] Wallet key of the division to fetch journals from
140
+ # @param params [Hash] Additional query string parameters
141
+ # @param headers [Hash] Additional headers
142
+ #
143
+ # @raise [ESI::Errors::BadRequestError] Bad request
144
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
145
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
146
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
147
+ # @raise [ESI::Errors::InternalServerError] Internal server error
148
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
149
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
150
+ #
151
+ # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets_division_journal
152
+ def get_corporation_wallets_division_journal(corporation_id:, division:, params: {}, headers: {})
153
+ get("/corporations/#{corporation_id}/wallets/#{division}/journal/", headers: headers, params: params)
154
+ end
155
+ alias get_corporations_corporation_id_wallets_division_journal get_corporation_wallets_division_journal
156
+
157
+ # Get wallet transactions of a corporation.
158
+ #
159
+ # This endpoint is cached for up to 3600 seconds.
160
+ #
161
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
162
+ #
163
+ # @esi_scope esi-wallet.read_corporation_wallets.v1
164
+ #
165
+ # @esi_version dev
166
+ # @esi_version legacy
167
+ # @esi_version v1
168
+ #
169
+ # @param corporation_id [Integer,String] An EVE corporation ID
170
+ # @param division [Integer,String] Wallet key of the division to fetch journals from
171
+ # @param from_id [Integer] Only show journal entries happened before the transaction referenced by this id
172
+ # @param params [Hash] Additional query string parameters
173
+ # @param headers [Hash] Additional headers
174
+ #
175
+ # @raise [ESI::Errors::BadRequestError] Bad request
176
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
177
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
178
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
179
+ # @raise [ESI::Errors::InternalServerError] Internal server error
180
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
181
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
182
+ #
183
+ # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets_division_transactions
184
+ def get_corporation_wallets_division_transactions(corporation_id:, division:, from_id:, params: {}, headers: {})
185
+ query_string = URI.encode_www_form([["from_id", from_id]])
186
+ get("/corporations/#{corporation_id}/wallets/#{division}/transactions/?#{query_string}", headers: headers, params: params)
187
+ end
188
+ alias get_corporations_corporation_id_wallets_division_transactions get_corporation_wallets_division_transactions
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ class Client
5
+ # ESI wars operations.
6
+ module War
7
+ # Return details about a war.
8
+ #
9
+ # This endpoint is cached for up to 3600 seconds.
10
+ #
11
+ # @esi_version dev
12
+ # @esi_version legacy
13
+ # @esi_version v1
14
+ #
15
+ # @param war_id [Integer,String] ID for a war
16
+ # @param params [Hash] Additional query string parameters
17
+ # @param headers [Hash] Additional headers
18
+ #
19
+ # @raise [ESI::Errors::BadRequestError] Bad request
20
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
21
+ # @raise [ESI::Errors::UnprocessableEntityError] War not found
22
+ # @raise [ESI::Errors::InternalServerError] Internal server error
23
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
24
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
25
+ #
26
+ # @see https://esi.evetech.net/ui/#/Wars/get_wars_war_id
27
+ def get_war(war_id:, params: {}, headers: {})
28
+ get("/wars/#{war_id}/", headers: headers, params: params)
29
+ end
30
+ alias get_wars_war_id get_war
31
+
32
+ # Return a list of kills related to a war.
33
+ #
34
+ # This endpoint is cached for up to 3600 seconds.
35
+ #
36
+ # @esi_version dev
37
+ # @esi_version legacy
38
+ # @esi_version v1
39
+ #
40
+ # @param war_id [Integer,String] A valid war ID
41
+ # @param params [Hash] Additional query string parameters
42
+ # @param headers [Hash] Additional headers
43
+ #
44
+ # @raise [ESI::Errors::BadRequestError] Bad request
45
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
46
+ # @raise [ESI::Errors::UnprocessableEntityError] War not found
47
+ # @raise [ESI::Errors::InternalServerError] Internal server error
48
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
49
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
50
+ #
51
+ # @see https://esi.evetech.net/ui/#/Wars/get_wars_war_id_killmails
52
+ def get_war_killmails(war_id:, params: {}, headers: {})
53
+ get("/wars/#{war_id}/killmails/", headers: headers, params: params)
54
+ end
55
+ alias get_wars_war_id_killmails get_war_killmails
56
+
57
+ # Return a list of wars.
58
+ #
59
+ # This endpoint is cached for up to 3600 seconds.
60
+ #
61
+ # @esi_version dev
62
+ # @esi_version legacy
63
+ # @esi_version v1
64
+ #
65
+ # @param max_war_id [Integer] Only return wars with ID smaller than this
66
+ # @param params [Hash] Additional query string parameters
67
+ # @param headers [Hash] Additional headers
68
+ #
69
+ # @raise [ESI::Errors::BadRequestError] Bad request
70
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
71
+ # @raise [ESI::Errors::InternalServerError] Internal server error
72
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
73
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
74
+ #
75
+ # @see https://esi.evetech.net/ui/#/Wars/get_wars
76
+ def get_wars(max_war_id:, params: {}, headers: {})
77
+ query_string = URI.encode_www_form([["max_war_id", max_war_id]])
78
+ get("/wars/?#{query_string}", headers: headers, params: params)
79
+ end
80
+ end
81
+ end
82
+ end
data/lib/esi/client.rb ADDED
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday"
4
+ require "faraday-http-cache"
5
+ require "faraday_middleware"
6
+ require "timeout"
7
+
8
+ require_relative "./errors"
9
+ require_relative "./client/alliance"
10
+ require_relative "./client/contacts"
11
+ require_relative "./client/character"
12
+ require_relative "./client/assets"
13
+ require_relative "./client/skills"
14
+ require_relative "./client/bookmarks"
15
+ require_relative "./client/calendar"
16
+ require_relative "./client/clones"
17
+ require_relative "./client/contracts"
18
+ require_relative "./client/fittings"
19
+ require_relative "./client/fleets"
20
+ require_relative "./client/faction_warfare"
21
+ require_relative "./client/industry"
22
+ require_relative "./client/killmails"
23
+ require_relative "./client/location"
24
+ require_relative "./client/loyalty"
25
+ require_relative "./client/mail"
26
+ require_relative "./client/opportunities"
27
+ require_relative "./client/market"
28
+ require_relative "./client/planetary_interaction"
29
+ require_relative "./client/search"
30
+ require_relative "./client/wallet"
31
+ require_relative "./client/corporation"
32
+ require_relative "./client/dogma"
33
+ require_relative "./client/incursions"
34
+ require_relative "./client/insurance"
35
+ require_relative "./client/routes"
36
+ require_relative "./client/sovereignty"
37
+ require_relative "./client/status"
38
+ require_relative "./client/user_interface"
39
+ require_relative "./client/universe"
40
+ require_relative "./client/wars"
41
+
42
+ module ESI
43
+ # Client for the EVE Swagger Interface (ESI) API.
44
+ class Client # rubocop:disable Metrics/ClassLength
45
+ include ESI::Client::Alliance
46
+ include ESI::Client::Contact
47
+ include ESI::Client::Character
48
+ include ESI::Client::Asset
49
+ include ESI::Client::Skill
50
+ include ESI::Client::Bookmark
51
+ include ESI::Client::Calendar
52
+ include ESI::Client::Clone
53
+ include ESI::Client::Contract
54
+ include ESI::Client::Fitting
55
+ include ESI::Client::Fleet
56
+ include ESI::Client::FactionWarfare
57
+ include ESI::Client::Industry
58
+ include ESI::Client::Killmail
59
+ include ESI::Client::Location
60
+ include ESI::Client::Loyalty
61
+ include ESI::Client::Mail
62
+ include ESI::Client::Opportunity
63
+ include ESI::Client::Market
64
+ include ESI::Client::PlanetaryInteraction
65
+ include ESI::Client::Search
66
+ include ESI::Client::Wallet
67
+ include ESI::Client::Corporation
68
+ include ESI::Client::Dogma
69
+ include ESI::Client::Incursion
70
+ include ESI::Client::Insurance
71
+ include ESI::Client::Route
72
+ include ESI::Client::Sovereignty
73
+ include ESI::Client::Status
74
+ include ESI::Client::UserInterface
75
+ include ESI::Client::Universe
76
+ include ESI::Client::War
77
+
78
+ DEFAULT_BASE_URL = "https://esi.evetech.net"
79
+ DEFAULT_VERSION = "latest"
80
+
81
+ ERROR_MAPPING = {
82
+ 400 => ESI::Errors::BadRequestError,
83
+ 401 => ESI::Errors::UnauthorizedError,
84
+ 403 => ESI::Errors::ForbiddenError,
85
+ 404 => ESI::Errors::NotFoundError,
86
+ 420 => ESI::Errors::ErrorLimitedError,
87
+ 422 => ESI::Errors::UnprocessableEntityError,
88
+ 500 => ESI::Errors::InternalServerError,
89
+ 503 => ESI::Errors::ServiceUnavailableError,
90
+ 504 => ESI::Errors::GatewayTimeoutError,
91
+ 520 => ESI::Errors::EveServerError
92
+ }.freeze
93
+
94
+ attr_reader :base_url, :cache, :user_agent, :version
95
+
96
+ # Returns a new {ESI::Client}.
97
+ #
98
+ # @param user_agent [String] Value of the `User-Agent` header for HTTP calls
99
+ # @param base_url [String] The base URL of the ESI API
100
+ # @param version [String] The version of the ESI API
101
+ # @param cache [Hash] The cache configuration to use
102
+ # @option cache [Object] :store The cache store (e.g. `Rails.cache`)
103
+ # @option cache [Object] :logger The logger (e.g. `Rails.logger`)
104
+ # @option cache [Object] :instrumenter The instrumenter (e.g. `ActiveSupport::Notifications`)
105
+ def initialize(user_agent:, base_url: DEFAULT_BASE_URL, version: DEFAULT_VERSION, cache: {})
106
+ @base_url = base_url
107
+ @cache = cache
108
+ @user_agent = user_agent
109
+ @version = version
110
+ end
111
+
112
+ # Set the `Authorization` header for subsequent requests.
113
+ #
114
+ # @param token [String] The [EVE SSO JWT token](https://docs.esi.evetech.net/docs/sso/) to use
115
+ def authorize(token)
116
+ url_encoded_connection.authorization :Bearer, token
117
+ json_encoded_connection.authorization :Bearer, token
118
+ end
119
+
120
+ private
121
+
122
+ ESI_RETRY_EXCEPTIONS = [Errno::ETIMEDOUT, Timeout::Error, Faraday::TimeoutError, Faraday::ConnectionFailed,
123
+ Faraday::ParsingError, SocketError].freeze
124
+
125
+ def delete(path, params: {}, headers: {})
126
+ response = make_delete_request(path, params: params, headers: headers)
127
+ response.body
128
+ end
129
+
130
+ def get(path, params: {}, headers: {})
131
+ response = make_get_request(path, params: params, headers: headers)
132
+
133
+ return paginate(response, params, headers) if paginated?(response)
134
+
135
+ response.body
136
+ end
137
+
138
+ def post(path, payload: {}, headers: {})
139
+ response = make_post_request(path, payload: payload, headers: headers)
140
+ response.body
141
+ end
142
+
143
+ def put(path, payload: {}, headers: {})
144
+ response = make_put_request(path, payload: payload, headers: headers)
145
+ response.body
146
+ end
147
+
148
+ def paginate(response, params, headers)
149
+ all_items = response.body
150
+ page_count = response.headers["X-Pages"].to_i - 1
151
+ page_count.times do |n|
152
+ page_number = n + 1
153
+ params = params.merge(page: page_number)
154
+ page = make_get_request(path, params: params, headers: headers)
155
+ all_items += page.body
156
+ end
157
+
158
+ all_items
159
+ end
160
+
161
+ def make_delete_request(path, params: {}, headers: {})
162
+ res = url_encoded_connection.delete("/#{version}#{path}", params, headers)
163
+
164
+ raise_error(res) unless res.success?
165
+
166
+ res
167
+ end
168
+
169
+ def make_get_request(path, params: {}, headers: {})
170
+ res = url_encoded_connection.get("/#{version}#{path}", params, headers)
171
+
172
+ raise_error(res) unless res.success?
173
+
174
+ res
175
+ end
176
+
177
+ def make_post_request(path, payload: {}, headers: {})
178
+ res = json_encoded_connection.post("/#{version}#{path}", payload, headers)
179
+
180
+ raise_error(res) unless res.success?
181
+
182
+ res
183
+ end
184
+
185
+ def make_put_request(path, payload: {}, headers: {})
186
+ res = json_encoded_connection.put("/#{version}#{path}", payload, headers)
187
+
188
+ raise_error(res) unless res.success?
189
+
190
+ res
191
+ end
192
+
193
+ def paginated?(response)
194
+ response.headers["X-Pages"] && response.headers["X-Pages"].to_i <= 1
195
+ end
196
+
197
+ def raise_error(res)
198
+ raise (ERROR_MAPPING[res.status] || Error).new("(#{res.status}) #{res["error"]}", response: res)
199
+ end
200
+
201
+ def url_encoded_connection
202
+ @url_encoded_connection ||= Faraday.new(base_url, headers: default_headers) do |f|
203
+ f.use :http_cache, cache unless cache.empty?
204
+ f.request :url_encoded
205
+ f.request :retry, { exceptions: ESI_RETRY_EXCEPTIONS }
206
+ f.response :follow_redirects
207
+ f.response :json
208
+ end
209
+ end
210
+
211
+ def json_encoded_connection
212
+ @json_encoded_connection ||= Faraday.new(base_url, headers: default_headers) do |f|
213
+ f.use :http_cache, cache unless cache.empty?
214
+ f.request :json
215
+ f.request :retry, { exceptions: ESI_RETRY_EXCEPTIONS }
216
+ f.response :follow_redirects
217
+ f.response :json
218
+ end
219
+ end
220
+
221
+ def default_headers
222
+ { "User-Agent": user_agent }
223
+ end
224
+ end
225
+ end
data/lib/esi/errors.rb ADDED
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ # Namespace for ESI errors.
5
+ module Errors
6
+ # Base class for ESI errors.
7
+ class Error < RuntimeError
8
+ end
9
+
10
+ # Base class for ESI client errors.
11
+ class ClientError < Error
12
+ attr_reader :response
13
+
14
+ def initialize(msg, response:)
15
+ super(msg)
16
+
17
+ @response = response
18
+ end
19
+ end
20
+
21
+ # ESI unauthorized error.
22
+ class UnauthorizedError < ClientError; end
23
+
24
+ # ESI bad request error.
25
+ class BadRequestError < ClientError; end
26
+
27
+ # ESI forbidden error.
28
+ class ForbiddenError < ClientError; end
29
+
30
+ # ESI not found error.
31
+ class NotFoundError < ClientError; end
32
+
33
+ # ESI unprocessable entity error.
34
+ class UnprocessableEntityError < ClientError; end
35
+
36
+ # ESI error limited error.
37
+ class ErrorLimitedError < ClientError; end
38
+
39
+ # ESI internal server error.
40
+ class InternalServerError < ClientError; end
41
+
42
+ # ESI service unavailable error.
43
+ class ServiceUnavailableError < ClientError; end
44
+
45
+ # ESI gateway timeout error.
46
+ class GatewayTimeoutError < ClientError; end
47
+
48
+ # ESI EVE server error.
49
+ class EveServerError < ClientError; end
50
+ end
51
+ end