knockapi 1.14.0 → 1.16.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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -0
  3. data/README.md +1 -1
  4. data/lib/knockapi/client.rb +6 -6
  5. data/lib/knockapi/file_part.rb +10 -7
  6. data/lib/knockapi/internal/transport/pooled_net_requester.rb +7 -10
  7. data/lib/knockapi/internal/type/file_input.rb +7 -4
  8. data/lib/knockapi/internal/util.rb +2 -1
  9. data/lib/knockapi/models/audience_add_members_params.rb +2 -2
  10. data/lib/knockapi/models/message.rb +30 -8
  11. data/lib/knockapi/resources/audiences.rb +5 -5
  12. data/lib/knockapi/resources/objects.rb +4 -4
  13. data/lib/knockapi/resources/tenants/bulk.rb +3 -2
  14. data/lib/knockapi/resources/tenants.rb +2 -2
  15. data/lib/knockapi/resources/users/guides.rb +3 -3
  16. data/lib/knockapi/resources/users.rb +4 -4
  17. data/lib/knockapi/resources/workflows.rb +2 -2
  18. data/lib/knockapi/version.rb +1 -1
  19. data/lib/knockapi.rb +0 -9
  20. data/rbi/knockapi/client.rbi +4 -5
  21. data/rbi/knockapi/file_part.rbi +1 -1
  22. data/rbi/knockapi/models/audience_add_members_params.rbi +2 -2
  23. data/rbi/knockapi/models/message.rbi +46 -10
  24. data/rbi/knockapi/resources/audiences.rbi +3 -3
  25. data/rbi/knockapi/resources/objects.rbi +2 -2
  26. data/rbi/knockapi/resources/tenants/bulk.rbi +3 -2
  27. data/rbi/knockapi/resources/tenants.rbi +1 -1
  28. data/rbi/knockapi/resources/users/guides.rbi +0 -3
  29. data/rbi/knockapi/resources/users.rbi +2 -2
  30. data/rbi/knockapi/resources/workflows.rbi +1 -1
  31. data/sig/knockapi/client.rbs +2 -3
  32. data/sig/knockapi/file_part.rbs +1 -1
  33. data/sig/knockapi/models/message.rbs +24 -3
  34. data/sig/knockapi/resources/audiences.rbs +2 -2
  35. data/sig/knockapi/resources/objects.rbs +2 -2
  36. data/sig/knockapi/resources/tenants.rbs +1 -4
  37. data/sig/knockapi/resources/users.rbs +2 -2
  38. data/sig/knockapi/resources/workflows.rbs +1 -1
  39. metadata +2 -29
  40. data/lib/knockapi/models/audience_add_members_response.rb +0 -7
  41. data/lib/knockapi/models/audience_remove_members_response.rb +0 -7
  42. data/lib/knockapi/models/object_delete_response.rb +0 -7
  43. data/lib/knockapi/models/object_unset_channel_data_response.rb +0 -7
  44. data/lib/knockapi/models/tenant_delete_response.rb +0 -7
  45. data/lib/knockapi/models/user_delete_response.rb +0 -7
  46. data/lib/knockapi/models/user_unset_channel_data_response.rb +0 -7
  47. data/lib/knockapi/models/workflow_cancel_response.rb +0 -7
  48. data/lib/knockapi/resources/shared.rb +0 -14
  49. data/rbi/knockapi/models/audience_add_members_response.rbi +0 -7
  50. data/rbi/knockapi/models/audience_remove_members_response.rbi +0 -7
  51. data/rbi/knockapi/models/object_delete_response.rbi +0 -7
  52. data/rbi/knockapi/models/object_unset_channel_data_response.rbi +0 -7
  53. data/rbi/knockapi/models/tenant_delete_response.rbi +0 -7
  54. data/rbi/knockapi/models/user_delete_response.rbi +0 -7
  55. data/rbi/knockapi/models/user_unset_channel_data_response.rbi +0 -7
  56. data/rbi/knockapi/models/workflow_cancel_response.rbi +0 -7
  57. data/rbi/knockapi/resources/shared.rbi +0 -12
  58. data/sig/knockapi/models/audience_add_members_response.rbs +0 -5
  59. data/sig/knockapi/models/audience_remove_members_response.rbs +0 -5
  60. data/sig/knockapi/models/object_delete_response.rbs +0 -5
  61. data/sig/knockapi/models/object_unset_channel_data_response.rbs +0 -5
  62. data/sig/knockapi/models/tenant_delete_response.rbs +0 -5
  63. data/sig/knockapi/models/user_delete_response.rbs +0 -5
  64. data/sig/knockapi/models/user_unset_channel_data_response.rbs +0 -5
  65. data/sig/knockapi/models/workflow_cancel_response.rbs +0 -5
  66. data/sig/knockapi/resources/shared.rbs +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 705d1a2dcdf780d7381bfe2afd9f8fbcfeef3d3cf9d1de25c59e66312c99d240
4
- data.tar.gz: 4a3dc9e5f4099f91844cd93c557fccae11febdc4f1cfd54c4c024deff6e064f1
3
+ metadata.gz: 1630ae8acf4360fc75f33510c2fcb8423468a3d833430f516275c3c7a6730546
4
+ data.tar.gz: 2eafc59334b1af87ca901007d2f2c8f2d917eebaa7ba47a9bb3513d4e8af870d
5
5
  SHA512:
6
- metadata.gz: e48a5a4811a24450b63764ac62b67faf0c9ee514a9bc7d5911ec10ef46be833ba0667dcf5cf1369f72e10eb0663bdcda4794a007f2514496ff4de81184cb4180
7
- data.tar.gz: 30be4f558089c7e211ec922a4ffb75a53d7ad5bf851cafff8f628aff4cb0b1ffbe0732cf99363e971bd45218773c42d22469dcc3d397ec98b5570ec9871f0aa6
6
+ metadata.gz: a9e0edc59e0d14876def76d371494014a4b4353947938247f011ffd853aaf05c5c05a214309ecb092e4783c03a5235d3b12c744f9ec20b27ae9c81bc4103ff50
7
+ data.tar.gz: 49c8be1db5c6ce3e680c5768c1b9579148dc44151d68b49a28c0a162cd0261ae9c0f206388fc2d0fb1e884970a170a1b0f94ce03e0f4f7504afa86dff0b33f6a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.16.0 (2025-10-07)
4
+
5
+ Full Changelog: [v1.15.0...v1.16.0](https://github.com/knocklabs/knock-ruby/compare/v1.15.0...v1.16.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([f006836](https://github.com/knocklabs/knock-ruby/commit/f0068369fd1ad7dfa9843753966d6bfb3758e1ea))
10
+ * **api:** api update ([8f74167](https://github.com/knocklabs/knock-ruby/commit/8f74167231ab9aba28065beb23922d7c4cba9cea))
11
+ * **api:** api update ([27835b7](https://github.com/knocklabs/knock-ruby/commit/27835b7a76ec99e59511e5f92e0ddb88a48ed608))
12
+ * **api:** manual updates ([22850d8](https://github.com/knocklabs/knock-ruby/commit/22850d8c0b0605e045cc7d19020ac9f9c97ae163))
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * always send `filename=...` for multipart requests where a file is expected ([1a6d4ac](https://github.com/knocklabs/knock-ruby/commit/1a6d4acdcf66e42ddc5b813a61dc7c535e5f90ee))
18
+ * coroutine leaks from connection pool ([3bc1ff2](https://github.com/knocklabs/knock-ruby/commit/3bc1ff25c7b0cda3f712779d67a8c5f6f5b28969))
19
+ * **internal:** use null byte as file separator in the fast formatting script ([d8c723e](https://github.com/knocklabs/knock-ruby/commit/d8c723ed107313e3cc641ea8b68eb5ee8543bfcc))
20
+ * shorten multipart boundary sep to less than RFC specificed max length ([66403e8](https://github.com/knocklabs/knock-ruby/commit/66403e82039587fbf154aff05c2cbfc1e56066a0))
21
+
22
+
23
+ ### Performance Improvements
24
+
25
+ * faster code formatting ([b578cd0](https://github.com/knocklabs/knock-ruby/commit/b578cd025eefbe8b3ba863403c8a59f9b0acc6bf))
26
+
27
+
28
+ ### Chores
29
+
30
+ * allow fast-format to use bsd sed as well ([c57f00b](https://github.com/knocklabs/knock-ruby/commit/c57f00b885b596ea799f8929986228240fa3aab4))
31
+
32
+ ## 1.15.0 (2025-09-23)
33
+
34
+ Full Changelog: [v1.14.0...v1.15.0](https://github.com/knocklabs/knock-ruby/compare/v1.14.0...v1.15.0)
35
+
36
+ ### Features
37
+
38
+ * **api:** api update ([9e20ef7](https://github.com/knocklabs/knock-ruby/commit/9e20ef78f55bd98a4a44ad32a85c63d5b0f7da97))
39
+ * **api:** api update ([f6a598f](https://github.com/knocklabs/knock-ruby/commit/f6a598f8caab8d8fadc652efa12ebbbc62a5d3dc))
40
+ * **api:** set idempotency key header by default ([14e4fac](https://github.com/knocklabs/knock-ruby/commit/14e4face034def9abbb45120d5c1af1cb415b689))
41
+
42
+
43
+ ### Chores
44
+
45
+ * improve example values ([3745058](https://github.com/knocklabs/knock-ruby/commit/37450588f7a937fec2ab49ab04c7142493c7d646))
46
+
3
47
  ## 1.14.0 (2025-09-19)
4
48
 
5
49
  Full Changelog: [v1.13.0...v1.14.0](https://github.com/knocklabs/knock-ruby/compare/v1.13.0...v1.14.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 "knockapi", "~> 1.14.0"
20
+ gem "knockapi", "~> 1.16.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -18,9 +18,6 @@ module Knockapi
18
18
  # @return [String]
19
19
  attr_reader :api_key
20
20
 
21
- # @return [Knockapi::Resources::Shared]
22
- attr_reader :shared
23
-
24
21
  # @return [Knockapi::Resources::Recipients]
25
22
  attr_reader :recipients
26
23
 
@@ -80,13 +77,16 @@ module Knockapi
80
77
  # @param initial_retry_delay [Float]
81
78
  #
82
79
  # @param max_retry_delay [Float]
80
+ #
81
+ # @param idempotency_header [String]
83
82
  def initialize(
84
83
  api_key: ENV["KNOCK_API_KEY"],
85
84
  base_url: ENV["KNOCK_BASE_URL"],
86
85
  max_retries: self.class::DEFAULT_MAX_RETRIES,
87
86
  timeout: self.class::DEFAULT_TIMEOUT_IN_SECONDS,
88
87
  initial_retry_delay: self.class::DEFAULT_INITIAL_RETRY_DELAY,
89
- max_retry_delay: self.class::DEFAULT_MAX_RETRY_DELAY
88
+ max_retry_delay: self.class::DEFAULT_MAX_RETRY_DELAY,
89
+ idempotency_header: "Idempotency-Key"
90
90
  )
91
91
  base_url ||= "https://api.knock.app"
92
92
 
@@ -101,10 +101,10 @@ module Knockapi
101
101
  timeout: timeout,
102
102
  max_retries: max_retries,
103
103
  initial_retry_delay: initial_retry_delay,
104
- max_retry_delay: max_retry_delay
104
+ max_retry_delay: max_retry_delay,
105
+ idempotency_header: idempotency_header
105
106
  )
106
107
 
107
- @shared = Knockapi::Resources::Shared.new(client: self)
108
108
  @recipients = Knockapi::Resources::Recipients.new(client: self)
109
109
  @users = Knockapi::Resources::Users.new(client: self)
110
110
  @objects = Knockapi::Resources::Objects.new(client: self)
@@ -38,18 +38,21 @@ module Knockapi
38
38
  def to_yaml(*a) = read.to_yaml(*a)
39
39
 
40
40
  # @param content [Pathname, StringIO, IO, String]
41
- # @param filename [String, nil]
41
+ # @param filename [Pathname, String, nil]
42
42
  # @param content_type [String, nil]
43
43
  def initialize(content, filename: nil, content_type: nil)
44
- @content = content
44
+ @content_type = content_type
45
45
  @filename =
46
- case content
47
- in Pathname
48
- filename.nil? ? content.basename.to_path : ::File.basename(filename)
46
+ case [filename, (@content = content)]
47
+ in [String | Pathname, _]
48
+ ::File.basename(filename)
49
+ in [nil, Pathname]
50
+ content.basename.to_path
51
+ in [nil, IO]
52
+ content.to_path
49
53
  else
50
- filename.nil? ? nil : ::File.basename(filename)
54
+ filename
51
55
  end
52
- @content_type = content_type
53
56
  end
54
57
  end
55
58
  end
@@ -134,9 +134,9 @@ module Knockapi
134
134
 
135
135
  # rubocop:disable Metrics/BlockLength
136
136
  enum = Enumerator.new do |y|
137
- with_pool(url, deadline: deadline) do |conn|
138
- next if finished
137
+ next if finished
139
138
 
139
+ with_pool(url, deadline: deadline) do |conn|
140
140
  req, closing = self.class.build_request(request) do
141
141
  self.class.calibrate_socket_timeout(conn, deadline)
142
142
  end
@@ -149,7 +149,7 @@ module Knockapi
149
149
 
150
150
  self.class.calibrate_socket_timeout(conn, deadline)
151
151
  conn.request(req) do |rsp|
152
- y << [conn, req, rsp]
152
+ y << [req, rsp]
153
153
  break if finished
154
154
 
155
155
  rsp.read_body do |bytes|
@@ -160,6 +160,8 @@ module Knockapi
160
160
  end
161
161
  eof = true
162
162
  end
163
+ ensure
164
+ conn.finish if !eof && conn&.started?
163
165
  end
164
166
  rescue Timeout::Error
165
167
  raise Knockapi::Errors::APITimeoutError.new(url: url, request: req)
@@ -168,16 +170,11 @@ module Knockapi
168
170
  end
169
171
  # rubocop:enable Metrics/BlockLength
170
172
 
171
- conn, _, response = enum.next
173
+ _, response = enum.next
172
174
  body = Knockapi::Internal::Util.fused_enum(enum, external: true) do
173
175
  finished = true
174
- tap do
175
- enum.next
176
- rescue StopIteration
177
- nil
178
- end
176
+ loop { enum.next }
179
177
  ensure
180
- conn.finish if !eof && conn&.started?
181
178
  closing&.call
182
179
  end
183
180
  [Integer(response.code), response, body]
@@ -82,17 +82,20 @@ module Knockapi
82
82
  #
83
83
  # @return [Pathname, StringIO, IO, String, Object]
84
84
  def dump(value, state:)
85
- # rubocop:disable Lint/DuplicateBranch
86
85
  case value
86
+ in StringIO | String
87
+ # https://datatracker.ietf.org/doc/html/rfc7578#section-4.2
88
+ # while not required, a filename is recommended, and in practice many servers do expect this
89
+ Knockapi::FilePart.new(value, filename: "upload")
87
90
  in IO
88
91
  state[:can_retry] = false
92
+ value.to_path.nil? ? Knockapi::FilePart.new(value, filename: "upload") : value
89
93
  in Knockapi::FilePart if value.content.is_a?(IO)
90
94
  state[:can_retry] = false
95
+ value
91
96
  else
97
+ value
92
98
  end
93
- # rubocop:enable Lint/DuplicateBranch
94
-
95
- value
96
99
  end
97
100
 
98
101
  # @api private
@@ -566,7 +566,8 @@ module Knockapi
566
566
  #
567
567
  # @return [Array(String, Enumerable<String>)]
568
568
  private def encode_multipart_streaming(body)
569
- boundary = SecureRandom.urlsafe_base64(60)
569
+ # RFC 1521 Section 7.2.1 says we should have 70 char maximum for boundary length
570
+ boundary = SecureRandom.urlsafe_base64(46)
570
571
 
571
572
  closing = []
572
573
  strio = writable_enum do |y|
@@ -8,13 +8,13 @@ module Knockapi
8
8
  include Knockapi::Internal::Type::RequestParameters
9
9
 
10
10
  # @!attribute members
11
- # A list of audience members to add.
11
+ # A list of audience members to add. Limited to 1,000 members per request.
12
12
  #
13
13
  # @return [Array<Knockapi::Models::AudienceAddMembersParams::Member>]
14
14
  required :members, -> { Knockapi::Internal::Type::ArrayOf[Knockapi::AudienceAddMembersParams::Member] }
15
15
 
16
16
  # @!method initialize(members:, request_options: {})
17
- # @param members [Array<Knockapi::Models::AudienceAddMembersParams::Member>] A list of audience members to add.
17
+ # @param members [Array<Knockapi::Models::AudienceAddMembersParams::Member>] A list of audience members to add. Limited to 1,000 members per request.
18
18
  #
19
19
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}]
20
20
 
@@ -43,7 +43,7 @@ module Knockapi
43
43
  required :recipient, union: -> { Knockapi::RecipientReference }
44
44
 
45
45
  # @!attribute source
46
- # The workflow that triggered the message.
46
+ # The workflow or guide that triggered the message.
47
47
  #
48
48
  # @return [Knockapi::Models::Message::Source]
49
49
  required :source, -> { Knockapi::Message::Source }
@@ -160,7 +160,7 @@ module Knockapi
160
160
  #
161
161
  # @param recipient [String, Knockapi::Models::RecipientReference::ObjectReference] A reference to a recipient, either a user identifier (string) or an object refer
162
162
  #
163
- # @param source [Knockapi::Models::Message::Source] The workflow that triggered the message.
163
+ # @param source [Knockapi::Models::Message::Source] The workflow or guide that triggered the message.
164
164
  #
165
165
  # @param status [Symbol, Knockapi::Models::Message::Status] The message delivery status.
166
166
  #
@@ -219,13 +219,13 @@ module Knockapi
219
219
  required :categories, Knockapi::Internal::Type::ArrayOf[String]
220
220
 
221
221
  # @!attribute key
222
- # The key of the workflow that triggered the message.
222
+ # The key of the workflow or guide that triggered the message.
223
223
  #
224
224
  # @return [String]
225
225
  required :key, String
226
226
 
227
227
  # @!attribute version_id
228
- # The ID of the version of the workflow that triggered the message.
228
+ # The ID of the version of the workflow or guide that triggered the message.
229
229
  #
230
230
  # @return [String]
231
231
  required :version_id, String
@@ -236,18 +236,40 @@ module Knockapi
236
236
  # @return [String, nil]
237
237
  optional :step_ref, String, nil?: true
238
238
 
239
- # @!method initialize(_typename:, categories:, key:, version_id:, step_ref: nil)
240
- # The workflow that triggered the message.
239
+ # @!attribute type
240
+ # Whether this message was generated from a workflow, broadcast, or guide.
241
+ #
242
+ # @return [Symbol, Knockapi::Models::Message::Source::Type, nil]
243
+ optional :type, enum: -> { Knockapi::Message::Source::Type }
244
+
245
+ # @!method initialize(_typename:, categories:, key:, version_id:, step_ref: nil, type: nil)
246
+ # The workflow or guide that triggered the message.
241
247
  #
242
248
  # @param _typename [String]
243
249
  #
244
250
  # @param categories [Array<String>] The categories associated with the message.
245
251
  #
246
- # @param key [String] The key of the workflow that triggered the message.
252
+ # @param key [String] The key of the workflow or guide that triggered the message.
247
253
  #
248
- # @param version_id [String] The ID of the version of the workflow that triggered the message.
254
+ # @param version_id [String] The ID of the version of the workflow or guide that triggered the message.
249
255
  #
250
256
  # @param step_ref [String, nil] The step reference for the step in the workflow that generated the message.
257
+ #
258
+ # @param type [Symbol, Knockapi::Models::Message::Source::Type] Whether this message was generated from a workflow, broadcast, or guide.
259
+
260
+ # Whether this message was generated from a workflow, broadcast, or guide.
261
+ #
262
+ # @see Knockapi::Models::Message::Source#type
263
+ module Type
264
+ extend Knockapi::Internal::Type::Enum
265
+
266
+ BROADCAST = :broadcast
267
+ WORKFLOW = :workflow
268
+ GUIDE = :guide
269
+
270
+ # @!method self.values
271
+ # @return [Array<Symbol>]
272
+ end
251
273
  end
252
274
 
253
275
  # The message delivery status.
@@ -9,11 +9,11 @@ module Knockapi
9
9
  #
10
10
  # @param key [String] The key of the audience.
11
11
  #
12
- # @param members [Array<Knockapi::Models::AudienceAddMembersParams::Member>] A list of audience members to add.
12
+ # @param members [Array<Knockapi::Models::AudienceAddMembersParams::Member>] A list of audience members to add. Limited to 1,000 members per request.
13
13
  #
14
14
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
15
15
  #
16
- # @return [String]
16
+ # @return [nil]
17
17
  #
18
18
  # @see Knockapi::Models::AudienceAddMembersParams
19
19
  def add_members(key, params)
@@ -22,7 +22,7 @@ module Knockapi
22
22
  method: :post,
23
23
  path: ["v1/audiences/%1$s/members", key],
24
24
  body: parsed,
25
- model: String,
25
+ model: NilClass,
26
26
  options: options
27
27
  )
28
28
  end
@@ -57,7 +57,7 @@ module Knockapi
57
57
  #
58
58
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
59
59
  #
60
- # @return [String]
60
+ # @return [nil]
61
61
  #
62
62
  # @see Knockapi::Models::AudienceRemoveMembersParams
63
63
  def remove_members(key, params)
@@ -66,7 +66,7 @@ module Knockapi
66
66
  method: :delete,
67
67
  path: ["v1/audiences/%1$s/members", key],
68
68
  body: parsed,
69
- model: String,
69
+ model: NilClass,
70
70
  options: options
71
71
  )
72
72
  end
@@ -49,14 +49,14 @@ module Knockapi
49
49
  #
50
50
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
51
51
  #
52
- # @return [String]
52
+ # @return [nil]
53
53
  #
54
54
  # @see Knockapi::Models::ObjectDeleteParams
55
55
  def delete(collection, id, params = {})
56
56
  @client.request(
57
57
  method: :delete,
58
58
  path: ["v1/objects/%1$s/%2$s", collection, id],
59
- model: String,
59
+ model: NilClass,
60
60
  options: params[:request_options]
61
61
  )
62
62
  end
@@ -478,14 +478,14 @@ module Knockapi
478
478
  #
479
479
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
480
480
  #
481
- # @return [String]
481
+ # @return [nil]
482
482
  #
483
483
  # @see Knockapi::Models::ObjectUnsetChannelDataParams
484
484
  def unset_channel_data(collection, object_id_, channel_id, params = {})
485
485
  @client.request(
486
486
  method: :delete,
487
487
  path: ["v1/objects/%1$s/%2$s/channel_data/%3$s", collection, object_id_, channel_id],
488
- model: String,
488
+ model: NilClass,
489
489
  options: params[:request_options]
490
490
  )
491
491
  end
@@ -4,7 +4,8 @@ module Knockapi
4
4
  module Resources
5
5
  class Tenants
6
6
  class Bulk
7
- # Delete multiple tenants in a single operation. This operation cannot be undone.
7
+ # Delete up to 100 tenants at a time in a single operation. This operation cannot
8
+ # be undone.
8
9
  #
9
10
  # @overload delete(tenant_ids:, request_options: {})
10
11
  #
@@ -26,7 +27,7 @@ module Knockapi
26
27
  )
27
28
  end
28
29
 
29
- # Set or update up to 1,000 tenants in a single operation.
30
+ # Set or update up to 100 tenants in a single operation.
30
31
  #
31
32
  # @overload set(tenants:, request_options: {})
32
33
  #
@@ -45,14 +45,14 @@ module Knockapi
45
45
  #
46
46
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
47
47
  #
48
- # @return [String]
48
+ # @return [nil]
49
49
  #
50
50
  # @see Knockapi::Models::TenantDeleteParams
51
51
  def delete(id, params = {})
52
52
  @client.request(
53
53
  method: :delete,
54
54
  path: ["v1/tenants/%1$s", id],
55
- model: String,
55
+ model: NilClass,
56
56
  options: params[:request_options]
57
57
  )
58
58
  end
@@ -41,7 +41,7 @@ module Knockapi
41
41
  #
42
42
  # @param user_id [String] The unique identifier of the user.
43
43
  #
44
- # @param message_id [String] The unique identifier for the message.
44
+ # @param message_id [String]
45
45
  #
46
46
  # @param channel_id [String] The unique identifier for the channel.
47
47
  #
@@ -84,7 +84,7 @@ module Knockapi
84
84
  #
85
85
  # @param user_id [String] The unique identifier of the user.
86
86
  #
87
- # @param message_id [String] The unique identifier for the message.
87
+ # @param message_id [String]
88
88
  #
89
89
  # @param channel_id [String] The unique identifier for the channel.
90
90
  #
@@ -127,7 +127,7 @@ module Knockapi
127
127
  #
128
128
  # @param user_id [String] The unique identifier of the user.
129
129
  #
130
- # @param message_id [String] The unique identifier for the message.
130
+ # @param message_id [String]
131
131
  #
132
132
  # @param channel_id [String] The unique identifier for the channel.
133
133
  #
@@ -95,14 +95,14 @@ module Knockapi
95
95
  #
96
96
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
97
97
  #
98
- # @return [String]
98
+ # @return [nil]
99
99
  #
100
100
  # @see Knockapi::Models::UserDeleteParams
101
101
  def delete(user_id, params = {})
102
102
  @client.request(
103
103
  method: :delete,
104
104
  path: ["v1/users/%1$s", user_id],
105
- model: String,
105
+ model: NilClass,
106
106
  options: params[:request_options]
107
107
  )
108
108
  end
@@ -420,14 +420,14 @@ module Knockapi
420
420
  #
421
421
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
422
422
  #
423
- # @return [String]
423
+ # @return [nil]
424
424
  #
425
425
  # @see Knockapi::Models::UserUnsetChannelDataParams
426
426
  def unset_channel_data(user_id, channel_id, params = {})
427
427
  @client.request(
428
428
  method: :delete,
429
429
  path: ["v1/users/%1$s/channel_data/%2$s", user_id, channel_id],
430
- model: String,
430
+ model: NilClass,
431
431
  options: params[:request_options]
432
432
  )
433
433
  end
@@ -20,7 +20,7 @@ module Knockapi
20
20
  #
21
21
  # @param request_options [Knockapi::RequestOptions, Hash{Symbol=>Object}, nil]
22
22
  #
23
- # @return [String]
23
+ # @return [nil]
24
24
  #
25
25
  # @see Knockapi::Models::WorkflowCancelParams
26
26
  def cancel(key, params)
@@ -29,7 +29,7 @@ module Knockapi
29
29
  method: :post,
30
30
  path: ["v1/workflows/%1$s/cancel", key],
31
31
  body: parsed,
32
- model: String,
32
+ model: NilClass,
33
33
  options: options
34
34
  )
35
35
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Knockapi
4
- VERSION = "1.14.0"
4
+ VERSION = "1.16.0"
5
5
  end
data/lib/knockapi.rb CHANGED
@@ -59,12 +59,10 @@ require_relative "knockapi/models/recipients/preference_set_request"
59
59
  require_relative "knockapi/models/identify_user_request"
60
60
  require_relative "knockapi/models/activity"
61
61
  require_relative "knockapi/models/audience_add_members_params"
62
- require_relative "knockapi/models/audience_add_members_response"
63
62
  require_relative "knockapi/models/audience_list_members_params"
64
63
  require_relative "knockapi/models/audience_list_members_response"
65
64
  require_relative "knockapi/models/audience_member"
66
65
  require_relative "knockapi/models/audience_remove_members_params"
67
- require_relative "knockapi/models/audience_remove_members_response"
68
66
  require_relative "knockapi/models/bulk_operation"
69
67
  require_relative "knockapi/models/bulk_operation_get_params"
70
68
  require_relative "knockapi/models/channels/bulk_update_message_status_params"
@@ -113,7 +111,6 @@ require_relative "knockapi/models/object"
113
111
  require_relative "knockapi/models/object_add_subscriptions_params"
114
112
  require_relative "knockapi/models/object_add_subscriptions_response"
115
113
  require_relative "knockapi/models/object_delete_params"
116
- require_relative "knockapi/models/object_delete_response"
117
114
  require_relative "knockapi/models/object_delete_subscriptions_params"
118
115
  require_relative "knockapi/models/object_delete_subscriptions_response"
119
116
  require_relative "knockapi/models/object_get_channel_data_params"
@@ -132,7 +129,6 @@ require_relative "knockapi/models/object_set_channel_data_params"
132
129
  require_relative "knockapi/models/object_set_params"
133
130
  require_relative "knockapi/models/object_set_preferences_params"
134
131
  require_relative "knockapi/models/object_unset_channel_data_params"
135
- require_relative "knockapi/models/object_unset_channel_data_response"
136
132
  require_relative "knockapi/models/page_info"
137
133
  require_relative "knockapi/models/providers/ms_team_check_auth_params"
138
134
  require_relative "knockapi/models/providers/ms_team_check_auth_response"
@@ -175,7 +171,6 @@ require_relative "knockapi/models/schedule_update_params"
175
171
  require_relative "knockapi/models/schedule_update_response"
176
172
  require_relative "knockapi/models/tenant"
177
173
  require_relative "knockapi/models/tenant_delete_params"
178
- require_relative "knockapi/models/tenant_delete_response"
179
174
  require_relative "knockapi/models/tenant_get_params"
180
175
  require_relative "knockapi/models/tenant_list_params"
181
176
  require_relative "knockapi/models/tenant_request"
@@ -184,7 +179,6 @@ require_relative "knockapi/models/tenants/bulk_set_params"
184
179
  require_relative "knockapi/models/tenant_set_params"
185
180
  require_relative "knockapi/models/user"
186
181
  require_relative "knockapi/models/user_delete_params"
187
- require_relative "knockapi/models/user_delete_response"
188
182
  require_relative "knockapi/models/user_get_channel_data_params"
189
183
  require_relative "knockapi/models/user_get_params"
190
184
  require_relative "knockapi/models/user_get_preferences_params"
@@ -213,10 +207,8 @@ require_relative "knockapi/models/users/guide_mark_message_as_seen_response"
213
207
  require_relative "knockapi/models/user_set_channel_data_params"
214
208
  require_relative "knockapi/models/user_set_preferences_params"
215
209
  require_relative "knockapi/models/user_unset_channel_data_params"
216
- require_relative "knockapi/models/user_unset_channel_data_response"
217
210
  require_relative "knockapi/models/user_update_params"
218
211
  require_relative "knockapi/models/workflow_cancel_params"
219
- require_relative "knockapi/models/workflow_cancel_response"
220
212
  require_relative "knockapi/models/workflow_trigger_params"
221
213
  require_relative "knockapi/models/workflow_trigger_response"
222
214
  require_relative "knockapi/models"
@@ -240,7 +232,6 @@ require_relative "knockapi/resources/recipients/preferences"
240
232
  require_relative "knockapi/resources/recipients/subscriptions"
241
233
  require_relative "knockapi/resources/schedules"
242
234
  require_relative "knockapi/resources/schedules/bulk"
243
- require_relative "knockapi/resources/shared"
244
235
  require_relative "knockapi/resources/tenants"
245
236
  require_relative "knockapi/resources/tenants/bulk"
246
237
  require_relative "knockapi/resources/users"
@@ -13,9 +13,6 @@ module Knockapi
13
13
  sig { returns(String) }
14
14
  attr_reader :api_key
15
15
 
16
- sig { returns(Knockapi::Resources::Shared) }
17
- attr_reader :shared
18
-
19
16
  sig { returns(Knockapi::Resources::Recipients) }
20
17
  attr_reader :recipients
21
18
 
@@ -65,7 +62,8 @@ module Knockapi
65
62
  max_retries: Integer,
66
63
  timeout: Float,
67
64
  initial_retry_delay: Float,
68
- max_retry_delay: Float
65
+ max_retry_delay: Float,
66
+ idempotency_header: String
69
67
  ).returns(T.attached_class)
70
68
  end
71
69
  def self.new(
@@ -78,7 +76,8 @@ module Knockapi
78
76
  max_retries: Knockapi::Client::DEFAULT_MAX_RETRIES,
79
77
  timeout: Knockapi::Client::DEFAULT_TIMEOUT_IN_SECONDS,
80
78
  initial_retry_delay: Knockapi::Client::DEFAULT_INITIAL_RETRY_DELAY,
81
- max_retry_delay: Knockapi::Client::DEFAULT_MAX_RETRY_DELAY
79
+ max_retry_delay: Knockapi::Client::DEFAULT_MAX_RETRY_DELAY,
80
+ idempotency_header: "Idempotency-Key"
82
81
  )
83
82
  end
84
83
  end
@@ -27,7 +27,7 @@ module Knockapi
27
27
  sig do
28
28
  params(
29
29
  content: T.any(Pathname, StringIO, IO, String),
30
- filename: T.nilable(String),
30
+ filename: T.nilable(T.any(Pathname, String)),
31
31
  content_type: T.nilable(String)
32
32
  ).returns(T.attached_class)
33
33
  end
@@ -11,7 +11,7 @@ module Knockapi
11
11
  T.any(Knockapi::AudienceAddMembersParams, Knockapi::Internal::AnyHash)
12
12
  end
13
13
 
14
- # A list of audience members to add.
14
+ # A list of audience members to add. Limited to 1,000 members per request.
15
15
  sig { returns(T::Array[Knockapi::AudienceAddMembersParams::Member]) }
16
16
  attr_accessor :members
17
17
 
@@ -22,7 +22,7 @@ module Knockapi
22
22
  ).returns(T.attached_class)
23
23
  end
24
24
  def self.new(
25
- # A list of audience members to add.
25
+ # A list of audience members to add. Limited to 1,000 members per request.
26
26
  members:,
27
27
  request_options: {}
28
28
  )