trycourier 3.4.0.pre.alpha7 → 3.4.0.pre.alpha9

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/README.md +13 -11
  4. data/SECURITY.md +4 -0
  5. data/lib/trycourier/internal/transport/base_client.rb +7 -1
  6. data/lib/trycourier/internal/transport/pooled_net_requester.rb +6 -2
  7. data/lib/trycourier/models/tenants/{tenant_default_preferences → preferences}/item_delete_params.rb +2 -2
  8. data/lib/trycourier/models/tenants/{tenant_default_preferences → preferences}/item_update_params.rb +2 -2
  9. data/lib/trycourier/models/users/user_token.rb +9 -9
  10. data/lib/trycourier/resources/profiles/lists.rb +2 -2
  11. data/lib/trycourier/resources/profiles.rb +3 -3
  12. data/lib/trycourier/resources/tenants/{tenant_default_preferences → preferences}/items.rb +6 -7
  13. data/lib/trycourier/resources/tenants/{tenant_default_preferences.rb → preferences.rb} +3 -3
  14. data/lib/trycourier/resources/tenants.rb +3 -4
  15. data/lib/trycourier/resources/users/tokens.rb +3 -3
  16. data/lib/trycourier/version.rb +1 -1
  17. data/lib/trycourier.rb +5 -4
  18. data/manifest.yaml +1 -0
  19. data/rbi/trycourier/internal/transport/base_client.rbi +5 -0
  20. data/rbi/trycourier/internal/transport/pooled_net_requester.rbi +6 -2
  21. data/rbi/trycourier/internal/type/base_model.rbi +8 -4
  22. data/rbi/trycourier/models/tenants/{tenant_default_preferences → preferences}/item_delete_params.rbi +2 -2
  23. data/rbi/trycourier/models/tenants/{tenant_default_preferences → preferences}/item_update_params.rbi +2 -2
  24. data/rbi/trycourier/models/users/user_token.rbi +8 -8
  25. data/rbi/trycourier/resources/profiles/lists.rbi +4 -2
  26. data/rbi/trycourier/resources/profiles.rbi +6 -3
  27. data/rbi/trycourier/resources/tenants/{tenant_default_preferences → preferences}/items.rbi +1 -1
  28. data/rbi/trycourier/resources/tenants/{tenant_default_preferences.rbi → preferences.rbi} +2 -6
  29. data/rbi/trycourier/resources/tenants.rbi +2 -2
  30. data/rbi/trycourier/resources/users/tokens.rbi +3 -3
  31. data/sig/trycourier/internal/transport/base_client.rbs +2 -0
  32. data/sig/trycourier/internal/transport/pooled_net_requester.rbs +4 -1
  33. data/sig/trycourier/models/tenants/{tenant_default_preferences → preferences}/item_delete_params.rbs +1 -1
  34. data/sig/trycourier/models/tenants/{tenant_default_preferences → preferences}/item_update_params.rbs +1 -1
  35. data/sig/trycourier/models/users/user_token.rbs +5 -5
  36. data/sig/trycourier/resources/tenants/{tenant_default_preferences → preferences}/items.rbs +1 -1
  37. data/sig/trycourier/resources/tenants/{tenant_default_preferences.rbs → preferences.rbs} +2 -2
  38. data/sig/trycourier/resources/tenants.rbs +1 -1
  39. data/sig/trycourier/resources/users/tokens.rbs +1 -1
  40. metadata +15 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5fa5020a219e691d41a4ff4c23818a3bc0ae64841f594d0e4645b8c32455bfdd
4
- data.tar.gz: '06091225ad3b4a3491ffbe05c2cbc24298dedfa8113205bee1839b65ea985fef'
3
+ metadata.gz: f6b262d22f8b3baf507f1ec2099fa7e251bcd3af0fa826e18bdfe293082a3c04
4
+ data.tar.gz: f5af66fa239ded8e0661050ed18ef5ef7c7064e1acb39a414f78cc1bbf9968de
5
5
  SHA512:
6
- metadata.gz: b9c05ff1d3cc88b637a338435d34d33b581ec3d70e732446047a714d36db15ac72c499507d6c30321307757919007e0a1832eab632ae353c686e5fc2e9bf9c63
7
- data.tar.gz: f5c6608c5e5ee3842b138d45effcdb326c40431337a72ed1f8b22f0d975c4e1e18461681663767f67799380d56417abbff018996e06f9fc67b91ba6225b16913
6
+ metadata.gz: 5157e487e5316da404b2932baa5750d0e8d2fb59cb55873dae6a9fb140d26b6c953a9e32dc06677aff7a32118a4b721dc162d3e7f87d66f4aa45d562e7a42964
7
+ data.tar.gz: 74274de5d022bf22f4a878b15c537a08640c10d04da4b6c1dfd76125aded4becb5e9705966bf9ac95641672055c97966c15a403f43b511c890ed6f149e062580
data/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.4.0-alpha9 (2025-11-07)
4
+
5
+ Full Changelog: [v3.4.0-alpha8...v3.4.0-alpha9](https://github.com/trycourier/courier-ruby/compare/v3.4.0-alpha8...v3.4.0-alpha9)
6
+
7
+ ### Bug Fixes
8
+
9
+ * Better Python Samples + Updates to naming ([1d8cd06](https://github.com/trycourier/courier-ruby/commit/1d8cd06d373fa53e940cd05d26ce24005ef93955))
10
+
11
+ ## 3.4.0-alpha8 (2025-11-05)
12
+
13
+ Full Changelog: [v3.4.0-alpha7...v3.4.0-alpha8](https://github.com/trycourier/courier-ruby/compare/v3.4.0-alpha7...v3.4.0-alpha8)
14
+
15
+ ### Features
16
+
17
+ * Attempt kick off again ([a5ffc84](https://github.com/trycourier/courier-ruby/commit/a5ffc84f9ed318eb757d6736eca3562d1d71b2e8))
18
+ * Kick off the change (Change to user profile in descriptions) ([f4dc8ff](https://github.com/trycourier/courier-ruby/commit/f4dc8ffe56eb34a7ae471473ead69550db011aaa))
19
+ * Organization update ([c6f7b97](https://github.com/trycourier/courier-ruby/commit/c6f7b970508aca2bd1fca5d69e83c76def40058d))
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * better thread safety via early initializing SSL store during HTTP client creation ([f3dfeec](https://github.com/trycourier/courier-ruby/commit/f3dfeec90dc59b454f787ef88e0b1a7b2af02ef7))
25
+
26
+
27
+ ### Chores
28
+
29
+ * bump dependency version and update sorbet types ([4d9baaa](https://github.com/trycourier/courier-ruby/commit/4d9baaac7f0ac9365f648ba0a3f10edb646e70a8))
30
+
3
31
  ## 3.4.0-alpha7 (2025-10-31)
4
32
 
5
33
  Full Changelog: [v3.4.0-alpha6...v3.4.0-alpha7](https://github.com/trycourier/courier-ruby/compare/v3.4.0-alpha6...v3.4.0-alpha7)
data/README.md CHANGED
@@ -8,6 +8,8 @@ It is generated with [Stainless](https://www.stainless.com/).
8
8
 
9
9
  Documentation for releases of this gem can be found [on RubyDoc](https://gemdocs.org/gems/trycourier).
10
10
 
11
+ The REST API documentation can be found on [www.courier.com](https://www.courier.com/docs).
12
+
11
13
  ## Installation
12
14
 
13
15
  To use this gem, install via Bundler by adding the following to your application's `Gemfile`:
@@ -15,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
15
17
  <!-- x-release-please-start-version -->
16
18
 
17
19
  ```ruby
18
- gem "trycourier", "~> 3.4.0.pre.alpha7"
20
+ gem "trycourier", "~> 3.4.0.pre.alpha9"
19
21
  ```
20
22
 
21
23
  <!-- x-release-please-end -->
@@ -31,7 +33,7 @@ courier = Trycourier::Client.new(
31
33
  )
32
34
 
33
35
  response = courier.send_.message(
34
- message: {to: {user_id: "your_user_id"}, template: "your_template", data: {foo: "bar"}}
36
+ message: {to: {user_id: "your_user_id"}, template: "your_template_id", data: {foo: "bar"}}
35
37
  )
36
38
 
37
39
  puts(response.requestId)
@@ -44,7 +46,7 @@ When the library is unable to connect to the API, or if the API returns a non-su
44
46
  ```ruby
45
47
  begin
46
48
  send_ = courier.send_.message(
47
- message: {to: {user_id: "your_user_id"}, template: "your_template", data: {foo: "bar"}}
49
+ message: {to: {user_id: "your_user_id"}, template: "your_template_id", data: {foo: "bar"}}
48
50
  )
49
51
  rescue Trycourier::Errors::APIConnectionError => e
50
52
  puts("The server could not be reached")
@@ -89,7 +91,7 @@ courier = Trycourier::Client.new(
89
91
 
90
92
  # Or, configure per-request:
91
93
  courier.send_.message(
92
- message: {to: {user_id: "your_user_id"}, template: "your_template", data: {foo: "bar"}},
94
+ message: {to: {user_id: "your_user_id"}, template: "your_template_id", data: {foo: "bar"}},
93
95
  request_options: {max_retries: 5}
94
96
  )
95
97
  ```
@@ -106,7 +108,7 @@ courier = Trycourier::Client.new(
106
108
 
107
109
  # Or, configure per-request:
108
110
  courier.send_.message(
109
- message: {to: {user_id: "your_user_id"}, template: "your_template", data: {foo: "bar"}},
111
+ message: {to: {user_id: "your_user_id"}, template: "your_template_id", data: {foo: "bar"}},
110
112
  request_options: {timeout: 5}
111
113
  )
112
114
  ```
@@ -140,7 +142,7 @@ Note: the `extra_` parameters of the same name overrides the documented paramete
140
142
  ```ruby
141
143
  response =
142
144
  courier.send_.message(
143
- message: {to: {user_id: "your_user_id"}, template: "your_template", data: {foo: "bar"}},
145
+ message: {to: {user_id: "your_user_id"}, template: "your_template_id", data: {foo: "bar"}},
144
146
  request_options: {
145
147
  extra_query: {my_query_parameter: value},
146
148
  extra_body: {my_body_parameter: value},
@@ -189,7 +191,7 @@ You can provide typesafe request parameters like so:
189
191
  courier.send_.message(
190
192
  message: Trycourier::SendMessageParams::Message.new(
191
193
  to: Trycourier::UserRecipient.new(user_id: "your_user_id"),
192
- template: "your_template",
194
+ template: "your_template_id",
193
195
  data: {foo: "bar"}
194
196
  )
195
197
  )
@@ -200,14 +202,14 @@ Or, equivalently:
200
202
  ```ruby
201
203
  # Hashes work, but are not typesafe:
202
204
  courier.send_.message(
203
- message: {to: {user_id: "your_user_id"}, template: "your_template", data: {foo: "bar"}}
205
+ message: {to: {user_id: "your_user_id"}, template: "your_template_id", data: {foo: "bar"}}
204
206
  )
205
207
 
206
208
  # You can also splat a full Params class:
207
209
  params = Trycourier::SendMessageParams.new(
208
210
  message: Trycourier::SendMessageParams::Message.new(
209
211
  to: Trycourier::UserRecipient.new(user_id: "your_user_id"),
210
- template: "your_template",
212
+ template: "your_template_id",
211
213
  data: {foo: "bar"}
212
214
  )
213
215
  )
@@ -230,13 +232,13 @@ Enum parameters have a "relaxed" type, so you can either pass in enum constants
230
232
 
231
233
  ```ruby
232
234
  # Using the enum constants preserves the tagged type information:
233
- courier.tenants.tenant_default_preferences.items.update(
235
+ courier.tenants.preferences.items.update(
234
236
  status: Trycourier::SubscriptionTopicNew::Status::OPTED_OUT,
235
237
  # …
236
238
  )
237
239
 
238
240
  # Literal values are also permissible:
239
- courier.tenants.tenant_default_preferences.items.update(
241
+ courier.tenants.preferences.items.update(
240
242
  status: :OPTED_OUT,
241
243
  # …
242
244
  )
data/SECURITY.md CHANGED
@@ -18,6 +18,10 @@ before making any information public.
18
18
  If you encounter security issues that are not directly related to SDKs but pertain to the services
19
19
  or products provided by Courier, please follow the respective company's security reporting guidelines.
20
20
 
21
+ ### Courier Terms and Policies
22
+
23
+ Please contact support@courier.com for any questions or concerns regarding the security of our services.
24
+
21
25
  ---
22
26
 
23
27
  Thank you for helping us keep the SDKs and systems they interact with secure.
@@ -201,7 +201,8 @@ module Trycourier
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 Trycourier
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 #{Trycourier::VERSION}"
227
+
222
228
  # @api private
223
229
  #
224
230
  # @return [String]
@@ -16,10 +16,11 @@ module Trycourier
16
16
  class << self
17
17
  # @api private
18
18
  #
19
+ # @param cert_store [OpenSSL::X509::Store]
19
20
  # @param url [URI::Generic]
20
21
  #
21
22
  # @return [Net::HTTP]
22
- def connect(url)
23
+ def connect(cert_store:, url:)
23
24
  port =
24
25
  case [url.port, url.scheme]
25
26
  in [Integer, _]
@@ -33,6 +34,8 @@ module Trycourier
33
34
  Net::HTTP.new(url.host, port).tap do
34
35
  _1.use_ssl = %w[https wss].include?(url.scheme)
35
36
  _1.max_retries = 0
37
+
38
+ (_1.cert_store = cert_store) if _1.use_ssl?
36
39
  end
37
40
  end
38
41
 
@@ -102,7 +105,7 @@ module Trycourier
102
105
  pool =
103
106
  @mutex.synchronize do
104
107
  @pools[origin] ||= ConnectionPool.new(size: @size) do
105
- self.class.connect(url)
108
+ self.class.connect(cert_store: @cert_store, url: url)
106
109
  end
107
110
  end
108
111
 
@@ -192,6 +195,7 @@ module Trycourier
192
195
  def initialize(size: self.class::DEFAULT_MAX_CONNECTIONS)
193
196
  @mutex = Mutex.new
194
197
  @size = size
198
+ @cert_store = OpenSSL::X509::Store.new.tap(&:set_default_paths)
195
199
  @pools = {}
196
200
  end
197
201
 
@@ -3,8 +3,8 @@
3
3
  module Trycourier
4
4
  module Models
5
5
  module Tenants
6
- module TenantDefaultPreferences
7
- # @see Trycourier::Resources::Tenants::TenantDefaultPreferences::Items#delete
6
+ module Preferences
7
+ # @see Trycourier::Resources::Tenants::Preferences::Items#delete
8
8
  class ItemDeleteParams < Trycourier::Internal::Type::BaseModel
9
9
  extend Trycourier::Internal::Type::RequestParameters::Converter
10
10
  include Trycourier::Internal::Type::RequestParameters
@@ -3,8 +3,8 @@
3
3
  module Trycourier
4
4
  module Models
5
5
  module Tenants
6
- module TenantDefaultPreferences
7
- # @see Trycourier::Resources::Tenants::TenantDefaultPreferences::Items#update
6
+ module Preferences
7
+ # @see Trycourier::Resources::Tenants::Preferences::Items#update
8
8
  class ItemUpdateParams < Trycourier::Models::SubscriptionTopicNew
9
9
  extend Trycourier::Internal::Type::RequestParameters::Converter
10
10
  include Trycourier::Internal::Type::RequestParameters
@@ -4,17 +4,17 @@ module Trycourier
4
4
  module Models
5
5
  module Users
6
6
  class UserToken < Trycourier::Internal::Type::BaseModel
7
+ # @!attribute token
8
+ # Full body of the token. Must match token in URL path parameter.
9
+ #
10
+ # @return [String]
11
+ required :token, String
12
+
7
13
  # @!attribute provider_key
8
14
  #
9
15
  # @return [Symbol, Trycourier::Models::Users::UserToken::ProviderKey]
10
16
  required :provider_key, enum: -> { Trycourier::Users::UserToken::ProviderKey }
11
17
 
12
- # @!attribute token
13
- # Full body of the token. Must match token in URL.
14
- #
15
- # @return [String, nil]
16
- optional :token, String, nil?: true
17
-
18
18
  # @!attribute device
19
19
  # Information about the device the token is associated with.
20
20
  #
@@ -40,13 +40,13 @@ module Trycourier
40
40
  # @return [Trycourier::Models::Users::UserToken::Tracking, nil]
41
41
  optional :tracking, -> { Trycourier::Users::UserToken::Tracking }, nil?: true
42
42
 
43
- # @!method initialize(provider_key:, token: nil, device: nil, expiry_date: nil, properties: nil, tracking: nil)
43
+ # @!method initialize(token:, provider_key:, device: nil, expiry_date: nil, properties: nil, tracking: nil)
44
44
  # Some parameter documentations has been truncated, see
45
45
  # {Trycourier::Models::Users::UserToken} for more details.
46
46
  #
47
- # @param provider_key [Symbol, Trycourier::Models::Users::UserToken::ProviderKey]
47
+ # @param token [String] Full body of the token. Must match token in URL path parameter.
48
48
  #
49
- # @param token [String, nil] Full body of the token. Must match token in URL.
49
+ # @param provider_key [Symbol, Trycourier::Models::Users::UserToken::ProviderKey]
50
50
  #
51
51
  # @param device [Trycourier::Models::Users::UserToken::Device, nil] Information about the device the token is associated with.
52
52
  #
@@ -11,7 +11,7 @@ module Trycourier
11
11
  #
12
12
  # @overload retrieve(user_id, cursor: nil, request_options: {})
13
13
  #
14
- # @param user_id [String] A unique identifier representing the user associated with the requested profile.
14
+ # @param user_id [String] A unique identifier representing the user associated with the requested user pro
15
15
  #
16
16
  # @param cursor [String, nil] A unique identifier that allows for fetching the next set of message statuses.
17
17
  #
@@ -62,7 +62,7 @@ module Trycourier
62
62
  #
63
63
  # @overload subscribe(user_id, lists:, request_options: {})
64
64
  #
65
- # @param user_id [String] A unique identifier representing the user associated with the requested profile.
65
+ # @param user_id [String] A unique identifier representing the user associated with the requested user pro
66
66
  #
67
67
  # @param lists [Array<Trycourier::Models::SubscribeToListsRequestItem>]
68
68
  #
@@ -64,7 +64,7 @@ module Trycourier
64
64
  #
65
65
  # @overload update(user_id, patch:, request_options: {})
66
66
  #
67
- # @param user_id [String] A unique identifier representing the user associated with the requested profile.
67
+ # @param user_id [String] A unique identifier representing the user associated with the requested user pro
68
68
  #
69
69
  # @param patch [Array<Trycourier::Models::ProfileUpdateParams::Patch>] List of patch operations to apply to the profile.
70
70
  #
@@ -91,7 +91,7 @@ module Trycourier
91
91
  #
92
92
  # @overload delete(user_id, request_options: {})
93
93
  #
94
- # @param user_id [String] A unique identifier representing the user associated with the requested profile.
94
+ # @param user_id [String] A unique identifier representing the user associated with the requested user pro
95
95
  #
96
96
  # @param request_options [Trycourier::RequestOptions, Hash{Symbol=>Object}, nil]
97
97
  #
@@ -118,7 +118,7 @@ module Trycourier
118
118
  #
119
119
  # @overload replace(user_id, profile:, request_options: {})
120
120
  #
121
- # @param user_id [String] A unique identifier representing the user associated with the requested profile.
121
+ # @param user_id [String] A unique identifier representing the user associated with the requested user pro
122
122
  #
123
123
  # @param profile [Hash{Symbol=>Object}]
124
124
  #
@@ -3,11 +3,10 @@
3
3
  module Trycourier
4
4
  module Resources
5
5
  class Tenants
6
- class TenantDefaultPreferences
6
+ class Preferences
7
7
  class Items
8
8
  # Some parameter documentations has been truncated, see
9
- # {Trycourier::Models::Tenants::TenantDefaultPreferences::ItemUpdateParams} for
10
- # more details.
9
+ # {Trycourier::Models::Tenants::Preferences::ItemUpdateParams} for more details.
11
10
  #
12
11
  # Create or Replace Default Preferences For Topic
13
12
  #
@@ -27,9 +26,9 @@ module Trycourier
27
26
  #
28
27
  # @return [nil]
29
28
  #
30
- # @see Trycourier::Models::Tenants::TenantDefaultPreferences::ItemUpdateParams
29
+ # @see Trycourier::Models::Tenants::Preferences::ItemUpdateParams
31
30
  def update(topic_id, params)
32
- parsed, options = Trycourier::Tenants::TenantDefaultPreferences::ItemUpdateParams.dump_request(params)
31
+ parsed, options = Trycourier::Tenants::Preferences::ItemUpdateParams.dump_request(params)
33
32
  tenant_id =
34
33
  parsed.delete(:tenant_id) do
35
34
  raise ArgumentError.new("missing required path argument #{_1}")
@@ -55,9 +54,9 @@ module Trycourier
55
54
  #
56
55
  # @return [nil]
57
56
  #
58
- # @see Trycourier::Models::Tenants::TenantDefaultPreferences::ItemDeleteParams
57
+ # @see Trycourier::Models::Tenants::Preferences::ItemDeleteParams
59
58
  def delete(topic_id, params)
60
- parsed, options = Trycourier::Tenants::TenantDefaultPreferences::ItemDeleteParams.dump_request(params)
59
+ parsed, options = Trycourier::Tenants::Preferences::ItemDeleteParams.dump_request(params)
61
60
  tenant_id =
62
61
  parsed.delete(:tenant_id) do
63
62
  raise ArgumentError.new("missing required path argument #{_1}")
@@ -3,8 +3,8 @@
3
3
  module Trycourier
4
4
  module Resources
5
5
  class Tenants
6
- class TenantDefaultPreferences
7
- # @return [Trycourier::Resources::Tenants::TenantDefaultPreferences::Items]
6
+ class Preferences
7
+ # @return [Trycourier::Resources::Tenants::Preferences::Items]
8
8
  attr_reader :items
9
9
 
10
10
  # @api private
@@ -12,7 +12,7 @@ module Trycourier
12
12
  # @param client [Trycourier::Client]
13
13
  def initialize(client:)
14
14
  @client = client
15
- @items = Trycourier::Resources::Tenants::TenantDefaultPreferences::Items.new(client: client)
15
+ @items = Trycourier::Resources::Tenants::Preferences::Items.new(client: client)
16
16
  end
17
17
  end
18
18
  end
@@ -3,8 +3,8 @@
3
3
  module Trycourier
4
4
  module Resources
5
5
  class Tenants
6
- # @return [Trycourier::Resources::Tenants::TenantDefaultPreferences]
7
- attr_reader :tenant_default_preferences
6
+ # @return [Trycourier::Resources::Tenants::Preferences]
7
+ attr_reader :preferences
8
8
 
9
9
  # @return [Trycourier::Resources::Tenants::Templates]
10
10
  attr_reader :templates
@@ -149,8 +149,7 @@ module Trycourier
149
149
  # @param client [Trycourier::Client]
150
150
  def initialize(client:)
151
151
  @client = client
152
- @tenant_default_preferences =
153
- Trycourier::Resources::Tenants::TenantDefaultPreferences.new(client: client)
152
+ @preferences = Trycourier::Resources::Tenants::Preferences.new(client: client)
154
153
  @templates = Trycourier::Resources::Tenants::Templates.new(client: client)
155
154
  end
156
155
  end
@@ -133,15 +133,15 @@ module Trycourier
133
133
  #
134
134
  # Adds a single token to a user and overwrites a matching existing token.
135
135
  #
136
- # @overload add_single(path_token, user_id:, provider_key:, body_token: nil, device: nil, expiry_date: nil, properties: nil, tracking: nil, request_options: {})
136
+ # @overload add_single(path_token, user_id:, body_token:, provider_key:, device: nil, expiry_date: nil, properties: nil, tracking: nil, request_options: {})
137
137
  #
138
138
  # @param path_token [String] Path param: The full token string.
139
139
  #
140
140
  # @param user_id [String] Path param: The user's ID. This can be any uniquely identifiable string.
141
141
  #
142
- # @param provider_key [Symbol, Trycourier::Models::Users::UserToken::ProviderKey] Body param:
142
+ # @param body_token [String] Body param: Full body of the token. Must match token in URL path parameter.
143
143
  #
144
- # @param body_token [String, nil] Body param: Full body of the token. Must match token in URL.
144
+ # @param provider_key [Symbol, Trycourier::Models::Users::UserToken::ProviderKey] Body param:
145
145
  #
146
146
  # @param device [Trycourier::Models::Users::UserToken::Device, nil] Body param: Information about the device the token is associated with.
147
147
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Trycourier
4
- VERSION = "3.4.0.pre.alpha7"
4
+ VERSION = "3.4.0.pre.alpha9"
5
5
  end
data/lib/trycourier.rb CHANGED
@@ -9,6 +9,7 @@ require "erb"
9
9
  require "etc"
10
10
  require "json"
11
11
  require "net/http"
12
+ require "openssl"
12
13
  require "pathname"
13
14
  require "rbconfig"
14
15
  require "securerandom"
@@ -192,11 +193,11 @@ require_relative "trycourier/models/tenant_list_response"
192
193
  require_relative "trycourier/models/tenant_list_users_params"
193
194
  require_relative "trycourier/models/tenant_list_users_response"
194
195
  require_relative "trycourier/models/tenant_retrieve_params"
196
+ require_relative "trycourier/models/tenants/preferences/item_delete_params"
197
+ require_relative "trycourier/models/tenants/preferences/item_update_params"
195
198
  require_relative "trycourier/models/tenants/template_list_params"
196
199
  require_relative "trycourier/models/tenants/template_list_response"
197
200
  require_relative "trycourier/models/tenants/template_retrieve_params"
198
- require_relative "trycourier/models/tenants/tenant_default_preferences/item_delete_params"
199
- require_relative "trycourier/models/tenants/tenant_default_preferences/item_update_params"
200
201
  require_relative "trycourier/models/tenant_update_params"
201
202
  require_relative "trycourier/models/text_style"
202
203
  require_relative "trycourier/models/translation_retrieve_params"
@@ -246,9 +247,9 @@ require_relative "trycourier/resources/profiles/lists"
246
247
  require_relative "trycourier/resources/requests"
247
248
  require_relative "trycourier/resources/send"
248
249
  require_relative "trycourier/resources/tenants"
250
+ require_relative "trycourier/resources/tenants/preferences"
251
+ require_relative "trycourier/resources/tenants/preferences/items"
249
252
  require_relative "trycourier/resources/tenants/templates"
250
- require_relative "trycourier/resources/tenants/tenant_default_preferences"
251
- require_relative "trycourier/resources/tenants/tenant_default_preferences/items"
252
253
  require_relative "trycourier/resources/translations"
253
254
  require_relative "trycourier/resources/users"
254
255
  require_relative "trycourier/resources/users/preferences"
data/manifest.yaml CHANGED
@@ -6,6 +6,7 @@ dependencies:
6
6
  - etc
7
7
  - json
8
8
  - net/http
9
+ - openssl
9
10
  - pathname
10
11
  - rbconfig
11
12
  - securerandom
@@ -178,6 +178,11 @@ module Trycourier
178
178
  private def auth_headers
179
179
  end
180
180
 
181
+ # @api private
182
+ sig { returns(String) }
183
+ private def user_agent
184
+ end
185
+
181
186
  # @api private
182
187
  sig { returns(String) }
183
188
  private def generate_idempotency_key
@@ -26,8 +26,12 @@ module Trycourier
26
26
 
27
27
  class << self
28
28
  # @api private
29
- sig { params(url: URI::Generic).returns(Net::HTTP) }
30
- def connect(url)
29
+ sig do
30
+ params(cert_store: OpenSSL::X509::Store, url: URI::Generic).returns(
31
+ Net::HTTP
32
+ )
33
+ end
34
+ def connect(cert_store:, url:)
31
35
  end
32
36
 
33
37
  # @api private
@@ -31,7 +31,7 @@ module Trycourier
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: Trycourier::Internal::Type::BaseModel).void }
35
35
  def inherited(child)
36
36
  end
37
37
 
@@ -276,9 +276,13 @@ module Trycourier
276
276
 
277
277
  # Create a new instance of a model.
278
278
  sig do
279
- params(data: T.any(T::Hash[Symbol, T.anything], T.self_type)).returns(
280
- T.attached_class
281
- )
279
+ params(
280
+ data:
281
+ T.any(
282
+ T::Hash[Symbol, T.anything],
283
+ Trycourier::Internal::Type::BaseModel
284
+ )
285
+ ).returns(T.attached_class)
282
286
  end
283
287
  def self.new(data = {})
284
288
  end
@@ -3,7 +3,7 @@
3
3
  module Trycourier
4
4
  module Models
5
5
  module Tenants
6
- module TenantDefaultPreferences
6
+ module Preferences
7
7
  class ItemDeleteParams < Trycourier::Internal::Type::BaseModel
8
8
  extend Trycourier::Internal::Type::RequestParameters::Converter
9
9
  include Trycourier::Internal::Type::RequestParameters
@@ -11,7 +11,7 @@ module Trycourier
11
11
  OrHash =
12
12
  T.type_alias do
13
13
  T.any(
14
- Trycourier::Tenants::TenantDefaultPreferences::ItemDeleteParams,
14
+ Trycourier::Tenants::Preferences::ItemDeleteParams,
15
15
  Trycourier::Internal::AnyHash
16
16
  )
17
17
  end
@@ -3,7 +3,7 @@
3
3
  module Trycourier
4
4
  module Models
5
5
  module Tenants
6
- module TenantDefaultPreferences
6
+ module Preferences
7
7
  class ItemUpdateParams < Trycourier::Models::SubscriptionTopicNew
8
8
  extend Trycourier::Internal::Type::RequestParameters::Converter
9
9
  include Trycourier::Internal::Type::RequestParameters
@@ -11,7 +11,7 @@ module Trycourier
11
11
  OrHash =
12
12
  T.type_alias do
13
13
  T.any(
14
- Trycourier::Tenants::TenantDefaultPreferences::ItemUpdateParams,
14
+ Trycourier::Tenants::Preferences::ItemUpdateParams,
15
15
  Trycourier::Internal::AnyHash
16
16
  )
17
17
  end
@@ -11,13 +11,13 @@ module Trycourier
11
11
  T.any(Trycourier::Users::UserToken, Trycourier::Internal::AnyHash)
12
12
  end
13
13
 
14
+ # Full body of the token. Must match token in URL path parameter.
15
+ sig { returns(String) }
16
+ attr_accessor :token
17
+
14
18
  sig { returns(Trycourier::Users::UserToken::ProviderKey::TaggedSymbol) }
15
19
  attr_accessor :provider_key
16
20
 
17
- # Full body of the token. Must match token in URL.
18
- sig { returns(T.nilable(String)) }
19
- attr_accessor :token
20
-
21
21
  # Information about the device the token is associated with.
22
22
  sig { returns(T.nilable(Trycourier::Users::UserToken::Device)) }
23
23
  attr_reader :device
@@ -56,8 +56,8 @@ module Trycourier
56
56
 
57
57
  sig do
58
58
  params(
59
+ token: String,
59
60
  provider_key: Trycourier::Users::UserToken::ProviderKey::OrSymbol,
60
- token: T.nilable(String),
61
61
  device: T.nilable(Trycourier::Users::UserToken::Device::OrHash),
62
62
  expiry_date:
63
63
  T.nilable(Trycourier::Users::UserToken::ExpiryDate::Variants),
@@ -66,9 +66,9 @@ module Trycourier
66
66
  ).returns(T.attached_class)
67
67
  end
68
68
  def self.new(
69
+ # Full body of the token. Must match token in URL path parameter.
70
+ token:,
69
71
  provider_key:,
70
- # Full body of the token. Must match token in URL.
71
- token: nil,
72
72
  # Information about the device the token is associated with.
73
73
  device: nil,
74
74
  # ISO 8601 formatted date the token expires. Defaults to 2 months. Set to false to
@@ -84,9 +84,9 @@ module Trycourier
84
84
  sig do
85
85
  override.returns(
86
86
  {
87
+ token: String,
87
88
  provider_key:
88
89
  Trycourier::Users::UserToken::ProviderKey::TaggedSymbol,
89
- token: T.nilable(String),
90
90
  device: T.nilable(Trycourier::Users::UserToken::Device),
91
91
  expiry_date:
92
92
  T.nilable(Trycourier::Users::UserToken::ExpiryDate::Variants),
@@ -13,7 +13,8 @@ module Trycourier
13
13
  ).returns(Trycourier::Models::Profiles::ListRetrieveResponse)
14
14
  end
15
15
  def retrieve(
16
- # A unique identifier representing the user associated with the requested profile.
16
+ # A unique identifier representing the user associated with the requested user
17
+ # profile.
17
18
  user_id,
18
19
  # A unique identifier that allows for fetching the next set of message statuses.
19
20
  cursor: nil,
@@ -45,7 +46,8 @@ module Trycourier
45
46
  ).returns(Trycourier::Models::Profiles::ListSubscribeResponse)
46
47
  end
47
48
  def subscribe(
48
- # A unique identifier representing the user associated with the requested profile.
49
+ # A unique identifier representing the user associated with the requested user
50
+ # profile.
49
51
  user_id,
50
52
  lists:,
51
53
  request_options: {}
@@ -46,7 +46,8 @@ module Trycourier
46
46
  ).void
47
47
  end
48
48
  def update(
49
- # A unique identifier representing the user associated with the requested profile.
49
+ # A unique identifier representing the user associated with the requested user
50
+ # profile.
50
51
  user_id,
51
52
  # List of patch operations to apply to the profile.
52
53
  patch:,
@@ -62,7 +63,8 @@ module Trycourier
62
63
  ).void
63
64
  end
64
65
  def delete(
65
- # A unique identifier representing the user associated with the requested profile.
66
+ # A unique identifier representing the user associated with the requested user
67
+ # profile.
66
68
  user_id,
67
69
  request_options: {}
68
70
  )
@@ -81,7 +83,8 @@ module Trycourier
81
83
  ).returns(Trycourier::Models::ProfileReplaceResponse)
82
84
  end
83
85
  def replace(
84
- # A unique identifier representing the user associated with the requested profile.
86
+ # A unique identifier representing the user associated with the requested user
87
+ # profile.
85
88
  user_id,
86
89
  profile:,
87
90
  request_options: {}
@@ -3,7 +3,7 @@
3
3
  module Trycourier
4
4
  module Resources
5
5
  class Tenants
6
- class TenantDefaultPreferences
6
+ class Preferences
7
7
  class Items
8
8
  # Create or Replace Default Preferences For Topic
9
9
  sig do
@@ -3,12 +3,8 @@
3
3
  module Trycourier
4
4
  module Resources
5
5
  class Tenants
6
- class TenantDefaultPreferences
7
- sig do
8
- returns(
9
- Trycourier::Resources::Tenants::TenantDefaultPreferences::Items
10
- )
11
- end
6
+ class Preferences
7
+ sig { returns(Trycourier::Resources::Tenants::Preferences::Items) }
12
8
  attr_reader :items
13
9
 
14
10
  # @api private
@@ -3,8 +3,8 @@
3
3
  module Trycourier
4
4
  module Resources
5
5
  class Tenants
6
- sig { returns(Trycourier::Resources::Tenants::TenantDefaultPreferences) }
7
- attr_reader :tenant_default_preferences
6
+ sig { returns(Trycourier::Resources::Tenants::Preferences) }
7
+ attr_reader :preferences
8
8
 
9
9
  sig { returns(Trycourier::Resources::Tenants::Templates) }
10
10
  attr_reader :templates
@@ -92,8 +92,8 @@ module Trycourier
92
92
  params(
93
93
  path_token: String,
94
94
  user_id: String,
95
+ body_token: String,
95
96
  provider_key: Trycourier::Users::UserToken::ProviderKey::OrSymbol,
96
- body_token: T.nilable(String),
97
97
  device: T.nilable(Trycourier::Users::UserToken::Device::OrHash),
98
98
  expiry_date:
99
99
  T.nilable(Trycourier::Users::UserToken::ExpiryDate::Variants),
@@ -107,10 +107,10 @@ module Trycourier
107
107
  path_token,
108
108
  # Path param: The user's ID. This can be any uniquely identifiable string.
109
109
  user_id:,
110
+ # Body param: Full body of the token. Must match token in URL path parameter.
111
+ body_token:,
110
112
  # Body param:
111
113
  provider_key:,
112
- # Body param: Full body of the token. Must match token in URL.
113
- body_token: nil,
114
114
  # Body param: Information about the device the token is associated with.
115
115
  device: nil,
116
116
  # Body param: ISO 8601 formatted date the token expires. Defaults to 2 months. Set
@@ -87,6 +87,8 @@ module Trycourier
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: (
@@ -17,7 +17,10 @@ module Trycourier
17
17
 
18
18
  DEFAULT_MAX_CONNECTIONS: Integer
19
19
 
20
- def self.connect: (URI::Generic url) -> top
20
+ def self.connect: (
21
+ cert_store: OpenSSL::X509::Store,
22
+ url: URI::Generic
23
+ ) -> top
21
24
 
22
25
  def self.calibrate_socket_timeout: (top conn, Float deadline) -> void
23
26
 
@@ -1,7 +1,7 @@
1
1
  module Trycourier
2
2
  module Models
3
3
  module Tenants
4
- module TenantDefaultPreferences
4
+ module Preferences
5
5
  type item_delete_params =
6
6
  { tenant_id: String } & Trycourier::Internal::Type::request_parameters
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Trycourier
2
2
  module Models
3
3
  module Tenants
4
- module TenantDefaultPreferences
4
+ module Preferences
5
5
  type item_update_params =
6
6
  { tenant_id: String } & Trycourier::Internal::Type::request_parameters
7
7
 
@@ -5,8 +5,8 @@ module Trycourier
5
5
  module Users
6
6
  type user_token =
7
7
  {
8
+ token: String,
8
9
  provider_key: Trycourier::Models::Users::UserToken::provider_key,
9
- token: String?,
10
10
  device: Trycourier::Users::UserToken::Device?,
11
11
  expiry_date: Trycourier::Models::Users::UserToken::expiry_date?,
12
12
  properties: top,
@@ -14,9 +14,9 @@ module Trycourier
14
14
  }
15
15
 
16
16
  class UserToken < Trycourier::Internal::Type::BaseModel
17
- attr_accessor provider_key: Trycourier::Models::Users::UserToken::provider_key
17
+ attr_accessor token: String
18
18
 
19
- attr_accessor token: String?
19
+ attr_accessor provider_key: Trycourier::Models::Users::UserToken::provider_key
20
20
 
21
21
  attr_accessor device: Trycourier::Users::UserToken::Device?
22
22
 
@@ -29,8 +29,8 @@ module Trycourier
29
29
  attr_accessor tracking: Trycourier::Users::UserToken::Tracking?
30
30
 
31
31
  def initialize: (
32
+ token: String,
32
33
  provider_key: Trycourier::Models::Users::UserToken::provider_key,
33
- ?token: String?,
34
34
  ?device: Trycourier::Users::UserToken::Device?,
35
35
  ?expiry_date: Trycourier::Models::Users::UserToken::expiry_date?,
36
36
  ?properties: top,
@@ -38,8 +38,8 @@ module Trycourier
38
38
  ) -> void
39
39
 
40
40
  def to_hash: -> {
41
+ token: String,
41
42
  provider_key: Trycourier::Models::Users::UserToken::provider_key,
42
- token: String?,
43
43
  device: Trycourier::Users::UserToken::Device?,
44
44
  expiry_date: Trycourier::Models::Users::UserToken::expiry_date?,
45
45
  properties: top,
@@ -1,7 +1,7 @@
1
1
  module Trycourier
2
2
  module Resources
3
3
  class Tenants
4
- class TenantDefaultPreferences
4
+ class Preferences
5
5
  class Items
6
6
  def update: (
7
7
  String topic_id,
@@ -1,8 +1,8 @@
1
1
  module Trycourier
2
2
  module Resources
3
3
  class Tenants
4
- class TenantDefaultPreferences
5
- attr_reader items: Trycourier::Resources::Tenants::TenantDefaultPreferences::Items
4
+ class Preferences
5
+ attr_reader items: Trycourier::Resources::Tenants::Preferences::Items
6
6
 
7
7
  def initialize: (client: Trycourier::Client) -> void
8
8
  end
@@ -1,7 +1,7 @@
1
1
  module Trycourier
2
2
  module Resources
3
3
  class Tenants
4
- attr_reader tenant_default_preferences: Trycourier::Resources::Tenants::TenantDefaultPreferences
4
+ attr_reader preferences: Trycourier::Resources::Tenants::Preferences
5
5
 
6
6
  attr_reader templates: Trycourier::Resources::Tenants::Templates
7
7
 
@@ -34,8 +34,8 @@ module Trycourier
34
34
  def add_single: (
35
35
  String path_token,
36
36
  user_id: String,
37
+ body_token: String,
37
38
  provider_key: Trycourier::Models::Users::UserToken::provider_key,
38
- ?body_token: String?,
39
39
  ?device: Trycourier::Users::UserToken::Device?,
40
40
  ?expiry_date: Trycourier::Models::Users::UserToken::expiry_date?,
41
41
  ?properties: top,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trycourier
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0.pre.alpha7
4
+ version: 3.4.0.pre.alpha9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Courier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-31 00:00:00.000000000 Z
11
+ date: 2025-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  description:
28
- email: ''
28
+ email: support@courier.com
29
29
  executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files:
@@ -197,11 +197,11 @@ files:
197
197
  - lib/trycourier/models/tenant_list_users_response.rb
198
198
  - lib/trycourier/models/tenant_retrieve_params.rb
199
199
  - lib/trycourier/models/tenant_update_params.rb
200
+ - lib/trycourier/models/tenants/preferences/item_delete_params.rb
201
+ - lib/trycourier/models/tenants/preferences/item_update_params.rb
200
202
  - lib/trycourier/models/tenants/template_list_params.rb
201
203
  - lib/trycourier/models/tenants/template_list_response.rb
202
204
  - lib/trycourier/models/tenants/template_retrieve_params.rb
203
- - lib/trycourier/models/tenants/tenant_default_preferences/item_delete_params.rb
204
- - lib/trycourier/models/tenants/tenant_default_preferences/item_update_params.rb
205
205
  - lib/trycourier/models/text_style.rb
206
206
  - lib/trycourier/models/translation_retrieve_params.rb
207
207
  - lib/trycourier/models/translation_retrieve_response.rb
@@ -251,9 +251,9 @@ files:
251
251
  - lib/trycourier/resources/requests.rb
252
252
  - lib/trycourier/resources/send.rb
253
253
  - lib/trycourier/resources/tenants.rb
254
+ - lib/trycourier/resources/tenants/preferences.rb
255
+ - lib/trycourier/resources/tenants/preferences/items.rb
254
256
  - lib/trycourier/resources/tenants/templates.rb
255
- - lib/trycourier/resources/tenants/tenant_default_preferences.rb
256
- - lib/trycourier/resources/tenants/tenant_default_preferences/items.rb
257
257
  - lib/trycourier/resources/translations.rb
258
258
  - lib/trycourier/resources/users.rb
259
259
  - lib/trycourier/resources/users/preferences.rb
@@ -422,11 +422,11 @@ files:
422
422
  - rbi/trycourier/models/tenant_list_users_response.rbi
423
423
  - rbi/trycourier/models/tenant_retrieve_params.rbi
424
424
  - rbi/trycourier/models/tenant_update_params.rbi
425
+ - rbi/trycourier/models/tenants/preferences/item_delete_params.rbi
426
+ - rbi/trycourier/models/tenants/preferences/item_update_params.rbi
425
427
  - rbi/trycourier/models/tenants/template_list_params.rbi
426
428
  - rbi/trycourier/models/tenants/template_list_response.rbi
427
429
  - rbi/trycourier/models/tenants/template_retrieve_params.rbi
428
- - rbi/trycourier/models/tenants/tenant_default_preferences/item_delete_params.rbi
429
- - rbi/trycourier/models/tenants/tenant_default_preferences/item_update_params.rbi
430
430
  - rbi/trycourier/models/text_style.rbi
431
431
  - rbi/trycourier/models/translation_retrieve_params.rbi
432
432
  - rbi/trycourier/models/translation_retrieve_response.rbi
@@ -476,9 +476,9 @@ files:
476
476
  - rbi/trycourier/resources/requests.rbi
477
477
  - rbi/trycourier/resources/send.rbi
478
478
  - rbi/trycourier/resources/tenants.rbi
479
+ - rbi/trycourier/resources/tenants/preferences.rbi
480
+ - rbi/trycourier/resources/tenants/preferences/items.rbi
479
481
  - rbi/trycourier/resources/tenants/templates.rbi
480
- - rbi/trycourier/resources/tenants/tenant_default_preferences.rbi
481
- - rbi/trycourier/resources/tenants/tenant_default_preferences/items.rbi
482
482
  - rbi/trycourier/resources/translations.rbi
483
483
  - rbi/trycourier/resources/users.rbi
484
484
  - rbi/trycourier/resources/users/preferences.rbi
@@ -646,11 +646,11 @@ files:
646
646
  - sig/trycourier/models/tenant_list_users_response.rbs
647
647
  - sig/trycourier/models/tenant_retrieve_params.rbs
648
648
  - sig/trycourier/models/tenant_update_params.rbs
649
+ - sig/trycourier/models/tenants/preferences/item_delete_params.rbs
650
+ - sig/trycourier/models/tenants/preferences/item_update_params.rbs
649
651
  - sig/trycourier/models/tenants/template_list_params.rbs
650
652
  - sig/trycourier/models/tenants/template_list_response.rbs
651
653
  - sig/trycourier/models/tenants/template_retrieve_params.rbs
652
- - sig/trycourier/models/tenants/tenant_default_preferences/item_delete_params.rbs
653
- - sig/trycourier/models/tenants/tenant_default_preferences/item_update_params.rbs
654
654
  - sig/trycourier/models/text_style.rbs
655
655
  - sig/trycourier/models/translation_retrieve_params.rbs
656
656
  - sig/trycourier/models/translation_retrieve_response.rbs
@@ -700,9 +700,9 @@ files:
700
700
  - sig/trycourier/resources/requests.rbs
701
701
  - sig/trycourier/resources/send.rbs
702
702
  - sig/trycourier/resources/tenants.rbs
703
+ - sig/trycourier/resources/tenants/preferences.rbs
704
+ - sig/trycourier/resources/tenants/preferences/items.rbs
703
705
  - sig/trycourier/resources/tenants/templates.rbs
704
- - sig/trycourier/resources/tenants/tenant_default_preferences.rbs
705
- - sig/trycourier/resources/tenants/tenant_default_preferences/items.rbs
706
706
  - sig/trycourier/resources/translations.rbs
707
707
  - sig/trycourier/resources/users.rbs
708
708
  - sig/trycourier/resources/users/preferences.rbs