twilio-ruby 7.11.1 → 7.11.2

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 (248) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +221 -0
  3. data/Gemfile.lock +2 -2
  4. data/README.md +2 -2
  5. data/lib/rack/twilio_webhook_authentication.rb +45 -2
  6. data/lib/twilio-ruby/rest/accounts/v1/auth_token_promotion.rb +0 -59
  7. data/lib/twilio-ruby/rest/accounts/v1/bulk_consents.rb +0 -59
  8. data/lib/twilio-ruby/rest/accounts/v1/bulk_contacts.rb +0 -59
  9. data/lib/twilio-ruby/rest/accounts/v1/credential.rb +0 -59
  10. data/lib/twilio-ruby/rest/accounts/v1/messaging_geopermissions.rb +0 -59
  11. data/lib/twilio-ruby/rest/accounts/v1/safelist.rb +0 -59
  12. data/lib/twilio-ruby/rest/accounts/v1/secondary_auth_token.rb +0 -59
  13. data/lib/twilio-ruby/rest/api/v2010/account/balance.rb +0 -59
  14. data/lib/twilio-ruby/rest/api/v2010/account/call/payment.rb +0 -59
  15. data/lib/twilio-ruby/rest/api/v2010/account/call/siprec.rb +0 -59
  16. data/lib/twilio-ruby/rest/api/v2010/account/call/stream.rb +0 -59
  17. data/lib/twilio-ruby/rest/api/v2010/account/call/transcription.rb +0 -59
  18. data/lib/twilio-ruby/rest/api/v2010/account/call/user_defined_message.rb +0 -59
  19. data/lib/twilio-ruby/rest/api/v2010/account/call/user_defined_message_subscription.rb +0 -59
  20. data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +0 -59
  21. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +6 -0
  22. data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +0 -59
  23. data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +0 -59
  24. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload/data.rb +0 -59
  25. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_type_calls.rb +0 -59
  26. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_type_registrations.rb +0 -59
  27. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types.rb +0 -59
  28. data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +0 -59
  29. data/lib/twilio-ruby/rest/api/v2010/account/token.rb +0 -59
  30. data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +0 -59
  31. data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +0 -59
  32. data/lib/twilio-ruby/rest/bulkexports/v1/export/job.rb +0 -59
  33. data/lib/twilio-ruby/rest/bulkexports/v1/export.rb +0 -59
  34. data/lib/twilio-ruby/rest/bulkexports/v1/export_configuration.rb +0 -59
  35. data/lib/twilio-ruby/rest/chat/v3/channel.rb +0 -59
  36. data/lib/twilio-ruby/rest/content/v1/content/approval_create.rb +0 -59
  37. data/lib/twilio-ruby/rest/content/v1/content/approval_fetch.rb +0 -59
  38. data/lib/twilio-ruby/rest/conversations/v1/configuration/webhook.rb +0 -59
  39. data/lib/twilio-ruby/rest/conversations/v1/configuration.rb +0 -59
  40. data/lib/twilio-ruby/rest/conversations/v1/conversation_with_participants.rb +0 -59
  41. data/lib/twilio-ruby/rest/conversations/v1/service/configuration/notification.rb +0 -59
  42. data/lib/twilio-ruby/rest/conversations/v1/service/configuration/webhook.rb +0 -59
  43. data/lib/twilio-ruby/rest/conversations/v1/service/configuration.rb +0 -59
  44. data/lib/twilio-ruby/rest/conversations/v1/service/conversation_with_participants.rb +0 -59
  45. data/lib/twilio-ruby/rest/conversations/v2/action.rb +0 -59
  46. data/lib/twilio-ruby/rest/conversations/v2/configuration.rb +525 -0
  47. data/lib/twilio-ruby/rest/conversations/v2/operation.rb +0 -59
  48. data/lib/twilio-ruby/rest/conversations/v2.rb +10 -4
  49. data/lib/twilio-ruby/rest/events/v1/schema.rb +0 -59
  50. data/lib/twilio-ruby/rest/events/v1/sink/sink_test.rb +0 -59
  51. data/lib/twilio-ruby/rest/events/v1/sink/sink_validate.rb +0 -59
  52. data/lib/twilio-ruby/rest/flex_api/v1/assessments.rb +12 -14
  53. data/lib/twilio-ruby/rest/flex_api/v1/configuration.rb +0 -59
  54. data/lib/twilio-ruby/rest/flex_api/v1/insights_assessments_comment.rb +12 -14
  55. data/lib/twilio-ruby/rest/flex_api/v1/insights_conversations.rb +12 -14
  56. data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires.rb +12 -14
  57. data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires_category.rb +2 -4
  58. data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires_question.rb +12 -14
  59. data/lib/twilio-ruby/rest/flex_api/v1/insights_segments.rb +12 -14
  60. data/lib/twilio-ruby/rest/flex_api/v1/insights_session.rb +0 -59
  61. data/lib/twilio-ruby/rest/flex_api/v1/insights_settings_answer_sets.rb +0 -59
  62. data/lib/twilio-ruby/rest/flex_api/v1/insights_settings_comment.rb +0 -59
  63. data/lib/twilio-ruby/rest/flex_api/v1/insights_user_roles.rb +0 -59
  64. data/lib/twilio-ruby/rest/flex_api/v1/interaction/interaction_channel/interaction_transfer.rb +0 -59
  65. data/lib/twilio-ruby/rest/flex_api/v1/interaction.rb +0 -59
  66. data/lib/twilio-ruby/rest/flex_api/v1/plugin/plugin_versions.rb +2 -4
  67. data/lib/twilio-ruby/rest/flex_api/v1/plugin.rb +2 -4
  68. data/lib/twilio-ruby/rest/flex_api/v1/plugin_archive.rb +0 -59
  69. data/lib/twilio-ruby/rest/flex_api/v1/plugin_configuration/configured_plugin.rb +2 -4
  70. data/lib/twilio-ruby/rest/flex_api/v1/plugin_configuration.rb +2 -4
  71. data/lib/twilio-ruby/rest/flex_api/v1/plugin_configuration_archive.rb +0 -59
  72. data/lib/twilio-ruby/rest/flex_api/v1/plugin_release.rb +2 -4
  73. data/lib/twilio-ruby/rest/flex_api/v1/plugin_version_archive.rb +0 -59
  74. data/lib/twilio-ruby/rest/flex_api/v1/provisioning_status.rb +0 -59
  75. data/lib/twilio-ruby/rest/flex_api/v2/flex_user.rb +0 -59
  76. data/lib/twilio-ruby/rest/flex_api/v2/web_channels.rb +0 -59
  77. data/lib/twilio-ruby/rest/frontline_api/v1/user.rb +0 -59
  78. data/lib/twilio-ruby/rest/iam/v1/api_key.rb +0 -59
  79. data/lib/twilio-ruby/rest/iam/v1/new_api_key.rb +0 -59
  80. data/lib/twilio-ruby/rest/iam/v1/o_auth_app.rb +0 -59
  81. data/lib/twilio-ruby/rest/iam/v1/token.rb +0 -59
  82. data/lib/twilio-ruby/rest/insights/v1/call/annotation.rb +0 -59
  83. data/lib/twilio-ruby/rest/insights/v1/call/call_summary.rb +0 -59
  84. data/lib/twilio-ruby/rest/insights/v1/call.rb +0 -59
  85. data/lib/twilio-ruby/rest/insights/v1/setting.rb +0 -59
  86. data/lib/twilio-ruby/rest/insights/v2/inbound.rb +2 -261
  87. data/lib/twilio-ruby/rest/insights/v2/inbound_report.rb +258 -0
  88. data/lib/twilio-ruby/rest/insights/v2/outbound.rb +18 -299
  89. data/lib/twilio-ruby/rest/insights/v2/outbound_report.rb +258 -0
  90. data/lib/twilio-ruby/rest/insights/v2/report.rb +27 -184
  91. data/lib/twilio-ruby/rest/insights/v2.rb +14 -4
  92. data/lib/twilio-ruby/rest/insights/v3/metadata.rb +1 -60
  93. data/lib/twilio-ruby/rest/insights/v3/query.rb +1 -60
  94. data/lib/twilio-ruby/rest/insights/v3/query_job.rb +654 -0
  95. data/lib/twilio-ruby/rest/insights/v3/result.rb +195 -0
  96. data/lib/twilio-ruby/rest/insights/v3.rb +17 -1
  97. data/lib/twilio-ruby/rest/intelligence/v2/operator_attachment.rb +0 -59
  98. data/lib/twilio-ruby/rest/intelligence/v2/operator_attachments.rb +0 -59
  99. data/lib/twilio-ruby/rest/intelligence/v2/transcript/encrypted_operator_results.rb +0 -59
  100. data/lib/twilio-ruby/rest/intelligence/v2/transcript/encrypted_sentences.rb +0 -59
  101. data/lib/twilio-ruby/rest/intelligence/v2/transcript/media.rb +0 -59
  102. data/lib/twilio-ruby/rest/intelligence/v3/rule_execution.rb +0 -59
  103. data/lib/twilio-ruby/rest/knowledge/v1/knowledge/knowledge_status.rb +0 -59
  104. data/lib/twilio-ruby/rest/knowledge/v2/operation.rb +0 -59
  105. data/lib/twilio-ruby/rest/knowledge/v2/search.rb +0 -59
  106. data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +0 -59
  107. data/lib/twilio-ruby/rest/lookups/v2/bucket.rb +0 -59
  108. data/lib/twilio-ruby/rest/lookups/v2/lookup_override.rb +0 -59
  109. data/lib/twilio-ruby/rest/lookups/v2/phone_number.rb +0 -59
  110. data/lib/twilio-ruby/rest/lookups/v2/query.rb +0 -59
  111. data/lib/twilio-ruby/rest/lookups/v2/rate_limit.rb +0 -59
  112. data/lib/twilio-ruby/rest/marketplace/v1/installed_add_on/installed_add_on_usage.rb +0 -59
  113. data/lib/twilio-ruby/rest/marketplace/v1/module_data.rb +0 -59
  114. data/lib/twilio-ruby/rest/marketplace/v1/module_data_management.rb +0 -59
  115. data/lib/twilio-ruby/rest/marketplace/v1/referral_conversion.rb +0 -59
  116. data/lib/twilio-ruby/rest/memory/v1/bulk.rb +0 -59
  117. data/lib/twilio-ruby/rest/memory/v1/conversation_summary.rb +2 -4
  118. data/lib/twilio-ruby/rest/memory/v1/identifier.rb +0 -80
  119. data/lib/twilio-ruby/rest/memory/v1/identity_resolution_setting.rb +0 -59
  120. data/lib/twilio-ruby/rest/memory/v1/lookup.rb +0 -59
  121. data/lib/twilio-ruby/rest/memory/v1/observation.rb +2 -4
  122. data/lib/twilio-ruby/rest/memory/v1/operation.rb +0 -59
  123. data/lib/twilio-ruby/rest/memory/v1/recall.rb +0 -59
  124. data/lib/twilio-ruby/rest/memory/v1/revision.rb +2 -4
  125. data/lib/twilio-ruby/rest/messaging/v1/brand_registration/brand_registration_otp.rb +0 -59
  126. data/lib/twilio-ruby/rest/messaging/v1/deactivations.rb +0 -59
  127. data/lib/twilio-ruby/rest/messaging/v1/domain_certs.rb +0 -59
  128. data/lib/twilio-ruby/rest/messaging/v1/domain_config.rb +0 -59
  129. data/lib/twilio-ruby/rest/messaging/v1/domain_config_messaging_service.rb +0 -59
  130. data/lib/twilio-ruby/rest/messaging/v1/domain_validate_dn.rb +0 -59
  131. data/lib/twilio-ruby/rest/messaging/v1/external_campaign.rb +0 -59
  132. data/lib/twilio-ruby/rest/messaging/v1/linkshortening_messaging_service.rb +0 -59
  133. data/lib/twilio-ruby/rest/messaging/v1/linkshortening_messaging_service_domain_association.rb +0 -59
  134. data/lib/twilio-ruby/rest/messaging/v1/request_managed_cert.rb +0 -59
  135. data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person.rb +2 -4
  136. data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person_usecase.rb +0 -59
  137. data/lib/twilio-ruby/rest/messaging/v1/usecase.rb +0 -59
  138. data/lib/twilio-ruby/rest/messaging/v2/domain_certs.rb +0 -59
  139. data/lib/twilio-ruby/rest/messaging/v2/typing_indicator.rb +0 -59
  140. data/lib/twilio-ruby/rest/messaging/v3/typing_indicator.rb +0 -59
  141. data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +0 -59
  142. data/lib/twilio-ruby/rest/numbers/v1/bulk_eligibility.rb +0 -59
  143. data/lib/twilio-ruby/rest/numbers/v1/eligibility.rb +0 -59
  144. data/lib/twilio-ruby/rest/numbers/v1/embedded_session.rb +0 -59
  145. data/lib/twilio-ruby/rest/numbers/v1/porting_port_in.rb +0 -59
  146. data/lib/twilio-ruby/rest/numbers/v1/porting_port_in_phone_number.rb +0 -59
  147. data/lib/twilio-ruby/rest/numbers/v1/porting_portability.rb +0 -59
  148. data/lib/twilio-ruby/rest/numbers/v1/porting_webhook_configuration.rb +0 -59
  149. data/lib/twilio-ruby/rest/numbers/v1/porting_webhook_configuration_delete.rb +0 -59
  150. data/lib/twilio-ruby/rest/numbers/v1/sender_id_registration.rb +0 -59
  151. data/lib/twilio-ruby/rest/numbers/v1/sms_verification.rb +0 -59
  152. data/lib/twilio-ruby/rest/numbers/v1/sms_verification_check.rb +0 -59
  153. data/lib/twilio-ruby/rest/numbers/v1/voice_verification.rb +0 -59
  154. data/lib/twilio-ruby/rest/numbers/v1/voice_verification_check.rb +0 -59
  155. data/lib/twilio-ruby/rest/numbers/v1/webhook.rb +0 -59
  156. data/lib/twilio-ruby/rest/numbers/v2/bulk_hosted_number_order.rb +0 -59
  157. data/lib/twilio-ruby/rest/numbers/v2/bundle_clone.rb +0 -59
  158. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/bundle/replace_items.rb +0 -59
  159. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance.rb +0 -59
  160. data/lib/twilio-ruby/rest/numbers/v2.rb +0 -16
  161. data/lib/twilio-ruby/rest/numbers/v3/hosted_number_order.rb +0 -59
  162. data/lib/twilio-ruby/rest/oauth/v1/authorize.rb +0 -59
  163. data/lib/twilio-ruby/rest/oauth/v1/token.rb +0 -59
  164. data/lib/twilio-ruby/rest/oauth/v2/authorize.rb +0 -59
  165. data/lib/twilio-ruby/rest/oauth/v2/oauth_authorization_server.rb +0 -59
  166. data/lib/twilio-ruby/rest/oauth/v2/token.rb +2 -61
  167. data/lib/twilio-ruby/rest/preview/wireless/sim/usage.rb +0 -59
  168. data/lib/twilio-ruby/rest/preview_iam/v1/authorize.rb +0 -59
  169. data/lib/twilio-ruby/rest/preview_iam/v1/token.rb +0 -59
  170. data/lib/twilio-ruby/rest/preview_iam/versionless/organization.rb +0 -59
  171. data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +0 -59
  172. data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +0 -59
  173. data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +0 -59
  174. data/lib/twilio-ruby/rest/pricing/v1/voice.rb +0 -59
  175. data/lib/twilio-ruby/rest/pricing/v2/number.rb +0 -59
  176. data/lib/twilio-ruby/rest/pricing/v2/voice/number.rb +0 -59
  177. data/lib/twilio-ruby/rest/pricing/v2/voice.rb +0 -59
  178. data/lib/twilio-ruby/rest/routes/v2/phone_number.rb +0 -59
  179. data/lib/twilio-ruby/rest/routes/v2/sip_domain.rb +0 -59
  180. data/lib/twilio-ruby/rest/routes/v2/trunk.rb +0 -59
  181. data/lib/twilio-ruby/rest/routes/v3/phone_number.rb +0 -59
  182. data/lib/twilio-ruby/rest/serverless/v1/service/build/build_status.rb +0 -59
  183. data/lib/twilio-ruby/rest/serverless/v1/service/function/function_version/function_version_content.rb +0 -59
  184. data/lib/twilio-ruby/rest/studio/v1/flow/engagement/engagement_context.rb +0 -59
  185. data/lib/twilio-ruby/rest/studio/v1/flow/engagement/step/step_context.rb +0 -59
  186. data/lib/twilio-ruby/rest/studio/v1/flow/execution/execution_context.rb +0 -59
  187. data/lib/twilio-ruby/rest/studio/v1/flow/execution/execution_step/execution_step_context.rb +0 -59
  188. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_context.rb +0 -59
  189. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_step/execution_step_context.rb +0 -59
  190. data/lib/twilio-ruby/rest/studio/v2/flow/flow_test_user.rb +0 -59
  191. data/lib/twilio-ruby/rest/studio/v2/flow_validate.rb +0 -59
  192. data/lib/twilio-ruby/rest/sync/v1/service/sync_stream/stream_message.rb +0 -59
  193. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_bulk_real_time_statistics.rb +0 -59
  194. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_cumulative_statistics.rb +0 -59
  195. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_real_time_statistics.rb +0 -59
  196. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +0 -59
  197. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +0 -59
  198. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_cumulative_statistics.rb +0 -59
  199. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_real_time_statistics.rb +0 -59
  200. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +0 -59
  201. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_cumulative_statistics.rb +0 -59
  202. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_real_time_statistics.rb +0 -59
  203. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +0 -59
  204. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_cumulative_statistics.rb +0 -59
  205. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_real_time_statistics.rb +0 -59
  206. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +0 -59
  207. data/lib/twilio-ruby/rest/trunking/v1/trunk/recording.rb +0 -59
  208. data/lib/twilio-ruby/rest/trusthub/v1/a2p_brand_registration.rb +0 -59
  209. data/lib/twilio-ruby/rest/trusthub/v1/a2p_brand_registration_embedded_session.rb +0 -59
  210. data/lib/twilio-ruby/rest/trusthub/v1/a2p_campaign_registration.rb +0 -59
  211. data/lib/twilio-ruby/rest/trusthub/v1/a2p_campaign_registration_embedded_session.rb +0 -59
  212. data/lib/twilio-ruby/rest/trusthub/v1/compliance_inquiries.rb +0 -59
  213. data/lib/twilio-ruby/rest/trusthub/v1/compliance_registration_inquiries.rb +0 -59
  214. data/lib/twilio-ruby/rest/trusthub/v1/compliance_tollfree_inquiries.rb +0 -59
  215. data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles_provisional_copy.rb +0 -59
  216. data/lib/twilio-ruby/rest/trusthub/v1/trust_products_provisional_copy.rb +0 -59
  217. data/lib/twilio-ruby/rest/verify/v2/form.rb +0 -59
  218. data/lib/twilio-ruby/rest/verify/v2/safelist.rb +0 -59
  219. data/lib/twilio-ruby/rest/verify/v2/service/access_token.rb +0 -59
  220. data/lib/twilio-ruby/rest/verify/v2/service/approve_challenge.rb +0 -59
  221. data/lib/twilio-ruby/rest/verify/v2/service/entity/challenge/notification.rb +0 -59
  222. data/lib/twilio-ruby/rest/verify/v2/service/entity/new_factor.rb +0 -59
  223. data/lib/twilio-ruby/rest/verify/v2/service/new_challenge.rb +3 -62
  224. data/lib/twilio-ruby/rest/verify/v2/service/new_factor.rb +0 -59
  225. data/lib/twilio-ruby/rest/verify/v2/service/new_verify_factor.rb +0 -59
  226. data/lib/twilio-ruby/rest/verify/v2/service/verification.rb +8 -61
  227. data/lib/twilio-ruby/rest/verify/v2/service/verification_check.rb +0 -59
  228. data/lib/twilio-ruby/rest/verify/v2/verification_attempts_summary.rb +0 -59
  229. data/lib/twilio-ruby/rest/video/v1/composition_settings.rb +0 -59
  230. data/lib/twilio-ruby/rest/video/v1/recording_settings.rb +0 -59
  231. data/lib/twilio-ruby/rest/video/v1/room/participant/anonymize.rb +0 -59
  232. data/lib/twilio-ruby/rest/video/v1/room/participant/subscribe_rules.rb +0 -59
  233. data/lib/twilio-ruby/rest/video/v1/room/recording_rules.rb +0 -59
  234. data/lib/twilio-ruby/rest/voice/v1/archived_call.rb +0 -59
  235. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/bulk_country_update.rb +0 -59
  236. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/settings.rb +0 -59
  237. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions.rb +0 -59
  238. data/lib/twilio-ruby/rest/voice/v2/account_default_configuration.rb +0 -59
  239. data/lib/twilio-ruby/rest/voice/v2/configuration/default.rb +0 -59
  240. data/lib/twilio-ruby/rest/voice/v2/configuration.rb +0 -59
  241. data/lib/twilio-ruby/rest/voice/v2/recording.rb +0 -59
  242. data/lib/twilio-ruby/rest/voice/v2/transcription.rb +0 -59
  243. data/lib/twilio-ruby/rest/voice/v2/type.rb +0 -59
  244. data/lib/twilio-ruby/rest/voice/v3/transcription.rb +259 -50
  245. data/lib/twilio-ruby/version.rb +1 -1
  246. metadata +6 -4
  247. data/lib/twilio-ruby/rest/memory/v1/event.rb +0 -320
  248. data/lib/twilio-ruby/rest/numbers/v2/caller_id.rb +0 -515
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a494d086870863ab1aae8748d515c63a504177246240a1c36e7eccfa95b9f92b
4
- data.tar.gz: 25ec1e4bd56153220354de496f9311b29cfef4cbd6e990683e3df1a9bbd1380e
3
+ metadata.gz: e4972b2e50e8c249c2d1363eda7d1ef843f042ff384c69bc6d1750074d770a9b
4
+ data.tar.gz: c8a9a2fecaecd06a3b52dcbc56ff98b53e27b88447feeed5fc3fe8cde2677e67
5
5
  SHA512:
6
- metadata.gz: 5fd59d61b2bb3c9be81748c577392314b8457d00c8242a7efdc380306143920cfe79d9b13abbb41e6bc2df0d5da9d6641c13004d61d286cdde87d1d2e0a3353b
7
- data.tar.gz: a74fffeb54bd87ae9d78a78e012a0d782e7ae6acb63d5e00119333bfb69aefc29383b44c5be93b3fdd6ca8fd28aa2163e0c727d35ba6472b7a3789ade7b3eaa6
6
+ metadata.gz: a8de116b65103df280495f5a3f0a796053124899bcbc92a0bfe2a73045ccbcd803cf79c2cbe5276173cfa094ba7793d90e17ba950d3236c601a6b89e28846edf
7
+ data.tar.gz: 8aec018fb3f7037a632125a49c9f744422d39cb0c3beddc6aeb2f4abb19b63c569c4dd890abbc43c6d247fa77c530ff79ca48159fbc5cac59c6044527781aac1
data/CHANGES.md CHANGED
@@ -1,5 +1,226 @@
1
1
  twilio-ruby changelog
2
2
  =====================
3
+ [2026-09-09] Version 7.11.2
4
+ ---------------------------
5
+ **Library - Chore**
6
+ - [PR #804](https://github.com/twilio/twilio-ruby/pull/804): Update RubyGems publishing steps in workflow. Thanks to [@manisha1997](https://github.com/manisha1997)!
7
+ - [PR #803](https://github.com/twilio/twilio-ruby/pull/803): Update Rakefile. Thanks to [@manisha1997](https://github.com/manisha1997)!
8
+ - [PR #799](https://github.com/twilio/twilio-ruby/pull/799): release gems. Thanks to [@manisha1997](https://github.com/manisha1997)!
9
+ - [PR #798](https://github.com/twilio/twilio-ruby/pull/798): Remove docker push. Thanks to [@manisha1997](https://github.com/manisha1997)!
10
+ - [PR #797](https://github.com/twilio/twilio-ruby/pull/797): version upgrade. Thanks to [@manisha1997](https://github.com/manisha1997)!
11
+ - [PR #796](https://github.com/twilio/twilio-ruby/pull/796): change permission. Thanks to [@manisha1997](https://github.com/manisha1997)!
12
+
13
+ **Audiences**
14
+ - ## 2026-09-01
15
+ - Backticked brace- and angle-bracket-bearing tokens in descriptions for MDX safety.
16
+ - Updated a prose reference to the renamed `FetchCohortSnapshot` operation.
17
+ - ## 2026-08-26
18
+ - **Removed 5 path(s)**:
19
+ - `/preview/Audiences` (AdminListAudiences)
20
+ - `/preview/Audiences/{audienceId}` (AdminGetAudience)
21
+ - `/preview/Snapshots` (AdminListSnapshots)
22
+ - `/preview/Snapshots/{snapshotId}` (AdminGetSnapshot)
23
+ - `/preview/Operations/{operationId}` (AdminGetOperation)
24
+ - ## 2026-08-25
25
+ - Minor updates (formatting, metadata)
26
+ - ## 2026-08-24
27
+ - **Added 1 new path(s)**:
28
+ - `/preview/Snapshots/{cohortSnapshotId}/Operations` (AdminListSnapshotOperations)
29
+ - **Removed 1 path(s)**:
30
+ - `/preview/Snapshots/{snapshotId}/Operations` (ListAdminSnapshotOperations)
31
+ - ## 2026-08-20
32
+ - Renamed all 13 operations so the operationId keyword leads (`AdminGetCohort` -> `FetchAdminCohort`) to meet standard.
33
+ - Set `info` `libraryVisibility` to `hidden` to exclude this admin spec from generation.
34
+ - Added the standard `pageSize`/`pageToken` query parameters to `ListAdminSnapshotOperations`, the only list operation missing them.
35
+ - ## 2026-08-19
36
+ - **Added 5 new path(s)**:
37
+ - `/preview/Cohorts` (AdminListCohorts)
38
+ - `/preview/Cohorts/{cohortId}` (AdminGetCohort)
39
+ - `/preview/CohortSnapshots` (AdminListCohortSnapshots)
40
+ - `/preview/CohortSnapshots/{cohortSnapshotId}` (AdminGetCohortSnapshot)
41
+ - `/preview/CohortOperations/{cohortOperationId}` (AdminGetCohortOperation)
42
+ - ## 2026-09-01
43
+ - Renamed 3 `Get*` operations to `Fetch*` to match the operationId standard: `FetchCohort`, `FetchCohortSnapshot`, `FetchCohortOperation`. The transpiler skips operations whose operationId does not start with a standard keyword, which had been dropping all three from generated output.
44
+ - Set `libraryVisibility` to `private` (was `hidden`) so the spec is eligible for the private docs pipeline.
45
+ - Backticked brace- and angle-bracket-bearing tokens in descriptions for MDX safety.
46
+ - ## 2026-08-28
47
+ - **Removed 6 path(s)**:
48
+ - `/preview/Audiences` (ListAudiences, CreateAudience)
49
+ - `/preview/Audiences/{audienceId}` (FetchAudience, UpdateAudience, DeleteAudience)
50
+ - `/preview/Snapshots` (ListSnapshots, CreateSnapshot)
51
+ - `/preview/Snapshots/{snapshotId}` (FetchSnapshot, DeleteSnapshot)
52
+ - `/preview/Snapshots/{snapshotId}/Profiles` (ListSnapshotProfiles)
53
+ - `/preview/Operations/{operationId}` (FetchOperation)
54
+ - ## 2026-08-20
55
+ - Renamed 6 `Get*` operations to `Fetch*` to match the operationId standard.
56
+ - Hid the deprecated Audiences/Snapshots paths and `/preview/Operations/{operationId}`.
57
+ - Backticked 11 brace-bearing tokens in descriptions for MDX safety.
58
+
59
+ **Conversations**
60
+ - Add PATCH support for partial updates to Configuration
61
+ - Add `VIDEO` to the Conversations v2 Communication channel enum.
62
+
63
+ **Data-ingress**
64
+ - # API Changes
65
+ - ## 2026-09-01
66
+ - Minor updates (formatting, metadata)
67
+ - ## 2026-08-12
68
+ - Minor updates (formatting, metadata)
69
+ - ## 2026-08-12
70
+ - Initial release with 13 paths and 13 operations
71
+
72
+ **Destinations**
73
+ - ## 2026-09-08
74
+ - Added `prod-ie1` to `supportedRealms` and `iamOperationEnabledRealms` for all endpoints
75
+ - ## 2026-09-01
76
+ - Removed the unused `admin-api` placeholder from `supportedRealms` on the public endpoints;
77
+ - One Admin routes now live in `admin_openapi.yaml`.
78
+ - **Added 6 new path(s)** (admin_openapi.yaml):
79
+ - `/v1/ControlPlane/Destinations` (AdminListDestinations)
80
+ - `/v1/ControlPlane/Destinations/{destinationId}` (AdminGetDestination)
81
+ - `/v1/ControlPlane/Subscriptions` (AdminListSubscriptions)
82
+ - `/v1/ControlPlane/Subscriptions/{subscriptionId}` (AdminGetSubscription)
83
+ - `/v1/ControlPlane/Subscriptions/{subscriptionId}/EventTypes` (AdminListSubscribedEvents)
84
+ - `/v1/ControlPlane/Subscriptions/{subscriptionId}/EventTypes/{eventType}` (AdminGetSubscribedEvent)
85
+ - ## 2026-08-26
86
+ - Minor updates (formatting, metadata)
87
+ - ## 2026-08-26
88
+ - Minor updates (formatting, metadata)
89
+ - ## 2026-08-25
90
+ - **Content updates**:
91
+ - Updated description for `CreateDestination`
92
+ - ## 2026-08-12
93
+ - Minor updates (formatting, metadata)
94
+
95
+ **Email**
96
+ - # API Changes
97
+ - ## 2026-09-02
98
+ - **Added 1 new path(s)**:
99
+ - `/v1/Sends/Cohorts` (sendCohort)
100
+ - ## 2026-08-28
101
+ - **Content updates**:
102
+ - Updated summary for `sendTransactional`
103
+ - Added parameter(s) to `sendTransactional`: X-Twilio-Version
104
+ - Updated schema description for `SuppressionsGroup`
105
+ - Added properties to `SuppressionsGroup`: type
106
+ - Removed properties from `SuppressionsGroup`: mode
107
+ - Updated schema description for `SuppressionsGlobal`
108
+ - Added properties to `SuppressionsGlobal`: type
109
+ - Removed properties from `SuppressionsGlobal`: mode
110
+ - Updated schema description for `Suppressions`
111
+ - Updated schema description for `LongRunningOperationResponse`
112
+ - ## 2026-08-27
113
+ - **Content updates**:
114
+ - Updated description for `SendEmail`
115
+ - Added parameter(s) to `SendEmail`: Content-Encoding, Idempotency-Key
116
+ - Updated schema description for `Envelope`
117
+ - Updated schema description for `SuppressionsGroup`
118
+ - Updated schema description for `SuppressionsGlobal`
119
+
120
+ **Iam**
121
+ - Removed redirect_urls from the GET /v1/Account/AuthorizedApps/{consentSid} response
122
+ - Added company_name, homepage_url, tos_url, and redirect_urls to the GET /v1/Account/AuthorizedApps/{consentSid} response
123
+ - Added GET /v1/Account/AuthorizedApps/{consentSid} - fetch authorized app details, including allowed permissions, by consent identifier SID
124
+ - added container-scoped entitlements endpoint (GET /v2/Container/{containerId}/Entitlements)
125
+
126
+ **Instrumentation**
127
+ - # API Changes
128
+ - ## 2026-09-04
129
+ - **Content updates**:
130
+ - Added `IdempotencyKeyHeader` to Create/Patch/Delete `AutoInstrumentationRule`; corrected the shared header's description
131
+ - Added `operationId`/`createdAt` to `LongRunningOperationResponse`; corrected example `status` from `RUNNING` to `PENDING`
132
+ - Renamed `Signal.timestamp` → `occurredAt`, `HourlyStats.hourTimestamp` → `hourAt`; uppercased `Signal.type` and `ListSignals`' `signalType` enums to SCREAMING_SNAKE_CASE
133
+ - Renamed `UserBehaviors` request/response fields to camelCase; added the `summaryDelivery` webhook callback
134
+ - Reshaped `PaginationMeta` (added required `key`, corrected `pageSize` bounds) and all 6 list operations (`ListEventSources`, `ListEventSourceDatasets`, `ListEventSchemas`, `ListAutoInstrumentationRules`, `ListSignals`, `ListSignalStats`) to the `meta` envelope; added `ListSignalStats`' `500` response
135
+ - Narrowed the domain's default `supportedRealms` to `dev-us1` only; `POST /v1/UserBehaviors` (`AnalyzeUserBehaviors`) keeps its own `dev-us1`/`stage-us1` override (prod withheld pending stage validation) — every other operation is now dev-only
136
+ - ## 2026-08-31
137
+ - **Content updates**:
138
+ - Fixed stale `tdi_` TTID prefix throughout (path params, examples, transaction URLs) to `events_`; unified dataset/schema ID formats (`tdi_dat_`/`tdi_dataset_` → `events_dataset_`, `tdi_schema_` → `events_evsch_`); fixed rule-version examples to match the real `version: integer` field
139
+ - Fixed `operationId` to use the domain-agnostic `proc_job_` TTID prefix; corrected the `OperationId` parameter's length constraint (`max=34` → `max=35`) and added a `pattern`
140
+ - Fixed two length constraints hardcoded for the old `tdi_` prefix length: `IngestEventBatch`'s `sourceId` path parameter (`maxLength` 37 → 40); removed the stale, redundant `Twilio-Write-Key` header parameter
141
+ - Added the missing `AutoInstrumentationRuleId` regex `pattern`
142
+ - Fixed `info.title` ("Twilio Data Ingress - Instrumentation API" → "Events Domain - Instrumentation API")
143
+ - **Added 1 new API path**:
144
+ - `/v1/UserBehaviors` (AnalyzeUserBehaviors)
145
+ - ## 2026-07-28
146
+ - **Initial release** — 21 paths, 37 operations across three API surfaces:
147
+ - **Control Plane** (`/v1/ControlPlane/…`):
148
+ - `/v1/ControlPlane/EventSources` (CreateEventSource, ListEventSources)
149
+ - `/v1/ControlPlane/EventSources/{sourceId}` (FetchEventSource, PatchEventSource, DeleteEventSource)
150
+ - `/v1/ControlPlane/EventSources/{sourceId}/WriteKeys` (CreateWriteKey, ListWriteKeys)
151
+ - `/v1/ControlPlane/EventSources/{sourceId}/WriteKeys/{writeKey}` (DeleteWriteKey)
152
+ - `/v1/ControlPlane/EventSources/{sourceId}/Datasets` (CreateEventSourceDataset, ListEventSourceDatasets)
153
+ - `/v1/ControlPlane/EventSources/{sourceId}/Datasets/{datasetId}` (FetchEventSourceDataset, PatchEventSourceDataset, DeleteEventSourceDataset)
154
+ - `/v1/ControlPlane/EventSources/{sourceId}/EventSchemas` (CreateEventSchema, ListEventSchemas)
155
+ - `/v1/ControlPlane/EventSources/{sourceId}/EventSchemas/{schemaId}` (FetchEventSchema, PatchEventSchema, DeleteEventSchema)
156
+ - `/v1/ControlPlane/EventSources/{sourceId}/AutoInstrumentationRules` (CreateAutoInstrumentationRule, ListAutoInstrumentationRules)
157
+ - `/v1/ControlPlane/EventSources/{sourceId}/AutoInstrumentationRules/{autoInstrumentationRuleId}` (FetchAutoInstrumentationRule, PatchAutoInstrumentationRule, DeleteAutoInstrumentationRule)
158
+ - `/v1/ControlPlane/EventSources/{sourceId}/AutoInstrumentationRules/{autoInstrumentationRuleId}/Versions` (ListAutoInstrumentationRuleVersions)
159
+ - `/v1/ControlPlane/EventSources/{sourceId}/AutoInstrumentationRules/{autoInstrumentationRuleId}/Versions/{version}` (FetchAutoInstrumentationRuleVersion)
160
+ - `/v1/ControlPlane/Datasets` (ListDatasets)
161
+ - `/v1/ControlPlane/Datasets/{datasetId}` (FetchDataset)
162
+ - `/v1/ControlPlane/Operations/{operationId}` (FetchControlPlaneOperationStatus)
163
+ - `/v1/ControlPlane/Datasets` (ListDatasets)
164
+ - `/v1/ControlPlane/Datasets/{datasetId}` (FetchDataset)
165
+ - **Event Ingestion** (`/v1/EventSources/…`):
166
+ - `/v1/EventSources/{sourceId}/Batch` (IngestEventBatch)
167
+ - `/v1/EventSources/{sourceId}/AutoInstrumentationRules/{autoInstrumentationRuleId}/Preview` (TriggerAutoInstrumentationPreview)
168
+ - `/v1/EventSources/{sourceId}/AutoInstrumentationRules/{autoInstrumentationRuleId}/Preview/{operationId}` (GetAutoInstrumentationPreviewResult)
169
+ - **Signal API** (`/v1/EventSources/…`):
170
+ - `/v1/EventSources/{sourceId}/Signals` (IngestSignals, ListSignals)
171
+ - `/v1/EventSources/{sourceId}/Signals/{signalKey}` (GetSignalBySignalKey)
172
+ - `/v1/EventSources/{sourceId}/SignalStats` (ListSignalStats)
173
+
174
+ **Memory**
175
+ - ## 2026-08-18
176
+ - **Breaking change**:
177
+ - Removed the deprecated `CSV` and `DATASET` values from the `DataMappingType` enum.
178
+ - `INGRESS`, `DATASET_CLOUDAPP`, and `DATASET_WAREHOUSE` are the only valid values now.
179
+ - Removed the `DataMappingFromCSV` and `DataMappingFromDataSet` schemas and their
180
+ - `oneOf`/discriminator entries on `DataMappingFromTypes`, along with the corresponding
181
+ - `CSV`/`DATASET` discriminator mapping keys.
182
+ - Any caller still sending `type: CSV` or `type: DATASET` on `AdminListDataMappings`
183
+ - (filtering by those values) will get a 400.
184
+ - ## 2026-08-27
185
+ - **Added 2 new path(s)** for Trait Extraction Strategies:
186
+ - `/v1/ControlPlane/TraitExtractionStrategies` (ListTraitExtractionStrategies, CreateTraitExtractionStrategy)
187
+ - `/v1/ControlPlane/TraitExtractionStrategies/{traitStrategyId}` (FetchTraitExtractionStrategy, UpdateTraitExtractionStrategy, DeleteTraitExtractionStrategy)
188
+ - ## 2026-08-18
189
+ - **Breaking change**:
190
+ - Removed the deprecated `CSV` and `DATASET` values from the `DataMappingType` enum.
191
+ - `INGRESS`, `DATASET_CLOUDAPP`, and `DATASET_WAREHOUSE` are the only valid values now.
192
+ - Removed the `DataMappingFromCSV` and `DataMappingFromDataSet` schemas and their
193
+ - `oneOf`/discriminator entries on `DataMappingFromTypes`, along with the corresponding
194
+ - `CSV`/`DATASET` discriminator mapping keys.
195
+ - Any caller still sending `type: CSV` or `type: DATASET` on `CreateDataMapping` or
196
+ - `UpdateDataMapping` (or filtering `ListDataMappings`/`ListDataMappingSuggestions` by
197
+ - those values) will get a 400.
198
+
199
+ **Messaging**
200
+ - Add SenderIdentity, SenderType, and SenderRegion filter query parameters to list numbers and senders endpoint (beta)
201
+ - Add capabilities field to the numbers and senders response (beta)
202
+ - Remove the WhatsApp Senders v1 endpoints (`/v1/Channels/WhatsApp/Senders`) from RestProxy; the sender was routed to the sunsetting `messaging-whatsapp-k8s-orch` downstream. Use the Senders v2 API (`/v2/Channels/Senders`) instead.
203
+
204
+ **Verify**
205
+ - Add `Templates` optional parameter on Verification creation (a stringified JSON array of `sid`/`substitutions` entries). When provided, `Templates` takes precedence over `TemplateSid`.
206
+
207
+ **Voice**
208
+ - ## 2026-09-03
209
+ - Added `links.conversation` to Transcription resources as the absolute Conversations API URL for the
210
+ - transcript's `conversationId`. It is present once the transcript has been stored; the `links` object
211
+ - is omitted otherwise.
212
+ - ## 2026-09-01
213
+ - Removed `mediaUrl` from `CreateRequestWithMediaUrl`'s required fields so a request with neither `sourceId` nor `mediaUrl` reaches the downstream service, which rejects it with the specific error code 17500 instead of a generic gateway 400
214
+ - Set `additionalProperties: false` on both `CreateRequestWithSourceId` and `CreateRequestWithMediaUrl` so the two `oneOf` variants stay mutually exclusive: `sourceId` is undeclared on the media-URL variant and `mediaUrl` is undeclared on the source-ID variant, keeping every request shape resolvable to exactly one variant
215
+ - ## 2026-08-05
216
+ - Added GET /v3/Transcriptions to list and filter transcriptions (status, sourceId, languageCode, createdAfter/createdBefore) with pageSize/pageToken pagination. createdAfter is inclusive and createdBefore exclusive. Returns 422 (error code 17535) when a sourceId's historical item count exceeds the service scan cap
217
+
218
+ **Webhooks**
219
+ - # API Changes
220
+ - ## 2026-08-24
221
+ - **Changed**: Created Webhooks Config API ( https://docs.google.com/document/d/1zkAJD8a8MgoxWifdYDl_d465Az3W6CcD9fuCC2xlSXE/edit?tab=t.0#heading=h.u9e0ry6oe89j ), that includes 7 new resource(s)**: SharedKeys, AuthProfiles, Settings, Rules, Operations, Tests, EdgeZones in /v1/Webhooks referencing webhooks-config downstream.
222
+
223
+
3
224
  [2026-08-13] Version 7.11.1
4
225
  ---------------------------
5
226
  - chore: change permission
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- twilio-ruby (7.11.1)
4
+ twilio-ruby (7.11.2)
5
5
  faraday (>= 2.0, < 3.0)
6
6
  jwt (>= 1.5, < 4.0)
7
7
  nokogiri (>= 1.6, < 2.0)
@@ -144,7 +144,7 @@ CHECKSUMS
144
144
  rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
145
145
  ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
146
146
  simplecov (1.0.3) sha256=38ef0514f16ae7562f0d0f4df02610071115103d301b6de7dacbcc000082e39b
147
- twilio-ruby (7.11.1)
147
+ twilio-ruby (7.11.2)
148
148
  unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
149
149
  unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
150
150
  uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
data/README.md CHANGED
@@ -39,13 +39,13 @@ This library supports the following Ruby implementations:
39
39
  To install using [Bundler][bundler] grab the latest stable version:
40
40
 
41
41
  ```ruby
42
- gem 'twilio-ruby', '~> 7.11.1'
42
+ gem 'twilio-ruby', '~> 7.11.2'
43
43
  ```
44
44
 
45
45
  To manually install `twilio-ruby` via [Rubygems][rubygems] simply gem install:
46
46
 
47
47
  ```bash
48
- gem install twilio-ruby -v 7.11.1
48
+ gem install twilio-ruby -v 7.11.2
49
49
  ```
50
50
 
51
51
  To build and install the development branch yourself from the latest source:
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rack/media_type'
4
+ require 'rack/utils'
4
5
 
5
6
  module Rack
6
7
  # Middleware that authenticates webhooks from Twilio using the request
@@ -33,7 +34,7 @@ module Rack
33
34
  end
34
35
 
35
36
  def call(env)
36
- return @app.call(env) unless env['PATH_INFO'].match(@path_regex)
37
+ return @app.call(env) unless protected_path?(env['PATH_INFO'])
37
38
  request = Rack::Request.new(env)
38
39
  original_url = request.url
39
40
  params = extract_params!(request)
@@ -51,6 +52,48 @@ module Rack
51
52
  end
52
53
  end
53
54
 
55
+ # Decide whether a request path needs its signature validated.
56
+ #
57
+ # PATH_INFO arrives percent-encoded, but the routers we sit in front of
58
+ # (Rails, Sinatra) decode and normalize the path before matching it against
59
+ # their routes. Comparing the configured patterns against the raw PATH_INFO
60
+ # alone therefore lets a request like `/%76oice` slip past this middleware
61
+ # unvalidated and still reach the `/voice` action.
62
+ #
63
+ # We compare against every form the path could take downstream and validate
64
+ # if any of them matches. Erring towards validating means a path we can't
65
+ # make sense of is still checked rather than waved through.
66
+ def protected_path?(path)
67
+ path = path.to_s
68
+ candidates = [path, decode(path)]
69
+ candidates << remove_dot_segments(candidates.last)
70
+ candidates.uniq.any? { |candidate| candidate.match(@path_regex) }
71
+ end
72
+
73
+ # Percent-decode a path the way a downstream router would. `unescape_path`
74
+ # (rather than `unescape`) leaves `+` alone, since a plus is a literal plus
75
+ # in a path and only means a space in a query string. Undecodable bytes are
76
+ # scrubbed, as matching a Regexp against invalid UTF-8 raises.
77
+ def decode(path)
78
+ decoded = Rack::Utils.unescape_path(path)
79
+ decoded.valid_encoding? ? decoded : decoded.scrub
80
+ rescue ArgumentError
81
+ path
82
+ end
83
+
84
+ # Collapse `.`, `..` and repeated slashes, so an anchored pattern such as
85
+ # %r{\A/voice\z} still recognizes `/sms/../voice`.
86
+ def remove_dot_segments(path)
87
+ segments = path.split('/').each_with_object([]) do |segment, resolved|
88
+ case segment
89
+ when '', '.' then next
90
+ when '..' then resolved.pop
91
+ else resolved << segment
92
+ end
93
+ end
94
+ "/#{segments.join('/')}"
95
+ end
96
+
54
97
  # Extract the params from the the request that we can use to determine the
55
98
  # signature. This _may_ modify the passed in request since it may read/rewind
56
99
  # the body.
@@ -67,6 +110,6 @@ module Rack
67
110
  end
68
111
  end
69
112
 
70
- private :extract_params!
113
+ private :extract_params!, :protected_path?, :decode, :remove_dot_segments
71
114
  end
72
115
  end
@@ -205,65 +205,6 @@ module Twilio
205
205
  end
206
206
  end
207
207
 
208
- class AuthTokenPromotionPageMetadata < PageMetadata
209
- attr_reader :auth_token_promotion_page
210
-
211
- def initialize(version, response, solution, limit)
212
- super(version, response)
213
- @auth_token_promotion_page = []
214
- @limit = limit
215
- key = get_key(response.body)
216
- records = 0
217
- while( limit != :unset && records < limit )
218
- @auth_token_promotion_page << AuthTokenPromotionListResponse.new(version, @payload, key, limit - records)
219
- @payload = self.next_page
220
- break unless @payload
221
- records += (@payload.body[key] || []).size
222
- end
223
- # Path Solution
224
- @solution = solution
225
- end
226
-
227
- def each
228
- @auth_token_promotion_page.each do |record|
229
- yield record
230
- end
231
- end
232
-
233
- def to_s
234
- '<Twilio::REST::Accounts::V1PageMetadata>';
235
- end
236
- end
237
- class AuthTokenPromotionListResponse < InstanceListResource
238
-
239
- # @param [Array<AuthTokenPromotionInstance>] instance
240
- # @param [Hash{String => Object}] headers
241
- # @param [Integer] status_code
242
- def initialize(version, payload, key, limit = :unset)
243
- data_list = payload.body[key] || []
244
- if limit != :unset
245
- data_list = data_list[0, limit]
246
- end
247
- @auth_token_promotion = data_list.map do |data|
248
- AuthTokenPromotionInstance.new(version, data)
249
- end
250
- @headers = payload.headers
251
- @status_code = payload.status_code
252
- end
253
-
254
- def auth_token_promotion
255
- @auth_token_promotion
256
- end
257
-
258
- def headers
259
- @headers
260
- end
261
-
262
- def status_code
263
- @status_code
264
- end
265
- end
266
-
267
208
  class AuthTokenPromotionInstance < InstanceResource
268
209
  ##
269
210
  # Initialize the AuthTokenPromotionInstance
@@ -126,65 +126,6 @@ module Twilio
126
126
  end
127
127
  end
128
128
 
129
- class BulkConsentsPageMetadata < PageMetadata
130
- attr_reader :bulk_consents_page
131
-
132
- def initialize(version, response, solution, limit)
133
- super(version, response)
134
- @bulk_consents_page = []
135
- @limit = limit
136
- key = get_key(response.body)
137
- records = 0
138
- while( limit != :unset && records < limit )
139
- @bulk_consents_page << BulkConsentsListResponse.new(version, @payload, key, limit - records)
140
- @payload = self.next_page
141
- break unless @payload
142
- records += (@payload.body[key] || []).size
143
- end
144
- # Path Solution
145
- @solution = solution
146
- end
147
-
148
- def each
149
- @bulk_consents_page.each do |record|
150
- yield record
151
- end
152
- end
153
-
154
- def to_s
155
- '<Twilio::REST::Accounts::V1PageMetadata>';
156
- end
157
- end
158
- class BulkConsentsListResponse < InstanceListResource
159
-
160
- # @param [Array<BulkConsentsInstance>] instance
161
- # @param [Hash{String => Object}] headers
162
- # @param [Integer] status_code
163
- def initialize(version, payload, key, limit = :unset)
164
- data_list = payload.body[key] || []
165
- if limit != :unset
166
- data_list = data_list[0, limit]
167
- end
168
- @bulk_consents = data_list.map do |data|
169
- BulkConsentsInstance.new(version, data)
170
- end
171
- @headers = payload.headers
172
- @status_code = payload.status_code
173
- end
174
-
175
- def bulk_consents
176
- @bulk_consents
177
- end
178
-
179
- def headers
180
- @headers
181
- end
182
-
183
- def status_code
184
- @status_code
185
- end
186
- end
187
-
188
129
  class BulkConsentsInstance < InstanceResource
189
130
  ##
190
131
  # Initialize the BulkConsentsInstance
@@ -126,65 +126,6 @@ module Twilio
126
126
  end
127
127
  end
128
128
 
129
- class BulkContactsPageMetadata < PageMetadata
130
- attr_reader :bulk_contacts_page
131
-
132
- def initialize(version, response, solution, limit)
133
- super(version, response)
134
- @bulk_contacts_page = []
135
- @limit = limit
136
- key = get_key(response.body)
137
- records = 0
138
- while( limit != :unset && records < limit )
139
- @bulk_contacts_page << BulkContactsListResponse.new(version, @payload, key, limit - records)
140
- @payload = self.next_page
141
- break unless @payload
142
- records += (@payload.body[key] || []).size
143
- end
144
- # Path Solution
145
- @solution = solution
146
- end
147
-
148
- def each
149
- @bulk_contacts_page.each do |record|
150
- yield record
151
- end
152
- end
153
-
154
- def to_s
155
- '<Twilio::REST::Accounts::V1PageMetadata>';
156
- end
157
- end
158
- class BulkContactsListResponse < InstanceListResource
159
-
160
- # @param [Array<BulkContactsInstance>] instance
161
- # @param [Hash{String => Object}] headers
162
- # @param [Integer] status_code
163
- def initialize(version, payload, key, limit = :unset)
164
- data_list = payload.body[key] || []
165
- if limit != :unset
166
- data_list = data_list[0, limit]
167
- end
168
- @bulk_contacts = data_list.map do |data|
169
- BulkContactsInstance.new(version, data)
170
- end
171
- @headers = payload.headers
172
- @status_code = payload.status_code
173
- end
174
-
175
- def bulk_contacts
176
- @bulk_contacts
177
- end
178
-
179
- def headers
180
- @headers
181
- end
182
-
183
- def status_code
184
- @status_code
185
- end
186
- end
187
-
188
129
  class BulkContactsInstance < InstanceResource
189
130
  ##
190
131
  # Initialize the BulkContactsInstance
@@ -98,65 +98,6 @@ module Twilio
98
98
  end
99
99
  end
100
100
 
101
- class CredentialPageMetadata < PageMetadata
102
- attr_reader :credential_page
103
-
104
- def initialize(version, response, solution, limit)
105
- super(version, response)
106
- @credential_page = []
107
- @limit = limit
108
- key = get_key(response.body)
109
- records = 0
110
- while( limit != :unset && records < limit )
111
- @credential_page << CredentialListResponse.new(version, @payload, key, limit - records)
112
- @payload = self.next_page
113
- break unless @payload
114
- records += (@payload.body[key] || []).size
115
- end
116
- # Path Solution
117
- @solution = solution
118
- end
119
-
120
- def each
121
- @credential_page.each do |record|
122
- yield record
123
- end
124
- end
125
-
126
- def to_s
127
- '<Twilio::REST::Accounts::V1PageMetadata>';
128
- end
129
- end
130
- class CredentialListResponse < InstanceListResource
131
-
132
- # @param [Array<CredentialInstance>] instance
133
- # @param [Hash{String => Object}] headers
134
- # @param [Integer] status_code
135
- def initialize(version, payload, key, limit = :unset)
136
- data_list = payload.body[key] || []
137
- if limit != :unset
138
- data_list = data_list[0, limit]
139
- end
140
- @credential = data_list.map do |data|
141
- CredentialInstance.new(version, data)
142
- end
143
- @headers = payload.headers
144
- @status_code = payload.status_code
145
- end
146
-
147
- def credential
148
- @credential
149
- end
150
-
151
- def headers
152
- @headers
153
- end
154
-
155
- def status_code
156
- @status_code
157
- end
158
- end
159
-
160
101
  class CredentialInstance < InstanceResource
161
102
  ##
162
103
  # Initialize the CredentialInstance