wavix-python-sdk 1.0.0__py3-none-any.whl
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.
- wavix/__init__.py +801 -0
- wavix/_default_clients.py +32 -0
- wavix/api_keys/__init__.py +4 -0
- wavix/api_keys/client.py +764 -0
- wavix/api_keys/raw_client.py +1191 -0
- wavix/billing/__init__.py +41 -0
- wavix/billing/client.py +82 -0
- wavix/billing/invoices/__init__.py +34 -0
- wavix/billing/invoices/client.py +203 -0
- wavix/billing/invoices/raw_client.py +302 -0
- wavix/billing/invoices/types/__init__.py +34 -0
- wavix/billing/invoices/types/list_invoices_response.py +31 -0
- wavix/billing/raw_client.py +13 -0
- wavix/billing/transactions/__init__.py +34 -0
- wavix/billing/transactions/client.py +209 -0
- wavix/billing/transactions/raw_client.py +253 -0
- wavix/billing/transactions/types/__init__.py +34 -0
- wavix/billing/transactions/types/list_transactions_response.py +31 -0
- wavix/buy/__init__.py +61 -0
- wavix/buy/cities/__init__.py +34 -0
- wavix/buy/cities/client.py +134 -0
- wavix/buy/cities/raw_client.py +201 -0
- wavix/buy/cities/types/__init__.py +34 -0
- wavix/buy/cities/types/list_cities_response.py +23 -0
- wavix/buy/client.py +139 -0
- wavix/buy/countries/__init__.py +34 -0
- wavix/buy/countries/client.py +116 -0
- wavix/buy/countries/raw_client.py +144 -0
- wavix/buy/countries/types/__init__.py +34 -0
- wavix/buy/countries/types/list_countries_response.py +23 -0
- wavix/buy/numbers/__init__.py +34 -0
- wavix/buy/numbers/client.py +168 -0
- wavix/buy/numbers/raw_client.py +227 -0
- wavix/buy/numbers/types/__init__.py +34 -0
- wavix/buy/numbers/types/list_numbers_response.py +26 -0
- wavix/buy/raw_client.py +13 -0
- wavix/buy/region_cities/__init__.py +34 -0
- wavix/buy/region_cities/client.py +142 -0
- wavix/buy/region_cities/raw_client.py +207 -0
- wavix/buy/region_cities/types/__init__.py +34 -0
- wavix/buy/region_cities/types/list_region_cities_response.py +23 -0
- wavix/buy/regions/__init__.py +34 -0
- wavix/buy/regions/client.py +132 -0
- wavix/buy/regions/raw_client.py +222 -0
- wavix/buy/regions/types/__init__.py +34 -0
- wavix/buy/regions/types/list_regions_response.py +23 -0
- wavix/call_control/__init__.py +40 -0
- wavix/call_control/audio/__init__.py +4 -0
- wavix/call_control/audio/client.py +195 -0
- wavix/call_control/audio/raw_client.py +333 -0
- wavix/call_control/client.py +796 -0
- wavix/call_control/raw_client.py +1224 -0
- wavix/call_control/streams/__init__.py +4 -0
- wavix/call_control/streams/client.py +250 -0
- wavix/call_control/streams/raw_client.py +325 -0
- wavix/call_control/types/__init__.py +38 -0
- wavix/call_control/types/call_dtmf_collect_request_prompt.py +33 -0
- wavix/call_control/types/call_dtmf_collect_request_prompt_say.py +31 -0
- wavix/call_recording/__init__.py +4 -0
- wavix/call_recording/client.py +430 -0
- wavix/call_recording/raw_client.py +726 -0
- wavix/call_webhooks/__init__.py +37 -0
- wavix/call_webhooks/client.py +281 -0
- wavix/call_webhooks/raw_client.py +529 -0
- wavix/call_webhooks/types/__init__.py +38 -0
- wavix/call_webhooks/types/call_webhooks_create_request_event_type.py +5 -0
- wavix/call_webhooks/types/delete_call_webhooks_request_event_type.py +5 -0
- wavix/cart/__init__.py +38 -0
- wavix/cart/client.py +327 -0
- wavix/cart/raw_client.py +629 -0
- wavix/cart/types/__init__.py +40 -0
- wavix/cart/types/checkout_cart_response.py +22 -0
- wavix/cart/types/get_cart_response.py +29 -0
- wavix/cart/types/remove_cart_response.py +22 -0
- wavix/cdrs/__init__.py +39 -0
- wavix/cdrs/client.py +968 -0
- wavix/cdrs/raw_client.py +1176 -0
- wavix/cdrs/transcription/__init__.py +4 -0
- wavix/cdrs/transcription/client.py +112 -0
- wavix/cdrs/transcription/raw_client.py +156 -0
- wavix/cdrs/types/__init__.py +38 -0
- wavix/cdrs/types/cdr_search_request_disposition.py +5 -0
- wavix/cdrs/types/cdr_search_request_type.py +5 -0
- wavix/client.py +578 -0
- wavix/core/__init__.py +127 -0
- wavix/core/api_error.py +23 -0
- wavix/core/client_wrapper.py +119 -0
- wavix/core/datetime_utils.py +70 -0
- wavix/core/file.py +67 -0
- wavix/core/force_multipart.py +18 -0
- wavix/core/http_client.py +839 -0
- wavix/core/http_response.py +59 -0
- wavix/core/http_sse/__init__.py +42 -0
- wavix/core/http_sse/_api.py +170 -0
- wavix/core/http_sse/_decoders.py +61 -0
- wavix/core/http_sse/_exceptions.py +7 -0
- wavix/core/http_sse/_models.py +17 -0
- wavix/core/jsonable_encoder.py +120 -0
- wavix/core/logging.py +107 -0
- wavix/core/parse_error.py +36 -0
- wavix/core/pydantic_utilities.py +508 -0
- wavix/core/query_encoder.py +58 -0
- wavix/core/remove_none_from_dict.py +11 -0
- wavix/core/request_options.py +35 -0
- wavix/core/serialization.py +347 -0
- wavix/environment.py +7 -0
- wavix/errors/__init__.py +56 -0
- wavix/errors/bad_request_error.py +10 -0
- wavix/errors/forbidden_error.py +10 -0
- wavix/errors/not_found_error.py +10 -0
- wavix/errors/service_unavailable_error.py +11 -0
- wavix/errors/too_many_requests_error.py +11 -0
- wavix/errors/unauthorized_error.py +11 -0
- wavix/errors/unprocessable_entity_error.py +10 -0
- wavix/link_shortener/__init__.py +34 -0
- wavix/link_shortener/client.py +194 -0
- wavix/link_shortener/metrics/__init__.py +4 -0
- wavix/link_shortener/metrics/client.py +198 -0
- wavix/link_shortener/metrics/raw_client.py +218 -0
- wavix/link_shortener/raw_client.py +265 -0
- wavix/number_validator/__init__.py +35 -0
- wavix/number_validator/client.py +271 -0
- wavix/number_validator/raw_client.py +383 -0
- wavix/number_validator/results/__init__.py +4 -0
- wavix/number_validator/results/client.py +114 -0
- wavix/number_validator/results/raw_client.py +156 -0
- wavix/number_validator/types/__init__.py +34 -0
- wavix/number_validator/types/get_number_validator_response.py +112 -0
- wavix/numbers/__init__.py +39 -0
- wavix/numbers/client.py +689 -0
- wavix/numbers/papers/__init__.py +4 -0
- wavix/numbers/papers/client.py +155 -0
- wavix/numbers/papers/raw_client.py +208 -0
- wavix/numbers/raw_client.py +1000 -0
- wavix/numbers/types/__init__.py +38 -0
- wavix/numbers/types/bulk_update_numbers_response.py +23 -0
- wavix/numbers/types/delete_numbers_response.py +22 -0
- wavix/profile/__init__.py +41 -0
- wavix/profile/client.py +308 -0
- wavix/profile/config/__init__.py +34 -0
- wavix/profile/config/client.py +100 -0
- wavix/profile/config/raw_client.py +124 -0
- wavix/profile/config/types/__init__.py +34 -0
- wavix/profile/config/types/get_config_response.py +25 -0
- wavix/profile/raw_client.py +360 -0
- wavix/profile/types/__init__.py +38 -0
- wavix/profile/types/profile_update_request_company_info.py +48 -0
- wavix/profile/types/profile_update_request_company_info_industry.py +22 -0
- wavix/py.typed +0 -0
- wavix/sip_trunks/__init__.py +4 -0
- wavix/sip_trunks/client.py +927 -0
- wavix/sip_trunks/raw_client.py +1324 -0
- wavix/sms_and_mms/__init__.py +66 -0
- wavix/sms_and_mms/client.py +101 -0
- wavix/sms_and_mms/messages/__init__.py +49 -0
- wavix/sms_and_mms/messages/client.py +625 -0
- wavix/sms_and_mms/messages/raw_client.py +793 -0
- wavix/sms_and_mms/messages/types/__init__.py +47 -0
- wavix/sms_and_mms/messages/types/get_messages_response.py +97 -0
- wavix/sms_and_mms/messages/types/list_all_messages_request_message_type.py +5 -0
- wavix/sms_and_mms/messages/types/list_messages_request_message_type.py +5 -0
- wavix/sms_and_mms/messages/types/list_messages_response.py +26 -0
- wavix/sms_and_mms/opt_outs/__init__.py +34 -0
- wavix/sms_and_mms/opt_outs/client.py +277 -0
- wavix/sms_and_mms/opt_outs/raw_client.py +438 -0
- wavix/sms_and_mms/opt_outs/types/__init__.py +34 -0
- wavix/sms_and_mms/opt_outs/types/create_opt_outs_response.py +22 -0
- wavix/sms_and_mms/raw_client.py +13 -0
- wavix/sms_and_mms/sender_ids/__init__.py +38 -0
- wavix/sms_and_mms/sender_ids/client.py +391 -0
- wavix/sms_and_mms/sender_ids/raw_client.py +617 -0
- wavix/sms_and_mms/sender_ids/types/__init__.py +40 -0
- wavix/sms_and_mms/sender_ids/types/delete_sender_ids_response.py +22 -0
- wavix/sms_and_mms/sender_ids/types/sender_id_create_request_monthly_volume.py +7 -0
- wavix/sms_and_mms/sender_ids/types/sender_id_create_request_usecase.py +5 -0
- wavix/speech_analytics/__init__.py +52 -0
- wavix/speech_analytics/client.py +372 -0
- wavix/speech_analytics/file/__init__.py +4 -0
- wavix/speech_analytics/file/client.py +114 -0
- wavix/speech_analytics/file/raw_client.py +148 -0
- wavix/speech_analytics/raw_client.py +527 -0
- wavix/speech_analytics/types/__init__.py +47 -0
- wavix/speech_analytics/types/create_speech_analytics_response.py +32 -0
- wavix/speech_analytics/types/get_speech_analytics_response.py +77 -0
- wavix/speech_analytics/types/get_speech_analytics_response_language.py +5 -0
- wavix/speech_analytics/types/get_speech_analytics_response_status.py +5 -0
- wavix/sub_accounts/__init__.py +52 -0
- wavix/sub_accounts/client.py +442 -0
- wavix/sub_accounts/raw_client.py +775 -0
- wavix/sub_accounts/transactions/__init__.py +4 -0
- wavix/sub_accounts/transactions/client.py +198 -0
- wavix/sub_accounts/transactions/raw_client.py +265 -0
- wavix/sub_accounts/types/__init__.py +47 -0
- wavix/sub_accounts/types/list_sub_accounts_request_status.py +5 -0
- wavix/sub_accounts/types/sub_accounts_create_request_default_destinations.py +31 -0
- wavix/sub_accounts/types/sub_accounts_update_request_default_destinations.py +31 -0
- wavix/sub_accounts/types/sub_accounts_update_request_status.py +5 -0
- wavix/ten_dlc/__init__.py +167 -0
- wavix/ten_dlc/brand_appeals/__init__.py +34 -0
- wavix/ten_dlc/brand_appeals/client.py +244 -0
- wavix/ten_dlc/brand_appeals/raw_client.py +390 -0
- wavix/ten_dlc/brand_appeals/types/__init__.py +34 -0
- wavix/ten_dlc/brand_appeals/types/create_brand_appeals_response.py +22 -0
- wavix/ten_dlc/brand_evidence/__init__.py +37 -0
- wavix/ten_dlc/brand_evidence/client.py +365 -0
- wavix/ten_dlc/brand_evidence/raw_client.py +599 -0
- wavix/ten_dlc/brand_evidence/types/__init__.py +38 -0
- wavix/ten_dlc/brand_evidence/types/delete_brand_evidence_response.py +22 -0
- wavix/ten_dlc/brand_evidence/types/upload_brand_evidence_response.py +38 -0
- wavix/ten_dlc/brand_vetting_appeals/__init__.py +34 -0
- wavix/ten_dlc/brand_vetting_appeals/client.py +258 -0
- wavix/ten_dlc/brand_vetting_appeals/raw_client.py +381 -0
- wavix/ten_dlc/brand_vetting_appeals/types/__init__.py +36 -0
- wavix/ten_dlc/brand_vetting_appeals/types/create_brand_vetting_appeals_response.py +22 -0
- wavix/ten_dlc/brand_vettings/__init__.py +4 -0
- wavix/ten_dlc/brand_vettings/client.py +325 -0
- wavix/ten_dlc/brand_vettings/raw_client.py +518 -0
- wavix/ten_dlc/brands/__init__.py +85 -0
- wavix/ten_dlc/brands/client.py +870 -0
- wavix/ten_dlc/brands/raw_client.py +1263 -0
- wavix/ten_dlc/brands/types/__init__.py +83 -0
- wavix/ten_dlc/brands/types/create_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/create_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/create_brands_response_status.py +7 -0
- wavix/ten_dlc/brands/types/delete_brands_response.py +22 -0
- wavix/ten_dlc/brands/types/get_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/get_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/get_brands_response_status.py +7 -0
- wavix/ten_dlc/brands/types/list_brands_response.py +33 -0
- wavix/ten_dlc/brands/types/list_brands_response_pagination.py +41 -0
- wavix/ten_dlc/brands/types/qualify_usecase_brands_request_use_case.py +35 -0
- wavix/ten_dlc/brands/types/qualify_usecase_brands_response.py +33 -0
- wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_vertical.py +18 -0
- wavix/ten_dlc/brands/types/update_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/update_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/update_brands_response_status.py +7 -0
- wavix/ten_dlc/campaign_numbers/__init__.py +38 -0
- wavix/ten_dlc/campaign_numbers/client.py +304 -0
- wavix/ten_dlc/campaign_numbers/raw_client.py +448 -0
- wavix/ten_dlc/campaign_numbers/types/__init__.py +40 -0
- wavix/ten_dlc/campaign_numbers/types/link_campaign_numbers_response.py +22 -0
- wavix/ten_dlc/campaign_numbers/types/list_campaign_numbers_response.py +33 -0
- wavix/ten_dlc/campaign_numbers/types/unlink_campaign_numbers_response.py +22 -0
- wavix/ten_dlc/campaigns/__init__.py +64 -0
- wavix/ten_dlc/campaigns/client.py +1493 -0
- wavix/ten_dlc/campaigns/raw_client.py +1840 -0
- wavix/ten_dlc/campaigns/types/__init__.py +62 -0
- wavix/ten_dlc/campaigns/types/create_campaigns_response.py +211 -0
- wavix/ten_dlc/campaigns/types/delete_campaigns_response.py +22 -0
- wavix/ten_dlc/campaigns/types/get_campaigns_response.py +211 -0
- wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response.py +33 -0
- wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response_pagination.py +41 -0
- wavix/ten_dlc/campaigns/types/list_campaigns_response.py +33 -0
- wavix/ten_dlc/campaigns/types/list_campaigns_response_pagination.py +41 -0
- wavix/ten_dlc/campaigns/types/ten_dlc_campaign_update_request_usecase.py +15 -0
- wavix/ten_dlc/campaigns/types/update_campaigns_response.py +211 -0
- wavix/ten_dlc/client.py +196 -0
- wavix/ten_dlc/raw_client.py +13 -0
- wavix/ten_dlc/subscriptions/__init__.py +37 -0
- wavix/ten_dlc/subscriptions/client.py +271 -0
- wavix/ten_dlc/subscriptions/raw_client.py +398 -0
- wavix/ten_dlc/subscriptions/types/__init__.py +38 -0
- wavix/ten_dlc/subscriptions/types/create_subscriptions_response.py +31 -0
- wavix/ten_dlc/subscriptions/types/delete_subscriptions_response.py +22 -0
- wavix/two_fa/__init__.py +56 -0
- wavix/two_fa/client.py +101 -0
- wavix/two_fa/events/__init__.py +4 -0
- wavix/two_fa/events/client.py +114 -0
- wavix/two_fa/events/raw_client.py +156 -0
- wavix/two_fa/raw_client.py +13 -0
- wavix/two_fa/sessions/__init__.py +4 -0
- wavix/two_fa/sessions/client.py +142 -0
- wavix/two_fa/sessions/raw_client.py +200 -0
- wavix/two_fa/verification/__init__.py +49 -0
- wavix/two_fa/verification/client.py +395 -0
- wavix/two_fa/verification/raw_client.py +664 -0
- wavix/two_fa/verification/types/__init__.py +47 -0
- wavix/two_fa/verification/types/check_verification_response.py +22 -0
- wavix/two_fa/verification/types/create_verification_response.py +51 -0
- wavix/two_fa/verification/types/resend_verification_response.py +38 -0
- wavix/two_fa/verification/types/two_factor_verification_resend_request_channel.py +5 -0
- wavix/types/__init__.py +637 -0
- wavix/types/account_error_response.py +31 -0
- wavix/types/account_limits.py +32 -0
- wavix/types/allowed_i_ps.py +7 -0
- wavix/types/allowed_i_ps_item.py +27 -0
- wavix/types/api_key.py +138 -0
- wavix/types/api_key_calls_scope_permission.py +30 -0
- wavix/types/api_key_calls_scope_permission_allow.py +5 -0
- wavix/types/api_key_scope_permission.py +30 -0
- wavix/types/api_key_scope_permission_allow.py +5 -0
- wavix/types/available_number.py +97 -0
- wavix/types/available_number_list_response.py +26 -0
- wavix/types/bad_request_error_body.py +27 -0
- wavix/types/billing_transaction_list_response.py +31 -0
- wavix/types/brand_status_updated_webhook.py +28 -0
- wavix/types/brand_status_updated_webhook_status.py +7 -0
- wavix/types/call.py +92 -0
- wavix/types/call_control_validation_error_response.py +34 -0
- wavix/types/call_create_response.py +92 -0
- wavix/types/call_create_response_event_type.py +18 -0
- wavix/types/call_direction.py +5 -0
- wavix/types/call_disposition.py +5 -0
- wavix/types/call_event_type.py +18 -0
- wavix/types/call_list_response.py +28 -0
- wavix/types/call_recording_list_response.py +28 -0
- wavix/types/call_response.py +24 -0
- wavix/types/call_status_webhook.py +70 -0
- wavix/types/call_status_webhook_direction.py +5 -0
- wavix/types/call_stream_channel.py +5 -0
- wavix/types/call_stream_response.py +27 -0
- wavix/types/call_stream_type.py +5 -0
- wavix/types/call_webhook.py +37 -0
- wavix/types/call_webhook_event_type.py +5 -0
- wavix/types/call_webhook_list_response.py +10 -0
- wavix/types/call_webhook_list_response_item.py +28 -0
- wavix/types/call_webhook_list_response_item_event_type.py +5 -0
- wavix/types/campaign_status_updated_webhook.py +41 -0
- wavix/types/campaign_status_updated_webhook_status.py +7 -0
- wavix/types/cart_response.py +29 -0
- wavix/types/cdr.py +97 -0
- wavix/types/cdr_list_response.py +26 -0
- wavix/types/cdr_response.py +104 -0
- wavix/types/cdr_transcription_completed_webhook.py +28 -0
- wavix/types/cdr_transcription_completed_webhook_status.py +5 -0
- wavix/types/cdr_transcription_response.py +74 -0
- wavix/types/cdr_transcription_search_response.py +26 -0
- wavix/types/cdr_with_transcription.py +97 -0
- wavix/types/city.py +32 -0
- wavix/types/city_list_response.py +23 -0
- wavix/types/country.py +32 -0
- wavix/types/country_has_no_regions_error_response.py +27 -0
- wavix/types/country_list_response.py +23 -0
- wavix/types/document_type.py +32 -0
- wavix/types/document_type_id.py +7 -0
- wavix/types/file_transcript_response.py +30 -0
- wavix/types/file_transcript_turn.py +46 -0
- wavix/types/file_transcription_completed_webhook.py +32 -0
- wavix/types/file_transcription_response.py +77 -0
- wavix/types/file_transcription_response_language.py +5 -0
- wavix/types/file_transcription_response_status.py +5 -0
- wavix/types/financial_transaction.py +57 -0
- wavix/types/forbidden_error_response.py +27 -0
- wavix/types/inbound_call_destination.py +53 -0
- wavix/types/inbound_call_transport.py +6 -0
- wavix/types/inbound_message.py +46 -0
- wavix/types/invalid_recording.py +31 -0
- wavix/types/invoice.py +42 -0
- wavix/types/invoice_list_response.py +31 -0
- wavix/types/list_brand_evidence_response.py +23 -0
- wavix/types/list_sessions_response_item.py +58 -0
- wavix/types/message.py +103 -0
- wavix/types/message_body.py +29 -0
- wavix/types/message_create_request.py +46 -0
- wavix/types/message_delivery_status.py +8 -0
- wavix/types/message_list_response.py +26 -0
- wavix/types/message_response.py +97 -0
- wavix/types/messages_delivery_report.py +81 -0
- wavix/types/not_found_error_body.py +27 -0
- wavix/types/not_found_error_response.py +27 -0
- wavix/types/number.py +160 -0
- wavix/types/number_destination.py +38 -0
- wavix/types/number_document.py +58 -0
- wavix/types/number_list_response.py +32 -0
- wavix/types/number_status_updated_webhook.py +38 -0
- wavix/types/number_status_updated_webhook_status.py +5 -0
- wavix/types/number_validator_create_bulk_response.py +10 -0
- wavix/types/number_validator_create_bulk_response_request_id.py +26 -0
- wavix/types/on_call_event_payload.py +34 -0
- wavix/types/on_call_event_payload_type.py +5 -0
- wavix/types/opt_out.py +27 -0
- wavix/types/opt_out_item.py +38 -0
- wavix/types/opt_outs_list_response.py +26 -0
- wavix/types/pagination.py +37 -0
- wavix/types/phone_lookup_details.py +32 -0
- wavix/types/phone_number_validation_type.py +5 -0
- wavix/types/phone_validation_batch_response.py +38 -0
- wavix/types/phone_validation_batch_result_response.py +41 -0
- wavix/types/phone_validation_response.py +112 -0
- wavix/types/phone_validation_result_response.py +115 -0
- wavix/types/profile_config_response.py +25 -0
- wavix/types/profile_response.py +79 -0
- wavix/types/profile_response_company_info.py +53 -0
- wavix/types/profile_response_company_info_country.py +31 -0
- wavix/types/profile_response_company_info_industry.py +22 -0
- wavix/types/profile_response_default_destinations_item.py +27 -0
- wavix/types/record_not_found_error_response.py +27 -0
- wavix/types/recording.py +57 -0
- wavix/types/recording_deleted_error_response.py +38 -0
- wavix/types/region.py +31 -0
- wavix/types/region_list_response.py +23 -0
- wavix/types/send_messages_response.py +100 -0
- wavix/types/sender_id.py +48 -0
- wavix/types/sender_id_details.py +44 -0
- wavix/types/sender_id_list_response.py +23 -0
- wavix/types/sender_id_response.py +48 -0
- wavix/types/sender_id_response_type.py +5 -0
- wavix/types/sender_id_type.py +5 -0
- wavix/types/short_link_metrics_item.py +69 -0
- wavix/types/short_link_metrics_response.py +26 -0
- wavix/types/short_link_response.py +22 -0
- wavix/types/sip_trunk_create_request.py +132 -0
- wavix/types/sip_trunk_create_request_allowed_ips_item.py +22 -0
- wavix/types/sip_trunk_create_request_host_request.py +26 -0
- wavix/types/sip_trunk_list_response.py +26 -0
- wavix/types/sip_trunk_response.py +145 -0
- wavix/types/sip_trunk_summary.py +114 -0
- wavix/types/sip_trunk_summary_host_request.py +31 -0
- wavix/types/sub_accounts_list_response.py +26 -0
- wavix/types/sub_accounts_transactions_list_response.py +30 -0
- wavix/types/sub_accounts_transactions_list_response_transactions_item.py +48 -0
- wavix/types/sub_organization_response.py +59 -0
- wavix/types/sub_organization_response_default_destinations.py +31 -0
- wavix/types/sub_organization_response_status.py +5 -0
- wavix/types/submit_file_transcription_response.py +32 -0
- wavix/types/success_response.py +22 -0
- wavix/types/tcr_error_message.py +27 -0
- wavix/types/tcr_feedback.py +23 -0
- wavix/types/tcr_feedback_category.py +47 -0
- wavix/types/ten_dlc_brand.py +143 -0
- wavix/types/ten_dlc_brand_appeal.py +54 -0
- wavix/types/ten_dlc_brand_appeal_create_request.py +36 -0
- wavix/types/ten_dlc_brand_appeal_outcome.py +38 -0
- wavix/types/ten_dlc_brand_appeal_outcome_feedback.py +27 -0
- wavix/types/ten_dlc_brand_appeal_outcome_vetting_status.py +7 -0
- wavix/types/ten_dlc_brand_create_request.py +8 -0
- wavix/types/ten_dlc_brand_create_request_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_create_request_stock_exchange.py +26 -0
- wavix/types/ten_dlc_brand_create_request_stock_exchange_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_create_request_vertical.py +18 -0
- wavix/types/ten_dlc_brand_create_request_zero.py +24 -0
- wavix/types/ten_dlc_brand_create_request_zero_entity_type.py +5 -0
- wavix/types/ten_dlc_brand_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_evidence.py +38 -0
- wavix/types/ten_dlc_brand_identity_verification_status.py +7 -0
- wavix/types/ten_dlc_brand_list_response.py +33 -0
- wavix/types/ten_dlc_brand_list_response_pagination.py +41 -0
- wavix/types/ten_dlc_brand_qualification_result.py +33 -0
- wavix/types/ten_dlc_brand_status.py +7 -0
- wavix/types/ten_dlc_brand_vetting.py +71 -0
- wavix/types/ten_dlc_brand_vetting_appeal.py +78 -0
- wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome.py +37 -0
- wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome_feedback.py +26 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome.py +33 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome_feedback.py +26 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome_reason.py +22 -0
- wavix/types/ten_dlc_campaign.py +211 -0
- wavix/types/ten_dlc_campaign_list_response.py +33 -0
- wavix/types/ten_dlc_campaign_list_response_pagination.py +41 -0
- wavix/types/ten_dlc_campaign_nudge_request.py +32 -0
- wavix/types/ten_dlc_campaign_number.py +27 -0
- wavix/types/ten_dlc_campaign_number_list_response.py +33 -0
- wavix/types/ten_dlc_event_subscription.py +31 -0
- wavix/types/ten_dlcmno_metadata.py +101 -0
- wavix/types/transaction_status.py +5 -0
- wavix/types/transaction_type.py +50 -0
- wavix/types/transcript_turn.py +46 -0
- wavix/types/transcription_filter.py +35 -0
- wavix/types/transcription_filter_agent.py +36 -0
- wavix/types/transcription_filter_any.py +36 -0
- wavix/types/transcription_filter_client.py +36 -0
- wavix/types/transcription_language.py +5 -0
- wavix/types/transcription_reference.py +29 -0
- wavix/types/transcription_status.py +5 -0
- wavix/types/tts_language.py +5 -0
- wavix/types/tts_voice_id.py +25 -0
- wavix/types/two_factor_verification_check_response.py +22 -0
- wavix/types/two_factor_verification_event.py +47 -0
- wavix/types/two_factor_verification_resend_response.py +38 -0
- wavix/types/two_factor_verification_response.py +51 -0
- wavix/types/unauthorized_error_response.py +32 -0
- wavix/types/unprocessable_entity_error_body.py +27 -0
- wavix/types/validation_error_response.py +27 -0
- wavix/types/voice_campaign_create_request.py +20 -0
- wavix/types/voice_campaign_response.py +41 -0
- wavix/types/voice_campaigns_create_response.py +20 -0
- wavix/types/voice_campaigns_create_response_voice_campaign.py +43 -0
- wavix/types/voice_campaigns_get_response.py +20 -0
- wavix/types/voice_campaigns_get_response_voice_campaign.py +43 -0
- wavix/types/web_rtc_token.py +43 -0
- wavix/types/web_rtc_token_response.py +44 -0
- wavix/types/web_rtc_tokens_list_response.py +30 -0
- wavix/version.py +3 -0
- wavix/voice_campaigns/__init__.py +4 -0
- wavix/voice_campaigns/client.py +197 -0
- wavix/voice_campaigns/raw_client.py +332 -0
- wavix/webrtc/__init__.py +34 -0
- wavix/webrtc/client.py +63 -0
- wavix/webrtc/raw_client.py +13 -0
- wavix/webrtc/tokens/__init__.py +4 -0
- wavix/webrtc/tokens/client.py +432 -0
- wavix/webrtc/tokens/raw_client.py +869 -0
- wavix_python_sdk-1.0.0.dist-info/LICENSE +21 -0
- wavix_python_sdk-1.0.0.dist-info/METADATA +339 -0
- wavix_python_sdk-1.0.0.dist-info/RECORD +497 -0
- wavix_python_sdk-1.0.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import datetime as dt
|
|
4
|
+
import typing
|
|
5
|
+
from json.decoder import JSONDecodeError
|
|
6
|
+
|
|
7
|
+
from ...core.api_error import ApiError
|
|
8
|
+
from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
9
|
+
from ...core.http_response import AsyncHttpResponse, HttpResponse
|
|
10
|
+
from ...core.jsonable_encoder import encode_path_param
|
|
11
|
+
from ...core.parse_error import ParsingError
|
|
12
|
+
from ...core.pydantic_utilities import parse_obj_as
|
|
13
|
+
from ...core.request_options import RequestOptions
|
|
14
|
+
from ...errors.bad_request_error import BadRequestError
|
|
15
|
+
from ...errors.forbidden_error import ForbiddenError
|
|
16
|
+
from ...errors.not_found_error import NotFoundError
|
|
17
|
+
from ...types.list_sessions_response_item import ListSessionsResponseItem
|
|
18
|
+
from pydantic import ValidationError
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class RawSessionsClient:
|
|
22
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
23
|
+
self._client_wrapper = client_wrapper
|
|
24
|
+
|
|
25
|
+
def list(
|
|
26
|
+
self, service_id: str, *, from_: dt.date, to: dt.date, request_options: typing.Optional[RequestOptions] = None
|
|
27
|
+
) -> HttpResponse[typing.List[ListSessionsResponseItem]]:
|
|
28
|
+
"""
|
|
29
|
+
Returns the 2FA verifications for the service identified by `service_id`, within the requested date range.
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
service_id : str
|
|
34
|
+
The unique ID of the 2FA service.
|
|
35
|
+
|
|
36
|
+
from_ : dt.date
|
|
37
|
+
Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
38
|
+
|
|
39
|
+
to : dt.date
|
|
40
|
+
End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
41
|
+
|
|
42
|
+
request_options : typing.Optional[RequestOptions]
|
|
43
|
+
Request-specific configuration.
|
|
44
|
+
|
|
45
|
+
Returns
|
|
46
|
+
-------
|
|
47
|
+
HttpResponse[typing.List[ListSessionsResponseItem]]
|
|
48
|
+
Returns the list of 2FA verifications.
|
|
49
|
+
"""
|
|
50
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
51
|
+
f"v1/two-fa/service/{encode_path_param(service_id)}/sessions",
|
|
52
|
+
method="GET",
|
|
53
|
+
params={
|
|
54
|
+
"from": str(from_),
|
|
55
|
+
"to": str(to),
|
|
56
|
+
},
|
|
57
|
+
request_options=request_options,
|
|
58
|
+
)
|
|
59
|
+
try:
|
|
60
|
+
if 200 <= _response.status_code < 300:
|
|
61
|
+
_data = typing.cast(
|
|
62
|
+
typing.List[ListSessionsResponseItem],
|
|
63
|
+
parse_obj_as(
|
|
64
|
+
type_=typing.List[ListSessionsResponseItem], # type: ignore
|
|
65
|
+
object_=_response.json(),
|
|
66
|
+
),
|
|
67
|
+
)
|
|
68
|
+
return HttpResponse(response=_response, data=_data)
|
|
69
|
+
if _response.status_code == 400:
|
|
70
|
+
raise BadRequestError(
|
|
71
|
+
headers=dict(_response.headers),
|
|
72
|
+
body=typing.cast(
|
|
73
|
+
typing.Any,
|
|
74
|
+
parse_obj_as(
|
|
75
|
+
type_=typing.Any, # type: ignore
|
|
76
|
+
object_=_response.json(),
|
|
77
|
+
),
|
|
78
|
+
),
|
|
79
|
+
)
|
|
80
|
+
if _response.status_code == 403:
|
|
81
|
+
raise ForbiddenError(
|
|
82
|
+
headers=dict(_response.headers),
|
|
83
|
+
body=typing.cast(
|
|
84
|
+
typing.Any,
|
|
85
|
+
parse_obj_as(
|
|
86
|
+
type_=typing.Any, # type: ignore
|
|
87
|
+
object_=_response.json(),
|
|
88
|
+
),
|
|
89
|
+
),
|
|
90
|
+
)
|
|
91
|
+
if _response.status_code == 404:
|
|
92
|
+
raise NotFoundError(
|
|
93
|
+
headers=dict(_response.headers),
|
|
94
|
+
body=typing.cast(
|
|
95
|
+
typing.Any,
|
|
96
|
+
parse_obj_as(
|
|
97
|
+
type_=typing.Any, # type: ignore
|
|
98
|
+
object_=_response.json(),
|
|
99
|
+
),
|
|
100
|
+
),
|
|
101
|
+
)
|
|
102
|
+
_response_json = _response.json()
|
|
103
|
+
except JSONDecodeError:
|
|
104
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
105
|
+
except ValidationError as e:
|
|
106
|
+
raise ParsingError(
|
|
107
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
108
|
+
)
|
|
109
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class AsyncRawSessionsClient:
|
|
113
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
114
|
+
self._client_wrapper = client_wrapper
|
|
115
|
+
|
|
116
|
+
async def list(
|
|
117
|
+
self, service_id: str, *, from_: dt.date, to: dt.date, request_options: typing.Optional[RequestOptions] = None
|
|
118
|
+
) -> AsyncHttpResponse[typing.List[ListSessionsResponseItem]]:
|
|
119
|
+
"""
|
|
120
|
+
Returns the 2FA verifications for the service identified by `service_id`, within the requested date range.
|
|
121
|
+
|
|
122
|
+
Parameters
|
|
123
|
+
----------
|
|
124
|
+
service_id : str
|
|
125
|
+
The unique ID of the 2FA service.
|
|
126
|
+
|
|
127
|
+
from_ : dt.date
|
|
128
|
+
Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
129
|
+
|
|
130
|
+
to : dt.date
|
|
131
|
+
End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
132
|
+
|
|
133
|
+
request_options : typing.Optional[RequestOptions]
|
|
134
|
+
Request-specific configuration.
|
|
135
|
+
|
|
136
|
+
Returns
|
|
137
|
+
-------
|
|
138
|
+
AsyncHttpResponse[typing.List[ListSessionsResponseItem]]
|
|
139
|
+
Returns the list of 2FA verifications.
|
|
140
|
+
"""
|
|
141
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
142
|
+
f"v1/two-fa/service/{encode_path_param(service_id)}/sessions",
|
|
143
|
+
method="GET",
|
|
144
|
+
params={
|
|
145
|
+
"from": str(from_),
|
|
146
|
+
"to": str(to),
|
|
147
|
+
},
|
|
148
|
+
request_options=request_options,
|
|
149
|
+
)
|
|
150
|
+
try:
|
|
151
|
+
if 200 <= _response.status_code < 300:
|
|
152
|
+
_data = typing.cast(
|
|
153
|
+
typing.List[ListSessionsResponseItem],
|
|
154
|
+
parse_obj_as(
|
|
155
|
+
type_=typing.List[ListSessionsResponseItem], # type: ignore
|
|
156
|
+
object_=_response.json(),
|
|
157
|
+
),
|
|
158
|
+
)
|
|
159
|
+
return AsyncHttpResponse(response=_response, data=_data)
|
|
160
|
+
if _response.status_code == 400:
|
|
161
|
+
raise BadRequestError(
|
|
162
|
+
headers=dict(_response.headers),
|
|
163
|
+
body=typing.cast(
|
|
164
|
+
typing.Any,
|
|
165
|
+
parse_obj_as(
|
|
166
|
+
type_=typing.Any, # type: ignore
|
|
167
|
+
object_=_response.json(),
|
|
168
|
+
),
|
|
169
|
+
),
|
|
170
|
+
)
|
|
171
|
+
if _response.status_code == 403:
|
|
172
|
+
raise ForbiddenError(
|
|
173
|
+
headers=dict(_response.headers),
|
|
174
|
+
body=typing.cast(
|
|
175
|
+
typing.Any,
|
|
176
|
+
parse_obj_as(
|
|
177
|
+
type_=typing.Any, # type: ignore
|
|
178
|
+
object_=_response.json(),
|
|
179
|
+
),
|
|
180
|
+
),
|
|
181
|
+
)
|
|
182
|
+
if _response.status_code == 404:
|
|
183
|
+
raise NotFoundError(
|
|
184
|
+
headers=dict(_response.headers),
|
|
185
|
+
body=typing.cast(
|
|
186
|
+
typing.Any,
|
|
187
|
+
parse_obj_as(
|
|
188
|
+
type_=typing.Any, # type: ignore
|
|
189
|
+
object_=_response.json(),
|
|
190
|
+
),
|
|
191
|
+
),
|
|
192
|
+
)
|
|
193
|
+
_response_json = _response.json()
|
|
194
|
+
except JSONDecodeError:
|
|
195
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
196
|
+
except ValidationError as e:
|
|
197
|
+
raise ParsingError(
|
|
198
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
199
|
+
)
|
|
200
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
|
|
5
|
+
import typing
|
|
6
|
+
from importlib import import_module
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from .types import (
|
|
10
|
+
CheckVerificationResponse,
|
|
11
|
+
CreateVerificationResponse,
|
|
12
|
+
ResendVerificationResponse,
|
|
13
|
+
TwoFactorVerificationResendRequestChannel,
|
|
14
|
+
)
|
|
15
|
+
_dynamic_imports: typing.Dict[str, str] = {
|
|
16
|
+
"CheckVerificationResponse": ".types",
|
|
17
|
+
"CreateVerificationResponse": ".types",
|
|
18
|
+
"ResendVerificationResponse": ".types",
|
|
19
|
+
"TwoFactorVerificationResendRequestChannel": ".types",
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def __getattr__(attr_name: str) -> typing.Any:
|
|
24
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
25
|
+
if module_name is None:
|
|
26
|
+
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
|
|
27
|
+
try:
|
|
28
|
+
module = import_module(module_name, __package__)
|
|
29
|
+
if module_name == f".{attr_name}":
|
|
30
|
+
return module
|
|
31
|
+
else:
|
|
32
|
+
return getattr(module, attr_name)
|
|
33
|
+
except ImportError as e:
|
|
34
|
+
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
|
|
35
|
+
except AttributeError as e:
|
|
36
|
+
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def __dir__():
|
|
40
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
41
|
+
return sorted(lazy_attrs)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
__all__ = [
|
|
45
|
+
"CheckVerificationResponse",
|
|
46
|
+
"CreateVerificationResponse",
|
|
47
|
+
"ResendVerificationResponse",
|
|
48
|
+
"TwoFactorVerificationResendRequestChannel",
|
|
49
|
+
]
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
6
|
+
from ...core.request_options import RequestOptions
|
|
7
|
+
from ...types.success_response import SuccessResponse
|
|
8
|
+
from .raw_client import AsyncRawVerificationClient, RawVerificationClient
|
|
9
|
+
from .types.check_verification_response import CheckVerificationResponse
|
|
10
|
+
from .types.create_verification_response import CreateVerificationResponse
|
|
11
|
+
from .types.resend_verification_response import ResendVerificationResponse
|
|
12
|
+
from .types.two_factor_verification_resend_request_channel import TwoFactorVerificationResendRequestChannel
|
|
13
|
+
|
|
14
|
+
# this is used as the default value for optional parameters
|
|
15
|
+
OMIT = typing.cast(typing.Any, ...)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class VerificationClient:
|
|
19
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
20
|
+
self._raw_client = RawVerificationClient(client_wrapper=client_wrapper)
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def with_raw_response(self) -> RawVerificationClient:
|
|
24
|
+
"""
|
|
25
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
26
|
+
|
|
27
|
+
Returns
|
|
28
|
+
-------
|
|
29
|
+
RawVerificationClient
|
|
30
|
+
"""
|
|
31
|
+
return self._raw_client
|
|
32
|
+
|
|
33
|
+
def create(
|
|
34
|
+
self, *, service_id: str, to: str, channel: str, request_options: typing.Optional[RequestOptions] = None
|
|
35
|
+
) -> CreateVerificationResponse:
|
|
36
|
+
"""
|
|
37
|
+
Creates a 2FA verification and sends a one-time password (OTP) to the destination phone number over the selected channel. Requires a 2FA service configured in the Wavix portal; the service is reused to generate and validate OTPs.
|
|
38
|
+
|
|
39
|
+
The verification proceeds through three steps:
|
|
40
|
+
1. Create a verification to generate and send an OTP.
|
|
41
|
+
2. Resend the OTP on the same verification if needed.
|
|
42
|
+
3. Validate the OTP through the check endpoint.
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
service_id : str
|
|
47
|
+
Unique Wavix 2FA Service ID. Available on the Wavix portal.
|
|
48
|
+
|
|
49
|
+
to : str
|
|
50
|
+
End user's phone number to which the verification code will be sent. The phone number must be in E.164 format.
|
|
51
|
+
|
|
52
|
+
channel : str
|
|
53
|
+
Channel used to deliver the verification code. One of `sms` (sent as a text message) or `voice` (read aloud over a phone call).
|
|
54
|
+
|
|
55
|
+
request_options : typing.Optional[RequestOptions]
|
|
56
|
+
Request-specific configuration.
|
|
57
|
+
|
|
58
|
+
Returns
|
|
59
|
+
-------
|
|
60
|
+
CreateVerificationResponse
|
|
61
|
+
Returns the created 2FA verification.
|
|
62
|
+
|
|
63
|
+
Examples
|
|
64
|
+
--------
|
|
65
|
+
from wavix import Wavix
|
|
66
|
+
|
|
67
|
+
client = Wavix(
|
|
68
|
+
token="YOUR_TOKEN",
|
|
69
|
+
)
|
|
70
|
+
client.two_fa.verification.create(
|
|
71
|
+
service_id="7204a030201211ee9fb47d093f2f127c",
|
|
72
|
+
to="447919433768",
|
|
73
|
+
channel="sms",
|
|
74
|
+
)
|
|
75
|
+
"""
|
|
76
|
+
_response = self._raw_client.create(
|
|
77
|
+
service_id=service_id, to=to, channel=channel, request_options=request_options
|
|
78
|
+
)
|
|
79
|
+
return _response.data
|
|
80
|
+
|
|
81
|
+
def resend(
|
|
82
|
+
self,
|
|
83
|
+
session_id: str,
|
|
84
|
+
*,
|
|
85
|
+
channel: TwoFactorVerificationResendRequestChannel,
|
|
86
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
87
|
+
) -> ResendVerificationResponse:
|
|
88
|
+
"""
|
|
89
|
+
Resends the OTP for the verification identified by `session_id` over the specified channel. Previously sent codes are invalidated.
|
|
90
|
+
|
|
91
|
+
Parameters
|
|
92
|
+
----------
|
|
93
|
+
session_id : str
|
|
94
|
+
The unique ID of the 2FA verification session.
|
|
95
|
+
|
|
96
|
+
channel : TwoFactorVerificationResendRequestChannel
|
|
97
|
+
Channel used to resend the verification code. One of `sms` (sent as a text message) or `voice` (read aloud over a phone call).
|
|
98
|
+
|
|
99
|
+
request_options : typing.Optional[RequestOptions]
|
|
100
|
+
Request-specific configuration.
|
|
101
|
+
|
|
102
|
+
Returns
|
|
103
|
+
-------
|
|
104
|
+
ResendVerificationResponse
|
|
105
|
+
Returns the resend result, including the channel used.
|
|
106
|
+
|
|
107
|
+
Examples
|
|
108
|
+
--------
|
|
109
|
+
from wavix import Wavix
|
|
110
|
+
|
|
111
|
+
client = Wavix(
|
|
112
|
+
token="YOUR_TOKEN",
|
|
113
|
+
)
|
|
114
|
+
client.two_fa.verification.resend(
|
|
115
|
+
session_id="2953d4308f2e11ecb75fcdafd6d2d687",
|
|
116
|
+
channel="sms",
|
|
117
|
+
)
|
|
118
|
+
"""
|
|
119
|
+
_response = self._raw_client.resend(session_id, channel=channel, request_options=request_options)
|
|
120
|
+
return _response.data
|
|
121
|
+
|
|
122
|
+
def check(
|
|
123
|
+
self, session_id: str, *, code: str, request_options: typing.Optional[RequestOptions] = None
|
|
124
|
+
) -> CheckVerificationResponse:
|
|
125
|
+
"""
|
|
126
|
+
Validates the OTP submitted by the end user against the verification identified by `session_id`.
|
|
127
|
+
|
|
128
|
+
Parameters
|
|
129
|
+
----------
|
|
130
|
+
session_id : str
|
|
131
|
+
The unique ID of the 2FA verification session.
|
|
132
|
+
|
|
133
|
+
code : str
|
|
134
|
+
The code entered by an end user
|
|
135
|
+
|
|
136
|
+
request_options : typing.Optional[RequestOptions]
|
|
137
|
+
Request-specific configuration.
|
|
138
|
+
|
|
139
|
+
Returns
|
|
140
|
+
-------
|
|
141
|
+
CheckVerificationResponse
|
|
142
|
+
Returns the validation result in `is_valid`.
|
|
143
|
+
|
|
144
|
+
Examples
|
|
145
|
+
--------
|
|
146
|
+
from wavix import Wavix
|
|
147
|
+
|
|
148
|
+
client = Wavix(
|
|
149
|
+
token="YOUR_TOKEN",
|
|
150
|
+
)
|
|
151
|
+
client.two_fa.verification.check(
|
|
152
|
+
session_id="2953d4308f2e11ecb75fcdafd6d2d687",
|
|
153
|
+
code="123456",
|
|
154
|
+
)
|
|
155
|
+
"""
|
|
156
|
+
_response = self._raw_client.check(session_id, code=code, request_options=request_options)
|
|
157
|
+
return _response.data
|
|
158
|
+
|
|
159
|
+
def cancel(self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse:
|
|
160
|
+
"""
|
|
161
|
+
Cancels the 2FA verification identified by `session_id`. No further codes are sent, and previously sent codes can no longer be validated. A new verification is required to send another code.
|
|
162
|
+
|
|
163
|
+
Parameters
|
|
164
|
+
----------
|
|
165
|
+
session_id : str
|
|
166
|
+
The unique ID of the 2FA verification session.
|
|
167
|
+
|
|
168
|
+
request_options : typing.Optional[RequestOptions]
|
|
169
|
+
Request-specific configuration.
|
|
170
|
+
|
|
171
|
+
Returns
|
|
172
|
+
-------
|
|
173
|
+
SuccessResponse
|
|
174
|
+
Returns a success confirmation. The verification is canceled.
|
|
175
|
+
|
|
176
|
+
Examples
|
|
177
|
+
--------
|
|
178
|
+
from wavix import Wavix
|
|
179
|
+
|
|
180
|
+
client = Wavix(
|
|
181
|
+
token="YOUR_TOKEN",
|
|
182
|
+
)
|
|
183
|
+
client.two_fa.verification.cancel(
|
|
184
|
+
session_id="2953d4308f2e11ecb75fcdafd6d2d687",
|
|
185
|
+
)
|
|
186
|
+
"""
|
|
187
|
+
_response = self._raw_client.cancel(session_id, request_options=request_options)
|
|
188
|
+
return _response.data
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class AsyncVerificationClient:
|
|
192
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
193
|
+
self._raw_client = AsyncRawVerificationClient(client_wrapper=client_wrapper)
|
|
194
|
+
|
|
195
|
+
@property
|
|
196
|
+
def with_raw_response(self) -> AsyncRawVerificationClient:
|
|
197
|
+
"""
|
|
198
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
199
|
+
|
|
200
|
+
Returns
|
|
201
|
+
-------
|
|
202
|
+
AsyncRawVerificationClient
|
|
203
|
+
"""
|
|
204
|
+
return self._raw_client
|
|
205
|
+
|
|
206
|
+
async def create(
|
|
207
|
+
self, *, service_id: str, to: str, channel: str, request_options: typing.Optional[RequestOptions] = None
|
|
208
|
+
) -> CreateVerificationResponse:
|
|
209
|
+
"""
|
|
210
|
+
Creates a 2FA verification and sends a one-time password (OTP) to the destination phone number over the selected channel. Requires a 2FA service configured in the Wavix portal; the service is reused to generate and validate OTPs.
|
|
211
|
+
|
|
212
|
+
The verification proceeds through three steps:
|
|
213
|
+
1. Create a verification to generate and send an OTP.
|
|
214
|
+
2. Resend the OTP on the same verification if needed.
|
|
215
|
+
3. Validate the OTP through the check endpoint.
|
|
216
|
+
|
|
217
|
+
Parameters
|
|
218
|
+
----------
|
|
219
|
+
service_id : str
|
|
220
|
+
Unique Wavix 2FA Service ID. Available on the Wavix portal.
|
|
221
|
+
|
|
222
|
+
to : str
|
|
223
|
+
End user's phone number to which the verification code will be sent. The phone number must be in E.164 format.
|
|
224
|
+
|
|
225
|
+
channel : str
|
|
226
|
+
Channel used to deliver the verification code. One of `sms` (sent as a text message) or `voice` (read aloud over a phone call).
|
|
227
|
+
|
|
228
|
+
request_options : typing.Optional[RequestOptions]
|
|
229
|
+
Request-specific configuration.
|
|
230
|
+
|
|
231
|
+
Returns
|
|
232
|
+
-------
|
|
233
|
+
CreateVerificationResponse
|
|
234
|
+
Returns the created 2FA verification.
|
|
235
|
+
|
|
236
|
+
Examples
|
|
237
|
+
--------
|
|
238
|
+
import asyncio
|
|
239
|
+
|
|
240
|
+
from wavix import AsyncWavix
|
|
241
|
+
|
|
242
|
+
client = AsyncWavix(
|
|
243
|
+
token="YOUR_TOKEN",
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
async def main() -> None:
|
|
248
|
+
await client.two_fa.verification.create(
|
|
249
|
+
service_id="7204a030201211ee9fb47d093f2f127c",
|
|
250
|
+
to="447919433768",
|
|
251
|
+
channel="sms",
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
asyncio.run(main())
|
|
256
|
+
"""
|
|
257
|
+
_response = await self._raw_client.create(
|
|
258
|
+
service_id=service_id, to=to, channel=channel, request_options=request_options
|
|
259
|
+
)
|
|
260
|
+
return _response.data
|
|
261
|
+
|
|
262
|
+
async def resend(
|
|
263
|
+
self,
|
|
264
|
+
session_id: str,
|
|
265
|
+
*,
|
|
266
|
+
channel: TwoFactorVerificationResendRequestChannel,
|
|
267
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
268
|
+
) -> ResendVerificationResponse:
|
|
269
|
+
"""
|
|
270
|
+
Resends the OTP for the verification identified by `session_id` over the specified channel. Previously sent codes are invalidated.
|
|
271
|
+
|
|
272
|
+
Parameters
|
|
273
|
+
----------
|
|
274
|
+
session_id : str
|
|
275
|
+
The unique ID of the 2FA verification session.
|
|
276
|
+
|
|
277
|
+
channel : TwoFactorVerificationResendRequestChannel
|
|
278
|
+
Channel used to resend the verification code. One of `sms` (sent as a text message) or `voice` (read aloud over a phone call).
|
|
279
|
+
|
|
280
|
+
request_options : typing.Optional[RequestOptions]
|
|
281
|
+
Request-specific configuration.
|
|
282
|
+
|
|
283
|
+
Returns
|
|
284
|
+
-------
|
|
285
|
+
ResendVerificationResponse
|
|
286
|
+
Returns the resend result, including the channel used.
|
|
287
|
+
|
|
288
|
+
Examples
|
|
289
|
+
--------
|
|
290
|
+
import asyncio
|
|
291
|
+
|
|
292
|
+
from wavix import AsyncWavix
|
|
293
|
+
|
|
294
|
+
client = AsyncWavix(
|
|
295
|
+
token="YOUR_TOKEN",
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
async def main() -> None:
|
|
300
|
+
await client.two_fa.verification.resend(
|
|
301
|
+
session_id="2953d4308f2e11ecb75fcdafd6d2d687",
|
|
302
|
+
channel="sms",
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
asyncio.run(main())
|
|
307
|
+
"""
|
|
308
|
+
_response = await self._raw_client.resend(session_id, channel=channel, request_options=request_options)
|
|
309
|
+
return _response.data
|
|
310
|
+
|
|
311
|
+
async def check(
|
|
312
|
+
self, session_id: str, *, code: str, request_options: typing.Optional[RequestOptions] = None
|
|
313
|
+
) -> CheckVerificationResponse:
|
|
314
|
+
"""
|
|
315
|
+
Validates the OTP submitted by the end user against the verification identified by `session_id`.
|
|
316
|
+
|
|
317
|
+
Parameters
|
|
318
|
+
----------
|
|
319
|
+
session_id : str
|
|
320
|
+
The unique ID of the 2FA verification session.
|
|
321
|
+
|
|
322
|
+
code : str
|
|
323
|
+
The code entered by an end user
|
|
324
|
+
|
|
325
|
+
request_options : typing.Optional[RequestOptions]
|
|
326
|
+
Request-specific configuration.
|
|
327
|
+
|
|
328
|
+
Returns
|
|
329
|
+
-------
|
|
330
|
+
CheckVerificationResponse
|
|
331
|
+
Returns the validation result in `is_valid`.
|
|
332
|
+
|
|
333
|
+
Examples
|
|
334
|
+
--------
|
|
335
|
+
import asyncio
|
|
336
|
+
|
|
337
|
+
from wavix import AsyncWavix
|
|
338
|
+
|
|
339
|
+
client = AsyncWavix(
|
|
340
|
+
token="YOUR_TOKEN",
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
async def main() -> None:
|
|
345
|
+
await client.two_fa.verification.check(
|
|
346
|
+
session_id="2953d4308f2e11ecb75fcdafd6d2d687",
|
|
347
|
+
code="123456",
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
asyncio.run(main())
|
|
352
|
+
"""
|
|
353
|
+
_response = await self._raw_client.check(session_id, code=code, request_options=request_options)
|
|
354
|
+
return _response.data
|
|
355
|
+
|
|
356
|
+
async def cancel(
|
|
357
|
+
self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
358
|
+
) -> SuccessResponse:
|
|
359
|
+
"""
|
|
360
|
+
Cancels the 2FA verification identified by `session_id`. No further codes are sent, and previously sent codes can no longer be validated. A new verification is required to send another code.
|
|
361
|
+
|
|
362
|
+
Parameters
|
|
363
|
+
----------
|
|
364
|
+
session_id : str
|
|
365
|
+
The unique ID of the 2FA verification session.
|
|
366
|
+
|
|
367
|
+
request_options : typing.Optional[RequestOptions]
|
|
368
|
+
Request-specific configuration.
|
|
369
|
+
|
|
370
|
+
Returns
|
|
371
|
+
-------
|
|
372
|
+
SuccessResponse
|
|
373
|
+
Returns a success confirmation. The verification is canceled.
|
|
374
|
+
|
|
375
|
+
Examples
|
|
376
|
+
--------
|
|
377
|
+
import asyncio
|
|
378
|
+
|
|
379
|
+
from wavix import AsyncWavix
|
|
380
|
+
|
|
381
|
+
client = AsyncWavix(
|
|
382
|
+
token="YOUR_TOKEN",
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
async def main() -> None:
|
|
387
|
+
await client.two_fa.verification.cancel(
|
|
388
|
+
session_id="2953d4308f2e11ecb75fcdafd6d2d687",
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
asyncio.run(main())
|
|
393
|
+
"""
|
|
394
|
+
_response = await self._raw_client.cancel(session_id, request_options=request_options)
|
|
395
|
+
return _response.data
|