twilio-ruby 7.10.7 → 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 (298) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test-and-deploy.yml +43 -67
  3. data/.gitignore +0 -1
  4. data/CHANGES.md +267 -0
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +154 -0
  7. data/README.md +3 -3
  8. data/Rakefile +1 -1
  9. data/lib/rack/twilio_webhook_authentication.rb +45 -2
  10. data/lib/twilio-ruby/rest/accounts/v1/auth_token_promotion.rb +25 -65
  11. data/lib/twilio-ruby/rest/accounts/v1/bulk_consents.rb +0 -59
  12. data/lib/twilio-ruby/rest/accounts/v1/bulk_contacts.rb +0 -59
  13. data/lib/twilio-ruby/rest/accounts/v1/credential.rb +0 -59
  14. data/lib/twilio-ruby/rest/accounts/v1/messaging_geopermissions.rb +0 -59
  15. data/lib/twilio-ruby/rest/accounts/v1/safelist.rb +0 -59
  16. data/lib/twilio-ruby/rest/accounts/v1/secondary_auth_token.rb +48 -71
  17. data/lib/twilio-ruby/rest/api/v2010/account/balance.rb +0 -59
  18. data/lib/twilio-ruby/rest/api/v2010/account/call/payment.rb +0 -59
  19. data/lib/twilio-ruby/rest/api/v2010/account/call/siprec.rb +0 -59
  20. data/lib/twilio-ruby/rest/api/v2010/account/call/stream.rb +0 -59
  21. data/lib/twilio-ruby/rest/api/v2010/account/call/transcription.rb +0 -59
  22. data/lib/twilio-ruby/rest/api/v2010/account/call/user_defined_message.rb +0 -59
  23. data/lib/twilio-ruby/rest/api/v2010/account/call/user_defined_message_subscription.rb +0 -59
  24. data/lib/twilio-ruby/rest/api/v2010/account/call.rb +6 -0
  25. data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +56 -2
  26. data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +0 -59
  27. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +6 -0
  28. data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +0 -59
  29. data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +0 -59
  30. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload/data.rb +0 -59
  31. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_type_calls.rb +0 -59
  32. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_type_registrations.rb +0 -59
  33. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types.rb +0 -59
  34. data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +0 -59
  35. data/lib/twilio-ruby/rest/api/v2010/account/token.rb +0 -59
  36. data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +0 -59
  37. data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +0 -59
  38. data/lib/twilio-ruby/rest/bulkexports/v1/export/job.rb +0 -59
  39. data/lib/twilio-ruby/rest/bulkexports/v1/export.rb +0 -59
  40. data/lib/twilio-ruby/rest/bulkexports/v1/export_configuration.rb +0 -59
  41. data/lib/twilio-ruby/rest/chat/v3/channel.rb +0 -59
  42. data/lib/twilio-ruby/rest/client.rb +0 -5
  43. data/lib/twilio-ruby/rest/content/v1/content/approval_create.rb +11 -60
  44. data/lib/twilio-ruby/rest/content/v1/content/approval_fetch.rb +0 -59
  45. data/lib/twilio-ruby/rest/conversations/v1/configuration/webhook.rb +0 -59
  46. data/lib/twilio-ruby/rest/conversations/v1/configuration.rb +0 -59
  47. data/lib/twilio-ruby/rest/conversations/v1/conversation/message.rb +10 -10
  48. data/lib/twilio-ruby/rest/conversations/v1/conversation_with_participants.rb +0 -59
  49. data/lib/twilio-ruby/rest/conversations/v1/service/configuration/notification.rb +0 -59
  50. data/lib/twilio-ruby/rest/conversations/v1/service/configuration/webhook.rb +0 -59
  51. data/lib/twilio-ruby/rest/conversations/v1/service/configuration.rb +0 -59
  52. data/lib/twilio-ruby/rest/conversations/v1/service/conversation/message.rb +10 -10
  53. data/lib/twilio-ruby/rest/conversations/v1/service/conversation_with_participants.rb +0 -59
  54. data/lib/twilio-ruby/rest/conversations/v2/action.rb +2 -61
  55. data/lib/twilio-ruby/rest/conversations/v2/communication.rb +43 -21
  56. data/lib/twilio-ruby/rest/conversations/v2/configuration.rb +584 -21
  57. data/lib/twilio-ruby/rest/conversations/v2/conversation.rb +28 -28
  58. data/lib/twilio-ruby/rest/conversations/v2/operation.rb +10 -69
  59. data/lib/twilio-ruby/rest/conversations/v2/participant.rb +58 -58
  60. data/lib/twilio-ruby/rest/conversations/v2.rb +55 -49
  61. data/lib/twilio-ruby/rest/events/v1/schema.rb +0 -59
  62. data/lib/twilio-ruby/rest/events/v1/sink/sink_test.rb +0 -59
  63. data/lib/twilio-ruby/rest/events/v1/sink/sink_validate.rb +0 -59
  64. data/lib/twilio-ruby/rest/flex_api/v1/assessments.rb +12 -14
  65. data/lib/twilio-ruby/rest/flex_api/v1/configuration.rb +0 -59
  66. data/lib/twilio-ruby/rest/flex_api/v1/insights_assessments_comment.rb +12 -14
  67. data/lib/twilio-ruby/rest/flex_api/v1/insights_conversations.rb +12 -14
  68. data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires.rb +12 -14
  69. data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires_category.rb +2 -4
  70. data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires_question.rb +12 -14
  71. data/lib/twilio-ruby/rest/flex_api/v1/insights_segments.rb +12 -14
  72. data/lib/twilio-ruby/rest/flex_api/v1/insights_session.rb +0 -59
  73. data/lib/twilio-ruby/rest/flex_api/v1/insights_settings_answer_sets.rb +0 -59
  74. data/lib/twilio-ruby/rest/flex_api/v1/insights_settings_comment.rb +0 -59
  75. data/lib/twilio-ruby/rest/flex_api/v1/insights_user_roles.rb +0 -59
  76. data/lib/twilio-ruby/rest/flex_api/v1/interaction/interaction_channel/interaction_transfer.rb +0 -59
  77. data/lib/twilio-ruby/rest/flex_api/v1/interaction.rb +0 -59
  78. data/lib/twilio-ruby/rest/flex_api/v1/plugin/plugin_versions.rb +2 -4
  79. data/lib/twilio-ruby/rest/flex_api/v1/plugin.rb +2 -4
  80. data/lib/twilio-ruby/rest/flex_api/v1/plugin_archive.rb +0 -59
  81. data/lib/twilio-ruby/rest/flex_api/v1/plugin_configuration/configured_plugin.rb +2 -4
  82. data/lib/twilio-ruby/rest/flex_api/v1/plugin_configuration.rb +2 -4
  83. data/lib/twilio-ruby/rest/flex_api/v1/plugin_configuration_archive.rb +0 -59
  84. data/lib/twilio-ruby/rest/flex_api/v1/plugin_release.rb +2 -4
  85. data/lib/twilio-ruby/rest/flex_api/v1/plugin_version_archive.rb +0 -59
  86. data/lib/twilio-ruby/rest/flex_api/v1/provisioning_status.rb +0 -59
  87. data/lib/twilio-ruby/rest/flex_api/v2/flex_user.rb +0 -59
  88. data/lib/twilio-ruby/rest/flex_api/v2/web_channels.rb +0 -59
  89. data/lib/twilio-ruby/rest/frontline_api/v1/user.rb +0 -59
  90. data/lib/twilio-ruby/rest/iam/v1/api_key.rb +0 -59
  91. data/lib/twilio-ruby/rest/iam/v1/new_api_key.rb +2 -61
  92. data/lib/twilio-ruby/rest/iam/v1/o_auth_app.rb +15 -61
  93. data/lib/twilio-ruby/rest/iam/v1/token.rb +0 -59
  94. data/lib/twilio-ruby/rest/iam_base.rb +6 -1
  95. data/lib/twilio-ruby/rest/insights/v1/call/annotation.rb +0 -59
  96. data/lib/twilio-ruby/rest/insights/v1/call/call_summary.rb +7 -59
  97. data/lib/twilio-ruby/rest/insights/v1/call/event.rb +7 -0
  98. data/lib/twilio-ruby/rest/insights/v1/call.rb +0 -59
  99. data/lib/twilio-ruby/rest/insights/v1/call_summaries.rb +7 -0
  100. data/lib/twilio-ruby/rest/insights/v1/setting.rb +0 -59
  101. data/lib/twilio-ruby/rest/insights/v2/inbound.rb +2 -261
  102. data/lib/twilio-ruby/rest/insights/v2/inbound_report.rb +258 -0
  103. data/lib/twilio-ruby/rest/insights/v2/outbound.rb +18 -299
  104. data/lib/twilio-ruby/rest/insights/v2/outbound_report.rb +258 -0
  105. data/lib/twilio-ruby/rest/insights/v2/report.rb +27 -184
  106. data/lib/twilio-ruby/rest/insights/v2.rb +14 -4
  107. data/lib/twilio-ruby/rest/insights/v3/metadata.rb +1 -60
  108. data/lib/twilio-ruby/rest/insights/v3/query.rb +1 -60
  109. data/lib/twilio-ruby/rest/insights/v3/query_job.rb +654 -0
  110. data/lib/twilio-ruby/rest/insights/v3/result.rb +195 -0
  111. data/lib/twilio-ruby/rest/insights/v3.rb +17 -1
  112. data/lib/twilio-ruby/rest/intelligence/v2/operator_attachment.rb +0 -59
  113. data/lib/twilio-ruby/rest/intelligence/v2/operator_attachments.rb +0 -59
  114. data/lib/twilio-ruby/rest/intelligence/v2/transcript/encrypted_operator_results.rb +0 -59
  115. data/lib/twilio-ruby/rest/intelligence/v2/transcript/encrypted_sentences.rb +0 -59
  116. data/lib/twilio-ruby/rest/intelligence/v2/transcript/media.rb +0 -59
  117. data/lib/twilio-ruby/rest/intelligence/v3/conversation.rb +8 -8
  118. data/lib/twilio-ruby/rest/intelligence/v3/rule_execution.rb +443 -0
  119. data/lib/twilio-ruby/rest/intelligence/v3.rb +6 -0
  120. data/lib/twilio-ruby/rest/knowledge/v1/knowledge/knowledge_status.rb +0 -59
  121. data/lib/twilio-ruby/rest/knowledge/v2/chunk.rb +28 -0
  122. data/lib/twilio-ruby/rest/knowledge/v2/knowledge.rb +38 -0
  123. data/lib/twilio-ruby/rest/knowledge/v2/operation.rb +0 -59
  124. data/lib/twilio-ruby/rest/knowledge/v2/search.rb +8 -176
  125. data/lib/twilio-ruby/rest/knowledge/v2.rb +1 -2
  126. data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +0 -59
  127. data/lib/twilio-ruby/rest/lookups/v2/bucket.rb +0 -59
  128. data/lib/twilio-ruby/rest/lookups/v2/lookup_override.rb +0 -59
  129. data/lib/twilio-ruby/rest/lookups/v2/phone_number.rb +0 -59
  130. data/lib/twilio-ruby/rest/lookups/v2/query.rb +0 -59
  131. data/lib/twilio-ruby/rest/lookups/v2/rate_limit.rb +0 -59
  132. data/lib/twilio-ruby/rest/marketplace/v1/installed_add_on/installed_add_on_usage.rb +0 -59
  133. data/lib/twilio-ruby/rest/marketplace/v1/module_data.rb +0 -59
  134. data/lib/twilio-ruby/rest/marketplace/v1/module_data_management.rb +0 -59
  135. data/lib/twilio-ruby/rest/marketplace/v1/referral_conversion.rb +0 -59
  136. data/lib/twilio-ruby/rest/memory/v1/bulk.rb +9 -177
  137. data/lib/twilio-ruby/rest/memory/v1/conversation_summary.rb +15 -9
  138. data/lib/twilio-ruby/rest/memory/v1/data_mapping.rb +6 -12
  139. data/lib/twilio-ruby/rest/memory/v1/identifier.rb +1 -81
  140. data/lib/twilio-ruby/rest/memory/v1/identity_resolution_setting.rb +11 -191
  141. data/lib/twilio-ruby/rest/memory/v1/import.rb +28 -5
  142. data/lib/twilio-ruby/rest/memory/v1/lookup.rb +1 -60
  143. data/lib/twilio-ruby/rest/memory/v1/observation.rb +72 -22
  144. data/lib/twilio-ruby/rest/memory/v1/operation.rb +1 -60
  145. data/lib/twilio-ruby/rest/memory/v1/profile.rb +2 -2
  146. data/lib/twilio-ruby/rest/memory/v1/recall.rb +1 -60
  147. data/lib/twilio-ruby/rest/memory/v1/revision.rb +3 -5
  148. data/lib/twilio-ruby/rest/memory/v1/store.rb +1 -1
  149. data/lib/twilio-ruby/rest/memory/v1/trait.rb +1 -1
  150. data/lib/twilio-ruby/rest/memory/v1/trait_group.rb +56 -6
  151. data/lib/twilio-ruby/rest/memory/v1.rb +3 -46
  152. data/lib/twilio-ruby/rest/messaging/v1/brand_registration/brand_registration_otp.rb +0 -59
  153. data/lib/twilio-ruby/rest/messaging/v1/brand_registration.rb +0 -18
  154. data/lib/twilio-ruby/rest/messaging/v1/deactivations.rb +0 -59
  155. data/lib/twilio-ruby/rest/messaging/v1/domain_certs.rb +0 -59
  156. data/lib/twilio-ruby/rest/messaging/v1/domain_config.rb +0 -59
  157. data/lib/twilio-ruby/rest/messaging/v1/domain_config_messaging_service.rb +0 -59
  158. data/lib/twilio-ruby/rest/messaging/v1/domain_validate_dn.rb +0 -59
  159. data/lib/twilio-ruby/rest/messaging/v1/external_campaign.rb +0 -59
  160. data/lib/twilio-ruby/rest/messaging/v1/linkshortening_messaging_service.rb +0 -59
  161. data/lib/twilio-ruby/rest/messaging/v1/linkshortening_messaging_service_domain_association.rb +0 -59
  162. data/lib/twilio-ruby/rest/messaging/v1/request_managed_cert.rb +0 -59
  163. data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person.rb +2 -4
  164. data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person_usecase.rb +0 -59
  165. data/lib/twilio-ruby/rest/messaging/v1/usecase.rb +0 -59
  166. data/lib/twilio-ruby/rest/messaging/v2/channels_sender.rb +23 -4
  167. data/lib/twilio-ruby/rest/messaging/v2/domain_certs.rb +0 -59
  168. data/lib/twilio-ruby/rest/messaging/v2/typing_indicator.rb +0 -59
  169. data/lib/twilio-ruby/rest/messaging/v3/typing_indicator.rb +4 -63
  170. data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +0 -59
  171. data/lib/twilio-ruby/rest/numbers/v1/bulk_eligibility.rb +0 -59
  172. data/lib/twilio-ruby/rest/numbers/v1/eligibility.rb +0 -59
  173. data/lib/twilio-ruby/rest/numbers/v1/embedded_session.rb +0 -59
  174. data/lib/twilio-ruby/rest/numbers/v1/porting_port_in.rb +0 -59
  175. data/lib/twilio-ruby/rest/numbers/v1/porting_port_in_phone_number.rb +0 -59
  176. data/lib/twilio-ruby/rest/numbers/v1/porting_portability.rb +0 -59
  177. data/lib/twilio-ruby/rest/numbers/v1/porting_webhook_configuration.rb +0 -59
  178. data/lib/twilio-ruby/rest/numbers/v1/porting_webhook_configuration_delete.rb +0 -59
  179. data/lib/twilio-ruby/rest/numbers/v1/sender_id_registration.rb +0 -59
  180. data/lib/twilio-ruby/rest/numbers/v1/sms_verification.rb +172 -0
  181. data/lib/twilio-ruby/rest/numbers/v1/sms_verification_check.rb +179 -0
  182. data/lib/twilio-ruby/rest/numbers/v1/voice_verification.rb +186 -0
  183. data/lib/twilio-ruby/rest/numbers/v1/voice_verification_check.rb +165 -0
  184. data/lib/twilio-ruby/rest/numbers/v1/webhook.rb +0 -59
  185. data/lib/twilio-ruby/rest/numbers/v1.rb +24 -0
  186. data/lib/twilio-ruby/rest/numbers/v2/bulk_hosted_number_order.rb +0 -59
  187. data/lib/twilio-ruby/rest/numbers/v2/bundle_clone.rb +0 -59
  188. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/bundle/replace_items.rb +0 -59
  189. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance.rb +0 -59
  190. data/lib/twilio-ruby/rest/numbers/v3/hosted_number_order.rb +0 -59
  191. data/lib/twilio-ruby/rest/oauth/v1/authorize.rb +0 -59
  192. data/lib/twilio-ruby/rest/oauth/v1/token.rb +0 -59
  193. data/lib/twilio-ruby/rest/oauth/v2/authorize.rb +14 -61
  194. data/lib/twilio-ruby/rest/oauth/v2/oauth_authorization_server.rb +200 -0
  195. data/lib/twilio-ruby/rest/oauth/v2/token.rb +10 -63
  196. data/lib/twilio-ruby/rest/preview/wireless/sim/usage.rb +0 -59
  197. data/lib/twilio-ruby/rest/preview_iam/v1/authorize.rb +0 -59
  198. data/lib/twilio-ruby/rest/preview_iam/v1/token.rb +0 -59
  199. data/lib/twilio-ruby/rest/preview_iam/versionless/organization.rb +0 -78
  200. data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +0 -59
  201. data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +0 -59
  202. data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +0 -59
  203. data/lib/twilio-ruby/rest/pricing/v1/voice.rb +0 -59
  204. data/lib/twilio-ruby/rest/pricing/v2/number.rb +0 -59
  205. data/lib/twilio-ruby/rest/pricing/v2/voice/number.rb +0 -59
  206. data/lib/twilio-ruby/rest/pricing/v2/voice.rb +0 -59
  207. data/lib/twilio-ruby/rest/routes/v2/phone_number.rb +0 -59
  208. data/lib/twilio-ruby/rest/routes/v2/sip_domain.rb +0 -59
  209. data/lib/twilio-ruby/rest/routes/v2/trunk.rb +0 -59
  210. data/lib/twilio-ruby/rest/routes/v3/phone_number.rb +406 -0
  211. data/lib/twilio-ruby/rest/routes/v3.rb +50 -0
  212. data/lib/twilio-ruby/rest/routes_base.rb +6 -1
  213. data/lib/twilio-ruby/rest/serverless/v1/service/build/build_status.rb +0 -59
  214. data/lib/twilio-ruby/rest/serverless/v1/service/function/function_version/function_version_content.rb +0 -59
  215. data/lib/twilio-ruby/rest/studio/v1/flow/engagement/engagement_context.rb +0 -59
  216. data/lib/twilio-ruby/rest/studio/v1/flow/engagement/step/step_context.rb +0 -59
  217. data/lib/twilio-ruby/rest/studio/v1/flow/execution/execution_context.rb +0 -59
  218. data/lib/twilio-ruby/rest/studio/v1/flow/execution/execution_step/execution_step_context.rb +0 -59
  219. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_context.rb +0 -59
  220. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_step/execution_step_context.rb +0 -59
  221. data/lib/twilio-ruby/rest/studio/v2/flow/flow_test_user.rb +0 -59
  222. data/lib/twilio-ruby/rest/studio/v2/flow_validate.rb +0 -59
  223. data/lib/twilio-ruby/rest/sync/v1/service/sync_stream/stream_message.rb +0 -59
  224. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_bulk_real_time_statistics.rb +0 -59
  225. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_cumulative_statistics.rb +0 -59
  226. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_real_time_statistics.rb +0 -59
  227. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +0 -59
  228. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +0 -59
  229. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_cumulative_statistics.rb +0 -59
  230. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_real_time_statistics.rb +0 -59
  231. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +0 -59
  232. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_cumulative_statistics.rb +0 -59
  233. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_real_time_statistics.rb +0 -59
  234. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +0 -59
  235. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_cumulative_statistics.rb +0 -59
  236. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_real_time_statistics.rb +0 -59
  237. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +0 -59
  238. data/lib/twilio-ruby/rest/trunking/v1/trunk/recording.rb +0 -59
  239. data/lib/twilio-ruby/rest/trusthub/v1/a2p_brand_registration.rb +271 -0
  240. data/lib/twilio-ruby/rest/trusthub/v1/a2p_brand_registration_embedded_session.rb +174 -0
  241. data/lib/twilio-ruby/rest/trusthub/v1/a2p_campaign_registration.rb +262 -0
  242. data/lib/twilio-ruby/rest/trusthub/v1/a2p_campaign_registration_embedded_session.rb +174 -0
  243. data/lib/twilio-ruby/rest/trusthub/v1/compliance_inquiries.rb +0 -59
  244. data/lib/twilio-ruby/rest/trusthub/v1/compliance_registration_inquiries.rb +0 -59
  245. data/lib/twilio-ruby/rest/trusthub/v1/compliance_tollfree_inquiries.rb +0 -59
  246. data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles_provisional_copy.rb +386 -0
  247. data/lib/twilio-ruby/rest/trusthub/v1/trust_products_provisional_copy.rb +386 -0
  248. data/lib/twilio-ruby/rest/trusthub/v1.rb +74 -0
  249. data/lib/twilio-ruby/rest/verify/v2/form.rb +0 -59
  250. data/lib/twilio-ruby/rest/verify/v2/safelist.rb +0 -59
  251. data/lib/twilio-ruby/rest/verify/v2/service/access_token.rb +0 -59
  252. data/lib/twilio-ruby/rest/verify/v2/service/approve_challenge.rb +0 -59
  253. data/lib/twilio-ruby/rest/verify/v2/service/entity/challenge/notification.rb +0 -59
  254. data/lib/twilio-ruby/rest/verify/v2/service/entity/new_factor.rb +0 -59
  255. data/lib/twilio-ruby/rest/verify/v2/service/new_challenge.rb +3 -62
  256. data/lib/twilio-ruby/rest/verify/v2/service/new_factor.rb +0 -59
  257. data/lib/twilio-ruby/rest/verify/v2/service/new_verify_factor.rb +0 -59
  258. data/lib/twilio-ruby/rest/verify/v2/service/verification.rb +8 -61
  259. data/lib/twilio-ruby/rest/verify/v2/service/verification_check.rb +0 -59
  260. data/lib/twilio-ruby/rest/verify/v2/verification_attempts_summary.rb +0 -59
  261. data/lib/twilio-ruby/rest/video/v1/composition_settings.rb +0 -59
  262. data/lib/twilio-ruby/rest/video/v1/recording_settings.rb +0 -59
  263. data/lib/twilio-ruby/rest/video/v1/room/participant/anonymize.rb +0 -59
  264. data/lib/twilio-ruby/rest/video/v1/room/participant/subscribe_rules.rb +0 -59
  265. data/lib/twilio-ruby/rest/video/v1/room/recording_rules.rb +0 -59
  266. data/lib/twilio-ruby/rest/voice/v1/archived_call.rb +0 -59
  267. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/bulk_country_update.rb +0 -59
  268. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/settings.rb +0 -59
  269. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions.rb +0 -59
  270. data/lib/twilio-ruby/rest/voice/v2/account_default_configuration.rb +497 -0
  271. data/lib/twilio-ruby/rest/voice/v2/configuration/default.rb +297 -0
  272. data/lib/twilio-ruby/rest/voice/v2/configuration.rb +353 -0
  273. data/lib/twilio-ruby/rest/voice/v2/recording.rb +557 -0
  274. data/lib/twilio-ruby/rest/voice/v2/transcription.rb +532 -0
  275. data/lib/twilio-ruby/rest/voice/v2/type.rb +459 -0
  276. data/lib/twilio-ruby/rest/voice/v2.rb +141 -0
  277. data/lib/twilio-ruby/rest/voice/v3/transcription.rb +259 -50
  278. data/lib/twilio-ruby/rest/voice_base.rb +5 -0
  279. data/lib/twilio-ruby/twiml/voice_response.rb +6 -68
  280. data/lib/twilio-ruby/version.rb +1 -1
  281. data/twilio-ruby.gemspec +1 -1
  282. metadata +36 -22
  283. data/lib/twilio-ruby/rest/assistants/v1/assistant/assistants_knowledge.rb +0 -558
  284. data/lib/twilio-ruby/rest/assistants/v1/assistant/assistants_tool.rb +0 -558
  285. data/lib/twilio-ruby/rest/assistants/v1/assistant/feedback.rb +0 -431
  286. data/lib/twilio-ruby/rest/assistants/v1/assistant/message.rb +0 -296
  287. data/lib/twilio-ruby/rest/assistants/v1/assistant.rb +0 -927
  288. data/lib/twilio-ruby/rest/assistants/v1/knowledge/chunk.rb +0 -325
  289. data/lib/twilio-ruby/rest/assistants/v1/knowledge/knowledge_status.rb +0 -349
  290. data/lib/twilio-ruby/rest/assistants/v1/knowledge.rb +0 -871
  291. data/lib/twilio-ruby/rest/assistants/v1/policy.rb +0 -364
  292. data/lib/twilio-ruby/rest/assistants/v1/session/message.rb +0 -360
  293. data/lib/twilio-ruby/rest/assistants/v1/session.rb +0 -501
  294. data/lib/twilio-ruby/rest/assistants/v1/tool.rb +0 -847
  295. data/lib/twilio-ruby/rest/assistants/v1.rb +0 -104
  296. data/lib/twilio-ruby/rest/assistants.rb +0 -6
  297. data/lib/twilio-ruby/rest/assistants_base.rb +0 -38
  298. data/lib/twilio-ruby/rest/memory/v1/event.rb +0 -320
@@ -0,0 +1,459 @@
1
+ ##
2
+ # This code was generated by
3
+ # ___ _ _ _ _ _ _ ____ ____ ____ _ ____ ____ _ _ ____ ____ ____ ___ __ __
4
+ # | | | | | | | | | __ | | |__| | __ | __ |___ |\ | |___ |__/ |__| | | | |__/
5
+ # | |_|_| | |___ | |__| |__| | | | |__] |___ | \| |___ | \ | | | |__| | \
6
+ #
7
+ # Twilio API definition for public-api voice
8
+ # Powers Twilio public-api voice
9
+ #
10
+ # NOTE: This class is auto generated by OpenAPI Generator.
11
+ # https://openapi-generator.tech
12
+ # Do not edit the class manually.
13
+ #
14
+
15
+
16
+ module Twilio
17
+ module REST
18
+ class Voice < VoiceBase
19
+ class V2 < Version
20
+ class TypeList < ListResource
21
+
22
+ class VoiceV2ConfigurationRequest
23
+ # @param [unique_name]: [String] The unique name
24
+ # @param [description]: [String] The description
25
+ # @param [configuration]: [Hash]
26
+ attr_accessor :unique_name, :description, :configuration
27
+ def initialize(payload)
28
+ @unique_name = payload["unique_name"]
29
+ @description = payload["description"]
30
+ @configuration = payload["configuration"]
31
+ end
32
+ def to_json(options = {})
33
+ {
34
+ "unique_name": @unique_name,
35
+ "description": @description,
36
+ "configuration": @configuration,
37
+ }.to_json(options)
38
+ end
39
+ end
40
+
41
+
42
+ ##
43
+ # Initialize the TypeList
44
+ # @param [Version] version Version that contains the resource
45
+ # @return [TypeList] TypeList
46
+ def initialize(version)
47
+ super(version)
48
+
49
+ # Path Solution
50
+ @solution = { }
51
+
52
+
53
+ end
54
+
55
+
56
+
57
+ # Provide a user friendly representation
58
+ def to_s
59
+ '#<Twilio.Voice.V2.TypeList>'
60
+ end
61
+ end
62
+
63
+
64
+ class TypeContext < InstanceContext
65
+ ##
66
+ # Initialize the TypeContext
67
+ # @param [Version] version Version that contains the resource
68
+ # @param [String] type
69
+ # @param [String] id_or_unique_name
70
+ # @return [TypeContext] TypeContext
71
+ def initialize(version, type, id_or_unique_name)
72
+ super(version)
73
+
74
+
75
+ # Path Solution
76
+ @solution = { type: type, id_or_unique_name: id_or_unique_name, }
77
+ @uri = "/Configurations/#{@solution[:type]}/#{@solution[:id_or_unique_name]}"
78
+
79
+
80
+ end
81
+ ##
82
+ # Delete the TypeInstance
83
+ # @return [Boolean] True if delete succeeds, false otherwise
84
+ def delete
85
+
86
+ headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
87
+
88
+
89
+
90
+
91
+ @version.delete('DELETE', @uri, headers: headers)
92
+ end
93
+
94
+ ##
95
+ # Delete the TypeInstanceMetadata
96
+ # @return [Boolean] True if delete succeeds, false otherwise
97
+ def delete_with_metadata
98
+
99
+ headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
100
+
101
+
102
+
103
+ response = @version.delete_with_metadata('DELETE', @uri, headers: headers)
104
+ type_instance = TypeInstance.new(
105
+ @version,
106
+ response.body,
107
+ account_sid: @solution[:account_sid],
108
+ sid: @solution[:sid],
109
+ )
110
+ TypeInstanceMetadata.new(@version, type_instance, response.headers, response.status_code)
111
+ end
112
+
113
+ ##
114
+ # Fetch the TypeInstance
115
+ # @return [TypeInstance] Fetched TypeInstance
116
+ def fetch
117
+
118
+ headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
119
+
120
+
121
+
122
+
123
+
124
+ payload = @version.fetch('GET', @uri, headers: headers)
125
+ TypeInstance.new(
126
+ @version,
127
+ payload,
128
+ type: @solution[:type],
129
+ id_or_unique_name: @solution[:id_or_unique_name],
130
+ )
131
+ end
132
+
133
+ ##
134
+ # Fetch the TypeInstanceMetadata
135
+ # @return [TypeInstance] Fetched TypeInstance
136
+ def fetch_with_metadata
137
+
138
+ headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
139
+
140
+
141
+
142
+
143
+
144
+ response = @version.fetch_with_metadata('GET', @uri, headers: headers)
145
+ type_instance = TypeInstance.new(
146
+ @version,
147
+ response.body,
148
+ type: @solution[:type],
149
+ id_or_unique_name: @solution[:id_or_unique_name],
150
+ )
151
+ TypeInstanceMetadata.new(
152
+ @version,
153
+ type_instance,
154
+ response.headers,
155
+ response.status_code
156
+ )
157
+ end
158
+
159
+ ##
160
+ # Update the TypeInstance
161
+ # @param [VoiceV2ConfigurationRequest] voice_v2_configuration_request
162
+ # @return [TypeInstance] Updated TypeInstance
163
+ def update(voice_v2_configuration_request: :unset
164
+ )
165
+
166
+ headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
167
+ headers['Content-Type'] = 'application/json'
168
+
169
+
170
+
171
+
172
+ payload = @version.update('PUT', @uri, headers: headers, data: voice_v2_configuration_request.to_json)
173
+ TypeInstance.new(
174
+ @version,
175
+ payload,
176
+ type: @solution[:type],
177
+ id_or_unique_name: @solution[:id_or_unique_name],
178
+ )
179
+ end
180
+
181
+ ##
182
+ # Update the TypeInstanceMetadata
183
+ # @param [VoiceV2ConfigurationRequest] voice_v2_configuration_request
184
+ # @return [TypeInstance] Updated TypeInstance
185
+ def update_with_metadata(voice_v2_configuration_request: :unset
186
+ )
187
+
188
+ headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
189
+ headers['Content-Type'] = 'application/json'
190
+
191
+
192
+
193
+
194
+ response = @version.update_with_metadata('PUT', @uri, headers: headers, data: voice_v2_configuration_request.to_json)
195
+ type_instance = TypeInstance.new(
196
+ @version,
197
+ response.body,
198
+ type: @solution[:type],
199
+ id_or_unique_name: @solution[:id_or_unique_name],
200
+ )
201
+ TypeInstanceMetadata.new(
202
+ @version,
203
+ type_instance,
204
+ response.headers,
205
+ response.status_code
206
+ )
207
+ end
208
+
209
+
210
+ ##
211
+ # Provide a user friendly representation
212
+ def to_s
213
+ context = @solution.map{|k, v| "#{k}: #{v}"}.join(',')
214
+ "#<Twilio.Voice.V2.TypeContext #{context}>"
215
+ end
216
+
217
+ ##
218
+ # Provide a detailed, user friendly representation
219
+ def inspect
220
+ context = @solution.map{|k, v| "#{k}: #{v}"}.join(',')
221
+ "#<Twilio.Voice.V2.TypeContext #{context}>"
222
+ end
223
+ end
224
+
225
+ class TypeInstanceMetadata < InstanceResourceMetadata
226
+ ##
227
+ # Initializes a new TypeInstanceMetadata.
228
+ # @param [Version] version Version that contains the resource
229
+ # @param [}TypeInstance] type_instance The instance associated with the metadata.
230
+ # @param [Hash] headers Header object with response headers.
231
+ # @param [Integer] status_code The HTTP status code of the response.
232
+ # @return [TypeInstanceMetadata] The initialized instance with metadata.
233
+ def initialize(version, type_instance, headers, status_code)
234
+ super(version, headers, status_code)
235
+ @type_instance = type_instance
236
+ end
237
+
238
+ def type
239
+ @type_instance
240
+ end
241
+
242
+ def headers
243
+ @headers
244
+ end
245
+
246
+ def status_code
247
+ @status_code
248
+ end
249
+
250
+ def to_s
251
+ "<Twilio.Api.V2010.TypeInstanceMetadata status=#{@status_code}>"
252
+ end
253
+ end
254
+
255
+ class TypeListResponse < InstanceListResource
256
+ # @param [Array<TypeInstance>] instance
257
+ # @param [Hash{String => Object}] headers
258
+ # @param [Integer] status_code
259
+ def initialize(version, payload, key)
260
+ @type_instance = payload.body[key].map do |data|
261
+ TypeInstance.new(version, data)
262
+ end
263
+ @headers = payload.headers
264
+ @status_code = payload.status_code
265
+ end
266
+
267
+ def type_instance
268
+ @instance
269
+ end
270
+ end
271
+
272
+ class TypePage < Page
273
+ ##
274
+ # Initialize the TypePage
275
+ # @param [Version] version Version that contains the resource
276
+ # @param [Response] response Response from the API
277
+ # @param [Hash] solution Path solution for the resource
278
+ # @return [TypePage] TypePage
279
+ def initialize(version, response, solution)
280
+ super(version, response)
281
+
282
+
283
+ # Path Solution
284
+ @solution = solution
285
+ end
286
+
287
+ ##
288
+ # Build an instance of TypeInstance
289
+ # @param [Hash] payload Payload response from the API
290
+ # @return [TypeInstance] TypeInstance
291
+ def get_instance(payload)
292
+ TypeInstance.new(@version, payload)
293
+ end
294
+
295
+ ##
296
+ # Provide a user friendly representation
297
+ def to_s
298
+ '<Twilio.Voice.V2.TypePage>'
299
+ end
300
+ end
301
+
302
+ class TypeInstance < InstanceResource
303
+ ##
304
+ # Initialize the TypeInstance
305
+ # @param [Version] version Version that contains the resource
306
+ # @param [Hash] payload payload that contains response from Twilio
307
+ # @param [String] account_sid The SID of the
308
+ # {Account}[https://www.twilio.com/docs/iam/api/account] that created this Type
309
+ # resource.
310
+ # @param [String] sid The SID of the Call resource to fetch.
311
+ # @return [TypeInstance] TypeInstance
312
+ def initialize(version, payload , type: nil, id_or_unique_name: nil)
313
+ super(version)
314
+
315
+
316
+ # Marshaled Properties
317
+ @properties = {
318
+ 'message' => payload['message'],
319
+ 'code' => payload['code'],
320
+ 'status' => payload['status'],
321
+ 'more_info' => payload['more_info'],
322
+ 'id' => payload['id'],
323
+ 'account_sid' => payload['account_sid'],
324
+ 'unique_name' => payload['unique_name'],
325
+ 'description' => payload['description'],
326
+ 'date_created' => Twilio.deserialize_iso8601_datetime(payload['date_created']),
327
+ 'date_updated' => Twilio.deserialize_iso8601_datetime(payload['date_updated']),
328
+ 'configuration' => payload['configuration'],
329
+ }
330
+
331
+ # Context
332
+ @instance_context = nil
333
+ @params = { 'type' => type || @properties['type'] ,'id_or_unique_name' => id_or_unique_name || @properties['id_or_unique_name'] , }
334
+ end
335
+
336
+ ##
337
+ # Generate an instance context for the instance, the context is capable of
338
+ # performing various actions. All instance actions are proxied to the context
339
+ # @return [TypeContext] CallContext for this CallInstance
340
+ def context
341
+ unless @instance_context
342
+ @instance_context = TypeContext.new(@version , @params['type'], @params['id_or_unique_name'])
343
+ end
344
+ @instance_context
345
+ end
346
+
347
+ ##
348
+ # @return [String] Error message
349
+ def message
350
+ @properties['message']
351
+ end
352
+
353
+ ##
354
+ # @return [String] Twilio error code
355
+ def code
356
+ @properties['code']
357
+ end
358
+
359
+ ##
360
+ # @return [String] status code
361
+ def status
362
+ @properties['status']
363
+ end
364
+
365
+ ##
366
+ # @return [String] More information about the error
367
+ def more_info
368
+ @properties['more_info']
369
+ end
370
+
371
+ ##
372
+ # @return [String] Configuration Identifier
373
+ def id
374
+ @properties['id']
375
+ end
376
+
377
+ ##
378
+ # @return [String] Account sid
379
+ def account_sid
380
+ @properties['account_sid']
381
+ end
382
+
383
+ ##
384
+ # @return [String] The unique name
385
+ def unique_name
386
+ @properties['unique_name']
387
+ end
388
+
389
+ ##
390
+ # @return [String] The description
391
+ def description
392
+ @properties['description']
393
+ end
394
+
395
+ ##
396
+ # @return [Time]
397
+ def date_created
398
+ @properties['date_created']
399
+ end
400
+
401
+ ##
402
+ # @return [Time]
403
+ def date_updated
404
+ @properties['date_updated']
405
+ end
406
+
407
+ ##
408
+ # @return [Hash]
409
+ def configuration
410
+ @properties['configuration']
411
+ end
412
+
413
+ ##
414
+ # Delete the TypeInstance
415
+ # @return [Boolean] True if delete succeeds, false otherwise
416
+ def delete
417
+
418
+ context.delete
419
+ end
420
+
421
+ ##
422
+ # Fetch the TypeInstance
423
+ # @return [TypeInstance] Fetched TypeInstance
424
+ def fetch
425
+
426
+ context.fetch
427
+ end
428
+
429
+ ##
430
+ # Update the TypeInstance
431
+ # @param [VoiceV2ConfigurationRequest] voice_v2_configuration_request
432
+ # @return [TypeInstance] Updated TypeInstance
433
+ def update(voice_v2_configuration_request: :unset
434
+ )
435
+
436
+ context.update(
437
+ voice_v2_configuration_request: voice_v2_configuration_request,
438
+ )
439
+ end
440
+
441
+ ##
442
+ # Provide a user friendly representation
443
+ def to_s
444
+ values = @params.map{|k, v| "#{k}: #{v}"}.join(" ")
445
+ "<Twilio.Voice.V2.TypeInstance #{values}>"
446
+ end
447
+
448
+ ##
449
+ # Provide a detailed, user friendly representation
450
+ def inspect
451
+ values = @properties.map{|k, v| "#{k}: #{v}"}.join(" ")
452
+ "<Twilio.Voice.V2.TypeInstance #{values}>"
453
+ end
454
+ end
455
+
456
+ end
457
+ end
458
+ end
459
+ end
@@ -0,0 +1,141 @@
1
+ ##
2
+ # This code was generated by
3
+ # ___ _ _ _ _ _ _ ____ ____ ____ _ ____ ____ _ _ ____ ____ ____ ___ __ __
4
+ # | | | | | | | | | __ | | |__| | __ | __ |___ |\ | |___ |__/ |__| | | | |__/
5
+ # | |_|_| | |___ | |__| |__| | | | |__] |___ | \| |___ | \ | | | |__| | \
6
+ #
7
+ # Twilio API definition for public-api voice
8
+ # Powers Twilio public-api voice
9
+ #
10
+ # NOTE: This class is auto generated by OpenAPI Generator.
11
+ # https://openapi-generator.tech
12
+ # Do not edit the class manually.
13
+ #
14
+
15
+ module Twilio
16
+ module REST
17
+ class Voice
18
+ class V2 < Version
19
+ ##
20
+ # Initialize the V2 version of Voice
21
+ def initialize(domain)
22
+ super
23
+ @version = 'v2'
24
+ @account_default_configuration = nil
25
+ @configurations = nil
26
+ @recording = nil
27
+ @transcription = nil
28
+ @type = nil
29
+ end
30
+
31
+ ##
32
+ # @param [String] type
33
+ # @return [Twilio::REST::Voice::V2::AccountDefaultConfigurationContext] if type was passed.
34
+ # @return [Twilio::REST::Voice::V2::AccountDefaultConfigurationList]
35
+ def account_default_configuration(type=:unset)
36
+ if type.nil?
37
+ raise ArgumentError, 'type cannot be nil'
38
+ end
39
+
40
+ if type == :unset
41
+ @account_default_configuration ||= AccountDefaultConfigurationList.new self
42
+ else
43
+ AccountDefaultConfigurationContext.new(self, type)
44
+ end
45
+ end
46
+ ##
47
+ # @param [String] type
48
+ # @return [Twilio::REST::Voice::V2::ConfigurationContext] if type was passed.
49
+ # @return [Twilio::REST::Voice::V2::ConfigurationList]
50
+ def configurations(type=:unset)
51
+ if type.nil?
52
+ raise ArgumentError, 'type cannot be nil'
53
+ end
54
+
55
+ if type == :unset
56
+ @configurations ||= ConfigurationList.new self
57
+ else
58
+ ConfigurationContext.new(self, type)
59
+ end
60
+ end
61
+ ##
62
+ # @param [String] id_or_unique_name Config id or unique name
63
+ # @return [Twilio::REST::Voice::V2::RecordingContext] if idOrUniqueName was passed.
64
+ # @return [Twilio::REST::Voice::V2::RecordingList]
65
+ def recording(id_or_unique_name=:unset)
66
+ if id_or_unique_name.nil?
67
+ raise ArgumentError, 'id_or_unique_name cannot be nil'
68
+ end
69
+
70
+ if id_or_unique_name == :unset
71
+ @recording ||= RecordingList.new self
72
+ else
73
+ RecordingContext.new(self, id_or_unique_name)
74
+ end
75
+ end
76
+ ##
77
+ # @param [String] id_or_unique_name Config id or unique name
78
+ # @return [Twilio::REST::Voice::V2::TranscriptionContext] if idOrUniqueName was passed.
79
+ # @return [Twilio::REST::Voice::V2::TranscriptionList]
80
+ def transcription(id_or_unique_name=:unset)
81
+ if id_or_unique_name.nil?
82
+ raise ArgumentError, 'id_or_unique_name cannot be nil'
83
+ end
84
+
85
+ if id_or_unique_name == :unset
86
+ @transcription ||= TranscriptionList.new self
87
+ else
88
+ TranscriptionContext.new(self, id_or_unique_name)
89
+ end
90
+ end
91
+ ##
92
+ # @param [String] type
93
+ # @param [String] id_or_unique_name Config id or unique name
94
+ # @return [Twilio::REST::Voice::V2::TypeContext] if type was passed.
95
+ # @return [Twilio::REST::Voice::V2::TypeList]
96
+ def type(type=:unset, id_or_unique_name=:unset)
97
+ if type.nil?
98
+ raise ArgumentError, 'type cannot be nil'
99
+ end
100
+ if id_or_unique_name.nil?
101
+ raise ArgumentError, 'id_or_unique_name cannot be nil'
102
+ end
103
+
104
+ if type == :unset && id_or_unique_name == :unset
105
+ @type ||= TypeList.new self
106
+ elsif type != :unset && id_or_unique_name == :unset
107
+ TypeList.new(self, type: type)
108
+ else
109
+ TypeContext.new(self, type, id_or_unique_name)
110
+ end
111
+ end
112
+ ##
113
+ # @param [String] type
114
+ # @param [String] id_or_unique_name Config id or unique name
115
+ # @return [Twilio::REST::Voice::V2::TypeContext] if idOrUniqueName was passed.
116
+ # @return [Twilio::REST::Voice::V2::TypeList]
117
+ def type(type=:unset, id_or_unique_name=:unset)
118
+ if type.nil?
119
+ raise ArgumentError, 'type cannot be nil'
120
+ end
121
+ if id_or_unique_name.nil?
122
+ raise ArgumentError, 'id_or_unique_name cannot be nil'
123
+ end
124
+
125
+ if type == :unset && id_or_unique_name == :unset
126
+ @type ||= TypeList.new self
127
+ elsif type != :unset && id_or_unique_name == :unset
128
+ TypeList.new(self, type: type)
129
+ else
130
+ TypeContext.new(self, type, id_or_unique_name)
131
+ end
132
+ end
133
+ ##
134
+ # Provide a user friendly representation
135
+ def to_s
136
+ '<Twilio::REST::Voice::V2>';
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end