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.
Files changed (497) hide show
  1. wavix/__init__.py +801 -0
  2. wavix/_default_clients.py +32 -0
  3. wavix/api_keys/__init__.py +4 -0
  4. wavix/api_keys/client.py +764 -0
  5. wavix/api_keys/raw_client.py +1191 -0
  6. wavix/billing/__init__.py +41 -0
  7. wavix/billing/client.py +82 -0
  8. wavix/billing/invoices/__init__.py +34 -0
  9. wavix/billing/invoices/client.py +203 -0
  10. wavix/billing/invoices/raw_client.py +302 -0
  11. wavix/billing/invoices/types/__init__.py +34 -0
  12. wavix/billing/invoices/types/list_invoices_response.py +31 -0
  13. wavix/billing/raw_client.py +13 -0
  14. wavix/billing/transactions/__init__.py +34 -0
  15. wavix/billing/transactions/client.py +209 -0
  16. wavix/billing/transactions/raw_client.py +253 -0
  17. wavix/billing/transactions/types/__init__.py +34 -0
  18. wavix/billing/transactions/types/list_transactions_response.py +31 -0
  19. wavix/buy/__init__.py +61 -0
  20. wavix/buy/cities/__init__.py +34 -0
  21. wavix/buy/cities/client.py +134 -0
  22. wavix/buy/cities/raw_client.py +201 -0
  23. wavix/buy/cities/types/__init__.py +34 -0
  24. wavix/buy/cities/types/list_cities_response.py +23 -0
  25. wavix/buy/client.py +139 -0
  26. wavix/buy/countries/__init__.py +34 -0
  27. wavix/buy/countries/client.py +116 -0
  28. wavix/buy/countries/raw_client.py +144 -0
  29. wavix/buy/countries/types/__init__.py +34 -0
  30. wavix/buy/countries/types/list_countries_response.py +23 -0
  31. wavix/buy/numbers/__init__.py +34 -0
  32. wavix/buy/numbers/client.py +168 -0
  33. wavix/buy/numbers/raw_client.py +227 -0
  34. wavix/buy/numbers/types/__init__.py +34 -0
  35. wavix/buy/numbers/types/list_numbers_response.py +26 -0
  36. wavix/buy/raw_client.py +13 -0
  37. wavix/buy/region_cities/__init__.py +34 -0
  38. wavix/buy/region_cities/client.py +142 -0
  39. wavix/buy/region_cities/raw_client.py +207 -0
  40. wavix/buy/region_cities/types/__init__.py +34 -0
  41. wavix/buy/region_cities/types/list_region_cities_response.py +23 -0
  42. wavix/buy/regions/__init__.py +34 -0
  43. wavix/buy/regions/client.py +132 -0
  44. wavix/buy/regions/raw_client.py +222 -0
  45. wavix/buy/regions/types/__init__.py +34 -0
  46. wavix/buy/regions/types/list_regions_response.py +23 -0
  47. wavix/call_control/__init__.py +40 -0
  48. wavix/call_control/audio/__init__.py +4 -0
  49. wavix/call_control/audio/client.py +195 -0
  50. wavix/call_control/audio/raw_client.py +333 -0
  51. wavix/call_control/client.py +796 -0
  52. wavix/call_control/raw_client.py +1224 -0
  53. wavix/call_control/streams/__init__.py +4 -0
  54. wavix/call_control/streams/client.py +250 -0
  55. wavix/call_control/streams/raw_client.py +325 -0
  56. wavix/call_control/types/__init__.py +38 -0
  57. wavix/call_control/types/call_dtmf_collect_request_prompt.py +33 -0
  58. wavix/call_control/types/call_dtmf_collect_request_prompt_say.py +31 -0
  59. wavix/call_recording/__init__.py +4 -0
  60. wavix/call_recording/client.py +430 -0
  61. wavix/call_recording/raw_client.py +726 -0
  62. wavix/call_webhooks/__init__.py +37 -0
  63. wavix/call_webhooks/client.py +281 -0
  64. wavix/call_webhooks/raw_client.py +529 -0
  65. wavix/call_webhooks/types/__init__.py +38 -0
  66. wavix/call_webhooks/types/call_webhooks_create_request_event_type.py +5 -0
  67. wavix/call_webhooks/types/delete_call_webhooks_request_event_type.py +5 -0
  68. wavix/cart/__init__.py +38 -0
  69. wavix/cart/client.py +327 -0
  70. wavix/cart/raw_client.py +629 -0
  71. wavix/cart/types/__init__.py +40 -0
  72. wavix/cart/types/checkout_cart_response.py +22 -0
  73. wavix/cart/types/get_cart_response.py +29 -0
  74. wavix/cart/types/remove_cart_response.py +22 -0
  75. wavix/cdrs/__init__.py +39 -0
  76. wavix/cdrs/client.py +968 -0
  77. wavix/cdrs/raw_client.py +1176 -0
  78. wavix/cdrs/transcription/__init__.py +4 -0
  79. wavix/cdrs/transcription/client.py +112 -0
  80. wavix/cdrs/transcription/raw_client.py +156 -0
  81. wavix/cdrs/types/__init__.py +38 -0
  82. wavix/cdrs/types/cdr_search_request_disposition.py +5 -0
  83. wavix/cdrs/types/cdr_search_request_type.py +5 -0
  84. wavix/client.py +578 -0
  85. wavix/core/__init__.py +127 -0
  86. wavix/core/api_error.py +23 -0
  87. wavix/core/client_wrapper.py +119 -0
  88. wavix/core/datetime_utils.py +70 -0
  89. wavix/core/file.py +67 -0
  90. wavix/core/force_multipart.py +18 -0
  91. wavix/core/http_client.py +839 -0
  92. wavix/core/http_response.py +59 -0
  93. wavix/core/http_sse/__init__.py +42 -0
  94. wavix/core/http_sse/_api.py +170 -0
  95. wavix/core/http_sse/_decoders.py +61 -0
  96. wavix/core/http_sse/_exceptions.py +7 -0
  97. wavix/core/http_sse/_models.py +17 -0
  98. wavix/core/jsonable_encoder.py +120 -0
  99. wavix/core/logging.py +107 -0
  100. wavix/core/parse_error.py +36 -0
  101. wavix/core/pydantic_utilities.py +508 -0
  102. wavix/core/query_encoder.py +58 -0
  103. wavix/core/remove_none_from_dict.py +11 -0
  104. wavix/core/request_options.py +35 -0
  105. wavix/core/serialization.py +347 -0
  106. wavix/environment.py +7 -0
  107. wavix/errors/__init__.py +56 -0
  108. wavix/errors/bad_request_error.py +10 -0
  109. wavix/errors/forbidden_error.py +10 -0
  110. wavix/errors/not_found_error.py +10 -0
  111. wavix/errors/service_unavailable_error.py +11 -0
  112. wavix/errors/too_many_requests_error.py +11 -0
  113. wavix/errors/unauthorized_error.py +11 -0
  114. wavix/errors/unprocessable_entity_error.py +10 -0
  115. wavix/link_shortener/__init__.py +34 -0
  116. wavix/link_shortener/client.py +194 -0
  117. wavix/link_shortener/metrics/__init__.py +4 -0
  118. wavix/link_shortener/metrics/client.py +198 -0
  119. wavix/link_shortener/metrics/raw_client.py +218 -0
  120. wavix/link_shortener/raw_client.py +265 -0
  121. wavix/number_validator/__init__.py +35 -0
  122. wavix/number_validator/client.py +271 -0
  123. wavix/number_validator/raw_client.py +383 -0
  124. wavix/number_validator/results/__init__.py +4 -0
  125. wavix/number_validator/results/client.py +114 -0
  126. wavix/number_validator/results/raw_client.py +156 -0
  127. wavix/number_validator/types/__init__.py +34 -0
  128. wavix/number_validator/types/get_number_validator_response.py +112 -0
  129. wavix/numbers/__init__.py +39 -0
  130. wavix/numbers/client.py +689 -0
  131. wavix/numbers/papers/__init__.py +4 -0
  132. wavix/numbers/papers/client.py +155 -0
  133. wavix/numbers/papers/raw_client.py +208 -0
  134. wavix/numbers/raw_client.py +1000 -0
  135. wavix/numbers/types/__init__.py +38 -0
  136. wavix/numbers/types/bulk_update_numbers_response.py +23 -0
  137. wavix/numbers/types/delete_numbers_response.py +22 -0
  138. wavix/profile/__init__.py +41 -0
  139. wavix/profile/client.py +308 -0
  140. wavix/profile/config/__init__.py +34 -0
  141. wavix/profile/config/client.py +100 -0
  142. wavix/profile/config/raw_client.py +124 -0
  143. wavix/profile/config/types/__init__.py +34 -0
  144. wavix/profile/config/types/get_config_response.py +25 -0
  145. wavix/profile/raw_client.py +360 -0
  146. wavix/profile/types/__init__.py +38 -0
  147. wavix/profile/types/profile_update_request_company_info.py +48 -0
  148. wavix/profile/types/profile_update_request_company_info_industry.py +22 -0
  149. wavix/py.typed +0 -0
  150. wavix/sip_trunks/__init__.py +4 -0
  151. wavix/sip_trunks/client.py +927 -0
  152. wavix/sip_trunks/raw_client.py +1324 -0
  153. wavix/sms_and_mms/__init__.py +66 -0
  154. wavix/sms_and_mms/client.py +101 -0
  155. wavix/sms_and_mms/messages/__init__.py +49 -0
  156. wavix/sms_and_mms/messages/client.py +625 -0
  157. wavix/sms_and_mms/messages/raw_client.py +793 -0
  158. wavix/sms_and_mms/messages/types/__init__.py +47 -0
  159. wavix/sms_and_mms/messages/types/get_messages_response.py +97 -0
  160. wavix/sms_and_mms/messages/types/list_all_messages_request_message_type.py +5 -0
  161. wavix/sms_and_mms/messages/types/list_messages_request_message_type.py +5 -0
  162. wavix/sms_and_mms/messages/types/list_messages_response.py +26 -0
  163. wavix/sms_and_mms/opt_outs/__init__.py +34 -0
  164. wavix/sms_and_mms/opt_outs/client.py +277 -0
  165. wavix/sms_and_mms/opt_outs/raw_client.py +438 -0
  166. wavix/sms_and_mms/opt_outs/types/__init__.py +34 -0
  167. wavix/sms_and_mms/opt_outs/types/create_opt_outs_response.py +22 -0
  168. wavix/sms_and_mms/raw_client.py +13 -0
  169. wavix/sms_and_mms/sender_ids/__init__.py +38 -0
  170. wavix/sms_and_mms/sender_ids/client.py +391 -0
  171. wavix/sms_and_mms/sender_ids/raw_client.py +617 -0
  172. wavix/sms_and_mms/sender_ids/types/__init__.py +40 -0
  173. wavix/sms_and_mms/sender_ids/types/delete_sender_ids_response.py +22 -0
  174. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_monthly_volume.py +7 -0
  175. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_usecase.py +5 -0
  176. wavix/speech_analytics/__init__.py +52 -0
  177. wavix/speech_analytics/client.py +372 -0
  178. wavix/speech_analytics/file/__init__.py +4 -0
  179. wavix/speech_analytics/file/client.py +114 -0
  180. wavix/speech_analytics/file/raw_client.py +148 -0
  181. wavix/speech_analytics/raw_client.py +527 -0
  182. wavix/speech_analytics/types/__init__.py +47 -0
  183. wavix/speech_analytics/types/create_speech_analytics_response.py +32 -0
  184. wavix/speech_analytics/types/get_speech_analytics_response.py +77 -0
  185. wavix/speech_analytics/types/get_speech_analytics_response_language.py +5 -0
  186. wavix/speech_analytics/types/get_speech_analytics_response_status.py +5 -0
  187. wavix/sub_accounts/__init__.py +52 -0
  188. wavix/sub_accounts/client.py +442 -0
  189. wavix/sub_accounts/raw_client.py +775 -0
  190. wavix/sub_accounts/transactions/__init__.py +4 -0
  191. wavix/sub_accounts/transactions/client.py +198 -0
  192. wavix/sub_accounts/transactions/raw_client.py +265 -0
  193. wavix/sub_accounts/types/__init__.py +47 -0
  194. wavix/sub_accounts/types/list_sub_accounts_request_status.py +5 -0
  195. wavix/sub_accounts/types/sub_accounts_create_request_default_destinations.py +31 -0
  196. wavix/sub_accounts/types/sub_accounts_update_request_default_destinations.py +31 -0
  197. wavix/sub_accounts/types/sub_accounts_update_request_status.py +5 -0
  198. wavix/ten_dlc/__init__.py +167 -0
  199. wavix/ten_dlc/brand_appeals/__init__.py +34 -0
  200. wavix/ten_dlc/brand_appeals/client.py +244 -0
  201. wavix/ten_dlc/brand_appeals/raw_client.py +390 -0
  202. wavix/ten_dlc/brand_appeals/types/__init__.py +34 -0
  203. wavix/ten_dlc/brand_appeals/types/create_brand_appeals_response.py +22 -0
  204. wavix/ten_dlc/brand_evidence/__init__.py +37 -0
  205. wavix/ten_dlc/brand_evidence/client.py +365 -0
  206. wavix/ten_dlc/brand_evidence/raw_client.py +599 -0
  207. wavix/ten_dlc/brand_evidence/types/__init__.py +38 -0
  208. wavix/ten_dlc/brand_evidence/types/delete_brand_evidence_response.py +22 -0
  209. wavix/ten_dlc/brand_evidence/types/upload_brand_evidence_response.py +38 -0
  210. wavix/ten_dlc/brand_vetting_appeals/__init__.py +34 -0
  211. wavix/ten_dlc/brand_vetting_appeals/client.py +258 -0
  212. wavix/ten_dlc/brand_vetting_appeals/raw_client.py +381 -0
  213. wavix/ten_dlc/brand_vetting_appeals/types/__init__.py +36 -0
  214. wavix/ten_dlc/brand_vetting_appeals/types/create_brand_vetting_appeals_response.py +22 -0
  215. wavix/ten_dlc/brand_vettings/__init__.py +4 -0
  216. wavix/ten_dlc/brand_vettings/client.py +325 -0
  217. wavix/ten_dlc/brand_vettings/raw_client.py +518 -0
  218. wavix/ten_dlc/brands/__init__.py +85 -0
  219. wavix/ten_dlc/brands/client.py +870 -0
  220. wavix/ten_dlc/brands/raw_client.py +1263 -0
  221. wavix/ten_dlc/brands/types/__init__.py +83 -0
  222. wavix/ten_dlc/brands/types/create_brands_response.py +143 -0
  223. wavix/ten_dlc/brands/types/create_brands_response_entity_type.py +7 -0
  224. wavix/ten_dlc/brands/types/create_brands_response_status.py +7 -0
  225. wavix/ten_dlc/brands/types/delete_brands_response.py +22 -0
  226. wavix/ten_dlc/brands/types/get_brands_response.py +143 -0
  227. wavix/ten_dlc/brands/types/get_brands_response_entity_type.py +7 -0
  228. wavix/ten_dlc/brands/types/get_brands_response_status.py +7 -0
  229. wavix/ten_dlc/brands/types/list_brands_response.py +33 -0
  230. wavix/ten_dlc/brands/types/list_brands_response_pagination.py +41 -0
  231. wavix/ten_dlc/brands/types/qualify_usecase_brands_request_use_case.py +35 -0
  232. wavix/ten_dlc/brands/types/qualify_usecase_brands_response.py +33 -0
  233. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_entity_type.py +7 -0
  234. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_vertical.py +18 -0
  235. wavix/ten_dlc/brands/types/update_brands_response.py +143 -0
  236. wavix/ten_dlc/brands/types/update_brands_response_entity_type.py +7 -0
  237. wavix/ten_dlc/brands/types/update_brands_response_status.py +7 -0
  238. wavix/ten_dlc/campaign_numbers/__init__.py +38 -0
  239. wavix/ten_dlc/campaign_numbers/client.py +304 -0
  240. wavix/ten_dlc/campaign_numbers/raw_client.py +448 -0
  241. wavix/ten_dlc/campaign_numbers/types/__init__.py +40 -0
  242. wavix/ten_dlc/campaign_numbers/types/link_campaign_numbers_response.py +22 -0
  243. wavix/ten_dlc/campaign_numbers/types/list_campaign_numbers_response.py +33 -0
  244. wavix/ten_dlc/campaign_numbers/types/unlink_campaign_numbers_response.py +22 -0
  245. wavix/ten_dlc/campaigns/__init__.py +64 -0
  246. wavix/ten_dlc/campaigns/client.py +1493 -0
  247. wavix/ten_dlc/campaigns/raw_client.py +1840 -0
  248. wavix/ten_dlc/campaigns/types/__init__.py +62 -0
  249. wavix/ten_dlc/campaigns/types/create_campaigns_response.py +211 -0
  250. wavix/ten_dlc/campaigns/types/delete_campaigns_response.py +22 -0
  251. wavix/ten_dlc/campaigns/types/get_campaigns_response.py +211 -0
  252. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response.py +33 -0
  253. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response_pagination.py +41 -0
  254. wavix/ten_dlc/campaigns/types/list_campaigns_response.py +33 -0
  255. wavix/ten_dlc/campaigns/types/list_campaigns_response_pagination.py +41 -0
  256. wavix/ten_dlc/campaigns/types/ten_dlc_campaign_update_request_usecase.py +15 -0
  257. wavix/ten_dlc/campaigns/types/update_campaigns_response.py +211 -0
  258. wavix/ten_dlc/client.py +196 -0
  259. wavix/ten_dlc/raw_client.py +13 -0
  260. wavix/ten_dlc/subscriptions/__init__.py +37 -0
  261. wavix/ten_dlc/subscriptions/client.py +271 -0
  262. wavix/ten_dlc/subscriptions/raw_client.py +398 -0
  263. wavix/ten_dlc/subscriptions/types/__init__.py +38 -0
  264. wavix/ten_dlc/subscriptions/types/create_subscriptions_response.py +31 -0
  265. wavix/ten_dlc/subscriptions/types/delete_subscriptions_response.py +22 -0
  266. wavix/two_fa/__init__.py +56 -0
  267. wavix/two_fa/client.py +101 -0
  268. wavix/two_fa/events/__init__.py +4 -0
  269. wavix/two_fa/events/client.py +114 -0
  270. wavix/two_fa/events/raw_client.py +156 -0
  271. wavix/two_fa/raw_client.py +13 -0
  272. wavix/two_fa/sessions/__init__.py +4 -0
  273. wavix/two_fa/sessions/client.py +142 -0
  274. wavix/two_fa/sessions/raw_client.py +200 -0
  275. wavix/two_fa/verification/__init__.py +49 -0
  276. wavix/two_fa/verification/client.py +395 -0
  277. wavix/two_fa/verification/raw_client.py +664 -0
  278. wavix/two_fa/verification/types/__init__.py +47 -0
  279. wavix/two_fa/verification/types/check_verification_response.py +22 -0
  280. wavix/two_fa/verification/types/create_verification_response.py +51 -0
  281. wavix/two_fa/verification/types/resend_verification_response.py +38 -0
  282. wavix/two_fa/verification/types/two_factor_verification_resend_request_channel.py +5 -0
  283. wavix/types/__init__.py +637 -0
  284. wavix/types/account_error_response.py +31 -0
  285. wavix/types/account_limits.py +32 -0
  286. wavix/types/allowed_i_ps.py +7 -0
  287. wavix/types/allowed_i_ps_item.py +27 -0
  288. wavix/types/api_key.py +138 -0
  289. wavix/types/api_key_calls_scope_permission.py +30 -0
  290. wavix/types/api_key_calls_scope_permission_allow.py +5 -0
  291. wavix/types/api_key_scope_permission.py +30 -0
  292. wavix/types/api_key_scope_permission_allow.py +5 -0
  293. wavix/types/available_number.py +97 -0
  294. wavix/types/available_number_list_response.py +26 -0
  295. wavix/types/bad_request_error_body.py +27 -0
  296. wavix/types/billing_transaction_list_response.py +31 -0
  297. wavix/types/brand_status_updated_webhook.py +28 -0
  298. wavix/types/brand_status_updated_webhook_status.py +7 -0
  299. wavix/types/call.py +92 -0
  300. wavix/types/call_control_validation_error_response.py +34 -0
  301. wavix/types/call_create_response.py +92 -0
  302. wavix/types/call_create_response_event_type.py +18 -0
  303. wavix/types/call_direction.py +5 -0
  304. wavix/types/call_disposition.py +5 -0
  305. wavix/types/call_event_type.py +18 -0
  306. wavix/types/call_list_response.py +28 -0
  307. wavix/types/call_recording_list_response.py +28 -0
  308. wavix/types/call_response.py +24 -0
  309. wavix/types/call_status_webhook.py +70 -0
  310. wavix/types/call_status_webhook_direction.py +5 -0
  311. wavix/types/call_stream_channel.py +5 -0
  312. wavix/types/call_stream_response.py +27 -0
  313. wavix/types/call_stream_type.py +5 -0
  314. wavix/types/call_webhook.py +37 -0
  315. wavix/types/call_webhook_event_type.py +5 -0
  316. wavix/types/call_webhook_list_response.py +10 -0
  317. wavix/types/call_webhook_list_response_item.py +28 -0
  318. wavix/types/call_webhook_list_response_item_event_type.py +5 -0
  319. wavix/types/campaign_status_updated_webhook.py +41 -0
  320. wavix/types/campaign_status_updated_webhook_status.py +7 -0
  321. wavix/types/cart_response.py +29 -0
  322. wavix/types/cdr.py +97 -0
  323. wavix/types/cdr_list_response.py +26 -0
  324. wavix/types/cdr_response.py +104 -0
  325. wavix/types/cdr_transcription_completed_webhook.py +28 -0
  326. wavix/types/cdr_transcription_completed_webhook_status.py +5 -0
  327. wavix/types/cdr_transcription_response.py +74 -0
  328. wavix/types/cdr_transcription_search_response.py +26 -0
  329. wavix/types/cdr_with_transcription.py +97 -0
  330. wavix/types/city.py +32 -0
  331. wavix/types/city_list_response.py +23 -0
  332. wavix/types/country.py +32 -0
  333. wavix/types/country_has_no_regions_error_response.py +27 -0
  334. wavix/types/country_list_response.py +23 -0
  335. wavix/types/document_type.py +32 -0
  336. wavix/types/document_type_id.py +7 -0
  337. wavix/types/file_transcript_response.py +30 -0
  338. wavix/types/file_transcript_turn.py +46 -0
  339. wavix/types/file_transcription_completed_webhook.py +32 -0
  340. wavix/types/file_transcription_response.py +77 -0
  341. wavix/types/file_transcription_response_language.py +5 -0
  342. wavix/types/file_transcription_response_status.py +5 -0
  343. wavix/types/financial_transaction.py +57 -0
  344. wavix/types/forbidden_error_response.py +27 -0
  345. wavix/types/inbound_call_destination.py +53 -0
  346. wavix/types/inbound_call_transport.py +6 -0
  347. wavix/types/inbound_message.py +46 -0
  348. wavix/types/invalid_recording.py +31 -0
  349. wavix/types/invoice.py +42 -0
  350. wavix/types/invoice_list_response.py +31 -0
  351. wavix/types/list_brand_evidence_response.py +23 -0
  352. wavix/types/list_sessions_response_item.py +58 -0
  353. wavix/types/message.py +103 -0
  354. wavix/types/message_body.py +29 -0
  355. wavix/types/message_create_request.py +46 -0
  356. wavix/types/message_delivery_status.py +8 -0
  357. wavix/types/message_list_response.py +26 -0
  358. wavix/types/message_response.py +97 -0
  359. wavix/types/messages_delivery_report.py +81 -0
  360. wavix/types/not_found_error_body.py +27 -0
  361. wavix/types/not_found_error_response.py +27 -0
  362. wavix/types/number.py +160 -0
  363. wavix/types/number_destination.py +38 -0
  364. wavix/types/number_document.py +58 -0
  365. wavix/types/number_list_response.py +32 -0
  366. wavix/types/number_status_updated_webhook.py +38 -0
  367. wavix/types/number_status_updated_webhook_status.py +5 -0
  368. wavix/types/number_validator_create_bulk_response.py +10 -0
  369. wavix/types/number_validator_create_bulk_response_request_id.py +26 -0
  370. wavix/types/on_call_event_payload.py +34 -0
  371. wavix/types/on_call_event_payload_type.py +5 -0
  372. wavix/types/opt_out.py +27 -0
  373. wavix/types/opt_out_item.py +38 -0
  374. wavix/types/opt_outs_list_response.py +26 -0
  375. wavix/types/pagination.py +37 -0
  376. wavix/types/phone_lookup_details.py +32 -0
  377. wavix/types/phone_number_validation_type.py +5 -0
  378. wavix/types/phone_validation_batch_response.py +38 -0
  379. wavix/types/phone_validation_batch_result_response.py +41 -0
  380. wavix/types/phone_validation_response.py +112 -0
  381. wavix/types/phone_validation_result_response.py +115 -0
  382. wavix/types/profile_config_response.py +25 -0
  383. wavix/types/profile_response.py +79 -0
  384. wavix/types/profile_response_company_info.py +53 -0
  385. wavix/types/profile_response_company_info_country.py +31 -0
  386. wavix/types/profile_response_company_info_industry.py +22 -0
  387. wavix/types/profile_response_default_destinations_item.py +27 -0
  388. wavix/types/record_not_found_error_response.py +27 -0
  389. wavix/types/recording.py +57 -0
  390. wavix/types/recording_deleted_error_response.py +38 -0
  391. wavix/types/region.py +31 -0
  392. wavix/types/region_list_response.py +23 -0
  393. wavix/types/send_messages_response.py +100 -0
  394. wavix/types/sender_id.py +48 -0
  395. wavix/types/sender_id_details.py +44 -0
  396. wavix/types/sender_id_list_response.py +23 -0
  397. wavix/types/sender_id_response.py +48 -0
  398. wavix/types/sender_id_response_type.py +5 -0
  399. wavix/types/sender_id_type.py +5 -0
  400. wavix/types/short_link_metrics_item.py +69 -0
  401. wavix/types/short_link_metrics_response.py +26 -0
  402. wavix/types/short_link_response.py +22 -0
  403. wavix/types/sip_trunk_create_request.py +132 -0
  404. wavix/types/sip_trunk_create_request_allowed_ips_item.py +22 -0
  405. wavix/types/sip_trunk_create_request_host_request.py +26 -0
  406. wavix/types/sip_trunk_list_response.py +26 -0
  407. wavix/types/sip_trunk_response.py +145 -0
  408. wavix/types/sip_trunk_summary.py +114 -0
  409. wavix/types/sip_trunk_summary_host_request.py +31 -0
  410. wavix/types/sub_accounts_list_response.py +26 -0
  411. wavix/types/sub_accounts_transactions_list_response.py +30 -0
  412. wavix/types/sub_accounts_transactions_list_response_transactions_item.py +48 -0
  413. wavix/types/sub_organization_response.py +59 -0
  414. wavix/types/sub_organization_response_default_destinations.py +31 -0
  415. wavix/types/sub_organization_response_status.py +5 -0
  416. wavix/types/submit_file_transcription_response.py +32 -0
  417. wavix/types/success_response.py +22 -0
  418. wavix/types/tcr_error_message.py +27 -0
  419. wavix/types/tcr_feedback.py +23 -0
  420. wavix/types/tcr_feedback_category.py +47 -0
  421. wavix/types/ten_dlc_brand.py +143 -0
  422. wavix/types/ten_dlc_brand_appeal.py +54 -0
  423. wavix/types/ten_dlc_brand_appeal_create_request.py +36 -0
  424. wavix/types/ten_dlc_brand_appeal_outcome.py +38 -0
  425. wavix/types/ten_dlc_brand_appeal_outcome_feedback.py +27 -0
  426. wavix/types/ten_dlc_brand_appeal_outcome_vetting_status.py +7 -0
  427. wavix/types/ten_dlc_brand_create_request.py +8 -0
  428. wavix/types/ten_dlc_brand_create_request_entity_type.py +7 -0
  429. wavix/types/ten_dlc_brand_create_request_stock_exchange.py +26 -0
  430. wavix/types/ten_dlc_brand_create_request_stock_exchange_entity_type.py +7 -0
  431. wavix/types/ten_dlc_brand_create_request_vertical.py +18 -0
  432. wavix/types/ten_dlc_brand_create_request_zero.py +24 -0
  433. wavix/types/ten_dlc_brand_create_request_zero_entity_type.py +5 -0
  434. wavix/types/ten_dlc_brand_entity_type.py +7 -0
  435. wavix/types/ten_dlc_brand_evidence.py +38 -0
  436. wavix/types/ten_dlc_brand_identity_verification_status.py +7 -0
  437. wavix/types/ten_dlc_brand_list_response.py +33 -0
  438. wavix/types/ten_dlc_brand_list_response_pagination.py +41 -0
  439. wavix/types/ten_dlc_brand_qualification_result.py +33 -0
  440. wavix/types/ten_dlc_brand_status.py +7 -0
  441. wavix/types/ten_dlc_brand_vetting.py +71 -0
  442. wavix/types/ten_dlc_brand_vetting_appeal.py +78 -0
  443. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome.py +37 -0
  444. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome_feedback.py +26 -0
  445. wavix/types/ten_dlc_brand_vetting_appeal_outcome.py +33 -0
  446. wavix/types/ten_dlc_brand_vetting_appeal_outcome_feedback.py +26 -0
  447. wavix/types/ten_dlc_brand_vetting_appeal_outcome_reason.py +22 -0
  448. wavix/types/ten_dlc_campaign.py +211 -0
  449. wavix/types/ten_dlc_campaign_list_response.py +33 -0
  450. wavix/types/ten_dlc_campaign_list_response_pagination.py +41 -0
  451. wavix/types/ten_dlc_campaign_nudge_request.py +32 -0
  452. wavix/types/ten_dlc_campaign_number.py +27 -0
  453. wavix/types/ten_dlc_campaign_number_list_response.py +33 -0
  454. wavix/types/ten_dlc_event_subscription.py +31 -0
  455. wavix/types/ten_dlcmno_metadata.py +101 -0
  456. wavix/types/transaction_status.py +5 -0
  457. wavix/types/transaction_type.py +50 -0
  458. wavix/types/transcript_turn.py +46 -0
  459. wavix/types/transcription_filter.py +35 -0
  460. wavix/types/transcription_filter_agent.py +36 -0
  461. wavix/types/transcription_filter_any.py +36 -0
  462. wavix/types/transcription_filter_client.py +36 -0
  463. wavix/types/transcription_language.py +5 -0
  464. wavix/types/transcription_reference.py +29 -0
  465. wavix/types/transcription_status.py +5 -0
  466. wavix/types/tts_language.py +5 -0
  467. wavix/types/tts_voice_id.py +25 -0
  468. wavix/types/two_factor_verification_check_response.py +22 -0
  469. wavix/types/two_factor_verification_event.py +47 -0
  470. wavix/types/two_factor_verification_resend_response.py +38 -0
  471. wavix/types/two_factor_verification_response.py +51 -0
  472. wavix/types/unauthorized_error_response.py +32 -0
  473. wavix/types/unprocessable_entity_error_body.py +27 -0
  474. wavix/types/validation_error_response.py +27 -0
  475. wavix/types/voice_campaign_create_request.py +20 -0
  476. wavix/types/voice_campaign_response.py +41 -0
  477. wavix/types/voice_campaigns_create_response.py +20 -0
  478. wavix/types/voice_campaigns_create_response_voice_campaign.py +43 -0
  479. wavix/types/voice_campaigns_get_response.py +20 -0
  480. wavix/types/voice_campaigns_get_response_voice_campaign.py +43 -0
  481. wavix/types/web_rtc_token.py +43 -0
  482. wavix/types/web_rtc_token_response.py +44 -0
  483. wavix/types/web_rtc_tokens_list_response.py +30 -0
  484. wavix/version.py +3 -0
  485. wavix/voice_campaigns/__init__.py +4 -0
  486. wavix/voice_campaigns/client.py +197 -0
  487. wavix/voice_campaigns/raw_client.py +332 -0
  488. wavix/webrtc/__init__.py +34 -0
  489. wavix/webrtc/client.py +63 -0
  490. wavix/webrtc/raw_client.py +13 -0
  491. wavix/webrtc/tokens/__init__.py +4 -0
  492. wavix/webrtc/tokens/client.py +432 -0
  493. wavix/webrtc/tokens/raw_client.py +869 -0
  494. wavix_python_sdk-1.0.0.dist-info/LICENSE +21 -0
  495. wavix_python_sdk-1.0.0.dist-info/METADATA +339 -0
  496. wavix_python_sdk-1.0.0.dist-info/RECORD +497 -0
  497. 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