vonage 7.25.0 → 7.26.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/vonage/basic.rb +1 -1
- data/lib/vonage/bearer_token.rb +1 -1
- data/lib/vonage/client.rb +14 -0
- data/lib/vonage/key_secret_params.rb +3 -2
- data/lib/vonage/keys.rb +4 -1
- data/lib/vonage/namespace.rb +9 -12
- data/lib/vonage/network_authentication/client_authentication.rb +39 -0
- data/lib/vonage/network_authentication/server_authentication.rb +47 -0
- data/lib/vonage/network_authentication.rb +22 -0
- data/lib/vonage/network_number_verification.rb +92 -0
- data/lib/vonage/network_sim_swap.rb +84 -0
- data/lib/vonage/verify2/start_verification_options.rb +2 -1
- data/lib/vonage/version.rb +1 -1
- data/lib/vonage/voice/actions/connect.rb +1 -0
- data/lib/vonage/voice.rb +2 -0
- data/lib/vonage.rb +1 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d3865caa299175327806358dbe9a66e59abefa41240a5d9a847e5e73a37ea50
|
4
|
+
data.tar.gz: 861a7ae004b3908083af43cae0809330732dc07aa7be22a3cc362dc8b538fdab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 336c7b033206cf204f41e513a2dc8a4c56b57750660e17b37aede3d200aedcced48352ab18ffa3d44f7924df34548f767f19c9189dc385d9f2557a584d399bd7
|
7
|
+
data.tar.gz: da28e64d300d4f70c789e670c10f60beb9fbb058c1da3af8f2f995a8a61541d5b73cea93342f0a5f3b1b0a620dbba5c277fe5b8617259a52446bbbbeed09042e
|
data/README.md
CHANGED
@@ -528,6 +528,8 @@ The following is a list of Vonage APIs for which the Ruby SDK currently provides
|
|
528
528
|
* [Conversation API](https://developer.vonage.com/en/conversation/overview)
|
529
529
|
* [Meetings API](https://developer.vonage.com/en/meetings/overview)
|
530
530
|
* [Messages API](https://developer.vonage.com/en/messages/overview)
|
531
|
+
* [Network Number Verification API](https://developer.vonage.com/en/number-verification/overview)
|
532
|
+
* [Network SIM Swap API](https://developer.vonage.com/en/sim-swap/overview)
|
531
533
|
* [Number Insight API](https://developer.vonage.com/en/number-insight/overview)
|
532
534
|
* [Numbers API](https://developer.vonage.com/en/numbers/overview)
|
533
535
|
* [Proactive Connect API](https://developer.vonage.com/en/proactive-connect/overview) *
|
data/lib/vonage/basic.rb
CHANGED
data/lib/vonage/bearer_token.rb
CHANGED
data/lib/vonage/client.rb
CHANGED
@@ -91,6 +91,20 @@ module Vonage
|
|
91
91
|
@messaging ||= T.let(Messaging.new(config), T.nilable(Vonage::Messaging))
|
92
92
|
end
|
93
93
|
|
94
|
+
# @return [NetworkNumberVerification]
|
95
|
+
#
|
96
|
+
sig { returns(T.nilable(Vonage::NetworkNumberVerification)) }
|
97
|
+
def network_number_verification
|
98
|
+
@network_number_verification ||= T.let(NetworkNumberVerification.new(config), T.nilable(Vonage::NetworkNumberVerification))
|
99
|
+
end
|
100
|
+
|
101
|
+
# @return [NetworkSIMSwap]
|
102
|
+
#
|
103
|
+
sig { returns(T.nilable(Vonage::NetworkSIMSwap)) }
|
104
|
+
def network_sim_swap
|
105
|
+
@network_sim_swap ||= T.let(NetworkSIMSwap.new(config), T.nilable(Vonage::NetworkSIMSwap))
|
106
|
+
end
|
107
|
+
|
94
108
|
# @return [NumberInsight]
|
95
109
|
#
|
96
110
|
sig { returns(T.nilable(Vonage::NumberInsight)) }
|
@@ -5,9 +5,10 @@ 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)
|
8
|
+
object: T.any(T::Hash[T.untyped, T.untyped], URI::HTTPS, Net::HTTP::Post, Net::HTTP::Get),
|
9
|
+
data: T.nilable(Hash)
|
9
10
|
).void }
|
10
|
-
def update(object)
|
11
|
+
def update(object, data)
|
11
12
|
return unless object.is_a?(Hash)
|
12
13
|
|
13
14
|
@config = T.let(@config, T.nilable(Vonage::Config))
|
data/lib/vonage/keys.rb
CHANGED
data/lib/vonage/namespace.rb
CHANGED
@@ -57,18 +57,15 @@ module Vonage
|
|
57
57
|
Post = Net::HTTP::Post
|
58
58
|
Delete = Net::HTTP::Delete
|
59
59
|
|
60
|
-
def build_request(path:, type: Get, params: {})
|
60
|
+
def build_request(path:, type: Get, params: {}, auth_data: nil)
|
61
61
|
authentication = self.class.authentication.new(@config)
|
62
|
-
authentication.update(params)
|
62
|
+
authentication.update(params, auth_data)
|
63
63
|
|
64
64
|
uri = URI("https://" + @host + path)
|
65
65
|
unless type.const_get(:REQUEST_HAS_BODY) || params.empty?
|
66
66
|
uri.query = Params.encode(params)
|
67
67
|
end
|
68
68
|
|
69
|
-
# Set BasicAuth if neeeded
|
70
|
-
authentication.update(uri)
|
71
|
-
|
72
69
|
# instantiate request
|
73
70
|
request = type.new(uri)
|
74
71
|
|
@@ -80,8 +77,8 @@ module Vonage
|
|
80
77
|
request["Accept"] = "application/json"
|
81
78
|
self.class.request_headers.each { |key, value| request[key] = value }
|
82
79
|
|
83
|
-
# Set
|
84
|
-
authentication.update(request)
|
80
|
+
# Set Authorization header if needed
|
81
|
+
authentication.update(request, auth_data)
|
85
82
|
|
86
83
|
# set body
|
87
84
|
if type.const_get(:REQUEST_HAS_BODY)
|
@@ -106,7 +103,7 @@ module Vonage
|
|
106
103
|
response
|
107
104
|
end
|
108
105
|
|
109
|
-
def request(path, params: nil, type: Get, response_class: Response, &block)
|
106
|
+
def request(path, params: nil, type: Get, response_class: Response, auth_data: nil, &block)
|
110
107
|
auto_advance =
|
111
108
|
(
|
112
109
|
if !params.nil? && params.key?(:auto_advance)
|
@@ -120,7 +117,7 @@ module Vonage
|
|
120
117
|
params.tap { |params| params.delete(:auto_advance) } if !params.nil? &&
|
121
118
|
params.key?(:auto_advance)
|
122
119
|
|
123
|
-
request = build_request(path: path, params: params || {}, type: type)
|
120
|
+
request = build_request(path: path, params: params || {}, type: type, auth_data: auth_data)
|
124
121
|
|
125
122
|
response = make_request!(request, &block)
|
126
123
|
|
@@ -139,7 +136,7 @@ module Vonage
|
|
139
136
|
end
|
140
137
|
end
|
141
138
|
|
142
|
-
def multipart_post_request(path, filepath:, file_name:, mime_type:, params: {}, override_uri: nil, no_auth: false, response_class: Response, &block)
|
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)
|
143
140
|
authentication = self.class.authentication.new(@config) unless no_auth
|
144
141
|
|
145
142
|
uri = override_uri ? URI(override_uri) : URI('https://' + @host + path)
|
@@ -156,8 +153,8 @@ module Vonage
|
|
156
153
|
|
157
154
|
request['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version)
|
158
155
|
|
159
|
-
# Set
|
160
|
-
authentication.update(request) unless no_auth
|
156
|
+
# Set Authorization header if needed
|
157
|
+
authentication.update(request, auth_data) unless no_auth
|
161
158
|
|
162
159
|
logger.log_request_info(request)
|
163
160
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Vonage
|
5
|
+
class NetworkAuthentication::ClientAuthentication < Namespace
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
self.authentication = BearerToken
|
9
|
+
|
10
|
+
self.host = :vonage_host
|
11
|
+
|
12
|
+
self.request_headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
13
|
+
|
14
|
+
def token(oidc_auth_code:, redirect_uri:, **params)
|
15
|
+
request(
|
16
|
+
'/oauth2/token',
|
17
|
+
params: {
|
18
|
+
grant_type: 'authorization_code',
|
19
|
+
code: oidc_auth_code,
|
20
|
+
redirect_uri: redirect_uri
|
21
|
+
},
|
22
|
+
type: Post
|
23
|
+
).access_token
|
24
|
+
end
|
25
|
+
|
26
|
+
def generate_oidc_uri(purpose:, api_scope:, login_hint:, redirect_uri:, state:)
|
27
|
+
scope = "openid%20dpv:#{purpose}%23#{api_scope}"
|
28
|
+
uri = "https://oidc.idp.vonage.com/oauth2/auth?" +
|
29
|
+
"client_id=#{@config.application_id}" +
|
30
|
+
"&response_type=code" +
|
31
|
+
"&scope=#{scope}" +
|
32
|
+
"&login_hint=#{login_hint}" +
|
33
|
+
"&redirect_uri=#{redirect_uri}" +
|
34
|
+
"&state=#{state}"
|
35
|
+
|
36
|
+
uri
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Vonage
|
5
|
+
class NetworkAuthentication::ServerAuthentication < Namespace
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
self.authentication = BearerToken
|
9
|
+
|
10
|
+
self.host = :vonage_host
|
11
|
+
|
12
|
+
self.request_headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
13
|
+
|
14
|
+
def token(purpose:, api_scope:, login_hint:, **params)
|
15
|
+
auth_req_id = bc_authorize(
|
16
|
+
purpose: purpose,
|
17
|
+
api_scope: api_scope,
|
18
|
+
login_hint: login_hint
|
19
|
+
).auth_req_id
|
20
|
+
|
21
|
+
request_access_token(auth_req_id: auth_req_id).access_token
|
22
|
+
end
|
23
|
+
|
24
|
+
def bc_authorize(purpose:, api_scope:, login_hint:)
|
25
|
+
scope = "openid dpv:#{purpose}##{api_scope}"
|
26
|
+
request(
|
27
|
+
"/oauth2/bc-authorize",
|
28
|
+
params: {
|
29
|
+
scope: scope,
|
30
|
+
login_hint: login_hint
|
31
|
+
},
|
32
|
+
type: Post
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def request_access_token(auth_req_id:)
|
37
|
+
request(
|
38
|
+
"/oauth2/token",
|
39
|
+
params: {
|
40
|
+
grant_type: 'urn:openid:params:grant-type:ciba',
|
41
|
+
auth_req_id: auth_req_id
|
42
|
+
},
|
43
|
+
type: Post
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Vonage
|
5
|
+
class NetworkAuthentication < AbstractAuthentication
|
6
|
+
def update(object, data)
|
7
|
+
return unless object.is_a?(Net::HTTPRequest)
|
8
|
+
|
9
|
+
token = self.public_send(data[:auth_flow]).token(**data)
|
10
|
+
|
11
|
+
object['Authorization'] = 'Bearer ' + token
|
12
|
+
end
|
13
|
+
|
14
|
+
def client_authentication
|
15
|
+
@client_authentication ||= ClientAuthentication.new(@config)
|
16
|
+
end
|
17
|
+
|
18
|
+
def server_authentication
|
19
|
+
@server_authentication ||= ServerAuthentication.new(@config)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
require 'phonelib'
|
4
|
+
|
5
|
+
module Vonage
|
6
|
+
class NetworkNumberVerification < Namespace
|
7
|
+
extend T::Sig
|
8
|
+
include Keys
|
9
|
+
|
10
|
+
self.authentication = NetworkAuthentication
|
11
|
+
|
12
|
+
self.host = :vonage_host
|
13
|
+
|
14
|
+
self.request_body = JSON
|
15
|
+
|
16
|
+
# Verifies if the specified phone number (plain text or hashed format) matches the one that the user is currently using.
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# response = client.network_number_verification.verify(
|
20
|
+
# phone_number: '+447900000000',
|
21
|
+
# auth_data: {
|
22
|
+
# oidc_auth_code: '0dadaeb4-7c79-4d39-b4b0-5a6cc08bf537',
|
23
|
+
# redirect_uri: 'https://example.com/callback'
|
24
|
+
# }
|
25
|
+
# )
|
26
|
+
#
|
27
|
+
# @param [required, String] :phone_number The phone number to check, in the E.164 format, prepended with a `+`.
|
28
|
+
#
|
29
|
+
# @param [required, Hash] :auth_data A hash of authentication data required for the client token request. Must contain the following keys:
|
30
|
+
# @option auth_data [required, String] :oidc_auth_code The OIDC auth code.
|
31
|
+
# @option auth_data [required, String] :redirect_uri The redirect URI.
|
32
|
+
# @see https://developer.vonage.com/en/getting-started-network/authentication#client-authentication-flow
|
33
|
+
#
|
34
|
+
# @return [Response]
|
35
|
+
#
|
36
|
+
# @see https://developer.vonage.com/en/api/camara/number-verification#verifyNumberVerification
|
37
|
+
#
|
38
|
+
sig { params(phone_number: String, auth_data: Hash).returns(Vonage::Response) }
|
39
|
+
def verify(phone_number:, auth_data:)
|
40
|
+
raise ArgumentError.new("`phone_number` must be in E.164 format") unless Phonelib.parse(phone_number).valid?
|
41
|
+
raise ArgumentError.new("`phone_number` must be prepended with a `+`") unless phone_number.start_with?('+')
|
42
|
+
raise ArgumentError.new("`auth_data` must contain key `:oidc_auth_code`") unless auth_data.has_key?(:oidc_auth_code)
|
43
|
+
raise ArgumentError.new("`auth_data[:oidc_auth_code]` must be a String") unless auth_data[:oidc_auth_code].is_a?(String)
|
44
|
+
raise ArgumentError.new("`auth_data` must contain key `:redirect_uri`") unless auth_data.has_key?(:redirect_uri)
|
45
|
+
raise ArgumentError.new("`auth_data[:redirect_uri]` must be a String") unless auth_data[:redirect_uri].is_a?(String)
|
46
|
+
|
47
|
+
params = {phone_number: phone_number}
|
48
|
+
|
49
|
+
request(
|
50
|
+
'/camara/number-verification/v031/verify',
|
51
|
+
params: camelcase(params),
|
52
|
+
type: Post,
|
53
|
+
auth_data: {
|
54
|
+
oidc_auth_code: auth_data[:oidc_auth_code],
|
55
|
+
redirect_uri: auth_data[:redirect_uri],
|
56
|
+
auth_flow: :client_authentication
|
57
|
+
}
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Creates a URL for a client-side OIDC request.
|
62
|
+
#
|
63
|
+
# @example
|
64
|
+
# response = client.network_number_verification.generate_oidc_uri(
|
65
|
+
# phone_number: '+447900000000',
|
66
|
+
# redirect_uri: 'https://example.com/callback'
|
67
|
+
# )
|
68
|
+
#
|
69
|
+
# @param [required, String] :phone_number The phone number that will be checked during the verification request.
|
70
|
+
#
|
71
|
+
# @param [required, String] :redirect_uri The URI that will receive the callback containing the OIDC auth code.
|
72
|
+
#
|
73
|
+
# @param [required, String] :state A string that you can use for tracking.
|
74
|
+
# Used to set a unique identifier for each access token you generate.
|
75
|
+
#
|
76
|
+
# @return [String]
|
77
|
+
#
|
78
|
+
# @see https://developer.vonage.com/en/getting-started-network/authentication#1-make-an-oidc-request
|
79
|
+
sig { params(phone_number: String, redirect_uri: String, state: String).returns(String) }
|
80
|
+
def generate_oidc_uri(phone_number:, redirect_uri:, state:)
|
81
|
+
params = {
|
82
|
+
purpose: 'FraudPreventionAndDetection',
|
83
|
+
api_scope: 'number-verification-verify-read',
|
84
|
+
login_hint: phone_number,
|
85
|
+
redirect_uri: redirect_uri,
|
86
|
+
state: state
|
87
|
+
}
|
88
|
+
|
89
|
+
Vonage::NetworkAuthentication::ClientAuthentication.new(@config).generate_oidc_uri(**params)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
require 'phonelib'
|
4
|
+
|
5
|
+
module Vonage
|
6
|
+
class NetworkSIMSwap < Namespace
|
7
|
+
extend T::Sig
|
8
|
+
include Keys
|
9
|
+
|
10
|
+
self.authentication = NetworkAuthentication
|
11
|
+
|
12
|
+
self.host = :vonage_host
|
13
|
+
|
14
|
+
self.request_body = JSON
|
15
|
+
|
16
|
+
# Check if SIM swap has been performed during a past period.
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# response = client.network_sim_swap.check(phone_number: '+447900000000')
|
20
|
+
#
|
21
|
+
# @param [required, String] :phone_number The phone number to check, in the E.164 format, prepended with a `+`.
|
22
|
+
#
|
23
|
+
# @param [optional, Integer] :max_age Period in hours to be checked for SIM swap
|
24
|
+
#
|
25
|
+
# @return [Response]
|
26
|
+
#
|
27
|
+
# @see https://developer.vonage.com/en/api/camara/sim-swap#checkSimSwap
|
28
|
+
#
|
29
|
+
sig { params(phone_number: String, max_age: T.nilable(Integer)).returns(Vonage::Response) }
|
30
|
+
def check(phone_number:, max_age: nil)
|
31
|
+
raise ArgumentError.new("`phone_number` must be in E.164 format") unless Phonelib.parse(phone_number).valid?
|
32
|
+
raise ArgumentError.new("`phone_number` must be prepended with a `+`") unless phone_number.start_with?('+')
|
33
|
+
if max_age
|
34
|
+
raise ArgumentError.new("`max_age` must between 1 and 2400") unless max_age.between?(1, 2400)
|
35
|
+
end
|
36
|
+
|
37
|
+
params = {phone_number: phone_number}
|
38
|
+
params[:max_age] = max_age if max_age
|
39
|
+
|
40
|
+
request(
|
41
|
+
'/camara/sim-swap/v040/check',
|
42
|
+
params: camelcase(params),
|
43
|
+
type: Post,
|
44
|
+
auth_data: {
|
45
|
+
login_hint: phone_number,
|
46
|
+
purpose: 'FraudPreventionAndDetection',
|
47
|
+
api_scope: 'check-sim-swap',
|
48
|
+
auth_flow: :server_authentication
|
49
|
+
}
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Get timestamp of last MSISDN <-> IMSI pairing change for a mobile user account provided with MSIDN.
|
54
|
+
#
|
55
|
+
# @example
|
56
|
+
# response = client.network_sim_swap.retrieve_date(phone_number: '+447900000000')
|
57
|
+
#
|
58
|
+
# @param [required, String] :phone_number The phone number to check, in the E.164 format, prepended with a `+`.
|
59
|
+
#
|
60
|
+
# @return [Response]
|
61
|
+
#
|
62
|
+
# @see https://developer.vonage.com/en/api/camara/sim-swap#retrieveSimSwapDate
|
63
|
+
#
|
64
|
+
sig { params(phone_number: String).returns(Vonage::Response) }
|
65
|
+
def retrieve_date(phone_number:)
|
66
|
+
raise ArgumentError.new("`phone_number` must be in E.164 format") unless Phonelib.parse(phone_number).valid?
|
67
|
+
raise ArgumentError.new("`phone_number` must be prepended with a `+`") unless phone_number.start_with?('+')
|
68
|
+
|
69
|
+
params = {phone_number: phone_number}
|
70
|
+
|
71
|
+
request(
|
72
|
+
'/camara/sim-swap/v040/retrieve-date',
|
73
|
+
params: camelcase(params),
|
74
|
+
type: Post,
|
75
|
+
auth_data: {
|
76
|
+
login_hint: phone_number,
|
77
|
+
purpose: 'FraudPreventionAndDetection',
|
78
|
+
api_scope: 'retrieve-sim-swap-date',
|
79
|
+
auth_flow: :server_authentication
|
80
|
+
}
|
81
|
+
)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -5,7 +5,7 @@ module Vonage
|
|
5
5
|
class Verify2::StartVerificationOptions
|
6
6
|
VALID_OPTS = [:locale, :channel_timeout, :client_ref, :code_length, :code, :fraud_check].freeze
|
7
7
|
|
8
|
-
MIN_CHANNEL_TIMEOUT, MAX_CHANNEL_TIMEOUT = [
|
8
|
+
MIN_CHANNEL_TIMEOUT, MAX_CHANNEL_TIMEOUT = [15, 900]
|
9
9
|
|
10
10
|
MIN_CODE_LENGTH, MAX_CODE_LENGTH = [4, 10]
|
11
11
|
|
@@ -22,6 +22,7 @@ module Vonage
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def channel_timeout=(channel_timeout)
|
25
|
+
raise ArgumentError, "Invalid 'channel_timeout' #{channel_timeout}. Must be an integer" unless channel_timeout.is_a?(Integer)
|
25
26
|
unless channel_timeout.between?(MIN_CHANNEL_TIMEOUT, MAX_CHANNEL_TIMEOUT)
|
26
27
|
raise ArgumentError, "Invalid 'channel_timeout' #{channel_timeout}. Must be between #{MIN_CHANNEL_TIMEOUT} and #{MAX_CHANNEL_TIMEOUT} (inclusive)"
|
27
28
|
end
|
data/lib/vonage/version.rb
CHANGED
data/lib/vonage/voice.rb
CHANGED
@@ -18,6 +18,8 @@ module Vonage
|
|
18
18
|
#
|
19
19
|
# @option params [required, Array<Hash>] :to
|
20
20
|
# Connect to a Phone (PSTN) number, SIP Endpoint, Websocket, or VBC extension.
|
21
|
+
# The `to` Hash can contain a number of different properties depending on the `type`.
|
22
|
+
# See the API reference for specific details.
|
21
23
|
#
|
22
24
|
# @option params [Hash] :from
|
23
25
|
# Connect to a Phone (PSTN) number. Should not be set if **:random_from_number** is **true**
|
data/lib/vonage.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vonage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.26.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vonage
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: vonage-jwt
|
@@ -189,6 +189,11 @@ files:
|
|
189
189
|
- lib/vonage/messaging/channels/whats_app.rb
|
190
190
|
- lib/vonage/messaging/message.rb
|
191
191
|
- lib/vonage/namespace.rb
|
192
|
+
- lib/vonage/network_authentication.rb
|
193
|
+
- lib/vonage/network_authentication/client_authentication.rb
|
194
|
+
- lib/vonage/network_authentication/server_authentication.rb
|
195
|
+
- lib/vonage/network_number_verification.rb
|
196
|
+
- lib/vonage/network_sim_swap.rb
|
192
197
|
- lib/vonage/number_insight.rb
|
193
198
|
- lib/vonage/number_insight_2.rb
|
194
199
|
- lib/vonage/numbers.rb
|