tesla 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +5 -0
  3. data/CHANGELOG.md +31 -0
  4. data/CONTRIBUTING.md +45 -0
  5. data/{LICENSE.txt → LICENSE.md} +1 -1
  6. data/README.md +366 -0
  7. data/SECURITY.md +38 -0
  8. data/lib/tesla/api/alert_endpoints.rb +35 -0
  9. data/lib/tesla/api/charging_endpoints.rb +115 -0
  10. data/lib/tesla/api/climate_endpoints.rb +180 -0
  11. data/lib/tesla/api/closure_endpoints.rb +142 -0
  12. data/lib/tesla/api/command_endpoints.rb +63 -0
  13. data/lib/tesla/api/media_endpoints.rb +114 -0
  14. data/lib/tesla/api/navigation_endpoints.rb +51 -0
  15. data/lib/tesla/api/oauth_endpoints.rb +118 -0
  16. data/lib/tesla/api/partner_endpoints.rb +62 -0
  17. data/lib/tesla/api/security_endpoints.rb +123 -0
  18. data/lib/tesla/api/software_endpoints.rb +38 -0
  19. data/lib/tesla/api/user_endpoints.rb +40 -0
  20. data/lib/tesla/api/vehicle_endpoints.rb +174 -0
  21. data/lib/tesla/api.rb +39 -0
  22. data/lib/tesla/authenticator.rb +33 -0
  23. data/lib/tesla/bearer_token_authenticator.rb +38 -0
  24. data/lib/tesla/certificate_options.rb +51 -0
  25. data/lib/tesla/charge_state.rb +111 -0
  26. data/lib/tesla/charging_site.rb +67 -0
  27. data/lib/tesla/client.rb +336 -0
  28. data/lib/tesla/client_credentials.rb +230 -0
  29. data/lib/tesla/climate_state.rb +116 -0
  30. data/lib/tesla/configuration.rb +483 -0
  31. data/lib/tesla/connection.rb +361 -0
  32. data/lib/tesla/connection_pool.rb +186 -0
  33. data/lib/tesla/deep_copy.rb +41 -0
  34. data/lib/tesla/drive_state.rb +80 -0
  35. data/lib/tesla/errors/bad_gateway.rb +9 -0
  36. data/lib/tesla/errors/bad_request.rb +9 -0
  37. data/lib/tesla/errors/client_error.rb +9 -0
  38. data/lib/tesla/errors/command_failed.rb +42 -0
  39. data/lib/tesla/errors/device_unexpected_response.rb +12 -0
  40. data/lib/tesla/errors/error.rb +7 -0
  41. data/lib/tesla/errors/forbidden.rb +14 -0
  42. data/lib/tesla/errors/gateway_timeout.rb +9 -0
  43. data/lib/tesla/errors/http_error.rb +89 -0
  44. data/lib/tesla/errors/internal_server_error.rb +9 -0
  45. data/lib/tesla/errors/invalid_response.rb +33 -0
  46. data/lib/tesla/errors/locked.rb +12 -0
  47. data/lib/tesla/errors/method_not_allowed.rb +9 -0
  48. data/lib/tesla/errors/misdirected_request.rb +13 -0
  49. data/lib/tesla/errors/network_error.rb +30 -0
  50. data/lib/tesla/errors/not_acceptable.rb +9 -0
  51. data/lib/tesla/errors/not_found.rb +9 -0
  52. data/lib/tesla/errors/oauth_error.rb +53 -0
  53. data/lib/tesla/errors/payment_required.rb +12 -0
  54. data/lib/tesla/errors/precondition_failed.rb +13 -0
  55. data/lib/tesla/errors/request_timeout.rb +13 -0
  56. data/lib/tesla/errors/server_error.rb +9 -0
  57. data/lib/tesla/errors/service_unavailable.rb +9 -0
  58. data/lib/tesla/errors/too_many_redirects.rb +9 -0
  59. data/lib/tesla/errors/too_many_requests.rb +9 -0
  60. data/lib/tesla/errors/unauthorized.rb +9 -0
  61. data/lib/tesla/errors/unavailable_for_legal_reasons.rb +12 -0
  62. data/lib/tesla/errors/unprocessable_content.rb +12 -0
  63. data/lib/tesla/errors/vehicle_asleep.rb +32 -0
  64. data/lib/tesla/gui_settings.rb +60 -0
  65. data/lib/tesla/idempotence.rb +30 -0
  66. data/lib/tesla/identifiers.rb +27 -0
  67. data/lib/tesla/json_parsing.rb +38 -0
  68. data/lib/tesla/nearby_charging_sites.rb +35 -0
  69. data/lib/tesla/path_escaping.rb +30 -0
  70. data/lib/tesla/redacted_output.rb +161 -0
  71. data/lib/tesla/redirect_handler.rb +196 -0
  72. data/lib/tesla/region.rb +27 -0
  73. data/lib/tesla/request_builder.rb +138 -0
  74. data/lib/tesla/resource.rb +403 -0
  75. data/lib/tesla/response_parser.rb +92 -0
  76. data/lib/tesla/retry_after.rb +34 -0
  77. data/lib/tesla/retry_handler.rb +252 -0
  78. data/lib/tesla/settings.rb +115 -0
  79. data/lib/tesla/url_validation.rb +131 -0
  80. data/lib/tesla/user.rb +36 -0
  81. data/lib/tesla/vehicle.rb +90 -0
  82. data/lib/tesla/vehicle_config.rb +95 -0
  83. data/lib/tesla/vehicle_data.rb +67 -0
  84. data/lib/tesla/vehicle_state.rb +125 -0
  85. data/lib/tesla/version.rb +6 -0
  86. data/lib/tesla.rb +139 -0
  87. data/sig/manifest.yaml +10 -0
  88. data/sig/tesla.rbs +989 -0
  89. metadata +134 -118
  90. data/.document +0 -5
  91. data/.rvmrc +0 -1
  92. data/Gemfile +0 -13
  93. data/Gemfile.lock +0 -20
  94. data/README.rdoc +0 -19
  95. data/Rakefile +0 -47
  96. data/test/helper.rb +0 -19
  97. data/test/test_tesla.rb +0 -7
data/sig/tesla.rbs ADDED
@@ -0,0 +1,989 @@
1
+ module Tesla
2
+ VERSION: String
3
+
4
+ type vehicle_identifier = String | Integer | Vehicle
5
+ type request_body = Hash[Symbol | String, untyped] | Array[untyped] | String
6
+ type scope = Array[String] | String
7
+
8
+ interface _TokenRefresh
9
+ def call: (SimpleOAuth::OAuth2::Token token) -> untyped
10
+ end
11
+
12
+ extend Configuration
13
+ extend SingleForwardable
14
+
15
+ private def self.def_delegator: (interned accessor, Symbol method, ?Symbol ali) -> void
16
+ private def self.def_delegators: (interned accessor, *Symbol methods) -> void
17
+ private def self.def_single_delegator: (interned accessor, Symbol method, ?Symbol ali) -> void
18
+ private def self.def_single_delegators: (interned accessor, *Symbol methods) -> void
19
+ private def self.delegate: (Hash[Symbol | Array[Symbol], Symbol] hash) -> void
20
+ private def self.single_delegate: (Hash[Symbol | Array[Symbol], Symbol] hash) -> void
21
+
22
+ self.@client: Client
23
+ self.@client_values: Array[untyped]?
24
+ self.@applied_values: Array[untyped]?
25
+
26
+ CLIENT_MUTEX: Thread::Mutex
27
+ CLIENT_SETTINGS: Array[Symbol]
28
+ APPLIED_SETTINGS: Array[Symbol]
29
+
30
+ def self.client: () -> Client
31
+ def self.reset: () -> self
32
+ private def self.rebuild_client: () -> Array[untyped]
33
+ private def self.values_of: (Array[Symbol] settings) -> Array[untyped]
34
+ private def self.apply_settings: () -> Array[untyped]
35
+
36
+ def self.new: (?host: String, ?access_token: String?, ?refresh_token: String?, ?client_id: String?, ?client_secret: String?, ?redirect_uri: String?, ?audience: String?, ?authorization_endpoint: String, ?token_endpoint: String, ?on_token_refresh: _TokenRefresh?, ?user_agent: String, ?open_timeout: Numeric, ?read_timeout: Numeric, ?write_timeout: Numeric, ?debug_output: IO?, ?proxy_url: String?, ?keep_alive_timeout: Numeric, ?max_redirects: Integer, ?ca_file: String?, ?max_retries: Integer, ?max_retry_delay: Numeric) -> Client
37
+ | [T] (?host: String, ?access_token: String?, ?refresh_token: String?, ?client_id: String?, ?client_secret: String?, ?redirect_uri: String?, ?audience: String?, ?authorization_endpoint: String, ?token_endpoint: String, ?on_token_refresh: _TokenRefresh?, ?user_agent: String, ?open_timeout: Numeric, ?read_timeout: Numeric, ?write_timeout: Numeric, ?debug_output: IO?, ?proxy_url: String?, ?keep_alive_timeout: Numeric, ?max_redirects: Integer, ?ca_file: String?, ?max_retries: Integer, ?max_retry_delay: Numeric) { (Client client) -> T } -> T
38
+ def self.command: (vehicle_identifier vehicle, String | Symbol name, **untyped params) -> true
39
+ def self.honk_horn: (vehicle_identifier vehicle) -> true
40
+ def self.flash_lights: (vehicle_identifier vehicle) -> true
41
+ def self.open_charge_port: (vehicle_identifier vehicle) -> true
42
+ def self.close_charge_port: (vehicle_identifier vehicle) -> true
43
+ def self.start_charging: (vehicle_identifier vehicle) -> true
44
+ def self.stop_charging: (vehicle_identifier vehicle) -> true
45
+ def self.set_charge_limit: (vehicle_identifier vehicle, Integer percent) -> true
46
+ def self.set_charging_amps: (vehicle_identifier vehicle, Integer amps) -> true
47
+ def self.charge_to_standard_range: (vehicle_identifier vehicle) -> true
48
+ def self.charge_to_max_range: (vehicle_identifier vehicle) -> true
49
+ def self.start_climate: (vehicle_identifier vehicle) -> true
50
+ def self.stop_climate: (vehicle_identifier vehicle) -> true
51
+ def self.set_temperature: (vehicle_identifier vehicle, Numeric driver, ?Numeric passenger) -> true
52
+ def self.set_max_defrost: (vehicle_identifier vehicle, on: bool) -> true
53
+ def self.set_seat_heater: (vehicle_identifier vehicle, Symbol | String seat, Integer level) -> true
54
+ def self.set_seat_cooler: (vehicle_identifier vehicle, Symbol | String seat, Integer level) -> true
55
+ def self.set_steering_wheel_heater: (vehicle_identifier vehicle, on: bool) -> true
56
+ def self.set_climate_keeper_mode: (vehicle_identifier vehicle, Symbol | String mode) -> true
57
+ def self.set_bioweapon_mode: (vehicle_identifier vehicle, on: bool, ?manual_override: bool) -> true
58
+ def self.set_cabin_overheat_protection: (vehicle_identifier vehicle, on: bool, ?fan_only: bool) -> true
59
+ def self.lock_doors: (vehicle_identifier vehicle) -> true
60
+ def self.unlock_doors: (vehicle_identifier vehicle) -> true
61
+ def self.actuate_trunk: (vehicle_identifier vehicle) -> true
62
+ def self.open_frunk: (vehicle_identifier vehicle) -> true
63
+ def self.vent_windows: (vehicle_identifier vehicle) -> true
64
+ def self.close_windows: (vehicle_identifier vehicle, ?latitude: Numeric, ?longitude: Numeric) -> true
65
+ def self.vent_sunroof: (vehicle_identifier vehicle) -> true
66
+ def self.close_sunroof: (vehicle_identifier vehicle) -> true
67
+ def self.trigger_homelink: (vehicle_identifier vehicle, latitude: Numeric, longitude: Numeric) -> true
68
+ def self.toggle_playback: (vehicle_identifier vehicle) -> true
69
+ def self.next_track: (vehicle_identifier vehicle) -> true
70
+ def self.previous_track: (vehicle_identifier vehicle) -> true
71
+ def self.next_favorite: (vehicle_identifier vehicle) -> true
72
+ def self.previous_favorite: (vehicle_identifier vehicle) -> true
73
+ def self.volume_up: (vehicle_identifier vehicle) -> true
74
+ def self.volume_down: (vehicle_identifier vehicle) -> true
75
+ def self.set_volume: (vehicle_identifier vehicle, Numeric volume) -> true
76
+ def self.navigate_to: (vehicle_identifier vehicle, String destination, ?locale: String) -> true
77
+ def self.navigate_to_coordinates: (vehicle_identifier vehicle, Numeric latitude, Numeric longitude, ?order: Integer) -> true
78
+ def self.authorization_url: (state: String, ?pkce: SimpleOAuth::OAuth2::PKCE?, ?scope: scope, **String? params) -> String
79
+ def self.exchange_code: (String code, ?code_verifier: String?) -> SimpleOAuth::OAuth2::Token
80
+ def self.refresh_access_token: () -> SimpleOAuth::OAuth2::Token
81
+ def self.partner_token: (?scope: scope) -> SimpleOAuth::OAuth2::Token
82
+ def self.register_partner: (String domain) -> Hash[String, untyped]
83
+ def self.partner_public_key: (String domain) -> String
84
+ def self.set_sentry_mode: (vehicle_identifier vehicle, on: bool) -> true
85
+ def self.set_valet_mode: (vehicle_identifier vehicle, on: bool, ?password: String?) -> true
86
+ def self.reset_valet_pin: (vehicle_identifier vehicle) -> true
87
+ def self.remote_start: (vehicle_identifier vehicle) -> true
88
+ def self.set_speed_limit: (vehicle_identifier vehicle, Numeric mph) -> true
89
+ def self.activate_speed_limit: (vehicle_identifier vehicle, String pin) -> true
90
+ def self.deactivate_speed_limit: (vehicle_identifier vehicle, String pin) -> true
91
+ def self.clear_speed_limit_pin: (vehicle_identifier vehicle, String pin) -> true
92
+ def self.schedule_software_update: (vehicle_identifier vehicle, ?offset: Integer) -> true
93
+ def self.cancel_software_update: (vehicle_identifier vehicle) -> true
94
+ def self.me: () -> User
95
+ def self.region: () -> Region
96
+ def self.vehicles: (?page: Integer?, ?per_page: Integer?) -> Array[Vehicle]
97
+ def self.vehicle: (vehicle_identifier vehicle) -> Vehicle
98
+ def self.vehicle_data: (vehicle_identifier vehicle, ?endpoints: (Array[String | Symbol] | String | Symbol)?) -> VehicleData
99
+ def self.wake_up: (vehicle_identifier vehicle, ?timeout: Numeric?, ?interval: Numeric) -> Vehicle
100
+ def self.nearby_charging_sites: (vehicle_identifier vehicle) -> NearbyChargingSites
101
+ def self.mobile_enabled?: (vehicle_identifier vehicle) -> bool
102
+
103
+ module Configuration
104
+ include CertificateOptions
105
+ include Settings
106
+ extend Settings::Declaration
107
+ include URLValidation
108
+
109
+ NORTH_AMERICA_HOST: String
110
+ EUROPE_HOST: String
111
+ CHINA_HOST: String
112
+ DEFAULT_HOST: String
113
+ DEFAULT_AUTHORIZATION_ENDPOINT: String
114
+ DEFAULT_TOKEN_ENDPOINT: String
115
+ DEFAULT_USER_AGENT: String
116
+ ENVIRONMENT: Hash[Symbol, String]
117
+
118
+ attr_reader host: String
119
+ def host=: (String host) -> void
120
+ attr_accessor audience: String?
121
+ attr_accessor authorization_endpoint: String
122
+ attr_accessor token_endpoint: String
123
+ attr_accessor access_token: String?
124
+ attr_accessor refresh_token: String?
125
+ attr_accessor client_id: String?
126
+ attr_accessor client_secret: String?
127
+ attr_accessor redirect_uri: String?
128
+ attr_accessor on_token_refresh: _TokenRefresh?
129
+ attr_accessor user_agent: String
130
+ attr_accessor open_timeout: Numeric
131
+ attr_accessor read_timeout: Numeric
132
+ attr_accessor write_timeout: Numeric
133
+ attr_accessor keep_alive_timeout: Numeric
134
+ attr_accessor debug_output: IO?
135
+ attr_reader proxy_url: String?
136
+ def proxy_url=: (String? proxy_url) -> void
137
+ attr_accessor max_redirects: Integer
138
+ attr_accessor max_retries: Integer
139
+ attr_accessor max_retry_delay: Numeric
140
+ def self.extended: (Configuration base) -> void
141
+ def default_host: () -> String
142
+ def configure: () { (self) -> void } -> self
143
+ def reset: () -> self
144
+
145
+ private
146
+
147
+ def reset_credentials: () -> void
148
+ def reset_connection: () -> void
149
+ end
150
+
151
+ class Authenticator
152
+ AUTHENTICATION_HEADER: String
153
+
154
+ def header: (Net::HTTPRequest? request) -> Hash[String, String]
155
+ def inspect: () -> String
156
+ end
157
+
158
+ class BearerTokenAuthenticator < Authenticator
159
+ attr_reader access_token: String
160
+
161
+ def initialize: (access_token: String) -> void
162
+ def header: (Net::HTTPRequest? request) -> Hash[String, String]
163
+ end
164
+
165
+ module ClientCredentials
166
+ @token_mutex: Thread::Mutex
167
+ @audience: String?
168
+
169
+ attr_accessor access_token: String?
170
+ attr_accessor refresh_token: String?
171
+ attr_accessor client_id: String?
172
+ attr_accessor client_secret: String?
173
+ attr_accessor redirect_uri: String?
174
+ attr_writer audience: String?
175
+ attr_accessor authorization_endpoint: String
176
+ attr_accessor token_endpoint: String
177
+ attr_accessor on_token_refresh: _TokenRefresh?
178
+
179
+ def audience: () -> String
180
+ def host: () -> String
181
+
182
+ private
183
+
184
+ def connection: () -> Connection
185
+ def request_builder: () -> RequestBuilder
186
+ def redirect_handler: () -> RedirectHandler
187
+ def retry_handler: () -> RetryHandler
188
+ def initialize_credentials: (**untyped credentials) -> void
189
+ def authenticator_for: (String? access_token) -> Authenticator
190
+ def refreshable?: () -> bool
191
+ def exclusively: [T] () { () -> T } -> T
192
+ def renewed_access_token: (String? stale) -> String?
193
+ def refresh: () -> SimpleOAuth::OAuth2::Token
194
+ def store_token: (SimpleOAuth::OAuth2::Token token) -> SimpleOAuth::OAuth2::Token
195
+ def oauth_client: () -> SimpleOAuth::OAuth2::Client
196
+ def request_token: (SimpleOAuth::OAuth2::Request oauth_request) -> SimpleOAuth::OAuth2::Token
197
+ def perform_token_request: (SimpleOAuth::OAuth2::Request oauth_request) -> Net::HTTPResponse
198
+ end
199
+
200
+ class Resource
201
+ include DeepCopy
202
+ extend Declaration
203
+
204
+ module Declaration : Class
205
+ @attribute_names: Array[Symbol]?
206
+
207
+ def attribute: (Symbol name, *(String | Symbol) keys) -> Symbol
208
+ def predicate: (Symbol name, *(String | Symbol) keys) -> Symbol
209
+ def time_attribute: (Symbol name, *(String | Symbol) keys) -> Symbol
210
+ def resource_attribute: (Symbol name, singleton(Resource) resource_class, *(String | Symbol) keys) -> Symbol
211
+ def resource_list_attribute: (Symbol name, singleton(Resource) resource_class, *(String | Symbol) keys) -> Symbol
212
+ def attribute_names: () -> Array[Symbol]
213
+
214
+ private
215
+
216
+ def record_attribute: (Symbol name) -> Symbol
217
+ def keys_for: (Symbol name, Array[String | Symbol] keys) -> Array[String]
218
+ end
219
+
220
+ self.@inspect_readers: Array[Symbol]?
221
+ self.@identity_readers: Array[Symbol]?
222
+
223
+ attr_reader attributes: Hash[String, untyped]
224
+
225
+ def self.list: (Array[Hash[String | Symbol, untyped]] list) -> Array[instance]
226
+ def self.inspect_with: (*Symbol readers) -> Array[Symbol]
227
+ def self.inspect_readers: () -> Array[Symbol]
228
+ def self.identified_by: (*Symbol readers) -> Array[Symbol]
229
+ def self.identity_readers: () -> Array[Symbol]
230
+ def initialize: (Hash[String | Symbol, untyped] attributes) -> void
231
+ def []: (String | Symbol key) -> untyped
232
+ def deconstruct_keys: (Array[Symbol]? keys) -> Hash[Symbol, untyped]
233
+ def to_h: () -> Hash[String, untyped]
234
+ def inspect: () -> String
235
+ def to_s: () -> String
236
+ def identity: () -> (Array[untyped] | Hash[String, untyped])
237
+ def ==: (untyped other) -> bool
238
+ def eql?: (untyped other) -> bool
239
+ def hash: () -> Integer
240
+
241
+ private
242
+
243
+ def inspect_values: () -> Hash[Symbol, untyped]
244
+ def value_of: (Array[String] keys) -> untyped
245
+ def parse_time: (untyped value) -> Time
246
+ end
247
+
248
+ module DeepCopy
249
+ private
250
+
251
+ def deep_freeze: (untyped value) -> untyped
252
+ def deep_dup: (untyped value) -> untyped
253
+ end
254
+
255
+ class Vehicle < Resource
256
+ def id: () -> Integer?
257
+ def vehicle_id: () -> Integer?
258
+ def vin: () -> String?
259
+ def display_name: () -> String?
260
+ def state: () -> String?
261
+ def access_type: () -> String?
262
+ def api_version: () -> Integer?
263
+ def in_service?: () -> bool
264
+ def online?: () -> bool
265
+ end
266
+
267
+ class VehicleData < Vehicle
268
+ def charge_state: () -> ChargeState?
269
+ def climate_state: () -> ClimateState?
270
+ def drive_state: () -> DriveState?
271
+ def gui_settings: () -> GUISettings?
272
+ def vehicle_config: () -> VehicleConfig?
273
+ def vehicle_state: () -> VehicleState?
274
+ end
275
+
276
+ class ChargeState < Resource
277
+ def battery_level: () -> Integer?
278
+ def usable_battery_level: () -> Integer?
279
+ def battery_range: () -> Float?
280
+ def charge_limit: () -> Integer?
281
+ def charging_state: () -> String?
282
+ def charge_amps: () -> Integer?
283
+ def charge_rate: () -> Float?
284
+ def charger_power: () -> Integer?
285
+ def minutes_to_full_charge: () -> Integer?
286
+ def charge_port_latch: () -> String?
287
+ def charge_port_door_open?: () -> bool
288
+ def timestamp: () -> Time?
289
+ end
290
+
291
+ class ClimateState < Resource
292
+ def inside_temp: () -> Float?
293
+ def outside_temp: () -> Float?
294
+ def driver_temp_setting: () -> Float?
295
+ def passenger_temp_setting: () -> Float?
296
+ def fan_status: () -> Integer?
297
+ def climate_keeper_mode: () -> String?
298
+ def seat_heater_left: () -> Integer?
299
+ def seat_heater_right: () -> Integer?
300
+ def climate_on?: () -> bool
301
+ def preconditioning?: () -> bool
302
+ def front_defroster_on?: () -> bool
303
+ def rear_defroster_on?: () -> bool
304
+ def timestamp: () -> Time?
305
+ end
306
+
307
+ class DriveState < Resource
308
+ def latitude: () -> Float?
309
+ def longitude: () -> Float?
310
+ def heading: () -> Integer?
311
+ def speed: () -> Integer?
312
+ def power: () -> Integer?
313
+ def shift_state: () -> String?
314
+ def timestamp: () -> Time?
315
+ end
316
+
317
+ class VehicleState < Resource
318
+ def car_version: () -> String?
319
+ def odometer: () -> Float?
320
+ def vehicle_name: () -> String?
321
+ def sun_roof_state: () -> String?
322
+ def locked?: () -> bool
323
+ def sentry_mode?: () -> bool
324
+ def valet_mode?: () -> bool
325
+ def user_present?: () -> bool
326
+ def remote_start?: () -> bool
327
+ def timestamp: () -> Time?
328
+ def frunk_open?: () -> bool
329
+ def trunk_open?: () -> bool
330
+
331
+ private
332
+
333
+ def open?: (Integer? value) -> bool
334
+ end
335
+
336
+ class VehicleConfig < Resource
337
+ def car_type: () -> String?
338
+ def trim_badging: () -> String?
339
+ def exterior_color: () -> String?
340
+ def wheel_type: () -> String?
341
+ def charge_port_type: () -> String?
342
+ def sun_roof_installed: () -> Integer?
343
+ def can_actuate_trunks?: () -> bool
344
+ def power_liftgate?: () -> bool
345
+ def right_hand_drive?: () -> bool
346
+ def timestamp: () -> Time?
347
+ end
348
+
349
+ class GUISettings < Resource
350
+ def distance_units: () -> String?
351
+ def temperature_units: () -> String?
352
+ def charge_rate_units: () -> String?
353
+ def range_display: () -> String?
354
+ def twenty_four_hour_time?: () -> bool
355
+ def timestamp: () -> Time?
356
+ end
357
+
358
+ class User < Resource
359
+ def email: () -> String?
360
+ def full_name: () -> String?
361
+ def profile_image_url: () -> String?
362
+ end
363
+
364
+ class Region < Resource
365
+ def region: () -> String?
366
+ def fleet_api_base_url: () -> String?
367
+ end
368
+
369
+ class ChargingSite < Resource
370
+ def name: () -> String?
371
+ def type: () -> String?
372
+ def distance_miles: () -> Float?
373
+ def available_stalls: () -> Integer?
374
+ def total_stalls: () -> Integer?
375
+ def location: () -> Hash[String, Float]?
376
+ def site_closed?: () -> bool
377
+ end
378
+
379
+ class NearbyChargingSites < Resource
380
+ def superchargers: () -> Array[ChargingSite]
381
+ def destination_charging: () -> Array[ChargingSite]
382
+ def timestamp: () -> Time?
383
+ end
384
+
385
+ interface _Requests
386
+ def get: (String path, ?Hash[Symbol | String, untyped] params, ?headers: Hash[String, String]) -> String
387
+ def delete: (String path, ?Hash[Symbol | String, untyped] params, ?headers: Hash[String, String]) -> String
388
+ def post: (String path, ?request_body body, ?headers: Hash[String, String]) -> String
389
+ def put: (String path, ?request_body body, ?headers: Hash[String, String]) -> String
390
+ def patch: (String path, ?request_body body, ?headers: Hash[String, String]) -> String
391
+ end
392
+
393
+ module Identifiers
394
+ private
395
+
396
+ def tag_of: (vehicle_identifier vehicle) -> (String | Integer)?
397
+ end
398
+
399
+ module API : Object, _Requests, ClientCredentials
400
+ include AlertEndpoints
401
+ include ChargingEndpoints
402
+ include ClimateEndpoints
403
+ include ClosureEndpoints
404
+ include CommandEndpoints
405
+ include MediaEndpoints
406
+ include NavigationEndpoints
407
+ include OAuthEndpoints
408
+ include PartnerEndpoints
409
+ include SecurityEndpoints
410
+ include SoftwareEndpoints
411
+ include UserEndpoints
412
+ include VehicleEndpoints
413
+ end
414
+
415
+ module API::CommandEndpoints : Object, _Requests
416
+ include Identifiers
417
+ include JSONParsing
418
+ include PathEscaping
419
+
420
+ def command: (vehicle_identifier vehicle, String | Symbol name, **untyped params) -> true
421
+
422
+ private
423
+
424
+ def number_of: (Hash[Symbol, Integer] options, Symbol | String name, String kind) -> Integer
425
+ end
426
+
427
+ module API::AlertEndpoints : Object, API::CommandEndpoints
428
+ def honk_horn: (vehicle_identifier vehicle) -> true
429
+ def flash_lights: (vehicle_identifier vehicle) -> true
430
+ end
431
+
432
+ module API::ChargingEndpoints : Object, API::CommandEndpoints
433
+ def open_charge_port: (vehicle_identifier vehicle) -> true
434
+ def close_charge_port: (vehicle_identifier vehicle) -> true
435
+ def start_charging: (vehicle_identifier vehicle) -> true
436
+ def stop_charging: (vehicle_identifier vehicle) -> true
437
+ def set_charge_limit: (vehicle_identifier vehicle, Integer percent) -> true
438
+ def set_charging_amps: (vehicle_identifier vehicle, Integer amps) -> true
439
+ def charge_to_standard_range: (vehicle_identifier vehicle) -> true
440
+ def charge_to_max_range: (vehicle_identifier vehicle) -> true
441
+ end
442
+
443
+ module API::ClimateEndpoints : Object, API::CommandEndpoints
444
+ SEATS: Hash[Symbol, Integer]
445
+ CLIMATE_KEEPER_MODES: Hash[Symbol, Integer]
446
+
447
+ def start_climate: (vehicle_identifier vehicle) -> true
448
+ def stop_climate: (vehicle_identifier vehicle) -> true
449
+ def set_temperature: (vehicle_identifier vehicle, Numeric driver, ?Numeric passenger) -> true
450
+ def set_max_defrost: (vehicle_identifier vehicle, on: bool) -> true
451
+ def set_seat_heater: (vehicle_identifier vehicle, Symbol | String seat, Integer level) -> true
452
+ def set_seat_cooler: (vehicle_identifier vehicle, Symbol | String seat, Integer level) -> true
453
+ def set_steering_wheel_heater: (vehicle_identifier vehicle, on: bool) -> true
454
+ def set_climate_keeper_mode: (vehicle_identifier vehicle, Symbol | String mode) -> true
455
+ def set_bioweapon_mode: (vehicle_identifier vehicle, on: bool, ?manual_override: bool) -> true
456
+ def set_cabin_overheat_protection: (vehicle_identifier vehicle, on: bool, ?fan_only: bool) -> true
457
+ end
458
+
459
+ module API::ClosureEndpoints : Object, API::CommandEndpoints
460
+ def lock_doors: (vehicle_identifier vehicle) -> true
461
+ def unlock_doors: (vehicle_identifier vehicle) -> true
462
+ def actuate_trunk: (vehicle_identifier vehicle) -> true
463
+ def open_frunk: (vehicle_identifier vehicle) -> true
464
+ def vent_windows: (vehicle_identifier vehicle) -> true
465
+ def close_windows: (vehicle_identifier vehicle, ?latitude: Numeric, ?longitude: Numeric) -> true
466
+ def vent_sunroof: (vehicle_identifier vehicle) -> true
467
+ def close_sunroof: (vehicle_identifier vehicle) -> true
468
+ def trigger_homelink: (vehicle_identifier vehicle, latitude: Numeric, longitude: Numeric) -> true
469
+ end
470
+
471
+ module API::MediaEndpoints : Object, API::CommandEndpoints
472
+ def toggle_playback: (vehicle_identifier vehicle) -> true
473
+ def next_track: (vehicle_identifier vehicle) -> true
474
+ def previous_track: (vehicle_identifier vehicle) -> true
475
+ def next_favorite: (vehicle_identifier vehicle) -> true
476
+ def previous_favorite: (vehicle_identifier vehicle) -> true
477
+ def volume_up: (vehicle_identifier vehicle) -> true
478
+ def volume_down: (vehicle_identifier vehicle) -> true
479
+ def set_volume: (vehicle_identifier vehicle, Numeric volume) -> true
480
+ end
481
+
482
+ module API::NavigationEndpoints : Object, API::CommandEndpoints
483
+ NAVIGATION_REQUEST_TYPE: String
484
+ NAVIGATION_REQUEST_TEXT: String
485
+
486
+ def navigate_to: (vehicle_identifier vehicle, String destination, ?locale: String) -> true
487
+ def navigate_to_coordinates: (vehicle_identifier vehicle, Numeric latitude, Numeric longitude, ?order: Integer) -> true
488
+ end
489
+
490
+ module API::OAuthEndpoints : Object, ClientCredentials
491
+ SCOPES: Array[String]
492
+ PARTNER_SCOPES: Array[String]
493
+
494
+ def authorization_url: (state: String, ?pkce: SimpleOAuth::OAuth2::PKCE?, ?scope: scope, **String? params) -> String
495
+ def exchange_code: (String code, ?code_verifier: String?) -> SimpleOAuth::OAuth2::Token
496
+ def refresh_access_token: () -> SimpleOAuth::OAuth2::Token
497
+ def partner_token: (?scope: scope) -> SimpleOAuth::OAuth2::Token
498
+
499
+ private
500
+
501
+ def required_redirect_uri: () -> String
502
+ end
503
+
504
+ module API::PartnerEndpoints : Object, _Requests, API::OAuthEndpoints
505
+ include JSONParsing
506
+
507
+ def register_partner: (String domain) -> Hash[String, untyped]
508
+ def partner_public_key: (String domain) -> String
509
+
510
+ private
511
+
512
+ def partner_headers: () -> Hash[String, String]
513
+ end
514
+
515
+ module API::SecurityEndpoints : Object, API::CommandEndpoints
516
+ def set_sentry_mode: (vehicle_identifier vehicle, on: bool) -> true
517
+ def set_valet_mode: (vehicle_identifier vehicle, on: bool, ?password: String?) -> true
518
+ def reset_valet_pin: (vehicle_identifier vehicle) -> true
519
+ def remote_start: (vehicle_identifier vehicle) -> true
520
+ def set_speed_limit: (vehicle_identifier vehicle, Numeric mph) -> true
521
+ def activate_speed_limit: (vehicle_identifier vehicle, String pin) -> true
522
+ def deactivate_speed_limit: (vehicle_identifier vehicle, String pin) -> true
523
+ def clear_speed_limit_pin: (vehicle_identifier vehicle, String pin) -> true
524
+ end
525
+
526
+ module API::SoftwareEndpoints : Object, API::CommandEndpoints
527
+ def schedule_software_update: (vehicle_identifier vehicle, ?offset: Integer) -> true
528
+ def cancel_software_update: (vehicle_identifier vehicle) -> true
529
+ end
530
+
531
+ module API::UserEndpoints : Object, _Requests
532
+ include JSONParsing
533
+
534
+ def me: () -> User
535
+ def region: () -> Region
536
+ end
537
+
538
+ module API::VehicleEndpoints : Object, _Requests
539
+ include Identifiers
540
+ include JSONParsing
541
+ include PathEscaping
542
+
543
+ DEFAULT_WAKE_INTERVAL: Numeric
544
+
545
+ def vehicles: (?page: Integer?, ?per_page: Integer?) -> Array[Vehicle]
546
+ def vehicle: (vehicle_identifier vehicle) -> Vehicle
547
+ def vehicle_data: (vehicle_identifier vehicle, ?endpoints: (Array[String | Symbol] | String | Symbol)?) -> VehicleData
548
+ def wake_up: (vehicle_identifier vehicle, ?timeout: Numeric?, ?interval: Numeric) -> Vehicle
549
+ def nearby_charging_sites: (vehicle_identifier vehicle) -> NearbyChargingSites
550
+ def mobile_enabled?: (vehicle_identifier vehicle) -> bool
551
+
552
+ private
553
+
554
+ def vehicle_path: (vehicle_identifier vehicle) -> String
555
+ def await_online: (Vehicle woken, Numeric deadline, Numeric interval) -> Vehicle
556
+ def monotonic_time: () -> Float
557
+ end
558
+
559
+ class Client
560
+ include API
561
+ extend Forwardable
562
+ include ClientCredentials
563
+ include Idempotence
564
+ include URLValidation
565
+
566
+ private def self.def_delegator: (interned accessor, Symbol method, ?Symbol ali) -> void
567
+ private def self.def_delegators: (interned accessor, *Symbol methods) -> void
568
+ private def self.def_instance_delegator: (interned accessor, Symbol method, ?Symbol ali) -> void
569
+ private def self.def_instance_delegators: (interned accessor, *Symbol methods) -> void
570
+ private def self.delegate: (Hash[Symbol | Array[Symbol], Symbol] hash) -> void
571
+ private def self.instance_delegate: (Hash[Symbol | Array[Symbol], Symbol] hash) -> void
572
+
573
+ @connection: Connection
574
+ @request_builder: RequestBuilder
575
+ @redirect_handler: RedirectHandler
576
+ @retry_handler: RetryHandler
577
+ @response_parser: ResponseParser
578
+
579
+ UNAUTHORIZED_STATUS: String
580
+
581
+ attr_reader host: String
582
+
583
+ def host=: (String host) -> void
584
+ def inspect: () -> String
585
+ def open_timeout: () -> Numeric
586
+ def read_timeout: () -> Numeric
587
+ def write_timeout: () -> Numeric
588
+ def proxy_url: () -> String?
589
+ def debug_output: () -> IO?
590
+ def keep_alive_timeout: () -> Numeric
591
+ def ca_file: () -> String?
592
+ def debug_output=: (IO? debug_output) -> void
593
+ def keep_alive_timeout=: (Numeric keep_alive_timeout) -> void
594
+ def max_redirects: () -> Integer
595
+ def max_redirects=: (Integer max_redirects) -> void
596
+ def open_timeout=: (Numeric open_timeout) -> void
597
+ def read_timeout=: (Numeric read_timeout) -> void
598
+ def write_timeout=: (Numeric write_timeout) -> void
599
+ def proxy_url=: (String? proxy_url) -> void
600
+ def ca_file=: (String? ca_file) -> void
601
+ def max_retries: () -> Integer
602
+ def max_retries=: (Integer max_retries) -> void
603
+ def max_retry_delay: () -> Numeric
604
+ def max_retry_delay=: (Numeric max_retry_delay) -> void
605
+ def user_agent: () -> String
606
+ def user_agent=: (String user_agent) -> void
607
+
608
+ def self.new: (?host: String, ?access_token: String?, ?refresh_token: String?, ?client_id: String?, ?client_secret: String?, ?redirect_uri: String?, ?audience: String?, ?authorization_endpoint: String, ?token_endpoint: String, ?on_token_refresh: _TokenRefresh?, ?user_agent: String, ?open_timeout: Numeric, ?read_timeout: Numeric, ?write_timeout: Numeric, ?debug_output: IO?, ?proxy_url: String?, ?keep_alive_timeout: Numeric, ?max_redirects: Integer, ?ca_file: String?, ?max_retries: Integer, ?max_retry_delay: Numeric) -> Client
609
+ | [T] (?host: String, ?access_token: String?, ?refresh_token: String?, ?client_id: String?, ?client_secret: String?, ?redirect_uri: String?, ?audience: String?, ?authorization_endpoint: String, ?token_endpoint: String, ?on_token_refresh: _TokenRefresh?, ?user_agent: String, ?open_timeout: Numeric, ?read_timeout: Numeric, ?write_timeout: Numeric, ?debug_output: IO?, ?proxy_url: String?, ?keep_alive_timeout: Numeric, ?max_redirects: Integer, ?ca_file: String?, ?max_retries: Integer, ?max_retry_delay: Numeric) { (Client client) -> T } -> T
610
+ def initialize: (?host: String, ?access_token: String?, ?refresh_token: String?, ?client_id: String?, ?client_secret: String?, ?redirect_uri: String?, ?audience: String?, ?authorization_endpoint: String, ?token_endpoint: String, ?on_token_refresh: _TokenRefresh?, ?user_agent: String, ?open_timeout: Numeric, ?read_timeout: Numeric, ?write_timeout: Numeric, ?debug_output: IO?, ?proxy_url: String?, ?keep_alive_timeout: Numeric, ?max_redirects: Integer, ?ca_file: String?, ?max_retries: Integer, ?max_retry_delay: Numeric) -> void
611
+ def close: () -> self
612
+ def get: (String path, ?Hash[Symbol | String, untyped] params, ?headers: Hash[String, String]) -> String
613
+ def delete: (String path, ?Hash[Symbol | String, untyped] params, ?headers: Hash[String, String]) -> String
614
+ def post: (String path, ?request_body body, ?headers: Hash[String, String]) -> String
615
+ def put: (String path, ?request_body body, ?headers: Hash[String, String]) -> String
616
+ def patch: (String path, ?request_body body, ?headers: Hash[String, String]) -> String
617
+
618
+ private
619
+
620
+ attr_reader connection: Connection
621
+ attr_reader request_builder: RequestBuilder
622
+ attr_reader redirect_handler: RedirectHandler
623
+ attr_reader retry_handler: RetryHandler
624
+
625
+ def execute_request: (Symbol http_method, String path, headers: Hash[String, String], ?params: Hash[Symbol | String, untyped], ?body: request_body?) -> String
626
+ def perform: (access_token: String?, http_method: Symbol, uri: URI::Generic, params: Hash[Symbol | String, untyped], body: request_body?, headers: Hash[String, String]) -> Net::HTTPResponse
627
+ end
628
+
629
+ class Error < StandardError
630
+ end
631
+
632
+ class HTTPError < Error
633
+ include RetryAfter
634
+
635
+ attr_reader response: Net::HTTPResponse
636
+ attr_reader code: Integer
637
+
638
+ def initialize: (response: Net::HTTPResponse) -> void
639
+ def retry_after: () -> Integer?
640
+
641
+ private
642
+
643
+ def error_message: (Net::HTTPResponse response) -> String
644
+ def described_error: (String body) -> String?
645
+ end
646
+
647
+ class ClientError < HTTPError
648
+ end
649
+
650
+ class ServerError < HTTPError
651
+ end
652
+
653
+ class BadRequest < ClientError
654
+ end
655
+
656
+ class Unauthorized < ClientError
657
+ end
658
+
659
+ class PaymentRequired < ClientError
660
+ end
661
+
662
+ class Forbidden < ClientError
663
+ end
664
+
665
+ class NotFound < ClientError
666
+ end
667
+
668
+ class MethodNotAllowed < ClientError
669
+ end
670
+
671
+ class NotAcceptable < ClientError
672
+ end
673
+
674
+ class RequestTimeout < ClientError
675
+ end
676
+
677
+ class PreconditionFailed < ClientError
678
+ end
679
+
680
+ class MisdirectedRequest < ClientError
681
+ end
682
+
683
+ class UnprocessableContent < ClientError
684
+ end
685
+
686
+ class Locked < ClientError
687
+ end
688
+
689
+ class TooManyRequests < ClientError
690
+ end
691
+
692
+ class UnavailableForLegalReasons < ClientError
693
+ end
694
+
695
+ class InternalServerError < ServerError
696
+ end
697
+
698
+ class BadGateway < ServerError
699
+ end
700
+
701
+ class ServiceUnavailable < ServerError
702
+ end
703
+
704
+ class GatewayTimeout < ServerError
705
+ end
706
+
707
+ class DeviceUnexpectedResponse < ServerError
708
+ end
709
+
710
+ class TooManyRedirects < Error
711
+ end
712
+
713
+ class NetworkError < Error
714
+ WRAPPED: Array[singleton(IOError) | singleton(Net::HTTPBadResponse) | singleton(Net::ProtocolError) | singleton(OpenSSL::SSL::SSLError) | singleton(SocketError) | singleton(SystemCallError) | singleton(Timeout::Error) | singleton(Zlib::Error)]
715
+ end
716
+
717
+ class InvalidResponse < Error
718
+ attr_reader body: String
719
+
720
+ def initialize: (body: String, ?message: String) -> void
721
+ end
722
+
723
+ class CommandFailed < Error
724
+ attr_reader command: String
725
+ attr_reader reason: String
726
+
727
+ def initialize: (command: String, reason: String?) -> void
728
+ end
729
+
730
+ class VehicleAsleep < Error
731
+ attr_reader vehicle: Vehicle
732
+
733
+ def initialize: (vehicle: Vehicle) -> void
734
+ end
735
+
736
+ class OAuthError < Error
737
+ attr_reader code: String?
738
+ attr_reader description: String?
739
+ attr_reader status: Integer?
740
+
741
+ def initialize: (?code: String?, ?description: String?, ?status: Integer?) -> void
742
+ end
743
+
744
+ module PathEscaping
745
+ private
746
+
747
+ def escape: (untyped value) -> String
748
+ end
749
+
750
+ module JSONParsing
751
+ SHAPE_ERRORS: Array[singleton(KeyError) | singleton(NoMethodError) | singleton(TypeError)]
752
+
753
+ private
754
+
755
+ def parse_response: (String body) -> untyped
756
+ | [T] (String body) { (untyped response) -> T } -> T
757
+ end
758
+
759
+ class RedactedOutput
760
+ REDACTION: String
761
+ CREDENTIALS: Array[Regexp]
762
+ READ: String
763
+ READING: String
764
+ DONE: String
765
+ CHUNK_END: String
766
+
767
+ @output: IO
768
+ @lines: Array[String]?
769
+ @body: String?
770
+ @reading: bool?
771
+
772
+ attr_reader output: IO
773
+
774
+ def initialize: (IO output) -> void
775
+ def <<: (String string) -> self
776
+
777
+ private
778
+
779
+ def hold: (Array[String] lines, String string) -> void
780
+ def read: (Array[String] lines, String string) -> void
781
+ def flush: (Array[String] lines) -> void
782
+ def write: (String string) -> void
783
+ end
784
+
785
+ class ConnectionPool
786
+ include Idempotence
787
+
788
+ @connections: Hash[untyped, untyped]
789
+ @mutex: Thread::Mutex
790
+
791
+ def initialize: () -> void
792
+ def checkout: (request: Net::HTTPRequest, settings: untyped, keep_alive_timeout: Numeric) { () -> Net::HTTP } -> Net::HTTP
793
+ def checkin: (request: Net::HTTPRequest, http_client: Net::HTTP, settings: untyped, keep_alive_timeout: Numeric) -> void
794
+ def discard: (Net::HTTP? http_client) -> void
795
+ def take: (untyped key, untyped settings) -> Net::HTTP?
796
+ def store: (untyped key, Net::HTTP http_client, untyped settings) -> bool
797
+ def close: () -> self
798
+
799
+ private
800
+
801
+ def delete: (untyped key) -> Net::HTTP?
802
+ def opened_here?: (Integer? pid) -> bool
803
+ def keep_alive?: (Net::HTTPRequest request, Numeric keep_alive_timeout) -> bool
804
+ def pool_key: (Net::HTTPRequest request) -> [String?, String?, Integer?]
805
+ end
806
+
807
+ class Connection
808
+ include CertificateOptions
809
+ include Settings
810
+ extend Settings::Declaration
811
+ include URLValidation
812
+
813
+ @pool: ConnectionPool
814
+
815
+ DEFAULT_OPEN_TIMEOUT: Numeric
816
+ DEFAULT_READ_TIMEOUT: Numeric
817
+ DEFAULT_WRITE_TIMEOUT: Numeric
818
+ DEFAULT_KEEP_ALIVE_TIMEOUT: Numeric
819
+
820
+ attr_accessor open_timeout: Numeric
821
+ attr_accessor read_timeout: Numeric
822
+ attr_accessor write_timeout: Numeric
823
+ attr_accessor keep_alive_timeout: Numeric
824
+ attr_accessor debug_output: IO?
825
+ attr_reader proxy_url: String?
826
+ attr_reader proxy_uri: URI::Generic?
827
+
828
+ def initialize: (?open_timeout: Numeric, ?read_timeout: Numeric, ?write_timeout: Numeric, ?debug_output: IO?, ?proxy_url: String?, ?keep_alive_timeout: Numeric, ?ca_file: String?) -> void
829
+ def inspect: () -> String
830
+ def perform: (request: Net::HTTPRequest) -> Net::HTTPResponse
831
+ def close: () -> self
832
+ def proxy_url=: (String? proxy_url) -> void
833
+
834
+ private
835
+
836
+ attr_reader pool: ConnectionPool
837
+
838
+ def settings_for: (URI::Generic uri) -> Hash[Symbol, untyped]
839
+ def send_request: (Net::HTTPRequest request, Hash[Symbol, untyped] opened_with) -> Net::HTTPResponse
840
+ def request_on: (Net::HTTP http_client, Net::HTTPRequest request) -> Net::HTTPResponse
841
+ def decode: (String? component) -> String?
842
+ def build_http_client: (URI::Generic uri, Hash[Symbol, untyped] opened_with) -> Net::HTTP
843
+ def proxy_arguments_for: (URI::Generic? proxy) -> [String?, Integer?, String?, String?, bool?]
844
+ def configure_timeouts: (Net::HTTP http_client, Hash[Symbol, untyped] opened_with) -> Net::HTTP
845
+ def configure_http_client: (Net::HTTP http_client, Hash[Symbol, untyped] opened_with) -> Net::HTTP
846
+ end
847
+
848
+ class RedirectHandler
849
+ include Settings
850
+ extend Settings::Declaration
851
+ include URLValidation
852
+
853
+ DEFAULT_MAX_REDIRECTS: Integer
854
+ METHOD_PRESERVING_CODES: Array[Integer]
855
+
856
+ attr_accessor max_redirects: Integer
857
+ attr_reader connection: Connection
858
+ attr_reader request_builder: RequestBuilder
859
+
860
+ def initialize: (?connection: Connection, ?request_builder: RequestBuilder, ?max_redirects: Integer) -> void
861
+ def handle: (response: Net::HTTPResponse, request: Net::HTTPRequest, ?authenticator: Authenticator, ?body: request_body?, ?headers: Hash[String, String], ?redirect_count: Integer) -> Net::HTTPResponse
862
+
863
+ private
864
+
865
+ def follow: (response: Net::HTTPResponse, request: Net::HTTPRequest, uri: URI::HTTP, authenticator: Authenticator, body: request_body?, headers: Hash[String, String], redirect_count: Integer) -> Net::HTTPResponse
866
+ def replays_body?: (Integer response_code, request_body? body) -> bool
867
+ def method_preserving?: (Integer response_code) -> bool
868
+ def build_new_uri: (Net::HTTPResponse response, Net::HTTPRequest request) -> URI::HTTP?
869
+ def build_request: (request: Net::HTTPRequest, uri: URI::Generic, response_code: Integer, authenticator: Authenticator, body: request_body?, headers: Hash[String, String]) -> Net::HTTPRequest
870
+ end
871
+
872
+ class RequestBuilder
873
+ DEFAULT_USER_AGENT: String
874
+ APPLICATION_JSON: String
875
+ HTTP_METHODS: Hash[Symbol, singleton(Net::HTTP::Get) | singleton(Net::HTTP::Post) | singleton(Net::HTTP::Put) | singleton(Net::HTTP::Patch) | singleton(Net::HTTP::Delete)]
876
+
877
+ attr_accessor user_agent: String
878
+
879
+ def initialize: (?user_agent: String) -> void
880
+ def build: (http_method: Symbol, uri: URI::Generic, ?params: Hash[Symbol | String, untyped], ?body: request_body?, ?headers: Hash[String, String], ?authenticator: Authenticator) -> Net::HTTPRequest
881
+
882
+ private
883
+
884
+ def create_request: (http_method: Symbol, uri: URI::Generic, params: Hash[Symbol | String, untyped]) -> Net::HTTPRequest
885
+ def add_query_params: (URI::Generic uri, Hash[Symbol | String, untyped] params) -> URI::Generic
886
+ def add_headers: (request: Net::HTTPRequest, headers: Hash[String, String]) -> void
887
+ def add_body: (request: Net::HTTPRequest, body: request_body?) -> void
888
+ def add_authentication: (request: Net::HTTPRequest, authenticator: Authenticator) -> void
889
+ end
890
+
891
+ class ResponseParser
892
+ ERROR_MAP: Hash[Integer, singleton(HTTPError)]
893
+ STATUS_CLASS_ERRORS: Hash[Integer, singleton(HTTPError)]
894
+
895
+ def parse: (response: Net::HTTPResponse) -> String
896
+
897
+ private
898
+
899
+ def error: (Net::HTTPResponse response) -> HTTPError
900
+ def error_class: (Net::HTTPResponse response) -> singleton(HTTPError)
901
+ end
902
+
903
+ module CertificateOptions
904
+ attr_reader ca_file: String?
905
+
906
+ def ca_file=: (String? ca_file) -> void
907
+
908
+ private
909
+
910
+ def validate_ca_file: (String ca_file) -> String
911
+ end
912
+
913
+ module Settings
914
+ module Declaration : Module
915
+ def seconds_setting: (Symbol name) -> Symbol
916
+ def count_setting: (Symbol name) -> Symbol
917
+ def environment_setting: (Symbol name, String variable) -> Array[Symbol]
918
+ end
919
+
920
+ def self.included: (Module base) -> void
921
+
922
+ private
923
+
924
+ def validate_number: (Symbol name, untyped number) -> Numeric
925
+ def validate_count: (Symbol name, untyped count) -> Integer
926
+ end
927
+
928
+ module URLValidation
929
+ private
930
+
931
+ def validate_host: (String host) -> String
932
+ def parse_proxy_uri: (String proxy_url) -> URI::HTTP
933
+ def http_url?: (untyped host) -> bool
934
+ def build_uri: (String host, String path) -> URI::Generic
935
+ def same_origin?: (String | URI::Generic url, String | URI::Generic other) -> bool
936
+ def on_host?: (URI::Generic uri, String | URI::Generic host) -> bool
937
+ def origin: (String | URI::Generic url) -> [String?, String?, Integer?]
938
+ def redact: (String? url) -> String?
939
+ end
940
+
941
+ module RetryAfter
942
+ DELTA_SECONDS: Regexp
943
+
944
+ private
945
+
946
+ def retry_after_of: (Net::HTTPResponse response) -> Integer?
947
+ end
948
+
949
+ module Idempotence
950
+ SAFE_METHODS: Array[String]
951
+
952
+ private
953
+
954
+ def safe?: (String | Symbol http_method) -> bool
955
+ end
956
+
957
+ interface _Random
958
+ def rand: () -> Float
959
+ end
960
+
961
+ class RetryHandler
962
+ include RetryAfter
963
+ include Settings
964
+ extend Settings::Declaration
965
+
966
+ DEFAULT_MAX_RETRIES: Integer
967
+ DEFAULT_MAX_RETRY_DELAY: Numeric
968
+ THROTTLED_STATUS: Integer
969
+ UNANSWERED_STATUSES: Array[Integer]
970
+
971
+ attr_accessor max_retries: Integer
972
+ attr_accessor max_retry_delay: Numeric
973
+ attr_reader random: _Random
974
+
975
+ def initialize: (?max_retries: Integer, ?max_retry_delay: Numeric, ?random: _Random) -> void
976
+ def handle: (retry_unanswered: bool) { () -> Net::HTTPResponse } -> Net::HTTPResponse
977
+
978
+ private
979
+
980
+ def attempt: (retries: Integer, retry_unanswered: bool) { () -> Net::HTTPResponse } -> Net::HTTPResponse?
981
+ def wait: (Numeric delay) -> nil
982
+ def retry_delay: (response: Net::HTTPResponse, retries: Integer, unanswered: bool) -> Numeric?
983
+ def network_retry_delay: (retries: Integer, allowed: bool) -> Numeric?
984
+ def retryable?: (bool allowed, Integer retries) -> bool
985
+ def capped: (Integer delay) -> Integer?
986
+ def retry?: (Net::HTTPResponse response, bool unanswered) -> bool
987
+ def backoff: (Integer retries) -> Numeric
988
+ end
989
+ end