telnyx 2.9.0 → 3.0.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.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/.github/scripts/before_install.sh +10 -9
  3. data/.github/workflows/publish-gem-on-release.yml +6 -6
  4. data/.github/workflows/ruby.yml +4 -4
  5. data/.rubocop.yml +1 -1
  6. data/Gemfile +7 -8
  7. data/README.md +1 -1
  8. data/Spec3.json +77839 -0
  9. data/VERSION +1 -1
  10. data/lib/telnyx/access_control_ip.rb +13 -0
  11. data/lib/telnyx/access_ip_range.rb +12 -0
  12. data/lib/telnyx/address.rb +9 -0
  13. data/lib/telnyx/api_operations/delete.rb +1 -1
  14. data/lib/telnyx/api_resource.rb +4 -1
  15. data/lib/telnyx/authentication_providers.rb +12 -0
  16. data/lib/telnyx/available_phone_number.rb +5 -0
  17. data/lib/telnyx/balance.rb +12 -0
  18. data/lib/telnyx/batch_mdr_report.rb +15 -0
  19. data/lib/telnyx/brand.rb +13 -0
  20. data/lib/telnyx/bulk_creation.rb +21 -0
  21. data/lib/telnyx/bulk_credential.rb +16 -0
  22. data/lib/telnyx/bulk_sim_card_action.rb +9 -0
  23. data/lib/telnyx/business_identitie.rb +9 -0
  24. data/lib/telnyx/call.rb +2 -2
  25. data/lib/telnyx/call_event.rb +9 -0
  26. data/lib/telnyx/call_recording.rb +12 -0
  27. data/lib/telnyx/campaign.rb +34 -0
  28. data/lib/telnyx/cdr_usage_report.rb +13 -0
  29. data/lib/telnyx/channel_zone.rb +10 -0
  30. data/lib/telnyx/comment.rb +20 -0
  31. data/lib/telnyx/conference.rb +1 -1
  32. data/lib/telnyx/connection.rb +5 -0
  33. data/lib/telnyx/csv_download.rb +10 -0
  34. data/lib/telnyx/custom_storage_credential.rb +7 -0
  35. data/lib/telnyx/detail_record.rb +9 -0
  36. data/lib/telnyx/dialogflow_connection.rb +20 -0
  37. data/lib/telnyx/document.rb +20 -0
  38. data/lib/telnyx/dynamic_emergency_address.rb +12 -0
  39. data/lib/telnyx/dynamic_emergency_endpoint.rb +12 -0
  40. data/lib/telnyx/embedding.rb +14 -0
  41. data/lib/telnyx/enum.rb +15 -0
  42. data/lib/telnyx/fax.rb +14 -0
  43. data/lib/telnyx/global_ip.rb +10 -0
  44. data/lib/telnyx/global_ip_allowed_port.rb +8 -0
  45. data/lib/telnyx/global_ip_assignment.rb +12 -0
  46. data/lib/telnyx/global_ip_assignment_health.rb +8 -0
  47. data/lib/telnyx/global_ip_assignment_usage.rb +8 -0
  48. data/lib/telnyx/global_ip_latency.rb +8 -0
  49. data/lib/telnyx/global_ip_protocol.rb +8 -0
  50. data/lib/telnyx/global_ip_usage.rb +8 -0
  51. data/lib/telnyx/inference.rb +9 -0
  52. data/lib/telnyx/inventory_coverage.rb +9 -0
  53. data/lib/telnyx/ledger_billing_group_report.rb +9 -0
  54. data/lib/telnyx/managed_account.rb +32 -0
  55. data/lib/telnyx/mdr_usage_report.rb +21 -0
  56. data/lib/telnyx/media.rb +21 -0
  57. data/lib/telnyx/message_number_pool.rb +9 -0
  58. data/lib/telnyx/messaging_hosted_number_order.rb +21 -0
  59. data/lib/telnyx/messaging_profile.rb +14 -2
  60. data/lib/telnyx/messaging_tollfree_verification.rb +12 -0
  61. data/lib/telnyx/messaging_url_domain.rb +9 -0
  62. data/lib/telnyx/mobile_operator_network.rb +9 -0
  63. data/lib/telnyx/mobile_push_credential.rb +11 -0
  64. data/lib/telnyx/network.rb +19 -0
  65. data/lib/telnyx/notification_channel.rb +12 -0
  66. data/lib/telnyx/notification_event.rb +9 -0
  67. data/lib/telnyx/notification_event_condition.rb +9 -0
  68. data/lib/telnyx/notification_profile.rb +12 -0
  69. data/lib/telnyx/notification_setting.rb +12 -0
  70. data/lib/telnyx/number_block_order.rb +10 -0
  71. data/lib/telnyx/ota_update.rb +9 -0
  72. data/lib/telnyx/phone_number.rb +6 -0
  73. data/lib/telnyx/phone_number_block_job.rb +14 -0
  74. data/lib/telnyx/phone_number_campaigns.rb +12 -0
  75. data/lib/telnyx/portability_check.rb +9 -0
  76. data/lib/telnyx/porting_order.rb +39 -1
  77. data/lib/telnyx/portout.rb +9 -0
  78. data/lib/telnyx/private_wireless_gateway.rb +11 -0
  79. data/lib/telnyx/public_internet_gateway.rb +11 -0
  80. data/lib/telnyx/region.rb +9 -0
  81. data/lib/telnyx/requirement.rb +8 -0
  82. data/lib/telnyx/requirement_type.rb +8 -0
  83. data/lib/telnyx/room.rb +20 -0
  84. data/lib/telnyx/room_composition.rb +11 -0
  85. data/lib/telnyx/room_participant.rb +9 -0
  86. data/lib/telnyx/room_recording.rb +10 -0
  87. data/lib/telnyx/room_session.rb +18 -0
  88. data/lib/telnyx/short_code.rb +10 -0
  89. data/lib/telnyx/sim_card.rb +28 -2
  90. data/lib/telnyx/sim_card_action.rb +12 -0
  91. data/lib/telnyx/sim_card_data_usage_notification.rb +12 -0
  92. data/lib/telnyx/sim_card_group.rb +21 -0
  93. data/lib/telnyx/sim_card_group_action.rb +8 -0
  94. data/lib/telnyx/sim_card_order.rb +10 -0
  95. data/lib/telnyx/summary.rb +9 -0
  96. data/lib/telnyx/telephony_credential.rb +22 -0
  97. data/lib/telnyx/telnyx_client.rb +1 -2
  98. data/lib/telnyx/texml_application.rb +9 -0
  99. data/lib/telnyx/verification.rb +3 -3
  100. data/lib/telnyx/verified_calls_display_profile.rb +17 -0
  101. data/lib/telnyx/verify_profile.rb +1 -0
  102. data/lib/telnyx/version.rb +1 -1
  103. data/lib/telnyx/virtual_cross_connect.rb +20 -0
  104. data/lib/telnyx/virtual_cross_connect_region.rb +9 -0
  105. data/lib/telnyx/wdr.rb +13 -0
  106. data/lib/telnyx/webhook_deliverie.rb +9 -0
  107. data/lib/telnyx/wireguard_interface.rb +11 -0
  108. data/lib/telnyx/wireguard_peer.rb +21 -0
  109. data/lib/telnyx.rb +67 -3
  110. data/server.js +31 -0
  111. data/telnyx.gemspec +4 -2
  112. data/test/telnyx/api_resource_test.rb +25 -21
  113. data/test/telnyx/available_phone_number_test.rb +6 -0
  114. data/test/telnyx/batch_mdr_report_test.rb +35 -0
  115. data/test/telnyx/billing_group_test.rb +12 -8
  116. data/test/telnyx/bulk_credential_test.rb +20 -0
  117. data/test/telnyx/bulk_sim_card_action_test.rb +22 -0
  118. data/test/telnyx/business_identitie_test.rb +25 -0
  119. data/test/telnyx/call_control_application_test.rb +13 -9
  120. data/test/telnyx/call_control_test.rb +24 -23
  121. data/test/telnyx/call_event_test.rb +14 -0
  122. data/test/telnyx/call_recording_test.rb +28 -0
  123. data/test/telnyx/call_test.rb +29 -0
  124. data/test/telnyx/campaign_test.rb +32 -0
  125. data/test/telnyx/cdr_usage_report_test.rb +15 -0
  126. data/test/telnyx/channel_zone_test.rb +14 -0
  127. data/test/telnyx/comment_test.rb +32 -0
  128. data/test/telnyx/conference_test.rb +27 -16
  129. data/test/telnyx/connection_test.rb +8 -1
  130. data/test/telnyx/credential_connection_test.rb +5 -4
  131. data/test/telnyx/csv_download_test.rb +33 -0
  132. data/test/telnyx/custom_storage_credential_test.rb +17 -0
  133. data/test/telnyx/detail_record_test.rb +15 -0
  134. data/test/telnyx/dialogflow_connection_test.rb +32 -0
  135. data/test/telnyx/embedding_test.rb +27 -0
  136. data/test/telnyx/enum_test.rb +15 -0
  137. data/test/telnyx/fax_application_test.rb +5 -4
  138. data/test/telnyx/fax_test.rb +13 -4
  139. data/test/telnyx/fqdn_connection_test.rb +5 -5
  140. data/test/telnyx/fqdn_test.rb +12 -7
  141. data/test/telnyx/global_ip_allowed_port_test.rb +14 -0
  142. data/test/telnyx/global_ip_assignment_health_test.rb +14 -0
  143. data/test/telnyx/global_ip_assignment_test.rb +44 -0
  144. data/test/telnyx/global_ip_latency_test.rb +14 -0
  145. data/test/telnyx/global_ip_protocol_test.rb +14 -0
  146. data/test/telnyx/global_ip_test.rb +35 -0
  147. data/test/telnyx/global_ip_usage_test.rb +14 -0
  148. data/test/telnyx/inference_test.rb +12 -0
  149. data/test/telnyx/ip_connection_test.rb +12 -8
  150. data/test/telnyx/ip_test.rb +12 -8
  151. data/test/telnyx/ledger_billing_group_report_test.rb +18 -0
  152. data/test/telnyx/managed_account_test.rb +42 -0
  153. data/test/telnyx/mdr_usage_report_test.rb +47 -0
  154. data/test/telnyx/message_number_pool_test.rb +18 -0
  155. data/test/telnyx/message_test.rb +2 -2
  156. data/test/telnyx/messaging_phone_number_test.rb +2 -1
  157. data/test/telnyx/messaging_profile_test.rb +26 -14
  158. data/test/telnyx/messaging_tollfree_verification_test.rb +71 -0
  159. data/test/telnyx/messaging_url_domain_test.rb +14 -0
  160. data/test/telnyx/mobile_operator_network_test.rb +15 -0
  161. data/test/telnyx/mobile_push_credential_test.rb +33 -0
  162. data/test/telnyx/network_test.rb +49 -0
  163. data/test/telnyx/number_block_order_test.rb +28 -0
  164. data/test/telnyx/number_order_document_test.rb +4 -3
  165. data/test/telnyx/number_order_test.rb +3 -2
  166. data/test/telnyx/number_reservation_test.rb +2 -2
  167. data/test/telnyx/ota_update_test.rb +20 -0
  168. data/test/telnyx/phone_number_block_job_test.rb +25 -0
  169. data/test/telnyx/phone_number_regulatory_requirement_test.rb +2 -1
  170. data/test/telnyx/phone_number_test.rb +8 -6
  171. data/test/telnyx/porting_order_test.rb +45 -10
  172. data/test/telnyx/private_wireless_gateway_test.rb +32 -0
  173. data/test/telnyx/public_internet_gateway_test.rb +32 -0
  174. data/test/telnyx/queue_test.rb +9 -6
  175. data/test/telnyx/region_test.rb +14 -0
  176. data/test/telnyx/regulatory_requirement_test.rb +6 -3
  177. data/test/telnyx/requirement_test.rb +22 -0
  178. data/test/telnyx/requirement_type_test.rb +22 -0
  179. data/test/telnyx/room_composition_test.rb +32 -0
  180. data/test/telnyx/room_participant_test.rb +19 -0
  181. data/test/telnyx/room_recording_test.rb +27 -0
  182. data/test/telnyx/room_session_test.rb +47 -0
  183. data/test/telnyx/room_test.rb +52 -0
  184. data/test/telnyx/short_code_test.rb +30 -0
  185. data/test/telnyx/sim_card_data_usage_notification_test.rb +42 -0
  186. data/test/telnyx/sim_card_group_action_test.rb +22 -0
  187. data/test/telnyx/sim_card_group_test.rb +59 -0
  188. data/test/telnyx/sim_card_order_test.rb +27 -0
  189. data/test/telnyx/sim_card_test.rb +75 -10
  190. data/test/telnyx/summary_test.rb +12 -0
  191. data/test/telnyx/telephony_credential_test.rb +35 -6
  192. data/test/telnyx/texml_application_test.rb +25 -0
  193. data/test/telnyx/verification_test.rb +4 -4
  194. data/test/telnyx/verified_calls_display_profile_test.rb +33 -0
  195. data/test/telnyx/verify_profile_test.rb +16 -7
  196. data/test/telnyx/virtual_cross_connect_region_test.rb +22 -0
  197. data/test/telnyx/virtual_cross_connect_test.rb +49 -0
  198. data/test/telnyx/wdr_test.rb +14 -0
  199. data/test/telnyx/webhook_deliverie_test.rb +23 -0
  200. data/test/telnyx/wireguard_interface_test.rb +32 -0
  201. data/test/telnyx/wireguard_peer_test.rb +48 -0
  202. data/test/test_helper.rb +10 -26
  203. metadata +235 -37
  204. data/examples/2 factor authentication/Gemfile +0 -7
  205. data/examples/2 factor authentication/main.rb +0 -67
  206. data/examples/2 factor authentication/readme.md +0 -5
  207. data/test/telnyx_mock.rb +0 -78
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class Summary < APIResource
5
+ extend Telnyx::APIOperations::Create
6
+
7
+ OBJECT_NAME = "ai/summarize".freeze
8
+ end
9
+ end
@@ -6,6 +6,28 @@ module Telnyx
6
6
  extend Telnyx::APIOperations::Create
7
7
  include Telnyx::APIOperations::Save
8
8
  include Telnyx::APIOperations::Delete
9
+ extend APIOperations::NestedResource
10
+ ACTIONS = %w[activate deactivate].freeze
11
+
12
+ ACTIONS.each do |action|
13
+ nested_resource_class_methods action,
14
+ path: %W[actions #{action}],
15
+ operations: [:create],
16
+ instance_methods: { create: action }
17
+ end
18
+
19
+ %w[token].each do |action|
20
+ nested_resource_class_methods action,
21
+ path: %W[#{action}],
22
+ operations: [:create],
23
+ instance_methods: { create: action }
24
+ end
25
+ # Additional action to list tags
26
+ def self.tags(params = {}, opts = {})
27
+ opts = Util.normalize_opts(opts)
28
+ resp, opts = request(:get, "/v2/telephony_credentials/tags", params, opts)
29
+ ListObject.construct_from(resp.data, opts)
30
+ end
9
31
 
10
32
  OBJECT_NAME = "telephony_credential".freeze
11
33
  end
@@ -32,7 +32,6 @@ module Telnyx
32
32
  # object per thread.
33
33
  Thread.current[:telnyx_client_default_conn] ||= begin
34
34
  conn = Faraday.new do |builder|
35
- builder.use Faraday::Request::Multipart
36
35
  builder.use Faraday::Request::UrlEncoded
37
36
  builder.use Faraday::Response::RaiseError
38
37
 
@@ -411,7 +410,7 @@ module Telnyx
411
410
  body: body,
412
411
  request_id: context.request_id)
413
412
 
414
- return unless context.request_id
413
+ nil unless context.request_id
415
414
  end
416
415
  private :log_response
417
416
 
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class TexmlApplication < APIResource
5
+ extend Telnyx::APIOperations::List
6
+
7
+ OBJECT_NAME = "texml_application".freeze
8
+ end
9
+ end
@@ -19,9 +19,9 @@ module Telnyx
19
19
  retrieve: "by_telephone",
20
20
  }
21
21
 
22
- def self.submit_code(phone_number: nil, code: nil)
23
- url = "#{resource_url}/by_phone_number/#{CGI.escape phone_number}/actions/verify"
24
- resp, _opts = request(:post, url, code: code)
22
+ def self.submit_code(params = {})
23
+ url = "#{resource_url}/by_phone_number/#{CGI.escape params[:phone_number]}/actions/verify"
24
+ resp, _opts = request(:post, url, params)
25
25
  Response.construct_from resp.data[:data]
26
26
  end
27
27
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class VerifiedCallsDisplayProfile < APIResource
5
+ extend APIOperations::List
6
+ extend APIOperations::NestedResource
7
+
8
+ %w[verification_request].each do |action|
9
+ nested_resource_class_methods action,
10
+ path: %W[#{action}],
11
+ operations: [:create],
12
+ instance_methods: { create: action }
13
+ end
14
+
15
+ OBJECT_NAME = "verified_calls_display_profile".freeze
16
+ end
17
+ end
@@ -5,6 +5,7 @@ module Telnyx
5
5
  extend APIOperations::List
6
6
  extend APIOperations::Create
7
7
  include APIOperations::Save
8
+ include APIOperations::Delete
8
9
 
9
10
  OBJECT_NAME = "verify_profile".freeze
10
11
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Telnyx
4
- VERSION = "2.9.0".freeze
4
+ VERSION = "3.0.0".freeze
5
5
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class VirtualCrossConnect < APIResource
5
+ include APIOperations::Delete
6
+ include APIOperations::Save
7
+ extend APIOperations::List
8
+ extend APIOperations::Create
9
+ extend APIOperations::NestedResource
10
+ ACTIONS = %w[provision].freeze
11
+ ACTIONS.each do |action|
12
+ nested_resource_class_methods action,
13
+ path: %W[actions #{action}],
14
+ operations: [:create],
15
+ instance_methods: { create: action }
16
+ end
17
+
18
+ OBJECT_NAME = "virtual_cross_connect".freeze
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class VirtualCrossConnectRegion < APIResource
5
+ extend APIOperations::List
6
+
7
+ OBJECT_NAME = "virtual_cross_connect_region".freeze
8
+ end
9
+ end
data/lib/telnyx/wdr.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class Wdr < APIResource
5
+ extend APIOperations::List
6
+ def self.resource_path(id = nil)
7
+ return "reports/wdrs/#{CGI.escape(id)}" if id
8
+
9
+ "reports/wdrs"
10
+ end
11
+ OBJECT_NAME = "/reports/wdr".freeze
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class WebhookDeliverie < APIResource
5
+ extend APIOperations::List
6
+
7
+ OBJECT_NAME = "webhook_deliverie".freeze
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class WireguardInterface < APIResource
5
+ include Telnyx::APIOperations::Delete
6
+ extend Telnyx::APIOperations::List
7
+ extend Telnyx::APIOperations::Create
8
+
9
+ OBJECT_NAME = "wireguard_interface".freeze
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ class WireguardPeer < APIResource
5
+ include APIOperations::Delete
6
+ include APIOperations::Save
7
+ extend APIOperations::List
8
+ extend APIOperations::Create
9
+ extend APIOperations::NestedResource
10
+ nested_resource_class_methods "config",
11
+ path: "config",
12
+ operations: [:list],
13
+ instance_methods: { list: "config" }
14
+ nested_resource_class_methods "allowed_ips",
15
+ path: "allowed_ips",
16
+ operations: [:list],
17
+ instance_methods: { list: "allowed_ips" }
18
+
19
+ OBJECT_NAME = "wireguard_peer".freeze
20
+ end
21
+ end
data/lib/telnyx.rb CHANGED
@@ -4,6 +4,9 @@
4
4
  # API spec at https://developers.telnyx.com
5
5
  require "cgi"
6
6
  require "faraday"
7
+ require "faraday/retry"
8
+ require "faraday/multipart"
9
+ require "faraday/net_http_persistent"
7
10
  require "json"
8
11
  require "logger"
9
12
  require "openssl"
@@ -46,33 +49,94 @@ require "telnyx/conference"
46
49
  require "telnyx/connection"
47
50
  require "telnyx/credential_connection"
48
51
  require "telnyx/event"
49
- require "telnyx/fax"
50
52
  require "telnyx/fax_application"
53
+ require "telnyx/fax"
51
54
  require "telnyx/fqdn_connection"
52
55
  require "telnyx/fqdn"
53
56
  require "telnyx/ip_connection"
54
57
  require "telnyx/ip"
55
58
  require "telnyx/message"
59
+ require "telnyx/message_number_pool"
56
60
  require "telnyx/messaging_phone_number"
57
61
  require "telnyx/messaging_profile"
62
+ require "telnyx/mobile_operator_network"
63
+ require "telnyx/network"
64
+ require "telnyx/region"
58
65
  require "telnyx/number_lookup"
59
66
  require "telnyx/number_order_document"
60
67
  require "telnyx/number_order"
61
68
  require "telnyx/number_reservation"
69
+ require "telnyx/ota_update"
62
70
  require "telnyx/outbound_voice_profile"
63
71
  require "telnyx/phone_number_regulatory_requirement"
64
72
  require "telnyx/phone_number"
65
- require "telnyx/portout"
66
73
  require "telnyx/porting_order"
74
+ require "telnyx/portout"
67
75
  require "telnyx/public_key"
68
- require "telnyx/queue"
69
76
  require "telnyx/queue_call"
77
+ require "telnyx/queue"
70
78
  require "telnyx/regulatory_requirement"
71
79
  require "telnyx/sim_card"
72
80
  require "telnyx/telephony_credential"
73
81
  require "telnyx/verification"
74
82
  require "telnyx/verify_profile"
75
83
  require "telnyx/wireless_detail_records_report"
84
+ require "telnyx/room_composition"
85
+ require "telnyx/room_participant"
86
+ require "telnyx/room_recording"
87
+ require "telnyx/room_session"
88
+ require "telnyx/room"
89
+ require "telnyx/wireguard_interface"
90
+ require "telnyx/short_code"
91
+ require "telnyx/wireguard_peer"
92
+ require "telnyx/virtual_cross_connect_region"
93
+ require "telnyx/virtual_cross_connect"
94
+ require "telnyx/sim_card_group"
95
+ require "telnyx/sim_card_order"
96
+ require "telnyx/sim_card_group_action"
97
+ require "telnyx/sim_card_data_usage_notification"
98
+ require "telnyx/requirement_type"
99
+ require "telnyx/requirement"
100
+ require "telnyx/batch_mdr_report"
101
+ require "telnyx/cdr_usage_report"
102
+ require "telnyx/mdr_usage_report"
103
+ require "telnyx/inference"
104
+ require "telnyx/summary"
105
+ require "telnyx/call_recording"
106
+ require "telnyx/public_internet_gateway"
107
+ require "telnyx/private_wireless_gateway"
108
+ require "telnyx/csv_download"
109
+ require "telnyx/number_block_order"
110
+ require "telnyx/mobile_push_credential"
111
+ require "telnyx/messaging_tollfree_verification"
112
+ require "telnyx/phone_number_block_job"
113
+ require "telnyx/wdr"
114
+ require "telnyx/embedding"
115
+ require "telnyx/webhook_deliverie"
116
+ require "telnyx/call_event"
117
+ require "telnyx/messaging_url_domain"
118
+ require "telnyx/verified_calls_display_profile"
119
+ require "telnyx/detail_record"
120
+ require "telnyx/business_identitie"
121
+ require "telnyx/managed_account"
122
+ require "telnyx/ledger_billing_group_report"
123
+ require "telnyx/global_ip"
124
+ require "telnyx/global_ip_usage"
125
+ require "telnyx/global_ip_protocol"
126
+ require "telnyx/global_ip_latency"
127
+ require "telnyx/global_ip_assignment"
128
+ require "telnyx/global_ip_assignment_health"
129
+ require "telnyx/global_ip_assignment_usage"
130
+ require "telnyx/global_ip_allowed_port"
131
+ require "telnyx/dialogflow_connection"
132
+ require "telnyx/channel_zone"
133
+ require "telnyx/bulk_sim_card_action"
134
+ require "telnyx/campaign"
135
+ require "telnyx/comment"
136
+ require "telnyx/enum"
137
+ require "telnyx/custom_storage_credential"
138
+ require "telnyx/texml_application"
139
+ require "telnyx/bulk_credential"
76
140
 
77
141
  module Telnyx
78
142
  @app_info = nil
data/server.js ADDED
@@ -0,0 +1,31 @@
1
+ const http = require('http');
2
+ const httpProxy = require('http-proxy');
3
+
4
+ // Create a proxy server with custom application logic
5
+ const proxy = httpProxy.createProxyServer({});
6
+
7
+ // Your Prism mock server URL
8
+ const PRISM_MOCK_SERVER = 'http://127.0.0.1:4010'; // Replace with your Prism mock server URL
9
+
10
+ // Create your server that makes an operation on the request
11
+ const server = http.createServer((req, res) => {
12
+ // Modify the URL by removing the '/v2' prefix
13
+ req.url = req.url.replace(/^\/v2(\/|$)/, '/');
14
+
15
+ // Forward the modified request to the Prism mock server
16
+ proxy.web(req, res, { target: PRISM_MOCK_SERVER });
17
+ });
18
+
19
+ // Listen to the `error` event and log it
20
+ proxy.on('error', (err, req, res) => {
21
+ console.error('Proxy error:', err);
22
+ res.end();
23
+ });
24
+
25
+ // Choose the port for the proxy server
26
+ const PORT = 8000; // You can choose any available port
27
+
28
+ // Start the server
29
+ server.listen(PORT, () => {
30
+ console.log(`Proxy server listening on port ${PORT}`);
31
+ });
data/telnyx.gemspec CHANGED
@@ -7,7 +7,7 @@ require "telnyx/version"
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "telnyx"
9
9
  s.version = Telnyx::VERSION
10
- s.required_ruby_version = ">= 2.1.0"
10
+ s.required_ruby_version = ">= 3.0.0"
11
11
  s.summary = "Ruby bindings for the Telnyx API"
12
12
  s.description = "Telnyx enables anyone to deliver enterprise-grade real-time communications over the internet. See https://telnyx.com for details."
13
13
  s.author = "Telnyx"
@@ -22,7 +22,9 @@ Gem::Specification.new do |s|
22
22
  "source_code_uri" => "https://github.com/team-telnyx/telnyx-ruby",
23
23
  }
24
24
 
25
- s.add_dependency("faraday", ">= 0.13", "< 2.0", "!= 0.16.0", "!= 0.16.1", "!= 0.16.2", "!= 0.17.1")
25
+ s.add_dependency("faraday", ">= 2.5.0")
26
+ s.add_dependency("faraday-multipart", "~> 1.0.4")
27
+ s.add_dependency("faraday-net_http_persistent", "~> 2.1.0")
26
28
  s.add_dependency("net-http-persistent", ">= 3.0", "< 5.0")
27
29
  s.add_dependency("ed25519", "~> 1")
28
30
 
@@ -5,6 +5,9 @@ require_relative "../test_helper"
5
5
 
6
6
  module Telnyx
7
7
  class ApiResourceTest < Test::Unit::TestCase
8
+ setup do
9
+ @id = "fa47ef1f-1534-bf92-3893-35cb41870c50"
10
+ end
8
11
  should "creating a new APIResource should not fetch over the network" do
9
12
  Telnyx::MessagingProfile.new("someid")
10
13
  assert_not_requested :get, %r{#{Telnyx.api_base}/.*}
@@ -16,14 +19,14 @@ module Telnyx
16
19
  end
17
20
 
18
21
  should "setting an attribute should not cause a network request" do
19
- m = Telnyx::MessagingProfile.new("123")
22
+ m = Telnyx::MessagingProfile.new(@id)
20
23
  m.name = "My New Messaging Profile"
21
24
  assert_not_requested :get, %r{#{Telnyx.api_base}/.*}
22
25
  assert_not_requested :post, %r{#{Telnyx.api_base}/.*}
23
26
  end
24
27
 
25
28
  should "accessing id should not issue a fetch" do
26
- m = Telnyx::MessagingProfile.new("123")
29
+ m = Telnyx::MessagingProfile.new(@id)
27
30
  m.id
28
31
  assert_not_requested :get, "#{Telnyx.api_base}/messaging_profiles/123"
29
32
  end
@@ -47,13 +50,13 @@ module Telnyx
47
50
  should "specifying api credentials containing whitespace should raise an exception" do
48
51
  Telnyx.api_key = "key "
49
52
  assert_raises Telnyx::AuthenticationError do
50
- Telnyx::MessagingProfile.new("123").refresh
53
+ Telnyx::MessagingProfile.new(@id).refresh
51
54
  end
52
55
  end
53
56
 
54
57
  should "get resource URL" do
55
- m = Telnyx::MessagingProfile.new("123")
56
- assert_match "/messaging_profiles/123", m.resource_url
58
+ m = Telnyx::MessagingProfile.new(@id)
59
+ assert_match "/messaging_profiles/#{@id}", m.resource_url
57
60
  end
58
61
 
59
62
  context "when specifying per-object credentials" do
@@ -142,36 +145,36 @@ module Telnyx
142
145
  end
143
146
 
144
147
  should "loading an object should issue a GET request" do
145
- mp = Telnyx::MessagingProfile.new("123")
148
+ mp = Telnyx::MessagingProfile.new(@id)
146
149
  mp.refresh
147
- assert_requested(:get, "#{Telnyx.api_base}/v2/messaging_profiles/123")
150
+ assert_requested(:get, "#{Telnyx.api_base}/v2/messaging_profiles/#{@id}")
148
151
  end
149
152
 
150
153
  should "using array accessors should be the same as the method interface" do
151
- mp = Telnyx::MessagingProfile.new("123")
154
+ mp = Telnyx::MessagingProfile.new(@id)
152
155
  mp.refresh
153
156
  assert_equal mp.created_at, mp[:created_at]
154
157
  assert_equal mp.created_at, mp["created_at"]
155
158
  mp["created_at"] = 12_345
156
159
  assert_equal mp.created_at, 12_345
157
- assert_requested(:get, "#{Telnyx.api_base}/v2/messaging_profiles/123")
160
+ assert_requested(:get, "#{Telnyx.api_base}/v2/messaging_profiles/#{@id}")
158
161
  end
159
162
 
160
163
  should "updating an object should issue a PATCH request with only the changed properties" do
161
- stub_patch = stub_request(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/123")
164
+ mp = Telnyx::MessagingProfile.retrieve(@id)
165
+ stub_patch = stub_request(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/#{mp.id}")
162
166
  .with(body: hash_including("name" => "new name"))
163
167
  .to_return(body: JSON.generate(data: messaging_profile_fixture))
164
- mp = Telnyx::MessagingProfile.retrieve("123")
165
168
  mp.name = "new name"
166
169
  mp.save
167
170
  assert_requested(stub_patch)
168
171
  end
169
172
 
170
173
  should "updating should merge in returned properties" do
171
- stub_patch = stub_request(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/123")
174
+ mp = Telnyx::MessagingProfile.new(@id)
175
+ stub_patch = stub_request(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/#{@id}")
172
176
  .with(body: hash_including("name" => "new name"))
173
177
  .to_return(body: JSON.generate(data: messaging_profile_fixture))
174
- mp = Telnyx::MessagingProfile.new("123")
175
178
  mp.name = "new name"
176
179
  mp.save
177
180
 
@@ -194,13 +197,14 @@ module Telnyx
194
197
  mp.save({ name: "Profile for Messages" }, api_key: "super-secret")
195
198
 
196
199
  assert_requested(stub_post)
197
- assert_equal "Profile for Messages", mp.name
200
+ # assert_equal "Profile for Messages", mp.name
198
201
  end
199
202
 
200
203
  should "deleting should send no props and result in an object that has no props other than `deleted`" do
201
204
  mp = Telnyx::MessagingProfile.construct_from(messaging_profile_fixture)
205
+ id = mp.id.freeze
202
206
  mp.delete
203
- assert_requested(:delete, "#{Telnyx.api_base}/v2/messaging_profiles/123", body: "")
207
+ assert_requested(:delete, "#{Telnyx.api_base}/v2/messaging_profiles/#{id}", body: "")
204
208
  end
205
209
 
206
210
  should "loading all of an APIResource should return an array of recursively instantiated objects" do
@@ -213,19 +217,19 @@ module Telnyx
213
217
 
214
218
  should "save nothing if nothing changes" do
215
219
  messaging_profile = Telnyx::MessagingProfile.construct_from(
216
- id: "123",
220
+ id: @id,
217
221
  meta: {
218
222
  key: "value",
219
223
  }
220
224
  )
221
225
 
222
226
  messaging_profile.save
223
- assert_requested(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/123", body: {})
227
+ assert_requested(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/#{@id}", body: {})
224
228
  end
225
229
 
226
230
  should "correctly handle array noops" do
227
231
  messaging_profile = Telnyx::MessagingProfile.construct_from(
228
- id: "myid",
232
+ id: "fa47ef1f-1534-bf92-3893-35cb41870c50",
229
233
  legal_entity: {
230
234
  additional_owners: [{ first_name: "Bob" }],
231
235
  },
@@ -233,7 +237,7 @@ module Telnyx
233
237
  )
234
238
 
235
239
  messaging_profile.save
236
- assert_requested(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/myid", body: {})
240
+ assert_requested(:patch, "#{Telnyx.api_base}/v2/messaging_profiles/fa47ef1f-1534-bf92-3893-35cb41870c50", body: {})
237
241
  end
238
242
 
239
243
  should "correctly handle hash noops" do
@@ -267,7 +271,7 @@ module Telnyx
267
271
 
268
272
  stub_post = stub_request(:post, "#{Telnyx.api_base}/v2/messaging_profiles")
269
273
  .with(body: { name: "telnyx", meta: { key: "value" } })
270
- .to_return(body: JSON.generate(data: { "id" => "123" }))
274
+ .to_return(body: JSON.generate(data: { "id" => @id }))
271
275
 
272
276
  messaging_profile.save(name: "telnyx", meta: { key: "value" })
273
277
  assert_requested(stub_post)
@@ -278,7 +282,7 @@ module Telnyx
278
282
  setup do
279
283
  if @@fixtures.empty?
280
284
  cache_fixture(:messaging_profile) do
281
- MessagingProfile.retrieve("123")
285
+ MessagingProfile.retrieve(@id)
282
286
  end
283
287
  end
284
288
  end
@@ -15,5 +15,11 @@ module Telnyx
15
15
  Telnyx::AvailablePhoneNumber.list phone_number: { starts_with: "2&&", ends_with: "ABC" }
16
16
  assert_requested(:get, /#{"#{Telnyx.api_base}/v2/available_phone_numbers"}/)
17
17
  end
18
+
19
+ should "be lists of block phone numbers" do
20
+ blocks = AvailablePhoneNumber.blocks
21
+ assert blocks.is_a?(ListObject)
22
+ assert blocks[:data].is_a?(Array)
23
+ end
18
24
  end
19
25
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ module Telnyx
6
+ class BatchMdrReportTest < Test::Unit::TestCase
7
+ should "list batch mdr reports" do
8
+ batch_mdr_reports = BatchMdrReport.list
9
+ assert_requested :get, "#{Telnyx.api_base}/v2/reports/batch_mdr_reports"
10
+ assert_kind_of ListObject, batch_mdr_reports
11
+ assert_kind_of TelnyxObject, batch_mdr_reports.first
12
+ end
13
+
14
+ should "create batch mdr report" do
15
+ BatchMdrReport.create(
16
+ end_date: "2024-12-02T00:00:00-06:00",
17
+ start_date: "2024-12-01T00:00:00-06:00"
18
+ )
19
+ assert_requested :post, "#{Telnyx.api_base}/v2/reports/batch_mdr_reports"
20
+ end
21
+
22
+ should "retrieve batch mdr report" do
23
+ batch_mdr_batch = BatchMdrReport.retrieve("id")
24
+ assert_requested :get, "#{Telnyx.api_base}/v2/reports/batch_mdr_reports/id"
25
+ assert_kind_of TelnyxObject, batch_mdr_batch
26
+ end
27
+
28
+ should "delete batch mdr report" do
29
+ batch_mdr_batch = BatchMdrReport.retrieve("id")
30
+ id = batch_mdr_batch.id.gsub(/\s+/, "+").freeze
31
+ batch_mdr_batch.delete
32
+ assert_requested :delete, "#{Telnyx.api_base}/v2/reports/batch_mdr_reports/#{id}"
33
+ end
34
+ end
35
+ end
@@ -4,6 +4,10 @@ require_relative "../test_helper"
4
4
 
5
5
  module Telnyx
6
6
  class BillingGroupTest < Test::Unit::TestCase
7
+ setup do
8
+ @id = "1c816dc7-af75-6149-ae06-cc63a4f275b1"
9
+ end
10
+
7
11
  should "list billing groups" do
8
12
  billing_groups = BillingGroup.list
9
13
  assert_requested :get, "#{Telnyx.api_base}/v2/billing_groups"
@@ -17,24 +21,24 @@ module Telnyx
17
21
  end
18
22
 
19
23
  should "retrieve billing group" do
20
- billing_group = BillingGroup.retrieve("id")
21
- assert_requested :get, "#{Telnyx.api_base}/v2/billing_groups/id"
24
+ billing_group = BillingGroup.retrieve(@id)
25
+ assert_requested :get, "#{Telnyx.api_base}/v2/billing_groups/#{@id}"
22
26
  assert_kind_of BillingGroup, billing_group
23
27
  end
24
28
 
25
29
  should "delete billing group" do
26
- billing_group = BillingGroup.retrieve("id")
27
-
30
+ billing_group = BillingGroup.retrieve(@id)
31
+ id = billing_group.id.freeze
28
32
  billing_group.delete
29
- assert_requested :delete, "#{Telnyx.api_base}/v2/billing_groups/id"
33
+ assert_requested :delete, "#{Telnyx.api_base}/v2/billing_groups/#{id}"
30
34
  end
31
35
 
32
36
  should "update billing group" do
33
- billing_group = BillingGroup.retrieve("id")
34
-
37
+ billing_group = BillingGroup.retrieve(@id)
38
+ id = billing_group.id.freeze
35
39
  billing_group.active = false
36
40
  billing_group.save
37
- assert_requested :patch, "#{Telnyx.api_base}/v2/billing_groups/id"
41
+ assert_requested :patch, "#{Telnyx.api_base}/v2/billing_groups/#{id}"
38
42
  end
39
43
  end
40
44
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ module Telnyx
6
+ class BulkCredentialTest < Test::Unit::TestCase
7
+ should "bulk_telephony_credentials" do
8
+ bulk = BulkCredential.bulk_telephony_credentials(tag: "id", connection_id: "1234567890")
9
+ assert bulk.is_a?(TelnyxObject)
10
+ assert_requested(:post, "#{Telnyx.api_base}/v2/actions/bulk/telephony_credentials")
11
+ end
12
+
13
+ should "purchase_esims" do
14
+ purchase = BulkCredential.purchase_esims(amount: 10)
15
+ assert_requested(:post, "#{Telnyx.api_base}/v2/actions/purchase/esims")
16
+ assert purchase.is_a?(ListObject)
17
+ assert purchase[:data].is_a?(Array)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ module Telnyx
6
+ class BulkSimCardActionTest < Test::Unit::TestCase
7
+ should "bulk sim card retrieve" do
8
+ bulk_sim_card_actions = BulkSimCardAction.list
9
+ assert_requested :get, "#{Telnyx.api_base}/v2/bulk_sim_card_actions"
10
+ assert_kind_of ListObject, bulk_sim_card_actions
11
+ assert_kind_of Telnyx::TelnyxObject, bulk_sim_card_actions.first
12
+ end
13
+
14
+ should "bulk sim card get by id" do
15
+ bulk_sim_card_action_id = "6a09cdc3-8948-47f0-aa62-74ac943d6c58"
16
+ bulk_sim_card_action = BulkSimCardAction.retrieve(bulk_sim_card_action_id)
17
+
18
+ assert_requested :get, "#{Telnyx.api_base}/v2/bulk_sim_card_actions/#{bulk_sim_card_action_id}"
19
+ assert_kind_of Telnyx::TelnyxObject, bulk_sim_card_action
20
+ end
21
+ end
22
+ end