twilio-ruby 5.0.0.alpha1 → 5.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -2
- data/AUTHORS.md +32 -46
- data/CHANGES.md +1 -124
- data/Gemfile +2 -2
- data/LICENSE.md +12 -12
- data/Makefile +2 -15
- data/README.md +37 -29
- data/Rakefile +0 -54
- data/examples/examples.rb +57 -46
- data/examples/{print_call_log.rb → print-call-log.rb} +7 -7
- data/lib/rack/twilio_webhook_authentication.rb +6 -5
- data/lib/twilio-ruby.rb +16 -17
- data/lib/twilio-ruby/compatibility/v2010/account/call/feedback.rb +15 -0
- data/lib/twilio-ruby/compatibility/v2010/account/queue/member.rb +23 -0
- data/lib/twilio-ruby/framework/domain.rb +2 -2
- data/lib/twilio-ruby/framework/exception.rb +14 -0
- data/lib/twilio-ruby/framework/helper.rb +1 -1
- data/lib/twilio-ruby/framework/page.rb +30 -28
- data/lib/twilio-ruby/framework/resource.rb +2 -2
- data/lib/twilio-ruby/framework/serialize.rb +7 -58
- data/lib/twilio-ruby/framework/twilio_response.rb +1 -1
- data/lib/twilio-ruby/framework/version.rb +48 -43
- data/lib/twilio-ruby/http/http_client.rb +8 -8
- data/lib/twilio-ruby/rest/api.rb +33 -141
- data/lib/twilio-ruby/rest/api/v2010.rb +31 -50
- data/lib/twilio-ruby/rest/api/v2010/account.rb +239 -389
- data/lib/twilio-ruby/rest/api/v2010/account/address.rb +122 -145
- data/lib/twilio-ruby/rest/api/v2010/account/address/dependent_phone_number.rb +56 -76
- data/lib/twilio-ruby/rest/api/v2010/account/application.rb +127 -144
- data/lib/twilio-ruby/rest/api/v2010/account/authorized_connect_app.rb +83 -85
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number.rb +97 -92
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/local.rb +77 -142
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/mobile.rb +77 -142
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/toll_free.rb +77 -142
- data/lib/twilio-ruby/rest/api/v2010/account/call.rb +184 -232
- data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +84 -73
- data/lib/twilio-ruby/rest/api/v2010/account/call/feedback_summary.rb +80 -85
- data/lib/twilio-ruby/rest/api/v2010/account/call/notification.rb +115 -126
- data/lib/twilio-ruby/rest/api/v2010/account/call/recording.rb +99 -114
- data/lib/twilio-ruby/rest/api/v2010/account/conference.rb +112 -150
- data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +109 -228
- data/lib/twilio-ruby/rest/api/v2010/account/connect_app.rb +98 -101
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +164 -287
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +90 -152
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +90 -152
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +90 -152
- data/lib/twilio-ruby/rest/api/v2010/account/message.rb +138 -195
- data/lib/twilio-ruby/rest/api/v2010/account/message/media.rb +100 -90
- data/lib/twilio-ruby/rest/api/v2010/account/notification.rb +106 -118
- data/lib/twilio-ruby/rest/api/v2010/account/outgoing_caller_id.rb +105 -96
- data/lib/twilio-ruby/rest/api/v2010/account/queue.rb +117 -119
- data/lib/twilio-ruby/rest/api/v2010/account/queue/member.rb +95 -84
- data/lib/twilio-ruby/rest/api/v2010/account/recording.rb +103 -194
- data/lib/twilio-ruby/rest/api/v2010/account/recording/transcription.rb +93 -100
- data/lib/twilio-ruby/rest/api/v2010/account/sandbox.rb +304 -0
- data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +30 -42
- data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list.rb +113 -111
- data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list/credential.rb +115 -104
- data/lib/twilio-ruby/rest/api/v2010/account/sip/domain.rb +133 -159
- data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/credential_list_mapping.rb +96 -94
- data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/ip_access_control_list_mapping.rb +96 -94
- data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list.rb +114 -111
- data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list/ip_address.rb +113 -108
- data/lib/twilio-ruby/rest/api/v2010/account/sms.rb +140 -0
- data/lib/twilio-ruby/rest/api/v2010/account/sms/short_code.rb +431 -0
- data/lib/twilio-ruby/rest/api/v2010/account/sms/sms_message.rb +467 -0
- data/lib/twilio-ruby/rest/api/v2010/account/token.rb +34 -41
- data/lib/twilio-ruby/rest/api/v2010/account/transcription.rb +90 -98
- data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +24 -21
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record.rb +118 -139
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/all_time.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/daily.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/last_month.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/monthly.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/this_month.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/today.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yearly.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yesterday.rb +62 -106
- data/lib/twilio-ruby/rest/api/v2010/account/usage/trigger.rb +124 -130
- data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +31 -35
- data/lib/twilio-ruby/rest/client.rb +88 -249
- data/lib/twilio-ruby/rest/{accounts.rb → conversations.rb} +14 -16
- data/lib/twilio-ruby/rest/conversations/v1.rb +35 -0
- data/lib/twilio-ruby/rest/conversations/v1/conversation.rb +270 -0
- data/lib/twilio-ruby/rest/{notify/v1/service/segment.rb → conversations/v1/conversation/completed.rb} +101 -101
- data/lib/twilio-ruby/rest/{preview/bulk_exports/export/day.rb → conversations/v1/conversation/in_progress.rb} +109 -95
- data/lib/twilio-ruby/rest/{messaging/v1/service/phone_number.rb → conversations/v1/conversation/participant.rb} +171 -178
- data/lib/twilio-ruby/rest/ip_messaging.rb +11 -26
- data/lib/twilio-ruby/rest/ip_messaging/v1.rb +7 -19
- data/lib/twilio-ruby/rest/ip_messaging/v1/credential.rb +112 -113
- data/lib/twilio-ruby/rest/ip_messaging/v1/service.rb +131 -542
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel.rb +132 -194
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/member.rb +103 -159
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/message.rb +102 -183
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/role.rb +112 -107
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/user.rb +113 -186
- data/lib/twilio-ruby/rest/lookups.rb +8 -12
- data/lib/twilio-ruby/rest/lookups/v1.rb +7 -13
- data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +54 -71
- data/lib/twilio-ruby/rest/monitor.rb +11 -19
- data/lib/twilio-ruby/rest/monitor/v1.rb +7 -19
- data/lib/twilio-ruby/rest/monitor/v1/alert.rb +133 -121
- data/lib/twilio-ruby/rest/monitor/v1/event.rb +127 -116
- data/lib/twilio-ruby/rest/pricing.rb +11 -17
- data/lib/twilio-ruby/rest/pricing/v1.rb +9 -21
- data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +23 -27
- data/lib/twilio-ruby/rest/pricing/v1/messaging/country.rb +74 -71
- data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +23 -27
- data/lib/twilio-ruby/rest/pricing/v1/phone_number/country.rb +79 -69
- data/lib/twilio-ruby/rest/pricing/v1/voice.rb +27 -33
- data/lib/twilio-ruby/rest/pricing/v1/voice/country.rb +74 -71
- data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +52 -47
- data/lib/twilio-ruby/rest/taskrouter.rb +8 -12
- data/lib/twilio-ruby/rest/taskrouter/v1.rb +5 -11
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +153 -260
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/activity.rb +114 -115
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/event.rb +101 -105
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +139 -216
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task/reservation.rb +106 -194
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue.rb +145 -187
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +65 -57
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queues_statistics.rb +57 -62
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker.rb +135 -217
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +60 -54
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +56 -52
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow.rb +123 -140
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +61 -57
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +72 -52
- data/lib/twilio-ruby/rest/trunking.rb +8 -12
- data/lib/twilio-ruby/rest/trunking/v1.rb +5 -11
- data/lib/twilio-ruby/rest/trunking/v1/trunk.rb +134 -157
- data/lib/twilio-ruby/rest/trunking/v1/trunk/credential_list.rb +93 -89
- data/lib/twilio-ruby/rest/trunking/v1/trunk/ip_access_control_list.rb +93 -89
- data/lib/twilio-ruby/rest/trunking/v1/trunk/origination_url.rb +111 -114
- data/lib/twilio-ruby/rest/trunking/v1/trunk/phone_number.rb +112 -146
- data/lib/twilio-ruby/task_router.rb +0 -0
- data/lib/twilio-ruby/task_router/capability.rb +87 -0
- data/lib/twilio-ruby/twiml/response.rb +16 -0
- data/lib/twilio-ruby/util.rb +1 -1
- data/lib/twilio-ruby/util/access_token.rb +70 -0
- data/lib/twilio-ruby/util/capability.rb +64 -0
- data/lib/twilio-ruby/util/client_config.rb +29 -0
- data/lib/twilio-ruby/{security → util}/request_validator.rb +4 -21
- data/lib/twilio-ruby/version.rb +1 -1
- data/spec/holodeck/holodeck.rb +6 -6
- data/spec/holodeck/hologram.rb +1 -0
- data/spec/integration/api/v2010/account/address/dependent_phone_number_spec.rb +8 -8
- data/spec/integration/api/v2010/account/address_spec.rb +29 -37
- data/spec/integration/api/v2010/account/application_spec.rb +29 -29
- data/spec/integration/api/v2010/account/authorized_connect_app_spec.rb +13 -13
- data/spec/integration/api/v2010/account/available_phone_number/local_spec.rb +8 -9
- data/spec/integration/api/v2010/account/available_phone_number/mobile_spec.rb +8 -9
- data/spec/integration/api/v2010/account/available_phone_number/toll_free_spec.rb +8 -9
- data/spec/integration/api/v2010/account/available_phone_number_spec.rb +13 -13
- data/spec/integration/api/v2010/account/call/feedback_spec.rb +17 -17
- data/spec/integration/api/v2010/account/call/feedback_summary_spec.rb +19 -19
- data/spec/integration/api/v2010/account/call/notification_spec.rb +18 -18
- data/spec/integration/api/v2010/account/call/recording_spec.rb +20 -32
- data/spec/integration/api/v2010/account/call_spec.rb +29 -29
- data/spec/integration/api/v2010/account/conference/participant_spec.rb +35 -107
- data/spec/integration/api/v2010/account/conference_spec.rb +19 -58
- data/spec/integration/api/v2010/account/connect_app_spec.rb +18 -18
- data/spec/integration/api/v2010/account/incoming_phone_number/local_spec.rb +14 -16
- data/spec/integration/api/v2010/account/incoming_phone_number/mobile_spec.rb +14 -16
- data/spec/integration/api/v2010/account/incoming_phone_number/toll_free_spec.rb +14 -16
- data/spec/integration/api/v2010/account/incoming_phone_number_spec.rb +29 -41
- data/spec/integration/api/v2010/account/message/media_spec.rb +18 -18
- data/spec/integration/api/v2010/account/message_spec.rb +35 -41
- data/spec/integration/api/v2010/account/notification_spec.rb +18 -18
- data/spec/integration/api/v2010/account/outgoing_caller_id_spec.rb +23 -23
- data/spec/integration/api/v2010/account/queue/member_spec.rb +18 -18
- data/spec/integration/api/v2010/account/queue_spec.rb +32 -35
- data/spec/integration/api/v2010/account/recording/transcription_spec.rb +18 -18
- data/spec/integration/api/v2010/account/recording_spec.rb +21 -42
- data/spec/integration/api/v2010/account/sandbox_spec.rb +99 -0
- data/spec/integration/api/v2010/account/sip/credential_list/credential_spec.rb +36 -32
- data/spec/integration/api/v2010/account/sip/credential_list_spec.rb +29 -29
- data/spec/integration/api/v2010/account/sip/domain/credential_list_mapping_spec.rb +24 -24
- data/spec/integration/api/v2010/account/sip/domain/ip_access_control_list_mapping_spec.rb +24 -24
- data/spec/integration/api/v2010/account/sip/domain_spec.rb +29 -29
- data/spec/integration/api/v2010/account/sip/ip_access_control_list/ip_address_spec.rb +36 -32
- data/spec/integration/api/v2010/account/sip/ip_access_control_list_spec.rb +29 -29
- data/spec/integration/api/v2010/account/sip_spec.rb +1 -1
- data/spec/integration/api/v2010/account/{short_code_spec.rb → sms/short_code_spec.rb} +25 -18
- data/spec/integration/api/v2010/account/sms/sms_message_spec.rb +275 -0
- data/spec/integration/{accounts/v1/credential_spec.rb → api/v2010/account/sms_spec.rb} +2 -2
- data/spec/integration/api/v2010/account/token_spec.rb +7 -7
- data/spec/integration/api/v2010/account/transcription_spec.rb +18 -18
- data/spec/integration/api/v2010/account/usage/record/all_time_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record/daily_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record/last_month_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record/monthly_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record/this_month_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record/today_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record/yearly_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record/yesterday_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/record_spec.rb +8 -8
- data/spec/integration/api/v2010/account/usage/trigger_spec.rb +32 -32
- data/spec/integration/api/v2010/account/usage_spec.rb +1 -1
- data/spec/integration/api/v2010/account/validation_request_spec.rb +4 -24
- data/spec/integration/api/v2010/account_spec.rb +28 -24
- data/spec/integration/conversations/v1/conversation/completed_spec.rb +89 -0
- data/spec/integration/conversations/v1/conversation/in_progress_spec.rb +89 -0
- data/spec/integration/conversations/v1/conversation/participant_spec.rb +174 -0
- data/spec/integration/conversations/v1/conversation_spec.rb +49 -0
- data/spec/integration/ip_messaging/v1/credential_spec.rb +24 -155
- data/spec/integration/ip_messaging/v1/service/channel/member_spec.rb +13 -217
- data/spec/integration/ip_messaging/v1/service/channel/message_spec.rb +10 -241
- data/spec/integration/ip_messaging/v1/service/channel_spec.rb +23 -205
- data/spec/integration/ip_messaging/v1/service/role_spec.rb +19 -184
- data/spec/integration/ip_messaging/v1/service/user_spec.rb +24 -194
- data/spec/integration/ip_messaging/v1/service_spec.rb +17 -229
- data/spec/integration/lookups/v1/phone_number_spec.rb +6 -17
- data/spec/integration/monitor/v1/alert_spec.rb +60 -60
- data/spec/integration/monitor/v1/event_spec.rb +13 -13
- data/spec/integration/pricing/v1/messaging/country_spec.rb +7 -103
- data/spec/integration/pricing/v1/messaging_spec.rb +1 -1
- data/spec/integration/pricing/v1/phone_number/country_spec.rb +13 -13
- data/spec/integration/pricing/v1/phone_number_spec.rb +1 -1
- data/spec/integration/pricing/v1/voice/country_spec.rb +13 -13
- data/spec/integration/pricing/v1/voice/number_spec.rb +6 -6
- data/spec/integration/pricing/v1/voice_spec.rb +1 -1
- data/spec/integration/taskrouter/v1/workspace/activity_spec.rb +38 -34
- data/spec/integration/taskrouter/v1/workspace/event_spec.rb +13 -13
- data/spec/integration/taskrouter/v1/workspace/task/reservation_spec.rb +24 -21
- data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_statistics_spec.rb +11 -13
- data/spec/integration/taskrouter/v1/workspace/task_queue/task_queues_statistics_spec.rb +17 -18
- data/spec/integration/taskrouter/v1/workspace/task_queue_spec.rb +41 -57
- data/spec/integration/taskrouter/v1/workspace/task_spec.rb +50 -113
- data/spec/integration/taskrouter/v1/workspace/worker/worker_statistics_spec.rb +6 -7
- data/spec/integration/taskrouter/v1/workspace/worker/workers_statistics_spec.rb +6 -7
- data/spec/integration/taskrouter/v1/workspace/worker_spec.rb +68 -96
- data/spec/integration/taskrouter/v1/workspace/workflow/workflow_statistics_spec.rb +12 -14
- data/spec/integration/taskrouter/v1/workspace/workflow_spec.rb +43 -54
- data/spec/integration/taskrouter/v1/workspace/workspace_statistics_spec.rb +9 -11
- data/spec/integration/taskrouter/v1/workspace_spec.rb +51 -71
- data/spec/integration/trunking/v1/trunk/credential_list_spec.rb +24 -24
- data/spec/integration/trunking/v1/trunk/ip_access_control_list_spec.rb +66 -66
- data/spec/integration/trunking/v1/trunk/origination_url_spec.rb +28 -28
- data/spec/integration/trunking/v1/trunk/phone_number_spec.rb +23 -23
- data/spec/integration/trunking/v1/trunk_spec.rb +28 -28
- data/spec/rack/twilio_webhook_authentication_spec.rb +23 -19
- data/spec/spec_helper.rb +2 -2
- data/spec/support/fakeweb.rb +1 -1
- data/spec/task_router_spec.rb +114 -0
- data/spec/util/access_token_spec.rb +103 -0
- data/spec/util/capability_spec.rb +186 -0
- data/spec/util/client_config_spec.rb +21 -0
- data/spec/{security → util}/request_validator_spec.rb +5 -5
- data/twilio-ruby.gemspec +8 -12
- metadata +90 -416
- data/.rubocop.yml +0 -21
- data/.rubocop_todo.yml +0 -187
- data/VERSIONS.md +0 -64
- data/lib/twilio-ruby/framework/error.rb +0 -30
- data/lib/twilio-ruby/framework/values.rb +0 -7
- data/lib/twilio-ruby/jwt/access_token.rb +0 -232
- data/lib/twilio-ruby/jwt/client_capability.rb +0 -102
- data/lib/twilio-ruby/jwt/jwt.rb +0 -50
- data/lib/twilio-ruby/jwt/task_router.rb +0 -174
- data/lib/twilio-ruby/rest/accounts/v1.rb +0 -39
- data/lib/twilio-ruby/rest/accounts/v1/credential.rb +0 -105
- data/lib/twilio-ruby/rest/accounts/v1/credential/public_key.rb +0 -370
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on.rb +0 -431
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension.rb +0 -350
- data/lib/twilio-ruby/rest/api/v2010/account/key.rb +0 -336
- data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +0 -165
- data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +0 -153
- data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +0 -153
- data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result.rb +0 -397
- data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload.rb +0 -378
- data/lib/twilio-ruby/rest/api/v2010/account/short_code.rb +0 -430
- data/lib/twilio-ruby/rest/api/v2010/account/signing_key.rb +0 -336
- data/lib/twilio-ruby/rest/chat.rb +0 -59
- data/lib/twilio-ruby/rest/chat/v1.rb +0 -56
- data/lib/twilio-ruby/rest/chat/v1/credential.rb +0 -403
- data/lib/twilio-ruby/rest/chat/v1/service.rb +0 -935
- data/lib/twilio-ruby/rest/chat/v1/service/channel.rb +0 -554
- data/lib/twilio-ruby/rest/chat/v1/service/channel/invite.rb +0 -386
- data/lib/twilio-ruby/rest/chat/v1/service/channel/member.rb +0 -431
- data/lib/twilio-ruby/rest/chat/v1/service/channel/message.rb +0 -447
- data/lib/twilio-ruby/rest/chat/v1/service/role.rb +0 -396
- data/lib/twilio-ruby/rest/chat/v1/service/user.rb +0 -467
- data/lib/twilio-ruby/rest/chat/v1/service/user/user_channel.rb +0 -244
- data/lib/twilio-ruby/rest/chat/v2.rb +0 -56
- data/lib/twilio-ruby/rest/chat/v2/credential.rb +0 -403
- data/lib/twilio-ruby/rest/chat/v2/service.rb +0 -688
- data/lib/twilio-ruby/rest/chat/v2/service/channel.rb +0 -554
- data/lib/twilio-ruby/rest/chat/v2/service/channel/invite.rb +0 -386
- data/lib/twilio-ruby/rest/chat/v2/service/channel/member.rb +0 -431
- data/lib/twilio-ruby/rest/chat/v2/service/channel/message.rb +0 -447
- data/lib/twilio-ruby/rest/chat/v2/service/role.rb +0 -396
- data/lib/twilio-ruby/rest/chat/v2/service/user.rb +0 -467
- data/lib/twilio-ruby/rest/chat/v2/service/user/user_channel.rb +0 -244
- data/lib/twilio-ruby/rest/fax.rb +0 -44
- data/lib/twilio-ruby/rest/fax/v1.rb +0 -41
- data/lib/twilio-ruby/rest/fax/v1/fax.rb +0 -541
- data/lib/twilio-ruby/rest/fax/v1/fax/fax_media.rb +0 -326
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/invite.rb +0 -386
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/user/user_channel.rb +0 -244
- data/lib/twilio-ruby/rest/ip_messaging/v2.rb +0 -56
- data/lib/twilio-ruby/rest/ip_messaging/v2/credential.rb +0 -403
- data/lib/twilio-ruby/rest/ip_messaging/v2/service.rb +0 -688
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel.rb +0 -554
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/invite.rb +0 -386
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/member.rb +0 -431
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/message.rb +0 -447
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/role.rb +0 -396
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/user.rb +0 -467
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/user/user_channel.rb +0 -244
- data/lib/twilio-ruby/rest/messaging.rb +0 -44
- data/lib/twilio-ruby/rest/messaging/v1.rb +0 -41
- data/lib/twilio-ruby/rest/messaging/v1/service.rb +0 -637
- data/lib/twilio-ruby/rest/messaging/v1/service/alpha_sender.rb +0 -352
- data/lib/twilio-ruby/rest/messaging/v1/service/short_code.rb +0 -359
- data/lib/twilio-ruby/rest/notify.rb +0 -52
- data/lib/twilio-ruby/rest/notify/v1.rb +0 -56
- data/lib/twilio-ruby/rest/notify/v1/credential.rb +0 -403
- data/lib/twilio-ruby/rest/notify/v1/service.rb +0 -639
- data/lib/twilio-ruby/rest/notify/v1/service/binding.rb +0 -430
- data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +0 -288
- data/lib/twilio-ruby/rest/notify/v1/service/user.rb +0 -445
- data/lib/twilio-ruby/rest/notify/v1/service/user/segment_memberships.rb +0 -254
- data/lib/twilio-ruby/rest/notify/v1/service/user/user_binding.rb +0 -434
- data/lib/twilio-ruby/rest/preview.rb +0 -145
- data/lib/twilio-ruby/rest/preview/bulk_exports.rb +0 -56
- data/lib/twilio-ruby/rest/preview/bulk_exports/export.rb +0 -203
- data/lib/twilio-ruby/rest/preview/bulk_exports/export_configuration.rb +0 -243
- data/lib/twilio-ruby/rest/preview/hosted_numbers.rb +0 -42
- data/lib/twilio-ruby/rest/preview/hosted_numbers/hosted_number_order.rb +0 -557
- data/lib/twilio-ruby/rest/preview/marketplace.rb +0 -58
- data/lib/twilio-ruby/rest/preview/marketplace/available_add_on.rb +0 -333
- data/lib/twilio-ruby/rest/preview/marketplace/available_add_on/available_add_on_extension.rb +0 -301
- data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on.rb +0 -440
- data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on/installed_add_on_extension.rb +0 -341
- data/lib/twilio-ruby/rest/preview/proxy.rb +0 -41
- data/lib/twilio-ruby/rest/preview/proxy/service.rb +0 -500
- data/lib/twilio-ruby/rest/preview/proxy/service/phone_number.rb +0 -359
- data/lib/twilio-ruby/rest/preview/proxy/service/session.rb +0 -536
- data/lib/twilio-ruby/rest/preview/proxy/service/session/interaction.rb +0 -429
- data/lib/twilio-ruby/rest/preview/proxy/service/session/participant.rb +0 -506
- data/lib/twilio-ruby/rest/preview/proxy/service/session/participant/message_interaction.rb +0 -452
- data/lib/twilio-ruby/rest/preview/proxy/service/short_code.rb +0 -359
- data/lib/twilio-ruby/rest/preview/sync.rb +0 -41
- data/lib/twilio-ruby/rest/preview/sync/service.rb +0 -504
- data/lib/twilio-ruby/rest/preview/sync/service/document.rb +0 -445
- data/lib/twilio-ruby/rest/preview/sync/service/document/document_permission.rb +0 -395
- data/lib/twilio-ruby/rest/preview/sync/service/sync_list.rb +0 -438
- data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_item.rb +0 -430
- data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_permission.rb +0 -395
- data/lib/twilio-ruby/rest/preview/sync/service/sync_map.rb +0 -438
- data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_item.rb +0 -432
- data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_permission.rb +0 -395
- data/lib/twilio-ruby/rest/preview/wireless.rb +0 -71
- data/lib/twilio-ruby/rest/preview/wireless/command.rb +0 -382
- data/lib/twilio-ruby/rest/preview/wireless/rate_plan.rb +0 -435
- data/lib/twilio-ruby/rest/preview/wireless/sim.rb +0 -544
- data/lib/twilio-ruby/rest/preview/wireless/sim/usage.rb +0 -236
- data/lib/twilio-ruby/rest/sync.rb +0 -44
- data/lib/twilio-ruby/rest/sync/v1.rb +0 -41
- data/lib/twilio-ruby/rest/sync/v1/service.rb +0 -504
- data/lib/twilio-ruby/rest/sync/v1/service/document.rb +0 -445
- data/lib/twilio-ruby/rest/sync/v1/service/document/document_permission.rb +0 -395
- data/lib/twilio-ruby/rest/sync/v1/service/sync_list.rb +0 -438
- data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_item.rb +0 -430
- data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_permission.rb +0 -395
- data/lib/twilio-ruby/rest/sync/v1/service/sync_map.rb +0 -438
- data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_item.rb +0 -432
- data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_permission.rb +0 -395
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_channel.rb +0 -315
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/reservation.rb +0 -461
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_channel.rb +0 -406
- data/lib/twilio-ruby/rest/video.rb +0 -52
- data/lib/twilio-ruby/rest/video/v1.rb +0 -56
- data/lib/twilio-ruby/rest/video/v1/recording.rb +0 -382
- data/lib/twilio-ruby/rest/video/v1/room.rb +0 -485
- data/lib/twilio-ruby/rest/video/v1/room/recording.rb +0 -381
- data/lib/twilio-ruby/rest/wireless.rb +0 -60
- data/lib/twilio-ruby/rest/wireless/v1.rb +0 -71
- data/lib/twilio-ruby/rest/wireless/v1/command.rb +0 -367
- data/lib/twilio-ruby/rest/wireless/v1/rate_plan.rb +0 -452
- data/lib/twilio-ruby/rest/wireless/v1/sim.rb +0 -548
- data/lib/twilio-ruby/rest/wireless/v1/sim/usage_record.rb +0 -235
- data/lib/twilio-ruby/twiml/messaging_response.rb +0 -141
- data/lib/twilio-ruby/twiml/twiml.rb +0 -69
- data/lib/twilio-ruby/twiml/voice_response.rb +0 -916
- data/spec/framework/serialize_spec.rb +0 -59
- data/spec/integration/accounts/v1/credential/public_key_spec.rb +0 -226
- data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension_spec.rb +0 -135
- data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on_spec.rb +0 -223
- data/spec/integration/api/v2010/account/key_spec.rb +0 -178
- data/spec/integration/api/v2010/account/message/feedback_spec.rb +0 -48
- data/spec/integration/api/v2010/account/new_key_spec.rb +0 -45
- data/spec/integration/api/v2010/account/new_signing_key_spec.rb +0 -45
- data/spec/integration/api/v2010/account/recording/add_on_result/payload_spec.rb +0 -175
- data/spec/integration/api/v2010/account/recording/add_on_result_spec.rb +0 -166
- data/spec/integration/api/v2010/account/signing_key_spec.rb +0 -178
- data/spec/integration/chat/v1/credential_spec.rb +0 -223
- data/spec/integration/chat/v1/service/channel/invite_spec.rb +0 -210
- data/spec/integration/chat/v1/service/channel/member_spec.rb +0 -284
- data/spec/integration/chat/v1/service/channel/message_spec.rb +0 -294
- data/spec/integration/chat/v1/service/channel_spec.rb +0 -275
- data/spec/integration/chat/v1/service/role_spec.rb +0 -263
- data/spec/integration/chat/v1/service/user/user_channel_spec.rb +0 -92
- data/spec/integration/chat/v1/service/user_spec.rb +0 -266
- data/spec/integration/chat/v1/service_spec.rb +0 -299
- data/spec/integration/chat/v2/credential_spec.rb +0 -223
- data/spec/integration/chat/v2/service/channel/invite_spec.rb +0 -210
- data/spec/integration/chat/v2/service/channel/member_spec.rb +0 -284
- data/spec/integration/chat/v2/service/channel/message_spec.rb +0 -294
- data/spec/integration/chat/v2/service/channel_spec.rb +0 -275
- data/spec/integration/chat/v2/service/role_spec.rb +0 -263
- data/spec/integration/chat/v2/service/user/user_channel_spec.rb +0 -92
- data/spec/integration/chat/v2/service/user_spec.rb +0 -266
- data/spec/integration/chat/v2/service_spec.rb +0 -325
- data/spec/integration/fax/v1/fax/fax_media_spec.rb +0 -126
- data/spec/integration/fax/v1/fax_spec.rb +0 -272
- data/spec/integration/ip_messaging/v1/service/channel/invite_spec.rb +0 -210
- data/spec/integration/ip_messaging/v1/service/user/user_channel_spec.rb +0 -92
- data/spec/integration/ip_messaging/v2/credential_spec.rb +0 -223
- data/spec/integration/ip_messaging/v2/service/channel/invite_spec.rb +0 -210
- data/spec/integration/ip_messaging/v2/service/channel/member_spec.rb +0 -284
- data/spec/integration/ip_messaging/v2/service/channel/message_spec.rb +0 -294
- data/spec/integration/ip_messaging/v2/service/channel_spec.rb +0 -275
- data/spec/integration/ip_messaging/v2/service/role_spec.rb +0 -263
- data/spec/integration/ip_messaging/v2/service/user/user_channel_spec.rb +0 -92
- data/spec/integration/ip_messaging/v2/service/user_spec.rb +0 -266
- data/spec/integration/ip_messaging/v2/service_spec.rb +0 -325
- data/spec/integration/messaging/v1/service/alpha_sender_spec.rb +0 -170
- data/spec/integration/messaging/v1/service/phone_number_spec.rb +0 -201
- data/spec/integration/messaging/v1/service/short_code_spec.rb +0 -173
- data/spec/integration/messaging/v1/service_spec.rb +0 -263
- data/spec/integration/notify/v1/credential_spec.rb +0 -223
- data/spec/integration/notify/v1/service/binding_spec.rb +0 -227
- data/spec/integration/notify/v1/service/notification_spec.rb +0 -97
- data/spec/integration/notify/v1/service/segment_spec.rb +0 -84
- data/spec/integration/notify/v1/service/user/segment_memberships_spec.rb +0 -118
- data/spec/integration/notify/v1/service/user/user_binding_spec.rb +0 -269
- data/spec/integration/notify/v1/service/user_spec.rb +0 -213
- data/spec/integration/notify/v1/service_spec.rb +0 -280
- data/spec/integration/preview/bulk_exports/export/day_spec.rb +0 -56
- data/spec/integration/preview/bulk_exports/export_configuration_spec.rb +0 -79
- data/spec/integration/preview/bulk_exports/export_spec.rb +0 -43
- data/spec/integration/preview/hosted_numbers/hosted_number_order_spec.rb +0 -280
- data/spec/integration/preview/marketplace/available_add_on/available_add_on_extension_spec.rb +0 -121
- data/spec/integration/preview/marketplace/available_add_on_spec.rb +0 -142
- data/spec/integration/preview/marketplace/installed_add_on/installed_add_on_extension_spec.rb +0 -164
- data/spec/integration/preview/marketplace/installed_add_on_spec.rb +0 -252
- data/spec/integration/preview/proxy/service/phone_number_spec.rb +0 -173
- data/spec/integration/preview/proxy/service/session/interaction_spec.rb +0 -104
- data/spec/integration/preview/proxy/service/session/participant/message_interaction_spec.rb +0 -164
- data/spec/integration/preview/proxy/service/session/participant_spec.rb +0 -226
- data/spec/integration/preview/proxy/service/session_spec.rb +0 -216
- data/spec/integration/preview/proxy/service/short_code_spec.rb +0 -173
- data/spec/integration/preview/proxy/service_spec.rb +0 -200
- data/spec/integration/preview/sync/service/document/document_permission_spec.rb +0 -206
- data/spec/integration/preview/sync/service/document_spec.rb +0 -254
- data/spec/integration/preview/sync/service/sync_list/sync_list_item_spec.rb +0 -256
- data/spec/integration/preview/sync/service/sync_list/sync_list_permission_spec.rb +0 -206
- data/spec/integration/preview/sync/service/sync_list_spec.rb +0 -207
- data/spec/integration/preview/sync/service/sync_map/sync_map_item_spec.rb +0 -257
- data/spec/integration/preview/sync/service/sync_map/sync_map_permission_spec.rb +0 -206
- data/spec/integration/preview/sync/service/sync_map_spec.rb +0 -207
- data/spec/integration/preview/sync/service_spec.rb +0 -244
- data/spec/integration/preview/wireless/command_spec.rb +0 -169
- data/spec/integration/preview/wireless/rate_plan_spec.rb +0 -260
- data/spec/integration/preview/wireless/sim/usage_spec.rb +0 -49
- data/spec/integration/preview/wireless/sim_spec.rb +0 -208
- data/spec/integration/sync/v1/service/document/document_permission_spec.rb +0 -206
- data/spec/integration/sync/v1/service/document_spec.rb +0 -254
- data/spec/integration/sync/v1/service/sync_list/sync_list_item_spec.rb +0 -256
- data/spec/integration/sync/v1/service/sync_list/sync_list_permission_spec.rb +0 -206
- data/spec/integration/sync/v1/service/sync_list_spec.rb +0 -207
- data/spec/integration/sync/v1/service/sync_map/sync_map_item_spec.rb +0 -257
- data/spec/integration/sync/v1/service/sync_map/sync_map_permission_spec.rb +0 -206
- data/spec/integration/sync/v1/service/sync_map_spec.rb +0 -207
- data/spec/integration/sync/v1/service_spec.rb +0 -244
- data/spec/integration/taskrouter/v1/workspace/task_channel_spec.rb +0 -127
- data/spec/integration/taskrouter/v1/workspace/worker/reservation_spec.rb +0 -192
- data/spec/integration/taskrouter/v1/workspace/worker/worker_channel_spec.rb +0 -201
- data/spec/integration/video/v1/recording_spec.rb +0 -165
- data/spec/integration/video/v1/room/recording_spec.rb +0 -146
- data/spec/integration/video/v1/room_spec.rb +0 -237
- data/spec/integration/wireless/v1/command_spec.rb +0 -166
- data/spec/integration/wireless/v1/rate_plan_spec.rb +0 -268
- data/spec/integration/wireless/v1/sim/usage_record_spec.rb +0 -65
- data/spec/integration/wireless/v1/sim_spec.rb +0 -208
- data/spec/jwt/access_token_spec.rb +0 -130
- data/spec/jwt/client_capability_spec.rb +0 -104
- data/spec/jwt/task_router_spec.rb +0 -172
- data/spec/twiml/messaging_response_spec.rb +0 -90
- data/spec/twiml/voice_response_spec.rb +0 -474
File without changes
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Twilio
|
2
|
+
module TaskRouter
|
3
|
+
class Capability
|
4
|
+
|
5
|
+
TASK_ROUTER_BASE_URL = 'https://taskrouter.twilio.com'
|
6
|
+
TASK_ROUTER_VERSION = 'v1'
|
7
|
+
TASK_ROUTER_WEBSOCKET_BASE_URL = 'https://event-bridge.twilio.com/v1/wschannels'
|
8
|
+
|
9
|
+
REQUIRED = {required: true}
|
10
|
+
OPTIONAL = {required: false}
|
11
|
+
|
12
|
+
def initialize(account_sid, auth_token, workspace_sid, worker_sid)
|
13
|
+
@account_sid = account_sid
|
14
|
+
@auth_token = auth_token
|
15
|
+
@workspace_sid = workspace_sid
|
16
|
+
@worker_sid = worker_sid
|
17
|
+
@policies = []
|
18
|
+
allow_websocket_requests
|
19
|
+
allow_activity_list_fetch
|
20
|
+
end
|
21
|
+
|
22
|
+
def workspace_url
|
23
|
+
"#{TASK_ROUTER_BASE_URL}/#{TASK_ROUTER_VERSION}/Workspaces/#{@workspace_sid}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def worker_url
|
27
|
+
"#{workspace_url}/Workers/#{@worker_sid}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def allow_worker_activity_updates
|
31
|
+
add_policy(worker_url, "POST", nil, {ActivitySid: REQUIRED})
|
32
|
+
end
|
33
|
+
|
34
|
+
def allow_worker_fetch_attributes
|
35
|
+
add_policy(worker_url, "GET")
|
36
|
+
end
|
37
|
+
|
38
|
+
def allow_task_reservation_updates
|
39
|
+
task_url = "#{workspace_url}/Tasks/**"
|
40
|
+
add_policy(task_url, "POST", nil, {ReservationStatus: REQUIRED})
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_policy(url, method, query_filters = nil, post_filters = nil, allowed = true)
|
44
|
+
policy = {
|
45
|
+
url: url,
|
46
|
+
method: method,
|
47
|
+
query_filter: query_filters || {},
|
48
|
+
post_filter: post_filters || {},
|
49
|
+
allow: allowed
|
50
|
+
}
|
51
|
+
|
52
|
+
@policies.push(policy)
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_token(ttl = 3600)
|
56
|
+
payload = {
|
57
|
+
iss: @account_sid,
|
58
|
+
exp: (Time.now.to_i + ttl),
|
59
|
+
version: @version,
|
60
|
+
friendly_name: @worker_sid,
|
61
|
+
policies: @policies,
|
62
|
+
account_sid: @account_sid,
|
63
|
+
worker_sid: @worker_sid,
|
64
|
+
channel: @worker_sid,
|
65
|
+
workspace_sid: @workspace_sid
|
66
|
+
}
|
67
|
+
|
68
|
+
JWT.encode payload, @auth_token
|
69
|
+
end
|
70
|
+
|
71
|
+
protected
|
72
|
+
|
73
|
+
def allow_websocket_requests
|
74
|
+
worker_url = "#{TASK_ROUTER_WEBSOCKET_BASE_URL}/#{@account_sid}/#{@worker_sid}"
|
75
|
+
['GET', 'POST'].each do |meth|
|
76
|
+
add_policy(worker_url, meth)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def allow_activity_list_fetch
|
81
|
+
url = "#{workspace_url}/Activities"
|
82
|
+
add_policy(url, 'GET')
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/lib/twilio-ruby/util.rb
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
module Twilio
|
2
|
+
module Util
|
3
|
+
class AccessToken
|
4
|
+
def initialize(signing_key_id, account_sid, secret, ttl=3600)
|
5
|
+
@signing_key_sid = signing_key_id
|
6
|
+
@account_sid = account_sid
|
7
|
+
@secret = secret
|
8
|
+
@ttl = ttl
|
9
|
+
@grants = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_grant(resource, actions=Action::ALL)
|
13
|
+
actions = [*actions]
|
14
|
+
@grants.push({"res" => resource, "act" => actions})
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_endpoint_grant(endpoint, actions=[Action::Client::LISTEN, Action::Client::INVITE])
|
19
|
+
resource = "sip:#{endpoint}@#{@account_sid}.endpoint.twilio.com"
|
20
|
+
add_grant resource, actions
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_rest_grant(uri, actions=Action::ALL)
|
24
|
+
uri = uri[1..-1] if uri[0] == '/'
|
25
|
+
resource = "https://api.twilio.com/2010-04-01/Accounts/#{@account_sid}/#{uri}"
|
26
|
+
add_grant resource, actions
|
27
|
+
end
|
28
|
+
|
29
|
+
def enable_nts()
|
30
|
+
add_rest_grant('/Tokens', Action::HTTP::POST)
|
31
|
+
end
|
32
|
+
|
33
|
+
def as_jwt()
|
34
|
+
now = Time.now.to_i - 1
|
35
|
+
headers = {
|
36
|
+
'cty' => 'twilio-sat;v=1'
|
37
|
+
}
|
38
|
+
payload = {
|
39
|
+
'jti' => "#{@signing_key_sid}-#{now}",
|
40
|
+
'iss' => @signing_key_sid,
|
41
|
+
'sub' => @account_sid,
|
42
|
+
'nbf' => now,
|
43
|
+
'exp' => now + @ttl,
|
44
|
+
'grants' => @grants
|
45
|
+
}
|
46
|
+
JWT.encode payload, @secret, 'HS256', headers
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_s
|
50
|
+
as_jwt
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class Action
|
55
|
+
ALL='*'
|
56
|
+
|
57
|
+
class HTTP
|
58
|
+
DELETE='DELETE'
|
59
|
+
GET='GET'
|
60
|
+
POST='POST'
|
61
|
+
PUT='PUT'
|
62
|
+
end
|
63
|
+
|
64
|
+
class Client
|
65
|
+
LISTEN='listen'
|
66
|
+
INVITE='invite'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Twilio
|
2
|
+
module Util
|
3
|
+
class Capability
|
4
|
+
|
5
|
+
include Twilio::Util
|
6
|
+
|
7
|
+
def initialize(account_sid = nil, auth_token = nil)
|
8
|
+
@account_sid = account_sid || Twilio.account_sid
|
9
|
+
@auth_token = auth_token || Twilio.auth_token
|
10
|
+
if @account_sid.nil? || @auth_token.nil?
|
11
|
+
raise ArgumentError, 'Account SID and auth token are required'
|
12
|
+
end
|
13
|
+
@capabilities = []
|
14
|
+
end
|
15
|
+
|
16
|
+
def allow_client_incoming(client_name)
|
17
|
+
@client_name = client_name # stash for use in outgoing
|
18
|
+
scope_params = { 'clientName' => client_name }
|
19
|
+
@capabilities << scope_uri_for('client', 'incoming', scope_params)
|
20
|
+
end
|
21
|
+
|
22
|
+
def allow_client_outgoing(app_sid, params = {})
|
23
|
+
@allow_client_outgoing = true
|
24
|
+
@outgoing_scope_params = { 'appSid' => app_sid }
|
25
|
+
unless params.empty?
|
26
|
+
@outgoing_scope_params['appParams'] = url_encode params
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def allow_event_stream(filters = {})
|
31
|
+
scope_params = { 'path' => '/2010-04-01/Events' }
|
32
|
+
scope_params['params'] = filters unless filters.empty?
|
33
|
+
@capabilities << scope_uri_for('stream', 'subscribe', scope_params)
|
34
|
+
end
|
35
|
+
|
36
|
+
def scope_uri_for(service, privilege, params = {})
|
37
|
+
scope_uri = "scope:#{service}:#{privilege}"
|
38
|
+
scope_uri << "?#{url_encode(params)}" unless params.empty?
|
39
|
+
end
|
40
|
+
|
41
|
+
def generate(ttl = 3600)
|
42
|
+
|
43
|
+
capabilities = @capabilities.clone # we need a local copy to work on
|
44
|
+
|
45
|
+
# build the outgoing scope lazily so that we can use @client_name
|
46
|
+
if @allow_client_outgoing
|
47
|
+
params = @outgoing_scope_params
|
48
|
+
params.merge!('clientName' => @client_name) if @client_name
|
49
|
+
capabilities << scope_uri_for('client', 'outgoing', params)
|
50
|
+
end
|
51
|
+
|
52
|
+
payload = {
|
53
|
+
'scope' => capabilities.join(' '),
|
54
|
+
'iss' => @account_sid,
|
55
|
+
'exp' => (Time.now.to_i + ttl),
|
56
|
+
}
|
57
|
+
|
58
|
+
JWT.encode payload, @auth_token
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Twilio
|
2
|
+
module Util
|
3
|
+
class ClientConfig
|
4
|
+
DEFAULTS = {
|
5
|
+
host: 'api.twilio.com',
|
6
|
+
port: 443,
|
7
|
+
use_ssl: true,
|
8
|
+
ssl_verify_peer: true,
|
9
|
+
ssl_ca_file: File.dirname(__FILE__) + '/../../../conf/cacert.pem',
|
10
|
+
timeout: 30,
|
11
|
+
proxy_addr: nil,
|
12
|
+
proxy_port: nil,
|
13
|
+
proxy_user: nil,
|
14
|
+
proxy_pass: nil,
|
15
|
+
retry_limit: 1
|
16
|
+
}
|
17
|
+
|
18
|
+
DEFAULTS.each_key do |attribute|
|
19
|
+
attr_accessor attribute
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(opts={})
|
23
|
+
DEFAULTS.each do |attribute, value|
|
24
|
+
send("#{attribute}=".to_sym, opts.fetch(attribute, value))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Twilio
|
2
|
-
module
|
2
|
+
module Util
|
3
3
|
class RequestValidator
|
4
|
+
|
4
5
|
def initialize(auth_token = nil)
|
5
6
|
@auth_token = auth_token || Twilio.auth_token
|
6
7
|
raise ArgumentError, 'Auth token is required' if @auth_token.nil?
|
7
8
|
end
|
8
9
|
|
9
10
|
def validate(url, params, signature)
|
10
|
-
|
11
|
-
expected = build_signature_for(url, params_hash)
|
11
|
+
expected = build_signature_for url, params
|
12
12
|
secure_compare(expected, signature)
|
13
13
|
end
|
14
14
|
|
@@ -30,24 +30,7 @@ module Twilio
|
|
30
30
|
|
31
31
|
res = 0
|
32
32
|
b.each_byte { |byte| res |= byte ^ l.shift }
|
33
|
-
res
|
34
|
-
end
|
35
|
-
|
36
|
-
# `ActionController::Parameters` no longer, as of Rails 5, inherits
|
37
|
-
# from `Hash` so the `sort` method, used above in `build_signature_for`
|
38
|
-
# is deprecated.
|
39
|
-
#
|
40
|
-
# `to_unsafe_h` was introduced in Rails 4.2.1, before then it is still
|
41
|
-
# possible to sort on an ActionController::Parameters object.
|
42
|
-
#
|
43
|
-
# We use `to_unsafe_h` as `to_h` returns a hash of the permitted
|
44
|
-
# parameters only and we need all the parameters to create the signature.
|
45
|
-
def params_to_hash(params)
|
46
|
-
if params.respond_to?(:to_unsafe_h)
|
47
|
-
params.to_unsafe_h
|
48
|
-
else
|
49
|
-
params
|
50
|
-
end
|
33
|
+
res == 0
|
51
34
|
end
|
52
35
|
end
|
53
36
|
end
|
data/lib/twilio-ruby/version.rb
CHANGED
data/spec/holodeck/holodeck.rb
CHANGED
@@ -21,10 +21,10 @@ class Holodeck
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def ==(other)
|
24
|
-
method.
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
method.upcase == other.method.upcase &&
|
25
|
+
url == other.url &&
|
26
|
+
params == other.params &&
|
27
|
+
data == other.data
|
28
28
|
end
|
29
29
|
|
30
30
|
def to_s
|
@@ -43,7 +43,7 @@ class Holodeck
|
|
43
43
|
@response = response
|
44
44
|
end
|
45
45
|
|
46
|
-
def request(host, port, method, url, params
|
46
|
+
def request(host, port, method, url, params={}, data={}, headers={}, auth=nil, timeout=nil)
|
47
47
|
@requests << Request.new(
|
48
48
|
method: method,
|
49
49
|
url: url,
|
@@ -52,7 +52,7 @@ class Holodeck
|
|
52
52
|
headers: headers,
|
53
53
|
auth: auth
|
54
54
|
)
|
55
|
-
@response
|
55
|
+
return @response
|
56
56
|
end
|
57
57
|
|
58
58
|
def has_request?(request)
|
data/spec/holodeck/hologram.rb
CHANGED
@@ -2,20 +2,20 @@
|
|
2
2
|
# This code was generated by
|
3
3
|
# \ / _ _ _| _ _
|
4
4
|
# | (_)\/(_)(_|\/| |(/_ v1.0.0
|
5
|
-
# / /
|
5
|
+
# / /
|
6
6
|
|
7
7
|
require 'spec_helper.rb'
|
8
8
|
|
9
9
|
describe 'DependentPhoneNumber' do
|
10
10
|
it "can read" do
|
11
11
|
@holodeck.mock(Twilio::TwilioResponse.new(500, ''))
|
12
|
-
|
12
|
+
|
13
13
|
expect {
|
14
14
|
@client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
15
15
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
16
16
|
.dependent_phone_numbers.list()
|
17
|
-
}.to raise_exception(Twilio::REST::
|
18
|
-
|
17
|
+
}.to raise_exception(Twilio::REST::TwilioException)
|
18
|
+
|
19
19
|
values = {}
|
20
20
|
expect(
|
21
21
|
@holodeck.has_request?(Holodeck::Request.new(
|
@@ -57,11 +57,11 @@ describe 'DependentPhoneNumber' do
|
|
57
57
|
}
|
58
58
|
]
|
59
59
|
))
|
60
|
-
|
60
|
+
|
61
61
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
62
62
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
63
63
|
.dependent_phone_numbers.list()
|
64
|
-
|
64
|
+
|
65
65
|
expect(actual).to_not eq(nil)
|
66
66
|
end
|
67
67
|
|
@@ -80,11 +80,11 @@ describe 'DependentPhoneNumber' do
|
|
80
80
|
}
|
81
81
|
]
|
82
82
|
))
|
83
|
-
|
83
|
+
|
84
84
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
85
85
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
86
86
|
.dependent_phone_numbers.list()
|
87
|
-
|
87
|
+
|
88
88
|
expect(actual).to_not eq(nil)
|
89
89
|
end
|
90
90
|
end
|
@@ -2,19 +2,19 @@
|
|
2
2
|
# This code was generated by
|
3
3
|
# \ / _ _ _| _ _
|
4
4
|
# | (_)\/(_)(_|\/| |(/_ v1.0.0
|
5
|
-
# / /
|
5
|
+
# / /
|
6
6
|
|
7
7
|
require 'spec_helper.rb'
|
8
8
|
|
9
9
|
describe 'Address' do
|
10
10
|
it "can create" do
|
11
11
|
@holodeck.mock(Twilio::TwilioResponse.new(500, ''))
|
12
|
-
|
12
|
+
|
13
13
|
expect {
|
14
14
|
@client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
15
15
|
.addresses.create(customer_name: "customer_name", street: "street", city: "city", region: "region", postal_code: "postal_code", iso_country: "US")
|
16
|
-
}.to raise_exception(Twilio::REST::
|
17
|
-
|
16
|
+
}.to raise_exception(Twilio::REST::TwilioException)
|
17
|
+
|
18
18
|
values = {
|
19
19
|
'CustomerName' => "customer_name",
|
20
20
|
'Street' => "street",
|
@@ -33,7 +33,7 @@ describe 'Address' do
|
|
33
33
|
|
34
34
|
it "receives create responses" do
|
35
35
|
@holodeck.mock(Twilio::TwilioResponse.new(
|
36
|
-
|
36
|
+
200,
|
37
37
|
%q[
|
38
38
|
{
|
39
39
|
"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
@@ -41,33 +41,31 @@ describe 'Address' do
|
|
41
41
|
"customer_name": "name",
|
42
42
|
"date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
|
43
43
|
"date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
|
44
|
-
"emergency_enabled": false,
|
45
44
|
"friendly_name": null,
|
46
45
|
"iso_country": "US",
|
47
46
|
"postal_code": "94019",
|
48
47
|
"region": "CA",
|
49
48
|
"sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
50
49
|
"street": "4th",
|
51
|
-
"validated": false,
|
52
50
|
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
|
53
51
|
}
|
54
52
|
]
|
55
53
|
))
|
56
|
-
|
54
|
+
|
57
55
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
58
56
|
.addresses.create(customer_name: "customer_name", street: "street", city: "city", region: "region", postal_code: "postal_code", iso_country: "US")
|
59
|
-
|
57
|
+
|
60
58
|
expect(actual).to_not eq(nil)
|
61
59
|
end
|
62
60
|
|
63
61
|
it "can delete" do
|
64
62
|
@holodeck.mock(Twilio::TwilioResponse.new(500, ''))
|
65
|
-
|
63
|
+
|
66
64
|
expect {
|
67
65
|
@client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
68
66
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").delete()
|
69
|
-
}.to raise_exception(Twilio::REST::
|
70
|
-
|
67
|
+
}.to raise_exception(Twilio::REST::TwilioException)
|
68
|
+
|
71
69
|
values = {}
|
72
70
|
expect(
|
73
71
|
@holodeck.has_request?(Holodeck::Request.new(
|
@@ -81,21 +79,21 @@ describe 'Address' do
|
|
81
79
|
204,
|
82
80
|
nil,
|
83
81
|
))
|
84
|
-
|
82
|
+
|
85
83
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
86
84
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").delete()
|
87
|
-
|
85
|
+
|
88
86
|
expect(actual).to eq(true)
|
89
87
|
end
|
90
88
|
|
91
89
|
it "can fetch" do
|
92
90
|
@holodeck.mock(Twilio::TwilioResponse.new(500, ''))
|
93
|
-
|
91
|
+
|
94
92
|
expect {
|
95
93
|
@client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
96
94
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").fetch()
|
97
|
-
}.to raise_exception(Twilio::REST::
|
98
|
-
|
95
|
+
}.to raise_exception(Twilio::REST::TwilioException)
|
96
|
+
|
99
97
|
values = {}
|
100
98
|
expect(
|
101
99
|
@holodeck.has_request?(Holodeck::Request.new(
|
@@ -114,33 +112,31 @@ describe 'Address' do
|
|
114
112
|
"customer_name": "name",
|
115
113
|
"date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
|
116
114
|
"date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
|
117
|
-
"emergency_enabled": false,
|
118
115
|
"friendly_name": null,
|
119
116
|
"iso_country": "US",
|
120
117
|
"postal_code": "94019",
|
121
118
|
"region": "CA",
|
122
119
|
"sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
123
120
|
"street": "4th",
|
124
|
-
"validated": false,
|
125
121
|
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
|
126
122
|
}
|
127
123
|
]
|
128
124
|
))
|
129
|
-
|
125
|
+
|
130
126
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
131
127
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").fetch()
|
132
|
-
|
128
|
+
|
133
129
|
expect(actual).to_not eq(nil)
|
134
130
|
end
|
135
131
|
|
136
132
|
it "can update" do
|
137
133
|
@holodeck.mock(Twilio::TwilioResponse.new(500, ''))
|
138
|
-
|
134
|
+
|
139
135
|
expect {
|
140
136
|
@client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
141
137
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").update()
|
142
|
-
}.to raise_exception(Twilio::REST::
|
143
|
-
|
138
|
+
}.to raise_exception(Twilio::REST::TwilioException)
|
139
|
+
|
144
140
|
values = {}
|
145
141
|
expect(
|
146
142
|
@holodeck.has_request?(Holodeck::Request.new(
|
@@ -159,33 +155,31 @@ describe 'Address' do
|
|
159
155
|
"customer_name": "name",
|
160
156
|
"date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
|
161
157
|
"date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
|
162
|
-
"emergency_enabled": false,
|
163
158
|
"friendly_name": null,
|
164
159
|
"iso_country": "US",
|
165
160
|
"postal_code": "94019",
|
166
161
|
"region": "CA",
|
167
162
|
"sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
168
163
|
"street": "4th",
|
169
|
-
"validated": false,
|
170
164
|
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
|
171
165
|
}
|
172
166
|
]
|
173
167
|
))
|
174
|
-
|
168
|
+
|
175
169
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
176
170
|
.addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").update()
|
177
|
-
|
171
|
+
|
178
172
|
expect(actual).to_not eq(nil)
|
179
173
|
end
|
180
174
|
|
181
175
|
it "can read" do
|
182
176
|
@holodeck.mock(Twilio::TwilioResponse.new(500, ''))
|
183
|
-
|
177
|
+
|
184
178
|
expect {
|
185
179
|
@client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
186
180
|
.addresses.list()
|
187
|
-
}.to raise_exception(Twilio::REST::
|
188
|
-
|
181
|
+
}.to raise_exception(Twilio::REST::TwilioException)
|
182
|
+
|
189
183
|
values = {}
|
190
184
|
expect(
|
191
185
|
@holodeck.has_request?(Holodeck::Request.new(
|
@@ -206,14 +200,12 @@ describe 'Address' do
|
|
206
200
|
"customer_name": "name",
|
207
201
|
"date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
|
208
202
|
"date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
|
209
|
-
"emergency_enabled": false,
|
210
203
|
"friendly_name": null,
|
211
204
|
"iso_country": "US",
|
212
205
|
"postal_code": "94019",
|
213
206
|
"region": "CA",
|
214
207
|
"sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
215
208
|
"street": "4th",
|
216
|
-
"validated": false,
|
217
209
|
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
|
218
210
|
}
|
219
211
|
],
|
@@ -231,10 +223,10 @@ describe 'Address' do
|
|
231
223
|
}
|
232
224
|
]
|
233
225
|
))
|
234
|
-
|
226
|
+
|
235
227
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
236
228
|
.addresses.list()
|
237
|
-
|
229
|
+
|
238
230
|
expect(actual).to_not eq(nil)
|
239
231
|
end
|
240
232
|
|
@@ -258,10 +250,10 @@ describe 'Address' do
|
|
258
250
|
}
|
259
251
|
]
|
260
252
|
))
|
261
|
-
|
253
|
+
|
262
254
|
actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
|
263
255
|
.addresses.list()
|
264
|
-
|
256
|
+
|
265
257
|
expect(actual).to_not eq(nil)
|
266
258
|
end
|
267
259
|
end
|