galaxy-ruby 0.2.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +8 -0
- data/LICENSE +201 -0
- data/README.md +169 -0
- data/SECURITY.md +19 -0
- data/SKILL.md +83 -0
- data/api.md +188 -0
- data/lib/galaxy-ruby/client.rb +254 -0
- data/lib/galaxy-ruby/errors.rb +227 -0
- data/lib/galaxy-ruby/file_part.rb +58 -0
- data/lib/galaxy-ruby/internal/transport/base_client.rb +576 -0
- data/lib/galaxy-ruby/internal/transport/pooled_net_requester.rb +224 -0
- data/lib/galaxy-ruby/internal/type/array_of.rb +164 -0
- data/lib/galaxy-ruby/internal/type/base_model.rb +529 -0
- data/lib/galaxy-ruby/internal/type/base_page.rb +55 -0
- data/lib/galaxy-ruby/internal/type/boolean.rb +77 -0
- data/lib/galaxy-ruby/internal/type/converter.rb +333 -0
- data/lib/galaxy-ruby/internal/type/enum.rb +130 -0
- data/lib/galaxy-ruby/internal/type/file_input.rb +111 -0
- data/lib/galaxy-ruby/internal/type/hash_of.rb +184 -0
- data/lib/galaxy-ruby/internal/type/request_parameters.rb +42 -0
- data/lib/galaxy-ruby/internal/type/union.rb +234 -0
- data/lib/galaxy-ruby/internal/type/unknown.rb +81 -0
- data/lib/galaxy-ruby/internal/util.rb +960 -0
- data/lib/galaxy-ruby/internal.rb +15 -0
- data/lib/galaxy-ruby/models/authentication_create_token_params.rb +14 -0
- data/lib/galaxy-ruby/models/authentication_create_token_response.rb +16 -0
- data/lib/galaxy-ruby/models/authentication_create_user_params.rb +32 -0
- data/lib/galaxy-ruby/models/authentication_list_me_params.rb +14 -0
- data/lib/galaxy-ruby/models/celestial_body.rb +81 -0
- data/lib/galaxy-ruby/models/celestial_body_create_params.rb +20 -0
- data/lib/galaxy-ruby/models/credentials.rb +25 -0
- data/lib/galaxy-ruby/models/new_planet_webhook_event.rb +216 -0
- data/lib/galaxy-ruby/models/planet.rb +218 -0
- data/lib/galaxy-ruby/models/planet_create_params.rb +14 -0
- data/lib/galaxy-ruby/models/planet_delete_params.rb +20 -0
- data/lib/galaxy-ruby/models/planet_delte_image_params.rb +29 -0
- data/lib/galaxy-ruby/models/planet_delte_image_response.rb +48 -0
- data/lib/galaxy-ruby/models/planet_list_all_data_params.rb +30 -0
- data/lib/galaxy-ruby/models/planet_list_all_data_response.rb +51 -0
- data/lib/galaxy-ruby/models/planet_retrieve_params.rb +20 -0
- data/lib/galaxy-ruby/models/planet_update_params.rb +20 -0
- data/lib/galaxy-ruby/models/unwrap_webhook_event.rb +14 -0
- data/lib/galaxy-ruby/models/user.rb +26 -0
- data/lib/galaxy-ruby/models/webhook_unwrap_params.rb +14 -0
- data/lib/galaxy-ruby/models.rb +78 -0
- data/lib/galaxy-ruby/request_options.rb +77 -0
- data/lib/galaxy-ruby/resources/authentication.rb +80 -0
- data/lib/galaxy-ruby/resources/celestial_bodies.rb +37 -0
- data/lib/galaxy-ruby/resources/planets.rb +215 -0
- data/lib/galaxy-ruby/resources/webhooks.rb +34 -0
- data/lib/galaxy-ruby/version.rb +5 -0
- data/lib/galaxy-ruby.rb +78 -0
- data/rbi/galaxy-ruby/client.rbi +128 -0
- data/rbi/galaxy-ruby/errors.rbi +205 -0
- data/rbi/galaxy-ruby/file_part.rbi +37 -0
- data/rbi/galaxy-ruby/internal/transport/base_client.rbi +305 -0
- data/rbi/galaxy-ruby/internal/transport/pooled_net_requester.rbi +84 -0
- data/rbi/galaxy-ruby/internal/type/array_of.rbi +104 -0
- data/rbi/galaxy-ruby/internal/type/base_model.rbi +314 -0
- data/rbi/galaxy-ruby/internal/type/base_page.rbi +43 -0
- data/rbi/galaxy-ruby/internal/type/boolean.rbi +58 -0
- data/rbi/galaxy-ruby/internal/type/converter.rbi +222 -0
- data/rbi/galaxy-ruby/internal/type/enum.rbi +82 -0
- data/rbi/galaxy-ruby/internal/type/file_input.rbi +59 -0
- data/rbi/galaxy-ruby/internal/type/hash_of.rbi +104 -0
- data/rbi/galaxy-ruby/internal/type/request_parameters.rbi +31 -0
- data/rbi/galaxy-ruby/internal/type/union.rbi +128 -0
- data/rbi/galaxy-ruby/internal/type/unknown.rbi +58 -0
- data/rbi/galaxy-ruby/internal/util.rbi +515 -0
- data/rbi/galaxy-ruby/internal.rbi +18 -0
- data/rbi/galaxy-ruby/models/authentication_create_token_params.rbi +32 -0
- data/rbi/galaxy-ruby/models/authentication_create_token_response.rbi +29 -0
- data/rbi/galaxy-ruby/models/authentication_create_user_params.rbi +54 -0
- data/rbi/galaxy-ruby/models/authentication_list_me_params.rbi +32 -0
- data/rbi/galaxy-ruby/models/celestial_body.rbi +140 -0
- data/rbi/galaxy-ruby/models/celestial_body_create_params.rbi +53 -0
- data/rbi/galaxy-ruby/models/credentials.rbi +27 -0
- data/rbi/galaxy-ruby/models/new_planet_webhook_event.rbi +396 -0
- data/rbi/galaxy-ruby/models/planet.rbi +350 -0
- data/rbi/galaxy-ruby/models/planet_create_params.rbi +32 -0
- data/rbi/galaxy-ruby/models/planet_delete_params.rbi +38 -0
- data/rbi/galaxy-ruby/models/planet_delte_image_params.rbi +55 -0
- data/rbi/galaxy-ruby/models/planet_delte_image_response.rbi +85 -0
- data/rbi/galaxy-ruby/models/planet_list_all_data_params.rbi +60 -0
- data/rbi/galaxy-ruby/models/planet_list_all_data_response.rbi +110 -0
- data/rbi/galaxy-ruby/models/planet_retrieve_params.rbi +38 -0
- data/rbi/galaxy-ruby/models/planet_update_params.rbi +38 -0
- data/rbi/galaxy-ruby/models/unwrap_webhook_event.rbi +17 -0
- data/rbi/galaxy-ruby/models/user.rbi +33 -0
- data/rbi/galaxy-ruby/models/webhook_unwrap_params.rbi +32 -0
- data/rbi/galaxy-ruby/models.rbi +39 -0
- data/rbi/galaxy-ruby/request_options.rbi +59 -0
- data/rbi/galaxy-ruby/resources/authentication.rbi +47 -0
- data/rbi/galaxy-ruby/resources/celestial_bodies.rbi +28 -0
- data/rbi/galaxy-ruby/resources/planets.rbi +176 -0
- data/rbi/galaxy-ruby/resources/webhooks.rbi +29 -0
- data/rbi/galaxy-ruby/version.rbi +5 -0
- data/sig/galaxy-ruby/client.rbs +62 -0
- data/sig/galaxy-ruby/errors.rbs +117 -0
- data/sig/galaxy-ruby/file_part.rbs +21 -0
- data/sig/galaxy-ruby/internal/transport/base_client.rbs +133 -0
- data/sig/galaxy-ruby/internal/transport/pooled_net_requester.rbs +48 -0
- data/sig/galaxy-ruby/internal/type/array_of.rbs +48 -0
- data/sig/galaxy-ruby/internal/type/base_model.rbs +102 -0
- data/sig/galaxy-ruby/internal/type/base_page.rbs +24 -0
- data/sig/galaxy-ruby/internal/type/boolean.rbs +26 -0
- data/sig/galaxy-ruby/internal/type/converter.rbs +79 -0
- data/sig/galaxy-ruby/internal/type/enum.rbs +32 -0
- data/sig/galaxy-ruby/internal/type/file_input.rbs +25 -0
- data/sig/galaxy-ruby/internal/type/hash_of.rbs +48 -0
- data/sig/galaxy-ruby/internal/type/request_parameters.rbs +17 -0
- data/sig/galaxy-ruby/internal/type/union.rbs +52 -0
- data/sig/galaxy-ruby/internal/type/unknown.rbs +26 -0
- data/sig/galaxy-ruby/internal/util.rbs +199 -0
- data/sig/galaxy-ruby/internal.rbs +9 -0
- data/sig/galaxy-ruby/models/authentication_create_token_params.rbs +15 -0
- data/sig/galaxy-ruby/models/authentication_create_token_response.rbs +15 -0
- data/sig/galaxy-ruby/models/authentication_create_user_params.rbs +34 -0
- data/sig/galaxy-ruby/models/authentication_list_me_params.rbs +15 -0
- data/sig/galaxy-ruby/models/celestial_body.rbs +76 -0
- data/sig/galaxy-ruby/models/celestial_body_create_params.rbs +24 -0
- data/sig/galaxy-ruby/models/credentials.rbs +15 -0
- data/sig/galaxy-ruby/models/new_planet_webhook_event.rbs +211 -0
- data/sig/galaxy-ruby/models/planet.rbs +211 -0
- data/sig/galaxy-ruby/models/planet_create_params.rbs +15 -0
- data/sig/galaxy-ruby/models/planet_delete_params.rbs +23 -0
- data/sig/galaxy-ruby/models/planet_delte_image_params.rbs +32 -0
- data/sig/galaxy-ruby/models/planet_delte_image_response.rbs +50 -0
- data/sig/galaxy-ruby/models/planet_list_all_data_params.rbs +32 -0
- data/sig/galaxy-ruby/models/planet_list_all_data_response.rbs +64 -0
- data/sig/galaxy-ruby/models/planet_retrieve_params.rbs +23 -0
- data/sig/galaxy-ruby/models/planet_update_params.rbs +25 -0
- data/sig/galaxy-ruby/models/unwrap_webhook_event.rbs +11 -0
- data/sig/galaxy-ruby/models/user.rbs +19 -0
- data/sig/galaxy-ruby/models/webhook_unwrap_params.rbs +15 -0
- data/sig/galaxy-ruby/models.rbs +35 -0
- data/sig/galaxy-ruby/request_options.rbs +34 -0
- data/sig/galaxy-ruby/resources/authentication.rbs +24 -0
- data/sig/galaxy-ruby/resources/celestial_bodies.rbs +12 -0
- data/sig/galaxy-ruby/resources/planets.rbs +68 -0
- data/sig/galaxy-ruby/resources/webhooks.rbs +13 -0
- data/sig/galaxy-ruby/version.rbs +3 -0
- data/sig/manifest.yaml +6 -0
- metadata +245 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ScalarGalaxy
|
|
4
|
+
module Resources
|
|
5
|
+
# Everything about planets
|
|
6
|
+
class Planets
|
|
7
|
+
# Time to play god and create a new planet. What do you think? Ah, don't think too
|
|
8
|
+
# much. What could go wrong anyway?
|
|
9
|
+
#
|
|
10
|
+
# @overload create(id:, name:, atmosphere: nil, creator: nil, description: nil, discovered_at: nil, failure_callback_url: nil, habitability_index: nil, image: nil, last_updated: nil, physical_properties: nil, satellites: nil, success_callback_url: nil, tags: nil, type: nil, request_options: {})
|
|
11
|
+
#
|
|
12
|
+
# @param id [Integer]
|
|
13
|
+
#
|
|
14
|
+
# @param name [String]
|
|
15
|
+
#
|
|
16
|
+
# @param atmosphere [Array<ScalarGalaxy::Models::Planet::Atmosphere>] Atmospheric composition
|
|
17
|
+
#
|
|
18
|
+
# @param creator [ScalarGalaxy::Models::User] A user
|
|
19
|
+
#
|
|
20
|
+
# @param description [String, nil]
|
|
21
|
+
#
|
|
22
|
+
# @param discovered_at [Time]
|
|
23
|
+
#
|
|
24
|
+
# @param failure_callback_url [String] URL which gets invoked upon a failed operation
|
|
25
|
+
#
|
|
26
|
+
# @param habitability_index [Float] A score from 0 to 1 indicating potential habitability
|
|
27
|
+
#
|
|
28
|
+
# @param image [String, nil]
|
|
29
|
+
#
|
|
30
|
+
# @param last_updated [Time]
|
|
31
|
+
#
|
|
32
|
+
# @param physical_properties [ScalarGalaxy::Models::Planet::PhysicalProperties]
|
|
33
|
+
#
|
|
34
|
+
# @param satellites [Array<Object>]
|
|
35
|
+
#
|
|
36
|
+
# @param success_callback_url [String] URL which gets invoked upon a successful operation
|
|
37
|
+
#
|
|
38
|
+
# @param tags [Array<String>]
|
|
39
|
+
#
|
|
40
|
+
# @param type [Symbol, ScalarGalaxy::Models::Planet::Type]
|
|
41
|
+
#
|
|
42
|
+
# @param request_options [ScalarGalaxy::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
43
|
+
#
|
|
44
|
+
# @return [ScalarGalaxy::Models::Planet]
|
|
45
|
+
#
|
|
46
|
+
# @see ScalarGalaxy::Models::PlanetCreateParams
|
|
47
|
+
def create(params)
|
|
48
|
+
parsed, options = ScalarGalaxy::PlanetCreateParams.dump_request(params)
|
|
49
|
+
@client.request(
|
|
50
|
+
method: :post,
|
|
51
|
+
path: "planets",
|
|
52
|
+
body: parsed,
|
|
53
|
+
model: ScalarGalaxy::Planet,
|
|
54
|
+
options: options
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# You'll better learn a little bit more about the planets. It might come in handy
|
|
59
|
+
# once space travel is available for everyone.
|
|
60
|
+
#
|
|
61
|
+
# @overload retrieve(planet_id, request_options: {})
|
|
62
|
+
#
|
|
63
|
+
# @param planet_id [Integer] The ID of the planet to get
|
|
64
|
+
#
|
|
65
|
+
# @param request_options [ScalarGalaxy::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
66
|
+
#
|
|
67
|
+
# @return [ScalarGalaxy::Models::Planet]
|
|
68
|
+
#
|
|
69
|
+
# @see ScalarGalaxy::Models::PlanetRetrieveParams
|
|
70
|
+
def retrieve(planet_id, params = {})
|
|
71
|
+
@client.request(
|
|
72
|
+
method: :get,
|
|
73
|
+
path: ["planets/%1$s", planet_id],
|
|
74
|
+
model: ScalarGalaxy::Planet,
|
|
75
|
+
options: params[:request_options]
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Sometimes you make mistakes, that's fine. No worries, you can update all
|
|
80
|
+
# planets.
|
|
81
|
+
#
|
|
82
|
+
# @overload update(planet_id, id:, name:, atmosphere: nil, creator: nil, description: nil, discovered_at: nil, failure_callback_url: nil, habitability_index: nil, image: nil, last_updated: nil, physical_properties: nil, satellites: nil, success_callback_url: nil, tags: nil, type: nil, request_options: {})
|
|
83
|
+
#
|
|
84
|
+
# @param planet_id [Integer] The ID of the planet to get
|
|
85
|
+
#
|
|
86
|
+
# @param id [Integer]
|
|
87
|
+
#
|
|
88
|
+
# @param name [String]
|
|
89
|
+
#
|
|
90
|
+
# @param atmosphere [Array<ScalarGalaxy::Models::Planet::Atmosphere>] Atmospheric composition
|
|
91
|
+
#
|
|
92
|
+
# @param creator [ScalarGalaxy::Models::User] A user
|
|
93
|
+
#
|
|
94
|
+
# @param description [String, nil]
|
|
95
|
+
#
|
|
96
|
+
# @param discovered_at [Time]
|
|
97
|
+
#
|
|
98
|
+
# @param failure_callback_url [String] URL which gets invoked upon a failed operation
|
|
99
|
+
#
|
|
100
|
+
# @param habitability_index [Float] A score from 0 to 1 indicating potential habitability
|
|
101
|
+
#
|
|
102
|
+
# @param image [String, nil]
|
|
103
|
+
#
|
|
104
|
+
# @param last_updated [Time]
|
|
105
|
+
#
|
|
106
|
+
# @param physical_properties [ScalarGalaxy::Models::Planet::PhysicalProperties]
|
|
107
|
+
#
|
|
108
|
+
# @param satellites [Array<Object>]
|
|
109
|
+
#
|
|
110
|
+
# @param success_callback_url [String] URL which gets invoked upon a successful operation
|
|
111
|
+
#
|
|
112
|
+
# @param tags [Array<String>]
|
|
113
|
+
#
|
|
114
|
+
# @param type [Symbol, ScalarGalaxy::Models::Planet::Type]
|
|
115
|
+
#
|
|
116
|
+
# @param request_options [ScalarGalaxy::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
117
|
+
#
|
|
118
|
+
# @return [ScalarGalaxy::Models::Planet]
|
|
119
|
+
#
|
|
120
|
+
# @see ScalarGalaxy::Models::PlanetUpdateParams
|
|
121
|
+
def update(planet_id, params)
|
|
122
|
+
parsed, options = ScalarGalaxy::PlanetUpdateParams.dump_request(params)
|
|
123
|
+
@client.request(
|
|
124
|
+
method: :put,
|
|
125
|
+
path: ["planets/%1$s", planet_id],
|
|
126
|
+
body: parsed,
|
|
127
|
+
model: ScalarGalaxy::Planet,
|
|
128
|
+
options: options
|
|
129
|
+
)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# This endpoint was used to delete planets. Unfortunately, that caused a lot of
|
|
133
|
+
# trouble for planets with life. So, this endpoint is now deprecated and should
|
|
134
|
+
# not be used anymore.
|
|
135
|
+
#
|
|
136
|
+
# @overload delete(planet_id, request_options: {})
|
|
137
|
+
#
|
|
138
|
+
# @param planet_id [Integer] The ID of the planet to get
|
|
139
|
+
#
|
|
140
|
+
# @param request_options [ScalarGalaxy::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
141
|
+
#
|
|
142
|
+
# @return [nil]
|
|
143
|
+
#
|
|
144
|
+
# @see ScalarGalaxy::Models::PlanetDeleteParams
|
|
145
|
+
def delete(planet_id, params = {})
|
|
146
|
+
@client.request(
|
|
147
|
+
method: :delete,
|
|
148
|
+
path: ["planets/%1$s", planet_id],
|
|
149
|
+
model: NilClass,
|
|
150
|
+
options: params[:request_options]
|
|
151
|
+
)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Got a crazy good photo of a planet? Share it with the world!
|
|
155
|
+
#
|
|
156
|
+
# @overload delte_image(planet_id, image: nil, request_options: {})
|
|
157
|
+
#
|
|
158
|
+
# @param planet_id [Integer] The ID of the planet to get
|
|
159
|
+
#
|
|
160
|
+
# @param image [Pathname, StringIO, IO, String, ScalarGalaxy::FilePart] The image file to upload
|
|
161
|
+
#
|
|
162
|
+
# @param request_options [ScalarGalaxy::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
163
|
+
#
|
|
164
|
+
# @return [ScalarGalaxy::Models::PlanetDelteImageResponse]
|
|
165
|
+
#
|
|
166
|
+
# @see ScalarGalaxy::Models::PlanetDelteImageParams
|
|
167
|
+
def delte_image(planet_id, params = {})
|
|
168
|
+
parsed, options = ScalarGalaxy::PlanetDelteImageParams.dump_request(params)
|
|
169
|
+
@client.request(
|
|
170
|
+
method: :post,
|
|
171
|
+
path: ["planets/%1$s/image", planet_id],
|
|
172
|
+
headers: {
|
|
173
|
+
"content-type" => "multipart/form-data"
|
|
174
|
+
},
|
|
175
|
+
body: parsed,
|
|
176
|
+
model: ScalarGalaxy::Models::PlanetDelteImageResponse,
|
|
177
|
+
options: options
|
|
178
|
+
)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# It's easy to say you know them all, but do you really? Retrieve all the planets
|
|
182
|
+
# and check whether you missed one.
|
|
183
|
+
#
|
|
184
|
+
# @overload list_all_data(limit: nil, offset: nil, request_options: {})
|
|
185
|
+
#
|
|
186
|
+
# @param limit [Integer] The number of items to return
|
|
187
|
+
#
|
|
188
|
+
# @param offset [Integer] The number of items to skip before starting to collect the result set
|
|
189
|
+
#
|
|
190
|
+
# @param request_options [ScalarGalaxy::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
191
|
+
#
|
|
192
|
+
# @return [ScalarGalaxy::Models::PlanetListAllDataResponse]
|
|
193
|
+
#
|
|
194
|
+
# @see ScalarGalaxy::Models::PlanetListAllDataParams
|
|
195
|
+
def list_all_data(params = {})
|
|
196
|
+
parsed, options = ScalarGalaxy::PlanetListAllDataParams.dump_request(params)
|
|
197
|
+
query = ScalarGalaxy::Internal::Util.encode_query_params(parsed)
|
|
198
|
+
@client.request(
|
|
199
|
+
method: :get,
|
|
200
|
+
path: "planets",
|
|
201
|
+
query: query,
|
|
202
|
+
model: ScalarGalaxy::Models::PlanetListAllDataResponse,
|
|
203
|
+
options: options
|
|
204
|
+
)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# @api private
|
|
208
|
+
#
|
|
209
|
+
# @param client [ScalarGalaxy::Client]
|
|
210
|
+
def initialize(client:)
|
|
211
|
+
@client = client
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ScalarGalaxy
|
|
4
|
+
module Resources
|
|
5
|
+
class Webhooks
|
|
6
|
+
# @param payload [String] The raw webhook payload as a string
|
|
7
|
+
#
|
|
8
|
+
# @param headers [Hash{String=>String}] The raw HTTP headers that came with the payload
|
|
9
|
+
#
|
|
10
|
+
# @param key [String, nil] The webhook signing key
|
|
11
|
+
#
|
|
12
|
+
# @return [ScalarGalaxy::Models::NewPlanetWebhookEvent]
|
|
13
|
+
def unwrap(payload, headers:, key: @client.webhook_secret)
|
|
14
|
+
if key.nil?
|
|
15
|
+
raise ArgumentError.new(
|
|
16
|
+
"Cannot verify a webhook without a key on either the client's webhook_secret or passed in as an argument"
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
::StandardWebhooks::Webhook.new(key).verify(payload, headers)
|
|
21
|
+
|
|
22
|
+
parsed = JSON.parse(payload, symbolize_names: true)
|
|
23
|
+
ScalarGalaxy::Internal::Type::Converter.coerce(ScalarGalaxy::Models::UnwrapWebhookEvent, parsed)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @api private
|
|
27
|
+
#
|
|
28
|
+
# @param client [ScalarGalaxy::Client]
|
|
29
|
+
def initialize(client:)
|
|
30
|
+
@client = client
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/galaxy-ruby.rb
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Standard libraries.
|
|
4
|
+
# rubocop:disable Lint/RedundantRequireStatement
|
|
5
|
+
require "English"
|
|
6
|
+
require "cgi"
|
|
7
|
+
require "date"
|
|
8
|
+
require "erb"
|
|
9
|
+
require "etc"
|
|
10
|
+
require "json"
|
|
11
|
+
require "net/http"
|
|
12
|
+
require "openssl"
|
|
13
|
+
require "pathname"
|
|
14
|
+
require "rbconfig"
|
|
15
|
+
require "securerandom"
|
|
16
|
+
require "set"
|
|
17
|
+
require "stringio"
|
|
18
|
+
require "time"
|
|
19
|
+
require "uri"
|
|
20
|
+
# rubocop:enable Lint/RedundantRequireStatement
|
|
21
|
+
|
|
22
|
+
# We already ship the preferred sorbet manifests in the package itself.
|
|
23
|
+
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
|
|
24
|
+
if Object.const_defined?(:Tapioca) && caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
|
|
25
|
+
ARGV.none?(/dsl/)
|
|
26
|
+
return
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Gems.
|
|
30
|
+
require "connection_pool"
|
|
31
|
+
require "standardwebhooks"
|
|
32
|
+
|
|
33
|
+
# Package files.
|
|
34
|
+
require_relative "galaxy-ruby/version"
|
|
35
|
+
require_relative "galaxy-ruby/internal/util"
|
|
36
|
+
require_relative "galaxy-ruby/internal/type/converter"
|
|
37
|
+
require_relative "galaxy-ruby/internal/type/unknown"
|
|
38
|
+
require_relative "galaxy-ruby/internal/type/boolean"
|
|
39
|
+
require_relative "galaxy-ruby/internal/type/file_input"
|
|
40
|
+
require_relative "galaxy-ruby/internal/type/enum"
|
|
41
|
+
require_relative "galaxy-ruby/internal/type/union"
|
|
42
|
+
require_relative "galaxy-ruby/internal/type/array_of"
|
|
43
|
+
require_relative "galaxy-ruby/internal/type/hash_of"
|
|
44
|
+
require_relative "galaxy-ruby/internal/type/base_model"
|
|
45
|
+
require_relative "galaxy-ruby/internal/type/base_page"
|
|
46
|
+
require_relative "galaxy-ruby/internal/type/request_parameters"
|
|
47
|
+
require_relative "galaxy-ruby/internal"
|
|
48
|
+
require_relative "galaxy-ruby/request_options"
|
|
49
|
+
require_relative "galaxy-ruby/file_part"
|
|
50
|
+
require_relative "galaxy-ruby/errors"
|
|
51
|
+
require_relative "galaxy-ruby/internal/transport/base_client"
|
|
52
|
+
require_relative "galaxy-ruby/internal/transport/pooled_net_requester"
|
|
53
|
+
require_relative "galaxy-ruby/client"
|
|
54
|
+
require_relative "galaxy-ruby/models/credentials"
|
|
55
|
+
require_relative "galaxy-ruby/models/planet"
|
|
56
|
+
require_relative "galaxy-ruby/models/authentication_create_token_params"
|
|
57
|
+
require_relative "galaxy-ruby/models/authentication_create_token_response"
|
|
58
|
+
require_relative "galaxy-ruby/models/authentication_create_user_params"
|
|
59
|
+
require_relative "galaxy-ruby/models/authentication_list_me_params"
|
|
60
|
+
require_relative "galaxy-ruby/models/celestial_body"
|
|
61
|
+
require_relative "galaxy-ruby/models/celestial_body_create_params"
|
|
62
|
+
require_relative "galaxy-ruby/models/new_planet_webhook_event"
|
|
63
|
+
require_relative "galaxy-ruby/models/planet_create_params"
|
|
64
|
+
require_relative "galaxy-ruby/models/planet_delete_params"
|
|
65
|
+
require_relative "galaxy-ruby/models/planet_delte_image_params"
|
|
66
|
+
require_relative "galaxy-ruby/models/planet_delte_image_response"
|
|
67
|
+
require_relative "galaxy-ruby/models/planet_list_all_data_params"
|
|
68
|
+
require_relative "galaxy-ruby/models/planet_list_all_data_response"
|
|
69
|
+
require_relative "galaxy-ruby/models/planet_retrieve_params"
|
|
70
|
+
require_relative "galaxy-ruby/models/planet_update_params"
|
|
71
|
+
require_relative "galaxy-ruby/models/unwrap_webhook_event"
|
|
72
|
+
require_relative "galaxy-ruby/models/user"
|
|
73
|
+
require_relative "galaxy-ruby/models/webhook_unwrap_params"
|
|
74
|
+
require_relative "galaxy-ruby/models"
|
|
75
|
+
require_relative "galaxy-ruby/resources/planets"
|
|
76
|
+
require_relative "galaxy-ruby/resources/celestial_bodies"
|
|
77
|
+
require_relative "galaxy-ruby/resources/authentication"
|
|
78
|
+
require_relative "galaxy-ruby/resources/webhooks"
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module ScalarGalaxy
|
|
4
|
+
class Client < ScalarGalaxy::Internal::Transport::BaseClient
|
|
5
|
+
DEFAULT_MAX_RETRIES = 2
|
|
6
|
+
|
|
7
|
+
DEFAULT_TIMEOUT_IN_SECONDS = T.let(60.0, Float)
|
|
8
|
+
|
|
9
|
+
DEFAULT_INITIAL_RETRY_DELAY = T.let(0.5, Float)
|
|
10
|
+
|
|
11
|
+
DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
|
|
12
|
+
|
|
13
|
+
ENVIRONMENTS =
|
|
14
|
+
T.let(
|
|
15
|
+
{
|
|
16
|
+
production: "https://galaxy.scalar.com",
|
|
17
|
+
void: "https://void.scalar.com/"
|
|
18
|
+
},
|
|
19
|
+
T::Hash[Symbol, String]
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
sig { returns(String) }
|
|
23
|
+
attr_reader :bearer_auth
|
|
24
|
+
|
|
25
|
+
sig { returns(String) }
|
|
26
|
+
attr_reader :basic_auth_username
|
|
27
|
+
|
|
28
|
+
sig { returns(String) }
|
|
29
|
+
attr_reader :basic_auth_password
|
|
30
|
+
|
|
31
|
+
sig { returns(String) }
|
|
32
|
+
attr_reader :api_key_header
|
|
33
|
+
|
|
34
|
+
sig { returns(T.nilable(String)) }
|
|
35
|
+
attr_reader :api_key_query
|
|
36
|
+
|
|
37
|
+
sig { returns(String) }
|
|
38
|
+
attr_reader :api_key_cookie
|
|
39
|
+
|
|
40
|
+
sig { returns(T.nilable(String)) }
|
|
41
|
+
attr_reader :o_auth2
|
|
42
|
+
|
|
43
|
+
sig { returns(T.nilable(String)) }
|
|
44
|
+
attr_reader :open_id_connect
|
|
45
|
+
|
|
46
|
+
sig { returns(T.nilable(String)) }
|
|
47
|
+
attr_reader :webhook_secret
|
|
48
|
+
|
|
49
|
+
# Everything about planets
|
|
50
|
+
sig { returns(ScalarGalaxy::Resources::Planets) }
|
|
51
|
+
attr_reader :planets
|
|
52
|
+
|
|
53
|
+
# Celestial bodies are the planets and satellites in the Scalar Galaxy.
|
|
54
|
+
sig { returns(ScalarGalaxy::Resources::CelestialBodies) }
|
|
55
|
+
attr_reader :celestial_bodies
|
|
56
|
+
|
|
57
|
+
# Some endpoints are public, but some require authentication. We provide all the
|
|
58
|
+
# required endpoints to create an account and authorize yourself.
|
|
59
|
+
sig { returns(ScalarGalaxy::Resources::Authentication) }
|
|
60
|
+
attr_reader :authentication
|
|
61
|
+
|
|
62
|
+
sig { returns(ScalarGalaxy::Resources::Webhooks) }
|
|
63
|
+
attr_reader :webhooks
|
|
64
|
+
|
|
65
|
+
# @api private
|
|
66
|
+
sig { override.returns(T::Hash[String, String]) }
|
|
67
|
+
private def auth_headers
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Creates and returns a new client for interacting with the API.
|
|
71
|
+
sig do
|
|
72
|
+
params(
|
|
73
|
+
bearer_auth: T.nilable(String),
|
|
74
|
+
basic_auth_username: T.nilable(String),
|
|
75
|
+
basic_auth_password: T.nilable(String),
|
|
76
|
+
api_key_header: T.nilable(String),
|
|
77
|
+
api_key_query: T.nilable(String),
|
|
78
|
+
api_key_cookie: T.nilable(String),
|
|
79
|
+
o_auth2: T.nilable(String),
|
|
80
|
+
open_id_connect: T.nilable(String),
|
|
81
|
+
webhook_secret: T.nilable(String),
|
|
82
|
+
environment: T.nilable(T.any(Symbol, String)),
|
|
83
|
+
base_url: T.nilable(String),
|
|
84
|
+
max_retries: Integer,
|
|
85
|
+
timeout: Float,
|
|
86
|
+
initial_retry_delay: Float,
|
|
87
|
+
max_retry_delay: Float
|
|
88
|
+
).returns(T.attached_class)
|
|
89
|
+
end
|
|
90
|
+
def self.new(
|
|
91
|
+
# JWT Bearer token authentication Defaults to `ENV["BEARER_AUTH"]`
|
|
92
|
+
bearer_auth: ENV["BEARER_AUTH"],
|
|
93
|
+
# Defaults to `ENV["BASIC_AUTH_USERNAME"]`
|
|
94
|
+
basic_auth_username: ENV["BASIC_AUTH_USERNAME"],
|
|
95
|
+
# Defaults to `ENV["BASIC_AUTH_PASSWORD"]`
|
|
96
|
+
basic_auth_password: ENV["BASIC_AUTH_PASSWORD"],
|
|
97
|
+
# API key request header Defaults to `ENV["API_KEY_HEADER"]`
|
|
98
|
+
api_key_header: ENV["API_KEY_HEADER"],
|
|
99
|
+
# API key query parameter Defaults to `ENV["API_KEY_QUERY"]`
|
|
100
|
+
api_key_query: ENV["API_KEY_QUERY"],
|
|
101
|
+
# API key browser cookie Defaults to `ENV["API_KEY_COOKIE"]`
|
|
102
|
+
api_key_cookie: ENV["API_KEY_COOKIE"],
|
|
103
|
+
# OAuth 2.0 authentication Defaults to `ENV["SCALAR_O_AUTH2"]`
|
|
104
|
+
o_auth2: ENV["SCALAR_O_AUTH2"],
|
|
105
|
+
# OpenID Connect Authentication Defaults to `ENV["SCALAR_OPEN_ID_CONNECT"]`
|
|
106
|
+
open_id_connect: ENV["SCALAR_OPEN_ID_CONNECT"],
|
|
107
|
+
# Secret used to verify incoming webhook signatures. Defaults to
|
|
108
|
+
# `ENV["SCALAR_WEBHOOK_SECRET"]`
|
|
109
|
+
webhook_secret: ENV["SCALAR_WEBHOOK_SECRET"],
|
|
110
|
+
# Specifies the environment to use for the API.
|
|
111
|
+
#
|
|
112
|
+
# Each environment maps to a different base URL:
|
|
113
|
+
#
|
|
114
|
+
# - `production` corresponds to `https://galaxy.scalar.com`
|
|
115
|
+
# - `void` corresponds to `https://void.scalar.com/`
|
|
116
|
+
environment: nil,
|
|
117
|
+
# Override the default base URL for the API, e.g.,
|
|
118
|
+
# `"https://api.example.com/v2/"`. Defaults to `ENV["SCALAR_BASE_URL"]`
|
|
119
|
+
base_url: ENV["SCALAR_BASE_URL"],
|
|
120
|
+
# Max number of retries to attempt after a failed retryable request.
|
|
121
|
+
max_retries: ScalarGalaxy::Client::DEFAULT_MAX_RETRIES,
|
|
122
|
+
timeout: ScalarGalaxy::Client::DEFAULT_TIMEOUT_IN_SECONDS,
|
|
123
|
+
initial_retry_delay: ScalarGalaxy::Client::DEFAULT_INITIAL_RETRY_DELAY,
|
|
124
|
+
max_retry_delay: ScalarGalaxy::Client::DEFAULT_MAX_RETRY_DELAY
|
|
125
|
+
)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module ScalarGalaxy
|
|
4
|
+
module Errors
|
|
5
|
+
class Error < StandardError
|
|
6
|
+
sig { returns(T.nilable(StandardError)) }
|
|
7
|
+
attr_accessor :cause
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class ConversionError < ScalarGalaxy::Errors::Error
|
|
11
|
+
sig { returns(T.nilable(StandardError)) }
|
|
12
|
+
def cause
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @api private
|
|
16
|
+
sig do
|
|
17
|
+
params(
|
|
18
|
+
on: T::Class[StandardError],
|
|
19
|
+
method: Symbol,
|
|
20
|
+
target: T.anything,
|
|
21
|
+
value: T.anything,
|
|
22
|
+
cause: T.nilable(StandardError)
|
|
23
|
+
).returns(T.attached_class)
|
|
24
|
+
end
|
|
25
|
+
def self.new(on:, method:, target:, value:, cause: nil)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class APIError < ScalarGalaxy::Errors::Error
|
|
30
|
+
sig { returns(URI::Generic) }
|
|
31
|
+
attr_accessor :url
|
|
32
|
+
|
|
33
|
+
sig { returns(T.nilable(Integer)) }
|
|
34
|
+
attr_accessor :status
|
|
35
|
+
|
|
36
|
+
sig { returns(T.nilable(T::Hash[String, String])) }
|
|
37
|
+
attr_accessor :headers
|
|
38
|
+
|
|
39
|
+
sig { returns(T.nilable(T.anything)) }
|
|
40
|
+
attr_accessor :body
|
|
41
|
+
|
|
42
|
+
# @api private
|
|
43
|
+
sig do
|
|
44
|
+
params(
|
|
45
|
+
url: URI::Generic,
|
|
46
|
+
status: T.nilable(Integer),
|
|
47
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
48
|
+
body: T.nilable(Object),
|
|
49
|
+
request: NilClass,
|
|
50
|
+
response: NilClass,
|
|
51
|
+
message: T.nilable(String)
|
|
52
|
+
).returns(T.attached_class)
|
|
53
|
+
end
|
|
54
|
+
def self.new(
|
|
55
|
+
url:,
|
|
56
|
+
status: nil,
|
|
57
|
+
headers: nil,
|
|
58
|
+
body: nil,
|
|
59
|
+
request: nil,
|
|
60
|
+
response: nil,
|
|
61
|
+
message: nil
|
|
62
|
+
)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class APIConnectionError < ScalarGalaxy::Errors::APIError
|
|
67
|
+
sig { returns(NilClass) }
|
|
68
|
+
attr_accessor :status
|
|
69
|
+
|
|
70
|
+
sig { returns(NilClass) }
|
|
71
|
+
attr_accessor :body
|
|
72
|
+
|
|
73
|
+
# @api private
|
|
74
|
+
sig do
|
|
75
|
+
params(
|
|
76
|
+
url: URI::Generic,
|
|
77
|
+
status: NilClass,
|
|
78
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
79
|
+
body: NilClass,
|
|
80
|
+
request: NilClass,
|
|
81
|
+
response: NilClass,
|
|
82
|
+
message: T.nilable(String)
|
|
83
|
+
).returns(T.attached_class)
|
|
84
|
+
end
|
|
85
|
+
def self.new(
|
|
86
|
+
url:,
|
|
87
|
+
status: nil,
|
|
88
|
+
headers: nil,
|
|
89
|
+
body: nil,
|
|
90
|
+
request: nil,
|
|
91
|
+
response: nil,
|
|
92
|
+
message: "Connection error."
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class APITimeoutError < ScalarGalaxy::Errors::APIConnectionError
|
|
98
|
+
# @api private
|
|
99
|
+
sig do
|
|
100
|
+
params(
|
|
101
|
+
url: URI::Generic,
|
|
102
|
+
status: NilClass,
|
|
103
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
104
|
+
body: NilClass,
|
|
105
|
+
request: NilClass,
|
|
106
|
+
response: NilClass,
|
|
107
|
+
message: T.nilable(String)
|
|
108
|
+
).returns(T.attached_class)
|
|
109
|
+
end
|
|
110
|
+
def self.new(
|
|
111
|
+
url:,
|
|
112
|
+
status: nil,
|
|
113
|
+
headers: nil,
|
|
114
|
+
body: nil,
|
|
115
|
+
request: nil,
|
|
116
|
+
response: nil,
|
|
117
|
+
message: "Request timed out."
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
class APIStatusError < ScalarGalaxy::Errors::APIError
|
|
123
|
+
# @api private
|
|
124
|
+
sig do
|
|
125
|
+
params(
|
|
126
|
+
url: URI::Generic,
|
|
127
|
+
status: Integer,
|
|
128
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
129
|
+
body: T.nilable(Object),
|
|
130
|
+
request: NilClass,
|
|
131
|
+
response: NilClass,
|
|
132
|
+
message: T.nilable(String)
|
|
133
|
+
).returns(T.attached_class)
|
|
134
|
+
end
|
|
135
|
+
def self.for(
|
|
136
|
+
url:,
|
|
137
|
+
status:,
|
|
138
|
+
headers:,
|
|
139
|
+
body:,
|
|
140
|
+
request:,
|
|
141
|
+
response:,
|
|
142
|
+
message: nil
|
|
143
|
+
)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
sig { returns(Integer) }
|
|
147
|
+
attr_accessor :status
|
|
148
|
+
|
|
149
|
+
# @api private
|
|
150
|
+
sig do
|
|
151
|
+
params(
|
|
152
|
+
url: URI::Generic,
|
|
153
|
+
status: Integer,
|
|
154
|
+
headers: T.nilable(T::Hash[String, String]),
|
|
155
|
+
body: T.nilable(Object),
|
|
156
|
+
request: NilClass,
|
|
157
|
+
response: NilClass,
|
|
158
|
+
message: T.nilable(String)
|
|
159
|
+
).returns(T.attached_class)
|
|
160
|
+
end
|
|
161
|
+
def self.new(
|
|
162
|
+
url:,
|
|
163
|
+
status:,
|
|
164
|
+
headers:,
|
|
165
|
+
body:,
|
|
166
|
+
request:,
|
|
167
|
+
response:,
|
|
168
|
+
message: nil
|
|
169
|
+
)
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
class BadRequestError < ScalarGalaxy::Errors::APIStatusError
|
|
174
|
+
HTTP_STATUS = 400
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
class AuthenticationError < ScalarGalaxy::Errors::APIStatusError
|
|
178
|
+
HTTP_STATUS = 401
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
class PermissionDeniedError < ScalarGalaxy::Errors::APIStatusError
|
|
182
|
+
HTTP_STATUS = 403
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
class NotFoundError < ScalarGalaxy::Errors::APIStatusError
|
|
186
|
+
HTTP_STATUS = 404
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
class ConflictError < ScalarGalaxy::Errors::APIStatusError
|
|
190
|
+
HTTP_STATUS = 409
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
class UnprocessableEntityError < ScalarGalaxy::Errors::APIStatusError
|
|
194
|
+
HTTP_STATUS = 422
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
class RateLimitError < ScalarGalaxy::Errors::APIStatusError
|
|
198
|
+
HTTP_STATUS = 429
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
class InternalServerError < ScalarGalaxy::Errors::APIStatusError
|
|
202
|
+
HTTP_STATUS = T.let((500..), T::Range[Integer])
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module ScalarGalaxy
|
|
4
|
+
class FilePart
|
|
5
|
+
sig { returns(T.any(Pathname, StringIO, IO, String)) }
|
|
6
|
+
attr_reader :content
|
|
7
|
+
|
|
8
|
+
sig { returns(T.nilable(String)) }
|
|
9
|
+
attr_reader :content_type
|
|
10
|
+
|
|
11
|
+
sig { returns(T.nilable(String)) }
|
|
12
|
+
attr_reader :filename
|
|
13
|
+
|
|
14
|
+
# @api private
|
|
15
|
+
sig { returns(String) }
|
|
16
|
+
private def read
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
sig { params(a: T.anything).returns(String) }
|
|
20
|
+
def to_json(*a)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sig { params(a: T.anything).returns(String) }
|
|
24
|
+
def to_yaml(*a)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
sig do
|
|
28
|
+
params(
|
|
29
|
+
content: T.any(Pathname, StringIO, IO, String),
|
|
30
|
+
filename: T.nilable(T.any(Pathname, String)),
|
|
31
|
+
content_type: T.nilable(String)
|
|
32
|
+
).returns(T.attached_class)
|
|
33
|
+
end
|
|
34
|
+
def self.new(content, filename: nil, content_type: nil)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|