nexmo 6.3.0 → 7.2.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 +28 -9
- data/lib/nexmo.rb +1 -1
- data/lib/nexmo/abstract_authentication.rb +0 -2
- data/lib/nexmo/account.rb +5 -1
- data/lib/nexmo/alerts.rb +5 -1
- data/lib/nexmo/applications.rb +24 -4
- data/lib/nexmo/client.rb +45 -24
- data/lib/nexmo/config.rb +43 -10
- data/lib/nexmo/conversations.rb +24 -1
- data/lib/nexmo/conversations/events.rb +1 -1
- data/lib/nexmo/conversations/legs.rb +1 -1
- data/lib/nexmo/conversations/members.rb +1 -1
- data/lib/nexmo/conversations/users.rb +1 -1
- data/lib/nexmo/conversions.rb +4 -1
- data/lib/nexmo/entity.rb +2 -2
- data/lib/nexmo/errors.rb +8 -1
- data/lib/nexmo/files.rb +7 -3
- data/lib/nexmo/gsm7.rb +0 -2
- data/lib/nexmo/http.rb +12 -4
- data/lib/nexmo/json.rb +4 -1
- data/lib/nexmo/jwt.rb +11 -12
- data/lib/nexmo/key_secret_params.rb +9 -3
- data/lib/nexmo/keys.rb +24 -3
- data/lib/nexmo/logger.rb +14 -5
- data/lib/nexmo/messages.rb +6 -1
- data/lib/nexmo/namespace.rb +2 -10
- data/lib/nexmo/number_insight.rb +21 -7
- data/lib/nexmo/numbers.rb +1 -1
- data/lib/nexmo/pricing.rb +1 -1
- data/lib/nexmo/pricing_types.rb +1 -1
- data/lib/nexmo/redact.rb +4 -1
- data/lib/nexmo/response.rb +1 -1
- data/lib/nexmo/secrets.rb +1 -1
- data/lib/nexmo/signature.rb +1 -1
- data/lib/nexmo/sms.rb +10 -8
- data/lib/nexmo/tfa.rb +1 -1
- data/lib/nexmo/verify.rb +93 -18
- data/lib/nexmo/version.rb +1 -1
- data/lib/nexmo/{calls.rb → voice.rb} +12 -12
- data/lib/nexmo/{calls → voice}/dtmf.rb +2 -2
- data/lib/nexmo/{calls → voice}/list_response.rb +1 -1
- data/lib/nexmo/{calls → voice}/stream.rb +2 -2
- data/lib/nexmo/{calls → voice}/talk.rb +2 -2
- data/nexmo.gemspec +2 -1
- metadata +25 -14
- data/lib/nexmo/number_insight/response.rb +0 -7
- data/lib/nexmo/sms/response.rb +0 -8
- data/lib/nexmo/verify/response.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad124eb0e0e93884dc48ed8257b977c2cc365b19668326751d0fa9c0dd843696
|
4
|
+
data.tar.gz: a7e1dae46b7e4c9d86b49fa51f6e74679ec1df56d55961e81e1a8d12b1831f29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4de53e3319290efe704e16603a09aa79af15cc47aaf75f539e1e442b040d6e86f7427e6a412702c0557cd1d43c1ee8b31b38e71646ac615766277ed63caa590c
|
7
|
+
data.tar.gz: 57c846af9f53f5537a6aeda3d588e36c6ef41c273f18640fe2214e37428ecd8d5ba7cfe91b619fc5035c43b0847a9507d97b9b036aa3fc1d6bb6b67bf975601f
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Nexmo Client Library for Ruby
|
2
2
|
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/nexmo.svg)](https://badge.fury.io/rb/nexmo) [![
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/nexmo.svg)](https://badge.fury.io/rb/nexmo) [![Coverage Status](https://github.com/nexmo/nexmo-ruby/workflows/CI/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/Nexmo/nexmo-ruby/badge.svg?branch=coveralls)](https://coveralls.io/github/Nexmo/nexmo-ruby?branch=master)
|
4
|
+
|
5
|
+
<img src="https://developer.nexmo.com/assets/images/Vonage_Nexmo.svg" height="48px" alt="Nexmo is now known as Vonage" />
|
4
6
|
|
5
7
|
This is the Ruby client library for Nexmo's API. To use it you'll
|
6
8
|
need a Nexmo account. Sign up [for free at nexmo.com][signup].
|
@@ -8,9 +10,10 @@ need a Nexmo account. Sign up [for free at nexmo.com][signup].
|
|
8
10
|
* [Requirements](#requirements)
|
9
11
|
* [Installation](#installation)
|
10
12
|
* [Usage](#usage)
|
11
|
-
* [Logging](#logging)
|
12
|
-
* [
|
13
|
-
* [
|
13
|
+
* [Logging](#logging)
|
14
|
+
* [Overriding the default hosts](#overriding-the-default-hosts)
|
15
|
+
* [JWT authentication](#jwt-authentication)
|
16
|
+
* [Webhook signatures](#webhook-signatures)
|
14
17
|
* [Documentation](#documentation)
|
15
18
|
* [License](#license)
|
16
19
|
|
@@ -73,6 +76,21 @@ By default the library sets the logger to `Rails.logger` if it is defined.
|
|
73
76
|
To disable logging set the logger to `nil`.
|
74
77
|
|
75
78
|
|
79
|
+
## Overriding the default hosts
|
80
|
+
|
81
|
+
To override the default hosts that the SDK uses for HTTP requests, you need to
|
82
|
+
specify the `api_host`, `rest_host` or both in the client configuration. For example:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
client = Nexmo::Client.new(
|
86
|
+
api_host: 'api-sg-1.nexmo.com',
|
87
|
+
rest_host: 'rest-sg-1.nexmo.com'
|
88
|
+
)
|
89
|
+
```
|
90
|
+
|
91
|
+
By default the hosts are set to `api.nexmo.com` and `rest.nexmo.com`, respectively.
|
92
|
+
|
93
|
+
|
76
94
|
## JWT authentication
|
77
95
|
|
78
96
|
To call newer endpoints that support JWT authentication such as the Voice API you'll
|
@@ -94,18 +112,19 @@ the token option. For example:
|
|
94
112
|
```ruby
|
95
113
|
claims = {
|
96
114
|
application_id: application_id,
|
115
|
+
private_key: 'path/to/private.key',
|
97
116
|
nbf: 1483315200,
|
98
|
-
|
99
|
-
iat: 1483228800
|
117
|
+
ttl: 800
|
100
118
|
}
|
101
119
|
|
102
|
-
|
103
|
-
|
104
|
-
token = Nexmo::JWT.generate(claims, private_key)
|
120
|
+
token = Nexmo::JWT.generate(claims)
|
105
121
|
|
106
122
|
client = Nexmo::Client.new(token: token)
|
107
123
|
````
|
108
124
|
|
125
|
+
Documentation for the Nexmo Ruby JWT generator gem can be found at
|
126
|
+
[https://www.rubydoc.info/github/nexmo/nexmo-jwt-ruby](https://www.rubydoc.info/github/nexmo/nexmo-jwt-ruby).
|
127
|
+
The documentation outlines all the possible parameters you can use to customize and build a token with.
|
109
128
|
|
110
129
|
## Webhook signatures
|
111
130
|
|
data/lib/nexmo.rb
CHANGED
data/lib/nexmo/account.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
5
|
class Account < Namespace
|
6
|
+
extend T::Sig
|
6
7
|
include Keys
|
7
8
|
|
8
9
|
self.host = :rest_host
|
@@ -13,6 +14,7 @@ module Nexmo
|
|
13
14
|
#
|
14
15
|
# @see https://developer.nexmo.com/api/developer/account#get-balance
|
15
16
|
#
|
17
|
+
sig { returns(Nexmo::Response) }
|
16
18
|
def balance
|
17
19
|
request('/account/get-balance')
|
18
20
|
end
|
@@ -35,6 +37,7 @@ module Nexmo
|
|
35
37
|
#
|
36
38
|
# @see https://developer.nexmo.com/api/developer/account#settings
|
37
39
|
#
|
40
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
38
41
|
def update(params)
|
39
42
|
request('/account/settings', params: camelcase(params), type: Post)
|
40
43
|
end
|
@@ -50,6 +53,7 @@ module Nexmo
|
|
50
53
|
#
|
51
54
|
# @see https://developer.nexmo.com/api/developer/account#top-up
|
52
55
|
#
|
56
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
53
57
|
def topup(params)
|
54
58
|
request('/account/top-up', params: params, type: Post)
|
55
59
|
end
|
data/lib/nexmo/alerts.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
5
|
class Alerts < Namespace
|
6
|
+
extend T::Sig
|
6
7
|
self.host = :rest_host
|
7
8
|
|
8
9
|
# Request the list of phone numbers opted out from your campaign.
|
@@ -11,6 +12,7 @@ module Nexmo
|
|
11
12
|
#
|
12
13
|
# @return [Response]
|
13
14
|
#
|
15
|
+
sig { returns(Nexmo::Response) }
|
14
16
|
def list
|
15
17
|
request('/sc/us/alert/opt-in/query/json')
|
16
18
|
end
|
@@ -26,6 +28,7 @@ module Nexmo
|
|
26
28
|
#
|
27
29
|
# @see https://developer.nexmo.com/api/sms/us-short-codes/alerts/subscription
|
28
30
|
#
|
31
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
29
32
|
def remove(params)
|
30
33
|
request('/sc/us/alert/opt-in/manage/json', params: params, type: Post)
|
31
34
|
end
|
@@ -61,6 +64,7 @@ module Nexmo
|
|
61
64
|
#
|
62
65
|
# @see https://developer.nexmo.com/api/sms/us-short-codes/alerts/sending
|
63
66
|
#
|
67
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
64
68
|
def send(params)
|
65
69
|
request('/sc/us/alert/json', params: params, type: Post)
|
66
70
|
end
|
data/lib/nexmo/applications.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Nexmo
|
5
5
|
class Applications < Namespace
|
6
|
+
extend T::Sig
|
6
7
|
self.authentication = Basic
|
7
8
|
|
8
9
|
self.request_body = JSON
|
@@ -14,9 +15,20 @@ module Nexmo
|
|
14
15
|
# @example
|
15
16
|
# params = {
|
16
17
|
# name: 'Example App',
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
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
|
+
# }
|
20
32
|
# }
|
21
33
|
#
|
22
34
|
# response = client.applications.create(params)
|
@@ -38,6 +50,7 @@ module Nexmo
|
|
38
50
|
#
|
39
51
|
# @see https://developer.nexmo.com/api/application.v2#createApplication
|
40
52
|
#
|
53
|
+
sig { params(params: T::Hash[Symbol, T.untyped]).returns(Nexmo::Response) }
|
41
54
|
def create(params)
|
42
55
|
request('/v2/applications', params: params, type: Post)
|
43
56
|
end
|
@@ -62,6 +75,7 @@ module Nexmo
|
|
62
75
|
#
|
63
76
|
# @see https://developer.nexmo.com/api/application.v2#listApplication
|
64
77
|
#
|
78
|
+
sig { params(params: T.nilable(T::Hash[Symbol, Integer])).returns(Nexmo::Response) }
|
65
79
|
def list(params = nil)
|
66
80
|
request('/v2/applications', params: params, response_class: ListResponse)
|
67
81
|
end
|
@@ -77,6 +91,7 @@ module Nexmo
|
|
77
91
|
#
|
78
92
|
# @see https://developer.nexmo.com/api/application.v2#getApplication
|
79
93
|
#
|
94
|
+
sig { params(id: String).returns(Nexmo::Response) }
|
80
95
|
def get(id)
|
81
96
|
request('/v2/applications/' + id)
|
82
97
|
end
|
@@ -104,6 +119,10 @@ module Nexmo
|
|
104
119
|
#
|
105
120
|
# @see https://developer.nexmo.com/api/application.v2#updateApplication
|
106
121
|
#
|
122
|
+
sig { params(
|
123
|
+
id: String,
|
124
|
+
params: T::Hash[Symbol, T.untyped]
|
125
|
+
).returns(Nexmo::Response) }
|
107
126
|
def update(id, params)
|
108
127
|
request('/v2/applications/' + id, params: params, type: Put)
|
109
128
|
end
|
@@ -121,6 +140,7 @@ module Nexmo
|
|
121
140
|
#
|
122
141
|
# @see https://developer.nexmo.com/api/application.v2#deleteApplication
|
123
142
|
#
|
143
|
+
sig { params(id: String).returns(Nexmo::Response) }
|
124
144
|
def delete(id)
|
125
145
|
request('/v2/applications/' + id, type: Delete)
|
126
146
|
end
|
data/lib/nexmo/client.rb
CHANGED
@@ -1,113 +1,134 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
|
3
3
|
module Nexmo
|
4
4
|
class Client
|
5
|
+
extend T::Sig
|
6
|
+
|
7
|
+
sig { returns(Nexmo::Config) }
|
5
8
|
attr_reader :config
|
6
9
|
|
10
|
+
sig { params(options: T.nilable(T::Hash[Symbol, T.untyped])).void }
|
7
11
|
def initialize(options = nil)
|
8
|
-
@config = Nexmo.config.merge(options)
|
12
|
+
@config = T.let(Nexmo.config.merge(options), Nexmo::Config)
|
9
13
|
end
|
10
14
|
|
11
15
|
# @return [Signature]
|
12
16
|
#
|
17
|
+
sig { returns(T.nilable(Nexmo::Signature)) }
|
13
18
|
def signature
|
14
|
-
@signature ||= Signature.new(config)
|
19
|
+
@signature ||= T.let(Signature.new(config), T.nilable(Nexmo::Signature))
|
15
20
|
end
|
16
21
|
|
17
22
|
# @return [Account]
|
18
23
|
#
|
24
|
+
sig { returns(T.nilable(Nexmo::Account)) }
|
19
25
|
def account
|
20
|
-
@account ||= Account.new(config)
|
26
|
+
@account ||= T.let(Account.new(config), T.nilable(Nexmo::Account))
|
21
27
|
end
|
22
28
|
|
23
29
|
# @return [Alerts]
|
24
30
|
#
|
31
|
+
sig { returns(T.nilable(Nexmo::Alerts)) }
|
25
32
|
def alerts
|
26
|
-
@alerts ||= Alerts.new(config)
|
33
|
+
@alerts ||= T.let(Alerts.new(config), T.nilable(Nexmo::Alerts))
|
27
34
|
end
|
28
35
|
|
29
36
|
# @return [Applications]
|
30
37
|
#
|
38
|
+
sig { returns(T.nilable(Nexmo::Applications)) }
|
31
39
|
def applications
|
32
|
-
@applications ||= Applications.new(config)
|
33
|
-
end
|
34
|
-
|
35
|
-
# @return [Calls]
|
36
|
-
#
|
37
|
-
def calls
|
38
|
-
@calls ||= Calls.new(config)
|
40
|
+
@applications ||= T.let(Applications.new(config), T.nilable(Nexmo::Applications))
|
39
41
|
end
|
40
42
|
|
41
43
|
# @return [Conversations]
|
42
44
|
#
|
45
|
+
sig { returns(T.nilable(Nexmo::Conversations)) }
|
43
46
|
def conversations
|
44
|
-
@conversations ||= Conversations.new(config)
|
47
|
+
@conversations ||= T.let(Conversations.new(config), T.nilable(Nexmo::Conversations))
|
45
48
|
end
|
46
49
|
|
47
50
|
# @return [Conversions]
|
48
51
|
#
|
52
|
+
sig { returns(T.nilable(Nexmo::Conversions)) }
|
49
53
|
def conversions
|
50
|
-
@conversions ||= Conversions.new(config)
|
54
|
+
@conversions ||= T.let(Conversions.new(config), T.nilable(Nexmo::Conversions))
|
51
55
|
end
|
52
56
|
|
53
57
|
# @return [Files]
|
54
58
|
#
|
59
|
+
sig { returns(T.nilable(Nexmo::Files)) }
|
55
60
|
def files
|
56
|
-
@files ||= Files.new(config)
|
61
|
+
@files ||= T.let(Files.new(config), T.nilable(Nexmo::Files))
|
57
62
|
end
|
58
63
|
|
59
64
|
# @return [Messages]
|
60
65
|
#
|
66
|
+
sig { returns(T.nilable(Nexmo::Messages)) }
|
61
67
|
def messages
|
62
|
-
@messages ||= Messages.new(config)
|
68
|
+
@messages ||= T.let(Messages.new(config), T.nilable(Nexmo::Messages))
|
63
69
|
end
|
64
70
|
|
65
71
|
# @return [NumberInsight]
|
66
72
|
#
|
73
|
+
sig { returns(T.nilable(Nexmo::NumberInsight)) }
|
67
74
|
def number_insight
|
68
|
-
@number_insight ||= NumberInsight.new(config)
|
75
|
+
@number_insight ||= T.let(NumberInsight.new(config), T.nilable(Nexmo::NumberInsight))
|
69
76
|
end
|
70
77
|
|
71
78
|
# @return [Numbers]
|
72
79
|
#
|
80
|
+
sig { returns(T.nilable(Nexmo::Numbers)) }
|
73
81
|
def numbers
|
74
|
-
@numbers ||= Numbers.new(config)
|
82
|
+
@numbers ||= T.let(Numbers.new(config), T.nilable(Nexmo::Numbers))
|
75
83
|
end
|
76
84
|
|
77
85
|
# @return [PricingTypes]
|
78
86
|
#
|
87
|
+
sig { returns(T.nilable(Nexmo::PricingTypes)) }
|
79
88
|
def pricing
|
80
|
-
@pricing ||= PricingTypes.new(config)
|
89
|
+
@pricing ||= T.let(PricingTypes.new(config), T.nilable(Nexmo::PricingTypes))
|
81
90
|
end
|
82
91
|
|
83
92
|
# @return [Redact]
|
84
93
|
#
|
94
|
+
sig { returns(T.nilable(Nexmo::Redact)) }
|
85
95
|
def redact
|
86
|
-
@redact ||= Redact.new(config)
|
96
|
+
@redact ||= T.let(Redact.new(config), T.nilable(Nexmo::Redact))
|
87
97
|
end
|
88
98
|
|
89
99
|
# @return [Secrets]
|
90
100
|
#
|
101
|
+
sig { returns(T.nilable(Nexmo::Secrets)) }
|
91
102
|
def secrets
|
92
|
-
@secrets ||= Secrets.new(config)
|
103
|
+
@secrets ||= T.let(Secrets.new(config), T.nilable(Nexmo::Secrets))
|
93
104
|
end
|
94
105
|
|
95
106
|
# @return [SMS]
|
96
107
|
#
|
108
|
+
sig { returns(T.nilable(Nexmo::SMS)) }
|
97
109
|
def sms
|
98
|
-
@sms ||= SMS.new(config)
|
110
|
+
@sms ||= T.let(SMS.new(config), T.nilable(Nexmo::SMS))
|
99
111
|
end
|
100
112
|
|
101
113
|
# @return [TFA]
|
102
114
|
#
|
115
|
+
sig { returns(T.nilable(Nexmo::TFA)) }
|
103
116
|
def tfa
|
104
|
-
@tfa ||= TFA.new(config)
|
117
|
+
@tfa ||= T.let(TFA.new(config), T.nilable(Nexmo::TFA))
|
105
118
|
end
|
106
119
|
|
107
120
|
# @return [Verify]
|
108
121
|
#
|
122
|
+
sig { returns(T.nilable(Nexmo::Verify)) }
|
109
123
|
def verify
|
110
|
-
@verify ||= Verify.new(config)
|
124
|
+
@verify ||= T.let(Verify.new(config), T.nilable(Nexmo::Verify))
|
125
|
+
end
|
126
|
+
|
127
|
+
# @return [Voice]
|
128
|
+
#
|
129
|
+
sig { returns(T.nilable(Nexmo::Voice)) }
|
130
|
+
def voice
|
131
|
+
@voice ||= T.let(Voice.new(config), T.nilable(Nexmo::Voice))
|
111
132
|
end
|
112
133
|
end
|
113
134
|
end
|
data/lib/nexmo/config.rb
CHANGED
@@ -1,26 +1,30 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
3
|
require 'logger'
|
4
4
|
|
5
5
|
module Nexmo
|
6
6
|
class Config
|
7
|
+
extend T::Sig
|
8
|
+
|
9
|
+
sig { void }
|
7
10
|
def initialize
|
8
11
|
self.api_host = 'api.nexmo.com'
|
9
|
-
self.api_key = ENV['NEXMO_API_KEY']
|
10
|
-
self.api_secret = ENV['NEXMO_API_SECRET']
|
11
|
-
self.application_id =
|
12
|
-
self.logger = (defined?(Rails.logger) && Rails.logger) || ::Logger.new(nil)
|
13
|
-
self.private_key =
|
12
|
+
self.api_key = T.let(ENV['NEXMO_API_KEY'], T.nilable(String))
|
13
|
+
self.api_secret = T.let(ENV['NEXMO_API_SECRET'], T.nilable(String))
|
14
|
+
self.application_id = ENV['NEXMO_APPLICATION_ID']
|
15
|
+
self.logger = (defined?(::Rails.logger) && ::Rails.logger) || Nexmo::Logger.new(nil)
|
16
|
+
self.private_key = ENV['NEXMO_PRIVATE_KEY_PATH'] ? File.read(T.must(ENV['NEXMO_PRIVATE_KEY_PATH'])) : ENV['NEXMO_PRIVATE_KEY']
|
14
17
|
self.rest_host = 'rest.nexmo.com'
|
15
18
|
self.signature_secret = ENV['NEXMO_SIGNATURE_SECRET']
|
16
19
|
self.signature_method = ENV['NEXMO_SIGNATURE_METHOD'] || 'md5hash'
|
17
|
-
self.token = nil
|
20
|
+
self.token = T.let(nil, T.nilable(String))
|
18
21
|
end
|
19
22
|
|
20
23
|
# Merges the config with the given options hash.
|
21
24
|
#
|
22
25
|
# @return [Nexmo::Config]
|
23
26
|
#
|
27
|
+
sig { params(options: T.nilable(T::Hash[Symbol, T.untyped])).returns(Nexmo::Config) }
|
24
28
|
def merge(options)
|
25
29
|
return self if options.nil? || options.empty?
|
26
30
|
|
@@ -29,6 +33,7 @@ module Nexmo
|
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
36
|
+
sig { returns(String) }
|
32
37
|
attr_accessor :api_host
|
33
38
|
|
34
39
|
# Returns the value of attribute api_key.
|
@@ -37,7 +42,9 @@ module Nexmo
|
|
37
42
|
#
|
38
43
|
# @raise [AuthenticationError]
|
39
44
|
#
|
45
|
+
sig { returns(T.nilable(String)) }
|
40
46
|
def api_key
|
47
|
+
@api_key = T.let(@api_key, T.nilable(String))
|
41
48
|
unless @api_key
|
42
49
|
raise AuthenticationError.new('No API key provided. ' \
|
43
50
|
'See https://developer.nexmo.com/concepts/guides/authentication for details, ' \
|
@@ -47,6 +54,7 @@ module Nexmo
|
|
47
54
|
@api_key
|
48
55
|
end
|
49
56
|
|
57
|
+
sig { params(api_key: T.nilable(String)).returns(T.nilable(String)) }
|
50
58
|
attr_writer :api_key
|
51
59
|
|
52
60
|
# Returns the value of attribute api_secret.
|
@@ -55,7 +63,9 @@ module Nexmo
|
|
55
63
|
#
|
56
64
|
# @raise [AuthenticationError]
|
57
65
|
#
|
66
|
+
sig { returns(T.nilable(String)) }
|
58
67
|
def api_secret
|
68
|
+
@api_secret = T.let(@api_secret, T.nilable(String))
|
59
69
|
unless @api_secret
|
60
70
|
raise AuthenticationError.new('No API secret provided. ' \
|
61
71
|
'See https://developer.nexmo.com/concepts/guides/authentication for details, ' \
|
@@ -65,6 +75,7 @@ module Nexmo
|
|
65
75
|
@api_secret
|
66
76
|
end
|
67
77
|
|
78
|
+
sig { params(api_secret: T.nilable(String)).returns(T.nilable(String)) }
|
68
79
|
attr_writer :api_secret
|
69
80
|
|
70
81
|
# Returns the value of attribute application_id.
|
@@ -73,7 +84,9 @@ module Nexmo
|
|
73
84
|
#
|
74
85
|
# @raise [AuthenticationError]
|
75
86
|
#
|
87
|
+
sig { returns(T.nilable(String)) }
|
76
88
|
def application_id
|
89
|
+
@application_id = T.let(@application_id, T.nilable(String))
|
77
90
|
unless @application_id
|
78
91
|
raise AuthenticationError.new('No application_id provided. ' \
|
79
92
|
'Either provide an application_id, or set an auth token. ' \
|
@@ -85,32 +98,40 @@ module Nexmo
|
|
85
98
|
@application_id
|
86
99
|
end
|
87
100
|
|
101
|
+
sig { params(application_id: T.nilable(String)).returns(T.nilable(String)) }
|
88
102
|
attr_writer :application_id
|
89
103
|
|
104
|
+
sig { returns(T.nilable(String)) }
|
90
105
|
attr_accessor :app_name
|
91
106
|
|
107
|
+
sig { returns(T.nilable(String)) }
|
92
108
|
attr_accessor :app_version
|
93
109
|
|
94
110
|
# Returns the value of attribute http.
|
95
111
|
#
|
96
112
|
# @return [Nexmo::HTTP::Options]
|
97
113
|
#
|
114
|
+
sig { returns(T.nilable(Nexmo::HTTP::Options)) }
|
98
115
|
attr_reader :http
|
99
116
|
|
117
|
+
sig { params(hash: T::Hash[T.untyped, T.untyped]).returns(T.nilable(Nexmo::HTTP::Options)) }
|
100
118
|
def http=(hash)
|
101
|
-
@http = HTTP::Options
|
119
|
+
@http = T.let(nil, T.nilable(Nexmo::HTTP::Options))
|
120
|
+
@http = Nexmo::HTTP::Options.new(hash)
|
102
121
|
end
|
103
122
|
|
104
123
|
# Returns the value of attribute logger.
|
105
124
|
#
|
106
125
|
# @return [Nexmo::Logger]
|
107
126
|
#
|
127
|
+
sig { returns(T.nilable(Nexmo::Logger)) }
|
108
128
|
attr_reader :logger
|
109
129
|
|
110
130
|
# @return [Nexmo::Logger]
|
111
131
|
#
|
132
|
+
sig { params(logger: T.nilable(T.any(::Logger, Nexmo::Logger))).returns(T.nilable(Nexmo::Logger)) }
|
112
133
|
def logger=(logger)
|
113
|
-
@logger = Logger.new(logger)
|
134
|
+
@logger = T.let(Logger.new(logger), T.nilable(Nexmo::Logger))
|
114
135
|
end
|
115
136
|
|
116
137
|
# Returns the value of attribute private_key.
|
@@ -119,7 +140,9 @@ module Nexmo
|
|
119
140
|
#
|
120
141
|
# @raise [AuthenticationError]
|
121
142
|
#
|
143
|
+
sig { returns(T.nilable(String)) }
|
122
144
|
def private_key
|
145
|
+
@private_key = T.let(@private_key, T.nilable(String))
|
123
146
|
unless @private_key
|
124
147
|
raise AuthenticationError.new('No private_key provided. ' \
|
125
148
|
'Either provide a private_key, or set an auth token. ' \
|
@@ -131,8 +154,10 @@ module Nexmo
|
|
131
154
|
@private_key
|
132
155
|
end
|
133
156
|
|
157
|
+
sig { params(private_key: T.nilable(String)).returns(T.nilable(String)) }
|
134
158
|
attr_writer :private_key
|
135
159
|
|
160
|
+
sig { returns(String) }
|
136
161
|
attr_accessor :rest_host
|
137
162
|
|
138
163
|
# Returns the value of attribute signature_secret.
|
@@ -141,7 +166,9 @@ module Nexmo
|
|
141
166
|
#
|
142
167
|
# @raise [AuthenticationError]
|
143
168
|
#
|
169
|
+
sig { returns(T.nilable(String)) }
|
144
170
|
def signature_secret
|
171
|
+
@signature_secret = T.let(@signature_secret, T.nilable(String))
|
145
172
|
unless @signature_secret
|
146
173
|
raise AuthenticationError.new('No signature_secret provided. ' \
|
147
174
|
'You can find your signature secret in the Nexmo dashboard. ' \
|
@@ -152,22 +179,28 @@ module Nexmo
|
|
152
179
|
@signature_secret
|
153
180
|
end
|
154
181
|
|
182
|
+
sig { params(signature_secret: T.nilable(String)).returns(T.nilable(String)) }
|
155
183
|
attr_writer :signature_secret
|
156
184
|
|
185
|
+
sig { returns(String) }
|
157
186
|
attr_accessor :signature_method
|
158
187
|
|
159
188
|
# Returns the value of attribute token, or a temporary short lived token.
|
160
189
|
#
|
161
190
|
# @return [String]
|
162
191
|
#
|
192
|
+
sig { returns(T.nilable(String)) }
|
163
193
|
def token
|
164
|
-
@token
|
194
|
+
@token = T.let(nil, T.nilable(String))
|
195
|
+
@token || JWT.generate({application_id: application_id}, T.must(private_key))
|
165
196
|
end
|
166
197
|
|
198
|
+
sig { params(token: T.nilable(String)).returns(T.nilable(String)) }
|
167
199
|
attr_writer :token
|
168
200
|
|
169
201
|
protected
|
170
202
|
|
203
|
+
sig { params(name: Symbol, value: T.nilable(T.untyped)).void }
|
171
204
|
def write_attribute(name, value)
|
172
205
|
public_send(:"#{name}=", value)
|
173
206
|
end
|