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.
Files changed (145) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +8 -0
  3. data/LICENSE +201 -0
  4. data/README.md +169 -0
  5. data/SECURITY.md +19 -0
  6. data/SKILL.md +83 -0
  7. data/api.md +188 -0
  8. data/lib/galaxy-ruby/client.rb +254 -0
  9. data/lib/galaxy-ruby/errors.rb +227 -0
  10. data/lib/galaxy-ruby/file_part.rb +58 -0
  11. data/lib/galaxy-ruby/internal/transport/base_client.rb +576 -0
  12. data/lib/galaxy-ruby/internal/transport/pooled_net_requester.rb +224 -0
  13. data/lib/galaxy-ruby/internal/type/array_of.rb +164 -0
  14. data/lib/galaxy-ruby/internal/type/base_model.rb +529 -0
  15. data/lib/galaxy-ruby/internal/type/base_page.rb +55 -0
  16. data/lib/galaxy-ruby/internal/type/boolean.rb +77 -0
  17. data/lib/galaxy-ruby/internal/type/converter.rb +333 -0
  18. data/lib/galaxy-ruby/internal/type/enum.rb +130 -0
  19. data/lib/galaxy-ruby/internal/type/file_input.rb +111 -0
  20. data/lib/galaxy-ruby/internal/type/hash_of.rb +184 -0
  21. data/lib/galaxy-ruby/internal/type/request_parameters.rb +42 -0
  22. data/lib/galaxy-ruby/internal/type/union.rb +234 -0
  23. data/lib/galaxy-ruby/internal/type/unknown.rb +81 -0
  24. data/lib/galaxy-ruby/internal/util.rb +960 -0
  25. data/lib/galaxy-ruby/internal.rb +15 -0
  26. data/lib/galaxy-ruby/models/authentication_create_token_params.rb +14 -0
  27. data/lib/galaxy-ruby/models/authentication_create_token_response.rb +16 -0
  28. data/lib/galaxy-ruby/models/authentication_create_user_params.rb +32 -0
  29. data/lib/galaxy-ruby/models/authentication_list_me_params.rb +14 -0
  30. data/lib/galaxy-ruby/models/celestial_body.rb +81 -0
  31. data/lib/galaxy-ruby/models/celestial_body_create_params.rb +20 -0
  32. data/lib/galaxy-ruby/models/credentials.rb +25 -0
  33. data/lib/galaxy-ruby/models/new_planet_webhook_event.rb +216 -0
  34. data/lib/galaxy-ruby/models/planet.rb +218 -0
  35. data/lib/galaxy-ruby/models/planet_create_params.rb +14 -0
  36. data/lib/galaxy-ruby/models/planet_delete_params.rb +20 -0
  37. data/lib/galaxy-ruby/models/planet_delte_image_params.rb +29 -0
  38. data/lib/galaxy-ruby/models/planet_delte_image_response.rb +48 -0
  39. data/lib/galaxy-ruby/models/planet_list_all_data_params.rb +30 -0
  40. data/lib/galaxy-ruby/models/planet_list_all_data_response.rb +51 -0
  41. data/lib/galaxy-ruby/models/planet_retrieve_params.rb +20 -0
  42. data/lib/galaxy-ruby/models/planet_update_params.rb +20 -0
  43. data/lib/galaxy-ruby/models/unwrap_webhook_event.rb +14 -0
  44. data/lib/galaxy-ruby/models/user.rb +26 -0
  45. data/lib/galaxy-ruby/models/webhook_unwrap_params.rb +14 -0
  46. data/lib/galaxy-ruby/models.rb +78 -0
  47. data/lib/galaxy-ruby/request_options.rb +77 -0
  48. data/lib/galaxy-ruby/resources/authentication.rb +80 -0
  49. data/lib/galaxy-ruby/resources/celestial_bodies.rb +37 -0
  50. data/lib/galaxy-ruby/resources/planets.rb +215 -0
  51. data/lib/galaxy-ruby/resources/webhooks.rb +34 -0
  52. data/lib/galaxy-ruby/version.rb +5 -0
  53. data/lib/galaxy-ruby.rb +78 -0
  54. data/rbi/galaxy-ruby/client.rbi +128 -0
  55. data/rbi/galaxy-ruby/errors.rbi +205 -0
  56. data/rbi/galaxy-ruby/file_part.rbi +37 -0
  57. data/rbi/galaxy-ruby/internal/transport/base_client.rbi +305 -0
  58. data/rbi/galaxy-ruby/internal/transport/pooled_net_requester.rbi +84 -0
  59. data/rbi/galaxy-ruby/internal/type/array_of.rbi +104 -0
  60. data/rbi/galaxy-ruby/internal/type/base_model.rbi +314 -0
  61. data/rbi/galaxy-ruby/internal/type/base_page.rbi +43 -0
  62. data/rbi/galaxy-ruby/internal/type/boolean.rbi +58 -0
  63. data/rbi/galaxy-ruby/internal/type/converter.rbi +222 -0
  64. data/rbi/galaxy-ruby/internal/type/enum.rbi +82 -0
  65. data/rbi/galaxy-ruby/internal/type/file_input.rbi +59 -0
  66. data/rbi/galaxy-ruby/internal/type/hash_of.rbi +104 -0
  67. data/rbi/galaxy-ruby/internal/type/request_parameters.rbi +31 -0
  68. data/rbi/galaxy-ruby/internal/type/union.rbi +128 -0
  69. data/rbi/galaxy-ruby/internal/type/unknown.rbi +58 -0
  70. data/rbi/galaxy-ruby/internal/util.rbi +515 -0
  71. data/rbi/galaxy-ruby/internal.rbi +18 -0
  72. data/rbi/galaxy-ruby/models/authentication_create_token_params.rbi +32 -0
  73. data/rbi/galaxy-ruby/models/authentication_create_token_response.rbi +29 -0
  74. data/rbi/galaxy-ruby/models/authentication_create_user_params.rbi +54 -0
  75. data/rbi/galaxy-ruby/models/authentication_list_me_params.rbi +32 -0
  76. data/rbi/galaxy-ruby/models/celestial_body.rbi +140 -0
  77. data/rbi/galaxy-ruby/models/celestial_body_create_params.rbi +53 -0
  78. data/rbi/galaxy-ruby/models/credentials.rbi +27 -0
  79. data/rbi/galaxy-ruby/models/new_planet_webhook_event.rbi +396 -0
  80. data/rbi/galaxy-ruby/models/planet.rbi +350 -0
  81. data/rbi/galaxy-ruby/models/planet_create_params.rbi +32 -0
  82. data/rbi/galaxy-ruby/models/planet_delete_params.rbi +38 -0
  83. data/rbi/galaxy-ruby/models/planet_delte_image_params.rbi +55 -0
  84. data/rbi/galaxy-ruby/models/planet_delte_image_response.rbi +85 -0
  85. data/rbi/galaxy-ruby/models/planet_list_all_data_params.rbi +60 -0
  86. data/rbi/galaxy-ruby/models/planet_list_all_data_response.rbi +110 -0
  87. data/rbi/galaxy-ruby/models/planet_retrieve_params.rbi +38 -0
  88. data/rbi/galaxy-ruby/models/planet_update_params.rbi +38 -0
  89. data/rbi/galaxy-ruby/models/unwrap_webhook_event.rbi +17 -0
  90. data/rbi/galaxy-ruby/models/user.rbi +33 -0
  91. data/rbi/galaxy-ruby/models/webhook_unwrap_params.rbi +32 -0
  92. data/rbi/galaxy-ruby/models.rbi +39 -0
  93. data/rbi/galaxy-ruby/request_options.rbi +59 -0
  94. data/rbi/galaxy-ruby/resources/authentication.rbi +47 -0
  95. data/rbi/galaxy-ruby/resources/celestial_bodies.rbi +28 -0
  96. data/rbi/galaxy-ruby/resources/planets.rbi +176 -0
  97. data/rbi/galaxy-ruby/resources/webhooks.rbi +29 -0
  98. data/rbi/galaxy-ruby/version.rbi +5 -0
  99. data/sig/galaxy-ruby/client.rbs +62 -0
  100. data/sig/galaxy-ruby/errors.rbs +117 -0
  101. data/sig/galaxy-ruby/file_part.rbs +21 -0
  102. data/sig/galaxy-ruby/internal/transport/base_client.rbs +133 -0
  103. data/sig/galaxy-ruby/internal/transport/pooled_net_requester.rbs +48 -0
  104. data/sig/galaxy-ruby/internal/type/array_of.rbs +48 -0
  105. data/sig/galaxy-ruby/internal/type/base_model.rbs +102 -0
  106. data/sig/galaxy-ruby/internal/type/base_page.rbs +24 -0
  107. data/sig/galaxy-ruby/internal/type/boolean.rbs +26 -0
  108. data/sig/galaxy-ruby/internal/type/converter.rbs +79 -0
  109. data/sig/galaxy-ruby/internal/type/enum.rbs +32 -0
  110. data/sig/galaxy-ruby/internal/type/file_input.rbs +25 -0
  111. data/sig/galaxy-ruby/internal/type/hash_of.rbs +48 -0
  112. data/sig/galaxy-ruby/internal/type/request_parameters.rbs +17 -0
  113. data/sig/galaxy-ruby/internal/type/union.rbs +52 -0
  114. data/sig/galaxy-ruby/internal/type/unknown.rbs +26 -0
  115. data/sig/galaxy-ruby/internal/util.rbs +199 -0
  116. data/sig/galaxy-ruby/internal.rbs +9 -0
  117. data/sig/galaxy-ruby/models/authentication_create_token_params.rbs +15 -0
  118. data/sig/galaxy-ruby/models/authentication_create_token_response.rbs +15 -0
  119. data/sig/galaxy-ruby/models/authentication_create_user_params.rbs +34 -0
  120. data/sig/galaxy-ruby/models/authentication_list_me_params.rbs +15 -0
  121. data/sig/galaxy-ruby/models/celestial_body.rbs +76 -0
  122. data/sig/galaxy-ruby/models/celestial_body_create_params.rbs +24 -0
  123. data/sig/galaxy-ruby/models/credentials.rbs +15 -0
  124. data/sig/galaxy-ruby/models/new_planet_webhook_event.rbs +211 -0
  125. data/sig/galaxy-ruby/models/planet.rbs +211 -0
  126. data/sig/galaxy-ruby/models/planet_create_params.rbs +15 -0
  127. data/sig/galaxy-ruby/models/planet_delete_params.rbs +23 -0
  128. data/sig/galaxy-ruby/models/planet_delte_image_params.rbs +32 -0
  129. data/sig/galaxy-ruby/models/planet_delte_image_response.rbs +50 -0
  130. data/sig/galaxy-ruby/models/planet_list_all_data_params.rbs +32 -0
  131. data/sig/galaxy-ruby/models/planet_list_all_data_response.rbs +64 -0
  132. data/sig/galaxy-ruby/models/planet_retrieve_params.rbs +23 -0
  133. data/sig/galaxy-ruby/models/planet_update_params.rbs +25 -0
  134. data/sig/galaxy-ruby/models/unwrap_webhook_event.rbs +11 -0
  135. data/sig/galaxy-ruby/models/user.rbs +19 -0
  136. data/sig/galaxy-ruby/models/webhook_unwrap_params.rbs +15 -0
  137. data/sig/galaxy-ruby/models.rbs +35 -0
  138. data/sig/galaxy-ruby/request_options.rbs +34 -0
  139. data/sig/galaxy-ruby/resources/authentication.rbs +24 -0
  140. data/sig/galaxy-ruby/resources/celestial_bodies.rbs +12 -0
  141. data/sig/galaxy-ruby/resources/planets.rbs +68 -0
  142. data/sig/galaxy-ruby/resources/webhooks.rbs +13 -0
  143. data/sig/galaxy-ruby/version.rbs +3 -0
  144. data/sig/manifest.yaml +6 -0
  145. 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ScalarGalaxy
4
+ VERSION = "0.2.0" # x-release-please-version
5
+ end
@@ -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