spotted 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91530c48ebb30c600d7d752cd7bd8af576c61ecbf7fc96e75e711bdd6c0140ae
4
- data.tar.gz: 490542cb593197ae9b549cf1d90aa86f92a7dde031f98674d7cf0e8e729115e3
3
+ metadata.gz: ce3e4a67c02e0a7307440bd85d8f3c618311738750ed8b68cfe8c315574e1260
4
+ data.tar.gz: 36f98cdb895bdff0c933f59cc76ac1079b9cd83456ef03c605c7454594fcdc9f
5
5
  SHA512:
6
- metadata.gz: 5a6b5967c6a30d9087ef75f03a3bf79fe668e6499488c23ef43d508ea179882025b71e9b442d98fdea7fb3c22e8ca97d2cce542f5a5fe2236c6ac81c65f7334a
7
- data.tar.gz: 8fcfd021416b668b3de6b3311a7ad456ce0279d4f696cd391450702959003fcb95a9f27ba2d804eb6c3f7aa13937a12ad056db410dd87e3f172b880a63323d1f
6
+ metadata.gz: 1bbb428c95e6f329c9d65dc57947b9690d69a0e09f9f8b9ec5a78181a0656d6170a31fa9ad1dc3a8ee2b7920ea68a59c53f706c059602ff58c7d053e3e306c96
7
+ data.tar.gz: f8f97640a05e5d8a20c506c951606b73357c0759eccf6197e0608954b29fd82e870886a793f6eb8a38b53b8f54ad2ba582785985b633bf04aca4125683451ca6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0 (2025-11-04)
4
+
5
+ Full Changelog: [v0.2.0...v0.3.0](https://github.com/cjavdev/spotted/compare/v0.2.0...v0.3.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** manual updates ([74dd654](https://github.com/cjavdev/spotted/commit/74dd654b38aae172e84db3392e0b8dbfe5842ae8))
10
+
11
+
12
+ ### Chores
13
+
14
+ * bump dependency version and update sorbet types ([b5dbafb](https://github.com/cjavdev/spotted/commit/b5dbafb956916c8e1488a2861d5877533b015e0b))
15
+
3
16
  ## 0.2.0 (2025-10-24)
4
17
 
5
18
  Full Changelog: [v0.1.0...v0.2.0](https://github.com/cjavdev/spotted/compare/v0.1.0...v0.2.0)
data/README.md CHANGED
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "spotted", "~> 0.2.0"
20
+ gem "spotted", "~> 0.3.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -66,6 +66,9 @@ module Spotted
66
66
  # @return [Spotted::Resources::Recommendations]
67
67
  attr_reader :recommendations
68
68
 
69
+ # @return [Spotted::Resources::Webhooks]
70
+ attr_reader :webhooks
71
+
69
72
  # @return [Spotted::Resources::Markets]
70
73
  attr_reader :markets
71
74
 
@@ -163,6 +166,7 @@ module Spotted
163
166
  @audio_features = Spotted::Resources::AudioFeatures.new(client: self)
164
167
  @audio_analysis = Spotted::Resources::AudioAnalysis.new(client: self)
165
168
  @recommendations = Spotted::Resources::Recommendations.new(client: self)
169
+ @webhooks = Spotted::Resources::Webhooks.new(client: self)
166
170
  @markets = Spotted::Resources::Markets.new(client: self)
167
171
  end
168
172
  end
@@ -201,7 +201,8 @@ module Spotted
201
201
  self.class::PLATFORM_HEADERS,
202
202
  {
203
203
  "accept" => "application/json",
204
- "content-type" => "application/json"
204
+ "content-type" => "application/json",
205
+ "user-agent" => user_agent
205
206
  },
206
207
  headers
207
208
  )
@@ -219,6 +220,11 @@ module Spotted
219
220
  # @return [Hash{String=>String}]
220
221
  private def auth_headers = {}
221
222
 
223
+ # @api private
224
+ #
225
+ # @return [String]
226
+ private def user_agent = "#{self.class.name}/Ruby #{Spotted::VERSION}"
227
+
222
228
  # @api private
223
229
  #
224
230
  # @return [String]
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spotted
4
+ module Models
5
+ # @type [Spotted::Internal::Type::Converter]
6
+ UnwrapWebhookEvent = Spotted::Internal::Type::Unknown
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spotted
4
+ module Models
5
+ # @see Spotted::Resources::Webhooks#unwrap
6
+ class WebhookUnwrapParams < Spotted::Internal::Type::BaseModel
7
+ extend Spotted::Internal::Type::RequestParameters::Converter
8
+ include Spotted::Internal::Type::RequestParameters
9
+
10
+ # @!method initialize(request_options: {})
11
+ # @param request_options [Spotted::RequestOptions, Hash{Symbol=>Object}]
12
+ end
13
+ end
14
+ end
@@ -166,7 +166,12 @@ module Spotted
166
166
 
167
167
  TrackRetrieveParams = Spotted::Models::TrackRetrieveParams
168
168
 
169
+ # @type [Spotted::Internal::Type::Converter]
170
+ UnwrapWebhookEvent = Spotted::Models::UnwrapWebhookEvent
171
+
169
172
  UserRetrieveProfileParams = Spotted::Models::UserRetrieveProfileParams
170
173
 
171
174
  Users = Spotted::Models::Users
175
+
176
+ WebhookUnwrapParams = Spotted::Models::WebhookUnwrapParams
172
177
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spotted
4
+ module Resources
5
+ class Webhooks
6
+ # @param payload [String] The raw webhook payload as a string
7
+ #
8
+ # @return [Object]
9
+ def unwrap(payload)
10
+ parsed = JSON.parse(payload, symbolize_names: true)
11
+ Spotted::Internal::Type::Converter.coerce(Spotted::Models::UnwrapWebhookEvent, parsed)
12
+ end
13
+
14
+ # @api private
15
+ #
16
+ # @param client [Spotted::Client]
17
+ def initialize(client:)
18
+ @client = client
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spotted
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/spotted.rb CHANGED
@@ -220,11 +220,13 @@ require_relative "spotted/models/track_list_response"
220
220
  require_relative "spotted/models/track_object"
221
221
  require_relative "spotted/models/track_restriction_object"
222
222
  require_relative "spotted/models/track_retrieve_params"
223
+ require_relative "spotted/models/unwrap_webhook_event"
223
224
  require_relative "spotted/models/user_retrieve_profile_params"
224
225
  require_relative "spotted/models/user_retrieve_profile_response"
225
226
  require_relative "spotted/models/users/playlist_create_params"
226
227
  require_relative "spotted/models/users/playlist_create_response"
227
228
  require_relative "spotted/models/users/playlist_list_params"
229
+ require_relative "spotted/models/webhook_unwrap_params"
228
230
  require_relative "spotted/models"
229
231
  require_relative "spotted/resources/albums"
230
232
  require_relative "spotted/resources/artists"
@@ -257,3 +259,4 @@ require_relative "spotted/resources/shows"
257
259
  require_relative "spotted/resources/tracks"
258
260
  require_relative "spotted/resources/users"
259
261
  require_relative "spotted/resources/users/playlists"
262
+ require_relative "spotted/resources/webhooks"
@@ -61,6 +61,9 @@ module Spotted
61
61
  sig { returns(Spotted::Resources::Recommendations) }
62
62
  attr_reader :recommendations
63
63
 
64
+ sig { returns(Spotted::Resources::Webhooks) }
65
+ attr_reader :webhooks
66
+
64
67
  sig { returns(Spotted::Resources::Markets) }
65
68
  attr_reader :markets
66
69
 
@@ -176,6 +176,11 @@ module Spotted
176
176
  private def auth_headers
177
177
  end
178
178
 
179
+ # @api private
180
+ sig { returns(String) }
181
+ private def user_agent
182
+ end
183
+
179
184
  # @api private
180
185
  sig { returns(String) }
181
186
  private def generate_idempotency_key
@@ -31,7 +31,7 @@ module Spotted
31
31
  #
32
32
  # Assumes superclass fields are totally defined before fields are accessed /
33
33
  # defined on subclasses.
34
- sig { params(child: T.self_type).void }
34
+ sig { params(child: Spotted::Internal::Type::BaseModel).void }
35
35
  def inherited(child)
36
36
  end
37
37
 
@@ -274,9 +274,13 @@ module Spotted
274
274
 
275
275
  # Create a new instance of a model.
276
276
  sig do
277
- params(data: T.any(T::Hash[Symbol, T.anything], T.self_type)).returns(
278
- T.attached_class
279
- )
277
+ params(
278
+ data:
279
+ T.any(
280
+ T::Hash[Symbol, T.anything],
281
+ Spotted::Internal::Type::BaseModel
282
+ )
283
+ ).returns(T.attached_class)
280
284
  end
281
285
  def self.new(data = {})
282
286
  end
@@ -0,0 +1,7 @@
1
+ # typed: strong
2
+
3
+ module Spotted
4
+ module Models
5
+ UnwrapWebhookEvent = T.let(T.anything, Spotted::Internal::Type::Converter)
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ # typed: strong
2
+
3
+ module Spotted
4
+ module Models
5
+ class WebhookUnwrapParams < Spotted::Internal::Type::BaseModel
6
+ extend Spotted::Internal::Type::RequestParameters::Converter
7
+ include Spotted::Internal::Type::RequestParameters
8
+
9
+ OrHash =
10
+ T.type_alias do
11
+ T.any(Spotted::WebhookUnwrapParams, Spotted::Internal::AnyHash)
12
+ end
13
+
14
+ sig do
15
+ params(request_options: Spotted::RequestOptions::OrHash).returns(
16
+ T.attached_class
17
+ )
18
+ end
19
+ def self.new(request_options: {})
20
+ end
21
+
22
+ sig { override.returns({ request_options: Spotted::RequestOptions }) }
23
+ def to_hash
24
+ end
25
+ end
26
+ end
27
+ end
@@ -130,7 +130,15 @@ module Spotted
130
130
 
131
131
  TrackRetrieveParams = Spotted::Models::TrackRetrieveParams
132
132
 
133
+ UnwrapWebhookEvent =
134
+ T.let(
135
+ Spotted::Models::UnwrapWebhookEvent,
136
+ Spotted::Internal::Type::Converter
137
+ )
138
+
133
139
  UserRetrieveProfileParams = Spotted::Models::UserRetrieveProfileParams
134
140
 
135
141
  Users = Spotted::Models::Users
142
+
143
+ WebhookUnwrapParams = Spotted::Models::WebhookUnwrapParams
136
144
  end
@@ -0,0 +1,19 @@
1
+ # typed: strong
2
+
3
+ module Spotted
4
+ module Resources
5
+ class Webhooks
6
+ sig { params(payload: String).returns(T.anything) }
7
+ def unwrap(
8
+ # The raw webhook payload as a string
9
+ payload
10
+ )
11
+ end
12
+
13
+ # @api private
14
+ sig { params(client: Spotted::Client).returns(T.attached_class) }
15
+ def self.new(client:)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -42,6 +42,8 @@ module Spotted
42
42
 
43
43
  attr_reader recommendations: Spotted::Resources::Recommendations
44
44
 
45
+ attr_reader webhooks: Spotted::Resources::Webhooks
46
+
45
47
  attr_reader markets: Spotted::Resources::Markets
46
48
 
47
49
  # @api private
@@ -87,6 +87,8 @@ module Spotted
87
87
 
88
88
  private def auth_headers: -> ::Hash[String, String]
89
89
 
90
+ private def user_agent: -> String
91
+
90
92
  private def generate_idempotency_key: -> String
91
93
 
92
94
  private def build_request: (
@@ -0,0 +1,5 @@
1
+ module Spotted
2
+ module Models
3
+ UnwrapWebhookEvent: Spotted::Internal::Type::Converter
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Spotted
2
+ module Models
3
+ type webhook_unwrap_params =
4
+ { } & Spotted::Internal::Type::request_parameters
5
+
6
+ class WebhookUnwrapParams < Spotted::Internal::Type::BaseModel
7
+ extend Spotted::Internal::Type::RequestParameters::Converter
8
+ include Spotted::Internal::Type::RequestParameters
9
+
10
+ def initialize: (?request_options: Spotted::request_opts) -> void
11
+
12
+ def to_hash: -> { request_options: Spotted::RequestOptions }
13
+ end
14
+ end
15
+ end
@@ -125,7 +125,11 @@ module Spotted
125
125
 
126
126
  class TrackRetrieveParams = Spotted::Models::TrackRetrieveParams
127
127
 
128
+ UnwrapWebhookEvent: Spotted::Internal::Type::Converter
129
+
128
130
  class UserRetrieveProfileParams = Spotted::Models::UserRetrieveProfileParams
129
131
 
130
132
  module Users = Spotted::Models::Users
133
+
134
+ class WebhookUnwrapParams = Spotted::Models::WebhookUnwrapParams
131
135
  end
@@ -0,0 +1,9 @@
1
+ module Spotted
2
+ module Resources
3
+ class Webhooks
4
+ def unwrap: (String payload) -> top
5
+
6
+ def initialize: (client: Spotted::Client) -> void
7
+ end
8
+ end
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spotted
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spotted
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-24 00:00:00.000000000 Z
11
+ date: 2025-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool
@@ -223,11 +223,13 @@ files:
223
223
  - lib/spotted/models/track_object.rb
224
224
  - lib/spotted/models/track_restriction_object.rb
225
225
  - lib/spotted/models/track_retrieve_params.rb
226
+ - lib/spotted/models/unwrap_webhook_event.rb
226
227
  - lib/spotted/models/user_retrieve_profile_params.rb
227
228
  - lib/spotted/models/user_retrieve_profile_response.rb
228
229
  - lib/spotted/models/users/playlist_create_params.rb
229
230
  - lib/spotted/models/users/playlist_create_response.rb
230
231
  - lib/spotted/models/users/playlist_list_params.rb
232
+ - lib/spotted/models/webhook_unwrap_params.rb
231
233
  - lib/spotted/request_options.rb
232
234
  - lib/spotted/resources/albums.rb
233
235
  - lib/spotted/resources/artists.rb
@@ -260,6 +262,7 @@ files:
260
262
  - lib/spotted/resources/tracks.rb
261
263
  - lib/spotted/resources/users.rb
262
264
  - lib/spotted/resources/users/playlists.rb
265
+ - lib/spotted/resources/webhooks.rb
263
266
  - lib/spotted/version.rb
264
267
  - manifest.yaml
265
268
  - rbi/spotted/client.rbi
@@ -449,11 +452,13 @@ files:
449
452
  - rbi/spotted/models/track_object.rbi
450
453
  - rbi/spotted/models/track_restriction_object.rbi
451
454
  - rbi/spotted/models/track_retrieve_params.rbi
455
+ - rbi/spotted/models/unwrap_webhook_event.rbi
452
456
  - rbi/spotted/models/user_retrieve_profile_params.rbi
453
457
  - rbi/spotted/models/user_retrieve_profile_response.rbi
454
458
  - rbi/spotted/models/users/playlist_create_params.rbi
455
459
  - rbi/spotted/models/users/playlist_create_response.rbi
456
460
  - rbi/spotted/models/users/playlist_list_params.rbi
461
+ - rbi/spotted/models/webhook_unwrap_params.rbi
457
462
  - rbi/spotted/request_options.rbi
458
463
  - rbi/spotted/resources/albums.rbi
459
464
  - rbi/spotted/resources/artists.rbi
@@ -486,6 +491,7 @@ files:
486
491
  - rbi/spotted/resources/tracks.rbi
487
492
  - rbi/spotted/resources/users.rbi
488
493
  - rbi/spotted/resources/users/playlists.rbi
494
+ - rbi/spotted/resources/webhooks.rbi
489
495
  - rbi/spotted/version.rbi
490
496
  - sig/spotted/client.rbs
491
497
  - sig/spotted/errors.rbs
@@ -674,11 +680,13 @@ files:
674
680
  - sig/spotted/models/track_object.rbs
675
681
  - sig/spotted/models/track_restriction_object.rbs
676
682
  - sig/spotted/models/track_retrieve_params.rbs
683
+ - sig/spotted/models/unwrap_webhook_event.rbs
677
684
  - sig/spotted/models/user_retrieve_profile_params.rbs
678
685
  - sig/spotted/models/user_retrieve_profile_response.rbs
679
686
  - sig/spotted/models/users/playlist_create_params.rbs
680
687
  - sig/spotted/models/users/playlist_create_response.rbs
681
688
  - sig/spotted/models/users/playlist_list_params.rbs
689
+ - sig/spotted/models/webhook_unwrap_params.rbs
682
690
  - sig/spotted/request_options.rbs
683
691
  - sig/spotted/resources/albums.rbs
684
692
  - sig/spotted/resources/artists.rbs
@@ -711,6 +719,7 @@ files:
711
719
  - sig/spotted/resources/tracks.rbs
712
720
  - sig/spotted/resources/users.rbs
713
721
  - sig/spotted/resources/users/playlists.rbs
722
+ - sig/spotted/resources/webhooks.rbs
714
723
  - sig/spotted/version.rbs
715
724
  homepage: https://gemdocs.org/gems/spotted
716
725
  licenses: []