@sentdm/sentdm 0.45.0 → 0.47.0

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 (191) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/client.d.mts +6 -11
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +6 -11
  5. package/client.d.ts.map +1 -1
  6. package/client.js +3 -10
  7. package/client.js.map +1 -1
  8. package/client.mjs +3 -10
  9. package/client.mjs.map +1 -1
  10. package/core/pagination.d.mts +25 -0
  11. package/core/pagination.d.mts.map +1 -1
  12. package/core/pagination.d.ts +25 -0
  13. package/core/pagination.d.ts.map +1 -1
  14. package/core/pagination.js +28 -1
  15. package/core/pagination.js.map +1 -1
  16. package/core/pagination.mjs +26 -0
  17. package/core/pagination.mjs.map +1 -1
  18. package/package.json +1 -1
  19. package/resources/channels/channels.d.mts +2 -2
  20. package/resources/channels/channels.d.mts.map +1 -1
  21. package/resources/channels/channels.d.ts +2 -2
  22. package/resources/channels/channels.d.ts.map +1 -1
  23. package/resources/channels/channels.js.map +1 -1
  24. package/resources/channels/channels.mjs.map +1 -1
  25. package/resources/channels/index.d.mts +1 -1
  26. package/resources/channels/index.d.mts.map +1 -1
  27. package/resources/channels/index.d.ts +1 -1
  28. package/resources/channels/index.d.ts.map +1 -1
  29. package/resources/channels/index.js.map +1 -1
  30. package/resources/channels/index.mjs.map +1 -1
  31. package/resources/channels/voice.d.mts +72 -115
  32. package/resources/channels/voice.d.mts.map +1 -1
  33. package/resources/channels/voice.d.ts +72 -115
  34. package/resources/channels/voice.d.ts.map +1 -1
  35. package/resources/channels/voice.js +35 -45
  36. package/resources/channels/voice.js.map +1 -1
  37. package/resources/channels/voice.mjs +35 -45
  38. package/resources/channels/voice.mjs.map +1 -1
  39. package/resources/index.d.mts +1 -1
  40. package/resources/index.d.mts.map +1 -1
  41. package/resources/index.d.ts +1 -1
  42. package/resources/index.d.ts.map +1 -1
  43. package/resources/index.js +3 -3
  44. package/resources/index.js.map +1 -1
  45. package/resources/index.mjs +1 -1
  46. package/resources/index.mjs.map +1 -1
  47. package/resources/messages.d.mts +8 -1
  48. package/resources/messages.d.mts.map +1 -1
  49. package/resources/messages.d.ts +8 -1
  50. package/resources/messages.d.ts.map +1 -1
  51. package/resources/profiles/campaigns.d.mts +3 -2
  52. package/resources/profiles/campaigns.d.mts.map +1 -1
  53. package/resources/profiles/campaigns.d.ts +3 -2
  54. package/resources/profiles/campaigns.d.ts.map +1 -1
  55. package/resources/profiles/campaigns.js +3 -2
  56. package/resources/profiles/campaigns.js.map +1 -1
  57. package/resources/profiles/campaigns.mjs +3 -2
  58. package/resources/profiles/campaigns.mjs.map +1 -1
  59. package/resources/templates.d.mts +14 -13
  60. package/resources/templates.d.mts.map +1 -1
  61. package/resources/templates.d.ts +14 -13
  62. package/resources/templates.d.ts.map +1 -1
  63. package/resources/voice/agents.d.mts +524 -0
  64. package/resources/voice/agents.d.mts.map +1 -0
  65. package/resources/voice/agents.d.ts +524 -0
  66. package/resources/voice/agents.d.ts.map +1 -0
  67. package/resources/voice/agents.js +193 -0
  68. package/resources/voice/agents.js.map +1 -0
  69. package/resources/voice/agents.mjs +189 -0
  70. package/resources/voice/agents.mjs.map +1 -0
  71. package/resources/{calls → voice/calls}/calls.d.mts +103 -26
  72. package/resources/voice/calls/calls.d.mts.map +1 -0
  73. package/resources/{calls → voice/calls}/calls.d.ts +103 -26
  74. package/resources/voice/calls/calls.d.ts.map +1 -0
  75. package/resources/{calls → voice/calls}/calls.js +35 -28
  76. package/resources/voice/calls/calls.js.map +1 -0
  77. package/resources/{calls → voice/calls}/calls.mjs +34 -27
  78. package/resources/voice/calls/calls.mjs.map +1 -0
  79. package/resources/voice/calls/index.d.mts.map +1 -0
  80. package/resources/voice/calls/index.d.ts.map +1 -0
  81. package/resources/voice/calls/index.js.map +1 -0
  82. package/resources/voice/calls/index.mjs.map +1 -0
  83. package/resources/{calls → voice/calls}/participants.d.mts +16 -14
  84. package/resources/voice/calls/participants.d.mts.map +1 -0
  85. package/resources/{calls → voice/calls}/participants.d.ts +16 -14
  86. package/resources/voice/calls/participants.d.ts.map +1 -0
  87. package/resources/{calls → voice/calls}/participants.js +19 -17
  88. package/resources/voice/calls/participants.js.map +1 -0
  89. package/resources/{calls → voice/calls}/participants.mjs +19 -17
  90. package/resources/voice/calls/participants.mjs.map +1 -0
  91. package/resources/voice/calls.d.mts.map +1 -0
  92. package/resources/voice/calls.d.ts.map +1 -0
  93. package/resources/{calls.js → voice/calls.js} +1 -1
  94. package/resources/voice/calls.js.map +1 -0
  95. package/resources/voice/calls.mjs.map +1 -0
  96. package/resources/voice/catalogue.d.mts +86 -0
  97. package/resources/voice/catalogue.d.mts.map +1 -0
  98. package/resources/voice/catalogue.d.ts +86 -0
  99. package/resources/voice/catalogue.d.ts.map +1 -0
  100. package/resources/voice/catalogue.js +40 -0
  101. package/resources/voice/catalogue.js.map +1 -0
  102. package/resources/voice/catalogue.mjs +36 -0
  103. package/resources/voice/catalogue.mjs.map +1 -0
  104. package/resources/voice/index.d.mts +6 -0
  105. package/resources/voice/index.d.mts.map +1 -0
  106. package/resources/voice/index.d.ts +6 -0
  107. package/resources/voice/index.d.ts.map +1 -0
  108. package/resources/voice/index.js +15 -0
  109. package/resources/voice/index.js.map +1 -0
  110. package/resources/voice/index.mjs +7 -0
  111. package/resources/voice/index.mjs.map +1 -0
  112. package/resources/voice/tokens.d.mts +111 -0
  113. package/resources/voice/tokens.d.mts.map +1 -0
  114. package/resources/voice/tokens.d.ts +111 -0
  115. package/resources/voice/tokens.d.ts.map +1 -0
  116. package/resources/voice/tokens.js +47 -0
  117. package/resources/voice/tokens.js.map +1 -0
  118. package/resources/voice/tokens.mjs +43 -0
  119. package/resources/voice/tokens.mjs.map +1 -0
  120. package/resources/voice/voice.d.mts +22 -0
  121. package/resources/voice/voice.d.mts.map +1 -0
  122. package/resources/voice/voice.d.ts +22 -0
  123. package/resources/voice/voice.d.ts.map +1 -0
  124. package/resources/voice/voice.js +29 -0
  125. package/resources/voice/voice.js.map +1 -0
  126. package/resources/voice/voice.mjs +24 -0
  127. package/resources/voice/voice.mjs.map +1 -0
  128. package/resources/voice.d.mts +2 -0
  129. package/resources/voice.d.mts.map +1 -0
  130. package/resources/voice.d.ts +2 -0
  131. package/resources/voice.d.ts.map +1 -0
  132. package/resources/voice.js +6 -0
  133. package/resources/voice.js.map +1 -0
  134. package/resources/voice.mjs +3 -0
  135. package/resources/voice.mjs.map +1 -0
  136. package/resources/webhooks.d.mts +154 -31
  137. package/resources/webhooks.d.mts.map +1 -1
  138. package/resources/webhooks.d.ts +154 -31
  139. package/resources/webhooks.d.ts.map +1 -1
  140. package/resources/webhooks.js +51 -11
  141. package/resources/webhooks.js.map +1 -1
  142. package/resources/webhooks.mjs +51 -11
  143. package/resources/webhooks.mjs.map +1 -1
  144. package/src/client.ts +12 -45
  145. package/src/core/pagination.ts +64 -0
  146. package/src/resources/channels/channels.ts +0 -6
  147. package/src/resources/channels/index.ts +0 -3
  148. package/src/resources/channels/voice.ts +74 -144
  149. package/src/resources/index.ts +1 -18
  150. package/src/resources/messages.ts +8 -1
  151. package/src/resources/profiles/campaigns.ts +3 -2
  152. package/src/resources/templates.ts +14 -13
  153. package/src/resources/voice/agents.ts +729 -0
  154. package/src/resources/{calls → voice/calls}/calls.ts +122 -33
  155. package/src/resources/{calls → voice/calls}/participants.ts +23 -21
  156. package/src/resources/voice/catalogue.ts +118 -0
  157. package/src/resources/voice/index.ts +55 -0
  158. package/src/resources/voice/tokens.ts +146 -0
  159. package/src/resources/voice/voice.ts +134 -0
  160. package/src/resources/voice.ts +3 -0
  161. package/src/resources/webhooks.ts +162 -31
  162. package/src/version.ts +1 -1
  163. package/version.d.mts +1 -1
  164. package/version.d.ts +1 -1
  165. package/version.js +1 -1
  166. package/version.mjs +1 -1
  167. package/resources/calls/calls.d.mts.map +0 -1
  168. package/resources/calls/calls.d.ts.map +0 -1
  169. package/resources/calls/calls.js.map +0 -1
  170. package/resources/calls/calls.mjs.map +0 -1
  171. package/resources/calls/index.d.mts.map +0 -1
  172. package/resources/calls/index.d.ts.map +0 -1
  173. package/resources/calls/index.js.map +0 -1
  174. package/resources/calls/index.mjs.map +0 -1
  175. package/resources/calls/participants.d.mts.map +0 -1
  176. package/resources/calls/participants.d.ts.map +0 -1
  177. package/resources/calls/participants.js.map +0 -1
  178. package/resources/calls/participants.mjs.map +0 -1
  179. package/resources/calls.d.mts.map +0 -1
  180. package/resources/calls.d.ts.map +0 -1
  181. package/resources/calls.js.map +0 -1
  182. package/resources/calls.mjs.map +0 -1
  183. /package/resources/{calls → voice/calls}/index.d.mts +0 -0
  184. /package/resources/{calls → voice/calls}/index.d.ts +0 -0
  185. /package/resources/{calls → voice/calls}/index.js +0 -0
  186. /package/resources/{calls → voice/calls}/index.mjs +0 -0
  187. /package/resources/{calls.d.mts → voice/calls.d.mts} +0 -0
  188. /package/resources/{calls.d.ts → voice/calls.d.ts} +0 -0
  189. /package/resources/{calls.mjs → voice/calls.mjs} +0 -0
  190. /package/src/resources/{calls → voice/calls}/index.ts +0 -0
  191. /package/src/resources/{calls.ts → voice/calls.ts} +0 -0
@@ -0,0 +1,86 @@
1
+ import { APIResource } from "../../core/resource.js";
2
+ import * as WebhooksAPI from "../webhooks.js";
3
+ import { APIPromise } from "../../core/api-promise.js";
4
+ import { RequestOptions } from "../../internal/request-options.js";
5
+ /**
6
+ * Phone calls from the numbers you hold, driven by your own callback URL.
7
+ *
8
+ * `POST /v3/channels/voice` enables a number for calls, with the callback URL Sent asks what to do with each call on it, and `POST /v3/voice/tokens` mints a short-lived token that lets a user of your app place and receive calls as that number. When a call arrives or a caller presses a key, a signed question is POSTed to the callback URL and the answer decides the call; `POST /v3/channels/voice/{number}/test` checks the URL answers the way we need before a real call reaches it, and `POST /v3/channels/voice/{number}/rotate-secret` replaces the signing secret. The call events themselves (`call.completed` and the rest) arrive through your webhooks.
9
+ *
10
+ * Every call is a record under `/v3/voice/calls`: read it, list its recordings once one is ready, hang it up, start or stop recording, and add, mute or remove conference participants while it is live. A leg to a phone number runs for at most what your balance affords at the destination's rate.
11
+ *
12
+ * **Voice agents.** `POST /v3/voice/agents` creates an agent that answers calls through the Sent Voice Gateway: `session_type` says whether Sent carries the call as text (speech recognised and spoken for the agent) or as audio, `websocket_url` is where the gateway dials the agent for each call (leave it out and the agent dials in with your API key), and `tools`, `transfer_targets`, `fallback` and `limits` say what it may do on a call. The agent's `signing_secret` is shown on create and on `POST /v3/voice/agents/{id}/rotate-secret` only. Voices and languages for text sessions come from `GET /v3/voice/voices`. A number takes calls to an agent once it is bound to it on `/v3/channels/voice`.
13
+ */
14
+ export declare class Catalogue extends APIResource {
15
+ /**
16
+ * The names a voice agent's `speech.voice` and `speech.language` accept, with the
17
+ * default marked. The list grows as voices are added; a name is never removed
18
+ * without notice.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const apiResponseOfVoiceCatalogue =
23
+ * await client.voice.catalogue.list();
24
+ * ```
25
+ */
26
+ list(params?: CatalogueListParams | null | undefined, options?: RequestOptions): APIPromise<APIResponseOfVoiceCatalogue>;
27
+ }
28
+ /**
29
+ * Standard API response envelope for all v3 endpoints
30
+ */
31
+ export interface APIResponseOfVoiceCatalogue {
32
+ /**
33
+ * The voices and languages a text-session agent may name in its speech settings:
34
+ * what GET /v3/voice/voices and the admin GET /voice/voices answer, in one shape.
35
+ */
36
+ data?: VoiceCatalogue | null;
37
+ /**
38
+ * Error information
39
+ */
40
+ error?: WebhooksAPI.ErrorDetail | null;
41
+ /**
42
+ * Request and response metadata
43
+ */
44
+ meta?: WebhooksAPI.APIMeta;
45
+ /**
46
+ * Indicates whether the request was successful
47
+ */
48
+ success?: boolean;
49
+ }
50
+ /**
51
+ * The voices and languages a text-session agent may name in its speech settings:
52
+ * what GET /v3/voice/voices and the admin GET /voice/voices answer, in one shape.
53
+ */
54
+ export interface VoiceCatalogue {
55
+ /**
56
+ * BCP 47 tags accepted as speech.language.
57
+ */
58
+ languages?: Array<string>;
59
+ voices?: Array<VoiceCatalogueVoice>;
60
+ }
61
+ export interface VoiceCatalogueVoice {
62
+ /**
63
+ * Whether this is the voice used when an agent names none.
64
+ */
65
+ default?: boolean;
66
+ description?: string;
67
+ /**
68
+ * The language the voice speaks.
69
+ */
70
+ language?: string;
71
+ /**
72
+ * The value to send as speech.voice.
73
+ */
74
+ name?: string;
75
+ }
76
+ export interface CatalogueListParams {
77
+ /**
78
+ * Profile UUID to scope the request to a child profile. Only organization API keys
79
+ * can use this header. The profile must belong to the calling organization.
80
+ */
81
+ 'x-profile-id'?: string;
82
+ }
83
+ export declare namespace Catalogue {
84
+ export { type APIResponseOfVoiceCatalogue as APIResponseOfVoiceCatalogue, type VoiceCatalogue as VoiceCatalogue, type VoiceCatalogueVoice as VoiceCatalogueVoice, type CatalogueListParams as CatalogueListParams, };
85
+ }
86
+ //# sourceMappingURL=catalogue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../../src/resources/voice/catalogue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,+BAA4B;AAClD,OAAO,KAAK,WAAW,uBAAoB;AAC3C,OAAO,EAAE,UAAU,EAAE,kCAA+B;AAEpD,OAAO,EAAE,cAAc,EAAE,0CAAuC;AAEhE;;;;;;;;GAQG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC;;;;;;;;;;OAUG;IACH,IAAI,CACF,MAAM,GAAE,mBAAmB,GAAG,IAAI,GAAG,SAAc,EACnD,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,2BAA2B,CAAC;CAU3C;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAE7B;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;IAEvC;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,OAAO,EACL,KAAK,2BAA2B,IAAI,2BAA2B,EAC/D,KAAK,cAAc,IAAI,cAAc,EACrC,KAAK,mBAAmB,IAAI,mBAAmB,EAC/C,KAAK,mBAAmB,IAAI,mBAAmB,GAChD,CAAC;CACH"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Catalogue = void 0;
5
+ const resource_1 = require("../../core/resource.js");
6
+ const headers_1 = require("../../internal/headers.js");
7
+ /**
8
+ * Phone calls from the numbers you hold, driven by your own callback URL.
9
+ *
10
+ * `POST /v3/channels/voice` enables a number for calls, with the callback URL Sent asks what to do with each call on it, and `POST /v3/voice/tokens` mints a short-lived token that lets a user of your app place and receive calls as that number. When a call arrives or a caller presses a key, a signed question is POSTed to the callback URL and the answer decides the call; `POST /v3/channels/voice/{number}/test` checks the URL answers the way we need before a real call reaches it, and `POST /v3/channels/voice/{number}/rotate-secret` replaces the signing secret. The call events themselves (`call.completed` and the rest) arrive through your webhooks.
11
+ *
12
+ * Every call is a record under `/v3/voice/calls`: read it, list its recordings once one is ready, hang it up, start or stop recording, and add, mute or remove conference participants while it is live. A leg to a phone number runs for at most what your balance affords at the destination's rate.
13
+ *
14
+ * **Voice agents.** `POST /v3/voice/agents` creates an agent that answers calls through the Sent Voice Gateway: `session_type` says whether Sent carries the call as text (speech recognised and spoken for the agent) or as audio, `websocket_url` is where the gateway dials the agent for each call (leave it out and the agent dials in with your API key), and `tools`, `transfer_targets`, `fallback` and `limits` say what it may do on a call. The agent's `signing_secret` is shown on create and on `POST /v3/voice/agents/{id}/rotate-secret` only. Voices and languages for text sessions come from `GET /v3/voice/voices`. A number takes calls to an agent once it is bound to it on `/v3/channels/voice`.
15
+ */
16
+ class Catalogue extends resource_1.APIResource {
17
+ /**
18
+ * The names a voice agent's `speech.voice` and `speech.language` accept, with the
19
+ * default marked. The list grows as voices are added; a name is never removed
20
+ * without notice.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const apiResponseOfVoiceCatalogue =
25
+ * await client.voice.catalogue.list();
26
+ * ```
27
+ */
28
+ list(params = {}, options) {
29
+ const { 'x-profile-id': xProfileID } = params ?? {};
30
+ return this._client.get('/v3/voice/voices', {
31
+ ...options,
32
+ headers: (0, headers_1.buildHeaders)([
33
+ { ...(xProfileID != null ? { 'x-profile-id': xProfileID } : undefined) },
34
+ options?.headers,
35
+ ]),
36
+ });
37
+ }
38
+ }
39
+ exports.Catalogue = Catalogue;
40
+ //# sourceMappingURL=catalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../src/resources/voice/catalogue.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,qDAAkD;AAGlD,uDAAsD;AAGtD;;;;;;;;GAQG;AACH,MAAa,SAAU,SAAQ,sBAAW;IACxC;;;;;;;;;;OAUG;IACH,IAAI,CACF,SAAiD,EAAE,EACnD,OAAwB;QAExB,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE;YAC1C,GAAG,OAAO;YACV,OAAO,EAAE,IAAA,sBAAY,EAAC;gBACpB,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxE,OAAO,EAAE,OAAO;aACjB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF;AAzBD,8BAyBC"}
@@ -0,0 +1,36 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+ import { APIResource } from "../../core/resource.mjs";
3
+ import { buildHeaders } from "../../internal/headers.mjs";
4
+ /**
5
+ * Phone calls from the numbers you hold, driven by your own callback URL.
6
+ *
7
+ * `POST /v3/channels/voice` enables a number for calls, with the callback URL Sent asks what to do with each call on it, and `POST /v3/voice/tokens` mints a short-lived token that lets a user of your app place and receive calls as that number. When a call arrives or a caller presses a key, a signed question is POSTed to the callback URL and the answer decides the call; `POST /v3/channels/voice/{number}/test` checks the URL answers the way we need before a real call reaches it, and `POST /v3/channels/voice/{number}/rotate-secret` replaces the signing secret. The call events themselves (`call.completed` and the rest) arrive through your webhooks.
8
+ *
9
+ * Every call is a record under `/v3/voice/calls`: read it, list its recordings once one is ready, hang it up, start or stop recording, and add, mute or remove conference participants while it is live. A leg to a phone number runs for at most what your balance affords at the destination's rate.
10
+ *
11
+ * **Voice agents.** `POST /v3/voice/agents` creates an agent that answers calls through the Sent Voice Gateway: `session_type` says whether Sent carries the call as text (speech recognised and spoken for the agent) or as audio, `websocket_url` is where the gateway dials the agent for each call (leave it out and the agent dials in with your API key), and `tools`, `transfer_targets`, `fallback` and `limits` say what it may do on a call. The agent's `signing_secret` is shown on create and on `POST /v3/voice/agents/{id}/rotate-secret` only. Voices and languages for text sessions come from `GET /v3/voice/voices`. A number takes calls to an agent once it is bound to it on `/v3/channels/voice`.
12
+ */
13
+ export class Catalogue extends APIResource {
14
+ /**
15
+ * The names a voice agent's `speech.voice` and `speech.language` accept, with the
16
+ * default marked. The list grows as voices are added; a name is never removed
17
+ * without notice.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const apiResponseOfVoiceCatalogue =
22
+ * await client.voice.catalogue.list();
23
+ * ```
24
+ */
25
+ list(params = {}, options) {
26
+ const { 'x-profile-id': xProfileID } = params ?? {};
27
+ return this._client.get('/v3/voice/voices', {
28
+ ...options,
29
+ headers: buildHeaders([
30
+ { ...(xProfileID != null ? { 'x-profile-id': xProfileID } : undefined) },
31
+ options?.headers,
32
+ ]),
33
+ });
34
+ }
35
+ }
36
+ //# sourceMappingURL=catalogue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue.mjs","sourceRoot":"","sources":["../../src/resources/voice/catalogue.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,WAAW,EAAE,gCAA4B;AAGlD,OAAO,EAAE,YAAY,EAAE,mCAA+B;AAGtD;;;;;;;;GAQG;AACH,MAAM,OAAO,SAAU,SAAQ,WAAW;IACxC;;;;;;;;;;OAUG;IACH,IAAI,CACF,SAAiD,EAAE,EACnD,OAAwB;QAExB,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE;YAC1C,GAAG,OAAO;YACV,OAAO,EAAE,YAAY,CAAC;gBACpB,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxE,OAAO,EAAE,OAAO;aACjB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export { Agents, type APIResponseOfVoiceAgent, type APIResponseOfVoiceAgentSecret, type APIResponseOfVoiceAgentsList, type VoiceAgent, type VoiceAgentAudio, type VoiceAgentAudioSpec, type VoiceAgentLimits, type VoiceAgentLimitsSpec, type VoiceAgentParty, type VoiceAgentPartySpec, type VoiceAgentSecret, type VoiceAgentSpeech, type VoiceAgentSpeechSpec, type VoiceAgentTranscripts, type VoiceAgentTranscriptsSpec, type VoiceAgentsList, type AgentCreateParams, type AgentRetrieveParams, type AgentUpdateParams, type AgentListParams, type AgentDeleteParams, type AgentRotateSecretParams, type VoiceAgentsVoiceAgentsPage, } from "./agents.mjs";
2
+ export { Calls, type APIResponseOfCall, type APIResponseOfCallRecordings, type APIResponseOfCallsList, type Call, type CallParty, type CallRecording, type CallRecordings, type CallTimelineEntry, type CallsList, type CallRetrieveParams, type CallListParams, type CallHangupParams, type CallListRecordingsParams, type CallRecordParams, type CallsCallsPage, } from "./calls/index.mjs";
3
+ export { Catalogue, type APIResponseOfVoiceCatalogue, type VoiceCatalogue, type VoiceCatalogueVoice, type CatalogueListParams, } from "./catalogue.mjs";
4
+ export { Tokens, type APIResponseOfVoiceToken, type VoiceToken, type TokenCreateParams } from "./tokens.mjs";
5
+ export { Voice } from "./voice.mjs";
6
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/resources/voice/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,MAAM,EACN,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,GAChC,qBAAiB;AAClB,OAAO,EACL,KAAK,EACL,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,0BAAsB;AACvB,OAAO,EACL,SAAS,EACT,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,wBAAoB;AACrB,OAAO,EAAE,MAAM,EAAE,KAAK,uBAAuB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,qBAAiB;AACzG,OAAO,EAAE,KAAK,EAAE,oBAAgB"}
@@ -0,0 +1,6 @@
1
+ export { Agents, type APIResponseOfVoiceAgent, type APIResponseOfVoiceAgentSecret, type APIResponseOfVoiceAgentsList, type VoiceAgent, type VoiceAgentAudio, type VoiceAgentAudioSpec, type VoiceAgentLimits, type VoiceAgentLimitsSpec, type VoiceAgentParty, type VoiceAgentPartySpec, type VoiceAgentSecret, type VoiceAgentSpeech, type VoiceAgentSpeechSpec, type VoiceAgentTranscripts, type VoiceAgentTranscriptsSpec, type VoiceAgentsList, type AgentCreateParams, type AgentRetrieveParams, type AgentUpdateParams, type AgentListParams, type AgentDeleteParams, type AgentRotateSecretParams, type VoiceAgentsVoiceAgentsPage, } from "./agents.js";
2
+ export { Calls, type APIResponseOfCall, type APIResponseOfCallRecordings, type APIResponseOfCallsList, type Call, type CallParty, type CallRecording, type CallRecordings, type CallTimelineEntry, type CallsList, type CallRetrieveParams, type CallListParams, type CallHangupParams, type CallListRecordingsParams, type CallRecordParams, type CallsCallsPage, } from "./calls/index.js";
3
+ export { Catalogue, type APIResponseOfVoiceCatalogue, type VoiceCatalogue, type VoiceCatalogueVoice, type CatalogueListParams, } from "./catalogue.js";
4
+ export { Tokens, type APIResponseOfVoiceToken, type VoiceToken, type TokenCreateParams } from "./tokens.js";
5
+ export { Voice } from "./voice.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/voice/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,MAAM,EACN,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,GAChC,oBAAiB;AAClB,OAAO,EACL,KAAK,EACL,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,yBAAsB;AACvB,OAAO,EACL,SAAS,EACT,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,uBAAoB;AACrB,OAAO,EAAE,MAAM,EAAE,KAAK,uBAAuB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,oBAAiB;AACzG,OAAO,EAAE,KAAK,EAAE,mBAAgB"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Voice = exports.Tokens = exports.Catalogue = exports.Calls = exports.Agents = void 0;
5
+ var agents_1 = require("./agents.js");
6
+ Object.defineProperty(exports, "Agents", { enumerable: true, get: function () { return agents_1.Agents; } });
7
+ var index_1 = require("./calls/index.js");
8
+ Object.defineProperty(exports, "Calls", { enumerable: true, get: function () { return index_1.Calls; } });
9
+ var catalogue_1 = require("./catalogue.js");
10
+ Object.defineProperty(exports, "Catalogue", { enumerable: true, get: function () { return catalogue_1.Catalogue; } });
11
+ var tokens_1 = require("./tokens.js");
12
+ Object.defineProperty(exports, "Tokens", { enumerable: true, get: function () { return tokens_1.Tokens; } });
13
+ var voice_1 = require("./voice.js");
14
+ Object.defineProperty(exports, "Voice", { enumerable: true, get: function () { return voice_1.Voice; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/voice/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,sCAyBkB;AAxBhB,gGAAA,MAAM,OAAA;AAyBR,0CAiBuB;AAhBrB,8FAAA,KAAK,OAAA;AAiBP,4CAMqB;AALnB,sGAAA,SAAS,OAAA;AAMX,sCAAyG;AAAhG,gGAAA,MAAM,OAAA;AACf,oCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
@@ -0,0 +1,7 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+ export { Agents, } from "./agents.mjs";
3
+ export { Calls, } from "./calls/index.mjs";
4
+ export { Catalogue, } from "./catalogue.mjs";
5
+ export { Tokens } from "./tokens.mjs";
6
+ export { Voice } from "./voice.mjs";
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/resources/voice/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EACL,MAAM,GAwBP,qBAAiB;AAClB,OAAO,EACL,KAAK,GAgBN,0BAAsB;AACvB,OAAO,EACL,SAAS,GAKV,wBAAoB;AACrB,OAAO,EAAE,MAAM,EAAyE,qBAAiB;AACzG,OAAO,EAAE,KAAK,EAAE,oBAAgB"}
@@ -0,0 +1,111 @@
1
+ import { APIResource } from "../../core/resource.mjs";
2
+ import * as WebhooksAPI from "../webhooks.mjs";
3
+ import { APIPromise } from "../../core/api-promise.mjs";
4
+ import { RequestOptions } from "../../internal/request-options.mjs";
5
+ /**
6
+ * Phone calls from the numbers you hold, driven by your own callback URL.
7
+ *
8
+ * `POST /v3/channels/voice` enables a number for calls, with the callback URL Sent asks what to do with each call on it, and `POST /v3/voice/tokens` mints a short-lived token that lets a user of your app place and receive calls as that number. When a call arrives or a caller presses a key, a signed question is POSTed to the callback URL and the answer decides the call; `POST /v3/channels/voice/{number}/test` checks the URL answers the way we need before a real call reaches it, and `POST /v3/channels/voice/{number}/rotate-secret` replaces the signing secret. The call events themselves (`call.completed` and the rest) arrive through your webhooks.
9
+ *
10
+ * Every call is a record under `/v3/voice/calls`: read it, list its recordings once one is ready, hang it up, start or stop recording, and add, mute or remove conference participants while it is live. A leg to a phone number runs for at most what your balance affords at the destination's rate.
11
+ *
12
+ * **Voice agents.** `POST /v3/voice/agents` creates an agent that answers calls through the Sent Voice Gateway: `session_type` says whether Sent carries the call as text (speech recognised and spoken for the agent) or as audio, `websocket_url` is where the gateway dials the agent for each call (leave it out and the agent dials in with your API key), and `tools`, `transfer_targets`, `fallback` and `limits` say what it may do on a call. The agent's `signing_secret` is shown on create and on `POST /v3/voice/agents/{id}/rotate-secret` only. Voices and languages for text sessions come from `GET /v3/voice/voices`. A number takes calls to an agent once it is bound to it on `/v3/channels/voice`.
13
+ */
14
+ export declare class Tokens extends APIResource {
15
+ /**
16
+ * Mints a short-lived token for one of your app users. Call this from your backend
17
+ * and return the token to your app, which passes it to the voice client SDK to
18
+ * register. The identity is bound to the given number, or to your default app-call
19
+ * number when omitted, and calls placed by that identity are routed through the
20
+ * bound number. Minting again re-binds the identity, so an identity can move
21
+ * between numbers.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const apiResponseOfVoiceToken =
26
+ * await client.voice.tokens.create();
27
+ * ```
28
+ */
29
+ create(params: TokenCreateParams, options?: RequestOptions): APIPromise<APIResponseOfVoiceToken>;
30
+ }
31
+ /**
32
+ * Standard API response envelope for all v3 endpoints
33
+ */
34
+ export interface APIResponseOfVoiceToken {
35
+ /**
36
+ * A short-lived token your app passes to the voice client SDK to register
37
+ */
38
+ data?: VoiceToken | null;
39
+ /**
40
+ * Error information
41
+ */
42
+ error?: WebhooksAPI.ErrorDetail | null;
43
+ /**
44
+ * Request and response metadata
45
+ */
46
+ meta?: WebhooksAPI.APIMeta;
47
+ /**
48
+ * Indicates whether the request was successful
49
+ */
50
+ success?: boolean;
51
+ }
52
+ /**
53
+ * A short-lived token your app passes to the voice client SDK to register
54
+ */
55
+ export interface VoiceToken {
56
+ /**
57
+ * The signed token. Hand it to the client SDK unchanged. Treat it as opaque: read
58
+ * the identity, number, and expiry from this response, not from the token.
59
+ */
60
+ token?: string;
61
+ /**
62
+ * When the token expires (UTC)
63
+ */
64
+ expires_at?: string;
65
+ /**
66
+ * The identity the token was minted for
67
+ */
68
+ identity?: string;
69
+ /**
70
+ * The phone number this identity is now bound to, in E.164 format
71
+ */
72
+ number?: string;
73
+ }
74
+ export interface TokenCreateParams {
75
+ /**
76
+ * Body param: Your identifier for the app user, such as an agent or account id.
77
+ * Letters, digits, hyphens and underscores only, up to 200 characters.
78
+ */
79
+ identity?: string;
80
+ /**
81
+ * Body param: One of your voice-enabled phone numbers in E.164 format. Calls
82
+ * placed by this identity are routed through that number. Omit to use your default
83
+ * app-call number.
84
+ */
85
+ number?: string | null;
86
+ /**
87
+ * Body param: Sandbox flag - when true, the operation is simulated without side
88
+ * effects Useful for testing integrations without actual execution
89
+ */
90
+ sandbox?: boolean;
91
+ /**
92
+ * Body param: Token lifetime in seconds. Defaults to 600 and cannot exceed 3600.
93
+ */
94
+ ttl?: number | null;
95
+ /**
96
+ * Header param: Unique key to ensure idempotent request processing. Must be 1-255
97
+ * alphanumeric characters, hyphens, or underscores. Responses are cached for 24
98
+ * hours per key per customer.
99
+ */
100
+ 'Idempotency-Key'?: string;
101
+ /**
102
+ * Header param: Profile UUID to scope the request to a child profile. Only
103
+ * organization API keys can use this header. The profile must belong to the
104
+ * calling organization.
105
+ */
106
+ 'x-profile-id'?: string;
107
+ }
108
+ export declare namespace Tokens {
109
+ export { type APIResponseOfVoiceToken as APIResponseOfVoiceToken, type VoiceToken as VoiceToken, type TokenCreateParams as TokenCreateParams, };
110
+ }
111
+ //# sourceMappingURL=tokens.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.mts","sourceRoot":"","sources":["../../src/resources/voice/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,gCAA4B;AAClD,OAAO,KAAK,WAAW,wBAAoB;AAC3C,OAAO,EAAE,UAAU,EAAE,mCAA+B;AAEpD,OAAO,EAAE,cAAc,EAAE,2CAAuC;AAEhE;;;;;;;;GAQG;AACH,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,uBAAuB,CAAC;CAcjG;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;IAEvC;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,uBAAuB,IAAI,uBAAuB,EACvD,KAAK,UAAU,IAAI,UAAU,EAC7B,KAAK,iBAAiB,IAAI,iBAAiB,GAC5C,CAAC;CACH"}
@@ -0,0 +1,111 @@
1
+ import { APIResource } from "../../core/resource.js";
2
+ import * as WebhooksAPI from "../webhooks.js";
3
+ import { APIPromise } from "../../core/api-promise.js";
4
+ import { RequestOptions } from "../../internal/request-options.js";
5
+ /**
6
+ * Phone calls from the numbers you hold, driven by your own callback URL.
7
+ *
8
+ * `POST /v3/channels/voice` enables a number for calls, with the callback URL Sent asks what to do with each call on it, and `POST /v3/voice/tokens` mints a short-lived token that lets a user of your app place and receive calls as that number. When a call arrives or a caller presses a key, a signed question is POSTed to the callback URL and the answer decides the call; `POST /v3/channels/voice/{number}/test` checks the URL answers the way we need before a real call reaches it, and `POST /v3/channels/voice/{number}/rotate-secret` replaces the signing secret. The call events themselves (`call.completed` and the rest) arrive through your webhooks.
9
+ *
10
+ * Every call is a record under `/v3/voice/calls`: read it, list its recordings once one is ready, hang it up, start or stop recording, and add, mute or remove conference participants while it is live. A leg to a phone number runs for at most what your balance affords at the destination's rate.
11
+ *
12
+ * **Voice agents.** `POST /v3/voice/agents` creates an agent that answers calls through the Sent Voice Gateway: `session_type` says whether Sent carries the call as text (speech recognised and spoken for the agent) or as audio, `websocket_url` is where the gateway dials the agent for each call (leave it out and the agent dials in with your API key), and `tools`, `transfer_targets`, `fallback` and `limits` say what it may do on a call. The agent's `signing_secret` is shown on create and on `POST /v3/voice/agents/{id}/rotate-secret` only. Voices and languages for text sessions come from `GET /v3/voice/voices`. A number takes calls to an agent once it is bound to it on `/v3/channels/voice`.
13
+ */
14
+ export declare class Tokens extends APIResource {
15
+ /**
16
+ * Mints a short-lived token for one of your app users. Call this from your backend
17
+ * and return the token to your app, which passes it to the voice client SDK to
18
+ * register. The identity is bound to the given number, or to your default app-call
19
+ * number when omitted, and calls placed by that identity are routed through the
20
+ * bound number. Minting again re-binds the identity, so an identity can move
21
+ * between numbers.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const apiResponseOfVoiceToken =
26
+ * await client.voice.tokens.create();
27
+ * ```
28
+ */
29
+ create(params: TokenCreateParams, options?: RequestOptions): APIPromise<APIResponseOfVoiceToken>;
30
+ }
31
+ /**
32
+ * Standard API response envelope for all v3 endpoints
33
+ */
34
+ export interface APIResponseOfVoiceToken {
35
+ /**
36
+ * A short-lived token your app passes to the voice client SDK to register
37
+ */
38
+ data?: VoiceToken | null;
39
+ /**
40
+ * Error information
41
+ */
42
+ error?: WebhooksAPI.ErrorDetail | null;
43
+ /**
44
+ * Request and response metadata
45
+ */
46
+ meta?: WebhooksAPI.APIMeta;
47
+ /**
48
+ * Indicates whether the request was successful
49
+ */
50
+ success?: boolean;
51
+ }
52
+ /**
53
+ * A short-lived token your app passes to the voice client SDK to register
54
+ */
55
+ export interface VoiceToken {
56
+ /**
57
+ * The signed token. Hand it to the client SDK unchanged. Treat it as opaque: read
58
+ * the identity, number, and expiry from this response, not from the token.
59
+ */
60
+ token?: string;
61
+ /**
62
+ * When the token expires (UTC)
63
+ */
64
+ expires_at?: string;
65
+ /**
66
+ * The identity the token was minted for
67
+ */
68
+ identity?: string;
69
+ /**
70
+ * The phone number this identity is now bound to, in E.164 format
71
+ */
72
+ number?: string;
73
+ }
74
+ export interface TokenCreateParams {
75
+ /**
76
+ * Body param: Your identifier for the app user, such as an agent or account id.
77
+ * Letters, digits, hyphens and underscores only, up to 200 characters.
78
+ */
79
+ identity?: string;
80
+ /**
81
+ * Body param: One of your voice-enabled phone numbers in E.164 format. Calls
82
+ * placed by this identity are routed through that number. Omit to use your default
83
+ * app-call number.
84
+ */
85
+ number?: string | null;
86
+ /**
87
+ * Body param: Sandbox flag - when true, the operation is simulated without side
88
+ * effects Useful for testing integrations without actual execution
89
+ */
90
+ sandbox?: boolean;
91
+ /**
92
+ * Body param: Token lifetime in seconds. Defaults to 600 and cannot exceed 3600.
93
+ */
94
+ ttl?: number | null;
95
+ /**
96
+ * Header param: Unique key to ensure idempotent request processing. Must be 1-255
97
+ * alphanumeric characters, hyphens, or underscores. Responses are cached for 24
98
+ * hours per key per customer.
99
+ */
100
+ 'Idempotency-Key'?: string;
101
+ /**
102
+ * Header param: Profile UUID to scope the request to a child profile. Only
103
+ * organization API keys can use this header. The profile must belong to the
104
+ * calling organization.
105
+ */
106
+ 'x-profile-id'?: string;
107
+ }
108
+ export declare namespace Tokens {
109
+ export { type APIResponseOfVoiceToken as APIResponseOfVoiceToken, type VoiceToken as VoiceToken, type TokenCreateParams as TokenCreateParams, };
110
+ }
111
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/resources/voice/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,+BAA4B;AAClD,OAAO,KAAK,WAAW,uBAAoB;AAC3C,OAAO,EAAE,UAAU,EAAE,kCAA+B;AAEpD,OAAO,EAAE,cAAc,EAAE,0CAAuC;AAEhE;;;;;;;;GAQG;AACH,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,uBAAuB,CAAC;CAcjG;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;IAEvC;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,uBAAuB,IAAI,uBAAuB,EACvD,KAAK,UAAU,IAAI,UAAU,EAC7B,KAAK,iBAAiB,IAAI,iBAAiB,GAC5C,CAAC;CACH"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Tokens = void 0;
5
+ const resource_1 = require("../../core/resource.js");
6
+ const headers_1 = require("../../internal/headers.js");
7
+ /**
8
+ * Phone calls from the numbers you hold, driven by your own callback URL.
9
+ *
10
+ * `POST /v3/channels/voice` enables a number for calls, with the callback URL Sent asks what to do with each call on it, and `POST /v3/voice/tokens` mints a short-lived token that lets a user of your app place and receive calls as that number. When a call arrives or a caller presses a key, a signed question is POSTed to the callback URL and the answer decides the call; `POST /v3/channels/voice/{number}/test` checks the URL answers the way we need before a real call reaches it, and `POST /v3/channels/voice/{number}/rotate-secret` replaces the signing secret. The call events themselves (`call.completed` and the rest) arrive through your webhooks.
11
+ *
12
+ * Every call is a record under `/v3/voice/calls`: read it, list its recordings once one is ready, hang it up, start or stop recording, and add, mute or remove conference participants while it is live. A leg to a phone number runs for at most what your balance affords at the destination's rate.
13
+ *
14
+ * **Voice agents.** `POST /v3/voice/agents` creates an agent that answers calls through the Sent Voice Gateway: `session_type` says whether Sent carries the call as text (speech recognised and spoken for the agent) or as audio, `websocket_url` is where the gateway dials the agent for each call (leave it out and the agent dials in with your API key), and `tools`, `transfer_targets`, `fallback` and `limits` say what it may do on a call. The agent's `signing_secret` is shown on create and on `POST /v3/voice/agents/{id}/rotate-secret` only. Voices and languages for text sessions come from `GET /v3/voice/voices`. A number takes calls to an agent once it is bound to it on `/v3/channels/voice`.
15
+ */
16
+ class Tokens extends resource_1.APIResource {
17
+ /**
18
+ * Mints a short-lived token for one of your app users. Call this from your backend
19
+ * and return the token to your app, which passes it to the voice client SDK to
20
+ * register. The identity is bound to the given number, or to your default app-call
21
+ * number when omitted, and calls placed by that identity are routed through the
22
+ * bound number. Minting again re-binds the identity, so an identity can move
23
+ * between numbers.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const apiResponseOfVoiceToken =
28
+ * await client.voice.tokens.create();
29
+ * ```
30
+ */
31
+ create(params, options) {
32
+ const { 'Idempotency-Key': idempotencyKey, 'x-profile-id': xProfileID, ...body } = params;
33
+ return this._client.post('/v3/voice/tokens', {
34
+ body,
35
+ ...options,
36
+ headers: (0, headers_1.buildHeaders)([
37
+ {
38
+ ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined),
39
+ ...(xProfileID != null ? { 'x-profile-id': xProfileID } : undefined),
40
+ },
41
+ options?.headers,
42
+ ]),
43
+ });
44
+ }
45
+ }
46
+ exports.Tokens = Tokens;
47
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/resources/voice/tokens.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,qDAAkD;AAGlD,uDAAsD;AAGtD;;;;;;;;GAQG;AACH,MAAa,MAAO,SAAQ,sBAAW;IACrC;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAyB,EAAE,OAAwB;QACxD,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAC1F,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC3C,IAAI;YACJ,GAAG,OAAO;YACV,OAAO,EAAE,IAAA,sBAAY,EAAC;gBACpB;oBACE,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC/E,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;iBACrE;gBACD,OAAO,EAAE,OAAO;aACjB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF;AA7BD,wBA6BC"}
@@ -0,0 +1,43 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+ import { APIResource } from "../../core/resource.mjs";
3
+ import { buildHeaders } from "../../internal/headers.mjs";
4
+ /**
5
+ * Phone calls from the numbers you hold, driven by your own callback URL.
6
+ *
7
+ * `POST /v3/channels/voice` enables a number for calls, with the callback URL Sent asks what to do with each call on it, and `POST /v3/voice/tokens` mints a short-lived token that lets a user of your app place and receive calls as that number. When a call arrives or a caller presses a key, a signed question is POSTed to the callback URL and the answer decides the call; `POST /v3/channels/voice/{number}/test` checks the URL answers the way we need before a real call reaches it, and `POST /v3/channels/voice/{number}/rotate-secret` replaces the signing secret. The call events themselves (`call.completed` and the rest) arrive through your webhooks.
8
+ *
9
+ * Every call is a record under `/v3/voice/calls`: read it, list its recordings once one is ready, hang it up, start or stop recording, and add, mute or remove conference participants while it is live. A leg to a phone number runs for at most what your balance affords at the destination's rate.
10
+ *
11
+ * **Voice agents.** `POST /v3/voice/agents` creates an agent that answers calls through the Sent Voice Gateway: `session_type` says whether Sent carries the call as text (speech recognised and spoken for the agent) or as audio, `websocket_url` is where the gateway dials the agent for each call (leave it out and the agent dials in with your API key), and `tools`, `transfer_targets`, `fallback` and `limits` say what it may do on a call. The agent's `signing_secret` is shown on create and on `POST /v3/voice/agents/{id}/rotate-secret` only. Voices and languages for text sessions come from `GET /v3/voice/voices`. A number takes calls to an agent once it is bound to it on `/v3/channels/voice`.
12
+ */
13
+ export class Tokens extends APIResource {
14
+ /**
15
+ * Mints a short-lived token for one of your app users. Call this from your backend
16
+ * and return the token to your app, which passes it to the voice client SDK to
17
+ * register. The identity is bound to the given number, or to your default app-call
18
+ * number when omitted, and calls placed by that identity are routed through the
19
+ * bound number. Minting again re-binds the identity, so an identity can move
20
+ * between numbers.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const apiResponseOfVoiceToken =
25
+ * await client.voice.tokens.create();
26
+ * ```
27
+ */
28
+ create(params, options) {
29
+ const { 'Idempotency-Key': idempotencyKey, 'x-profile-id': xProfileID, ...body } = params;
30
+ return this._client.post('/v3/voice/tokens', {
31
+ body,
32
+ ...options,
33
+ headers: buildHeaders([
34
+ {
35
+ ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined),
36
+ ...(xProfileID != null ? { 'x-profile-id': xProfileID } : undefined),
37
+ },
38
+ options?.headers,
39
+ ]),
40
+ });
41
+ }
42
+ }
43
+ //# sourceMappingURL=tokens.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.mjs","sourceRoot":"","sources":["../../src/resources/voice/tokens.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,WAAW,EAAE,gCAA4B;AAGlD,OAAO,EAAE,YAAY,EAAE,mCAA+B;AAGtD;;;;;;;;GAQG;AACH,MAAM,OAAO,MAAO,SAAQ,WAAW;IACrC;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAyB,EAAE,OAAwB;QACxD,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAC1F,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC3C,IAAI;YACJ,GAAG,OAAO;YACV,OAAO,EAAE,YAAY,CAAC;gBACpB;oBACE,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC/E,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;iBACrE;gBACD,OAAO,EAAE,OAAO;aACjB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { APIResource } from "../../core/resource.mjs";
2
+ import * as AgentsAPI from "./agents.mjs";
3
+ import { APIResponseOfVoiceAgent, APIResponseOfVoiceAgentSecret, APIResponseOfVoiceAgentsList, AgentCreateParams, AgentDeleteParams, AgentListParams, AgentRetrieveParams, AgentRotateSecretParams, AgentUpdateParams, Agents, VoiceAgent, VoiceAgentAudio, VoiceAgentAudioSpec, VoiceAgentLimits, VoiceAgentLimitsSpec, VoiceAgentParty, VoiceAgentPartySpec, VoiceAgentSecret, VoiceAgentSpeech, VoiceAgentSpeechSpec, VoiceAgentTranscripts, VoiceAgentTranscriptsSpec, VoiceAgentsList, VoiceAgentsVoiceAgentsPage } from "./agents.mjs";
4
+ import * as CatalogueAPI from "./catalogue.mjs";
5
+ import { APIResponseOfVoiceCatalogue, Catalogue, CatalogueListParams, VoiceCatalogue, VoiceCatalogueVoice } from "./catalogue.mjs";
6
+ import * as TokensAPI from "./tokens.mjs";
7
+ import { APIResponseOfVoiceToken, TokenCreateParams, Tokens, VoiceToken } from "./tokens.mjs";
8
+ import * as CallsAPI from "./calls/calls.mjs";
9
+ import { APIResponseOfCall, APIResponseOfCallRecordings, APIResponseOfCallsList, Call, CallHangupParams, CallListParams, CallListRecordingsParams, CallParty, CallRecordParams, CallRecording, CallRecordings, CallRetrieveParams, CallTimelineEntry, Calls, CallsCallsPage, CallsList } from "./calls/calls.mjs";
10
+ export declare class Voice extends APIResource {
11
+ calls: CallsAPI.Calls;
12
+ tokens: TokensAPI.Tokens;
13
+ agents: AgentsAPI.Agents;
14
+ catalogue: CatalogueAPI.Catalogue;
15
+ }
16
+ export declare namespace Voice {
17
+ export { Calls as Calls, type APIResponseOfCall as APIResponseOfCall, type APIResponseOfCallRecordings as APIResponseOfCallRecordings, type APIResponseOfCallsList as APIResponseOfCallsList, type Call as Call, type CallParty as CallParty, type CallRecording as CallRecording, type CallRecordings as CallRecordings, type CallTimelineEntry as CallTimelineEntry, type CallsList as CallsList, type CallsCallsPage as CallsCallsPage, type CallRetrieveParams as CallRetrieveParams, type CallListParams as CallListParams, type CallHangupParams as CallHangupParams, type CallListRecordingsParams as CallListRecordingsParams, type CallRecordParams as CallRecordParams, };
18
+ export { Tokens as Tokens, type APIResponseOfVoiceToken as APIResponseOfVoiceToken, type VoiceToken as VoiceToken, type TokenCreateParams as TokenCreateParams, };
19
+ export { Agents as Agents, type APIResponseOfVoiceAgent as APIResponseOfVoiceAgent, type APIResponseOfVoiceAgentSecret as APIResponseOfVoiceAgentSecret, type APIResponseOfVoiceAgentsList as APIResponseOfVoiceAgentsList, type VoiceAgent as VoiceAgent, type VoiceAgentAudio as VoiceAgentAudio, type VoiceAgentAudioSpec as VoiceAgentAudioSpec, type VoiceAgentLimits as VoiceAgentLimits, type VoiceAgentLimitsSpec as VoiceAgentLimitsSpec, type VoiceAgentParty as VoiceAgentParty, type VoiceAgentPartySpec as VoiceAgentPartySpec, type VoiceAgentSecret as VoiceAgentSecret, type VoiceAgentSpeech as VoiceAgentSpeech, type VoiceAgentSpeechSpec as VoiceAgentSpeechSpec, type VoiceAgentTranscripts as VoiceAgentTranscripts, type VoiceAgentTranscriptsSpec as VoiceAgentTranscriptsSpec, type VoiceAgentsList as VoiceAgentsList, type VoiceAgentsVoiceAgentsPage as VoiceAgentsVoiceAgentsPage, type AgentCreateParams as AgentCreateParams, type AgentRetrieveParams as AgentRetrieveParams, type AgentUpdateParams as AgentUpdateParams, type AgentListParams as AgentListParams, type AgentDeleteParams as AgentDeleteParams, type AgentRotateSecretParams as AgentRotateSecretParams, };
20
+ export { Catalogue as Catalogue, type APIResponseOfVoiceCatalogue as APIResponseOfVoiceCatalogue, type VoiceCatalogue as VoiceCatalogue, type VoiceCatalogueVoice as VoiceCatalogueVoice, type CatalogueListParams as CatalogueListParams, };
21
+ }
22
+ //# sourceMappingURL=voice.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice.d.mts","sourceRoot":"","sources":["../../src/resources/voice/voice.ts"],"names":[],"mappings":"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"}