telnyx 3.8.0__py3-none-any.whl → 3.10.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.
Potentially problematic release.
This version of telnyx might be problematic. Click here for more details.
- telnyx/_streaming.py +4 -6
- telnyx/_version.py +1 -1
- telnyx/resources/__init__.py +3 -1
- telnyx/resources/calls/actions.py +8 -0
- telnyx/resources/calls/calls.py +8 -0
- telnyx/resources/recordings/recordings.py +2 -2
- telnyx/resources/webhooks.py +107 -13
- telnyx/types/call_dial_params.py +3 -0
- telnyx/types/calls/action_transfer_params.py +3 -0
- telnyx/types/recording_list_params.py +7 -1
- {telnyx-3.8.0.dist-info → telnyx-3.10.0.dist-info}/METADATA +4 -2
- {telnyx-3.8.0.dist-info → telnyx-3.10.0.dist-info}/RECORD +14 -14
- {telnyx-3.8.0.dist-info → telnyx-3.10.0.dist-info}/WHEEL +0 -0
- {telnyx-3.8.0.dist-info → telnyx-3.10.0.dist-info}/licenses/LICENSE +0 -0
telnyx/_streaming.py
CHANGED
|
@@ -57,9 +57,8 @@ class Stream(Generic[_T]):
|
|
|
57
57
|
for sse in iterator:
|
|
58
58
|
yield process_data(data=sse.json(), cast_to=cast_to, response=response)
|
|
59
59
|
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
...
|
|
60
|
+
# As we might not fully consume the response stream, we need to close it explicitly
|
|
61
|
+
response.close()
|
|
63
62
|
|
|
64
63
|
def __enter__(self) -> Self:
|
|
65
64
|
return self
|
|
@@ -121,9 +120,8 @@ class AsyncStream(Generic[_T]):
|
|
|
121
120
|
async for sse in iterator:
|
|
122
121
|
yield process_data(data=sse.json(), cast_to=cast_to, response=response)
|
|
123
122
|
|
|
124
|
-
#
|
|
125
|
-
|
|
126
|
-
...
|
|
123
|
+
# As we might not fully consume the response stream, we need to close it explicitly
|
|
124
|
+
await response.aclose()
|
|
127
125
|
|
|
128
126
|
async def __aenter__(self) -> Self:
|
|
129
127
|
return self
|
telnyx/_version.py
CHANGED
telnyx/resources/__init__.py
CHANGED
|
@@ -224,7 +224,7 @@ from .portouts import (
|
|
|
224
224
|
PortoutsResourceWithStreamingResponse,
|
|
225
225
|
AsyncPortoutsResourceWithStreamingResponse,
|
|
226
226
|
)
|
|
227
|
-
from .webhooks import WebhooksResource, AsyncWebhooksResource
|
|
227
|
+
from .webhooks import TelnyxWebhook, WebhooksResource, AsyncWebhooksResource, TelnyxWebhookVerificationError
|
|
228
228
|
from .wireless import (
|
|
229
229
|
WirelessResource,
|
|
230
230
|
AsyncWirelessResource,
|
|
@@ -1237,6 +1237,8 @@ __all__ = [
|
|
|
1237
1237
|
"AsyncOAuthGrantsResourceWithStreamingResponse",
|
|
1238
1238
|
"WebhooksResource",
|
|
1239
1239
|
"AsyncWebhooksResource",
|
|
1240
|
+
"TelnyxWebhook",
|
|
1241
|
+
"TelnyxWebhookVerificationError",
|
|
1240
1242
|
"AccessIPAddressResource",
|
|
1241
1243
|
"AsyncAccessIPAddressResource",
|
|
1242
1244
|
"AccessIPAddressResourceWithRawResponse",
|
|
@@ -3120,6 +3120,7 @@ class ActionsResource(SyncAPIResource):
|
|
|
3120
3120
|
sip_auth_password: str | Omit = omit,
|
|
3121
3121
|
sip_auth_username: str | Omit = omit,
|
|
3122
3122
|
sip_headers: Iterable[SipHeaderParam] | Omit = omit,
|
|
3123
|
+
sip_region: Literal["US", "Europe", "Canada", "Australia", "Middle East"] | Omit = omit,
|
|
3123
3124
|
sip_transport_protocol: Literal["UDP", "TCP", "TLS"] | Omit = omit,
|
|
3124
3125
|
sound_modifications: SoundModificationsParam | Omit = omit,
|
|
3125
3126
|
target_leg_client_state: str | Omit = omit,
|
|
@@ -3241,6 +3242,8 @@ class ActionsResource(SyncAPIResource):
|
|
|
3241
3242
|
sip_headers: SIP headers to be added to the SIP INVITE. Currently only User-to-User header is
|
|
3242
3243
|
supported.
|
|
3243
3244
|
|
|
3245
|
+
sip_region: Defines the SIP region to be used for the call.
|
|
3246
|
+
|
|
3244
3247
|
sip_transport_protocol: Defines SIP transport protocol to be used on the call.
|
|
3245
3248
|
|
|
3246
3249
|
sound_modifications: Use this field to modify sound effects, for example adjust the pitch.
|
|
@@ -3305,6 +3308,7 @@ class ActionsResource(SyncAPIResource):
|
|
|
3305
3308
|
"sip_auth_password": sip_auth_password,
|
|
3306
3309
|
"sip_auth_username": sip_auth_username,
|
|
3307
3310
|
"sip_headers": sip_headers,
|
|
3311
|
+
"sip_region": sip_region,
|
|
3308
3312
|
"sip_transport_protocol": sip_transport_protocol,
|
|
3309
3313
|
"sound_modifications": sound_modifications,
|
|
3310
3314
|
"target_leg_client_state": target_leg_client_state,
|
|
@@ -6365,6 +6369,7 @@ class AsyncActionsResource(AsyncAPIResource):
|
|
|
6365
6369
|
sip_auth_password: str | Omit = omit,
|
|
6366
6370
|
sip_auth_username: str | Omit = omit,
|
|
6367
6371
|
sip_headers: Iterable[SipHeaderParam] | Omit = omit,
|
|
6372
|
+
sip_region: Literal["US", "Europe", "Canada", "Australia", "Middle East"] | Omit = omit,
|
|
6368
6373
|
sip_transport_protocol: Literal["UDP", "TCP", "TLS"] | Omit = omit,
|
|
6369
6374
|
sound_modifications: SoundModificationsParam | Omit = omit,
|
|
6370
6375
|
target_leg_client_state: str | Omit = omit,
|
|
@@ -6486,6 +6491,8 @@ class AsyncActionsResource(AsyncAPIResource):
|
|
|
6486
6491
|
sip_headers: SIP headers to be added to the SIP INVITE. Currently only User-to-User header is
|
|
6487
6492
|
supported.
|
|
6488
6493
|
|
|
6494
|
+
sip_region: Defines the SIP region to be used for the call.
|
|
6495
|
+
|
|
6489
6496
|
sip_transport_protocol: Defines SIP transport protocol to be used on the call.
|
|
6490
6497
|
|
|
6491
6498
|
sound_modifications: Use this field to modify sound effects, for example adjust the pitch.
|
|
@@ -6550,6 +6557,7 @@ class AsyncActionsResource(AsyncAPIResource):
|
|
|
6550
6557
|
"sip_auth_password": sip_auth_password,
|
|
6551
6558
|
"sip_auth_username": sip_auth_username,
|
|
6552
6559
|
"sip_headers": sip_headers,
|
|
6560
|
+
"sip_region": sip_region,
|
|
6553
6561
|
"sip_transport_protocol": sip_transport_protocol,
|
|
6554
6562
|
"sound_modifications": sound_modifications,
|
|
6555
6563
|
"target_leg_client_state": target_leg_client_state,
|
telnyx/resources/calls/calls.py
CHANGED
|
@@ -113,6 +113,7 @@ class CallsResource(SyncAPIResource):
|
|
|
113
113
|
sip_auth_password: str | Omit = omit,
|
|
114
114
|
sip_auth_username: str | Omit = omit,
|
|
115
115
|
sip_headers: Iterable[SipHeaderParam] | Omit = omit,
|
|
116
|
+
sip_region: Literal["US", "Europe", "Canada", "Australia", "Middle East"] | Omit = omit,
|
|
116
117
|
sip_transport_protocol: Literal["UDP", "TCP", "TLS"] | Omit = omit,
|
|
117
118
|
sound_modifications: SoundModificationsParam | Omit = omit,
|
|
118
119
|
stream_bidirectional_codec: StreamBidirectionalCodec | Omit = omit,
|
|
@@ -276,6 +277,8 @@ class CallsResource(SyncAPIResource):
|
|
|
276
277
|
sip_headers: SIP headers to be added to the SIP INVITE request. Currently only User-to-User
|
|
277
278
|
header is supported.
|
|
278
279
|
|
|
280
|
+
sip_region: Defines the SIP region to be used for the call.
|
|
281
|
+
|
|
279
282
|
sip_transport_protocol: Defines SIP transport protocol to be used on the call.
|
|
280
283
|
|
|
281
284
|
sound_modifications: Use this field to modify sound effects, for example adjust the pitch.
|
|
@@ -372,6 +375,7 @@ class CallsResource(SyncAPIResource):
|
|
|
372
375
|
"sip_auth_password": sip_auth_password,
|
|
373
376
|
"sip_auth_username": sip_auth_username,
|
|
374
377
|
"sip_headers": sip_headers,
|
|
378
|
+
"sip_region": sip_region,
|
|
375
379
|
"sip_transport_protocol": sip_transport_protocol,
|
|
376
380
|
"sound_modifications": sound_modifications,
|
|
377
381
|
"stream_bidirectional_codec": stream_bidirectional_codec,
|
|
@@ -496,6 +500,7 @@ class AsyncCallsResource(AsyncAPIResource):
|
|
|
496
500
|
sip_auth_password: str | Omit = omit,
|
|
497
501
|
sip_auth_username: str | Omit = omit,
|
|
498
502
|
sip_headers: Iterable[SipHeaderParam] | Omit = omit,
|
|
503
|
+
sip_region: Literal["US", "Europe", "Canada", "Australia", "Middle East"] | Omit = omit,
|
|
499
504
|
sip_transport_protocol: Literal["UDP", "TCP", "TLS"] | Omit = omit,
|
|
500
505
|
sound_modifications: SoundModificationsParam | Omit = omit,
|
|
501
506
|
stream_bidirectional_codec: StreamBidirectionalCodec | Omit = omit,
|
|
@@ -659,6 +664,8 @@ class AsyncCallsResource(AsyncAPIResource):
|
|
|
659
664
|
sip_headers: SIP headers to be added to the SIP INVITE request. Currently only User-to-User
|
|
660
665
|
header is supported.
|
|
661
666
|
|
|
667
|
+
sip_region: Defines the SIP region to be used for the call.
|
|
668
|
+
|
|
662
669
|
sip_transport_protocol: Defines SIP transport protocol to be used on the call.
|
|
663
670
|
|
|
664
671
|
sound_modifications: Use this field to modify sound effects, for example adjust the pitch.
|
|
@@ -755,6 +762,7 @@ class AsyncCallsResource(AsyncAPIResource):
|
|
|
755
762
|
"sip_auth_password": sip_auth_password,
|
|
756
763
|
"sip_auth_username": sip_auth_username,
|
|
757
764
|
"sip_headers": sip_headers,
|
|
765
|
+
"sip_region": sip_region,
|
|
758
766
|
"sip_transport_protocol": sip_transport_protocol,
|
|
759
767
|
"sound_modifications": sound_modifications,
|
|
760
768
|
"stream_bidirectional_codec": stream_bidirectional_codec,
|
|
@@ -108,7 +108,7 @@ class RecordingsResource(SyncAPIResource):
|
|
|
108
108
|
Consolidated filter parameter (deepObject style). Originally:
|
|
109
109
|
filter[conference_id], filter[created_at][gte], filter[created_at][lte],
|
|
110
110
|
filter[call_leg_id], filter[call_session_id], filter[from], filter[to],
|
|
111
|
-
filter[connection_id]
|
|
111
|
+
filter[connection_id], filter[sip_call_id]
|
|
112
112
|
|
|
113
113
|
page: Consolidated page parameter (deepObject style). Originally: page[size],
|
|
114
114
|
page[number]
|
|
@@ -250,7 +250,7 @@ class AsyncRecordingsResource(AsyncAPIResource):
|
|
|
250
250
|
Consolidated filter parameter (deepObject style). Originally:
|
|
251
251
|
filter[conference_id], filter[created_at][gte], filter[created_at][lte],
|
|
252
252
|
filter[call_leg_id], filter[call_session_id], filter[from], filter[to],
|
|
253
|
-
filter[connection_id]
|
|
253
|
+
filter[connection_id], filter[sip_call_id]
|
|
254
254
|
|
|
255
255
|
page: Consolidated page parameter (deepObject style). Originally: page[size],
|
|
256
256
|
page[number]
|
telnyx/resources/webhooks.py
CHANGED
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
6
|
from typing import Mapping, cast
|
|
7
|
+
from datetime import datetime, timezone
|
|
7
8
|
|
|
8
9
|
from .._models import construct_type
|
|
9
10
|
from .._resource import SyncAPIResource, AsyncAPIResource
|
|
@@ -11,7 +12,106 @@ from .._exceptions import TelnyxError
|
|
|
11
12
|
from ..types.unwrap_webhook_event import UnwrapWebhookEvent
|
|
12
13
|
from ..types.unsafe_unwrap_webhook_event import UnsafeUnwrapWebhookEvent
|
|
13
14
|
|
|
14
|
-
__all__ = ["WebhooksResource", "AsyncWebhooksResource"]
|
|
15
|
+
__all__ = ["WebhooksResource", "AsyncWebhooksResource", "TelnyxWebhook", "TelnyxWebhookVerificationError"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TelnyxWebhookVerificationError(TelnyxError):
|
|
19
|
+
"""Raised when webhook verification fails."""
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TelnyxWebhook:
|
|
24
|
+
"""
|
|
25
|
+
Telnyx webhook verification following the standardwebhooks pattern.
|
|
26
|
+
|
|
27
|
+
This class provides ED25519 signature verification for Telnyx webhooks
|
|
28
|
+
using the same interface pattern as the standardwebhooks library.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, key: str | bytes):
|
|
32
|
+
"""
|
|
33
|
+
Initialize the webhook verifier with a public key.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
key: The public key for verification (hex string or bytes)
|
|
37
|
+
"""
|
|
38
|
+
try:
|
|
39
|
+
from nacl.signing import VerifyKey
|
|
40
|
+
except ImportError as exc:
|
|
41
|
+
raise TelnyxError("You need to install `pynacl` to verify Telnyx webhooks") from exc
|
|
42
|
+
|
|
43
|
+
# Convert key to bytes if it's a string
|
|
44
|
+
if isinstance(key, str):
|
|
45
|
+
try:
|
|
46
|
+
key = bytes.fromhex(key) # Convert from hex string to bytes
|
|
47
|
+
except ValueError as exc:
|
|
48
|
+
raise TelnyxWebhookVerificationError(f"Invalid key format: {key!r}") from exc
|
|
49
|
+
|
|
50
|
+
self._verify_key = VerifyKey(key)
|
|
51
|
+
|
|
52
|
+
def verify(self, payload: str, headers: Mapping[str, str]) -> None:
|
|
53
|
+
"""
|
|
54
|
+
Verify a webhook payload and headers.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
payload: The webhook payload string
|
|
58
|
+
headers: The webhook headers
|
|
59
|
+
|
|
60
|
+
Raises:
|
|
61
|
+
TelnyxWebhookVerificationError: If verification fails
|
|
62
|
+
"""
|
|
63
|
+
try:
|
|
64
|
+
from nacl.exceptions import BadSignatureError
|
|
65
|
+
except ImportError as exc:
|
|
66
|
+
raise TelnyxError("You need to install `pynacl` to verify Telnyx webhooks") from exc
|
|
67
|
+
|
|
68
|
+
# Extract required headers (case-insensitive lookup)
|
|
69
|
+
signature_header = headers.get("Telnyx-Signature-Ed25519") or headers.get("telnyx-signature-ed25519")
|
|
70
|
+
timestamp_header = headers.get("Telnyx-Timestamp") or headers.get("telnyx-timestamp")
|
|
71
|
+
user_agent = headers.get("User-Agent") or headers.get("user-agent", "")
|
|
72
|
+
|
|
73
|
+
# Validate required headers
|
|
74
|
+
if not signature_header:
|
|
75
|
+
raise TelnyxWebhookVerificationError("Missing required header: Telnyx-Signature-Ed25519")
|
|
76
|
+
|
|
77
|
+
if not timestamp_header:
|
|
78
|
+
raise TelnyxWebhookVerificationError("Missing required header: Telnyx-Timestamp")
|
|
79
|
+
|
|
80
|
+
# Verify User-Agent if present (optional security check)
|
|
81
|
+
if user_agent and "telnyx-webhooks" not in user_agent.lower():
|
|
82
|
+
raise TelnyxWebhookVerificationError(f"Unexpected User-Agent: {user_agent}")
|
|
83
|
+
|
|
84
|
+
# Validate timestamp format and prevent replay attacks
|
|
85
|
+
try:
|
|
86
|
+
webhook_time = int(timestamp_header)
|
|
87
|
+
current_time = int(datetime.now(timezone.utc).timestamp())
|
|
88
|
+
|
|
89
|
+
# Allow 5 minutes tolerance
|
|
90
|
+
if abs(current_time - webhook_time) > 300:
|
|
91
|
+
raise TelnyxWebhookVerificationError(
|
|
92
|
+
f"Webhook timestamp too old or too new: {timestamp_header}"
|
|
93
|
+
)
|
|
94
|
+
except ValueError as exc:
|
|
95
|
+
raise TelnyxWebhookVerificationError(
|
|
96
|
+
f"Invalid timestamp format: {timestamp_header}"
|
|
97
|
+
) from exc
|
|
98
|
+
|
|
99
|
+
# Decode the signature from hex
|
|
100
|
+
try:
|
|
101
|
+
signature = bytes.fromhex(signature_header)
|
|
102
|
+
except ValueError as exc:
|
|
103
|
+
raise TelnyxWebhookVerificationError(
|
|
104
|
+
f"Invalid signature format: {signature_header}"
|
|
105
|
+
) from exc
|
|
106
|
+
|
|
107
|
+
# Create the signed payload: timestamp + payload
|
|
108
|
+
signed_payload = timestamp_header.encode('utf-8') + payload.encode('utf-8')
|
|
109
|
+
|
|
110
|
+
# Verify the signature
|
|
111
|
+
try:
|
|
112
|
+
self._verify_key.verify(signed_payload, signature)
|
|
113
|
+
except BadSignatureError as exc:
|
|
114
|
+
raise TelnyxWebhookVerificationError("Invalid webhook signature") from exc
|
|
15
115
|
|
|
16
116
|
|
|
17
117
|
class WebhooksResource(SyncAPIResource):
|
|
@@ -25,11 +125,6 @@ class WebhooksResource(SyncAPIResource):
|
|
|
25
125
|
)
|
|
26
126
|
|
|
27
127
|
def unwrap(self, payload: str, *, headers: Mapping[str, str], key: str | bytes | None = None) -> UnwrapWebhookEvent:
|
|
28
|
-
try:
|
|
29
|
-
from standardwebhooks import Webhook
|
|
30
|
-
except ImportError as exc:
|
|
31
|
-
raise TelnyxError("You need to install `telnyx[webhooks]` to use this method") from exc
|
|
32
|
-
|
|
33
128
|
if key is None:
|
|
34
129
|
key = self._client.public_key
|
|
35
130
|
if key is None:
|
|
@@ -40,7 +135,9 @@ class WebhooksResource(SyncAPIResource):
|
|
|
40
135
|
if not isinstance(headers, dict):
|
|
41
136
|
headers = dict(headers)
|
|
42
137
|
|
|
43
|
-
|
|
138
|
+
# Use Telnyx-specific webhook verification following standardwebhooks pattern
|
|
139
|
+
webhook = TelnyxWebhook(key)
|
|
140
|
+
webhook.verify(payload, headers)
|
|
44
141
|
|
|
45
142
|
return cast(
|
|
46
143
|
UnwrapWebhookEvent,
|
|
@@ -62,11 +159,6 @@ class AsyncWebhooksResource(AsyncAPIResource):
|
|
|
62
159
|
)
|
|
63
160
|
|
|
64
161
|
def unwrap(self, payload: str, *, headers: Mapping[str, str], key: str | bytes | None = None) -> UnwrapWebhookEvent:
|
|
65
|
-
try:
|
|
66
|
-
from standardwebhooks import Webhook
|
|
67
|
-
except ImportError as exc:
|
|
68
|
-
raise TelnyxError("You need to install `telnyx[webhooks]` to use this method") from exc
|
|
69
|
-
|
|
70
162
|
if key is None:
|
|
71
163
|
key = self._client.public_key
|
|
72
164
|
if key is None:
|
|
@@ -77,7 +169,9 @@ class AsyncWebhooksResource(AsyncAPIResource):
|
|
|
77
169
|
if not isinstance(headers, dict):
|
|
78
170
|
headers = dict(headers)
|
|
79
171
|
|
|
80
|
-
|
|
172
|
+
# Use Telnyx-specific webhook verification following standardwebhooks pattern
|
|
173
|
+
webhook = TelnyxWebhook(key)
|
|
174
|
+
webhook.verify(payload, headers)
|
|
81
175
|
|
|
82
176
|
return cast(
|
|
83
177
|
UnwrapWebhookEvent,
|
telnyx/types/call_dial_params.py
CHANGED
|
@@ -219,6 +219,9 @@ class CallDialParams(TypedDict, total=False):
|
|
|
219
219
|
Currently only User-to-User header is supported.
|
|
220
220
|
"""
|
|
221
221
|
|
|
222
|
+
sip_region: Literal["US", "Europe", "Canada", "Australia", "Middle East"]
|
|
223
|
+
"""Defines the SIP region to be used for the call."""
|
|
224
|
+
|
|
222
225
|
sip_transport_protocol: Literal["UDP", "TCP", "TLS"]
|
|
223
226
|
"""Defines SIP transport protocol to be used on the call."""
|
|
224
227
|
|
|
@@ -164,6 +164,9 @@ class ActionTransferParams(TypedDict, total=False):
|
|
|
164
164
|
Currently only User-to-User header is supported.
|
|
165
165
|
"""
|
|
166
166
|
|
|
167
|
+
sip_region: Literal["US", "Europe", "Canada", "Australia", "Middle East"]
|
|
168
|
+
"""Defines the SIP region to be used for the call."""
|
|
169
|
+
|
|
167
170
|
sip_transport_protocol: Literal["UDP", "TCP", "TLS"]
|
|
168
171
|
"""Defines SIP transport protocol to be used on the call."""
|
|
169
172
|
|
|
@@ -13,7 +13,7 @@ class RecordingListParams(TypedDict, total=False):
|
|
|
13
13
|
|
|
14
14
|
Originally: filter[conference_id], filter[created_at][gte],
|
|
15
15
|
filter[created_at][lte], filter[call_leg_id], filter[call_session_id],
|
|
16
|
-
filter[from], filter[to], filter[connection_id]
|
|
16
|
+
filter[from], filter[to], filter[connection_id], filter[sip_call_id]
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
19
|
page: Page
|
|
@@ -61,6 +61,12 @@ class Filter(_FilterReservedKeywords, total=False):
|
|
|
61
61
|
|
|
62
62
|
created_at: FilterCreatedAt
|
|
63
63
|
|
|
64
|
+
sip_call_id: str
|
|
65
|
+
"""
|
|
66
|
+
If present, recordings will be filtered to those with a matching `sip_call_id`
|
|
67
|
+
attribute. Matching is case-sensitive
|
|
68
|
+
"""
|
|
69
|
+
|
|
64
70
|
to: str
|
|
65
71
|
"""
|
|
66
72
|
If present, recordings will be filtered to those with a matching `to` attribute
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: telnyx
|
|
3
|
-
Version: 3.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 3.10.0
|
|
4
|
+
Summary: Telnyx API SDK for global Voice, SMS, MMS, WhatsApp, Fax, Wireless IoT, SIP Trunking, and Call Control.
|
|
5
5
|
Project-URL: Homepage, https://github.com/team-telnyx/telnyx-python
|
|
6
6
|
Project-URL: Repository, https://github.com/team-telnyx/telnyx-python
|
|
7
7
|
Author-email: Telnyx <support@telnyx.com>
|
|
8
8
|
License: MIT
|
|
9
|
+
Keywords: api,communications,connectivity,fax,iot,mms,sip,sms,telephony,telnyx,trunking,voice,voip,whatsapp
|
|
9
10
|
Classifier: Intended Audience :: Developers
|
|
10
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
11
12
|
Classifier: Operating System :: MacOS
|
|
@@ -32,6 +33,7 @@ Provides-Extra: aiohttp
|
|
|
32
33
|
Requires-Dist: aiohttp; extra == 'aiohttp'
|
|
33
34
|
Requires-Dist: httpx-aiohttp>=0.1.9; extra == 'aiohttp'
|
|
34
35
|
Provides-Extra: webhooks
|
|
36
|
+
Requires-Dist: pynacl>=1.5.0; extra == 'webhooks'
|
|
35
37
|
Requires-Dist: standardwebhooks; extra == 'webhooks'
|
|
36
38
|
Description-Content-Type: text/markdown
|
|
37
39
|
|
|
@@ -9,9 +9,9 @@ telnyx/_models.py,sha256=lKnskYPONAWDvWo8tmbbVk7HmG7UOsI0Nve0vSMmkRc,30452
|
|
|
9
9
|
telnyx/_qs.py,sha256=craIKyvPktJ94cvf9zn8j8ekG9dWJzhWv0ob34lIOv4,4828
|
|
10
10
|
telnyx/_resource.py,sha256=B4Qg-uO2a34FQHHZskn89eVURqMuSvv1TdeBJH1z1rU,1100
|
|
11
11
|
telnyx/_response.py,sha256=4X24wr7uQn2hnM_b0xqQ92zSgxRFFfWG2lTg93-KzNo,28788
|
|
12
|
-
telnyx/_streaming.py,sha256=
|
|
12
|
+
telnyx/_streaming.py,sha256=RoCjf00pIQGCktRA1QMPzY5vQs4pgpn3DEyLXTWHbXY,10149
|
|
13
13
|
telnyx/_types.py,sha256=Du3G2vdqeLhhdJZ4Jtck4vOqEvAKI9rB1FnrwB1b_k8,7236
|
|
14
|
-
telnyx/_version.py,sha256=
|
|
14
|
+
telnyx/_version.py,sha256=WPybo6Rx7K-0KJLkV1WRR56mu9fCdZ_hBqgsTwkHZhs,159
|
|
15
15
|
telnyx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
telnyx/_utils/__init__.py,sha256=7fch0GT9zpNnErbciSpUNa-SjTxxjY6kxHxKMOM4AGs,2305
|
|
17
17
|
telnyx/_utils/_compat.py,sha256=D8gtAvjJQrDWt9upS0XaG9Rr5l1QhiAx_I_1utT_tt0,1195
|
|
@@ -26,7 +26,7 @@ telnyx/_utils/_transform.py,sha256=NjCzmnfqYrsAikUHQig6N9QfuTVbKipuP3ur9mcNF-E,1
|
|
|
26
26
|
telnyx/_utils/_typing.py,sha256=N_5PPuFNsaygbtA_npZd98SVN1LQQvFTKL6bkWPBZGU,4786
|
|
27
27
|
telnyx/_utils/_utils.py,sha256=0dDqauUbVZEXV0NVl7Bwu904Wwo5eyFCZpQThhFNhyA,12253
|
|
28
28
|
telnyx/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
|
|
29
|
-
telnyx/resources/__init__.py,sha256=
|
|
29
|
+
telnyx/resources/__init__.py,sha256=kuejh4nn9SnMB6yXv44iqiub-rauIjl84hSFetcvG3M,86120
|
|
30
30
|
telnyx/resources/access_ip_address.py,sha256=GHrKaYv0pxX2NrECShHPxibCq1mpXXEOOTXFSTDNUVQ,17519
|
|
31
31
|
telnyx/resources/access_ip_ranges.py,sha256=Xb9w6OlrM6aphz9CfktBZDvespX13tLQWMiZFK46JN0,14210
|
|
32
32
|
telnyx/resources/advanced_orders.py,sha256=zHasSS2AwBk1K7GuxX5Vm9DjCbX5kwS3G-Q1M2p19vk,18707
|
|
@@ -134,7 +134,7 @@ telnyx/resources/verify_profiles.py,sha256=p04zuJk1_we5Ez6OyRVq-KE1EALdgVjzmXukG
|
|
|
134
134
|
telnyx/resources/virtual_cross_connects.py,sha256=JDAXB9dhVNn-qAiTyNDAgYELHdFwGoqS6yM5l4NrDZA,34715
|
|
135
135
|
telnyx/resources/virtual_cross_connects_coverage.py,sha256=LE0l4hJJCO8jsaanpA85fa_wGNHgsZO4yPpf1RoNRCQ,9320
|
|
136
136
|
telnyx/resources/webhook_deliveries.py,sha256=PKo-2i1Ndhe3i7zozog3d0Ko5dznDshsOqLeogdXah0,11174
|
|
137
|
-
telnyx/resources/webhooks.py,sha256=
|
|
137
|
+
telnyx/resources/webhooks.py,sha256=_6mEpkZNk9qYpRhbY6sPEqaiUkOiZjiCUo1JPBKOJys,6763
|
|
138
138
|
telnyx/resources/well_known.py,sha256=3Nm9gDqj9nDawaMoSj-yy3z_3dhDdBjK0NqOR0NJg4I,8881
|
|
139
139
|
telnyx/resources/wireguard_interfaces.py,sha256=wxfoFKlIQ4We6Zi9huXfN2Y_xAYZN5_IK6ziEGggM4I,18414
|
|
140
140
|
telnyx/resources/wireguard_peers.py,sha256=FefL6ivnxn6uq2vJY6hvzCzTm1wlqWiifc4D81QYSSE,24615
|
|
@@ -185,8 +185,8 @@ telnyx/resources/bundle_pricing/billing_bundles.py,sha256=qMCmAtoj48PbHObmv53B-6
|
|
|
185
185
|
telnyx/resources/bundle_pricing/bundle_pricing.py,sha256=d3L80tHqOCfcTxVQ7c6DDLfO-5FkG7HMlOfTLVz52-A,5371
|
|
186
186
|
telnyx/resources/bundle_pricing/user_bundles.py,sha256=d44DFB_SSgXQcFceR3vY4wsQ8pukdATqWoSBoLUcYLA,28714
|
|
187
187
|
telnyx/resources/calls/__init__.py,sha256=zQUq3YFSSLeXKg5bb5oG2Hh7VJsNmm_Z5nm68sU98LY,1002
|
|
188
|
-
telnyx/resources/calls/actions.py,sha256=
|
|
189
|
-
telnyx/resources/calls/calls.py,sha256=
|
|
188
|
+
telnyx/resources/calls/actions.py,sha256=Cf3cJNt5tlbYVV5oNhEHq21VfKLhZ5pr5_rp9Mt9mHE,309527
|
|
189
|
+
telnyx/resources/calls/calls.py,sha256=TQ-4DQCvh9afTbNHkMOpHzpSBrNYQlJWeP1ZkIIaZLk,44976
|
|
190
190
|
telnyx/resources/campaign/__init__.py,sha256=MGF-U4sQL_jE6xQKvsDXhucn5snUbtl1naBlZDaujPk,1452
|
|
191
191
|
telnyx/resources/campaign/campaign.py,sha256=CDmsWo_1eAg9tIdAu9SwU-8xTusuxSU76o2V_mKuCiI,41458
|
|
192
192
|
telnyx/resources/campaign/osr.py,sha256=q-xqVNbfaDh73WYjcwNiPmQ9kUFO0lncRaAKcdIojkk,5764
|
|
@@ -297,7 +297,7 @@ telnyx/resources/queues/calls.py,sha256=A33wkOC6WU1cC7Xm25OtIpOPxA7Rv4kART_K5jep
|
|
|
297
297
|
telnyx/resources/queues/queues.py,sha256=zm_7gMojxayn6OiHYGezvrkBs_MYv3CPtWycG62QvwQ,6937
|
|
298
298
|
telnyx/resources/recordings/__init__.py,sha256=QKXCeJ_NDUEkDXQtFJigJNZ58I1T-VHo0vj_CwuOQXg,1067
|
|
299
299
|
telnyx/resources/recordings/actions.py,sha256=RuRlHxaoDeZqH5efWFE8t-74abCMGdixbcEwEKpURIo,6154
|
|
300
|
-
telnyx/resources/recordings/recordings.py,sha256=
|
|
300
|
+
telnyx/resources/recordings/recordings.py,sha256=h4qWYR6ayUJpI054vOnodLgVflKXlE1rfAgaF2odeSw,14923
|
|
301
301
|
telnyx/resources/reports/__init__.py,sha256=qk_1dlPxez7lw7AgoInNUZJ7Ri9eGaZSN3_x_2uhBpE,1703
|
|
302
302
|
telnyx/resources/reports/cdr_usage_reports.py,sha256=n8f0FGM2yUJkuE1AlUzRKQ89kgtilyqrMoxUsElqVfo,8471
|
|
303
303
|
telnyx/resources/reports/mdr_usage_reports.py,sha256=GllNbFrMnz3s0b-rgaLTnPKIIeJmGjhJkyC9cg9SoaE,22298
|
|
@@ -444,7 +444,7 @@ telnyx/types/call_conversation_ended_webhook_event.py,sha256=xkOxhj7h2duW6U0O7PJ
|
|
|
444
444
|
telnyx/types/call_conversation_ended_webhook_event1.py,sha256=xkOxhj7h2duW6U0O7PJvcb9YWWhq8HFRKcuGpeZ0dKI,2621
|
|
445
445
|
telnyx/types/call_conversation_insights_generated_webhook_event.py,sha256=wnCJCAR3Jn6-qSz3AxCu35TRF_3lehVkozUJZyWtwNU,2255
|
|
446
446
|
telnyx/types/call_conversation_insights_generated_webhook_event1.py,sha256=wnCJCAR3Jn6-qSz3AxCu35TRF_3lehVkozUJZyWtwNU,2255
|
|
447
|
-
telnyx/types/call_dial_params.py,sha256=
|
|
447
|
+
telnyx/types/call_dial_params.py,sha256=ee-rwsOZu7EoJSXCuzcBif6e88QmIuPen0XPWGvZppo,16335
|
|
448
448
|
telnyx/types/call_dial_response.py,sha256=qV7fNdy_vNuhBte6B_jxhSqvNQMht8tyq3DZ3-YHQAM,1575
|
|
449
449
|
telnyx/types/call_dtmf_received_webhook_event.py,sha256=By7pJP_IGMHOjf5rbqBrkGo3V_SEjpZbug5Qpo4R5fc,1853
|
|
450
450
|
telnyx/types/call_dtmf_received_webhook_event1.py,sha256=By7pJP_IGMHOjf5rbqBrkGo3V_SEjpZbug5Qpo4R5fc,1853
|
|
@@ -1095,7 +1095,7 @@ telnyx/types/rcs_suggestion_param.py,sha256=npO5BVYMj_Ok5LDxxU2XX8C_snh3eWasEV32
|
|
|
1095
1095
|
telnyx/types/record.py,sha256=PZKiKpovPR_hGKNPmtJD4v5hp37mqTn88bXnHy8dve0,585
|
|
1096
1096
|
telnyx/types/record_param.py,sha256=e7mXDk3lSFS76D1AuKOEahlGzEnDr1hxMy-7GWwG3YU,244
|
|
1097
1097
|
telnyx/types/recording_delete_response.py,sha256=J4KEMuOCWhhA7hjADDYNfkt7o7OZlLVttd1gpC4HYN8,339
|
|
1098
|
-
telnyx/types/recording_list_params.py,sha256=
|
|
1098
|
+
telnyx/types/recording_list_params.py,sha256=2RnrvPS2Fj0j4VgzU3mFX5-uy3liEm3-7pbABYBMX74,2088
|
|
1099
1099
|
telnyx/types/recording_list_response.py,sha256=c_H6mrGUhwUfVBMxkmWOg2J6h6pr0xrMXQIlnXA5MK8,434
|
|
1100
1100
|
telnyx/types/recording_response_data.py,sha256=oLOd031wHG5MNY3j2ZajgD92e-2_OVTkDW6OwtDbzdE,2330
|
|
1101
1101
|
telnyx/types/recording_retrieve_response.py,sha256=sy2bO-EiLx3a9_TDcjSMVrXgSqSG8x7opUsYIg3cgu0,343
|
|
@@ -1588,7 +1588,7 @@ telnyx/types/calls/action_stop_transcription_params.py,sha256=YUb-a_KunUDsD6fbau
|
|
|
1588
1588
|
telnyx/types/calls/action_stop_transcription_response.py,sha256=hltLMgIxyJxj_PEeBuA3BPQ_33n1LvKSiDBV3EspYCY,366
|
|
1589
1589
|
telnyx/types/calls/action_switch_supervisor_role_params.py,sha256=_oDT9Uae3ODWqltkCHnAyf1H3lRQZ_gmlBI4_EKr-4U,529
|
|
1590
1590
|
telnyx/types/calls/action_switch_supervisor_role_response.py,sha256=0JlFJ7E6GGgtB9ZmyEB01RH0MmiEHjp_O3LEiIPCRWY,372
|
|
1591
|
-
telnyx/types/calls/action_transfer_params.py,sha256=
|
|
1591
|
+
telnyx/types/calls/action_transfer_params.py,sha256=tYPwShytyB_U6ADyvopOtdT6ntxZHKtHvV4PZ4qfBJ0,9031
|
|
1592
1592
|
telnyx/types/calls/action_transfer_response.py,sha256=HVyyXYhzue5F6EuZtm3DGxX52fopUO6lqRWz06nrqJw,348
|
|
1593
1593
|
telnyx/types/calls/action_update_client_state_params.py,sha256=tXxzOKclY3R_ZIRgleAY9sfge7Kwi9Vk48yu6CqXVpk,433
|
|
1594
1594
|
telnyx/types/calls/action_update_client_state_response.py,sha256=S560c0ysvnArlfz0YogaMLuLpGpDJIaVSnQ4tTIRvok,366
|
|
@@ -2096,7 +2096,7 @@ telnyx/types/wireless/detail_records_report_list_params.py,sha256=cfjsh4L_8mpDkg
|
|
|
2096
2096
|
telnyx/types/wireless/detail_records_report_list_response.py,sha256=S_6nD0fm5EseRIZHnML-UN0-g8Q_0J1cXfg_eLNUev8,331
|
|
2097
2097
|
telnyx/types/wireless/detail_records_report_retrieve_response.py,sha256=f0C8z8uo_QeCyi3nSDME4f4F3vqcy7o0MpinwDIqe_s,327
|
|
2098
2098
|
telnyx/types/wireless/wdr_report.py,sha256=bxRr-dc_IW6D0E3i_PUHK-bbu9w114Qql1uoJ_znxEE,1068
|
|
2099
|
-
telnyx-3.
|
|
2100
|
-
telnyx-3.
|
|
2101
|
-
telnyx-3.
|
|
2102
|
-
telnyx-3.
|
|
2099
|
+
telnyx-3.10.0.dist-info/METADATA,sha256=5PpVsKNOSE2YILuqxcmJC-lwB8qsSZbZNoJpak1B5vw,15824
|
|
2100
|
+
telnyx-3.10.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
2101
|
+
telnyx-3.10.0.dist-info/licenses/LICENSE,sha256=PprdXvskBJR41_t2uhgs5rHYGME_Ek-lh2PAxKtdZs8,1046
|
|
2102
|
+
telnyx-3.10.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|