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,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SurgeAPI
4
+ module Resources
5
+ class Contacts
6
+ # Creates a new Contact object.
7
+ #
8
+ # @overload create(account_id, phone_number:, email: nil, first_name: nil, last_name: nil, metadata: nil, request_options: {})
9
+ #
10
+ # @param account_id [String] The account for which the contact should be created.
11
+ #
12
+ # @param phone_number [String] The contact's phone number in E.164 format.
13
+ #
14
+ # @param email [String] The contact's email address.
15
+ #
16
+ # @param first_name [String] The contact's first name.
17
+ #
18
+ # @param last_name [String] The contact's last name.
19
+ #
20
+ # @param metadata [Hash{Symbol=>String}] Set of key-value pairs that will be stored with the object.
21
+ #
22
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
23
+ #
24
+ # @return [SurgeAPI::Models::Contact]
25
+ #
26
+ # @see SurgeAPI::Models::ContactCreateParams
27
+ def create(account_id, params)
28
+ parsed, options = SurgeAPI::ContactCreateParams.dump_request(params)
29
+ @client.request(
30
+ method: :post,
31
+ path: ["accounts/%1$s/contacts", account_id],
32
+ body: parsed,
33
+ model: SurgeAPI::Contact,
34
+ options: options
35
+ )
36
+ end
37
+
38
+ # Retrieves a Contact object.
39
+ #
40
+ # @overload retrieve(id, request_options: {})
41
+ #
42
+ # @param id [String] The ID of the contact to retrieve.
43
+ #
44
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
45
+ #
46
+ # @return [SurgeAPI::Models::Contact]
47
+ #
48
+ # @see SurgeAPI::Models::ContactRetrieveParams
49
+ def retrieve(id, params = {})
50
+ @client.request(
51
+ method: :get,
52
+ path: ["contacts/%1$s", id],
53
+ model: SurgeAPI::Contact,
54
+ options: params[:request_options]
55
+ )
56
+ end
57
+
58
+ # Updates the specified contact by setting the values of the parameters passed.
59
+ # Any parameters not provided will be left unchanged.
60
+ #
61
+ # @overload update(id, phone_number:, email: nil, first_name: nil, last_name: nil, metadata: nil, request_options: {})
62
+ #
63
+ # @param id [String] The ID of the contact to update.
64
+ #
65
+ # @param phone_number [String] The contact's phone number in E.164 format.
66
+ #
67
+ # @param email [String] The contact's email address.
68
+ #
69
+ # @param first_name [String] The contact's first name.
70
+ #
71
+ # @param last_name [String] The contact's last name.
72
+ #
73
+ # @param metadata [Hash{Symbol=>String}] Set of key-value pairs that will be stored with the object.
74
+ #
75
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
76
+ #
77
+ # @return [SurgeAPI::Models::Contact]
78
+ #
79
+ # @see SurgeAPI::Models::ContactUpdateParams
80
+ def update(id, params)
81
+ parsed, options = SurgeAPI::ContactUpdateParams.dump_request(params)
82
+ @client.request(
83
+ method: :patch,
84
+ path: ["contacts/%1$s", id],
85
+ body: parsed,
86
+ model: SurgeAPI::Contact,
87
+ options: options
88
+ )
89
+ end
90
+
91
+ # @api private
92
+ #
93
+ # @param client [SurgeAPI::Client]
94
+ def initialize(client:)
95
+ @client = client
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SurgeAPI
4
+ module Resources
5
+ class Messages
6
+ # Some parameter documentations has been truncated, see
7
+ # {SurgeAPI::Models::MessageCreateParams} for more details.
8
+ #
9
+ # Creates and enqueues a new message to be sent.
10
+ #
11
+ # Messages are always sent asynchronously. When you hit this endpoint, the message
12
+ # will be created within Surge's system and enqueued for sending, and then the id
13
+ # for the new message will be returned. When the message is actually sent, a
14
+ # `message.sent` webhook event will be triggered and sent to any webhook endpoints
15
+ # that you have subscribed to this event type. Then a `message.delivered` webhook
16
+ # event will be triggered when the carrier sends us a delivery receipt.
17
+ #
18
+ # By default all messages will be sent immediately. If you would like to schedule
19
+ # sending for some time up to 60 days in the future, you can do that by providing
20
+ # a value for the `send_at` field. This should be formatted as an ISO8601 datetime
21
+ # like `2028-10-14T18:06:00Z`.
22
+ #
23
+ # You must include either a `body` or `attachments` field (or both) in the request
24
+ # body. The `body` field should contain the text of the message you want to send,
25
+ # and the `attachments` field should be an array of objects with a `url` field
26
+ # pointing to the file you want to attach. Surge will download these files and
27
+ # send them as attachments in the message.
28
+ #
29
+ # You can provide either a `conversation` object or a `to` field to specify the
30
+ # intended recipient of the message, but an error will be returned if both fields
31
+ # are provided. Similarly the `from` field cannot be used together with the
32
+ # `conversation` field, and `conversation.phone_number` should be specified
33
+ # instead.
34
+ #
35
+ # @overload create(account_id, conversation:, to:, attachments: nil, body: nil, send_at: nil, from: nil, request_options: {})
36
+ #
37
+ # @param account_id [String] The account from which the message should be sent.
38
+ #
39
+ # @param conversation [SurgeAPI::Models::MessageCreateParams::Conversation] Params for selecting or creating a new conversation. Either the id or the Contac
40
+ #
41
+ # @param to [String] The recipient's phone number in E.164 format. Cannot be used together with 'conv
42
+ #
43
+ # @param attachments [Array<SurgeAPI::Models::MessageCreateParams::Attachment>]
44
+ #
45
+ # @param body [String] The message body.
46
+ #
47
+ # @param send_at [Time] An optional datetime for scheduling message up to a couple of months in the futu
48
+ #
49
+ # @param from [String] The sender's phone number in E.164 format or phone number ID. If omitted, uses t
50
+ #
51
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
52
+ #
53
+ # @return [SurgeAPI::Models::Message]
54
+ #
55
+ # @see SurgeAPI::Models::MessageCreateParams
56
+ def create(account_id, params)
57
+ parsed, options = SurgeAPI::MessageCreateParams.dump_request(params)
58
+ @client.request(
59
+ method: :post,
60
+ path: ["accounts/%1$s/messages", account_id],
61
+ body: parsed,
62
+ model: SurgeAPI::Message,
63
+ options: options
64
+ )
65
+ end
66
+
67
+ # @api private
68
+ #
69
+ # @param client [SurgeAPI::Client]
70
+ def initialize(client:)
71
+ @client = client
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SurgeAPI
4
+ module Resources
5
+ class PhoneNumbers
6
+ # Some parameter documentations has been truncated, see
7
+ # {SurgeAPI::Models::PhoneNumberPurchaseParams} for more details.
8
+ #
9
+ # Purchase a new phone number for the account. You can specify search criteria or
10
+ # let the system select a random number.
11
+ #
12
+ # @overload purchase(account_id, area_code: nil, latitude: nil, longitude: nil, type: nil, request_options: {})
13
+ #
14
+ # @param account_id [String] The account for which the phone number should be created.
15
+ #
16
+ # @param area_code [String] The desired area code for this phone number. If provided without type, the type
17
+ #
18
+ # @param latitude [Float] Latitude to search for nearby phone numbers. Must be used with longitude. If pro
19
+ #
20
+ # @param longitude [Float] Longitude to search for nearby phone numbers. Must be used with latitude. If pro
21
+ #
22
+ # @param type [Symbol, SurgeAPI::Models::PhoneNumberPurchaseParams::Type] Whether the phone number is local or toll-free. Can be omitted if area_code or l
23
+ #
24
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
25
+ #
26
+ # @return [SurgeAPI::Models::PhoneNumber]
27
+ #
28
+ # @see SurgeAPI::Models::PhoneNumberPurchaseParams
29
+ def purchase(account_id, params = {})
30
+ parsed, options = SurgeAPI::PhoneNumberPurchaseParams.dump_request(params)
31
+ @client.request(
32
+ method: :post,
33
+ path: ["accounts/%1$s/phone_numbers", account_id],
34
+ body: parsed,
35
+ model: SurgeAPI::PhoneNumber,
36
+ options: options
37
+ )
38
+ end
39
+
40
+ # @api private
41
+ #
42
+ # @param client [SurgeAPI::Client]
43
+ def initialize(client:)
44
+ @client = client
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SurgeAPI
4
+ module Resources
5
+ class Users
6
+ # Creates a new User object.
7
+ #
8
+ # @overload create(account_id, first_name:, last_name: nil, metadata: nil, photo_url: nil, request_options: {})
9
+ #
10
+ # @param account_id [String] The account for which the user should be created.
11
+ #
12
+ # @param first_name [String] The user's first name.
13
+ #
14
+ # @param last_name [String] The user's last name.
15
+ #
16
+ # @param metadata [Hash{Symbol=>String}] Set of key-value pairs that will be stored with the object.
17
+ #
18
+ # @param photo_url [String] URL of a photo to be used as the user's avatar.
19
+ #
20
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
21
+ #
22
+ # @return [SurgeAPI::Models::User]
23
+ #
24
+ # @see SurgeAPI::Models::UserCreateParams
25
+ def create(account_id, params)
26
+ parsed, options = SurgeAPI::UserCreateParams.dump_request(params)
27
+ @client.request(
28
+ method: :post,
29
+ path: ["accounts/%1$s/users", account_id],
30
+ body: parsed,
31
+ model: SurgeAPI::User,
32
+ options: options
33
+ )
34
+ end
35
+
36
+ # Retrieves a User object.
37
+ #
38
+ # @overload retrieve(id, request_options: {})
39
+ #
40
+ # @param id [String] The ID of the user to retrieve.
41
+ #
42
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
43
+ #
44
+ # @return [SurgeAPI::Models::User]
45
+ #
46
+ # @see SurgeAPI::Models::UserRetrieveParams
47
+ def retrieve(id, params = {})
48
+ @client.request(
49
+ method: :get,
50
+ path: ["users/%1$s", id],
51
+ model: SurgeAPI::User,
52
+ options: params[:request_options]
53
+ )
54
+ end
55
+
56
+ # Updates an existing User object.
57
+ #
58
+ # @overload update(id, first_name:, last_name: nil, metadata: nil, photo_url: nil, request_options: {})
59
+ #
60
+ # @param id [String] The ID of the user to update.
61
+ #
62
+ # @param first_name [String] The user's first name.
63
+ #
64
+ # @param last_name [String] The user's last name.
65
+ #
66
+ # @param metadata [Hash{Symbol=>String}] Set of key-value pairs that will be stored with the object.
67
+ #
68
+ # @param photo_url [String] URL of a photo to be used as the user's avatar.
69
+ #
70
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
71
+ #
72
+ # @return [SurgeAPI::Models::User]
73
+ #
74
+ # @see SurgeAPI::Models::UserUpdateParams
75
+ def update(id, params)
76
+ parsed, options = SurgeAPI::UserUpdateParams.dump_request(params)
77
+ @client.request(
78
+ method: :patch,
79
+ path: ["users/%1$s", id],
80
+ body: parsed,
81
+ model: SurgeAPI::User,
82
+ options: options
83
+ )
84
+ end
85
+
86
+ # Provides a mechanism for having Surge create a signed token for embeds instead
87
+ # of signing with your own signing key.
88
+ #
89
+ # @overload create_token(user_id, duration_seconds: nil, request_options: {})
90
+ #
91
+ # @param user_id [String] The user for which the token represents authentication.
92
+ #
93
+ # @param duration_seconds [Integer] For how many seconds the token should be accepted. Defaults to 15 minutes.
94
+ #
95
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
96
+ #
97
+ # @return [SurgeAPI::Models::UserTokenResponse]
98
+ #
99
+ # @see SurgeAPI::Models::UserCreateTokenParams
100
+ def create_token(user_id, params = {})
101
+ parsed, options = SurgeAPI::UserCreateTokenParams.dump_request(params)
102
+ @client.request(
103
+ method: :post,
104
+ path: ["users/%1$s/tokens", user_id],
105
+ body: parsed,
106
+ model: SurgeAPI::UserTokenResponse,
107
+ options: options
108
+ )
109
+ end
110
+
111
+ # @api private
112
+ #
113
+ # @param client [SurgeAPI::Client]
114
+ def initialize(client:)
115
+ @client = client
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SurgeAPI
4
+ module Resources
5
+ class Verifications
6
+ # Creates a new Verification and sends the code to the given phone number.
7
+ #
8
+ # @overload create(phone_number:, request_options: {})
9
+ #
10
+ # @param phone_number [String] The phone number to be verified. In E.164 format.
11
+ #
12
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
13
+ #
14
+ # @return [SurgeAPI::Models::Verification]
15
+ #
16
+ # @see SurgeAPI::Models::VerificationCreateParams
17
+ def create(params)
18
+ parsed, options = SurgeAPI::VerificationCreateParams.dump_request(params)
19
+ @client.request(
20
+ method: :post,
21
+ path: "verifications",
22
+ body: parsed,
23
+ model: SurgeAPI::Verification,
24
+ options: options
25
+ )
26
+ end
27
+
28
+ # Checks the code against a verification.
29
+ #
30
+ # @overload check(id, code:, request_options: {})
31
+ #
32
+ # @param id [String] The ID of the verification to check against.
33
+ #
34
+ # @param code [String] The Verification code that was received.
35
+ #
36
+ # @param request_options [SurgeAPI::RequestOptions, Hash{Symbol=>Object}, nil]
37
+ #
38
+ # @return [SurgeAPI::Models::VerificationCheck]
39
+ #
40
+ # @see SurgeAPI::Models::VerificationCheckParams
41
+ def check(id, params)
42
+ parsed, options = SurgeAPI::VerificationCheckParams.dump_request(params)
43
+ @client.request(
44
+ method: :post,
45
+ path: ["verifications/%1$s/checks", id],
46
+ body: parsed,
47
+ model: SurgeAPI::VerificationCheck,
48
+ options: options
49
+ )
50
+ end
51
+
52
+ # @api private
53
+ #
54
+ # @param client [SurgeAPI::Client]
55
+ def initialize(client:)
56
+ @client = client
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SurgeAPI
4
+ module Resources
5
+ class Webhooks
6
+ # @param payload [String] The raw webhook payload as a string
7
+ #
8
+ # @return [SurgeAPI::Models::CallEndedWebhookEvent, SurgeAPI::Models::CampaignApprovedWebhookEvent, SurgeAPI::Models::ConversationCreatedWebhookEvent, SurgeAPI::Models::MessageDeliveredWebhookEvent, SurgeAPI::Models::MessageFailedWebhookEvent, SurgeAPI::Models::MessageReceivedWebhookEvent, SurgeAPI::Models::MessageSentWebhookEvent]
9
+ def unwrap(payload)
10
+ parsed = JSON.parse(payload, symbolize_names: true)
11
+ SurgeAPI::Internal::Type::Converter.coerce(SurgeAPI::Models::UnwrapWebhookEvent, parsed)
12
+ end
13
+
14
+ # @api private
15
+ #
16
+ # @param client [SurgeAPI::Client]
17
+ def initialize(client:)
18
+ @client = client
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SurgeAPI
4
+ VERSION = "0.1.0"
5
+ end
data/lib/surge_api.rb ADDED
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Standard libraries.
4
+ # rubocop:disable Lint/RedundantRequireStatement
5
+ require "English"
6
+ require "cgi"
7
+ require "date"
8
+ require "erb"
9
+ require "etc"
10
+ require "json"
11
+ require "net/http"
12
+ require "pathname"
13
+ require "rbconfig"
14
+ require "securerandom"
15
+ require "set"
16
+ require "stringio"
17
+ require "time"
18
+ require "uri"
19
+ # rubocop:enable Lint/RedundantRequireStatement
20
+
21
+ # We already ship the preferred sorbet manifests in the package itself.
22
+ # `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
23
+ if Object.const_defined?(:Tapioca) &&
24
+ caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
25
+ ARGV.none?(/dsl/)
26
+ return
27
+ end
28
+
29
+ # Gems.
30
+ require "connection_pool"
31
+
32
+ # Package files.
33
+ require_relative "surge_api/version"
34
+ require_relative "surge_api/internal/util"
35
+ require_relative "surge_api/internal/type/converter"
36
+ require_relative "surge_api/internal/type/unknown"
37
+ require_relative "surge_api/internal/type/boolean"
38
+ require_relative "surge_api/internal/type/file_input"
39
+ require_relative "surge_api/internal/type/enum"
40
+ require_relative "surge_api/internal/type/union"
41
+ require_relative "surge_api/internal/type/array_of"
42
+ require_relative "surge_api/internal/type/hash_of"
43
+ require_relative "surge_api/internal/type/base_model"
44
+ require_relative "surge_api/internal/type/base_page"
45
+ require_relative "surge_api/internal/type/request_parameters"
46
+ require_relative "surge_api/internal"
47
+ require_relative "surge_api/request_options"
48
+ require_relative "surge_api/file_part"
49
+ require_relative "surge_api/errors"
50
+ require_relative "surge_api/internal/transport/base_client"
51
+ require_relative "surge_api/internal/transport/pooled_net_requester"
52
+ require_relative "surge_api/client"
53
+ require_relative "surge_api/models/account"
54
+ require_relative "surge_api/models/account_create_params"
55
+ require_relative "surge_api/models/account_retrieve_status_params"
56
+ require_relative "surge_api/models/account_status"
57
+ require_relative "surge_api/models/account_update_params"
58
+ require_relative "surge_api/models/blast"
59
+ require_relative "surge_api/models/blast_create_params"
60
+ require_relative "surge_api/models/call_ended_webhook_event"
61
+ require_relative "surge_api/models/campaign"
62
+ require_relative "surge_api/models/campaign_approved_webhook_event"
63
+ require_relative "surge_api/models/campaign_create_params"
64
+ require_relative "surge_api/models/contact"
65
+ require_relative "surge_api/models/contact_create_params"
66
+ require_relative "surge_api/models/contact_retrieve_params"
67
+ require_relative "surge_api/models/contact_update_params"
68
+ require_relative "surge_api/models/conversation_created_webhook_event"
69
+ require_relative "surge_api/models/error"
70
+ require_relative "surge_api/models/message"
71
+ require_relative "surge_api/models/message_create_params"
72
+ require_relative "surge_api/models/message_delivered_webhook_event"
73
+ require_relative "surge_api/models/message_failed_webhook_event"
74
+ require_relative "surge_api/models/message_received_webhook_event"
75
+ require_relative "surge_api/models/message_sent_webhook_event"
76
+ require_relative "surge_api/models/organization"
77
+ require_relative "surge_api/models/phone_number"
78
+ require_relative "surge_api/models/phone_number_purchase_params"
79
+ require_relative "surge_api/models/unwrap_webhook_event"
80
+ require_relative "surge_api/models/user"
81
+ require_relative "surge_api/models/user_create_params"
82
+ require_relative "surge_api/models/user_create_token_params"
83
+ require_relative "surge_api/models/user_retrieve_params"
84
+ require_relative "surge_api/models/user_token_response"
85
+ require_relative "surge_api/models/user_update_params"
86
+ require_relative "surge_api/models/verification"
87
+ require_relative "surge_api/models/verification_check"
88
+ require_relative "surge_api/models/verification_check_params"
89
+ require_relative "surge_api/models/verification_create_params"
90
+ require_relative "surge_api/models/webhook_unwrap_params"
91
+ require_relative "surge_api/models"
92
+ require_relative "surge_api/resources/accounts"
93
+ require_relative "surge_api/resources/blasts"
94
+ require_relative "surge_api/resources/campaigns"
95
+ require_relative "surge_api/resources/contacts"
96
+ require_relative "surge_api/resources/messages"
97
+ require_relative "surge_api/resources/phone_numbers"
98
+ require_relative "surge_api/resources/users"
99
+ require_relative "surge_api/resources/verifications"
100
+ require_relative "surge_api/resources/webhooks"
data/manifest.yaml ADDED
@@ -0,0 +1,15 @@
1
+ dependencies:
2
+ - English
3
+ - cgi
4
+ - date
5
+ - erb
6
+ - etc
7
+ - json
8
+ - net/http
9
+ - pathname
10
+ - rbconfig
11
+ - securerandom
12
+ - set
13
+ - stringio
14
+ - time
15
+ - uri
@@ -0,0 +1,73 @@
1
+ # typed: strong
2
+
3
+ module SurgeAPI
4
+ class Client < SurgeAPI::Internal::Transport::BaseClient
5
+ DEFAULT_MAX_RETRIES = 2
6
+
7
+ DEFAULT_TIMEOUT_IN_SECONDS = T.let(60.0, Float)
8
+
9
+ DEFAULT_INITIAL_RETRY_DELAY = T.let(0.5, Float)
10
+
11
+ DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
12
+
13
+ sig { returns(String) }
14
+ attr_reader :api_key
15
+
16
+ sig { returns(SurgeAPI::Resources::Accounts) }
17
+ attr_reader :accounts
18
+
19
+ sig { returns(SurgeAPI::Resources::Blasts) }
20
+ attr_reader :blasts
21
+
22
+ sig { returns(SurgeAPI::Resources::Campaigns) }
23
+ attr_reader :campaigns
24
+
25
+ sig { returns(SurgeAPI::Resources::Contacts) }
26
+ attr_reader :contacts
27
+
28
+ sig { returns(SurgeAPI::Resources::Messages) }
29
+ attr_reader :messages
30
+
31
+ sig { returns(SurgeAPI::Resources::PhoneNumbers) }
32
+ attr_reader :phone_numbers
33
+
34
+ sig { returns(SurgeAPI::Resources::Users) }
35
+ attr_reader :users
36
+
37
+ sig { returns(SurgeAPI::Resources::Verifications) }
38
+ attr_reader :verifications
39
+
40
+ sig { returns(SurgeAPI::Resources::Webhooks) }
41
+ attr_reader :webhooks
42
+
43
+ # @api private
44
+ sig { override.returns(T::Hash[String, String]) }
45
+ private def auth_headers
46
+ end
47
+
48
+ # Creates and returns a new client for interacting with the API.
49
+ sig do
50
+ params(
51
+ api_key: T.nilable(String),
52
+ base_url: T.nilable(String),
53
+ max_retries: Integer,
54
+ timeout: Float,
55
+ initial_retry_delay: Float,
56
+ max_retry_delay: Float
57
+ ).returns(T.attached_class)
58
+ end
59
+ def self.new(
60
+ # Defaults to `ENV["SURGE_API_KEY"]`
61
+ api_key: ENV["SURGE_API_KEY"],
62
+ # Override the default base URL for the API, e.g.,
63
+ # `"https://api.example.com/v2/"`. Defaults to `ENV["SURGE_BASE_URL"]`
64
+ base_url: ENV["SURGE_BASE_URL"],
65
+ # Max number of retries to attempt after a failed retryable request.
66
+ max_retries: SurgeAPI::Client::DEFAULT_MAX_RETRIES,
67
+ timeout: SurgeAPI::Client::DEFAULT_TIMEOUT_IN_SECONDS,
68
+ initial_retry_delay: SurgeAPI::Client::DEFAULT_INITIAL_RETRY_DELAY,
69
+ max_retry_delay: SurgeAPI::Client::DEFAULT_MAX_RETRY_DELAY
70
+ )
71
+ end
72
+ end
73
+ end