vonage 7.2.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/LICENSE.txt +190 -0
- data/README.md +191 -0
- data/lib/vonage.rb +29 -0
- data/lib/vonage/abstract_authentication.rb +9 -0
- data/lib/vonage/account.rb +61 -0
- data/lib/vonage/alerts.rb +72 -0
- data/lib/vonage/applications.rb +148 -0
- data/lib/vonage/applications/list_response.rb +11 -0
- data/lib/vonage/authentication_error.rb +6 -0
- data/lib/vonage/basic.rb +13 -0
- data/lib/vonage/bearer_token.rb +14 -0
- data/lib/vonage/client.rb +134 -0
- data/lib/vonage/client_error.rb +6 -0
- data/lib/vonage/config.rb +208 -0
- data/lib/vonage/conversations.rb +210 -0
- data/lib/vonage/conversations/events.rb +73 -0
- data/lib/vonage/conversations/legs.rb +30 -0
- data/lib/vonage/conversations/members.rb +104 -0
- data/lib/vonage/conversations/users.rb +93 -0
- data/lib/vonage/conversions.rb +19 -0
- data/lib/vonage/entity.rb +51 -0
- data/lib/vonage/error.rb +6 -0
- data/lib/vonage/errors.rb +51 -0
- data/lib/vonage/files.rb +26 -0
- data/lib/vonage/form_data.rb +11 -0
- data/lib/vonage/gsm7.rb +13 -0
- data/lib/vonage/http.rb +43 -0
- data/lib/vonage/json.rb +17 -0
- data/lib/vonage/jwt.rb +43 -0
- data/lib/vonage/key_secret_params.rb +20 -0
- data/lib/vonage/keys.rb +51 -0
- data/lib/vonage/logger.rb +60 -0
- data/lib/vonage/messages.rb +25 -0
- data/lib/vonage/namespace.rb +118 -0
- data/lib/vonage/number_insight.rb +140 -0
- data/lib/vonage/numbers.rb +196 -0
- data/lib/vonage/numbers/list_response.rb +11 -0
- data/lib/vonage/numbers/response.rb +8 -0
- data/lib/vonage/params.rb +27 -0
- data/lib/vonage/pricing.rb +30 -0
- data/lib/vonage/pricing_types.rb +18 -0
- data/lib/vonage/redact.rb +37 -0
- data/lib/vonage/response.rb +25 -0
- data/lib/vonage/secrets.rb +85 -0
- data/lib/vonage/secrets/list_response.rb +11 -0
- data/lib/vonage/server_error.rb +6 -0
- data/lib/vonage/signature.rb +53 -0
- data/lib/vonage/sms.rb +121 -0
- data/lib/vonage/tfa.rb +14 -0
- data/lib/vonage/user_agent.rb +16 -0
- data/lib/vonage/verify.rb +253 -0
- data/lib/vonage/version.rb +5 -0
- data/lib/vonage/voice.rb +250 -0
- data/lib/vonage/voice/dtmf.rb +26 -0
- data/lib/vonage/voice/list_response.rb +11 -0
- data/lib/vonage/voice/stream.rb +44 -0
- data/lib/vonage/voice/talk.rb +48 -0
- data/vonage.gemspec +26 -0
- metadata +155 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Vonage
|
5
|
+
class Alerts < Namespace
|
6
|
+
extend T::Sig
|
7
|
+
self.host = :rest_host
|
8
|
+
|
9
|
+
# Request the list of phone numbers opted out from your campaign.
|
10
|
+
#
|
11
|
+
# @see https://developer.nexmo.com/api/sms/us-short-codes/alerts/subscription
|
12
|
+
#
|
13
|
+
# @return [Response]
|
14
|
+
#
|
15
|
+
sig { returns(Vonage::Response) }
|
16
|
+
def list
|
17
|
+
request('/sc/us/alert/opt-in/query/json')
|
18
|
+
end
|
19
|
+
|
20
|
+
# Remove a phone number from the opt-out list.
|
21
|
+
#
|
22
|
+
# @option params [required, String] :msisdn
|
23
|
+
# The phone number to resubscribe to your campaign and remove from the opt-out list.
|
24
|
+
#
|
25
|
+
# @param [Hash] params
|
26
|
+
#
|
27
|
+
# @return [Response]
|
28
|
+
#
|
29
|
+
# @see https://developer.nexmo.com/api/sms/us-short-codes/alerts/subscription
|
30
|
+
#
|
31
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Vonage::Response) }
|
32
|
+
def remove(params)
|
33
|
+
request('/sc/us/alert/opt-in/manage/json', params: params, type: Post)
|
34
|
+
end
|
35
|
+
|
36
|
+
alias_method :resubscribe, :remove
|
37
|
+
|
38
|
+
# Send an alert to your user.
|
39
|
+
#
|
40
|
+
# @option params [required, String] :to
|
41
|
+
# The single phone number to send pin to.
|
42
|
+
# Mobile number in US format and one recipient per request.
|
43
|
+
#
|
44
|
+
# @option params [Integer] :status_report_req
|
45
|
+
# Set to 1 to receive a delivery receipt.
|
46
|
+
# To receive the delivery receipt, you have to configure a webhook endpoint in Dashboard.
|
47
|
+
#
|
48
|
+
# @option params [String] :client_ref
|
49
|
+
# A 40 character reference string for your internal reporting.
|
50
|
+
#
|
51
|
+
# @option params [Integer] :template
|
52
|
+
# If you have multiple templates, this is the index of the template to call.
|
53
|
+
# The default template starts is 0, each Event Based Alert campaign can have up to 6 templates.
|
54
|
+
# If you have one template only it is the default. That is, template=0.
|
55
|
+
# If you create a request with template=1 the API call will default, template=0 instead.
|
56
|
+
# After you add a valid campaign alert for 2FA, the request will call template 1 instead of template 0.
|
57
|
+
#
|
58
|
+
# @option params [String] :type
|
59
|
+
# Default value is `text`. Possible values are: `text` for plain text SMS or `unicode` only use this when your SMS must contain special characters.
|
60
|
+
#
|
61
|
+
# @param [Hash] params
|
62
|
+
#
|
63
|
+
# @return [Response]
|
64
|
+
#
|
65
|
+
# @see https://developer.nexmo.com/api/sms/us-short-codes/alerts/sending
|
66
|
+
#
|
67
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Vonage::Response) }
|
68
|
+
def send(params)
|
69
|
+
request('/sc/us/alert/json', params: params, type: Post)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Vonage
|
5
|
+
class Applications < Namespace
|
6
|
+
extend T::Sig
|
7
|
+
self.authentication = Basic
|
8
|
+
|
9
|
+
self.request_body = JSON
|
10
|
+
|
11
|
+
self.request_headers['Content-Type'] = 'application/json'
|
12
|
+
|
13
|
+
# Create an application.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# params = {
|
17
|
+
# name: 'Example App',
|
18
|
+
# capabilities: {
|
19
|
+
# 'messages': {
|
20
|
+
# 'webhooks': {
|
21
|
+
# 'inbound_url': {
|
22
|
+
# 'address': 'https://example.com/webhooks/inbound',
|
23
|
+
# 'http_method': 'POST'
|
24
|
+
# },
|
25
|
+
# 'status_url': {
|
26
|
+
# 'address': 'https://example.com/webhooks/status',
|
27
|
+
# 'http_method': 'POST'
|
28
|
+
# }
|
29
|
+
# }
|
30
|
+
# }
|
31
|
+
# }
|
32
|
+
# }
|
33
|
+
#
|
34
|
+
# response = client.applications.create(params)
|
35
|
+
#
|
36
|
+
# @option params [required, String] :name
|
37
|
+
# Application name.
|
38
|
+
#
|
39
|
+
# @option params [Hash] :keys
|
40
|
+
# - **:public_key** (String) Public key
|
41
|
+
#
|
42
|
+
# @option params [Hash] :capabilities
|
43
|
+
# Your application can use multiple products.
|
44
|
+
# This contains the configuration for each product.
|
45
|
+
# This replaces the application `type` from version 1 of the Application API.
|
46
|
+
#
|
47
|
+
# @param [Hash] params
|
48
|
+
#
|
49
|
+
# @return [Response]
|
50
|
+
#
|
51
|
+
# @see https://developer.nexmo.com/api/application.v2#createApplication
|
52
|
+
#
|
53
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Vonage::Response) }
|
54
|
+
def create(params)
|
55
|
+
request('/v2/applications', params: params, type: Post)
|
56
|
+
end
|
57
|
+
|
58
|
+
# List available applications.
|
59
|
+
#
|
60
|
+
# @example
|
61
|
+
# response = client.applications.list
|
62
|
+
# response.each do |item|
|
63
|
+
# puts "#{item.id} #{item.name}"
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# @option params [Integer] :page_size
|
67
|
+
# The number of applications per page.
|
68
|
+
#
|
69
|
+
# @option params [Integer] :page
|
70
|
+
# The current page number (starts at 1).
|
71
|
+
#
|
72
|
+
# @param [Hash] params
|
73
|
+
#
|
74
|
+
# @return [ListResponse]
|
75
|
+
#
|
76
|
+
# @see https://developer.nexmo.com/api/application.v2#listApplication
|
77
|
+
#
|
78
|
+
sig { params(params: T.nilable(T::Hash[Symbol, Integer])).returns(Vonage::Response) }
|
79
|
+
def list(params = nil)
|
80
|
+
request('/v2/applications', params: params, response_class: ListResponse)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Get an application.
|
84
|
+
#
|
85
|
+
# @example
|
86
|
+
# response = client.applications.get(id)
|
87
|
+
#
|
88
|
+
# @param [String] id
|
89
|
+
#
|
90
|
+
# @return [Response]
|
91
|
+
#
|
92
|
+
# @see https://developer.nexmo.com/api/application.v2#getApplication
|
93
|
+
#
|
94
|
+
sig { params(id: String).returns(Vonage::Response) }
|
95
|
+
def get(id)
|
96
|
+
request('/v2/applications/' + id)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Update an application.
|
100
|
+
#
|
101
|
+
# @example
|
102
|
+
# response = client.applications.update(id, answer_method: 'POST')
|
103
|
+
#
|
104
|
+
# @option params [required, String] :name
|
105
|
+
# Application name.
|
106
|
+
#
|
107
|
+
# @option params [Hash] :keys
|
108
|
+
# - **:public_key** (String) Public key
|
109
|
+
#
|
110
|
+
# @option params [Hash] :capabilities
|
111
|
+
# Your application can use multiple products.
|
112
|
+
# This contains the configuration for each product.
|
113
|
+
# This replaces the application `type` from version 1 of the Application API.
|
114
|
+
#
|
115
|
+
# @param [String] id
|
116
|
+
# @param [Hash] params
|
117
|
+
#
|
118
|
+
# @return [Response]
|
119
|
+
#
|
120
|
+
# @see https://developer.nexmo.com/api/application.v2#updateApplication
|
121
|
+
#
|
122
|
+
sig { params(
|
123
|
+
id: String,
|
124
|
+
params: T::Hash[Symbol, T.untyped]
|
125
|
+
).returns(Vonage::Response) }
|
126
|
+
def update(id, params)
|
127
|
+
request('/v2/applications/' + id, params: params, type: Put)
|
128
|
+
end
|
129
|
+
|
130
|
+
# Delete an application.
|
131
|
+
#
|
132
|
+
# @example
|
133
|
+
# response = client.applications.delete(id)
|
134
|
+
#
|
135
|
+
# @note Deleting an application cannot be undone.
|
136
|
+
#
|
137
|
+
# @param [String] id
|
138
|
+
#
|
139
|
+
# @return [Response]
|
140
|
+
#
|
141
|
+
# @see https://developer.nexmo.com/api/application.v2#deleteApplication
|
142
|
+
#
|
143
|
+
sig { params(id: String).returns(Vonage::Response) }
|
144
|
+
def delete(id)
|
145
|
+
request('/v2/applications/' + id, type: Delete)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/lib/vonage/basic.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# typed: ignore
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Vonage
|
5
|
+
class BearerToken < AbstractAuthentication
|
6
|
+
def update(object)
|
7
|
+
return unless object.is_a?(Net::HTTPRequest)
|
8
|
+
|
9
|
+
object['Authorization'] = 'Bearer ' + @config.token
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private_constant :BearerToken
|
14
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module Vonage
|
4
|
+
class Client
|
5
|
+
extend T::Sig
|
6
|
+
|
7
|
+
sig { returns(Vonage::Config) }
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
sig { params(options: T.nilable(T::Hash[Symbol, T.untyped])).void }
|
11
|
+
def initialize(options = nil)
|
12
|
+
@config = T.let(Vonage.config.merge(options), Vonage::Config)
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return [Signature]
|
16
|
+
#
|
17
|
+
sig { returns(T.nilable(Vonage::Signature)) }
|
18
|
+
def signature
|
19
|
+
@signature ||= T.let(Signature.new(config), T.nilable(Vonage::Signature))
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Account]
|
23
|
+
#
|
24
|
+
sig { returns(T.nilable(Vonage::Account)) }
|
25
|
+
def account
|
26
|
+
@account ||= T.let(Account.new(config), T.nilable(Vonage::Account))
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Alerts]
|
30
|
+
#
|
31
|
+
sig { returns(T.nilable(Vonage::Alerts)) }
|
32
|
+
def alerts
|
33
|
+
@alerts ||= T.let(Alerts.new(config), T.nilable(Vonage::Alerts))
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Applications]
|
37
|
+
#
|
38
|
+
sig { returns(T.nilable(Vonage::Applications)) }
|
39
|
+
def applications
|
40
|
+
@applications ||= T.let(Applications.new(config), T.nilable(Vonage::Applications))
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Conversations]
|
44
|
+
#
|
45
|
+
sig { returns(T.nilable(Vonage::Conversations)) }
|
46
|
+
def conversations
|
47
|
+
@conversations ||= T.let(Conversations.new(config), T.nilable(Vonage::Conversations))
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [Conversions]
|
51
|
+
#
|
52
|
+
sig { returns(T.nilable(Vonage::Conversions)) }
|
53
|
+
def conversions
|
54
|
+
@conversions ||= T.let(Conversions.new(config), T.nilable(Vonage::Conversions))
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Files]
|
58
|
+
#
|
59
|
+
sig { returns(T.nilable(Vonage::Files)) }
|
60
|
+
def files
|
61
|
+
@files ||= T.let(Files.new(config), T.nilable(Vonage::Files))
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [Messages]
|
65
|
+
#
|
66
|
+
sig { returns(T.nilable(Vonage::Messages)) }
|
67
|
+
def messages
|
68
|
+
@messages ||= T.let(Messages.new(config), T.nilable(Vonage::Messages))
|
69
|
+
end
|
70
|
+
|
71
|
+
# @return [NumberInsight]
|
72
|
+
#
|
73
|
+
sig { returns(T.nilable(Vonage::NumberInsight)) }
|
74
|
+
def number_insight
|
75
|
+
@number_insight ||= T.let(NumberInsight.new(config), T.nilable(Vonage::NumberInsight))
|
76
|
+
end
|
77
|
+
|
78
|
+
# @return [Numbers]
|
79
|
+
#
|
80
|
+
sig { returns(T.nilable(Vonage::Numbers)) }
|
81
|
+
def numbers
|
82
|
+
@numbers ||= T.let(Numbers.new(config), T.nilable(Vonage::Numbers))
|
83
|
+
end
|
84
|
+
|
85
|
+
# @return [PricingTypes]
|
86
|
+
#
|
87
|
+
sig { returns(T.nilable(Vonage::PricingTypes)) }
|
88
|
+
def pricing
|
89
|
+
@pricing ||= T.let(PricingTypes.new(config), T.nilable(Vonage::PricingTypes))
|
90
|
+
end
|
91
|
+
|
92
|
+
# @return [Redact]
|
93
|
+
#
|
94
|
+
sig { returns(T.nilable(Vonage::Redact)) }
|
95
|
+
def redact
|
96
|
+
@redact ||= T.let(Redact.new(config), T.nilable(Vonage::Redact))
|
97
|
+
end
|
98
|
+
|
99
|
+
# @return [Secrets]
|
100
|
+
#
|
101
|
+
sig { returns(T.nilable(Vonage::Secrets)) }
|
102
|
+
def secrets
|
103
|
+
@secrets ||= T.let(Secrets.new(config), T.nilable(Vonage::Secrets))
|
104
|
+
end
|
105
|
+
|
106
|
+
# @return [SMS]
|
107
|
+
#
|
108
|
+
sig { returns(T.nilable(Vonage::SMS)) }
|
109
|
+
def sms
|
110
|
+
@sms ||= T.let(SMS.new(config), T.nilable(Vonage::SMS))
|
111
|
+
end
|
112
|
+
|
113
|
+
# @return [TFA]
|
114
|
+
#
|
115
|
+
sig { returns(T.nilable(Vonage::TFA)) }
|
116
|
+
def tfa
|
117
|
+
@tfa ||= T.let(TFA.new(config), T.nilable(Vonage::TFA))
|
118
|
+
end
|
119
|
+
|
120
|
+
# @return [Verify]
|
121
|
+
#
|
122
|
+
sig { returns(T.nilable(Vonage::Verify)) }
|
123
|
+
def verify
|
124
|
+
@verify ||= T.let(Verify.new(config), T.nilable(Vonage::Verify))
|
125
|
+
end
|
126
|
+
|
127
|
+
# @return [Voice]
|
128
|
+
#
|
129
|
+
sig { returns(T.nilable(Vonage::Voice)) }
|
130
|
+
def voice
|
131
|
+
@voice ||= T.let(Voice.new(config), T.nilable(Vonage::Voice))
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,208 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
module Vonage
|
6
|
+
class Config
|
7
|
+
extend T::Sig
|
8
|
+
|
9
|
+
sig { void }
|
10
|
+
def initialize
|
11
|
+
self.api_host = 'api.nexmo.com'
|
12
|
+
self.api_key = T.let(ENV['VONAGE_API_KEY'], T.nilable(String))
|
13
|
+
self.api_secret = T.let(ENV['VONAGE_API_SECRET'], T.nilable(String))
|
14
|
+
self.application_id = ENV['VONAGE_APPLICATION_ID']
|
15
|
+
self.logger = (defined?(::Rails.logger) && ::Rails.logger) || Vonage::Logger.new(nil)
|
16
|
+
self.private_key = ENV['VONAGE_PRIVATE_KEY_PATH'] ? File.read(T.must(ENV['VONAGE_PRIVATE_KEY_PATH'])) : ENV['VONAGE_PRIVATE_KEY']
|
17
|
+
self.rest_host = 'rest.nexmo.com'
|
18
|
+
self.signature_secret = ENV['VONAGE_SIGNATURE_SECRET']
|
19
|
+
self.signature_method = ENV['VONAGE_SIGNATURE_METHOD'] || 'md5hash'
|
20
|
+
self.token = T.let(nil, T.nilable(String))
|
21
|
+
end
|
22
|
+
|
23
|
+
# Merges the config with the given options hash.
|
24
|
+
#
|
25
|
+
# @return [Vonage::Config]
|
26
|
+
#
|
27
|
+
sig { params(options: T.nilable(T::Hash[Symbol, T.untyped])).returns(Vonage::Config) }
|
28
|
+
def merge(options)
|
29
|
+
return self if options.nil? || options.empty?
|
30
|
+
|
31
|
+
options.each_with_object(dup) do |(name, value), config|
|
32
|
+
config.write_attribute(name, value)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
sig { returns(String) }
|
37
|
+
attr_accessor :api_host
|
38
|
+
|
39
|
+
# Returns the value of attribute api_key.
|
40
|
+
#
|
41
|
+
# @return [String]
|
42
|
+
#
|
43
|
+
# @raise [AuthenticationError]
|
44
|
+
#
|
45
|
+
sig { returns(T.nilable(String)) }
|
46
|
+
def api_key
|
47
|
+
@api_key = T.let(@api_key, T.nilable(String))
|
48
|
+
unless @api_key
|
49
|
+
raise AuthenticationError.new('No API key provided. ' \
|
50
|
+
'See https://developer.nexmo.com/concepts/guides/authentication for details, ' \
|
51
|
+
'or email support@nexmo.com if you have any questions.')
|
52
|
+
end
|
53
|
+
|
54
|
+
@api_key
|
55
|
+
end
|
56
|
+
|
57
|
+
sig { params(api_key: T.nilable(String)).returns(T.nilable(String)) }
|
58
|
+
attr_writer :api_key
|
59
|
+
|
60
|
+
# Returns the value of attribute api_secret.
|
61
|
+
#
|
62
|
+
# @return [String]
|
63
|
+
#
|
64
|
+
# @raise [AuthenticationError]
|
65
|
+
#
|
66
|
+
sig { returns(T.nilable(String)) }
|
67
|
+
def api_secret
|
68
|
+
@api_secret = T.let(@api_secret, T.nilable(String))
|
69
|
+
unless @api_secret
|
70
|
+
raise AuthenticationError.new('No API secret provided. ' \
|
71
|
+
'See https://developer.nexmo.com/concepts/guides/authentication for details, ' \
|
72
|
+
'or email support@nexmo.com if you have any questions.')
|
73
|
+
end
|
74
|
+
|
75
|
+
@api_secret
|
76
|
+
end
|
77
|
+
|
78
|
+
sig { params(api_secret: T.nilable(String)).returns(T.nilable(String)) }
|
79
|
+
attr_writer :api_secret
|
80
|
+
|
81
|
+
# Returns the value of attribute application_id.
|
82
|
+
#
|
83
|
+
# @return [String]
|
84
|
+
#
|
85
|
+
# @raise [AuthenticationError]
|
86
|
+
#
|
87
|
+
sig { returns(T.nilable(String)) }
|
88
|
+
def application_id
|
89
|
+
@application_id = T.let(@application_id, T.nilable(String))
|
90
|
+
unless @application_id
|
91
|
+
raise AuthenticationError.new('No application_id provided. ' \
|
92
|
+
'Either provide an application_id, or set an auth token. ' \
|
93
|
+
'You can add new applications from the Vonage dashboard. ' \
|
94
|
+
'See https://developer.nexmo.com/concepts/guides/applications for details, ' \
|
95
|
+
'or email support@nexmo.com if you have any questions.')
|
96
|
+
end
|
97
|
+
|
98
|
+
@application_id
|
99
|
+
end
|
100
|
+
|
101
|
+
sig { params(application_id: T.nilable(String)).returns(T.nilable(String)) }
|
102
|
+
attr_writer :application_id
|
103
|
+
|
104
|
+
sig { returns(T.nilable(String)) }
|
105
|
+
attr_accessor :app_name
|
106
|
+
|
107
|
+
sig { returns(T.nilable(String)) }
|
108
|
+
attr_accessor :app_version
|
109
|
+
|
110
|
+
# Returns the value of attribute http.
|
111
|
+
#
|
112
|
+
# @return [Vonage::HTTP::Options]
|
113
|
+
#
|
114
|
+
sig { returns(T.nilable(Vonage::HTTP::Options)) }
|
115
|
+
attr_reader :http
|
116
|
+
|
117
|
+
sig { params(hash: T::Hash[T.untyped, T.untyped]).returns(T.nilable(Vonage::HTTP::Options)) }
|
118
|
+
def http=(hash)
|
119
|
+
@http = T.let(nil, T.nilable(Vonage::HTTP::Options))
|
120
|
+
@http = Vonage::HTTP::Options.new(hash)
|
121
|
+
end
|
122
|
+
|
123
|
+
# Returns the value of attribute logger.
|
124
|
+
#
|
125
|
+
# @return [Vonage::Logger]
|
126
|
+
#
|
127
|
+
sig { returns(T.nilable(Vonage::Logger)) }
|
128
|
+
attr_reader :logger
|
129
|
+
|
130
|
+
# @return [Vonage::Logger]
|
131
|
+
#
|
132
|
+
sig { params(logger: T.nilable(T.any(::Logger, Vonage::Logger))).returns(T.nilable(Vonage::Logger)) }
|
133
|
+
def logger=(logger)
|
134
|
+
@logger = T.let(Logger.new(logger), T.nilable(Vonage::Logger))
|
135
|
+
end
|
136
|
+
|
137
|
+
# Returns the value of attribute private_key.
|
138
|
+
#
|
139
|
+
# @return [String]
|
140
|
+
#
|
141
|
+
# @raise [AuthenticationError]
|
142
|
+
#
|
143
|
+
sig { returns(T.nilable(String)) }
|
144
|
+
def private_key
|
145
|
+
@private_key = T.let(@private_key, T.nilable(String))
|
146
|
+
unless @private_key
|
147
|
+
raise AuthenticationError.new('No private_key provided. ' \
|
148
|
+
'Either provide a private_key, or set an auth token. ' \
|
149
|
+
'You can add new applications from the Vonage dashboard. ' \
|
150
|
+
'See https://developer.nexmo.com/concepts/guides/applications for details, ' \
|
151
|
+
'or email support@nexmo.com if you have any questions.')
|
152
|
+
end
|
153
|
+
|
154
|
+
@private_key
|
155
|
+
end
|
156
|
+
|
157
|
+
sig { params(private_key: T.nilable(String)).returns(T.nilable(String)) }
|
158
|
+
attr_writer :private_key
|
159
|
+
|
160
|
+
sig { returns(String) }
|
161
|
+
attr_accessor :rest_host
|
162
|
+
|
163
|
+
# Returns the value of attribute signature_secret.
|
164
|
+
#
|
165
|
+
# @return [String]
|
166
|
+
#
|
167
|
+
# @raise [AuthenticationError]
|
168
|
+
#
|
169
|
+
sig { returns(T.nilable(String)) }
|
170
|
+
def signature_secret
|
171
|
+
@signature_secret = T.let(@signature_secret, T.nilable(String))
|
172
|
+
unless @signature_secret
|
173
|
+
raise AuthenticationError.new('No signature_secret provided. ' \
|
174
|
+
'You can find your signature secret in the Vonage dashboard. ' \
|
175
|
+
'See https://developer.nexmo.com/concepts/guides/signing-messages for details, ' \
|
176
|
+
'or email support@nexmo.com if you have any questions.')
|
177
|
+
end
|
178
|
+
|
179
|
+
@signature_secret
|
180
|
+
end
|
181
|
+
|
182
|
+
sig { params(signature_secret: T.nilable(String)).returns(T.nilable(String)) }
|
183
|
+
attr_writer :signature_secret
|
184
|
+
|
185
|
+
sig { returns(String) }
|
186
|
+
attr_accessor :signature_method
|
187
|
+
|
188
|
+
# Returns the value of attribute token, or a temporary short lived token.
|
189
|
+
#
|
190
|
+
# @return [String]
|
191
|
+
#
|
192
|
+
sig { returns(T.nilable(String)) }
|
193
|
+
def token
|
194
|
+
@token = T.let(nil, T.nilable(String))
|
195
|
+
@token || JWT.generate({application_id: application_id}, T.must(private_key))
|
196
|
+
end
|
197
|
+
|
198
|
+
sig { params(token: T.nilable(String)).returns(T.nilable(String)) }
|
199
|
+
attr_writer :token
|
200
|
+
|
201
|
+
protected
|
202
|
+
|
203
|
+
sig { params(name: Symbol, value: T.nilable(T.untyped)).void }
|
204
|
+
def write_attribute(name, value)
|
205
|
+
public_send(:"#{name}=", value)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|