vonage 7.29.1 → 8.0.0.beta
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 +4 -4
- data/README.md +89 -476
- data/lib/vonage/applications.rb +4 -12
- data/lib/vonage/basic.rb +1 -1
- data/lib/vonage/bearer_token.rb +1 -1
- data/lib/vonage/client.rb +0 -65
- data/lib/vonage/client_error.rb +1 -1
- data/lib/vonage/config.rb +1 -9
- data/lib/vonage/conversations/events.rb +0 -12
- data/lib/vonage/conversations/legs.rb +0 -6
- data/lib/vonage/conversations/members.rb +0 -15
- data/lib/vonage/conversations/users.rb +0 -15
- data/lib/vonage/conversations.rb +0 -30
- data/lib/vonage/errors.rb +20 -37
- data/lib/vonage/gsm7.rb +1 -1
- data/lib/vonage/http.rb +3 -3
- data/lib/vonage/jwt.rb +0 -17
- data/lib/vonage/key_secret_params.rb +2 -3
- data/lib/vonage/keys.rb +1 -14
- data/lib/vonage/logger.rb +3 -5
- data/lib/vonage/messaging/channels/viber.rb +2 -9
- data/lib/vonage/messaging/channels/whats_app.rb +1 -3
- data/lib/vonage/messaging/message.rb +0 -1
- data/lib/vonage/messaging.rb +4 -34
- data/lib/vonage/namespace.rb +68 -137
- data/lib/vonage/numbers.rb +17 -40
- data/lib/vonage/server_error.rb +1 -1
- data/lib/vonage/signature.rb +5 -5
- data/lib/vonage/sms.rb +20 -20
- data/lib/vonage/version.rb +1 -1
- data/lib/vonage/video/archives.rb +58 -25
- data/lib/vonage/video/list_response.rb +11 -0
- data/lib/vonage/video/moderation.rb +22 -7
- data/lib/vonage/video/signals.rb +9 -4
- data/lib/vonage/video/streams.rb +12 -6
- data/lib/vonage/video.rb +13 -50
- data/lib/vonage/voice/actions/connect.rb +5 -34
- data/lib/vonage/voice/actions/conversation.rb +4 -10
- data/lib/vonage/voice/actions/input.rb +3 -19
- data/lib/vonage/voice/actions/notify.rb +3 -8
- data/lib/vonage/voice/actions/pay.rb +107 -0
- data/lib/vonage/voice/actions/record.rb +4 -52
- data/lib/vonage/voice/actions/stream.rb +4 -48
- data/lib/vonage/voice/actions/talk.rb +4 -54
- data/lib/vonage/voice/talk.rb +1 -11
- data/lib/vonage/voice.rb +0 -24
- data/lib/vonage.rb +0 -4
- data/vonage.gemspec +1 -3
- metadata +12 -108
- data/lib/vonage/api_error.rb +0 -33
- data/lib/vonage/conversation/event/list_response.rb +0 -11
- data/lib/vonage/conversation/event.rb +0 -108
- data/lib/vonage/conversation/list_response.rb +0 -11
- data/lib/vonage/conversation/member/list_response.rb +0 -11
- data/lib/vonage/conversation/member.rb +0 -134
- data/lib/vonage/conversation/user/conversations_list_response.rb +0 -11
- data/lib/vonage/conversation/user/sessions_list_response.rb +0 -11
- data/lib/vonage/conversation/user.rb +0 -67
- data/lib/vonage/conversation.rb +0 -164
- data/lib/vonage/meetings/applications.rb +0 -28
- data/lib/vonage/meetings/dial_in_numbers/list_response.rb +0 -11
- data/lib/vonage/meetings/dial_in_numbers.rb +0 -26
- data/lib/vonage/meetings/recordings.rb +0 -42
- data/lib/vonage/meetings/rooms/list_response.rb +0 -11
- data/lib/vonage/meetings/rooms.rb +0 -167
- data/lib/vonage/meetings/sessions/list_response.rb +0 -11
- data/lib/vonage/meetings/sessions.rb +0 -31
- data/lib/vonage/meetings/themes/list_response.rb +0 -11
- data/lib/vonage/meetings/themes.rb +0 -239
- data/lib/vonage/meetings.rb +0 -50
- data/lib/vonage/messaging/channels/rcs.rb +0 -42
- data/lib/vonage/network_authentication/client_authentication.rb +0 -39
- data/lib/vonage/network_authentication/server_authentication.rb +0 -47
- data/lib/vonage/network_authentication.rb +0 -22
- data/lib/vonage/network_number_verification.rb +0 -92
- data/lib/vonage/network_sim_swap.rb +0 -84
- data/lib/vonage/number_insight_2.rb +0 -36
- data/lib/vonage/proactive_connect/events/list_response.rb +0 -11
- data/lib/vonage/proactive_connect/events.rb +0 -71
- data/lib/vonage/proactive_connect/item.rb +0 -116
- data/lib/vonage/proactive_connect/items/file_response.rb +0 -32
- data/lib/vonage/proactive_connect/items/list_response.rb +0 -11
- data/lib/vonage/proactive_connect/items.rb +0 -116
- data/lib/vonage/proactive_connect/list.rb +0 -186
- data/lib/vonage/proactive_connect/lists/list_response.rb +0 -11
- data/lib/vonage/proactive_connect/lists.rb +0 -38
- data/lib/vonage/proactive_connect.rb +0 -43
- data/lib/vonage/subaccounts/balance_transfers/list_response.rb +0 -11
- data/lib/vonage/subaccounts/credit_transfers/list_response.rb +0 -11
- data/lib/vonage/subaccounts/list_response.rb +0 -15
- data/lib/vonage/subaccounts.rb +0 -203
- data/lib/vonage/users/list_response.rb +0 -11
- data/lib/vonage/users.rb +0 -156
- data/lib/vonage/verify2/channels/email.rb +0 -36
- data/lib/vonage/verify2/channels/silent_auth.rb +0 -45
- data/lib/vonage/verify2/channels/sms.rb +0 -63
- data/lib/vonage/verify2/channels/voice.rb +0 -32
- data/lib/vonage/verify2/channels/whats_app.rb +0 -39
- data/lib/vonage/verify2/channels/whats_app_interactive.rb +0 -32
- data/lib/vonage/verify2/start_verification_options.rb +0 -63
- data/lib/vonage/verify2/template_fragments/list_response.rb +0 -11
- data/lib/vonage/verify2/template_fragments.rb +0 -125
- data/lib/vonage/verify2/templates/list_response.rb +0 -11
- data/lib/vonage/verify2/templates.rb +0 -86
- data/lib/vonage/verify2/workflow.rb +0 -39
- data/lib/vonage/verify2/workflow_builder.rb +0 -25
- data/lib/vonage/verify2.rb +0 -112
- data/lib/vonage/video/archives/list_response.rb +0 -11
- data/lib/vonage/video/broadcasts/list_response.rb +0 -11
- data/lib/vonage/video/broadcasts.rb +0 -75
- data/lib/vonage/video/captions.rb +0 -67
- data/lib/vonage/video/renders/list_response.rb +0 -11
- data/lib/vonage/video/renders.rb +0 -107
- data/lib/vonage/video/sip.rb +0 -48
- data/lib/vonage/video/streams/list_response.rb +0 -11
- data/lib/vonage/video/web_socket.rb +0 -61
data/lib/vonage/errors.rb
CHANGED
@@ -1,25 +1,14 @@
|
|
1
1
|
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
|
-
require
|
3
|
+
require 'json'
|
4
4
|
|
5
5
|
module Vonage
|
6
6
|
module Errors
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
sig
|
10
|
-
params(
|
11
|
-
response:
|
12
|
-
T.any(
|
13
|
-
Net::HTTPUnauthorized,
|
14
|
-
Net::HTTPClientError,
|
15
|
-
Net::HTTPServerError,
|
16
|
-
T.untyped
|
17
|
-
)
|
18
|
-
).returns(Vonage::Error)
|
19
|
-
end
|
9
|
+
sig {params(response: T.any(Net::HTTPUnauthorized, Net::HTTPClientError, Net::HTTPServerError, T.untyped)).returns(Vonage::Error)}
|
20
10
|
def self.parse(response)
|
21
|
-
exception_class =
|
22
|
-
case response
|
11
|
+
exception_class = case response
|
23
12
|
when Net::HTTPUnauthorized
|
24
13
|
AuthenticationError
|
25
14
|
when Net::HTTPClientError
|
@@ -27,40 +16,34 @@ module Vonage
|
|
27
16
|
when Net::HTTPServerError
|
28
17
|
ServerError
|
29
18
|
else
|
30
|
-
|
19
|
+
Error
|
31
20
|
end
|
32
21
|
|
33
|
-
message = response.content_type
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
hash
|
43
|
-
|
44
|
-
|
45
|
-
elsif hash.key?("description")
|
46
|
-
hash["description"]
|
47
|
-
elsif hash.key?("message")
|
48
|
-
hash["message"]
|
49
|
-
elsif problem_details?(hash)
|
50
|
-
problem_details_message(hash)
|
51
|
-
else
|
52
|
-
""
|
22
|
+
message = if response.content_type == 'application/json'
|
23
|
+
hash = ::JSON.parse(response.body)
|
24
|
+
|
25
|
+
if hash.key?('error_title')
|
26
|
+
hash['error_title']
|
27
|
+
elsif hash.key?('error-code-label')
|
28
|
+
hash['error-code-label']
|
29
|
+
elsif hash.key?('description')
|
30
|
+
hash['description']
|
31
|
+
elsif problem_details?(hash)
|
32
|
+
problem_details_message(hash)
|
33
|
+
end
|
53
34
|
end
|
35
|
+
|
36
|
+
exception_class.new(message)
|
54
37
|
end
|
55
38
|
|
56
39
|
sig { params(hash: T::Hash[String, T.untyped]).returns(T::Boolean) }
|
57
40
|
def self.problem_details?(hash)
|
58
|
-
hash.key?(
|
41
|
+
hash.key?('title') && hash.key?('detail') && hash.key?('type')
|
59
42
|
end
|
60
43
|
|
61
44
|
sig { params(hash: T::Hash[String, T.untyped]).returns(String) }
|
62
45
|
def self.problem_details_message(hash)
|
63
|
-
"#{hash[
|
46
|
+
"#{hash['title']}. #{hash['detail']} See #{hash['type']} for more info, or email support@nexmo.com if you have any questions."
|
64
47
|
end
|
65
48
|
end
|
66
49
|
|
data/lib/vonage/gsm7.rb
CHANGED
@@ -4,7 +4,7 @@ module Vonage
|
|
4
4
|
module GSM7
|
5
5
|
extend T::Sig
|
6
6
|
|
7
|
-
CHARACTERS = "\n\f\r !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~
|
7
|
+
CHARACTERS = "\n\f\r !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~ ¡£¤¥§¿ÄÅÆÉÑÖØÜßàäåæçèéìñòöøùüΓΔΘΛΞΠΣΦΨΩ€"
|
8
8
|
|
9
9
|
REGEXP = /\A[#{Regexp.escape(CHARACTERS)}]*\z/
|
10
10
|
|
data/lib/vonage/http.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
|
-
require 'net/http
|
3
|
+
require 'net/http'
|
4
4
|
|
5
5
|
module Vonage
|
6
6
|
module HTTP
|
@@ -21,7 +21,7 @@ module Vonage
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
sig { params(http: Net::HTTP
|
24
|
+
sig { params(http: Net::HTTP).returns(T::Hash[Symbol, T.untyped]) }
|
25
25
|
def set(http)
|
26
26
|
@hash.each do |name, value|
|
27
27
|
http.public_send(defined_options.fetch(name), value)
|
@@ -34,7 +34,7 @@ module Vonage
|
|
34
34
|
def defined_options
|
35
35
|
@defined_options = T.let(@defined_options, T.nilable(T::Hash[Symbol, T.untyped]))
|
36
36
|
|
37
|
-
@defined_options ||= Net::HTTP
|
37
|
+
@defined_options ||= Net::HTTP.instance_methods.grep(/\w=\z/).each_with_object({}) do |name, hash|
|
38
38
|
hash[name.to_s.chomp('=').to_sym] = name
|
39
39
|
end
|
40
40
|
end
|
data/lib/vonage/jwt.rb
CHANGED
@@ -39,22 +39,5 @@ module Vonage
|
|
39
39
|
payload[:private_key] = private_key if private_key && !payload[:private_key]
|
40
40
|
@token = Vonage::JWTBuilder.new(payload).jwt.generate
|
41
41
|
end
|
42
|
-
|
43
|
-
# Validate a JSON Web Token from a Vonage Webhook.
|
44
|
-
#
|
45
|
-
# Certain Vonage APIs include a JWT signed with a user's account signature secret in
|
46
|
-
# the Authorization header of Webhook requests. This method can be used to verify that those requests originate
|
47
|
-
# from the Vonage API.
|
48
|
-
#
|
49
|
-
# @param [String, required] :token The JWT from the Webhook's Authorization header
|
50
|
-
# @param [String, required] :signature_secret The account signature secret
|
51
|
-
#
|
52
|
-
# @return [Boolean] true, if the JWT is verified, false otherwise
|
53
|
-
#
|
54
|
-
# @see https://developer.vonage.com/en/getting-started/concepts/webhooks#decoding-signed-webhooks
|
55
|
-
#
|
56
|
-
def self.verify_hs256_signature(token:, signature_secret:)
|
57
|
-
verify_signature(token, signature_secret, 'HS256')
|
58
|
-
end
|
59
42
|
end
|
60
43
|
end
|
@@ -5,10 +5,9 @@ module Vonage
|
|
5
5
|
extend T::Sig
|
6
6
|
|
7
7
|
sig { params(
|
8
|
-
object: T.any(T::Hash[T.untyped, T.untyped], URI::HTTPS, Net::HTTP::Post, Net::HTTP::Get)
|
9
|
-
data: T.nilable(Hash)
|
8
|
+
object: T.any(T::Hash[T.untyped, T.untyped], URI::HTTPS, Net::HTTP::Post, Net::HTTP::Get)
|
10
9
|
).void }
|
11
|
-
def update(object
|
10
|
+
def update(object)
|
12
11
|
return unless object.is_a?(Hash)
|
13
12
|
|
14
13
|
@config = T.let(@config, T.nilable(Vonage::Config))
|
data/lib/vonage/keys.rb
CHANGED
@@ -27,20 +27,7 @@ module Vonage
|
|
27
27
|
'has_video',
|
28
28
|
'remove_stream',
|
29
29
|
'screenshare_type',
|
30
|
-
'
|
31
|
-
'output_mode',
|
32
|
-
'stream_mode',
|
33
|
-
'archive_mode',
|
34
|
-
'multi_archive_tag',
|
35
|
-
'language_code',
|
36
|
-
'max_duration',
|
37
|
-
'partial_captions',
|
38
|
-
'status_callback_url',
|
39
|
-
'audio_rate',
|
40
|
-
'phone_number',
|
41
|
-
'hashed_phone_number',
|
42
|
-
'max_age',
|
43
|
-
'max_bitrate'
|
30
|
+
'archive_mode'
|
44
31
|
]
|
45
32
|
hash.transform_keys do |k|
|
46
33
|
if exceptions.include?(k.to_s)
|
data/lib/vonage/logger.rb
CHANGED
@@ -7,11 +7,7 @@ module Vonage
|
|
7
7
|
class Logger
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
sig { params(logger: T.nilable(
|
11
|
-
defined?(ActiveSupport::BroadcastLogger) ?
|
12
|
-
T.any(::Logger, Vonage::Logger, ActiveSupport::BroadcastLogger)
|
13
|
-
: T.any(::Logger, Vonage::Logger)
|
14
|
-
)).void }
|
10
|
+
sig { params(logger: T.nilable(T.any(::Logger, Vonage::Logger))).void }
|
15
11
|
def initialize(logger)
|
16
12
|
@logger = logger || ::Logger.new(nil)
|
17
13
|
end
|
@@ -24,6 +20,8 @@ module Vonage
|
|
24
20
|
|
25
21
|
sig { params(request: T.any(Net::HTTP::Post, Net::HTTP::Get, Net::HTTP::Delete, Net::HTTP::Put, Net::HTTP::Patch)).void }
|
26
22
|
def log_request_info(request)
|
23
|
+
@logger = T.let(@logger, T.nilable(T.any(::Logger, Vonage::Logger)))
|
24
|
+
|
27
25
|
T.must(@logger).info do
|
28
26
|
format('Vonage API request', {
|
29
27
|
method: request.method,
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Vonage
|
4
4
|
class Messaging::Channels::Viber < Messaging::Message
|
5
|
-
MESSAGE_TYPES = ['text', 'image'
|
5
|
+
MESSAGE_TYPES = ['text', 'image']
|
6
6
|
|
7
7
|
attr_reader :data
|
8
8
|
|
@@ -18,7 +18,7 @@ module Vonage
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def build
|
21
|
-
data[:channel] = 'viber_service'
|
21
|
+
data[:channel] = ' viber_service'
|
22
22
|
super
|
23
23
|
end
|
24
24
|
|
@@ -33,13 +33,6 @@ module Vonage
|
|
33
33
|
when 'image'
|
34
34
|
raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
|
35
35
|
raise Vonage::ClientError.new(":url is required in :message") unless message[:url]
|
36
|
-
when 'video'
|
37
|
-
raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
|
38
|
-
raise Vonage::ClientError.new(":url is required in :message") unless message[:url]
|
39
|
-
raise Vonage::ClientError.new(":thumb_url is required in :message") unless message[:thumb_url]
|
40
|
-
when 'file'
|
41
|
-
raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
|
42
|
-
raise Vonage::ClientError.new(":url is required in :message") unless message[:url]
|
43
36
|
end
|
44
37
|
end
|
45
38
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Vonage
|
4
4
|
class Messaging::Channels::WhatsApp < Messaging::Message
|
5
|
-
MESSAGE_TYPES = ['text', 'image', 'audio', 'video', 'file', 'template', '
|
5
|
+
MESSAGE_TYPES = ['text', 'image', 'audio', 'video', 'file', 'template', 'custom']
|
6
6
|
|
7
7
|
attr_reader :data
|
8
8
|
|
@@ -35,8 +35,6 @@ module Vonage
|
|
35
35
|
raise Vonage::ClientError.new(":name is required in :template") unless message[:name]
|
36
36
|
raise Vonage::ClientError.new(":whatsapp is required in :opts") unless opts[:whatsapp]
|
37
37
|
raise Vonage::ClientError.new(":locale is required in :whatsapp") unless opts[:whatsapp][:locale]
|
38
|
-
when 'sticker'
|
39
|
-
raise Vonage::ClientError.new(":message must contain either :id or :url") unless message.has_key?(:id) ^ message.has_key?(:url)
|
40
38
|
when 'custom'
|
41
39
|
raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
|
42
40
|
else
|
@@ -5,7 +5,6 @@ module Vonage
|
|
5
5
|
CHANNELS = {
|
6
6
|
sms: Vonage::Messaging::Channels::SMS,
|
7
7
|
mms: Vonage::Messaging::Channels::MMS,
|
8
|
-
rcs: Vonage::Messaging::Channels::RCS,
|
9
8
|
whatsapp: Vonage::Messaging::Channels::WhatsApp,
|
10
9
|
messenger: Vonage::Messaging::Channels::Messenger,
|
11
10
|
viber: Vonage::Messaging::Channels::Viber
|
data/lib/vonage/messaging.rb
CHANGED
@@ -1,21 +1,16 @@
|
|
1
1
|
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
|
-
require 'forwardable'
|
4
3
|
|
5
4
|
module Vonage
|
6
5
|
class Messaging < Namespace
|
7
|
-
extend Forwardable
|
8
|
-
|
9
6
|
self.authentication = BearerToken
|
10
7
|
|
11
8
|
self.request_body = JSON
|
12
9
|
|
13
|
-
def_delegators Message, *Message::CHANNELS.keys
|
14
|
-
|
15
10
|
# Send a Message.
|
16
11
|
#
|
17
12
|
# @example
|
18
|
-
# message =
|
13
|
+
# message = Vonage::Messaging::Message.sms(message: "Hello world!")
|
19
14
|
# response = client.messaging.send(to: "447700900000", from: "447700900001", **message)
|
20
15
|
#
|
21
16
|
# @option params [required, String] :to
|
@@ -25,35 +20,10 @@ module Vonage
|
|
25
20
|
# @option params [required, Hash] **message
|
26
21
|
# The Vonage Message object to use for this message.
|
27
22
|
#
|
28
|
-
# @see https://developer.vonage.com/api/messages#SendMessage
|
29
|
-
#
|
30
|
-
def send(to:, from:, **message)
|
31
|
-
request('/v1/messages', params: {to: to, from: from, **message}, type: Post)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Update a Message Object.
|
35
|
-
#
|
36
|
-
# @example
|
37
|
-
# message = client.messaging.update(message_uuid: "aaaaaaaa-bbbb-4ccc-8ddd-0123456789ab", status: "read")
|
38
|
-
#
|
39
|
-
# @option params [required, String] :message_uuid. the UUID of the message to update.
|
40
|
-
#
|
41
|
-
# `:message_uuid` is always required. Other parameters will depend on the message channel and the specific action being performed.
|
42
|
-
# @see https://developer.vonage.com/api/messages#UpdateMessage
|
43
|
-
#
|
44
|
-
def update(message_uuid:, **params)
|
45
|
-
request("/v1/messages/#{message_uuid}", params: params, type: Patch)
|
46
|
-
end
|
47
|
-
|
48
|
-
# Validate a JSON Web Token from a Messages API Webhook.
|
49
|
-
#
|
50
|
-
# @param [String, required] :token The JWT from the Webhook's Authorization header
|
51
|
-
# @param [String, optional] :signature_secret The account signature secret. Required, unless `signature_secret`
|
52
|
-
# is set in `Config`
|
23
|
+
# @see https://developer.vonage.com/api/messages-olympus#SendMessage
|
53
24
|
#
|
54
|
-
|
55
|
-
|
56
|
-
JWT.verify_hs256_signature(token: token, signature_secret: signature_secret)
|
25
|
+
def send(params)
|
26
|
+
request('/v1/messages', params: params, type: Post)
|
57
27
|
end
|
58
28
|
end
|
59
29
|
end
|
data/lib/vonage/namespace.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
|
-
|
4
3
|
require 'net/http'
|
5
|
-
require 'net/http/persistent'
|
6
|
-
require 'net/http/post/multipart'
|
7
4
|
require 'json'
|
8
5
|
|
9
6
|
module Vonage
|
@@ -13,7 +10,8 @@ module Vonage
|
|
13
10
|
|
14
11
|
@host = set_host
|
15
12
|
|
16
|
-
@http = Net::HTTP::
|
13
|
+
@http = Net::HTTP.new(@host, Net::HTTP.https_default_port, p_addr = nil)
|
14
|
+
@http.use_ssl = true
|
17
15
|
|
18
16
|
@config.http.set(@http) unless @config.http.nil?
|
19
17
|
end
|
@@ -23,7 +21,8 @@ module Vonage
|
|
23
21
|
end
|
24
22
|
|
25
23
|
def self.host=(host)
|
26
|
-
raise ArgumentError unless
|
24
|
+
raise ArgumentError unless host == :rest_host || host == :video_host
|
25
|
+
|
27
26
|
@host = host
|
28
27
|
end
|
29
28
|
|
@@ -48,7 +47,6 @@ module Vonage
|
|
48
47
|
end
|
49
48
|
|
50
49
|
protected
|
51
|
-
|
52
50
|
# :nocov:
|
53
51
|
|
54
52
|
Get = Net::HTTP::Get
|
@@ -57,33 +55,33 @@ module Vonage
|
|
57
55
|
Post = Net::HTTP::Post
|
58
56
|
Delete = Net::HTTP::Delete
|
59
57
|
|
60
|
-
def build_request(path:, type: Get, params: {}
|
58
|
+
def build_request(path:, type: Get, params: {})
|
61
59
|
authentication = self.class.authentication.new(@config)
|
62
|
-
authentication.update(params
|
60
|
+
authentication.update(params)
|
63
61
|
|
64
|
-
uri = URI(
|
62
|
+
uri = URI('https://' + @host + path)
|
65
63
|
unless type.const_get(:REQUEST_HAS_BODY) || params.empty?
|
66
64
|
uri.query = Params.encode(params)
|
67
65
|
end
|
68
66
|
|
67
|
+
# Set BasicAuth if neeeded
|
68
|
+
authentication.update(uri)
|
69
|
+
|
69
70
|
# instantiate request
|
70
71
|
request = type.new(uri)
|
71
72
|
|
72
73
|
# set headers
|
73
|
-
request[
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
self.class.request_headers.each { |key, value| request[key] = value }
|
74
|
+
request['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version)
|
75
|
+
request['Accept'] = 'application/json'
|
76
|
+
self.class.request_headers.each do |key, value|
|
77
|
+
request[key] = value
|
78
|
+
end
|
79
79
|
|
80
|
-
# Set
|
81
|
-
authentication.update(request
|
80
|
+
# Set BearerToken if needed
|
81
|
+
authentication.update(request)
|
82
82
|
|
83
83
|
# set body
|
84
|
-
if type.const_get(:REQUEST_HAS_BODY)
|
85
|
-
self.class.request_body.update(request, params)
|
86
|
-
end
|
84
|
+
self.class.request_body.update(request, params) if type.const_get(:REQUEST_HAS_BODY)
|
87
85
|
|
88
86
|
request
|
89
87
|
end
|
@@ -91,8 +89,7 @@ module Vonage
|
|
91
89
|
def make_request!(request, &block)
|
92
90
|
logger.log_request_info(request)
|
93
91
|
|
94
|
-
|
95
|
-
response = @http.request(uri, request, &block)
|
92
|
+
response = @http.request(request, &block)
|
96
93
|
|
97
94
|
logger.log_response_info(response, @host)
|
98
95
|
|
@@ -103,32 +100,17 @@ module Vonage
|
|
103
100
|
response
|
104
101
|
end
|
105
102
|
|
106
|
-
def request(path, params: nil, type: Get, response_class: Response,
|
107
|
-
auto_advance =
|
108
|
-
(
|
109
|
-
if !params.nil? && params.key?(:auto_advance)
|
110
|
-
params[:auto_advance]
|
111
|
-
else
|
112
|
-
false
|
113
|
-
end
|
114
|
-
)
|
103
|
+
def request(path, params: nil, type: Get, response_class: Response, &block)
|
104
|
+
auto_advance = !params.nil? && params.key?(:auto_advance) ? params[:auto_advance] : false
|
115
105
|
|
116
|
-
params =
|
117
|
-
params.tap { |params| params.delete(:auto_advance) } if !params.nil? &&
|
118
|
-
params.key?(:auto_advance)
|
106
|
+
params = params.tap { |params| params.delete(:auto_advance) } if !params.nil? && params.key?(:auto_advance)
|
119
107
|
|
120
|
-
request = build_request(path: path, params: params || {}, type: type
|
108
|
+
request = build_request(path: path, params: params || {}, type: type)
|
121
109
|
|
122
110
|
response = make_request!(request, &block)
|
123
111
|
|
124
112
|
if auto_advance
|
125
|
-
iterable_request(
|
126
|
-
path,
|
127
|
-
response: response,
|
128
|
-
response_class: response_class,
|
129
|
-
params: params,
|
130
|
-
&block
|
131
|
-
)
|
113
|
+
iterable_request(path, response: response, response_class: response_class, params: params, &block)
|
132
114
|
else
|
133
115
|
return if block
|
134
116
|
|
@@ -136,59 +118,22 @@ module Vonage
|
|
136
118
|
end
|
137
119
|
end
|
138
120
|
|
139
|
-
def multipart_post_request(path, filepath:, file_name:, mime_type:, params: {}, override_uri: nil, no_auth: false, response_class: Response, auth_data: nil, &block)
|
140
|
-
authentication = self.class.authentication.new(@config) unless no_auth
|
141
|
-
|
142
|
-
uri = override_uri ? URI(override_uri) : URI('https://' + @host + path)
|
143
|
-
|
144
|
-
http = Net::HTTP.new(uri.host, Net::HTTP.https_default_port, p_addr = nil)
|
145
|
-
http.use_ssl = true
|
146
|
-
http.set_debug_output($stdout)
|
147
|
-
|
148
|
-
response = File.open(filepath) do |file|
|
149
|
-
request = Net::HTTP::Post::Multipart.new(
|
150
|
-
uri,
|
151
|
-
params.merge(file: Multipart::Post::UploadIO.new(file, mime_type, file_name))
|
152
|
-
)
|
153
|
-
|
154
|
-
request['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version)
|
155
|
-
|
156
|
-
# Set Authorization header if needed
|
157
|
-
authentication.update(request, auth_data) unless no_auth
|
158
|
-
|
159
|
-
logger.log_request_info(request)
|
160
|
-
|
161
|
-
http.request(request, &block)
|
162
|
-
end
|
163
|
-
|
164
|
-
logger.log_response_info(response, @host)
|
165
|
-
|
166
|
-
return if block
|
167
|
-
|
168
|
-
logger.debug(response.body) if response.body
|
169
|
-
|
170
|
-
parse(response, response_class)
|
171
|
-
end
|
172
|
-
|
173
121
|
def iterable_request(path, response: nil, response_class: nil, params: {}, &block)
|
174
122
|
json_response = ::JSON.parse(response.body)
|
175
123
|
response = parse(response, response_class)
|
176
124
|
remainder = remaining_count(json_response)
|
177
125
|
|
178
126
|
while remainder > 0
|
179
|
-
params = { page_size: json_response[
|
180
|
-
|
181
|
-
if json_response[
|
182
|
-
params[:record_index] = json_response[
|
183
|
-
elsif json_response[
|
184
|
-
|
185
|
-
params[:record_index] = (
|
186
|
-
json_response["record_index"] + json_response["page_size"]
|
187
|
-
)
|
127
|
+
params = { page_size: json_response['page_size'] }
|
128
|
+
|
129
|
+
if json_response['record_index'] && json_response['record_index'] == 0
|
130
|
+
params[:record_index] = json_response['page_size']
|
131
|
+
elsif json_response['record_index'] && json_response['record_index'] != 0
|
132
|
+
params[:record_index] = (json_response['record_index'] + json_response['page_size'])
|
188
133
|
end
|
189
134
|
|
190
|
-
if json_response[
|
191
|
-
params[:page] = json_response[
|
135
|
+
if json_response['total_pages']
|
136
|
+
params[:page] = json_response['page'] + 1
|
192
137
|
end
|
193
138
|
|
194
139
|
request = build_request(path: path, type: Get, params: params)
|
@@ -199,15 +144,11 @@ module Vonage
|
|
199
144
|
json_response = ::JSON.parse(paginated_response.body)
|
200
145
|
remainder = remaining_count(json_response)
|
201
146
|
|
202
|
-
if response.respond_to?(
|
203
|
-
collection_name = collection_name(response[
|
204
|
-
response[
|
205
|
-
*next_response["_embedded"][collection_name]
|
206
|
-
)
|
147
|
+
if response.respond_to?('_embedded')
|
148
|
+
collection_name = collection_name(response['_embedded'])
|
149
|
+
response['_embedded'][collection_name].push(*next_response['_embedded'][collection_name])
|
207
150
|
else
|
208
|
-
response[collection_name(response)].push(
|
209
|
-
*next_response[collection_name(next_response)]
|
210
|
-
)
|
151
|
+
response[collection_name(response)].push(*next_response[collection_name(next_response)])
|
211
152
|
end
|
212
153
|
end
|
213
154
|
|
@@ -215,51 +156,43 @@ module Vonage
|
|
215
156
|
end
|
216
157
|
|
217
158
|
def remaining_count(params)
|
218
|
-
if params.key?(
|
219
|
-
params[
|
220
|
-
elsif params.key?(
|
221
|
-
params[
|
222
|
-
(
|
223
|
-
if params["record_index"] == 0
|
224
|
-
params["page_size"]
|
225
|
-
else
|
226
|
-
(params["record_index"] + params["page_size"])
|
227
|
-
end
|
228
|
-
)
|
159
|
+
if params.key?('total_pages')
|
160
|
+
params['total_pages'] - params['page']
|
161
|
+
elsif params.key?('count')
|
162
|
+
params['count'] - (params['record_index'] == 0 ? params['page_size'] : (params['record_index'] + params['page_size']))
|
229
163
|
else
|
230
164
|
0
|
231
165
|
end
|
232
166
|
end
|
233
167
|
|
234
168
|
def collection_name(params)
|
235
|
-
@collection_name ||=
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
"events"
|
169
|
+
@collection_name ||= case
|
170
|
+
when params.respond_to?('calls')
|
171
|
+
'calls'
|
172
|
+
when params.respond_to?('users')
|
173
|
+
'users'
|
174
|
+
when params.respond_to?('legs')
|
175
|
+
'legs'
|
176
|
+
when params.respond_to?('data')
|
177
|
+
'data'
|
178
|
+
when params.respond_to?('conversations')
|
179
|
+
'conversations'
|
180
|
+
when params.respond_to?('applications')
|
181
|
+
'applications'
|
182
|
+
when params.respond_to?('records')
|
183
|
+
'records'
|
184
|
+
when params.respond_to?('reports')
|
185
|
+
'reports'
|
186
|
+
when params.respond_to?('networks')
|
187
|
+
'networks'
|
188
|
+
when params.respond_to?('countries')
|
189
|
+
'countries'
|
190
|
+
when params.respond_to?('media')
|
191
|
+
'media'
|
192
|
+
when params.respond_to?('numbers')
|
193
|
+
'numbers'
|
194
|
+
when params.respond_to?('events')
|
195
|
+
'events'
|
263
196
|
else
|
264
197
|
params.entity.attributes.keys[0].to_s
|
265
198
|
end
|
@@ -270,7 +203,7 @@ module Vonage
|
|
270
203
|
when Net::HTTPNoContent
|
271
204
|
response_class.new(nil, response)
|
272
205
|
when Net::HTTPSuccess
|
273
|
-
if response['Content-Type']
|
206
|
+
if response['Content-Type'].split(';').first == 'application/json'
|
274
207
|
entity = ::JSON.parse(response.body, object_class: Vonage::Entity)
|
275
208
|
|
276
209
|
response_class.new(entity, response)
|
@@ -294,8 +227,6 @@ module Vonage
|
|
294
227
|
@config.rest_host
|
295
228
|
when :video_host
|
296
229
|
@config.video_host
|
297
|
-
when :vonage_host
|
298
|
-
@config.vonage_host
|
299
230
|
else
|
300
231
|
@config.api_host
|
301
232
|
end
|