sentdm 0.30.0 → 0.32.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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/README.md +29 -1
  4. data/lib/sentdm/internal/contacts_page.rb +115 -0
  5. data/lib/sentdm/internal/conversations_page.rb +115 -0
  6. data/lib/sentdm/internal/templates_page.rb +115 -0
  7. data/lib/sentdm/internal/webhook_events_page.rb +115 -0
  8. data/lib/sentdm/internal/webhooks_page.rb +115 -0
  9. data/lib/sentdm/models/api_response_of_conversation_messages_list.rb +0 -1
  10. data/lib/sentdm/models/channel_event.rb +78 -0
  11. data/lib/sentdm/models/channel_event_payload.rb +128 -0
  12. data/lib/sentdm/models/contact_event.rb +69 -0
  13. data/lib/sentdm/models/contact_event_payload.rb +111 -0
  14. data/lib/sentdm/models/contact_list_params.rb +13 -13
  15. data/lib/sentdm/models/contact_response.rb +1 -0
  16. data/lib/sentdm/models/conversation_list_messages_params.rb +5 -5
  17. data/lib/sentdm/models/conversation_list_params.rb +5 -5
  18. data/lib/sentdm/models/inbound_message_event.rb +16 -8
  19. data/lib/sentdm/models/message_event.rb +16 -8
  20. data/lib/sentdm/models/message_event_payload.rb +11 -1
  21. data/lib/sentdm/models/template.rb +37 -5
  22. data/lib/sentdm/models/template_body.rb +20 -11
  23. data/lib/sentdm/models/template_body_content.rb +35 -3
  24. data/lib/sentdm/models/template_button.rb +8 -2
  25. data/lib/sentdm/models/template_button_props.rb +12 -1
  26. data/lib/sentdm/models/template_definition.rb +14 -2
  27. data/lib/sentdm/models/template_event.rb +16 -8
  28. data/lib/sentdm/models/template_event_payload.rb +31 -4
  29. data/lib/sentdm/models/template_list_params.rb +17 -17
  30. data/lib/sentdm/models/template_variable.rb +20 -3
  31. data/lib/sentdm/models/webhook_list_events_params.rb +5 -5
  32. data/lib/sentdm/models/webhook_list_events_response.rb +116 -168
  33. data/lib/sentdm/models/webhook_list_params.rb +11 -11
  34. data/lib/sentdm/models/webhook_response.rb +1 -0
  35. data/lib/sentdm/models.rb +8 -0
  36. data/lib/sentdm/resources/contacts.rb +8 -7
  37. data/lib/sentdm/resources/conversations.rb +10 -8
  38. data/lib/sentdm/resources/templates.rb +38 -11
  39. data/lib/sentdm/resources/webhooks.rb +12 -10
  40. data/lib/sentdm/version.rb +1 -1
  41. data/lib/sentdm.rb +9 -3
  42. data/rbi/sentdm/internal/contacts_page.rbi +71 -0
  43. data/rbi/sentdm/internal/conversations_page.rbi +71 -0
  44. data/rbi/sentdm/internal/templates_page.rbi +71 -0
  45. data/rbi/sentdm/internal/webhook_events_page.rbi +71 -0
  46. data/rbi/sentdm/internal/webhooks_page.rbi +71 -0
  47. data/rbi/sentdm/models/channel_event.rbi +128 -0
  48. data/rbi/sentdm/models/channel_event_payload.rbi +189 -0
  49. data/rbi/sentdm/models/contact_event.rbi +110 -0
  50. data/rbi/sentdm/models/contact_event_payload.rbi +164 -0
  51. data/rbi/sentdm/models/contact_list_params.rbi +19 -13
  52. data/rbi/sentdm/models/conversation_list_messages_params.rbi +12 -6
  53. data/rbi/sentdm/models/conversation_list_params.rbi +16 -5
  54. data/rbi/sentdm/models/inbound_message_event.rbi +18 -10
  55. data/rbi/sentdm/models/message_event.rbi +18 -10
  56. data/rbi/sentdm/models/message_event_payload.rbi +12 -0
  57. data/rbi/sentdm/models/template.rbi +58 -4
  58. data/rbi/sentdm/models/template_body.rbi +22 -13
  59. data/rbi/sentdm/models/template_body_content.rbi +59 -1
  60. data/rbi/sentdm/models/template_button.rbi +14 -2
  61. data/rbi/sentdm/models/template_button_props.rbi +22 -0
  62. data/rbi/sentdm/models/template_definition.rbi +20 -2
  63. data/rbi/sentdm/models/template_event.rbi +18 -10
  64. data/rbi/sentdm/models/template_event_payload.rbi +51 -8
  65. data/rbi/sentdm/models/template_list_params.rbi +22 -16
  66. data/rbi/sentdm/models/template_variable.rbi +28 -1
  67. data/rbi/sentdm/models/webhook_list_events_params.rbi +12 -6
  68. data/rbi/sentdm/models/webhook_list_events_response.rbi +120 -263
  69. data/rbi/sentdm/models/webhook_list_params.rbi +16 -10
  70. data/rbi/sentdm/models.rbi +8 -0
  71. data/rbi/sentdm/resources/contacts.rbi +6 -6
  72. data/rbi/sentdm/resources/conversations.rbi +14 -6
  73. data/rbi/sentdm/resources/templates.rbi +35 -9
  74. data/rbi/sentdm/resources/webhooks.rbi +12 -8
  75. data/sig/sentdm/internal/contacts_page.rbs +41 -0
  76. data/sig/sentdm/internal/conversations_page.rbs +41 -0
  77. data/sig/sentdm/internal/templates_page.rbs +44 -0
  78. data/sig/sentdm/internal/webhook_events_page.rbs +41 -0
  79. data/sig/sentdm/internal/webhooks_page.rbs +41 -0
  80. data/sig/sentdm/models/channel_event.rbs +44 -0
  81. data/sig/sentdm/models/channel_event_payload.rbs +63 -0
  82. data/sig/sentdm/models/contact_event.rbs +44 -0
  83. data/sig/sentdm/models/contact_event_payload.rbs +63 -0
  84. data/sig/sentdm/models/contact_list_params.rbs +11 -7
  85. data/sig/sentdm/models/conversation_list_messages_params.rbs +8 -4
  86. data/sig/sentdm/models/conversation_list_params.rbs +8 -4
  87. data/sig/sentdm/models/inbound_message_event.rbs +5 -0
  88. data/sig/sentdm/models/message_event.rbs +5 -0
  89. data/sig/sentdm/models/message_event_payload.rbs +5 -0
  90. data/sig/sentdm/models/template.rbs +5 -0
  91. data/sig/sentdm/models/template_event.rbs +5 -0
  92. data/sig/sentdm/models/template_event_payload.rbs +9 -6
  93. data/sig/sentdm/models/template_list_params.rbs +14 -10
  94. data/sig/sentdm/models/webhook_list_events_params.rbs +8 -4
  95. data/sig/sentdm/models/webhook_list_events_response.rbs +65 -127
  96. data/sig/sentdm/models/webhook_list_params.rbs +11 -7
  97. data/sig/sentdm/models.rbs +8 -0
  98. data/sig/sentdm/resources/contacts.rbs +3 -3
  99. data/sig/sentdm/resources/conversations.rbs +6 -6
  100. data/sig/sentdm/resources/templates.rbs +3 -3
  101. data/sig/sentdm/resources/webhooks.rbs +6 -6
  102. metadata +29 -11
  103. data/lib/sentdm/models/contact_list_response.rb +0 -65
  104. data/lib/sentdm/models/template_list_response.rb +0 -65
  105. data/lib/sentdm/models/webhook_list_response.rb +0 -65
  106. data/rbi/sentdm/models/contact_list_response.rbi +0 -128
  107. data/rbi/sentdm/models/template_list_response.rbi +0 -128
  108. data/rbi/sentdm/models/webhook_list_response.rbi +0 -128
  109. data/sig/sentdm/models/contact_list_response.rbs +0 -67
  110. data/sig/sentdm/models/template_list_response.rbs +0 -65
  111. data/sig/sentdm/models/webhook_list_response.rbs +0 -67
data/lib/sentdm.rb CHANGED
@@ -52,6 +52,11 @@ require_relative "sentdm/errors"
52
52
  require_relative "sentdm/internal/transport/base_client"
53
53
  require_relative "sentdm/internal/transport/pooled_net_requester"
54
54
  require_relative "sentdm/client"
55
+ require_relative "sentdm/internal/contacts_page"
56
+ require_relative "sentdm/internal/conversations_page"
57
+ require_relative "sentdm/internal/templates_page"
58
+ require_relative "sentdm/internal/webhook_events_page"
59
+ require_relative "sentdm/internal/webhooks_page"
55
60
  require_relative "sentdm/models/mutation_request"
56
61
  require_relative "sentdm/models/api_meta"
57
62
  require_relative "sentdm/models/api_response_of_contact"
@@ -67,10 +72,13 @@ require_relative "sentdm/models/brand_business_info"
67
72
  require_relative "sentdm/models/brand_compliance_info"
68
73
  require_relative "sentdm/models/brand_contact_info"
69
74
  require_relative "sentdm/models/brands_brand_data"
75
+ require_relative "sentdm/models/channel_event"
76
+ require_relative "sentdm/models/channel_event_payload"
70
77
  require_relative "sentdm/models/contact_create_params"
71
78
  require_relative "sentdm/models/contact_delete_params"
79
+ require_relative "sentdm/models/contact_event"
80
+ require_relative "sentdm/models/contact_event_payload"
72
81
  require_relative "sentdm/models/contact_list_params"
73
- require_relative "sentdm/models/contact_list_response"
74
82
  require_relative "sentdm/models/contact_message_summary"
75
83
  require_relative "sentdm/models/contact_response"
76
84
  require_relative "sentdm/models/contact_retrieve_message_summary_params"
@@ -133,7 +141,6 @@ require_relative "sentdm/models/template_event_payload"
133
141
  require_relative "sentdm/models/template_footer"
134
142
  require_relative "sentdm/models/template_header"
135
143
  require_relative "sentdm/models/template_list_params"
136
- require_relative "sentdm/models/template_list_response"
137
144
  require_relative "sentdm/models/template_retrieve_params"
138
145
  require_relative "sentdm/models/template_update_params"
139
146
  require_relative "sentdm/models/template_variable"
@@ -152,7 +159,6 @@ require_relative "sentdm/models/webhook_list_events_response"
152
159
  require_relative "sentdm/models/webhook_list_event_types_params"
153
160
  require_relative "sentdm/models/webhook_list_event_types_response"
154
161
  require_relative "sentdm/models/webhook_list_params"
155
- require_relative "sentdm/models/webhook_list_response"
156
162
  require_relative "sentdm/models/webhook_response"
157
163
  require_relative "sentdm/models/webhook_retrieve_params"
158
164
  require_relative "sentdm/models/webhook_rotate_secret_params"
@@ -0,0 +1,71 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Internal
5
+ class ContactsPage
6
+ include Sentdm::Internal::Type::BasePage
7
+
8
+ Elem = type_member
9
+
10
+ sig { returns(Data) }
11
+ attr_accessor :data
12
+
13
+ # @api private
14
+ sig { returns(String) }
15
+ def inspect
16
+ end
17
+
18
+ class Data < Sentdm::Internal::Type::BaseModel
19
+ OrHash = T.type_alias { T.any(Data, Sentdm::Internal::AnyHash) }
20
+
21
+ sig { returns(T.nilable(T::Array[T.anything])) }
22
+ attr_reader :contacts
23
+
24
+ sig { params(contacts: T::Array[T.anything]).void }
25
+ attr_writer :contacts
26
+
27
+ sig { returns(T.nilable(Data::Pagination)) }
28
+ attr_reader :pagination
29
+
30
+ sig { params(pagination: Data::Pagination::OrHash).void }
31
+ attr_writer :pagination
32
+
33
+ sig do
34
+ params(
35
+ contacts: T::Array[T.anything],
36
+ pagination: Data::Pagination::OrHash
37
+ ).returns(T.attached_class)
38
+ end
39
+ def self.new(contacts: nil, pagination: nil)
40
+ end
41
+
42
+ sig do
43
+ override.returns(
44
+ { contacts: T::Array[T.anything], pagination: Data::Pagination }
45
+ )
46
+ end
47
+ def to_hash
48
+ end
49
+
50
+ class Pagination < Sentdm::Internal::Type::BaseModel
51
+ OrHash =
52
+ T.type_alias { T.any(Data::Pagination, Sentdm::Internal::AnyHash) }
53
+
54
+ sig { returns(T.nilable(T::Boolean)) }
55
+ attr_reader :has_more
56
+
57
+ sig { params(has_more: T::Boolean).void }
58
+ attr_writer :has_more
59
+
60
+ sig { params(has_more: T::Boolean).returns(T.attached_class) }
61
+ def self.new(has_more: nil)
62
+ end
63
+
64
+ sig { override.returns({ has_more: T::Boolean }) }
65
+ def to_hash
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Internal
5
+ class ConversationsPage
6
+ include Sentdm::Internal::Type::BasePage
7
+
8
+ Elem = type_member
9
+
10
+ sig { returns(Data) }
11
+ attr_accessor :data
12
+
13
+ # @api private
14
+ sig { returns(String) }
15
+ def inspect
16
+ end
17
+
18
+ class Data < Sentdm::Internal::Type::BaseModel
19
+ OrHash = T.type_alias { T.any(Data, Sentdm::Internal::AnyHash) }
20
+
21
+ sig { returns(T.nilable(T::Array[T.anything])) }
22
+ attr_reader :messages
23
+
24
+ sig { params(messages: T::Array[T.anything]).void }
25
+ attr_writer :messages
26
+
27
+ sig { returns(T.nilable(Data::Pagination)) }
28
+ attr_reader :pagination
29
+
30
+ sig { params(pagination: Data::Pagination::OrHash).void }
31
+ attr_writer :pagination
32
+
33
+ sig do
34
+ params(
35
+ messages: T::Array[T.anything],
36
+ pagination: Data::Pagination::OrHash
37
+ ).returns(T.attached_class)
38
+ end
39
+ def self.new(messages: nil, pagination: nil)
40
+ end
41
+
42
+ sig do
43
+ override.returns(
44
+ { messages: T::Array[T.anything], pagination: Data::Pagination }
45
+ )
46
+ end
47
+ def to_hash
48
+ end
49
+
50
+ class Pagination < Sentdm::Internal::Type::BaseModel
51
+ OrHash =
52
+ T.type_alias { T.any(Data::Pagination, Sentdm::Internal::AnyHash) }
53
+
54
+ sig { returns(T.nilable(T::Boolean)) }
55
+ attr_reader :has_more
56
+
57
+ sig { params(has_more: T::Boolean).void }
58
+ attr_writer :has_more
59
+
60
+ sig { params(has_more: T::Boolean).returns(T.attached_class) }
61
+ def self.new(has_more: nil)
62
+ end
63
+
64
+ sig { override.returns({ has_more: T::Boolean }) }
65
+ def to_hash
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Internal
5
+ class TemplatesPage
6
+ include Sentdm::Internal::Type::BasePage
7
+
8
+ Elem = type_member
9
+
10
+ sig { returns(Data) }
11
+ attr_accessor :data
12
+
13
+ # @api private
14
+ sig { returns(String) }
15
+ def inspect
16
+ end
17
+
18
+ class Data < Sentdm::Internal::Type::BaseModel
19
+ OrHash = T.type_alias { T.any(Data, Sentdm::Internal::AnyHash) }
20
+
21
+ sig { returns(T.nilable(Data::Pagination)) }
22
+ attr_reader :pagination
23
+
24
+ sig { params(pagination: Data::Pagination::OrHash).void }
25
+ attr_writer :pagination
26
+
27
+ sig { returns(T.nilable(T::Array[T.anything])) }
28
+ attr_reader :templates
29
+
30
+ sig { params(templates: T::Array[T.anything]).void }
31
+ attr_writer :templates
32
+
33
+ sig do
34
+ params(
35
+ pagination: Data::Pagination::OrHash,
36
+ templates: T::Array[T.anything]
37
+ ).returns(T.attached_class)
38
+ end
39
+ def self.new(pagination: nil, templates: nil)
40
+ end
41
+
42
+ sig do
43
+ override.returns(
44
+ { pagination: Data::Pagination, templates: T::Array[T.anything] }
45
+ )
46
+ end
47
+ def to_hash
48
+ end
49
+
50
+ class Pagination < Sentdm::Internal::Type::BaseModel
51
+ OrHash =
52
+ T.type_alias { T.any(Data::Pagination, Sentdm::Internal::AnyHash) }
53
+
54
+ sig { returns(T.nilable(T::Boolean)) }
55
+ attr_reader :has_more
56
+
57
+ sig { params(has_more: T::Boolean).void }
58
+ attr_writer :has_more
59
+
60
+ sig { params(has_more: T::Boolean).returns(T.attached_class) }
61
+ def self.new(has_more: nil)
62
+ end
63
+
64
+ sig { override.returns({ has_more: T::Boolean }) }
65
+ def to_hash
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Internal
5
+ class WebhookEventsPage
6
+ include Sentdm::Internal::Type::BasePage
7
+
8
+ Elem = type_member
9
+
10
+ sig { returns(Data) }
11
+ attr_accessor :data
12
+
13
+ # @api private
14
+ sig { returns(String) }
15
+ def inspect
16
+ end
17
+
18
+ class Data < Sentdm::Internal::Type::BaseModel
19
+ OrHash = T.type_alias { T.any(Data, Sentdm::Internal::AnyHash) }
20
+
21
+ sig { returns(T.nilable(T::Array[T.anything])) }
22
+ attr_reader :events
23
+
24
+ sig { params(events: T::Array[T.anything]).void }
25
+ attr_writer :events
26
+
27
+ sig { returns(T.nilable(Data::Pagination)) }
28
+ attr_reader :pagination
29
+
30
+ sig { params(pagination: Data::Pagination::OrHash).void }
31
+ attr_writer :pagination
32
+
33
+ sig do
34
+ params(
35
+ events: T::Array[T.anything],
36
+ pagination: Data::Pagination::OrHash
37
+ ).returns(T.attached_class)
38
+ end
39
+ def self.new(events: nil, pagination: nil)
40
+ end
41
+
42
+ sig do
43
+ override.returns(
44
+ { events: T::Array[T.anything], pagination: Data::Pagination }
45
+ )
46
+ end
47
+ def to_hash
48
+ end
49
+
50
+ class Pagination < Sentdm::Internal::Type::BaseModel
51
+ OrHash =
52
+ T.type_alias { T.any(Data::Pagination, Sentdm::Internal::AnyHash) }
53
+
54
+ sig { returns(T.nilable(T::Boolean)) }
55
+ attr_reader :has_more
56
+
57
+ sig { params(has_more: T::Boolean).void }
58
+ attr_writer :has_more
59
+
60
+ sig { params(has_more: T::Boolean).returns(T.attached_class) }
61
+ def self.new(has_more: nil)
62
+ end
63
+
64
+ sig { override.returns({ has_more: T::Boolean }) }
65
+ def to_hash
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Internal
5
+ class WebhooksPage
6
+ include Sentdm::Internal::Type::BasePage
7
+
8
+ Elem = type_member
9
+
10
+ sig { returns(Data) }
11
+ attr_accessor :data
12
+
13
+ # @api private
14
+ sig { returns(String) }
15
+ def inspect
16
+ end
17
+
18
+ class Data < Sentdm::Internal::Type::BaseModel
19
+ OrHash = T.type_alias { T.any(Data, Sentdm::Internal::AnyHash) }
20
+
21
+ sig { returns(T.nilable(Data::Pagination)) }
22
+ attr_reader :pagination
23
+
24
+ sig { params(pagination: Data::Pagination::OrHash).void }
25
+ attr_writer :pagination
26
+
27
+ sig { returns(T.nilable(T::Array[T.anything])) }
28
+ attr_reader :webhooks
29
+
30
+ sig { params(webhooks: T::Array[T.anything]).void }
31
+ attr_writer :webhooks
32
+
33
+ sig do
34
+ params(
35
+ pagination: Data::Pagination::OrHash,
36
+ webhooks: T::Array[T.anything]
37
+ ).returns(T.attached_class)
38
+ end
39
+ def self.new(pagination: nil, webhooks: nil)
40
+ end
41
+
42
+ sig do
43
+ override.returns(
44
+ { pagination: Data::Pagination, webhooks: T::Array[T.anything] }
45
+ )
46
+ end
47
+ def to_hash
48
+ end
49
+
50
+ class Pagination < Sentdm::Internal::Type::BaseModel
51
+ OrHash =
52
+ T.type_alias { T.any(Data::Pagination, Sentdm::Internal::AnyHash) }
53
+
54
+ sig { returns(T.nilable(T::Boolean)) }
55
+ attr_reader :has_more
56
+
57
+ sig { params(has_more: T::Boolean).void }
58
+ attr_writer :has_more
59
+
60
+ sig { params(has_more: T::Boolean).returns(T.attached_class) }
61
+ def self.new(has_more: nil)
62
+ end
63
+
64
+ sig { override.returns({ has_more: T::Boolean }) }
65
+ def to_hash
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,128 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Models
5
+ class ChannelEvent < Sentdm::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias { T.any(Sentdm::ChannelEvent, Sentdm::Internal::AnyHash) }
8
+
9
+ # The specific event within the family, for example message.delivered,
10
+ # message.received or contact.opt_out. Absent on events that have no subtype, so
11
+ # treat it as optional.
12
+ sig { returns(T.nilable(String)) }
13
+ attr_accessor :event
14
+
15
+ # The event family, for example message, templates or contact. Route on this
16
+ # first, then on event for the specific change.
17
+ sig { returns(T.nilable(String)) }
18
+ attr_reader :field
19
+
20
+ sig { params(field: String).void }
21
+ attr_writer :field
22
+
23
+ # Body of a channel event: where one of the customer's channels stands in
24
+ # provisioning and compliance. Delivered when a milestone moves — a registration
25
+ # filed, a verdict returned, a resubmission asked for, a sender gone live — so a
26
+ # customer's own onboarding UI does not have to poll GET /v3/channels.
27
+ #
28
+ # The subject is one item, never the account. A customer's "SMS channel" has no
29
+ # status; a market does. Country, NumberType and SenderValue name which one, so a
30
+ # customer terminating only to Kosovo never receives an event about US 10DLC.
31
+ #
32
+ # Status is the stable half of the contract. It is the same four-value set GET
33
+ # /v3/channels publishes, computed through the same code, so an event and a read
34
+ # of the same market cannot disagree. A subscriber that reads nothing but the
35
+ # status and the subject fields is a correct subscriber. The sub-type on the
36
+ # envelope names the specific milestone and is additive — that vocabulary comes
37
+ # from registries and carriers, which are parties Sent does not control.
38
+ #
39
+ # Status means provisioning and compliance are complete, not that a send will
40
+ # succeed right now. An account can be suspended, or a destination blocked by a
41
+ # routing rule, without either showing up here. Those are separate surfaces and
42
+ # deliberately not modelled on this payload.
43
+ sig { returns(T.nilable(Sentdm::ChannelEventPayload)) }
44
+ attr_reader :payload
45
+
46
+ sig do
47
+ params(payload: T.nilable(Sentdm::ChannelEventPayload::OrHash)).void
48
+ end
49
+ attr_writer :payload
50
+
51
+ # The event-specific body.
52
+ sig { returns(T.nilable(String)) }
53
+ attr_accessor :request_id
54
+
55
+ # When Sent emitted the event, in UTC (yyyy-MM-ddTHH:mm:ssZ). This is the emission
56
+ # time, not the time the underlying change happened. Use the timestamp inside the
57
+ # payload for the latter.
58
+ sig { returns(T.nilable(String)) }
59
+ attr_reader :timestamp
60
+
61
+ sig { params(timestamp: String).void }
62
+ attr_writer :timestamp
63
+
64
+ # The envelope Sent POSTs to a subscribed webhook endpoint. Every event shares
65
+ # this shape and varies only in Payload.
66
+ sig do
67
+ params(
68
+ event: T.nilable(String),
69
+ field: String,
70
+ payload: T.nilable(Sentdm::ChannelEventPayload::OrHash),
71
+ request_id: T.nilable(String),
72
+ timestamp: String
73
+ ).returns(T.attached_class)
74
+ end
75
+ def self.new(
76
+ # The specific event within the family, for example message.delivered,
77
+ # message.received or contact.opt_out. Absent on events that have no subtype, so
78
+ # treat it as optional.
79
+ event: nil,
80
+ # The event family, for example message, templates or contact. Route on this
81
+ # first, then on event for the specific change.
82
+ field: nil,
83
+ # Body of a channel event: where one of the customer's channels stands in
84
+ # provisioning and compliance. Delivered when a milestone moves — a registration
85
+ # filed, a verdict returned, a resubmission asked for, a sender gone live — so a
86
+ # customer's own onboarding UI does not have to poll GET /v3/channels.
87
+ #
88
+ # The subject is one item, never the account. A customer's "SMS channel" has no
89
+ # status; a market does. Country, NumberType and SenderValue name which one, so a
90
+ # customer terminating only to Kosovo never receives an event about US 10DLC.
91
+ #
92
+ # Status is the stable half of the contract. It is the same four-value set GET
93
+ # /v3/channels publishes, computed through the same code, so an event and a read
94
+ # of the same market cannot disagree. A subscriber that reads nothing but the
95
+ # status and the subject fields is a correct subscriber. The sub-type on the
96
+ # envelope names the specific milestone and is additive — that vocabulary comes
97
+ # from registries and carriers, which are parties Sent does not control.
98
+ #
99
+ # Status means provisioning and compliance are complete, not that a send will
100
+ # succeed right now. An account can be suspended, or a destination blocked by a
101
+ # routing rule, without either showing up here. Those are separate surfaces and
102
+ # deliberately not modelled on this payload.
103
+ payload: nil,
104
+ # The event-specific body.
105
+ request_id: nil,
106
+ # When Sent emitted the event, in UTC (yyyy-MM-ddTHH:mm:ssZ). This is the emission
107
+ # time, not the time the underlying change happened. Use the timestamp inside the
108
+ # payload for the latter.
109
+ timestamp: nil
110
+ )
111
+ end
112
+
113
+ sig do
114
+ override.returns(
115
+ {
116
+ event: T.nilable(String),
117
+ field: String,
118
+ payload: T.nilable(Sentdm::ChannelEventPayload),
119
+ request_id: T.nilable(String),
120
+ timestamp: String
121
+ }
122
+ )
123
+ end
124
+ def to_hash
125
+ end
126
+ end
127
+ end
128
+ end