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,869 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ...core.api_error import ApiError
7
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ...core.jsonable_encoder import encode_path_param
10
+ from ...core.parse_error import ParsingError
11
+ from ...core.pydantic_utilities import parse_obj_as
12
+ from ...core.request_options import RequestOptions
13
+ from ...errors.bad_request_error import BadRequestError
14
+ from ...errors.forbidden_error import ForbiddenError
15
+ from ...errors.not_found_error import NotFoundError
16
+ from ...errors.unauthorized_error import UnauthorizedError
17
+ from ...types.success_response import SuccessResponse
18
+ from ...types.unauthorized_error_response import UnauthorizedErrorResponse
19
+ from ...types.web_rtc_token import WebRtcToken
20
+ from ...types.web_rtc_token_response import WebRtcTokenResponse
21
+ from ...types.web_rtc_tokens_list_response import WebRtcTokensListResponse
22
+ from pydantic import ValidationError
23
+
24
+ # this is used as the default value for optional parameters
25
+ OMIT = typing.cast(typing.Any, ...)
26
+
27
+
28
+ class RawTokensClient:
29
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
30
+ self._client_wrapper = client_wrapper
31
+
32
+ def list(
33
+ self, *, request_options: typing.Optional[RequestOptions] = None
34
+ ) -> HttpResponse[WebRtcTokensListResponse]:
35
+ """
36
+ Returns a paginated list of active Wavix Embeddable widget tokens for the authenticated account.
37
+
38
+ Parameters
39
+ ----------
40
+ request_options : typing.Optional[RequestOptions]
41
+ Request-specific configuration.
42
+
43
+ Returns
44
+ -------
45
+ HttpResponse[WebRtcTokensListResponse]
46
+ Returns a paginated list of active widget tokens.
47
+ """
48
+ _response = self._client_wrapper.httpx_client.request(
49
+ "v2/webrtc/tokens",
50
+ method="GET",
51
+ request_options=request_options,
52
+ )
53
+ try:
54
+ if 200 <= _response.status_code < 300:
55
+ _data = typing.cast(
56
+ WebRtcTokensListResponse,
57
+ parse_obj_as(
58
+ type_=WebRtcTokensListResponse, # type: ignore
59
+ object_=_response.json(),
60
+ ),
61
+ )
62
+ return HttpResponse(response=_response, data=_data)
63
+ if _response.status_code == 401:
64
+ raise UnauthorizedError(
65
+ headers=dict(_response.headers),
66
+ body=typing.cast(
67
+ UnauthorizedErrorResponse,
68
+ parse_obj_as(
69
+ type_=UnauthorizedErrorResponse, # type: ignore
70
+ object_=_response.json(),
71
+ ),
72
+ ),
73
+ )
74
+ if _response.status_code == 403:
75
+ raise ForbiddenError(
76
+ headers=dict(_response.headers),
77
+ body=typing.cast(
78
+ typing.Any,
79
+ parse_obj_as(
80
+ type_=typing.Any, # type: ignore
81
+ object_=_response.json(),
82
+ ),
83
+ ),
84
+ )
85
+ _response_json = _response.json()
86
+ except JSONDecodeError:
87
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
88
+ except ValidationError as e:
89
+ raise ParsingError(
90
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
91
+ )
92
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
93
+
94
+ def create(
95
+ self,
96
+ *,
97
+ sip_trunk: str,
98
+ payload: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
99
+ ttl: typing.Optional[int] = OMIT,
100
+ request_options: typing.Optional[RequestOptions] = None,
101
+ ) -> HttpResponse[WebRtcTokenResponse]:
102
+ """
103
+ Creates a Wavix Embeddable widget token that authenticates a browser-based softphone session. The token expires after `ttl` seconds.
104
+
105
+ Parameters
106
+ ----------
107
+ sip_trunk : str
108
+ Name of the SIP trunk the token authenticates against.
109
+
110
+ payload : typing.Optional[typing.Dict[str, typing.Any]]
111
+ Arbitrary client-defined data to associate with the token.
112
+
113
+ ttl : typing.Optional[int]
114
+ Time to live in seconds. Pass `null` for no expiration.
115
+
116
+ request_options : typing.Optional[RequestOptions]
117
+ Request-specific configuration.
118
+
119
+ Returns
120
+ -------
121
+ HttpResponse[WebRtcTokenResponse]
122
+ Returns the created widget token.
123
+ """
124
+ _response = self._client_wrapper.httpx_client.request(
125
+ "v2/webrtc/tokens",
126
+ method="POST",
127
+ json={
128
+ "sip_trunk": sip_trunk,
129
+ "payload": payload,
130
+ "ttl": ttl,
131
+ },
132
+ headers={
133
+ "content-type": "application/json",
134
+ },
135
+ request_options=request_options,
136
+ omit=OMIT,
137
+ )
138
+ try:
139
+ if 200 <= _response.status_code < 300:
140
+ _data = typing.cast(
141
+ WebRtcTokenResponse,
142
+ parse_obj_as(
143
+ type_=WebRtcTokenResponse, # type: ignore
144
+ object_=_response.json(),
145
+ ),
146
+ )
147
+ return HttpResponse(response=_response, data=_data)
148
+ if _response.status_code == 400:
149
+ raise BadRequestError(
150
+ headers=dict(_response.headers),
151
+ body=typing.cast(
152
+ typing.Any,
153
+ parse_obj_as(
154
+ type_=typing.Any, # type: ignore
155
+ object_=_response.json(),
156
+ ),
157
+ ),
158
+ )
159
+ if _response.status_code == 401:
160
+ raise UnauthorizedError(
161
+ headers=dict(_response.headers),
162
+ body=typing.cast(
163
+ UnauthorizedErrorResponse,
164
+ parse_obj_as(
165
+ type_=UnauthorizedErrorResponse, # type: ignore
166
+ object_=_response.json(),
167
+ ),
168
+ ),
169
+ )
170
+ if _response.status_code == 403:
171
+ raise ForbiddenError(
172
+ headers=dict(_response.headers),
173
+ body=typing.cast(
174
+ typing.Any,
175
+ parse_obj_as(
176
+ type_=typing.Any, # type: ignore
177
+ object_=_response.json(),
178
+ ),
179
+ ),
180
+ )
181
+ if _response.status_code == 404:
182
+ raise NotFoundError(
183
+ headers=dict(_response.headers),
184
+ body=typing.cast(
185
+ typing.Any,
186
+ parse_obj_as(
187
+ type_=typing.Any, # type: ignore
188
+ object_=_response.json(),
189
+ ),
190
+ ),
191
+ )
192
+ _response_json = _response.json()
193
+ except JSONDecodeError:
194
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
195
+ except ValidationError as e:
196
+ raise ParsingError(
197
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
198
+ )
199
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
200
+
201
+ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[WebRtcToken]:
202
+ """
203
+ Returns the Wavix Embeddable widget token identified by `id`.
204
+
205
+ Parameters
206
+ ----------
207
+ id : str
208
+ The UUID of the widget token to retrieve.
209
+
210
+ request_options : typing.Optional[RequestOptions]
211
+ Request-specific configuration.
212
+
213
+ Returns
214
+ -------
215
+ HttpResponse[WebRtcToken]
216
+ Returns the widget token.
217
+ """
218
+ _response = self._client_wrapper.httpx_client.request(
219
+ f"v2/webrtc/tokens/{encode_path_param(id)}",
220
+ method="GET",
221
+ request_options=request_options,
222
+ )
223
+ try:
224
+ if 200 <= _response.status_code < 300:
225
+ _data = typing.cast(
226
+ WebRtcToken,
227
+ parse_obj_as(
228
+ type_=WebRtcToken, # type: ignore
229
+ object_=_response.json(),
230
+ ),
231
+ )
232
+ return HttpResponse(response=_response, data=_data)
233
+ if _response.status_code == 401:
234
+ raise UnauthorizedError(
235
+ headers=dict(_response.headers),
236
+ body=typing.cast(
237
+ UnauthorizedErrorResponse,
238
+ parse_obj_as(
239
+ type_=UnauthorizedErrorResponse, # type: ignore
240
+ object_=_response.json(),
241
+ ),
242
+ ),
243
+ )
244
+ if _response.status_code == 403:
245
+ raise ForbiddenError(
246
+ headers=dict(_response.headers),
247
+ body=typing.cast(
248
+ typing.Any,
249
+ parse_obj_as(
250
+ type_=typing.Any, # type: ignore
251
+ object_=_response.json(),
252
+ ),
253
+ ),
254
+ )
255
+ if _response.status_code == 404:
256
+ raise NotFoundError(
257
+ headers=dict(_response.headers),
258
+ body=typing.cast(
259
+ typing.Any,
260
+ parse_obj_as(
261
+ type_=typing.Any, # type: ignore
262
+ object_=_response.json(),
263
+ ),
264
+ ),
265
+ )
266
+ _response_json = _response.json()
267
+ except JSONDecodeError:
268
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
269
+ except ValidationError as e:
270
+ raise ParsingError(
271
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
272
+ )
273
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
274
+
275
+ def update(
276
+ self, id: str, *, payload: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None
277
+ ) -> HttpResponse[WebRtcToken]:
278
+ """
279
+ Updates the `payload` carried by the Wavix Embeddable widget token identified by `id`.
280
+
281
+ Parameters
282
+ ----------
283
+ id : str
284
+ The UUID of the widget token to update.
285
+
286
+ payload : typing.Dict[str, typing.Any]
287
+ Arbitrary client-defined data to associate with the token, replacing the existing payload.
288
+
289
+ request_options : typing.Optional[RequestOptions]
290
+ Request-specific configuration.
291
+
292
+ Returns
293
+ -------
294
+ HttpResponse[WebRtcToken]
295
+ Returns the updated widget token.
296
+ """
297
+ _response = self._client_wrapper.httpx_client.request(
298
+ f"v2/webrtc/tokens/{encode_path_param(id)}",
299
+ method="PUT",
300
+ json={
301
+ "payload": payload,
302
+ },
303
+ headers={
304
+ "content-type": "application/json",
305
+ },
306
+ request_options=request_options,
307
+ omit=OMIT,
308
+ )
309
+ try:
310
+ if 200 <= _response.status_code < 300:
311
+ _data = typing.cast(
312
+ WebRtcToken,
313
+ parse_obj_as(
314
+ type_=WebRtcToken, # type: ignore
315
+ object_=_response.json(),
316
+ ),
317
+ )
318
+ return HttpResponse(response=_response, data=_data)
319
+ if _response.status_code == 400:
320
+ raise BadRequestError(
321
+ headers=dict(_response.headers),
322
+ body=typing.cast(
323
+ typing.Any,
324
+ parse_obj_as(
325
+ type_=typing.Any, # type: ignore
326
+ object_=_response.json(),
327
+ ),
328
+ ),
329
+ )
330
+ if _response.status_code == 401:
331
+ raise UnauthorizedError(
332
+ headers=dict(_response.headers),
333
+ body=typing.cast(
334
+ UnauthorizedErrorResponse,
335
+ parse_obj_as(
336
+ type_=UnauthorizedErrorResponse, # type: ignore
337
+ object_=_response.json(),
338
+ ),
339
+ ),
340
+ )
341
+ if _response.status_code == 403:
342
+ raise ForbiddenError(
343
+ headers=dict(_response.headers),
344
+ body=typing.cast(
345
+ typing.Any,
346
+ parse_obj_as(
347
+ type_=typing.Any, # type: ignore
348
+ object_=_response.json(),
349
+ ),
350
+ ),
351
+ )
352
+ if _response.status_code == 404:
353
+ raise NotFoundError(
354
+ headers=dict(_response.headers),
355
+ body=typing.cast(
356
+ typing.Any,
357
+ parse_obj_as(
358
+ type_=typing.Any, # type: ignore
359
+ object_=_response.json(),
360
+ ),
361
+ ),
362
+ )
363
+ _response_json = _response.json()
364
+ except JSONDecodeError:
365
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
366
+ except ValidationError as e:
367
+ raise ParsingError(
368
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
369
+ )
370
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
371
+
372
+ def delete(
373
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
374
+ ) -> HttpResponse[SuccessResponse]:
375
+ """
376
+ Deletes the Wavix Embeddable widget token identified by `id`. The token can no longer authenticate widget sessions, and any active session using it ends.
377
+
378
+ Parameters
379
+ ----------
380
+ id : str
381
+ The UUID of the widget token to delete.
382
+
383
+ request_options : typing.Optional[RequestOptions]
384
+ Request-specific configuration.
385
+
386
+ Returns
387
+ -------
388
+ HttpResponse[SuccessResponse]
389
+ Returns a success confirmation. The widget token is deleted.
390
+ """
391
+ _response = self._client_wrapper.httpx_client.request(
392
+ f"v2/webrtc/tokens/{encode_path_param(id)}",
393
+ method="DELETE",
394
+ request_options=request_options,
395
+ )
396
+ try:
397
+ if 200 <= _response.status_code < 300:
398
+ _data = typing.cast(
399
+ SuccessResponse,
400
+ parse_obj_as(
401
+ type_=SuccessResponse, # type: ignore
402
+ object_=_response.json(),
403
+ ),
404
+ )
405
+ return HttpResponse(response=_response, data=_data)
406
+ if _response.status_code == 401:
407
+ raise UnauthorizedError(
408
+ headers=dict(_response.headers),
409
+ body=typing.cast(
410
+ UnauthorizedErrorResponse,
411
+ parse_obj_as(
412
+ type_=UnauthorizedErrorResponse, # type: ignore
413
+ object_=_response.json(),
414
+ ),
415
+ ),
416
+ )
417
+ if _response.status_code == 403:
418
+ raise ForbiddenError(
419
+ headers=dict(_response.headers),
420
+ body=typing.cast(
421
+ typing.Any,
422
+ parse_obj_as(
423
+ type_=typing.Any, # type: ignore
424
+ object_=_response.json(),
425
+ ),
426
+ ),
427
+ )
428
+ if _response.status_code == 404:
429
+ raise NotFoundError(
430
+ headers=dict(_response.headers),
431
+ body=typing.cast(
432
+ typing.Any,
433
+ parse_obj_as(
434
+ type_=typing.Any, # type: ignore
435
+ object_=_response.json(),
436
+ ),
437
+ ),
438
+ )
439
+ _response_json = _response.json()
440
+ except JSONDecodeError:
441
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
442
+ except ValidationError as e:
443
+ raise ParsingError(
444
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
445
+ )
446
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
447
+
448
+
449
+ class AsyncRawTokensClient:
450
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
451
+ self._client_wrapper = client_wrapper
452
+
453
+ async def list(
454
+ self, *, request_options: typing.Optional[RequestOptions] = None
455
+ ) -> AsyncHttpResponse[WebRtcTokensListResponse]:
456
+ """
457
+ Returns a paginated list of active Wavix Embeddable widget tokens for the authenticated account.
458
+
459
+ Parameters
460
+ ----------
461
+ request_options : typing.Optional[RequestOptions]
462
+ Request-specific configuration.
463
+
464
+ Returns
465
+ -------
466
+ AsyncHttpResponse[WebRtcTokensListResponse]
467
+ Returns a paginated list of active widget tokens.
468
+ """
469
+ _response = await self._client_wrapper.httpx_client.request(
470
+ "v2/webrtc/tokens",
471
+ method="GET",
472
+ request_options=request_options,
473
+ )
474
+ try:
475
+ if 200 <= _response.status_code < 300:
476
+ _data = typing.cast(
477
+ WebRtcTokensListResponse,
478
+ parse_obj_as(
479
+ type_=WebRtcTokensListResponse, # type: ignore
480
+ object_=_response.json(),
481
+ ),
482
+ )
483
+ return AsyncHttpResponse(response=_response, data=_data)
484
+ if _response.status_code == 401:
485
+ raise UnauthorizedError(
486
+ headers=dict(_response.headers),
487
+ body=typing.cast(
488
+ UnauthorizedErrorResponse,
489
+ parse_obj_as(
490
+ type_=UnauthorizedErrorResponse, # type: ignore
491
+ object_=_response.json(),
492
+ ),
493
+ ),
494
+ )
495
+ if _response.status_code == 403:
496
+ raise ForbiddenError(
497
+ headers=dict(_response.headers),
498
+ body=typing.cast(
499
+ typing.Any,
500
+ parse_obj_as(
501
+ type_=typing.Any, # type: ignore
502
+ object_=_response.json(),
503
+ ),
504
+ ),
505
+ )
506
+ _response_json = _response.json()
507
+ except JSONDecodeError:
508
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
509
+ except ValidationError as e:
510
+ raise ParsingError(
511
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
512
+ )
513
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
514
+
515
+ async def create(
516
+ self,
517
+ *,
518
+ sip_trunk: str,
519
+ payload: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
520
+ ttl: typing.Optional[int] = OMIT,
521
+ request_options: typing.Optional[RequestOptions] = None,
522
+ ) -> AsyncHttpResponse[WebRtcTokenResponse]:
523
+ """
524
+ Creates a Wavix Embeddable widget token that authenticates a browser-based softphone session. The token expires after `ttl` seconds.
525
+
526
+ Parameters
527
+ ----------
528
+ sip_trunk : str
529
+ Name of the SIP trunk the token authenticates against.
530
+
531
+ payload : typing.Optional[typing.Dict[str, typing.Any]]
532
+ Arbitrary client-defined data to associate with the token.
533
+
534
+ ttl : typing.Optional[int]
535
+ Time to live in seconds. Pass `null` for no expiration.
536
+
537
+ request_options : typing.Optional[RequestOptions]
538
+ Request-specific configuration.
539
+
540
+ Returns
541
+ -------
542
+ AsyncHttpResponse[WebRtcTokenResponse]
543
+ Returns the created widget token.
544
+ """
545
+ _response = await self._client_wrapper.httpx_client.request(
546
+ "v2/webrtc/tokens",
547
+ method="POST",
548
+ json={
549
+ "sip_trunk": sip_trunk,
550
+ "payload": payload,
551
+ "ttl": ttl,
552
+ },
553
+ headers={
554
+ "content-type": "application/json",
555
+ },
556
+ request_options=request_options,
557
+ omit=OMIT,
558
+ )
559
+ try:
560
+ if 200 <= _response.status_code < 300:
561
+ _data = typing.cast(
562
+ WebRtcTokenResponse,
563
+ parse_obj_as(
564
+ type_=WebRtcTokenResponse, # type: ignore
565
+ object_=_response.json(),
566
+ ),
567
+ )
568
+ return AsyncHttpResponse(response=_response, data=_data)
569
+ if _response.status_code == 400:
570
+ raise BadRequestError(
571
+ headers=dict(_response.headers),
572
+ body=typing.cast(
573
+ typing.Any,
574
+ parse_obj_as(
575
+ type_=typing.Any, # type: ignore
576
+ object_=_response.json(),
577
+ ),
578
+ ),
579
+ )
580
+ if _response.status_code == 401:
581
+ raise UnauthorizedError(
582
+ headers=dict(_response.headers),
583
+ body=typing.cast(
584
+ UnauthorizedErrorResponse,
585
+ parse_obj_as(
586
+ type_=UnauthorizedErrorResponse, # type: ignore
587
+ object_=_response.json(),
588
+ ),
589
+ ),
590
+ )
591
+ if _response.status_code == 403:
592
+ raise ForbiddenError(
593
+ headers=dict(_response.headers),
594
+ body=typing.cast(
595
+ typing.Any,
596
+ parse_obj_as(
597
+ type_=typing.Any, # type: ignore
598
+ object_=_response.json(),
599
+ ),
600
+ ),
601
+ )
602
+ if _response.status_code == 404:
603
+ raise NotFoundError(
604
+ headers=dict(_response.headers),
605
+ body=typing.cast(
606
+ typing.Any,
607
+ parse_obj_as(
608
+ type_=typing.Any, # type: ignore
609
+ object_=_response.json(),
610
+ ),
611
+ ),
612
+ )
613
+ _response_json = _response.json()
614
+ except JSONDecodeError:
615
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
616
+ except ValidationError as e:
617
+ raise ParsingError(
618
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
619
+ )
620
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
621
+
622
+ async def get(
623
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
624
+ ) -> AsyncHttpResponse[WebRtcToken]:
625
+ """
626
+ Returns the Wavix Embeddable widget token identified by `id`.
627
+
628
+ Parameters
629
+ ----------
630
+ id : str
631
+ The UUID of the widget token to retrieve.
632
+
633
+ request_options : typing.Optional[RequestOptions]
634
+ Request-specific configuration.
635
+
636
+ Returns
637
+ -------
638
+ AsyncHttpResponse[WebRtcToken]
639
+ Returns the widget token.
640
+ """
641
+ _response = await self._client_wrapper.httpx_client.request(
642
+ f"v2/webrtc/tokens/{encode_path_param(id)}",
643
+ method="GET",
644
+ request_options=request_options,
645
+ )
646
+ try:
647
+ if 200 <= _response.status_code < 300:
648
+ _data = typing.cast(
649
+ WebRtcToken,
650
+ parse_obj_as(
651
+ type_=WebRtcToken, # type: ignore
652
+ object_=_response.json(),
653
+ ),
654
+ )
655
+ return AsyncHttpResponse(response=_response, data=_data)
656
+ if _response.status_code == 401:
657
+ raise UnauthorizedError(
658
+ headers=dict(_response.headers),
659
+ body=typing.cast(
660
+ UnauthorizedErrorResponse,
661
+ parse_obj_as(
662
+ type_=UnauthorizedErrorResponse, # type: ignore
663
+ object_=_response.json(),
664
+ ),
665
+ ),
666
+ )
667
+ if _response.status_code == 403:
668
+ raise ForbiddenError(
669
+ headers=dict(_response.headers),
670
+ body=typing.cast(
671
+ typing.Any,
672
+ parse_obj_as(
673
+ type_=typing.Any, # type: ignore
674
+ object_=_response.json(),
675
+ ),
676
+ ),
677
+ )
678
+ if _response.status_code == 404:
679
+ raise NotFoundError(
680
+ headers=dict(_response.headers),
681
+ body=typing.cast(
682
+ typing.Any,
683
+ parse_obj_as(
684
+ type_=typing.Any, # type: ignore
685
+ object_=_response.json(),
686
+ ),
687
+ ),
688
+ )
689
+ _response_json = _response.json()
690
+ except JSONDecodeError:
691
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
692
+ except ValidationError as e:
693
+ raise ParsingError(
694
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
695
+ )
696
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
697
+
698
+ async def update(
699
+ self, id: str, *, payload: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None
700
+ ) -> AsyncHttpResponse[WebRtcToken]:
701
+ """
702
+ Updates the `payload` carried by the Wavix Embeddable widget token identified by `id`.
703
+
704
+ Parameters
705
+ ----------
706
+ id : str
707
+ The UUID of the widget token to update.
708
+
709
+ payload : typing.Dict[str, typing.Any]
710
+ Arbitrary client-defined data to associate with the token, replacing the existing payload.
711
+
712
+ request_options : typing.Optional[RequestOptions]
713
+ Request-specific configuration.
714
+
715
+ Returns
716
+ -------
717
+ AsyncHttpResponse[WebRtcToken]
718
+ Returns the updated widget token.
719
+ """
720
+ _response = await self._client_wrapper.httpx_client.request(
721
+ f"v2/webrtc/tokens/{encode_path_param(id)}",
722
+ method="PUT",
723
+ json={
724
+ "payload": payload,
725
+ },
726
+ headers={
727
+ "content-type": "application/json",
728
+ },
729
+ request_options=request_options,
730
+ omit=OMIT,
731
+ )
732
+ try:
733
+ if 200 <= _response.status_code < 300:
734
+ _data = typing.cast(
735
+ WebRtcToken,
736
+ parse_obj_as(
737
+ type_=WebRtcToken, # type: ignore
738
+ object_=_response.json(),
739
+ ),
740
+ )
741
+ return AsyncHttpResponse(response=_response, data=_data)
742
+ if _response.status_code == 400:
743
+ raise BadRequestError(
744
+ headers=dict(_response.headers),
745
+ body=typing.cast(
746
+ typing.Any,
747
+ parse_obj_as(
748
+ type_=typing.Any, # type: ignore
749
+ object_=_response.json(),
750
+ ),
751
+ ),
752
+ )
753
+ if _response.status_code == 401:
754
+ raise UnauthorizedError(
755
+ headers=dict(_response.headers),
756
+ body=typing.cast(
757
+ UnauthorizedErrorResponse,
758
+ parse_obj_as(
759
+ type_=UnauthorizedErrorResponse, # type: ignore
760
+ object_=_response.json(),
761
+ ),
762
+ ),
763
+ )
764
+ if _response.status_code == 403:
765
+ raise ForbiddenError(
766
+ headers=dict(_response.headers),
767
+ body=typing.cast(
768
+ typing.Any,
769
+ parse_obj_as(
770
+ type_=typing.Any, # type: ignore
771
+ object_=_response.json(),
772
+ ),
773
+ ),
774
+ )
775
+ if _response.status_code == 404:
776
+ raise NotFoundError(
777
+ headers=dict(_response.headers),
778
+ body=typing.cast(
779
+ typing.Any,
780
+ parse_obj_as(
781
+ type_=typing.Any, # type: ignore
782
+ object_=_response.json(),
783
+ ),
784
+ ),
785
+ )
786
+ _response_json = _response.json()
787
+ except JSONDecodeError:
788
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
789
+ except ValidationError as e:
790
+ raise ParsingError(
791
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
792
+ )
793
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
794
+
795
+ async def delete(
796
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
797
+ ) -> AsyncHttpResponse[SuccessResponse]:
798
+ """
799
+ Deletes the Wavix Embeddable widget token identified by `id`. The token can no longer authenticate widget sessions, and any active session using it ends.
800
+
801
+ Parameters
802
+ ----------
803
+ id : str
804
+ The UUID of the widget token to delete.
805
+
806
+ request_options : typing.Optional[RequestOptions]
807
+ Request-specific configuration.
808
+
809
+ Returns
810
+ -------
811
+ AsyncHttpResponse[SuccessResponse]
812
+ Returns a success confirmation. The widget token is deleted.
813
+ """
814
+ _response = await self._client_wrapper.httpx_client.request(
815
+ f"v2/webrtc/tokens/{encode_path_param(id)}",
816
+ method="DELETE",
817
+ request_options=request_options,
818
+ )
819
+ try:
820
+ if 200 <= _response.status_code < 300:
821
+ _data = typing.cast(
822
+ SuccessResponse,
823
+ parse_obj_as(
824
+ type_=SuccessResponse, # type: ignore
825
+ object_=_response.json(),
826
+ ),
827
+ )
828
+ return AsyncHttpResponse(response=_response, data=_data)
829
+ if _response.status_code == 401:
830
+ raise UnauthorizedError(
831
+ headers=dict(_response.headers),
832
+ body=typing.cast(
833
+ UnauthorizedErrorResponse,
834
+ parse_obj_as(
835
+ type_=UnauthorizedErrorResponse, # type: ignore
836
+ object_=_response.json(),
837
+ ),
838
+ ),
839
+ )
840
+ if _response.status_code == 403:
841
+ raise ForbiddenError(
842
+ headers=dict(_response.headers),
843
+ body=typing.cast(
844
+ typing.Any,
845
+ parse_obj_as(
846
+ type_=typing.Any, # type: ignore
847
+ object_=_response.json(),
848
+ ),
849
+ ),
850
+ )
851
+ if _response.status_code == 404:
852
+ raise NotFoundError(
853
+ headers=dict(_response.headers),
854
+ body=typing.cast(
855
+ typing.Any,
856
+ parse_obj_as(
857
+ type_=typing.Any, # type: ignore
858
+ object_=_response.json(),
859
+ ),
860
+ ),
861
+ )
862
+ _response_json = _response.json()
863
+ except JSONDecodeError:
864
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
865
+ except ValidationError as e:
866
+ raise ParsingError(
867
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
868
+ )
869
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)