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.
- checksums.yaml +7 -0
- data/.ignore +2 -0
- data/CHANGELOG.md +28 -0
- data/README.md +286 -0
- data/SECURITY.md +27 -0
- data/lib/surge_api/client.rb +106 -0
- data/lib/surge_api/errors.rb +228 -0
- data/lib/surge_api/file_part.rb +55 -0
- data/lib/surge_api/internal/transport/base_client.rb +567 -0
- data/lib/surge_api/internal/transport/pooled_net_requester.rb +201 -0
- data/lib/surge_api/internal/type/array_of.rb +168 -0
- data/lib/surge_api/internal/type/base_model.rb +531 -0
- data/lib/surge_api/internal/type/base_page.rb +55 -0
- data/lib/surge_api/internal/type/boolean.rb +77 -0
- data/lib/surge_api/internal/type/converter.rb +327 -0
- data/lib/surge_api/internal/type/enum.rb +131 -0
- data/lib/surge_api/internal/type/file_input.rb +108 -0
- data/lib/surge_api/internal/type/hash_of.rb +188 -0
- data/lib/surge_api/internal/type/request_parameters.rb +42 -0
- data/lib/surge_api/internal/type/union.rb +250 -0
- data/lib/surge_api/internal/type/unknown.rb +81 -0
- data/lib/surge_api/internal/util.rb +915 -0
- data/lib/surge_api/internal.rb +20 -0
- data/lib/surge_api/models/account.rb +60 -0
- data/lib/surge_api/models/account_create_params.rb +481 -0
- data/lib/surge_api/models/account_retrieve_status_params.rb +32 -0
- data/lib/surge_api/models/account_status.rb +104 -0
- data/lib/surge_api/models/account_update_params.rb +480 -0
- data/lib/surge_api/models/blast.rb +61 -0
- data/lib/surge_api/models/blast_create_params.rb +90 -0
- data/lib/surge_api/models/call_ended_webhook_event.rb +106 -0
- data/lib/surge_api/models/campaign.rb +208 -0
- data/lib/surge_api/models/campaign_approved_webhook_event.rb +74 -0
- data/lib/surge_api/models/campaign_create_params.rb +202 -0
- data/lib/surge_api/models/contact.rb +59 -0
- data/lib/surge_api/models/contact_create_params.rb +54 -0
- data/lib/surge_api/models/contact_retrieve_params.rb +14 -0
- data/lib/surge_api/models/contact_update_params.rb +54 -0
- data/lib/surge_api/models/conversation_created_webhook_event.rb +70 -0
- data/lib/surge_api/models/error.rb +34 -0
- data/lib/surge_api/models/message.rb +146 -0
- data/lib/surge_api/models/message_create_params.rb +153 -0
- data/lib/surge_api/models/message_delivered_webhook_event.rb +159 -0
- data/lib/surge_api/models/message_failed_webhook_event.rb +167 -0
- data/lib/surge_api/models/message_received_webhook_event.rb +159 -0
- data/lib/surge_api/models/message_sent_webhook_event.rb +159 -0
- data/lib/surge_api/models/organization.rb +419 -0
- data/lib/surge_api/models/phone_number.rb +48 -0
- data/lib/surge_api/models/phone_number_purchase_params.rb +65 -0
- data/lib/surge_api/models/unwrap_webhook_event.rb +26 -0
- data/lib/surge_api/models/user.rb +51 -0
- data/lib/surge_api/models/user_create_params.rb +46 -0
- data/lib/surge_api/models/user_create_token_params.rb +22 -0
- data/lib/surge_api/models/user_retrieve_params.rb +14 -0
- data/lib/surge_api/models/user_token_response.rb +19 -0
- data/lib/surge_api/models/user_update_params.rb +46 -0
- data/lib/surge_api/models/verification.rb +58 -0
- data/lib/surge_api/models/verification_check.rb +43 -0
- data/lib/surge_api/models/verification_check_params.rb +22 -0
- data/lib/surge_api/models/verification_create_params.rb +22 -0
- data/lib/surge_api/models/webhook_unwrap_params.rb +14 -0
- data/lib/surge_api/models.rb +117 -0
- data/lib/surge_api/request_options.rb +77 -0
- data/lib/surge_api/resources/accounts.rb +102 -0
- data/lib/surge_api/resources/blasts.rb +53 -0
- data/lib/surge_api/resources/campaigns.rb +57 -0
- data/lib/surge_api/resources/contacts.rb +99 -0
- data/lib/surge_api/resources/messages.rb +75 -0
- data/lib/surge_api/resources/phone_numbers.rb +48 -0
- data/lib/surge_api/resources/users.rb +119 -0
- data/lib/surge_api/resources/verifications.rb +60 -0
- data/lib/surge_api/resources/webhooks.rb +22 -0
- data/lib/surge_api/version.rb +5 -0
- data/lib/surge_api.rb +100 -0
- data/manifest.yaml +15 -0
- data/rbi/surge_api/client.rbi +73 -0
- data/rbi/surge_api/errors.rbi +205 -0
- data/rbi/surge_api/file_part.rbi +37 -0
- data/rbi/surge_api/internal/transport/base_client.rbi +292 -0
- data/rbi/surge_api/internal/transport/pooled_net_requester.rbi +79 -0
- data/rbi/surge_api/internal/type/array_of.rbi +104 -0
- data/rbi/surge_api/internal/type/base_model.rbi +302 -0
- data/rbi/surge_api/internal/type/base_page.rbi +42 -0
- data/rbi/surge_api/internal/type/boolean.rbi +58 -0
- data/rbi/surge_api/internal/type/converter.rbi +216 -0
- data/rbi/surge_api/internal/type/enum.rbi +82 -0
- data/rbi/surge_api/internal/type/file_input.rbi +59 -0
- data/rbi/surge_api/internal/type/hash_of.rbi +104 -0
- data/rbi/surge_api/internal/type/request_parameters.rbi +29 -0
- data/rbi/surge_api/internal/type/union.rbi +128 -0
- data/rbi/surge_api/internal/type/unknown.rbi +58 -0
- data/rbi/surge_api/internal/util.rbi +487 -0
- data/rbi/surge_api/internal.rbi +16 -0
- data/rbi/surge_api/models/account.rbi +83 -0
- data/rbi/surge_api/models/account_create_params.rbi +1104 -0
- data/rbi/surge_api/models/account_retrieve_status_params.rbi +96 -0
- data/rbi/surge_api/models/account_status.rbi +185 -0
- data/rbi/surge_api/models/account_update_params.rbi +1105 -0
- data/rbi/surge_api/models/blast.rbi +108 -0
- data/rbi/surge_api/models/blast_create_params.rbi +145 -0
- data/rbi/surge_api/models/call_ended_webhook_event.rbi +205 -0
- data/rbi/surge_api/models/campaign.rbi +331 -0
- data/rbi/surge_api/models/campaign_approved_webhook_event.rbi +149 -0
- data/rbi/surge_api/models/campaign_create_params.rbi +386 -0
- data/rbi/surge_api/models/contact.rbi +88 -0
- data/rbi/surge_api/models/contact_create_params.rbi +87 -0
- data/rbi/surge_api/models/contact_retrieve_params.rbi +27 -0
- data/rbi/surge_api/models/contact_update_params.rbi +87 -0
- data/rbi/surge_api/models/conversation_created_webhook_event.rbi +129 -0
- data/rbi/surge_api/models/error.rbi +51 -0
- data/rbi/surge_api/models/message.rbi +283 -0
- data/rbi/surge_api/models/message_create_params.rbi +281 -0
- data/rbi/surge_api/models/message_delivered_webhook_event.rbi +331 -0
- data/rbi/surge_api/models/message_failed_webhook_event.rbi +335 -0
- data/rbi/surge_api/models/message_received_webhook_event.rbi +331 -0
- data/rbi/surge_api/models/message_sent_webhook_event.rbi +322 -0
- data/rbi/surge_api/models/organization.rbi +649 -0
- data/rbi/surge_api/models/phone_number.rbi +72 -0
- data/rbi/surge_api/models/phone_number_purchase_params.rbi +122 -0
- data/rbi/surge_api/models/unwrap_webhook_event.rbi +26 -0
- data/rbi/surge_api/models/user.rbi +80 -0
- data/rbi/surge_api/models/user_create_params.rbi +76 -0
- data/rbi/surge_api/models/user_create_token_params.rbi +46 -0
- data/rbi/surge_api/models/user_retrieve_params.rbi +27 -0
- data/rbi/surge_api/models/user_token_response.rbi +31 -0
- data/rbi/surge_api/models/user_update_params.rbi +76 -0
- data/rbi/surge_api/models/verification.rbi +86 -0
- data/rbi/surge_api/models/verification_check.rbi +84 -0
- data/rbi/surge_api/models/verification_check_params.rbi +40 -0
- data/rbi/surge_api/models/verification_create_params.rbi +40 -0
- data/rbi/surge_api/models/webhook_unwrap_params.rbi +27 -0
- data/rbi/surge_api/models.rbi +80 -0
- data/rbi/surge_api/request_options.rbi +59 -0
- data/rbi/surge_api/resources/accounts.rbi +94 -0
- data/rbi/surge_api/resources/blasts.rbi +48 -0
- data/rbi/surge_api/resources/campaigns.rbi +115 -0
- data/rbi/surge_api/resources/contacts.rbi +85 -0
- data/rbi/surge_api/resources/messages.rbi +72 -0
- data/rbi/surge_api/resources/phone_numbers.rbi +43 -0
- data/rbi/surge_api/resources/users.rbi +96 -0
- data/rbi/surge_api/resources/verifications.rbi +43 -0
- data/rbi/surge_api/resources/webhooks.rbi +31 -0
- data/rbi/surge_api/version.rbi +5 -0
- data/sig/surge_api/client.rbs +42 -0
- data/sig/surge_api/errors.rbs +117 -0
- data/sig/surge_api/file_part.rbs +21 -0
- data/sig/surge_api/internal/transport/base_client.rbs +131 -0
- data/sig/surge_api/internal/transport/pooled_net_requester.rbs +45 -0
- data/sig/surge_api/internal/type/array_of.rbs +48 -0
- data/sig/surge_api/internal/type/base_model.rbs +102 -0
- data/sig/surge_api/internal/type/base_page.rbs +24 -0
- data/sig/surge_api/internal/type/boolean.rbs +26 -0
- data/sig/surge_api/internal/type/converter.rbs +79 -0
- data/sig/surge_api/internal/type/enum.rbs +32 -0
- data/sig/surge_api/internal/type/file_input.rbs +25 -0
- data/sig/surge_api/internal/type/hash_of.rbs +48 -0
- data/sig/surge_api/internal/type/request_parameters.rbs +17 -0
- data/sig/surge_api/internal/type/union.rbs +52 -0
- data/sig/surge_api/internal/type/unknown.rbs +26 -0
- data/sig/surge_api/internal/util.rbs +185 -0
- data/sig/surge_api/internal.rbs +9 -0
- data/sig/surge_api/models/account.rbs +40 -0
- data/sig/surge_api/models/account_create_params.rbs +433 -0
- data/sig/surge_api/models/account_retrieve_status_params.rbs +40 -0
- data/sig/surge_api/models/account_status.rbs +71 -0
- data/sig/surge_api/models/account_update_params.rbs +435 -0
- data/sig/surge_api/models/blast.rbs +64 -0
- data/sig/surge_api/models/blast_create_params.rbs +82 -0
- data/sig/surge_api/models/call_ended_webhook_event.rbs +99 -0
- data/sig/surge_api/models/campaign.rbs +122 -0
- data/sig/surge_api/models/campaign_approved_webhook_event.rbs +67 -0
- data/sig/surge_api/models/campaign_create_params.rbs +127 -0
- data/sig/surge_api/models/contact.rbs +53 -0
- data/sig/surge_api/models/contact_create_params.rbs +54 -0
- data/sig/surge_api/models/contact_retrieve_params.rbs +15 -0
- data/sig/surge_api/models/contact_update_params.rbs +54 -0
- data/sig/surge_api/models/conversation_created_webhook_event.rbs +62 -0
- data/sig/surge_api/models/error.rbs +27 -0
- data/sig/surge_api/models/message.rbs +138 -0
- data/sig/surge_api/models/message_create_params.rbs +140 -0
- data/sig/surge_api/models/message_delivered_webhook_event.rbs +143 -0
- data/sig/surge_api/models/message_failed_webhook_event.rbs +148 -0
- data/sig/surge_api/models/message_received_webhook_event.rbs +143 -0
- data/sig/surge_api/models/message_sent_webhook_event.rbs +143 -0
- data/sig/surge_api/models/organization.rbs +385 -0
- data/sig/surge_api/models/phone_number.rbs +37 -0
- data/sig/surge_api/models/phone_number_purchase_params.rbs +62 -0
- data/sig/surge_api/models/unwrap_webhook_event.rbs +18 -0
- data/sig/surge_api/models/user.rbs +48 -0
- data/sig/surge_api/models/user_create_params.rbs +47 -0
- data/sig/surge_api/models/user_create_token_params.rbs +26 -0
- data/sig/surge_api/models/user_retrieve_params.rbs +15 -0
- data/sig/surge_api/models/user_token_response.rbs +15 -0
- data/sig/surge_api/models/user_update_params.rbs +47 -0
- data/sig/surge_api/models/verification.rbs +48 -0
- data/sig/surge_api/models/verification_check.rbs +45 -0
- data/sig/surge_api/models/verification_check_params.rbs +23 -0
- data/sig/surge_api/models/verification_create_params.rbs +23 -0
- data/sig/surge_api/models/webhook_unwrap_params.rbs +15 -0
- data/sig/surge_api/models.rbs +77 -0
- data/sig/surge_api/request_options.rbs +34 -0
- data/sig/surge_api/resources/accounts.rbs +30 -0
- data/sig/surge_api/resources/blasts.rbs +19 -0
- data/sig/surge_api/resources/campaigns.rbs +21 -0
- data/sig/surge_api/resources/contacts.rbs +32 -0
- data/sig/surge_api/resources/messages.rbs +18 -0
- data/sig/surge_api/resources/phone_numbers.rbs +16 -0
- data/sig/surge_api/resources/users.rbs +36 -0
- data/sig/surge_api/resources/verifications.rbs +18 -0
- data/sig/surge_api/resources/webhooks.rbs +17 -0
- data/sig/surge_api/version.rbs +3 -0
- 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
|
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,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
|