surge_api 0.1.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 (212) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +28 -0
  4. data/README.md +286 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/surge_api/client.rb +106 -0
  7. data/lib/surge_api/errors.rb +228 -0
  8. data/lib/surge_api/file_part.rb +55 -0
  9. data/lib/surge_api/internal/transport/base_client.rb +567 -0
  10. data/lib/surge_api/internal/transport/pooled_net_requester.rb +201 -0
  11. data/lib/surge_api/internal/type/array_of.rb +168 -0
  12. data/lib/surge_api/internal/type/base_model.rb +531 -0
  13. data/lib/surge_api/internal/type/base_page.rb +55 -0
  14. data/lib/surge_api/internal/type/boolean.rb +77 -0
  15. data/lib/surge_api/internal/type/converter.rb +327 -0
  16. data/lib/surge_api/internal/type/enum.rb +131 -0
  17. data/lib/surge_api/internal/type/file_input.rb +108 -0
  18. data/lib/surge_api/internal/type/hash_of.rb +188 -0
  19. data/lib/surge_api/internal/type/request_parameters.rb +42 -0
  20. data/lib/surge_api/internal/type/union.rb +250 -0
  21. data/lib/surge_api/internal/type/unknown.rb +81 -0
  22. data/lib/surge_api/internal/util.rb +915 -0
  23. data/lib/surge_api/internal.rb +20 -0
  24. data/lib/surge_api/models/account.rb +60 -0
  25. data/lib/surge_api/models/account_create_params.rb +481 -0
  26. data/lib/surge_api/models/account_retrieve_status_params.rb +32 -0
  27. data/lib/surge_api/models/account_status.rb +104 -0
  28. data/lib/surge_api/models/account_update_params.rb +480 -0
  29. data/lib/surge_api/models/blast.rb +61 -0
  30. data/lib/surge_api/models/blast_create_params.rb +90 -0
  31. data/lib/surge_api/models/call_ended_webhook_event.rb +106 -0
  32. data/lib/surge_api/models/campaign.rb +208 -0
  33. data/lib/surge_api/models/campaign_approved_webhook_event.rb +74 -0
  34. data/lib/surge_api/models/campaign_create_params.rb +202 -0
  35. data/lib/surge_api/models/contact.rb +59 -0
  36. data/lib/surge_api/models/contact_create_params.rb +54 -0
  37. data/lib/surge_api/models/contact_retrieve_params.rb +14 -0
  38. data/lib/surge_api/models/contact_update_params.rb +54 -0
  39. data/lib/surge_api/models/conversation_created_webhook_event.rb +70 -0
  40. data/lib/surge_api/models/error.rb +34 -0
  41. data/lib/surge_api/models/message.rb +146 -0
  42. data/lib/surge_api/models/message_create_params.rb +153 -0
  43. data/lib/surge_api/models/message_delivered_webhook_event.rb +159 -0
  44. data/lib/surge_api/models/message_failed_webhook_event.rb +167 -0
  45. data/lib/surge_api/models/message_received_webhook_event.rb +159 -0
  46. data/lib/surge_api/models/message_sent_webhook_event.rb +159 -0
  47. data/lib/surge_api/models/organization.rb +419 -0
  48. data/lib/surge_api/models/phone_number.rb +48 -0
  49. data/lib/surge_api/models/phone_number_purchase_params.rb +65 -0
  50. data/lib/surge_api/models/unwrap_webhook_event.rb +26 -0
  51. data/lib/surge_api/models/user.rb +51 -0
  52. data/lib/surge_api/models/user_create_params.rb +46 -0
  53. data/lib/surge_api/models/user_create_token_params.rb +22 -0
  54. data/lib/surge_api/models/user_retrieve_params.rb +14 -0
  55. data/lib/surge_api/models/user_token_response.rb +19 -0
  56. data/lib/surge_api/models/user_update_params.rb +46 -0
  57. data/lib/surge_api/models/verification.rb +58 -0
  58. data/lib/surge_api/models/verification_check.rb +43 -0
  59. data/lib/surge_api/models/verification_check_params.rb +22 -0
  60. data/lib/surge_api/models/verification_create_params.rb +22 -0
  61. data/lib/surge_api/models/webhook_unwrap_params.rb +14 -0
  62. data/lib/surge_api/models.rb +117 -0
  63. data/lib/surge_api/request_options.rb +77 -0
  64. data/lib/surge_api/resources/accounts.rb +102 -0
  65. data/lib/surge_api/resources/blasts.rb +53 -0
  66. data/lib/surge_api/resources/campaigns.rb +57 -0
  67. data/lib/surge_api/resources/contacts.rb +99 -0
  68. data/lib/surge_api/resources/messages.rb +75 -0
  69. data/lib/surge_api/resources/phone_numbers.rb +48 -0
  70. data/lib/surge_api/resources/users.rb +119 -0
  71. data/lib/surge_api/resources/verifications.rb +60 -0
  72. data/lib/surge_api/resources/webhooks.rb +22 -0
  73. data/lib/surge_api/version.rb +5 -0
  74. data/lib/surge_api.rb +100 -0
  75. data/manifest.yaml +15 -0
  76. data/rbi/surge_api/client.rbi +73 -0
  77. data/rbi/surge_api/errors.rbi +205 -0
  78. data/rbi/surge_api/file_part.rbi +37 -0
  79. data/rbi/surge_api/internal/transport/base_client.rbi +292 -0
  80. data/rbi/surge_api/internal/transport/pooled_net_requester.rbi +79 -0
  81. data/rbi/surge_api/internal/type/array_of.rbi +104 -0
  82. data/rbi/surge_api/internal/type/base_model.rbi +302 -0
  83. data/rbi/surge_api/internal/type/base_page.rbi +42 -0
  84. data/rbi/surge_api/internal/type/boolean.rbi +58 -0
  85. data/rbi/surge_api/internal/type/converter.rbi +216 -0
  86. data/rbi/surge_api/internal/type/enum.rbi +82 -0
  87. data/rbi/surge_api/internal/type/file_input.rbi +59 -0
  88. data/rbi/surge_api/internal/type/hash_of.rbi +104 -0
  89. data/rbi/surge_api/internal/type/request_parameters.rbi +29 -0
  90. data/rbi/surge_api/internal/type/union.rbi +128 -0
  91. data/rbi/surge_api/internal/type/unknown.rbi +58 -0
  92. data/rbi/surge_api/internal/util.rbi +487 -0
  93. data/rbi/surge_api/internal.rbi +16 -0
  94. data/rbi/surge_api/models/account.rbi +83 -0
  95. data/rbi/surge_api/models/account_create_params.rbi +1104 -0
  96. data/rbi/surge_api/models/account_retrieve_status_params.rbi +96 -0
  97. data/rbi/surge_api/models/account_status.rbi +185 -0
  98. data/rbi/surge_api/models/account_update_params.rbi +1105 -0
  99. data/rbi/surge_api/models/blast.rbi +108 -0
  100. data/rbi/surge_api/models/blast_create_params.rbi +145 -0
  101. data/rbi/surge_api/models/call_ended_webhook_event.rbi +205 -0
  102. data/rbi/surge_api/models/campaign.rbi +331 -0
  103. data/rbi/surge_api/models/campaign_approved_webhook_event.rbi +149 -0
  104. data/rbi/surge_api/models/campaign_create_params.rbi +386 -0
  105. data/rbi/surge_api/models/contact.rbi +88 -0
  106. data/rbi/surge_api/models/contact_create_params.rbi +87 -0
  107. data/rbi/surge_api/models/contact_retrieve_params.rbi +27 -0
  108. data/rbi/surge_api/models/contact_update_params.rbi +87 -0
  109. data/rbi/surge_api/models/conversation_created_webhook_event.rbi +129 -0
  110. data/rbi/surge_api/models/error.rbi +51 -0
  111. data/rbi/surge_api/models/message.rbi +283 -0
  112. data/rbi/surge_api/models/message_create_params.rbi +281 -0
  113. data/rbi/surge_api/models/message_delivered_webhook_event.rbi +331 -0
  114. data/rbi/surge_api/models/message_failed_webhook_event.rbi +335 -0
  115. data/rbi/surge_api/models/message_received_webhook_event.rbi +331 -0
  116. data/rbi/surge_api/models/message_sent_webhook_event.rbi +322 -0
  117. data/rbi/surge_api/models/organization.rbi +649 -0
  118. data/rbi/surge_api/models/phone_number.rbi +72 -0
  119. data/rbi/surge_api/models/phone_number_purchase_params.rbi +122 -0
  120. data/rbi/surge_api/models/unwrap_webhook_event.rbi +26 -0
  121. data/rbi/surge_api/models/user.rbi +80 -0
  122. data/rbi/surge_api/models/user_create_params.rbi +76 -0
  123. data/rbi/surge_api/models/user_create_token_params.rbi +46 -0
  124. data/rbi/surge_api/models/user_retrieve_params.rbi +27 -0
  125. data/rbi/surge_api/models/user_token_response.rbi +31 -0
  126. data/rbi/surge_api/models/user_update_params.rbi +76 -0
  127. data/rbi/surge_api/models/verification.rbi +86 -0
  128. data/rbi/surge_api/models/verification_check.rbi +84 -0
  129. data/rbi/surge_api/models/verification_check_params.rbi +40 -0
  130. data/rbi/surge_api/models/verification_create_params.rbi +40 -0
  131. data/rbi/surge_api/models/webhook_unwrap_params.rbi +27 -0
  132. data/rbi/surge_api/models.rbi +80 -0
  133. data/rbi/surge_api/request_options.rbi +59 -0
  134. data/rbi/surge_api/resources/accounts.rbi +94 -0
  135. data/rbi/surge_api/resources/blasts.rbi +48 -0
  136. data/rbi/surge_api/resources/campaigns.rbi +115 -0
  137. data/rbi/surge_api/resources/contacts.rbi +85 -0
  138. data/rbi/surge_api/resources/messages.rbi +72 -0
  139. data/rbi/surge_api/resources/phone_numbers.rbi +43 -0
  140. data/rbi/surge_api/resources/users.rbi +96 -0
  141. data/rbi/surge_api/resources/verifications.rbi +43 -0
  142. data/rbi/surge_api/resources/webhooks.rbi +31 -0
  143. data/rbi/surge_api/version.rbi +5 -0
  144. data/sig/surge_api/client.rbs +42 -0
  145. data/sig/surge_api/errors.rbs +117 -0
  146. data/sig/surge_api/file_part.rbs +21 -0
  147. data/sig/surge_api/internal/transport/base_client.rbs +131 -0
  148. data/sig/surge_api/internal/transport/pooled_net_requester.rbs +45 -0
  149. data/sig/surge_api/internal/type/array_of.rbs +48 -0
  150. data/sig/surge_api/internal/type/base_model.rbs +102 -0
  151. data/sig/surge_api/internal/type/base_page.rbs +24 -0
  152. data/sig/surge_api/internal/type/boolean.rbs +26 -0
  153. data/sig/surge_api/internal/type/converter.rbs +79 -0
  154. data/sig/surge_api/internal/type/enum.rbs +32 -0
  155. data/sig/surge_api/internal/type/file_input.rbs +25 -0
  156. data/sig/surge_api/internal/type/hash_of.rbs +48 -0
  157. data/sig/surge_api/internal/type/request_parameters.rbs +17 -0
  158. data/sig/surge_api/internal/type/union.rbs +52 -0
  159. data/sig/surge_api/internal/type/unknown.rbs +26 -0
  160. data/sig/surge_api/internal/util.rbs +185 -0
  161. data/sig/surge_api/internal.rbs +9 -0
  162. data/sig/surge_api/models/account.rbs +40 -0
  163. data/sig/surge_api/models/account_create_params.rbs +433 -0
  164. data/sig/surge_api/models/account_retrieve_status_params.rbs +40 -0
  165. data/sig/surge_api/models/account_status.rbs +71 -0
  166. data/sig/surge_api/models/account_update_params.rbs +435 -0
  167. data/sig/surge_api/models/blast.rbs +64 -0
  168. data/sig/surge_api/models/blast_create_params.rbs +82 -0
  169. data/sig/surge_api/models/call_ended_webhook_event.rbs +99 -0
  170. data/sig/surge_api/models/campaign.rbs +122 -0
  171. data/sig/surge_api/models/campaign_approved_webhook_event.rbs +67 -0
  172. data/sig/surge_api/models/campaign_create_params.rbs +127 -0
  173. data/sig/surge_api/models/contact.rbs +53 -0
  174. data/sig/surge_api/models/contact_create_params.rbs +54 -0
  175. data/sig/surge_api/models/contact_retrieve_params.rbs +15 -0
  176. data/sig/surge_api/models/contact_update_params.rbs +54 -0
  177. data/sig/surge_api/models/conversation_created_webhook_event.rbs +62 -0
  178. data/sig/surge_api/models/error.rbs +27 -0
  179. data/sig/surge_api/models/message.rbs +138 -0
  180. data/sig/surge_api/models/message_create_params.rbs +140 -0
  181. data/sig/surge_api/models/message_delivered_webhook_event.rbs +143 -0
  182. data/sig/surge_api/models/message_failed_webhook_event.rbs +148 -0
  183. data/sig/surge_api/models/message_received_webhook_event.rbs +143 -0
  184. data/sig/surge_api/models/message_sent_webhook_event.rbs +143 -0
  185. data/sig/surge_api/models/organization.rbs +385 -0
  186. data/sig/surge_api/models/phone_number.rbs +37 -0
  187. data/sig/surge_api/models/phone_number_purchase_params.rbs +62 -0
  188. data/sig/surge_api/models/unwrap_webhook_event.rbs +18 -0
  189. data/sig/surge_api/models/user.rbs +48 -0
  190. data/sig/surge_api/models/user_create_params.rbs +47 -0
  191. data/sig/surge_api/models/user_create_token_params.rbs +26 -0
  192. data/sig/surge_api/models/user_retrieve_params.rbs +15 -0
  193. data/sig/surge_api/models/user_token_response.rbs +15 -0
  194. data/sig/surge_api/models/user_update_params.rbs +47 -0
  195. data/sig/surge_api/models/verification.rbs +48 -0
  196. data/sig/surge_api/models/verification_check.rbs +45 -0
  197. data/sig/surge_api/models/verification_check_params.rbs +23 -0
  198. data/sig/surge_api/models/verification_create_params.rbs +23 -0
  199. data/sig/surge_api/models/webhook_unwrap_params.rbs +15 -0
  200. data/sig/surge_api/models.rbs +77 -0
  201. data/sig/surge_api/request_options.rbs +34 -0
  202. data/sig/surge_api/resources/accounts.rbs +30 -0
  203. data/sig/surge_api/resources/blasts.rbs +19 -0
  204. data/sig/surge_api/resources/campaigns.rbs +21 -0
  205. data/sig/surge_api/resources/contacts.rbs +32 -0
  206. data/sig/surge_api/resources/messages.rbs +18 -0
  207. data/sig/surge_api/resources/phone_numbers.rbs +16 -0
  208. data/sig/surge_api/resources/users.rbs +36 -0
  209. data/sig/surge_api/resources/verifications.rbs +18 -0
  210. data/sig/surge_api/resources/webhooks.rbs +17 -0
  211. data/sig/surge_api/version.rbs +3 -0
  212. metadata +269 -0
@@ -0,0 +1,129 @@
1
+ # typed: strong
2
+
3
+ module SurgeAPI
4
+ module Models
5
+ class ConversationCreatedWebhookEvent < SurgeAPI::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ SurgeAPI::ConversationCreatedWebhookEvent,
10
+ SurgeAPI::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ # The ID of the account in which this event occurred
15
+ sig { returns(String) }
16
+ attr_accessor :account_id
17
+
18
+ # The data associated with the event
19
+ sig { returns(SurgeAPI::ConversationCreatedWebhookEvent::Data) }
20
+ attr_reader :data
21
+
22
+ sig do
23
+ params(
24
+ data: SurgeAPI::ConversationCreatedWebhookEvent::Data::OrHash
25
+ ).void
26
+ end
27
+ attr_writer :data
28
+
29
+ # The timestamp when this event occurred, in ISO8601 format
30
+ sig { returns(Time) }
31
+ attr_accessor :timestamp
32
+
33
+ # The type of the event. Always `conversation.created` for this event.
34
+ sig { returns(Symbol) }
35
+ attr_accessor :type
36
+
37
+ sig do
38
+ params(
39
+ account_id: String,
40
+ data: SurgeAPI::ConversationCreatedWebhookEvent::Data::OrHash,
41
+ timestamp: Time,
42
+ type: Symbol
43
+ ).returns(T.attached_class)
44
+ end
45
+ def self.new(
46
+ # The ID of the account in which this event occurred
47
+ account_id:,
48
+ # The data associated with the event
49
+ data:,
50
+ # The timestamp when this event occurred, in ISO8601 format
51
+ timestamp:,
52
+ # The type of the event. Always `conversation.created` for this event.
53
+ type: :"conversation.created"
54
+ )
55
+ end
56
+
57
+ sig do
58
+ override.returns(
59
+ {
60
+ account_id: String,
61
+ data: SurgeAPI::ConversationCreatedWebhookEvent::Data,
62
+ timestamp: Time,
63
+ type: Symbol
64
+ }
65
+ )
66
+ end
67
+ def to_hash
68
+ end
69
+
70
+ class Data < SurgeAPI::Internal::Type::BaseModel
71
+ OrHash =
72
+ T.type_alias do
73
+ T.any(
74
+ SurgeAPI::ConversationCreatedWebhookEvent::Data,
75
+ SurgeAPI::Internal::AnyHash
76
+ )
77
+ end
78
+
79
+ # The unique identifier for the conversation
80
+ sig { returns(String) }
81
+ attr_accessor :id
82
+
83
+ # A contact who has consented to receive messages
84
+ sig { returns(SurgeAPI::Contact) }
85
+ attr_reader :contact
86
+
87
+ sig { params(contact: SurgeAPI::Contact::OrHash).void }
88
+ attr_writer :contact
89
+
90
+ # A phone number that can be used to send and receive messages and calls
91
+ sig { returns(SurgeAPI::PhoneNumber) }
92
+ attr_reader :phone_number
93
+
94
+ sig { params(phone_number: SurgeAPI::PhoneNumber::OrHash).void }
95
+ attr_writer :phone_number
96
+
97
+ # The data associated with the event
98
+ sig do
99
+ params(
100
+ id: String,
101
+ contact: SurgeAPI::Contact::OrHash,
102
+ phone_number: SurgeAPI::PhoneNumber::OrHash
103
+ ).returns(T.attached_class)
104
+ end
105
+ def self.new(
106
+ # The unique identifier for the conversation
107
+ id:,
108
+ # A contact who has consented to receive messages
109
+ contact:,
110
+ # A phone number that can be used to send and receive messages and calls
111
+ phone_number:
112
+ )
113
+ end
114
+
115
+ sig do
116
+ override.returns(
117
+ {
118
+ id: String,
119
+ contact: SurgeAPI::Contact,
120
+ phone_number: SurgeAPI::PhoneNumber
121
+ }
122
+ )
123
+ end
124
+ def to_hash
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,51 @@
1
+ # typed: strong
2
+
3
+ module SurgeAPI
4
+ module Models
5
+ class Error < SurgeAPI::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias { T.any(SurgeAPI::Error, SurgeAPI::Internal::AnyHash) }
8
+
9
+ # A human-readable error message.
10
+ sig { returns(String) }
11
+ attr_accessor :message
12
+
13
+ # A unique error code.
14
+ sig { returns(String) }
15
+ attr_accessor :type
16
+
17
+ # Additional details about the error.
18
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
19
+ attr_reader :detail
20
+
21
+ sig { params(detail: T::Hash[Symbol, T.anything]).void }
22
+ attr_writer :detail
23
+
24
+ # An error response
25
+ sig do
26
+ params(
27
+ message: String,
28
+ type: String,
29
+ detail: T::Hash[Symbol, T.anything]
30
+ ).returns(T.attached_class)
31
+ end
32
+ def self.new(
33
+ # A human-readable error message.
34
+ message:,
35
+ # A unique error code.
36
+ type:,
37
+ # Additional details about the error.
38
+ detail: nil
39
+ )
40
+ end
41
+
42
+ sig do
43
+ override.returns(
44
+ { message: String, type: String, detail: T::Hash[Symbol, T.anything] }
45
+ )
46
+ end
47
+ def to_hash
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,283 @@
1
+ # typed: strong
2
+
3
+ module SurgeAPI
4
+ module Models
5
+ class Message < SurgeAPI::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias { T.any(SurgeAPI::Message, SurgeAPI::Internal::AnyHash) }
8
+
9
+ # Unique identifier for the object.
10
+ sig { returns(T.nilable(String)) }
11
+ attr_reader :id
12
+
13
+ sig { params(id: String).void }
14
+ attr_writer :id
15
+
16
+ sig { returns(T.nilable(T::Array[SurgeAPI::Message::Attachment])) }
17
+ attr_reader :attachments
18
+
19
+ sig do
20
+ params(
21
+ attachments: T::Array[SurgeAPI::Message::Attachment::OrHash]
22
+ ).void
23
+ end
24
+ attr_writer :attachments
25
+
26
+ # The message body.
27
+ sig { returns(T.nilable(String)) }
28
+ attr_reader :body
29
+
30
+ sig { params(body: String).void }
31
+ attr_writer :body
32
+
33
+ # A conversation with a Contact
34
+ sig { returns(T.nilable(SurgeAPI::Message::Conversation)) }
35
+ attr_reader :conversation
36
+
37
+ sig { params(conversation: SurgeAPI::Message::Conversation::OrHash).void }
38
+ attr_writer :conversation
39
+
40
+ # A Message is a communication sent to a Contact.
41
+ sig do
42
+ params(
43
+ id: String,
44
+ attachments: T::Array[SurgeAPI::Message::Attachment::OrHash],
45
+ body: String,
46
+ conversation: SurgeAPI::Message::Conversation::OrHash
47
+ ).returns(T.attached_class)
48
+ end
49
+ def self.new(
50
+ # Unique identifier for the object.
51
+ id: nil,
52
+ attachments: nil,
53
+ # The message body.
54
+ body: nil,
55
+ # A conversation with a Contact
56
+ conversation: nil
57
+ )
58
+ end
59
+
60
+ sig do
61
+ override.returns(
62
+ {
63
+ id: String,
64
+ attachments: T::Array[SurgeAPI::Message::Attachment],
65
+ body: String,
66
+ conversation: SurgeAPI::Message::Conversation
67
+ }
68
+ )
69
+ end
70
+ def to_hash
71
+ end
72
+
73
+ class Attachment < SurgeAPI::Internal::Type::BaseModel
74
+ OrHash =
75
+ T.type_alias do
76
+ T.any(SurgeAPI::Message::Attachment, SurgeAPI::Internal::AnyHash)
77
+ end
78
+
79
+ # Unique identifier for the object.
80
+ sig { returns(T.nilable(String)) }
81
+ attr_reader :id
82
+
83
+ sig { params(id: String).void }
84
+ attr_writer :id
85
+
86
+ # The type of attachment.
87
+ sig { returns(T.nilable(String)) }
88
+ attr_reader :type
89
+
90
+ sig { params(type: String).void }
91
+ attr_writer :type
92
+
93
+ # The URL of the attachment.
94
+ sig { returns(T.nilable(String)) }
95
+ attr_reader :url
96
+
97
+ sig { params(url: String).void }
98
+ attr_writer :url
99
+
100
+ # An Attachment is a file that can be sent with a message.
101
+ sig do
102
+ params(id: String, type: String, url: String).returns(
103
+ T.attached_class
104
+ )
105
+ end
106
+ def self.new(
107
+ # Unique identifier for the object.
108
+ id: nil,
109
+ # The type of attachment.
110
+ type: nil,
111
+ # The URL of the attachment.
112
+ url: nil
113
+ )
114
+ end
115
+
116
+ sig { override.returns({ id: String, type: String, url: String }) }
117
+ def to_hash
118
+ end
119
+ end
120
+
121
+ class Conversation < SurgeAPI::Internal::Type::BaseModel
122
+ OrHash =
123
+ T.type_alias do
124
+ T.any(SurgeAPI::Message::Conversation, SurgeAPI::Internal::AnyHash)
125
+ end
126
+
127
+ # Unique identifier for the object.
128
+ sig { returns(String) }
129
+ attr_accessor :id
130
+
131
+ # A contact who has consented to receive messages
132
+ sig { returns(SurgeAPI::Contact) }
133
+ attr_reader :contact
134
+
135
+ sig { params(contact: SurgeAPI::Contact::OrHash).void }
136
+ attr_writer :contact
137
+
138
+ # This is the phone number tied to the Surge account.
139
+ sig { returns(T.nilable(SurgeAPI::Message::Conversation::PhoneNumber)) }
140
+ attr_reader :phone_number
141
+
142
+ sig do
143
+ params(
144
+ phone_number: SurgeAPI::Message::Conversation::PhoneNumber::OrHash
145
+ ).void
146
+ end
147
+ attr_writer :phone_number
148
+
149
+ # A conversation with a Contact
150
+ sig do
151
+ params(
152
+ id: String,
153
+ contact: SurgeAPI::Contact::OrHash,
154
+ phone_number: SurgeAPI::Message::Conversation::PhoneNumber::OrHash
155
+ ).returns(T.attached_class)
156
+ end
157
+ def self.new(
158
+ # Unique identifier for the object.
159
+ id:,
160
+ # A contact who has consented to receive messages
161
+ contact:,
162
+ # This is the phone number tied to the Surge account.
163
+ phone_number: nil
164
+ )
165
+ end
166
+
167
+ sig do
168
+ override.returns(
169
+ {
170
+ id: String,
171
+ contact: SurgeAPI::Contact,
172
+ phone_number: SurgeAPI::Message::Conversation::PhoneNumber
173
+ }
174
+ )
175
+ end
176
+ def to_hash
177
+ end
178
+
179
+ class PhoneNumber < SurgeAPI::Internal::Type::BaseModel
180
+ OrHash =
181
+ T.type_alias do
182
+ T.any(
183
+ SurgeAPI::Message::Conversation::PhoneNumber,
184
+ SurgeAPI::Internal::AnyHash
185
+ )
186
+ end
187
+
188
+ # Unique identifier for the phone number
189
+ sig { returns(String) }
190
+ attr_accessor :id
191
+
192
+ # The canonical format of the phone number.
193
+ sig { returns(String) }
194
+ attr_accessor :number
195
+
196
+ # Whether the phone number is local, toll-free, or short code
197
+ sig do
198
+ returns(
199
+ SurgeAPI::Message::Conversation::PhoneNumber::Type::TaggedSymbol
200
+ )
201
+ end
202
+ attr_accessor :type
203
+
204
+ # This is the phone number tied to the Surge account.
205
+ sig do
206
+ params(
207
+ id: String,
208
+ number: String,
209
+ type: SurgeAPI::Message::Conversation::PhoneNumber::Type::OrSymbol
210
+ ).returns(T.attached_class)
211
+ end
212
+ def self.new(
213
+ # Unique identifier for the phone number
214
+ id:,
215
+ # The canonical format of the phone number.
216
+ number:,
217
+ # Whether the phone number is local, toll-free, or short code
218
+ type:
219
+ )
220
+ end
221
+
222
+ sig do
223
+ override.returns(
224
+ {
225
+ id: String,
226
+ number: String,
227
+ type:
228
+ SurgeAPI::Message::Conversation::PhoneNumber::Type::TaggedSymbol
229
+ }
230
+ )
231
+ end
232
+ def to_hash
233
+ end
234
+
235
+ # Whether the phone number is local, toll-free, or short code
236
+ module Type
237
+ extend SurgeAPI::Internal::Type::Enum
238
+
239
+ TaggedSymbol =
240
+ T.type_alias do
241
+ T.all(
242
+ Symbol,
243
+ SurgeAPI::Message::Conversation::PhoneNumber::Type
244
+ )
245
+ end
246
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
247
+
248
+ LOCAL =
249
+ T.let(
250
+ :local,
251
+ SurgeAPI::Message::Conversation::PhoneNumber::Type::TaggedSymbol
252
+ )
253
+ TOLL_FREE =
254
+ T.let(
255
+ :toll_free,
256
+ SurgeAPI::Message::Conversation::PhoneNumber::Type::TaggedSymbol
257
+ )
258
+ SHORT_CODE =
259
+ T.let(
260
+ :short_code,
261
+ SurgeAPI::Message::Conversation::PhoneNumber::Type::TaggedSymbol
262
+ )
263
+ DEMO =
264
+ T.let(
265
+ :demo,
266
+ SurgeAPI::Message::Conversation::PhoneNumber::Type::TaggedSymbol
267
+ )
268
+
269
+ sig do
270
+ override.returns(
271
+ T::Array[
272
+ SurgeAPI::Message::Conversation::PhoneNumber::Type::TaggedSymbol
273
+ ]
274
+ )
275
+ end
276
+ def self.values
277
+ end
278
+ end
279
+ end
280
+ end
281
+ end
282
+ end
283
+ end