zavudev 0.6.0 → 0.7.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +1 -1
  4. data/lib/zavudev/models/contact.rb +3 -153
  5. data/lib/zavudev/models/contact_channel.rb +155 -0
  6. data/lib/zavudev/models/senders/agent/agent_flow.rb +6 -101
  7. data/lib/zavudev/models/senders/agent/agent_tool.rb +3 -53
  8. data/lib/zavudev/models/senders/agent/flow_create_params.rb +6 -100
  9. data/lib/zavudev/models/senders/agent/flow_step.rb +61 -0
  10. data/lib/zavudev/models/senders/agent/flow_trigger.rb +51 -0
  11. data/lib/zavudev/models/senders/agent/flow_update_params.rb +6 -100
  12. data/lib/zavudev/models/senders/agent/tool_create_params.rb +3 -52
  13. data/lib/zavudev/models/senders/agent/tool_parameters.rb +58 -0
  14. data/lib/zavudev/models/senders/agent/tool_update_params.rb +3 -52
  15. data/lib/zavudev/models/template_create_params.rb +38 -1
  16. data/lib/zavudev/models.rb +2 -0
  17. data/lib/zavudev/resources/senders/agent/flows.rb +4 -4
  18. data/lib/zavudev/resources/senders/agent/tools.rb +2 -2
  19. data/lib/zavudev/resources/templates.rb +7 -1
  20. data/lib/zavudev/version.rb +1 -1
  21. data/lib/zavudev.rb +4 -0
  22. data/rbi/zavudev/models/contact.rbi +4 -235
  23. data/rbi/zavudev/models/contact_channel.rbi +231 -0
  24. data/rbi/zavudev/models/senders/agent/agent_flow.rbi +7 -233
  25. data/rbi/zavudev/models/senders/agent/agent_tool.rbi +4 -130
  26. data/rbi/zavudev/models/senders/agent/flow_create_params.rbi +7 -245
  27. data/rbi/zavudev/models/senders/agent/flow_step.rbi +115 -0
  28. data/rbi/zavudev/models/senders/agent/flow_trigger.rbi +108 -0
  29. data/rbi/zavudev/models/senders/agent/flow_update_params.rbi +8 -255
  30. data/rbi/zavudev/models/senders/agent/tool_create_params.rbi +4 -132
  31. data/rbi/zavudev/models/senders/agent/tool_parameters.rbi +124 -0
  32. data/rbi/zavudev/models/senders/agent/tool_update_params.rbi +4 -136
  33. data/rbi/zavudev/models/template_create_params.rbi +70 -0
  34. data/rbi/zavudev/models.rbi +2 -0
  35. data/rbi/zavudev/resources/senders/agent/flows.rbi +4 -12
  36. data/rbi/zavudev/resources/senders/agent/tools.rbi +2 -4
  37. data/rbi/zavudev/resources/templates.rbi +9 -0
  38. data/sig/zavudev/models/contact.rbs +6 -153
  39. data/sig/zavudev/models/contact_channel.rbs +150 -0
  40. data/sig/zavudev/models/senders/agent/agent_flow.rbs +8 -100
  41. data/sig/zavudev/models/senders/agent/agent_tool.rbs +4 -57
  42. data/sig/zavudev/models/senders/agent/flow_create_params.rbs +8 -100
  43. data/sig/zavudev/models/senders/agent/flow_step.rbs +55 -0
  44. data/sig/zavudev/models/senders/agent/flow_trigger.rbs +51 -0
  45. data/sig/zavudev/models/senders/agent/flow_update_params.rbs +12 -104
  46. data/sig/zavudev/models/senders/agent/tool_create_params.rbs +4 -57
  47. data/sig/zavudev/models/senders/agent/tool_parameters.rbs +60 -0
  48. data/sig/zavudev/models/senders/agent/tool_update_params.rbs +6 -59
  49. data/sig/zavudev/models/template_create_params.rbs +36 -0
  50. data/sig/zavudev/models.rbs +2 -0
  51. data/sig/zavudev/resources/senders/agent/flows.rbs +4 -4
  52. data/sig/zavudev/resources/senders/agent/tools.rbs +2 -2
  53. data/sig/zavudev/resources/templates.rbs +3 -0
  54. metadata +14 -2
@@ -15,7 +15,7 @@ module Zavudev
15
15
  #
16
16
  # @param name [String]
17
17
  #
18
- # @param parameters [Zavudev::Models::Senders::Agent::ToolCreateParams::Parameters]
18
+ # @param parameters [Zavudev::Models::Senders::Agent::ToolParameters]
19
19
  #
20
20
  # @param webhook_url [String] Must be HTTPS.
21
21
  #
@@ -78,7 +78,7 @@ module Zavudev
78
78
  #
79
79
  # @param name [String] Body param
80
80
  #
81
- # @param parameters [Zavudev::Models::Senders::Agent::ToolUpdateParams::Parameters] Body param
81
+ # @param parameters [Zavudev::Models::Senders::Agent::ToolParameters] Body param
82
82
  #
83
83
  # @param webhook_secret [String, nil] Body param
84
84
  #
@@ -6,7 +6,7 @@ module Zavudev
6
6
  # Create a WhatsApp message template. Note: Templates must be approved by Meta
7
7
  # before use.
8
8
  #
9
- # @overload create(body:, language:, name:, add_security_recommendation: nil, buttons: nil, code_expiration_minutes: nil, instagram_body: nil, sms_body: nil, telegram_body: nil, variables: nil, whatsapp_category: nil, request_options: {})
9
+ # @overload create(body:, language:, name:, add_security_recommendation: nil, buttons: nil, code_expiration_minutes: nil, footer: nil, header_content: nil, header_type: nil, instagram_body: nil, sms_body: nil, telegram_body: nil, variables: nil, whatsapp_category: nil, request_options: {})
10
10
  #
11
11
  # @param body [String] Default template body. Used when no channel-specific body is set.
12
12
  #
@@ -20,6 +20,12 @@ module Zavudev
20
20
  #
21
21
  # @param code_expiration_minutes [Integer] Code expiration time in minutes. Only for AUTHENTICATION templates.
22
22
  #
23
+ # @param footer [String] Footer text for the template.
24
+ #
25
+ # @param header_content [String] Header content (text string or media URL).
26
+ #
27
+ # @param header_type [Symbol, Zavudev::Models::TemplateCreateParams::HeaderType] Type of header for the template.
28
+ #
23
29
  # @param instagram_body [String] Channel-specific body for Instagram. Falls back to `body` if not set.
24
30
  #
25
31
  # @param sms_body [String] Channel-specific body for SMS. Falls back to `body` if not set.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zavudev
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.0"
5
5
  end
data/lib/zavudev.rb CHANGED
@@ -91,6 +91,7 @@ require_relative "zavudev/models/broadcast_update_params"
91
91
  require_relative "zavudev/models/broadcast_update_response"
92
92
  require_relative "zavudev/models/channel"
93
93
  require_relative "zavudev/models/contact"
94
+ require_relative "zavudev/models/contact_channel"
94
95
  require_relative "zavudev/models/contact_list_params"
95
96
  require_relative "zavudev/models/contact_retrieve_by_phone_params"
96
97
  require_relative "zavudev/models/contact_retrieve_params"
@@ -158,6 +159,8 @@ require_relative "zavudev/models/senders/agent/flow_duplicate_response"
158
159
  require_relative "zavudev/models/senders/agent/flow_list_params"
159
160
  require_relative "zavudev/models/senders/agent/flow_retrieve_params"
160
161
  require_relative "zavudev/models/senders/agent/flow_retrieve_response"
162
+ require_relative "zavudev/models/senders/agent/flow_step"
163
+ require_relative "zavudev/models/senders/agent/flow_trigger"
161
164
  require_relative "zavudev/models/senders/agent/flow_update_params"
162
165
  require_relative "zavudev/models/senders/agent/flow_update_response"
163
166
  require_relative "zavudev/models/senders/agent/knowledge_base_create_params"
@@ -176,6 +179,7 @@ require_relative "zavudev/models/senders/agent/tool_create_params"
176
179
  require_relative "zavudev/models/senders/agent/tool_create_response"
177
180
  require_relative "zavudev/models/senders/agent/tool_delete_params"
178
181
  require_relative "zavudev/models/senders/agent/tool_list_params"
182
+ require_relative "zavudev/models/senders/agent/tool_parameters"
179
183
  require_relative "zavudev/models/senders/agent/tool_retrieve_params"
180
184
  require_relative "zavudev/models/senders/agent/tool_retrieve_response"
181
185
  require_relative "zavudev/models/senders/agent/tool_test_params"
@@ -24,10 +24,10 @@ module Zavudev
24
24
  attr_accessor :verified
25
25
 
26
26
  # All communication channels for this contact.
27
- sig { returns(T.nilable(T::Array[Zavudev::Contact::Channel])) }
27
+ sig { returns(T.nilable(T::Array[Zavudev::ContactChannel])) }
28
28
  attr_reader :channels
29
29
 
30
- sig { params(channels: T::Array[Zavudev::Contact::Channel::OrHash]).void }
30
+ sig { params(channels: T::Array[Zavudev::ContactChannel::OrHash]).void }
31
31
  attr_writer :channels
32
32
 
33
33
  sig { returns(T.nilable(String)) }
@@ -97,7 +97,7 @@ module Zavudev
97
97
  created_at: Time,
98
98
  metadata: T::Hash[Symbol, String],
99
99
  verified: T::Boolean,
100
- channels: T::Array[Zavudev::Contact::Channel::OrHash],
100
+ channels: T::Array[Zavudev::ContactChannel::OrHash],
101
101
  country_code: String,
102
102
  default_channel: Zavudev::Contact::DefaultChannel::OrSymbol,
103
103
  display_name: String,
@@ -146,7 +146,7 @@ module Zavudev
146
146
  created_at: Time,
147
147
  metadata: T::Hash[Symbol, String],
148
148
  verified: T::Boolean,
149
- channels: T::Array[Zavudev::Contact::Channel],
149
+ channels: T::Array[Zavudev::ContactChannel],
150
150
  country_code: String,
151
151
  default_channel: Zavudev::Contact::DefaultChannel::TaggedSymbol,
152
152
  display_name: String,
@@ -162,237 +162,6 @@ module Zavudev
162
162
  def to_hash
163
163
  end
164
164
 
165
- class Channel < Zavudev::Internal::Type::BaseModel
166
- OrHash =
167
- T.type_alias do
168
- T.any(Zavudev::Contact::Channel, Zavudev::Internal::AnyHash)
169
- end
170
-
171
- sig { returns(String) }
172
- attr_accessor :id
173
-
174
- # Channel type.
175
- sig { returns(Zavudev::Contact::Channel::Channel::TaggedSymbol) }
176
- attr_accessor :channel
177
-
178
- sig { returns(Time) }
179
- attr_accessor :created_at
180
-
181
- # Channel identifier (phone number or email address).
182
- sig { returns(String) }
183
- attr_accessor :identifier
184
-
185
- # Whether this is the primary channel for its type.
186
- sig { returns(T::Boolean) }
187
- attr_accessor :is_primary
188
-
189
- # Whether this channel has been verified.
190
- sig { returns(T::Boolean) }
191
- attr_accessor :verified
192
-
193
- # ISO country code for phone numbers.
194
- sig { returns(T.nilable(String)) }
195
- attr_reader :country_code
196
-
197
- sig { params(country_code: String).void }
198
- attr_writer :country_code
199
-
200
- # Optional label for the channel.
201
- sig { returns(T.nilable(String)) }
202
- attr_reader :label
203
-
204
- sig { params(label: String).void }
205
- attr_writer :label
206
-
207
- # Last time a message was received on this channel.
208
- sig { returns(T.nilable(Time)) }
209
- attr_reader :last_inbound_at
210
-
211
- sig { params(last_inbound_at: Time).void }
212
- attr_writer :last_inbound_at
213
-
214
- sig { returns(T.nilable(T::Hash[Symbol, String])) }
215
- attr_reader :metadata
216
-
217
- sig { params(metadata: T::Hash[Symbol, String]).void }
218
- attr_writer :metadata
219
-
220
- # Delivery metrics for this channel.
221
- sig { returns(T.nilable(Zavudev::Contact::Channel::Metrics)) }
222
- attr_reader :metrics
223
-
224
- sig { params(metrics: Zavudev::Contact::Channel::Metrics::OrHash).void }
225
- attr_writer :metrics
226
-
227
- sig { returns(T.nilable(Time)) }
228
- attr_reader :updated_at
229
-
230
- sig { params(updated_at: Time).void }
231
- attr_writer :updated_at
232
-
233
- # A communication channel for a contact.
234
- sig do
235
- params(
236
- id: String,
237
- channel: Zavudev::Contact::Channel::Channel::OrSymbol,
238
- created_at: Time,
239
- identifier: String,
240
- is_primary: T::Boolean,
241
- verified: T::Boolean,
242
- country_code: String,
243
- label: String,
244
- last_inbound_at: Time,
245
- metadata: T::Hash[Symbol, String],
246
- metrics: Zavudev::Contact::Channel::Metrics::OrHash,
247
- updated_at: Time
248
- ).returns(T.attached_class)
249
- end
250
- def self.new(
251
- id:,
252
- # Channel type.
253
- channel:,
254
- created_at:,
255
- # Channel identifier (phone number or email address).
256
- identifier:,
257
- # Whether this is the primary channel for its type.
258
- is_primary:,
259
- # Whether this channel has been verified.
260
- verified:,
261
- # ISO country code for phone numbers.
262
- country_code: nil,
263
- # Optional label for the channel.
264
- label: nil,
265
- # Last time a message was received on this channel.
266
- last_inbound_at: nil,
267
- metadata: nil,
268
- # Delivery metrics for this channel.
269
- metrics: nil,
270
- updated_at: nil
271
- )
272
- end
273
-
274
- sig do
275
- override.returns(
276
- {
277
- id: String,
278
- channel: Zavudev::Contact::Channel::Channel::TaggedSymbol,
279
- created_at: Time,
280
- identifier: String,
281
- is_primary: T::Boolean,
282
- verified: T::Boolean,
283
- country_code: String,
284
- label: String,
285
- last_inbound_at: Time,
286
- metadata: T::Hash[Symbol, String],
287
- metrics: Zavudev::Contact::Channel::Metrics,
288
- updated_at: Time
289
- }
290
- )
291
- end
292
- def to_hash
293
- end
294
-
295
- # Channel type.
296
- module Channel
297
- extend Zavudev::Internal::Type::Enum
298
-
299
- TaggedSymbol =
300
- T.type_alias { T.all(Symbol, Zavudev::Contact::Channel::Channel) }
301
- OrSymbol = T.type_alias { T.any(Symbol, String) }
302
-
303
- SMS = T.let(:sms, Zavudev::Contact::Channel::Channel::TaggedSymbol)
304
- WHATSAPP =
305
- T.let(:whatsapp, Zavudev::Contact::Channel::Channel::TaggedSymbol)
306
- EMAIL =
307
- T.let(:email, Zavudev::Contact::Channel::Channel::TaggedSymbol)
308
- TELEGRAM =
309
- T.let(:telegram, Zavudev::Contact::Channel::Channel::TaggedSymbol)
310
- VOICE =
311
- T.let(:voice, Zavudev::Contact::Channel::Channel::TaggedSymbol)
312
-
313
- sig do
314
- override.returns(
315
- T::Array[Zavudev::Contact::Channel::Channel::TaggedSymbol]
316
- )
317
- end
318
- def self.values
319
- end
320
- end
321
-
322
- class Metrics < Zavudev::Internal::Type::BaseModel
323
- OrHash =
324
- T.type_alias do
325
- T.any(
326
- Zavudev::Contact::Channel::Metrics,
327
- Zavudev::Internal::AnyHash
328
- )
329
- end
330
-
331
- sig { returns(T.nilable(Float)) }
332
- attr_reader :avg_delivery_time_ms
333
-
334
- sig { params(avg_delivery_time_ms: Float).void }
335
- attr_writer :avg_delivery_time_ms
336
-
337
- sig { returns(T.nilable(Integer)) }
338
- attr_reader :failure_count
339
-
340
- sig { params(failure_count: Integer).void }
341
- attr_writer :failure_count
342
-
343
- sig { returns(T.nilable(Time)) }
344
- attr_reader :last_success_at
345
-
346
- sig { params(last_success_at: Time).void }
347
- attr_writer :last_success_at
348
-
349
- sig { returns(T.nilable(Integer)) }
350
- attr_reader :success_count
351
-
352
- sig { params(success_count: Integer).void }
353
- attr_writer :success_count
354
-
355
- sig { returns(T.nilable(Integer)) }
356
- attr_reader :total_attempts
357
-
358
- sig { params(total_attempts: Integer).void }
359
- attr_writer :total_attempts
360
-
361
- # Delivery metrics for this channel.
362
- sig do
363
- params(
364
- avg_delivery_time_ms: Float,
365
- failure_count: Integer,
366
- last_success_at: Time,
367
- success_count: Integer,
368
- total_attempts: Integer
369
- ).returns(T.attached_class)
370
- end
371
- def self.new(
372
- avg_delivery_time_ms: nil,
373
- failure_count: nil,
374
- last_success_at: nil,
375
- success_count: nil,
376
- total_attempts: nil
377
- )
378
- end
379
-
380
- sig do
381
- override.returns(
382
- {
383
- avg_delivery_time_ms: Float,
384
- failure_count: Integer,
385
- last_success_at: Time,
386
- success_count: Integer,
387
- total_attempts: Integer
388
- }
389
- )
390
- end
391
- def to_hash
392
- end
393
- end
394
- end
395
-
396
165
  # Preferred channel for this contact.
397
166
  module DefaultChannel
398
167
  extend Zavudev::Internal::Type::Enum
@@ -0,0 +1,231 @@
1
+ # typed: strong
2
+
3
+ module Zavudev
4
+ module Models
5
+ class ContactChannel < Zavudev::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Zavudev::ContactChannel, Zavudev::Internal::AnyHash)
9
+ end
10
+
11
+ sig { returns(String) }
12
+ attr_accessor :id
13
+
14
+ # Channel type.
15
+ sig { returns(Zavudev::ContactChannel::Channel::TaggedSymbol) }
16
+ attr_accessor :channel
17
+
18
+ sig { returns(Time) }
19
+ attr_accessor :created_at
20
+
21
+ # Channel identifier (phone number or email address).
22
+ sig { returns(String) }
23
+ attr_accessor :identifier
24
+
25
+ # Whether this is the primary channel for its type.
26
+ sig { returns(T::Boolean) }
27
+ attr_accessor :is_primary
28
+
29
+ # Whether this channel has been verified.
30
+ sig { returns(T::Boolean) }
31
+ attr_accessor :verified
32
+
33
+ # ISO country code for phone numbers.
34
+ sig { returns(T.nilable(String)) }
35
+ attr_reader :country_code
36
+
37
+ sig { params(country_code: String).void }
38
+ attr_writer :country_code
39
+
40
+ # Optional label for the channel.
41
+ sig { returns(T.nilable(String)) }
42
+ attr_reader :label
43
+
44
+ sig { params(label: String).void }
45
+ attr_writer :label
46
+
47
+ # Last time a message was received on this channel.
48
+ sig { returns(T.nilable(Time)) }
49
+ attr_reader :last_inbound_at
50
+
51
+ sig { params(last_inbound_at: Time).void }
52
+ attr_writer :last_inbound_at
53
+
54
+ sig { returns(T.nilable(T::Hash[Symbol, String])) }
55
+ attr_reader :metadata
56
+
57
+ sig { params(metadata: T::Hash[Symbol, String]).void }
58
+ attr_writer :metadata
59
+
60
+ # Delivery metrics for this channel.
61
+ sig { returns(T.nilable(Zavudev::ContactChannel::Metrics)) }
62
+ attr_reader :metrics
63
+
64
+ sig { params(metrics: Zavudev::ContactChannel::Metrics::OrHash).void }
65
+ attr_writer :metrics
66
+
67
+ sig { returns(T.nilable(Time)) }
68
+ attr_reader :updated_at
69
+
70
+ sig { params(updated_at: Time).void }
71
+ attr_writer :updated_at
72
+
73
+ # A communication channel for a contact.
74
+ sig do
75
+ params(
76
+ id: String,
77
+ channel: Zavudev::ContactChannel::Channel::OrSymbol,
78
+ created_at: Time,
79
+ identifier: String,
80
+ is_primary: T::Boolean,
81
+ verified: T::Boolean,
82
+ country_code: String,
83
+ label: String,
84
+ last_inbound_at: Time,
85
+ metadata: T::Hash[Symbol, String],
86
+ metrics: Zavudev::ContactChannel::Metrics::OrHash,
87
+ updated_at: Time
88
+ ).returns(T.attached_class)
89
+ end
90
+ def self.new(
91
+ id:,
92
+ # Channel type.
93
+ channel:,
94
+ created_at:,
95
+ # Channel identifier (phone number or email address).
96
+ identifier:,
97
+ # Whether this is the primary channel for its type.
98
+ is_primary:,
99
+ # Whether this channel has been verified.
100
+ verified:,
101
+ # ISO country code for phone numbers.
102
+ country_code: nil,
103
+ # Optional label for the channel.
104
+ label: nil,
105
+ # Last time a message was received on this channel.
106
+ last_inbound_at: nil,
107
+ metadata: nil,
108
+ # Delivery metrics for this channel.
109
+ metrics: nil,
110
+ updated_at: nil
111
+ )
112
+ end
113
+
114
+ sig do
115
+ override.returns(
116
+ {
117
+ id: String,
118
+ channel: Zavudev::ContactChannel::Channel::TaggedSymbol,
119
+ created_at: Time,
120
+ identifier: String,
121
+ is_primary: T::Boolean,
122
+ verified: T::Boolean,
123
+ country_code: String,
124
+ label: String,
125
+ last_inbound_at: Time,
126
+ metadata: T::Hash[Symbol, String],
127
+ metrics: Zavudev::ContactChannel::Metrics,
128
+ updated_at: Time
129
+ }
130
+ )
131
+ end
132
+ def to_hash
133
+ end
134
+
135
+ # Channel type.
136
+ module Channel
137
+ extend Zavudev::Internal::Type::Enum
138
+
139
+ TaggedSymbol =
140
+ T.type_alias { T.all(Symbol, Zavudev::ContactChannel::Channel) }
141
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
142
+
143
+ SMS = T.let(:sms, Zavudev::ContactChannel::Channel::TaggedSymbol)
144
+ WHATSAPP =
145
+ T.let(:whatsapp, Zavudev::ContactChannel::Channel::TaggedSymbol)
146
+ EMAIL = T.let(:email, Zavudev::ContactChannel::Channel::TaggedSymbol)
147
+ TELEGRAM =
148
+ T.let(:telegram, Zavudev::ContactChannel::Channel::TaggedSymbol)
149
+ VOICE = T.let(:voice, Zavudev::ContactChannel::Channel::TaggedSymbol)
150
+
151
+ sig do
152
+ override.returns(
153
+ T::Array[Zavudev::ContactChannel::Channel::TaggedSymbol]
154
+ )
155
+ end
156
+ def self.values
157
+ end
158
+ end
159
+
160
+ class Metrics < Zavudev::Internal::Type::BaseModel
161
+ OrHash =
162
+ T.type_alias do
163
+ T.any(Zavudev::ContactChannel::Metrics, Zavudev::Internal::AnyHash)
164
+ end
165
+
166
+ sig { returns(T.nilable(Float)) }
167
+ attr_reader :avg_delivery_time_ms
168
+
169
+ sig { params(avg_delivery_time_ms: Float).void }
170
+ attr_writer :avg_delivery_time_ms
171
+
172
+ sig { returns(T.nilable(Integer)) }
173
+ attr_reader :failure_count
174
+
175
+ sig { params(failure_count: Integer).void }
176
+ attr_writer :failure_count
177
+
178
+ sig { returns(T.nilable(Time)) }
179
+ attr_reader :last_success_at
180
+
181
+ sig { params(last_success_at: Time).void }
182
+ attr_writer :last_success_at
183
+
184
+ sig { returns(T.nilable(Integer)) }
185
+ attr_reader :success_count
186
+
187
+ sig { params(success_count: Integer).void }
188
+ attr_writer :success_count
189
+
190
+ sig { returns(T.nilable(Integer)) }
191
+ attr_reader :total_attempts
192
+
193
+ sig { params(total_attempts: Integer).void }
194
+ attr_writer :total_attempts
195
+
196
+ # Delivery metrics for this channel.
197
+ sig do
198
+ params(
199
+ avg_delivery_time_ms: Float,
200
+ failure_count: Integer,
201
+ last_success_at: Time,
202
+ success_count: Integer,
203
+ total_attempts: Integer
204
+ ).returns(T.attached_class)
205
+ end
206
+ def self.new(
207
+ avg_delivery_time_ms: nil,
208
+ failure_count: nil,
209
+ last_success_at: nil,
210
+ success_count: nil,
211
+ total_attempts: nil
212
+ )
213
+ end
214
+
215
+ sig do
216
+ override.returns(
217
+ {
218
+ avg_delivery_time_ms: Float,
219
+ failure_count: Integer,
220
+ last_success_at: Time,
221
+ success_count: Integer,
222
+ total_attempts: Integer
223
+ }
224
+ )
225
+ end
226
+ def to_hash
227
+ end
228
+ end
229
+ end
230
+ end
231
+ end