vonage 7.18.0 → 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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -271
  3. data/lib/vonage/applications.rb +4 -12
  4. data/lib/vonage/client.rb +4 -32
  5. data/lib/vonage/client_error.rb +1 -1
  6. data/lib/vonage/config.rb +3 -7
  7. data/lib/vonage/errors.rb +20 -37
  8. data/lib/vonage/gsm7.rb +1 -1
  9. data/lib/vonage/jwt.rb +0 -17
  10. data/lib/vonage/keys.rb +7 -1
  11. data/lib/vonage/logger.rb +3 -5
  12. data/lib/vonage/messaging/channels/viber.rb +1 -8
  13. data/lib/vonage/messaging/channels/whats_app.rb +1 -3
  14. data/lib/vonage/messaging.rb +0 -11
  15. data/lib/vonage/namespace.rb +58 -128
  16. data/lib/vonage/numbers.rb +6 -29
  17. data/lib/vonage/server_error.rb +1 -1
  18. data/lib/vonage/signature.rb +5 -5
  19. data/lib/vonage/sms.rb +20 -20
  20. data/lib/vonage/version.rb +1 -1
  21. data/lib/vonage/video/archives.rb +187 -0
  22. data/lib/vonage/video/list_response.rb +11 -0
  23. data/lib/vonage/video/moderation.rb +73 -0
  24. data/lib/vonage/video/signals.rb +55 -0
  25. data/lib/vonage/video/streams.rb +76 -0
  26. data/lib/vonage/video.rb +91 -0
  27. data/lib/vonage/voice/actions/connect.rb +3 -27
  28. data/lib/vonage/voice/actions/pay.rb +107 -0
  29. data/lib/vonage/voice/actions/talk.rb +2 -11
  30. data/lib/vonage/voice/talk.rb +1 -11
  31. data/lib/vonage/voice.rb +0 -22
  32. data/lib/vonage.rb +0 -1
  33. data/vonage.gemspec +1 -2
  34. metadata +14 -59
  35. data/lib/vonage/api_error.rb +0 -33
  36. data/lib/vonage/meetings/applications.rb +0 -25
  37. data/lib/vonage/meetings/dial_in_numbers/list_response.rb +0 -11
  38. data/lib/vonage/meetings/dial_in_numbers.rb +0 -23
  39. data/lib/vonage/meetings/recordings.rb +0 -36
  40. data/lib/vonage/meetings/rooms/list_response.rb +0 -11
  41. data/lib/vonage/meetings/rooms.rb +0 -155
  42. data/lib/vonage/meetings/sessions/list_response.rb +0 -11
  43. data/lib/vonage/meetings/sessions.rb +0 -28
  44. data/lib/vonage/meetings/themes/list_response.rb +0 -11
  45. data/lib/vonage/meetings/themes.rb +0 -218
  46. data/lib/vonage/meetings.rb +0 -38
  47. data/lib/vonage/proactive_connect/events/list_response.rb +0 -11
  48. data/lib/vonage/proactive_connect/events.rb +0 -68
  49. data/lib/vonage/proactive_connect/item.rb +0 -104
  50. data/lib/vonage/proactive_connect/items/file_response.rb +0 -32
  51. data/lib/vonage/proactive_connect/items/list_response.rb +0 -11
  52. data/lib/vonage/proactive_connect/items.rb +0 -107
  53. data/lib/vonage/proactive_connect/list.rb +0 -168
  54. data/lib/vonage/proactive_connect/lists/list_response.rb +0 -11
  55. data/lib/vonage/proactive_connect/lists.rb +0 -35
  56. data/lib/vonage/proactive_connect.rb +0 -33
  57. data/lib/vonage/subaccounts/balance_transfers/list_response.rb +0 -11
  58. data/lib/vonage/subaccounts/credit_transfers/list_response.rb +0 -11
  59. data/lib/vonage/subaccounts/list_response.rb +0 -15
  60. data/lib/vonage/subaccounts.rb +0 -203
  61. data/lib/vonage/users/list_response.rb +0 -11
  62. data/lib/vonage/users.rb +0 -156
  63. data/lib/vonage/verify2/channels/email.rb +0 -38
  64. data/lib/vonage/verify2/channels/silent_auth.rb +0 -32
  65. data/lib/vonage/verify2/channels/sms.rb +0 -39
  66. data/lib/vonage/verify2/channels/voice.rb +0 -32
  67. data/lib/vonage/verify2/channels/whats_app.rb +0 -38
  68. data/lib/vonage/verify2/channels/whats_app_interactive.rb +0 -32
  69. data/lib/vonage/verify2/start_verification_options.rb +0 -62
  70. data/lib/vonage/verify2/workflow.rb +0 -39
  71. data/lib/vonage/verify2/workflow_builder.rb +0 -25
  72. data/lib/vonage/verify2.rb +0 -93
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Vonage
4
4
  class Messaging::Channels::Viber < Messaging::Message
5
- MESSAGE_TYPES = ['text', 'image', 'video', 'file']
5
+ MESSAGE_TYPES = ['text', 'image']
6
6
 
7
7
  attr_reader :data
8
8
 
@@ -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', 'sticker', 'custom']
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
@@ -25,16 +25,5 @@ module Vonage
25
25
  def send(params)
26
26
  request('/v1/messages', params: params, type: Post)
27
27
  end
28
-
29
- # Validate a JSON Web Token from a Messages API Webhook.
30
- #
31
- # @param [String, required] :token The JWT from the Webhook's Authorization header
32
- # @param [String, optional] :signature_secret The account signature secret. Required, unless `signature_secret`
33
- # is set in `Config`
34
- #
35
- # @return [Boolean] true, if the JWT is verified, false otherwise
36
- def verify_webhook_token(token:, signature_secret: @config.signature_secret)
37
- JWT.verify_hs256_signature(token: token, signature_secret: signature_secret)
38
- end
39
28
  end
40
29
  end
@@ -1,8 +1,6 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
-
4
3
  require 'net/http'
5
- require 'net/http/post/multipart'
6
4
  require 'json'
7
5
 
8
6
  module Vonage
@@ -23,7 +21,7 @@ module Vonage
23
21
  end
24
22
 
25
23
  def self.host=(host)
26
- raise ArgumentError unless %i[rest_host vonage_host].include?(host)
24
+ raise ArgumentError unless host == :rest_host || host == :video_host
27
25
 
28
26
  @host = host
29
27
  end
@@ -49,7 +47,6 @@ module Vonage
49
47
  end
50
48
 
51
49
  protected
52
-
53
50
  # :nocov:
54
51
 
55
52
  Get = Net::HTTP::Get
@@ -62,7 +59,7 @@ module Vonage
62
59
  authentication = self.class.authentication.new(@config)
63
60
  authentication.update(params)
64
61
 
65
- uri = URI("https://" + @host + path)
62
+ uri = URI('https://' + @host + path)
66
63
  unless type.const_get(:REQUEST_HAS_BODY) || params.empty?
67
64
  uri.query = Params.encode(params)
68
65
  end
@@ -74,20 +71,17 @@ module Vonage
74
71
  request = type.new(uri)
75
72
 
76
73
  # set headers
77
- request["User-Agent"] = UserAgent.string(
78
- @config.app_name,
79
- @config.app_version
80
- )
81
- request["Accept"] = "application/json"
82
- 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
83
79
 
84
80
  # Set BearerToken if needed
85
81
  authentication.update(request)
86
82
 
87
83
  # set body
88
- if type.const_get(:REQUEST_HAS_BODY)
89
- self.class.request_body.update(request, params)
90
- end
84
+ self.class.request_body.update(request, params) if type.const_get(:REQUEST_HAS_BODY)
91
85
 
92
86
  request
93
87
  end
@@ -107,31 +101,16 @@ module Vonage
107
101
  end
108
102
 
109
103
  def request(path, params: nil, type: Get, response_class: Response, &block)
110
- auto_advance =
111
- (
112
- if !params.nil? && params.key?(:auto_advance)
113
- params[:auto_advance]
114
- else
115
- false
116
- end
117
- )
118
-
119
- params =
120
- params.tap { |params| params.delete(:auto_advance) } if !params.nil? &&
121
- params.key?(:auto_advance)
104
+ auto_advance = !params.nil? && params.key?(:auto_advance) ? params[:auto_advance] : false
105
+
106
+ params = params.tap { |params| params.delete(:auto_advance) } if !params.nil? && params.key?(:auto_advance)
122
107
 
123
108
  request = build_request(path: path, params: params || {}, type: type)
124
109
 
125
110
  response = make_request!(request, &block)
126
111
 
127
112
  if auto_advance
128
- iterable_request(
129
- path,
130
- response: response,
131
- response_class: response_class,
132
- params: params,
133
- &block
134
- )
113
+ iterable_request(path, response: response, response_class: response_class, params: params, &block)
135
114
  else
136
115
  return if block
137
116
 
@@ -139,59 +118,22 @@ module Vonage
139
118
  end
140
119
  end
141
120
 
142
- def multipart_post_request(path, filepath:, file_name:, mime_type:, params: {}, override_uri: nil, no_auth: false, response_class: Response, &block)
143
- authentication = self.class.authentication.new(@config) unless no_auth
144
-
145
- uri = override_uri ? URI(override_uri) : URI('https://' + @host + path)
146
-
147
- http = override_uri ? Net::HTTP.new(uri.host, Net::HTTP.https_default_port, p_addr = nil) : @http
148
- http.use_ssl = true
149
- http.set_debug_output($stdout)
150
-
151
- response = File.open(filepath) do |file|
152
- request = Net::HTTP::Post::Multipart.new(
153
- uri,
154
- params.merge(file: Multipart::Post::UploadIO.new(file, mime_type, file_name))
155
- )
156
-
157
- request['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version)
158
-
159
- # Set BearerToken if needed
160
- authentication.update(request) unless no_auth
161
-
162
- logger.log_request_info(request)
163
-
164
- http.request(request, &block)
165
- end
166
-
167
- logger.log_response_info(response, @host)
168
-
169
- return if block
170
-
171
- logger.debug(response.body) if response.body
172
-
173
- parse(response, response_class)
174
- end
175
-
176
121
  def iterable_request(path, response: nil, response_class: nil, params: {}, &block)
177
122
  json_response = ::JSON.parse(response.body)
178
123
  response = parse(response, response_class)
179
124
  remainder = remaining_count(json_response)
180
125
 
181
126
  while remainder > 0
182
- params = { page_size: json_response["page_size"] }
183
-
184
- if json_response["record_index"] && json_response["record_index"] == 0
185
- params[:record_index] = json_response["page_size"]
186
- elsif json_response["record_index"] &&
187
- json_response["record_index"] != 0
188
- params[:record_index] = (
189
- json_response["record_index"] + json_response["page_size"]
190
- )
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'])
191
133
  end
192
134
 
193
- if json_response["total_pages"]
194
- params[:page] = json_response["page"] + 1
135
+ if json_response['total_pages']
136
+ params[:page] = json_response['page'] + 1
195
137
  end
196
138
 
197
139
  request = build_request(path: path, type: Get, params: params)
@@ -202,15 +144,11 @@ module Vonage
202
144
  json_response = ::JSON.parse(paginated_response.body)
203
145
  remainder = remaining_count(json_response)
204
146
 
205
- if response.respond_to?("_embedded")
206
- collection_name = collection_name(response["_embedded"])
207
- response["_embedded"][collection_name].push(
208
- *next_response["_embedded"][collection_name]
209
- )
147
+ if response.respond_to?('_embedded')
148
+ collection_name = collection_name(response['_embedded'])
149
+ response['_embedded'][collection_name].push(*next_response['_embedded'][collection_name])
210
150
  else
211
- response[collection_name(response)].push(
212
- *next_response[collection_name(next_response)]
213
- )
151
+ response[collection_name(response)].push(*next_response[collection_name(next_response)])
214
152
  end
215
153
  end
216
154
 
@@ -218,51 +156,43 @@ module Vonage
218
156
  end
219
157
 
220
158
  def remaining_count(params)
221
- if params.key?("total_pages")
222
- params["total_pages"] - params["page"]
223
- elsif params.key?("count")
224
- params["count"] -
225
- (
226
- if params["record_index"] == 0
227
- params["page_size"]
228
- else
229
- (params["record_index"] + params["page_size"])
230
- end
231
- )
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']))
232
163
  else
233
164
  0
234
165
  end
235
166
  end
236
167
 
237
168
  def collection_name(params)
238
- @collection_name ||=
239
- case
240
- when params.respond_to?("calls")
241
- "calls"
242
- when params.respond_to?("users")
243
- "users"
244
- when params.respond_to?("legs")
245
- "legs"
246
- when params.respond_to?("data")
247
- "data"
248
- when params.respond_to?("conversations")
249
- "conversations"
250
- when params.respond_to?("applications")
251
- "applications"
252
- when params.respond_to?("records")
253
- "records"
254
- when params.respond_to?("reports")
255
- "reports"
256
- when params.respond_to?("networks")
257
- "networks"
258
- when params.respond_to?("countries")
259
- "countries"
260
- when params.respond_to?("media")
261
- "media"
262
- when params.respond_to?("numbers")
263
- "numbers"
264
- when params.respond_to?("events")
265
- "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'
266
196
  else
267
197
  params.entity.attributes.keys[0].to_s
268
198
  end
@@ -273,7 +203,7 @@ module Vonage
273
203
  when Net::HTTPNoContent
274
204
  response_class.new(nil, response)
275
205
  when Net::HTTPSuccess
276
- if response['Content-Type'] && response['Content-Type'].split(';').first == 'application/json'
206
+ if response['Content-Type'].split(';').first == 'application/json'
277
207
  entity = ::JSON.parse(response.body, object_class: Vonage::Entity)
278
208
 
279
209
  response_class.new(entity, response)
@@ -295,8 +225,8 @@ module Vonage
295
225
  case self.class.host
296
226
  when :rest_host
297
227
  @config.rest_host
298
- when :vonage_host
299
- @config.vonage_host
228
+ when :video_host
229
+ @config.video_host
300
230
  else
301
231
  @config.api_host
302
232
  end
@@ -5,8 +5,6 @@ module Vonage
5
5
  class Numbers < Namespace
6
6
  include Keys
7
7
 
8
- self.authentication = Basic
9
-
10
8
  self.host = :rest_host
11
9
 
12
10
  # Retrieve all the inbound numbers associated with your Vonage account.
@@ -54,7 +52,7 @@ module Vonage
54
52
  # @see https://developer.nexmo.com/api/developer/numbers#getOwnedNumbers
55
53
  #
56
54
  def list(params = nil)
57
- request("/account/numbers", params: params, response_class: ListResponse)
55
+ request('/account/numbers', params: params, response_class: ListResponse)
58
56
  end
59
57
 
60
58
  # Retrieve inbound numbers that are available for the specified country.
@@ -102,7 +100,7 @@ module Vonage
102
100
  # @see https://developer.nexmo.com/api/developer/numbers#getAvailableNumbers
103
101
  #
104
102
  def search(params)
105
- request("/number/search", params: params, response_class: ListResponse)
103
+ request('/number/search', params: params, response_class: ListResponse)
106
104
  end
107
105
 
108
106
  # Request to purchase a specific inbound number.
@@ -127,12 +125,7 @@ module Vonage
127
125
  # @see https://developer.nexmo.com/api/developer/numbers#buyANumber
128
126
  #
129
127
  def buy(params)
130
- request(
131
- "/number/buy",
132
- params: params,
133
- type: Post,
134
- response_class: Response
135
- )
128
+ request('/number/buy', params: params, type: Post, response_class: Response)
136
129
  end
137
130
 
138
131
  # Cancel your subscription for a specific inbound number.
@@ -157,12 +150,7 @@ module Vonage
157
150
  # @see https://developer.nexmo.com/api/developer/numbers#cancelANumber
158
151
  #
159
152
  def cancel(params)
160
- request(
161
- "/number/cancel",
162
- params: params,
163
- type: Post,
164
- response_class: Response
165
- )
153
+ request('/number/cancel', params: params, type: Post, response_class: Response)
166
154
  end
167
155
 
168
156
  # Change the behaviour of a number that you own.
@@ -210,25 +198,14 @@ module Vonage
210
198
  # @see https://developer.nexmo.com/api/developer/numbers#updateANumber
211
199
  #
212
200
  def update(params)
213
- request(
214
- "/number/update",
215
- params: camelcase(params),
216
- type: Post,
217
- response_class: Response
218
- )
201
+ request('/number/update', params: camelcase(params), type: Post, response_class: Response)
219
202
  end
220
203
 
221
204
  private
222
205
 
223
206
  # A specific implementation of iterable_request for Numbers, because the Numbers API
224
207
  # handles pagination differently to other Vonage APIs
225
- def iterable_request(
226
- path,
227
- response: nil,
228
- response_class: nil,
229
- params: {},
230
- &block
231
- )
208
+ def iterable_request(path, response: nil, response_class: nil, params: {}, &block)
232
209
  response = parse(response, response_class)
233
210
  params[:index] = 1 unless params.has_key?(:index)
234
211
  size = params.fetch(:size, 10)
@@ -1,6 +1,6 @@
1
1
  # typed: strong
2
2
 
3
3
  module Vonage
4
- class ServerError < APIError
4
+ class ServerError < Error
5
5
  end
6
6
  end
@@ -27,24 +27,24 @@ module Vonage
27
27
  #
28
28
  # @see https://developer.nexmo.com/concepts/guides/signing-messages
29
29
  #
30
- def check(params, signature_secret: @config.signature_secret, signature_method: @config.signature_method)
30
+ def check(params, signature_method: @config.signature_method)
31
31
  params = params.dup
32
32
 
33
33
  signature = params.delete('sig')
34
34
 
35
- ::JWT::Algos::Hmac::SecurityUtils.secure_compare(signature, digest(params, signature_secret, signature_method))
35
+ ::JWT::SecurityUtils.secure_compare(signature, digest(params, signature_method))
36
36
  end
37
37
 
38
38
  private
39
39
 
40
- def digest(params, signature_secret, signature_method)
40
+ def digest(params, signature_method)
41
41
  digest_string = params.sort.map { |k, v| "&#{k}=#{v.tr('&=', '_')}" }.join
42
42
 
43
43
  case signature_method
44
44
  when 'md5', 'sha1', 'sha256', 'sha512'
45
- OpenSSL::HMAC.hexdigest(signature_method, signature_secret, digest_string).upcase
45
+ OpenSSL::HMAC.hexdigest(signature_method, @config.signature_secret, digest_string).upcase
46
46
  when 'md5hash'
47
- Digest::MD5.hexdigest("#{digest_string}#{signature_secret}")
47
+ Digest::MD5.hexdigest("#{digest_string}#{@config.signature_secret}")
48
48
  else
49
49
  raise ArgumentError, "Unknown signature algorithm: #{signature_method}. Expected: md5hash, md5, sha1, sha256, or sha512."
50
50
  end
data/lib/vonage/sms.rb CHANGED
@@ -47,6 +47,14 @@ module Vonage
47
47
  # @option params [String] :type
48
48
  # The format of the message body.
49
49
  #
50
+ # @option params [String] :vcard
51
+ # A business card in [vCard format](https://en.wikipedia.org/wiki/VCard).
52
+ # Depends on **:type** option having the value `vcard`.
53
+ #
54
+ # @option params [String] :vcal
55
+ # A calendar event in [vCal format](https://en.wikipedia.org/wiki/VCal).
56
+ # Depends on **:type** option having the value `vcal`.
57
+ #
50
58
  # @option params [String] :body
51
59
  # Hex encoded binary data.
52
60
  # Depends on **:type** option having the value `binary`.
@@ -59,6 +67,18 @@ module Vonage
59
67
  # The value of the [protocol identifier](https://en.wikipedia.org/wiki/GSM_03.40#Protocol_Identifier) to use.
60
68
  # Ensure that the value is aligned with **:udh**.
61
69
  #
70
+ # @option params [String] :title
71
+ # The title for a wappush SMS.
72
+ # Depends on **:type** option having the value `wappush`.
73
+ #
74
+ # @option params [String] :url
75
+ # The URL of your website.
76
+ # Depends on **:type** option having the value `wappush`.
77
+ #
78
+ # @option params [String] :validity
79
+ # The availability for an SMS in milliseconds.
80
+ # Depends on **:type** option having the value `wappush`.
81
+ #
62
82
  # @option params [String] :client_ref
63
83
  # You can optionally include your own reference of up to 40 characters.
64
84
  #
@@ -91,31 +111,11 @@ module Vonage
91
111
  response
92
112
  end
93
113
 
94
- # Validate a Signature from an SMS API Webhook.
95
- #
96
- # @param [Hash, required] :webhook_params The parameters from the webhook request body
97
- # @param [String, optional] :signature_secret The account signature secret. Required, unless `signature_secret`
98
- # is set in `Config`
99
- # @param [String, optional] :signature_method The account signature method. Required, unless `signature_method`
100
- # is set in `Config`
101
- #
102
- # @return [Boolean] true, if the JWT is verified, false otherwise
103
- def verify_webhook_sig(webhook_params:, signature_secret: @config.signature_secret, signature_method: @config.signature_method)
104
- signature.check(webhook_params, signature_secret: signature_secret, signature_method: signature_method)
105
- end
106
-
107
114
  private
108
115
 
109
116
  sig { params(text: String).returns(T::Boolean) }
110
117
  def unicode?(text)
111
118
  !Vonage::GSM7.encoded?(text)
112
119
  end
113
-
114
- # @return [Signature]
115
- #
116
- sig { returns(T.nilable(Vonage::Signature)) }
117
- def signature
118
- @signature ||= T.let(Signature.new(@config), T.nilable(Vonage::Signature))
119
- end
120
120
  end
121
121
  end
@@ -1,5 +1,5 @@
1
1
  # typed: strong
2
2
 
3
3
  module Vonage
4
- VERSION = "7.18.0"
4
+ VERSION = '8.0.0.beta'
5
5
  end