vonage 7.27.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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -388
  3. data/lib/vonage/applications.rb +4 -12
  4. data/lib/vonage/basic.rb +1 -1
  5. data/lib/vonage/bearer_token.rb +1 -1
  6. data/lib/vonage/client.rb +0 -65
  7. data/lib/vonage/client_error.rb +1 -1
  8. data/lib/vonage/config.rb +1 -9
  9. data/lib/vonage/conversations/events.rb +0 -12
  10. data/lib/vonage/conversations/legs.rb +0 -6
  11. data/lib/vonage/conversations/members.rb +0 -15
  12. data/lib/vonage/conversations/users.rb +0 -15
  13. data/lib/vonage/conversations.rb +0 -30
  14. data/lib/vonage/errors.rb +20 -37
  15. data/lib/vonage/gsm7.rb +1 -1
  16. data/lib/vonage/jwt.rb +0 -17
  17. data/lib/vonage/key_secret_params.rb +2 -3
  18. data/lib/vonage/keys.rb +1 -11
  19. data/lib/vonage/logger.rb +3 -5
  20. data/lib/vonage/messaging/channels/viber.rb +1 -8
  21. data/lib/vonage/messaging/channels/whats_app.rb +1 -3
  22. data/lib/vonage/messaging/message.rb +0 -1
  23. data/lib/vonage/messaging.rb +4 -34
  24. data/lib/vonage/namespace.rb +68 -137
  25. data/lib/vonage/numbers.rb +17 -40
  26. data/lib/vonage/server_error.rb +1 -1
  27. data/lib/vonage/signature.rb +5 -5
  28. data/lib/vonage/sms.rb +20 -20
  29. data/lib/vonage/version.rb +1 -1
  30. data/lib/vonage/video/archives.rb +53 -18
  31. data/lib/vonage/video/list_response.rb +11 -0
  32. data/lib/vonage/video/moderation.rb +22 -7
  33. data/lib/vonage/video/signals.rb +9 -4
  34. data/lib/vonage/video/streams.rb +12 -6
  35. data/lib/vonage/video.rb +13 -50
  36. data/lib/vonage/voice/actions/connect.rb +5 -34
  37. data/lib/vonage/voice/actions/conversation.rb +4 -10
  38. data/lib/vonage/voice/actions/input.rb +3 -19
  39. data/lib/vonage/voice/actions/notify.rb +3 -8
  40. data/lib/vonage/voice/actions/pay.rb +107 -0
  41. data/lib/vonage/voice/actions/record.rb +4 -52
  42. data/lib/vonage/voice/actions/stream.rb +4 -48
  43. data/lib/vonage/voice/actions/talk.rb +4 -54
  44. data/lib/vonage/voice/talk.rb +1 -11
  45. data/lib/vonage/voice.rb +0 -24
  46. data/lib/vonage.rb +0 -4
  47. data/vonage.gemspec +1 -3
  48. metadata +9 -104
  49. data/lib/vonage/api_error.rb +0 -33
  50. data/lib/vonage/conversation/event/list_response.rb +0 -11
  51. data/lib/vonage/conversation/event.rb +0 -108
  52. data/lib/vonage/conversation/list_response.rb +0 -11
  53. data/lib/vonage/conversation/member/list_response.rb +0 -11
  54. data/lib/vonage/conversation/member.rb +0 -134
  55. data/lib/vonage/conversation/user/conversations_list_response.rb +0 -11
  56. data/lib/vonage/conversation/user/sessions_list_response.rb +0 -11
  57. data/lib/vonage/conversation/user.rb +0 -67
  58. data/lib/vonage/conversation.rb +0 -164
  59. data/lib/vonage/meetings/applications.rb +0 -28
  60. data/lib/vonage/meetings/dial_in_numbers/list_response.rb +0 -11
  61. data/lib/vonage/meetings/dial_in_numbers.rb +0 -26
  62. data/lib/vonage/meetings/recordings.rb +0 -42
  63. data/lib/vonage/meetings/rooms/list_response.rb +0 -11
  64. data/lib/vonage/meetings/rooms.rb +0 -167
  65. data/lib/vonage/meetings/sessions/list_response.rb +0 -11
  66. data/lib/vonage/meetings/sessions.rb +0 -31
  67. data/lib/vonage/meetings/themes/list_response.rb +0 -11
  68. data/lib/vonage/meetings/themes.rb +0 -239
  69. data/lib/vonage/meetings.rb +0 -50
  70. data/lib/vonage/messaging/channels/rcs.rb +0 -42
  71. data/lib/vonage/network_authentication/client_authentication.rb +0 -39
  72. data/lib/vonage/network_authentication/server_authentication.rb +0 -47
  73. data/lib/vonage/network_authentication.rb +0 -22
  74. data/lib/vonage/network_number_verification.rb +0 -92
  75. data/lib/vonage/network_sim_swap.rb +0 -84
  76. data/lib/vonage/number_insight_2.rb +0 -36
  77. data/lib/vonage/proactive_connect/events/list_response.rb +0 -11
  78. data/lib/vonage/proactive_connect/events.rb +0 -71
  79. data/lib/vonage/proactive_connect/item.rb +0 -116
  80. data/lib/vonage/proactive_connect/items/file_response.rb +0 -32
  81. data/lib/vonage/proactive_connect/items/list_response.rb +0 -11
  82. data/lib/vonage/proactive_connect/items.rb +0 -116
  83. data/lib/vonage/proactive_connect/list.rb +0 -186
  84. data/lib/vonage/proactive_connect/lists/list_response.rb +0 -11
  85. data/lib/vonage/proactive_connect/lists.rb +0 -38
  86. data/lib/vonage/proactive_connect.rb +0 -43
  87. data/lib/vonage/subaccounts/balance_transfers/list_response.rb +0 -11
  88. data/lib/vonage/subaccounts/credit_transfers/list_response.rb +0 -11
  89. data/lib/vonage/subaccounts/list_response.rb +0 -15
  90. data/lib/vonage/subaccounts.rb +0 -203
  91. data/lib/vonage/users/list_response.rb +0 -11
  92. data/lib/vonage/users.rb +0 -156
  93. data/lib/vonage/verify2/channels/email.rb +0 -36
  94. data/lib/vonage/verify2/channels/silent_auth.rb +0 -45
  95. data/lib/vonage/verify2/channels/sms.rb +0 -63
  96. data/lib/vonage/verify2/channels/voice.rb +0 -32
  97. data/lib/vonage/verify2/channels/whats_app.rb +0 -39
  98. data/lib/vonage/verify2/channels/whats_app_interactive.rb +0 -32
  99. data/lib/vonage/verify2/start_verification_options.rb +0 -63
  100. data/lib/vonage/verify2/workflow.rb +0 -39
  101. data/lib/vonage/verify2/workflow_builder.rb +0 -25
  102. data/lib/vonage/verify2.rb +0 -100
  103. data/lib/vonage/video/archives/list_response.rb +0 -11
  104. data/lib/vonage/video/broadcasts/list_response.rb +0 -11
  105. data/lib/vonage/video/broadcasts.rb +0 -75
  106. data/lib/vonage/video/captions.rb +0 -67
  107. data/lib/vonage/video/renders/list_response.rb +0 -11
  108. data/lib/vonage/video/renders.rb +0 -107
  109. data/lib/vonage/video/sip.rb +0 -48
  110. data/lib/vonage/video/streams/list_response.rb +0 -11
  111. data/lib/vonage/video/web_socket.rb +0 -61
@@ -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::JWA::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.27.0'
4
+ VERSION = '8.0.0.beta'
5
5
  end
@@ -13,6 +13,8 @@ module Vonage
13
13
 
14
14
  # Get a list of archives for a specified Vonage application.
15
15
  #
16
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
17
+ #
16
18
  # @param [optional, Integer] :offset
17
19
  #
18
20
  # @param [optional, Integer] :count
@@ -25,24 +27,32 @@ module Vonage
25
27
  #
26
28
  # @see TODO: add docs link
27
29
  #
28
- def list(**params)
29
- request('/v2/project/' + @config.application_id + '/archive', params: params, response_class: ListResponse)
30
+ def list(application_id: @config.application_id, **params)
31
+ # TODO: raise error if application_id is nil
32
+
33
+ request('/v2/project/' + application_id + '/archive', params: params, response_class: Video::ListResponse)
30
34
  end
31
35
 
32
36
  # Return information for specified archive.
33
37
  #
38
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
39
+ #
34
40
  # @param [required, String] archive_id
35
41
  #
36
42
  # @return [Response]
37
43
  #
38
44
  # @see TODO: add docs link
39
45
  #
40
- def info(archive_id:)
41
- request('/v2/project/' + @config.application_id + '/archive/' + archive_id)
46
+ def info(application_id: @config.application_id, archive_id:)
47
+ # TODO: raise error if application_id is nil
48
+
49
+ request('/v2/project/' + application_id + '/archive/' + archive_id)
42
50
  end
43
51
 
44
52
  # Create a new archive.
45
53
  #
54
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
55
+ #
46
56
  # @param [required, String] :session_id
47
57
  #
48
58
  # @param [optional, String] :hasAudio
@@ -71,39 +81,52 @@ module Vonage
71
81
  #
72
82
  # @see TODO: add docs link
73
83
  #
74
- def start(session_id:, **params)
75
- request('/v2/project/' + @config.application_id + '/archive', params: camelcase(params.merge(session_id: session_id)), type: Post)
84
+ def start(application_id: @config.application_id, **params)
85
+ # TODO: raise error if application_id is nil
86
+ # TODO: raise error if session_id is nil
87
+
88
+ request('/v2/project/' + application_id + '/archive', params: params, type: Post)
76
89
  end
77
90
 
78
91
  # Stop recording a specified archive.
79
92
  #
93
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
94
+ #
80
95
  # @param [required, String] archive_id
81
96
  #
82
97
  # @return [Response]
83
98
  #
84
99
  # @see TODO: add docs link
85
100
  #
86
- def stop(archive_id:)
87
- request('/v2/project/' + @config.application_id + '/archive/' + archive_id + '/stop', type: Post)
101
+ def stop(application_id: @config.application_id, archive_id:)
102
+ # TODO: raise error if application_id is nil
103
+
104
+ request('/v2/project/' + application_id + '/archive/' + archive_id + '/stop', type: Post)
88
105
  end
89
106
 
90
107
  # Delete a specified archive.
91
108
  #
109
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
110
+ #
92
111
  # @param [required, String] archive_id
93
112
  #
94
113
  # @return [Response]
95
114
  #
96
115
  # @see TODO: add docs link
97
116
  #
98
- def delete(archive_id:)
99
- request('/v2/project/' + @config.application_id + '/archive/' + archive_id, type: Delete)
117
+ def delete(application_id: @config.application_id, archive_id:)
118
+ # TODO: raise error if application_id is nil
119
+
120
+ request('/v2/project/' + application_id + '/archive/' + archive_id, type: Delete)
100
121
  end
101
122
 
102
123
  # Add a stream to a composed archive that was started with the streamMode set to "manual".
103
124
  #
125
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
126
+ #
104
127
  # @param [required, String] archive_id
105
128
  #
106
- # @param [required, String] stream_id The ID of the stream to be added
129
+ # @param [required, String] add_stream The ID of the stream to be added
107
130
  #
108
131
  # @param [optional, Boolean] has_audio
109
132
  #
@@ -113,26 +136,36 @@ module Vonage
113
136
  #
114
137
  # @see TODO: add docs link
115
138
  #
116
- def add_stream(archive_id:, stream_id:, **params)
117
- request('/v2/project/' + @config.application_id + '/archive/' + archive_id + '/streams', params: camelcase(params.merge(addStream: stream_id)), type: Patch)
139
+ def add_stream(application_id: @config.application_id, archive_id:, **params)
140
+ # TODO: raise error if application_id is nil
141
+ # TODO: raise error if add_stream is nil
142
+
143
+ request('/v2/project/' + application_id + '/archive/' + archive_id + '/streams', params: camelcase(params), type: Patch)
118
144
  end
119
145
 
120
146
  # Remove a stream from a composed archive that was started with the streamMode set to "manual".
121
147
  #
148
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
149
+ #
122
150
  # @param [required, String] archive_id
123
151
  #
124
- # @param [required, String] stream_id The ID of the stream to be removed
152
+ # @param [required, String] remove_stream The ID of the stream to be removed
125
153
  #
126
154
  # @return [Response]
127
155
  #
128
156
  # @see TODO: add docs link
129
157
  #
130
- def remove_stream(archive_id:, stream_id:)
131
- request('/v2/project/' + @config.application_id + '/archive/' + archive_id + '/streams', params: {removeStream: stream_id}, type: Patch)
158
+ def remove_stream(application_id: @config.application_id, archive_id:, **params)
159
+ # TODO: raise error if application_id is nil
160
+ # TODO: raise error if remove_stream is nil
161
+
162
+ request('/v2/project/' + application_id + '/archive/' + archive_id + '/streams', params: camelcase(params), type: Patch)
132
163
  end
133
164
 
134
165
  # Change the layout of a composed archive while it is being recorded.
135
166
  #
167
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
168
+ #
136
169
  # @param [required, String] archive_id
137
170
  #
138
171
  # @param [optional, String] type
@@ -145,8 +178,10 @@ module Vonage
145
178
  #
146
179
  # @see TODO: add docs link
147
180
  #
148
- def change_layout(archive_id:, **params)
149
- request('/v2/project/' + @config.application_id + '/archive/' + archive_id + '/layout', params: camelcase(params), type: Put)
181
+ def change_layout(application_id: @config.application_id, archive_id:, **params)
182
+ # TODO: raise error if application_id is nil
183
+
184
+ request('/v2/project/' + application_id + '/archive/' + archive_id + '/layout', params: camelcase(params), type: Put)
150
185
  end
151
186
  end
152
187
  end
@@ -0,0 +1,11 @@
1
+ # typed: true
2
+
3
+ class Vonage::Video::ListResponse < Vonage::Response
4
+ include Enumerable
5
+
6
+ def each
7
+ return enum_for(:each) unless block_given?
8
+
9
+ @entity._embedded.calls.each { |item| yield item }
10
+ end
11
+ end
@@ -11,6 +11,8 @@ module Vonage
11
11
 
12
12
  # Force a client to disconnect from a session.
13
13
  #
14
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
15
+ #
14
16
  # @param [required, String] :session_id
15
17
  #
16
18
  # @param [required, String] :connection_id The connection ID of the specific participant to be disconnected from the session.
@@ -19,12 +21,16 @@ module Vonage
19
21
  #
20
22
  # @see TODO: add docs link
21
23
  #
22
- def force_disconnect(session_id:, connection_id:)
23
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/connection/' + connection_id, type: Delete)
24
+ def force_disconnect(application_id: @config.application_id, session_id:, connection_id:)
25
+ # TODO: raise error if application_id is nil
26
+
27
+ request('/v2/project/' + application_id + '/session/' + session_id + '/connection/' + connection_id, type: Delete)
24
28
  end
25
29
 
26
30
  # Force mute a specific publisher stream in a session.
27
31
  #
32
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
33
+ #
28
34
  # @param [required, String] :session_id
29
35
  #
30
36
  # @param [required, String] :stream_id The stream ID of the specific stream to be muted.
@@ -33,26 +39,35 @@ module Vonage
33
39
  #
34
40
  # @see TODO: add docs link
35
41
  #
36
- def mute_single_stream(session_id:, stream_id:)
37
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/stream/' + stream_id + '/mute', type: Post)
42
+ def mute_single_stream(application_id: @config.application_id, session_id:, stream_id:)
43
+ application_id ||= @config.application_id
44
+ # TODO: raise error if application_id is nil
45
+
46
+ request('/v2/project/' + application_id + '/session/' + session_id + '/stream/' + stream_id + '/mute', type: Post)
38
47
  end
39
48
 
40
49
  # Force mute all publisher stream for a specific session.
41
50
  #
51
+ # @param [optional, String] :application_id (Required unless already set at Client instantiation or set in ENV)
52
+ #
42
53
  # @param [required, String] :session_id
43
54
  #
44
55
  # @param [required, String] :active
45
56
  #
46
- # @param [required, Array<String>] :excludedStreamIds
57
+ # @param [required, Array<String>] :excludedStreamIds
47
58
  #
48
59
  # @return [Response]
49
60
  #
50
61
  # @see TODO: add docs link
51
62
  #
52
- def mute_multiple_streams(session_id:, **params)
53
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/mute', params: params, type: Post)
63
+ def mute_multiple_streams(application_id: @config.application_id, session_id:, **params)
64
+ # TODO: raise error if application_id is nil
65
+ # TODO: camelcase params
66
+
67
+ request('/v2/project/' + application_id + '/session/' + session_id + '/mute', params: params, type: Post)
54
68
  end
55
69
 
56
70
  # TODO: add disable_force_mute ??
57
71
  end
58
72
  end
73
+
@@ -25,8 +25,10 @@ module Vonage
25
25
  #
26
26
  # @see TODO: add docs link
27
27
  #
28
- def send_to_one(session_id:, connection_id:, **params)
29
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/connection/' + connection_id + '/signal', params: params, type: Post)
28
+ def send_to_one(application_id: @config.application_id, session_id:, connection_id:, **params)
29
+ # TODO: raise error if application_id is nil
30
+
31
+ request('/v2/project/' + application_id + '/session/' + session_id + '/connection/' + connection_id + '/signal', params: params, type: Post)
30
32
  end
31
33
 
32
34
  # Send a signal to all participants in an active Vonage Video session.
@@ -43,8 +45,11 @@ module Vonage
43
45
  #
44
46
  # @see TODO: add docs link
45
47
  #
46
- def send_to_all(session_id:, **params)
47
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/signal', params: params, type: Post)
48
+ def send_to_all(application_id: @config.application_id, session_id:, **params)
49
+ # TODO: raise error if application_id is nil
50
+
51
+ request('/v2/project/' + application_id + '/session/' + session_id + '/signal', params: params, type: Post)
48
52
  end
49
53
  end
50
54
  end
55
+
@@ -22,8 +22,10 @@ module Vonage
22
22
  #
23
23
  # @see TODO: add docs link
24
24
  #
25
- def list(session_id:)
26
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/stream', response_class: ListResponse)
25
+ def list(application_id: @config.application_id, session_id:)
26
+ # TODO: raise error if application_id is nil
27
+
28
+ request('/v2/project/' + application_id + '/session/' + session_id + '/stream', response_class: Video::ListResponse)
27
29
  end
28
30
 
29
31
  # Get information about a specified stream.
@@ -38,8 +40,10 @@ module Vonage
38
40
  #
39
41
  # @see TODO: add docs link
40
42
  #
41
- def info(session_id:, stream_id:)
42
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/stream/' + stream_id)
43
+ def info(application_id: @config.application_id, session_id:, stream_id:)
44
+ # TODO: raise error if application_id is nil
45
+
46
+ request('/v2/project/' + application_id + '/session/' + session_id + '/stream/' + stream_id)
43
47
  end
44
48
 
45
49
  # Change the layout for a list of specified streams.
@@ -58,13 +62,15 @@ module Vonage
58
62
  #
59
63
  # @see TODO: add docs link
60
64
  #
61
- def change_layout(session_id:, **params)
65
+ def change_layout(application_id: @config.application_id, session_id:, **params)
66
+ # TODO: raise error if application_id is nil
62
67
  # TODO camelcase layout_class_list
63
68
  # if params[:items]
64
69
  # params[:items] = params[:items].map {|item| camelcase(item)}
65
70
  # end
66
71
 
67
- request('/v2/project/' + @config.application_id + '/session/' + session_id + '/stream', params: params, type: Put)
72
+ request('/v2/project/' + application_id + '/session/' + session_id + '/stream', params: params, type: Put)
68
73
  end
69
74
  end
70
75
  end
76
+
data/lib/vonage/video.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  module Vonage
5
5
  class Video < Namespace
6
6
  include Keys
7
-
7
+
8
8
  self.authentication = BearerToken
9
9
 
10
10
  self.host = :video_host
@@ -30,7 +30,7 @@ module Vonage
30
30
  #
31
31
  def create_session(**params)
32
32
  request_params = params.clone
33
- request_params[:archive_mode] ||= 'manual'
33
+ request_params[:archive_mode] ||= 'manual'
34
34
  media_mode = request_params.delete(:media_mode) || 'routed'
35
35
 
36
36
  if media_mode == 'relayed' && request_params[:archive_mode] == 'manual'
@@ -42,7 +42,7 @@ module Vonage
42
42
  response = request('/session/create', params: camelcase(request_params), type: Post)
43
43
 
44
44
  public_response_data = {
45
- session_id: response.entity.first.session_id,
45
+ session_id: response.entity[:session_id],
46
46
  archive_mode: request_params[:archive_mode],
47
47
  media_mode: media_mode,
48
48
  location: request_params[:location]
@@ -54,22 +54,7 @@ module Vonage
54
54
  end
55
55
 
56
56
  def generate_client_token(session_id:, scope: 'session.connect', role: 'publisher', **params)
57
- valid_roles = %w[publisher subscriber moderator publisheronly]
58
- raise ArgumentError, "Invalid role: #{role}" unless valid_roles.include?(role)
59
-
60
- claims = {
61
- application_id: @config.application_id,
62
- scope: scope,
63
- session_id: session_id,
64
- role: role,
65
- initial_layout_class_list: '',
66
- sub: 'video',
67
- acl: {
68
- paths: {'/session/**' => {}}
69
- }
70
- }
71
-
72
-
57
+ claims = {session_id: session_id, application_id: @config.application_id, scope: scope, role: role}
73
58
  claims[:data] = params[:data] if params[:data]
74
59
  claims[:initial_layout_class_list] = params[:initial_layout_class_list].join(' ') if params[:initial_layout_class_list]
75
60
  claims[:exp] = params[:expire_time].to_i if params[:expire_time]
@@ -77,52 +62,30 @@ module Vonage
77
62
  JWT.generate(claims, @config.private_key)
78
63
  end
79
64
 
80
- # @return [Archives]
65
+ # @return [Streams]
81
66
  #
82
- def archives
83
- @archives ||= Archives.new(@config)
67
+ def streams
68
+ @streams ||= Streams.new(@config)
84
69
  end
85
70
 
86
- # @return [Broadcasts]
71
+ # @return [Archives]
87
72
  #
88
- def broadcasts
89
- @broadcasts ||= Broadcasts.new(@config)
73
+ def archives
74
+ @archives ||= Archives.new(@config)
90
75
  end
91
76
 
92
- # @return [Moderation]
77
+ # @return [Archives]
93
78
  #
94
79
  def moderation
95
80
  @moderation ||= Moderation.new(@config)
96
81
  end
97
82
 
98
- # @return [Signals]
83
+ # @return [Archives]
99
84
  #
100
85
  def signals
101
86
  @signals ||= Signals.new(@config)
102
87
  end
103
88
 
104
- # @return [Streams]
105
- #
106
- def streams
107
- @streams ||= Streams.new(@config)
108
- end
109
-
110
- # @return [Captions]
111
- #
112
- def captions
113
- @captions ||= Captions.new(@config)
114
- end
115
-
116
- # @return [Renders]
117
- #
118
- def renders
119
- @renders ||= Renders.new(@config)
120
- end
121
-
122
- # @return [WebSocket]
123
- #
124
- def web_socket
125
- @web_socket ||= WebSocket.new(@config)
126
- end
89
+ # TODO: add token generator
127
90
  end
128
91
  end
@@ -2,9 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
  require 'phonelib'
4
4
 
5
- module Vonage
5
+ module Vonage
6
6
  class Voice::Actions::Connect
7
- attr_accessor :endpoint, :from, :eventType, :timeout, :limit, :machineDetection, :advanced_machine_detection, :eventUrl, :eventMethod, :ringbackTone
7
+ attr_accessor :endpoint, :from, :eventType, :timeout, :limit, :machineDetection, :eventUrl, :eventMethod, :ringbackTone
8
8
 
9
9
  def initialize(attributes = {})
10
10
  @endpoint = attributes.fetch(:endpoint)
@@ -13,7 +13,6 @@ module Vonage
13
13
  @timeout = attributes.fetch(:timeout, nil)
14
14
  @limit = attributes.fetch(:limit, nil)
15
15
  @machineDetection = attributes.fetch(:machineDetection, nil)
16
- @advanced_machine_detection = attributes.fetch(:advanced_machine_detection, nil)
17
16
  @eventUrl = attributes.fetch(:eventUrl, nil)
18
17
  @eventMethod = attributes.fetch(:eventMethod, nil)
19
18
  @ringbackTone = attributes.fetch(:ringbackTone, nil)
@@ -40,10 +39,6 @@ module Vonage
40
39
  verify_machine_detection
41
40
  end
42
41
 
43
- if self.advanced_machine_detection
44
- verify_advanced_machine_detection
45
- end
46
-
47
42
  if self.eventUrl
48
43
  verify_event_url
49
44
  end
@@ -87,33 +82,10 @@ module Vonage
87
82
  raise ClientError.new("Invalid 'machineDetection' value, must be either: 'continue' or 'hangup' if defined") unless self.machineDetection == 'continue' || self.machineDetection == 'hangup'
88
83
  end
89
84
 
90
- def verify_advanced_machine_detection
91
- raise ClientError.new("Invalid 'advanced_machine_detection' value, must be a Hash") unless self.advanced_machine_detection.is_a?(Hash)
92
- verify_advanced_machine_detection_behavior if self.advanced_machine_detection[:behavior]
93
- verify_advanced_machine_detection_mode if self.advanced_machine_detection[:mode]
94
- verify_advanced_machine_detection_beep_timeout if self.advanced_machine_detection[:beep_timeout]
95
- end
96
-
97
- def verify_advanced_machine_detection_behavior
98
- raise ClientError.new("Invalid 'advanced_machine_detection[:behavior]' value, must be a `continue` or `hangup`") unless ['continue', 'hangup'].include?(self.advanced_machine_detection[:behavior])
99
- end
100
-
101
- def verify_advanced_machine_detection_mode
102
- raise ClientError.new("Invalid 'advanced_machine_detection[:mode]' value, must be a `detect` or `detect_beep`") unless ['detect', 'detect_beep'].include?(self.advanced_machine_detection[:mode])
103
- end
104
-
105
- def verify_advanced_machine_detection_beep_timeout
106
- raise ClientError.new("Invalid 'advanced_machine_detection[:beep_timeout]' value, must be between 45 and 120") unless self.advanced_machine_detection[:beep_timeout].between?(45, 120)
107
- end
108
-
109
85
  def verify_event_url
110
- unless self.eventUrl.is_a?(Array) && self.eventUrl.length == 1 && self.eventUrl[0].is_a?(String)
111
- raise ClientError.new("Expected 'eventUrl' parameter to be an Array containing a single string item")
112
- end
113
-
114
- uri = URI.parse(self.eventUrl[0])
86
+ uri = URI.parse(self.eventUrl)
115
87
 
116
- raise ClientError.new("Invalid 'eventUrl' value, array must contain a valid URL") unless uri.kind_of?(URI::HTTP) || uri.kind_of?(URI::HTTPS)
88
+ raise ClientError.new("Invalid 'eventUrl' value, must be a valid URL") unless uri.kind_of?(URI::HTTP) || uri.kind_of?(URI::HTTPS)
117
89
 
118
90
  self.eventUrl
119
91
  end
@@ -213,7 +185,6 @@ module Vonage
213
185
  }
214
186
 
215
187
  hash.merge!(headers: endpoint_attrs[:headers]) if endpoint_attrs[:headers]
216
- hash.merge!(standardHeaders: endpoint_attrs[:standardHeaders]) if endpoint_attrs[:standardHeaders]
217
188
 
218
189
  hash
219
190
  end
@@ -225,4 +196,4 @@ module Vonage
225
196
  }
226
197
  end
227
198
  end
228
- end
199
+ end
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
-
4
- module Vonage
3
+
4
+ module Vonage
5
5
  class Voice::Actions::Conversation
6
6
  attr_accessor :name, :musicOnHoldUrl, :startOnEnter, :endOnExit, :record, :canSpeak, :canHear, :mute
7
7
 
@@ -49,15 +49,9 @@ module Vonage
49
49
  end
50
50
 
51
51
  def verify_music_on_hold_url
52
- music_on_hold_url = self.musicOnHoldUrl
53
-
54
- unless music_on_hold_url.is_a?(Array) && music_on_hold_url.length == 1 && music_on_hold_url[0].is_a?(String)
55
- raise ClientError.new("Expected 'musicOnHoldUrl' parameter to be an Array containing a single string item")
56
- end
57
-
58
- uri = URI.parse(music_on_hold_url[0])
52
+ uri = URI.parse(self.musicOnHoldUrl)
59
53
 
60
- raise ClientError.new("Invalid 'musicOnHoldUrl' value, array must contain a valid URL") unless uri.kind_of?(URI::HTTP) || uri.kind_of?(URI::HTTPS)
54
+ raise ClientError.new("Invalid 'musicOnHoldUrl' value, must be a valid URL") unless uri.kind_of?(URI::HTTP) || uri.kind_of?(URI::HTTPS)
61
55
 
62
56
  self.musicOnHoldUrl
63
57
  end