telnyx 6.41.1 → 6.43.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 (256) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/client.d.mts +2 -2
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +2 -2
  5. package/client.d.ts.map +1 -1
  6. package/client.js +11 -0
  7. package/client.js.map +1 -1
  8. package/client.mjs +11 -0
  9. package/client.mjs.map +1 -1
  10. package/core/EventEmitter.d.mts +11 -0
  11. package/core/EventEmitter.d.mts.map +1 -1
  12. package/core/EventEmitter.d.ts +11 -0
  13. package/core/EventEmitter.d.ts.map +1 -1
  14. package/core/EventEmitter.js +15 -1
  15. package/core/EventEmitter.js.map +1 -1
  16. package/core/EventEmitter.mjs +13 -0
  17. package/core/EventEmitter.mjs.map +1 -1
  18. package/internal/types.d.mts +6 -6
  19. package/internal/types.d.mts.map +1 -1
  20. package/internal/types.d.ts +6 -6
  21. package/internal/types.d.ts.map +1 -1
  22. package/internal/utils/env.js +2 -2
  23. package/internal/utils/env.js.map +1 -1
  24. package/internal/utils/env.mjs +2 -2
  25. package/internal/utils/env.mjs.map +1 -1
  26. package/internal/ws-adapter-browser.d.mts +34 -0
  27. package/internal/ws-adapter-browser.d.mts.map +1 -0
  28. package/internal/ws-adapter-browser.d.ts +34 -0
  29. package/internal/ws-adapter-browser.d.ts.map +1 -0
  30. package/internal/ws-adapter-browser.js +88 -0
  31. package/internal/ws-adapter-browser.js.map +1 -0
  32. package/internal/ws-adapter-browser.mjs +84 -0
  33. package/internal/ws-adapter-browser.mjs.map +1 -0
  34. package/internal/ws-adapter-node.d.mts +27 -0
  35. package/internal/ws-adapter-node.d.mts.map +1 -0
  36. package/internal/ws-adapter-node.d.ts +27 -0
  37. package/internal/ws-adapter-node.d.ts.map +1 -0
  38. package/internal/ws-adapter-node.js +90 -0
  39. package/internal/ws-adapter-node.js.map +1 -0
  40. package/internal/ws-adapter-node.mjs +86 -0
  41. package/internal/ws-adapter-node.mjs.map +1 -0
  42. package/internal/ws-adapter.d.mts +24 -0
  43. package/internal/ws-adapter.d.mts.map +1 -0
  44. package/internal/ws-adapter.d.ts +24 -0
  45. package/internal/ws-adapter.d.ts.map +1 -0
  46. package/internal/ws-adapter.js +11 -0
  47. package/internal/ws-adapter.js.map +1 -0
  48. package/internal/ws-adapter.mjs +8 -0
  49. package/internal/ws-adapter.mjs.map +1 -0
  50. package/internal/ws.d.mts +80 -0
  51. package/internal/ws.d.mts.map +1 -0
  52. package/internal/ws.d.ts +80 -0
  53. package/internal/ws.d.ts.map +1 -0
  54. package/internal/ws.js +153 -0
  55. package/internal/ws.js.map +1 -0
  56. package/internal/ws.mjs +147 -0
  57. package/internal/ws.mjs.map +1 -0
  58. package/lib/text-to-speech-ws-base.d.mts +106 -0
  59. package/lib/text-to-speech-ws-base.d.mts.map +1 -0
  60. package/lib/text-to-speech-ws-base.d.ts +106 -0
  61. package/lib/text-to-speech-ws-base.d.ts.map +1 -0
  62. package/lib/text-to-speech-ws-base.js +475 -0
  63. package/lib/text-to-speech-ws-base.js.map +1 -0
  64. package/lib/text-to-speech-ws-base.mjs +471 -0
  65. package/lib/text-to-speech-ws-base.mjs.map +1 -0
  66. package/lib/text-to-speech-ws-internal.d.mts +71 -0
  67. package/lib/text-to-speech-ws-internal.d.mts.map +1 -0
  68. package/lib/text-to-speech-ws-internal.d.ts +71 -0
  69. package/lib/text-to-speech-ws-internal.d.ts.map +1 -0
  70. package/lib/text-to-speech-ws-internal.js +47 -0
  71. package/lib/text-to-speech-ws-internal.js.map +1 -0
  72. package/lib/text-to-speech-ws-internal.mjs +41 -0
  73. package/lib/text-to-speech-ws-internal.mjs.map +1 -0
  74. package/lib/text-to-speech-ws.d.mts +13 -0
  75. package/lib/text-to-speech-ws.d.mts.map +1 -0
  76. package/lib/text-to-speech-ws.d.ts +13 -0
  77. package/lib/text-to-speech-ws.d.ts.map +1 -0
  78. package/lib/text-to-speech-ws.js +30 -0
  79. package/lib/text-to-speech-ws.js.map +1 -0
  80. package/lib/text-to-speech-ws.mjs +25 -0
  81. package/lib/text-to-speech-ws.mjs.map +1 -0
  82. package/lib/webhooks.d.mts +6 -0
  83. package/lib/webhooks.d.mts.map +1 -1
  84. package/lib/webhooks.d.ts +6 -0
  85. package/lib/webhooks.d.ts.map +1 -1
  86. package/lib/webhooks.js +16 -0
  87. package/lib/webhooks.js.map +1 -1
  88. package/lib/webhooks.mjs +14 -0
  89. package/lib/webhooks.mjs.map +1 -1
  90. package/package.json +1 -1
  91. package/resources/ai/assistants/assistants.d.mts +938 -65
  92. package/resources/ai/assistants/assistants.d.mts.map +1 -1
  93. package/resources/ai/assistants/assistants.d.ts +938 -65
  94. package/resources/ai/assistants/assistants.d.ts.map +1 -1
  95. package/resources/ai/assistants/assistants.js +0 -1
  96. package/resources/ai/assistants/assistants.js.map +1 -1
  97. package/resources/ai/assistants/assistants.mjs +0 -1
  98. package/resources/ai/assistants/assistants.mjs.map +1 -1
  99. package/resources/ai/assistants/versions.d.mts +563 -25
  100. package/resources/ai/assistants/versions.d.mts.map +1 -1
  101. package/resources/ai/assistants/versions.d.ts +563 -25
  102. package/resources/ai/assistants/versions.d.ts.map +1 -1
  103. package/resources/ai/conversations/conversations.d.mts +2 -2
  104. package/resources/ai/conversations/conversations.d.mts.map +1 -1
  105. package/resources/ai/conversations/conversations.d.ts +2 -2
  106. package/resources/ai/conversations/conversations.d.ts.map +1 -1
  107. package/resources/ai/conversations/conversations.js.map +1 -1
  108. package/resources/ai/conversations/conversations.mjs +1 -1
  109. package/resources/ai/conversations/conversations.mjs.map +1 -1
  110. package/resources/ai/conversations/index.d.mts +1 -1
  111. package/resources/ai/conversations/index.d.mts.map +1 -1
  112. package/resources/ai/conversations/index.d.ts +1 -1
  113. package/resources/ai/conversations/index.d.ts.map +1 -1
  114. package/resources/ai/conversations/index.js.map +1 -1
  115. package/resources/ai/conversations/index.mjs +1 -1
  116. package/resources/ai/conversations/index.mjs.map +1 -1
  117. package/resources/ai/conversations/messages.d.mts +46 -48
  118. package/resources/ai/conversations/messages.d.mts.map +1 -1
  119. package/resources/ai/conversations/messages.d.ts +46 -48
  120. package/resources/ai/conversations/messages.d.ts.map +1 -1
  121. package/resources/ai/conversations/messages.js +9 -6
  122. package/resources/ai/conversations/messages.js.map +1 -1
  123. package/resources/ai/conversations/messages.mjs +9 -6
  124. package/resources/ai/conversations/messages.mjs.map +1 -1
  125. package/resources/calls/actions.d.mts +114 -6
  126. package/resources/calls/actions.d.mts.map +1 -1
  127. package/resources/calls/actions.d.ts +114 -6
  128. package/resources/calls/actions.d.ts.map +1 -1
  129. package/resources/calls/actions.js +4 -0
  130. package/resources/calls/actions.js.map +1 -1
  131. package/resources/calls/actions.mjs +4 -0
  132. package/resources/calls/actions.mjs.map +1 -1
  133. package/resources/calls/calls.d.mts +168 -8
  134. package/resources/calls/calls.d.mts.map +1 -1
  135. package/resources/calls/calls.d.ts +168 -8
  136. package/resources/calls/calls.d.ts.map +1 -1
  137. package/resources/calls/calls.js +4 -0
  138. package/resources/calls/calls.js.map +1 -1
  139. package/resources/calls/calls.mjs +4 -0
  140. package/resources/calls/calls.mjs.map +1 -1
  141. package/resources/index.d.mts +2 -3
  142. package/resources/index.d.mts.map +1 -1
  143. package/resources/index.d.ts +2 -3
  144. package/resources/index.d.ts.map +1 -1
  145. package/resources/index.js +2 -7
  146. package/resources/index.js.map +1 -1
  147. package/resources/index.mjs +1 -2
  148. package/resources/index.mjs.map +1 -1
  149. package/resources/messages/messages.d.mts +4 -0
  150. package/resources/messages/messages.d.mts.map +1 -1
  151. package/resources/messages/messages.d.ts +4 -0
  152. package/resources/messages/messages.d.ts.map +1 -1
  153. package/resources/messages/messages.js.map +1 -1
  154. package/resources/messages/messages.mjs.map +1 -1
  155. package/resources/session-analysis/session-analysis.d.mts +3 -13
  156. package/resources/session-analysis/session-analysis.d.mts.map +1 -1
  157. package/resources/session-analysis/session-analysis.d.ts +3 -13
  158. package/resources/session-analysis/session-analysis.d.ts.map +1 -1
  159. package/resources/session-analysis/session-analysis.js.map +1 -1
  160. package/resources/session-analysis/session-analysis.mjs.map +1 -1
  161. package/resources/texml/accounts/calls/calls.d.mts +45 -0
  162. package/resources/texml/accounts/calls/calls.d.mts.map +1 -1
  163. package/resources/texml/accounts/calls/calls.d.ts +45 -0
  164. package/resources/texml/accounts/calls/calls.d.ts.map +1 -1
  165. package/resources/texml/accounts/calls/calls.js.map +1 -1
  166. package/resources/texml/accounts/calls/calls.mjs.map +1 -1
  167. package/resources/text-to-speech/index.d.mts +2 -1
  168. package/resources/text-to-speech/index.d.mts.map +1 -1
  169. package/resources/text-to-speech/index.d.ts +2 -1
  170. package/resources/text-to-speech/index.d.ts.map +1 -1
  171. package/resources/text-to-speech/index.js.map +1 -1
  172. package/resources/text-to-speech/index.mjs.map +1 -1
  173. package/resources/text-to-speech/internal-base.d.mts +1 -48
  174. package/resources/text-to-speech/internal-base.d.mts.map +1 -1
  175. package/resources/text-to-speech/internal-base.d.ts +1 -48
  176. package/resources/text-to-speech/internal-base.d.ts.map +1 -1
  177. package/resources/text-to-speech/internal-base.js +5 -48
  178. package/resources/text-to-speech/internal-base.js.map +1 -1
  179. package/resources/text-to-speech/internal-base.mjs +1 -44
  180. package/resources/text-to-speech/internal-base.mjs.map +1 -1
  181. package/resources/text-to-speech/text-to-speech.d.mts +28 -3
  182. package/resources/text-to-speech/text-to-speech.d.mts.map +1 -1
  183. package/resources/text-to-speech/text-to-speech.d.ts +28 -3
  184. package/resources/text-to-speech/text-to-speech.d.ts.map +1 -1
  185. package/resources/text-to-speech/text-to-speech.js +1 -1
  186. package/resources/text-to-speech/text-to-speech.mjs +1 -1
  187. package/resources/text-to-speech/ws-base.d.mts +2 -0
  188. package/resources/text-to-speech/ws-base.d.mts.map +1 -0
  189. package/resources/text-to-speech/ws-base.d.ts +2 -0
  190. package/resources/text-to-speech/ws-base.d.ts.map +1 -0
  191. package/resources/text-to-speech/ws-base.js +7 -0
  192. package/resources/text-to-speech/ws-base.js.map +1 -0
  193. package/resources/text-to-speech/ws-base.mjs +3 -0
  194. package/resources/text-to-speech/ws-base.mjs.map +1 -0
  195. package/resources/text-to-speech/ws.d.mts +2 -41
  196. package/resources/text-to-speech/ws.d.mts.map +1 -1
  197. package/resources/text-to-speech/ws.d.ts +2 -41
  198. package/resources/text-to-speech/ws.d.ts.map +1 -1
  199. package/resources/text-to-speech/ws.js +2 -182
  200. package/resources/text-to-speech/ws.js.map +1 -1
  201. package/resources/text-to-speech/ws.mjs +1 -180
  202. package/resources/text-to-speech/ws.mjs.map +1 -1
  203. package/resources/verify-profiles.d.mts +97 -121
  204. package/resources/verify-profiles.d.mts.map +1 -1
  205. package/resources/verify-profiles.d.ts +97 -121
  206. package/resources/verify-profiles.d.ts.map +1 -1
  207. package/resources/webhooks.d.mts +642 -7
  208. package/resources/webhooks.d.mts.map +1 -1
  209. package/resources/webhooks.d.ts +642 -7
  210. package/resources/webhooks.d.ts.map +1 -1
  211. package/resources/webhooks.js +4 -10
  212. package/resources/webhooks.js.map +1 -1
  213. package/resources/webhooks.mjs +5 -11
  214. package/resources/webhooks.mjs.map +1 -1
  215. package/resources/whatsapp/phone-numbers/profile/profile.d.mts +5 -0
  216. package/resources/whatsapp/phone-numbers/profile/profile.d.mts.map +1 -1
  217. package/resources/whatsapp/phone-numbers/profile/profile.d.ts +5 -0
  218. package/resources/whatsapp/phone-numbers/profile/profile.d.ts.map +1 -1
  219. package/resources/whatsapp/phone-numbers/profile/profile.js.map +1 -1
  220. package/resources/whatsapp/phone-numbers/profile/profile.mjs.map +1 -1
  221. package/src/client.ts +22 -0
  222. package/src/core/EventEmitter.ts +16 -0
  223. package/src/internal/types.ts +6 -8
  224. package/src/internal/utils/env.ts +2 -2
  225. package/src/internal/ws-adapter-browser.ts +123 -0
  226. package/src/internal/ws-adapter-node.ts +105 -0
  227. package/src/internal/ws-adapter.ts +30 -0
  228. package/src/internal/ws.ts +193 -0
  229. package/src/lib/text-to-speech-ws-base.ts +618 -0
  230. package/src/lib/text-to-speech-ws-internal.ts +111 -0
  231. package/src/lib/text-to-speech-ws.ts +40 -0
  232. package/src/lib/webhooks.ts +27 -0
  233. package/src/resources/ai/assistants/assistants.ts +1065 -65
  234. package/src/resources/ai/assistants/versions.ts +639 -25
  235. package/src/resources/ai/conversations/conversations.ts +12 -2
  236. package/src/resources/ai/conversations/index.ts +6 -1
  237. package/src/resources/ai/conversations/messages.ts +67 -54
  238. package/src/resources/calls/actions.ts +184 -4
  239. package/src/resources/calls/calls.ts +191 -4
  240. package/src/resources/index.ts +6 -12
  241. package/src/resources/messages/messages.ts +5 -0
  242. package/src/resources/session-analysis/session-analysis.ts +3 -16
  243. package/src/resources/texml/accounts/calls/calls.ts +54 -0
  244. package/src/resources/text-to-speech/index.ts +2 -1
  245. package/src/resources/text-to-speech/internal-base.ts +6 -95
  246. package/src/resources/text-to-speech/text-to-speech.ts +33 -3
  247. package/src/resources/text-to-speech/ws-base.ts +7 -0
  248. package/src/resources/text-to-speech/ws.ts +2 -201
  249. package/src/resources/verify-profiles.ts +109 -142
  250. package/src/resources/webhooks.ts +886 -45
  251. package/src/resources/whatsapp/phone-numbers/profile/profile.ts +7 -0
  252. package/src/version.ts +1 -1
  253. package/version.d.mts +1 -1
  254. package/version.d.ts +1 -1
  255. package/version.js +1 -1
  256. package/version.mjs +1 -1
@@ -0,0 +1,80 @@
1
+ /** Reconnection event passed to the `onReconnecting` handler and event listeners. */
2
+ export interface ReconnectingEvent<Parameters = Record<string, unknown>> {
3
+ /** Which retry attempt this is (1-based). */
4
+ readonly attempt: number;
5
+ /** Total attempts that will be made. */
6
+ readonly maxAttempts: number;
7
+ /** Delay in ms before this attempt connects. */
8
+ readonly delay: number;
9
+ /** The WebSocket close code that triggered reconnection. */
10
+ readonly closeCode: number;
11
+ /** The current query parameters. */
12
+ readonly parameters: (Parameters & Record<string, unknown>) | undefined;
13
+ }
14
+ /**
15
+ * Optional overrides returned from the `onReconnecting` handler
16
+ * to customize the next reconnection attempt.
17
+ */
18
+ export type ReconnectingOverrides<Parameters = Record<string, unknown>> = {
19
+ /**
20
+ * If provided, assigns the query parameters for the next connection.
21
+ * Set to `undefined` to clear all query parameters.
22
+ */
23
+ parameters?: (Parameters & Record<string, unknown>) | undefined;
24
+ } | {
25
+ /**
26
+ * If set, will stop attempting to reconnect.
27
+ */
28
+ abort: true;
29
+ };
30
+ /**
31
+ * Raw data types that can be sent over a WebSocket without serialization.
32
+ */
33
+ export type RawWebSocketData = string | ArrayBufferLike | ArrayBufferView | ArrayBufferView[];
34
+ export type UnsentMessage<T> = {
35
+ type: 'message';
36
+ message: T;
37
+ } | {
38
+ type: 'raw';
39
+ data: RawWebSocketData;
40
+ };
41
+ /**
42
+ * Flatten `ArrayBufferView[]` fragments into a single `Uint8Array` so that
43
+ * `ws.send()` transmits the correct bytes.
44
+ */
45
+ export declare function flattenRawData(data: RawWebSocketData): Exclude<RawWebSocketData, ArrayBufferView[]>;
46
+ /**
47
+ * A bounded queue for outgoing WebSocket messages. JSON messages are
48
+ * serialized on enqueue; raw messages are stored as-is. The queue enforces
49
+ * a configurable byte-size limit and can return the original messages via
50
+ * {@link drain} when the connection permanently closes.
51
+ */
52
+ export declare class SendQueue<T = unknown> {
53
+ private _queue;
54
+ private _bytes;
55
+ private _maxBytes;
56
+ constructor(maxBytes?: number);
57
+ /**
58
+ * Serialize and enqueue a JSON message. Returns `true` if the message was
59
+ * accepted, `false` if it would exceed the byte-size limit.
60
+ */
61
+ enqueue(event: T): boolean;
62
+ /**
63
+ * Enqueue raw data without serialization. Returns `true` if the data was
64
+ * accepted, `false` if it would exceed the byte-size limit.
65
+ */
66
+ enqueueRaw(data: RawWebSocketData): boolean;
67
+ /**
68
+ * Send every queued message via `send`. If `send` throws, the failing
69
+ * message and all subsequent messages are re-queued and the error is
70
+ * re-thrown so the caller can report it.
71
+ */
72
+ flush(send: (data: RawWebSocketData) => void): void;
73
+ /**
74
+ * Drain the queue and return the unsent messages. JSON messages are
75
+ * deserialized back to their original form. Resets byte tracking to zero.
76
+ */
77
+ drain(): UnsentMessage<T>[];
78
+ }
79
+ export declare function isRecoverableClose(code: number): boolean;
80
+ //# sourceMappingURL=ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/internal/ws.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,MAAM,WAAW,iBAAiB,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACzE;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAClE;IACE;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACjE,GACD;IACE;;OAEG;IACH,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;AAE9F,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAWzG;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAGnG;AAoBD;;;;;GAKG;AACH,qBAAa,SAAS,CAAC,CAAC,GAAG,OAAO;IAChC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,QAAQ,GAAE,MAAkB;IAIxC;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAW1B;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO;IAW3C;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAenD;;;OAGG;IACH,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;CAS5B;AAGD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiCxD"}
package/internal/ws.js ADDED
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SendQueue = void 0;
4
+ exports.flattenRawData = flattenRawData;
5
+ exports.isRecoverableClose = isRecoverableClose;
6
+ const bytes_1 = require("./utils/bytes.js");
7
+ function toUint8Array(view) {
8
+ if (view instanceof Uint8Array)
9
+ return view;
10
+ return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
11
+ }
12
+ /**
13
+ * Flatten `ArrayBufferView[]` fragments into a single `Uint8Array` so that
14
+ * `ws.send()` transmits the correct bytes.
15
+ */
16
+ function flattenRawData(data) {
17
+ if (Array.isArray(data))
18
+ return (0, bytes_1.concatBytes)(data.map(toUint8Array));
19
+ return data;
20
+ }
21
+ function snapshotRawData(data) {
22
+ if (typeof data === 'string')
23
+ return data;
24
+ if (Array.isArray(data))
25
+ return (0, bytes_1.concatBytes)(data.map(toUint8Array));
26
+ if (ArrayBuffer.isView(data)) {
27
+ const copy = new Uint8Array(data.byteLength);
28
+ copy.set(toUint8Array(data));
29
+ return copy;
30
+ }
31
+ return data.slice(0);
32
+ }
33
+ function rawByteLength(data) {
34
+ if (typeof data === 'string')
35
+ return (0, bytes_1.encodeUTF8)(data).byteLength;
36
+ if (Array.isArray(data))
37
+ return data.reduce((sum, buf) => sum + buf.byteLength, 0);
38
+ if ('byteLength' in data)
39
+ return data.byteLength;
40
+ return 0;
41
+ }
42
+ /**
43
+ * A bounded queue for outgoing WebSocket messages. JSON messages are
44
+ * serialized on enqueue; raw messages are stored as-is. The queue enforces
45
+ * a configurable byte-size limit and can return the original messages via
46
+ * {@link drain} when the connection permanently closes.
47
+ */
48
+ class SendQueue {
49
+ constructor(maxBytes = 1048576) {
50
+ this._queue = [];
51
+ this._bytes = 0;
52
+ this._maxBytes = maxBytes;
53
+ }
54
+ /**
55
+ * Serialize and enqueue a JSON message. Returns `true` if the message was
56
+ * accepted, `false` if it would exceed the byte-size limit.
57
+ */
58
+ enqueue(event) {
59
+ const data = JSON.stringify(event);
60
+ const byteLength = (0, bytes_1.encodeUTF8)(data).byteLength;
61
+ if (this._bytes + byteLength > this._maxBytes && this._queue.length > 0) {
62
+ return false;
63
+ }
64
+ this._queue.push({ kind: 'json', data, byteLength });
65
+ this._bytes += byteLength;
66
+ return true;
67
+ }
68
+ /**
69
+ * Enqueue raw data without serialization. Returns `true` if the data was
70
+ * accepted, `false` if it would exceed the byte-size limit.
71
+ */
72
+ enqueueRaw(data) {
73
+ const snapshot = snapshotRawData(data);
74
+ const byteLength = rawByteLength(snapshot);
75
+ if (this._bytes + byteLength > this._maxBytes && this._queue.length > 0) {
76
+ return false;
77
+ }
78
+ this._queue.push({ kind: 'raw', data: snapshot, byteLength });
79
+ this._bytes += byteLength;
80
+ return true;
81
+ }
82
+ /**
83
+ * Send every queued message via `send`. If `send` throws, the failing
84
+ * message and all subsequent messages are re-queued and the error is
85
+ * re-thrown so the caller can report it.
86
+ */
87
+ flush(send) {
88
+ const pending = this._queue.splice(0);
89
+ this._bytes = 0;
90
+ for (let i = 0; i < pending.length; i++) {
91
+ try {
92
+ send(pending[i].data);
93
+ }
94
+ catch (err) {
95
+ const remaining = pending.slice(i);
96
+ this._queue = remaining.concat(this._queue);
97
+ this._bytes = this._queue.reduce((sum, item) => sum + item.byteLength, 0);
98
+ throw err;
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Drain the queue and return the unsent messages. JSON messages are
104
+ * deserialized back to their original form. Resets byte tracking to zero.
105
+ */
106
+ drain() {
107
+ const unsent = this._queue.map((entry) => {
108
+ if (entry.kind === 'raw')
109
+ return { type: 'raw', data: entry.data };
110
+ return { type: 'message', message: JSON.parse(entry.data) };
111
+ });
112
+ this._queue = [];
113
+ this._bytes = 0;
114
+ return unsent;
115
+ }
116
+ }
117
+ exports.SendQueue = SendQueue;
118
+ // RFC 6455 §7.4.1
119
+ function isRecoverableClose(code) {
120
+ switch (code) {
121
+ case 1000:
122
+ return false; // Normal closure
123
+ case 1001:
124
+ return true; // Going away (server shutting down)
125
+ case 1002:
126
+ return false; // Protocol error
127
+ case 1003:
128
+ return false; // Unsupported data
129
+ case 1005:
130
+ return true; // No status code (abnormal)
131
+ case 1006:
132
+ return true; // Abnormal closure (network drop)
133
+ case 1007:
134
+ return false; // Invalid payload
135
+ case 1008:
136
+ return false; // Policy violation
137
+ case 1009:
138
+ return false; // Message too big
139
+ case 1010:
140
+ return false; // Missing extension
141
+ case 1011:
142
+ return true; // Internal server error
143
+ case 1012:
144
+ return true; // Service restart
145
+ case 1013:
146
+ return true; // Try again later
147
+ case 1015:
148
+ return true; // TLS handshake failure
149
+ default:
150
+ return false;
151
+ }
152
+ }
153
+ //# sourceMappingURL=ws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/internal/ws.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { concatBytes, encodeUTF8 } from "./utils/bytes.mjs";
2
+ function toUint8Array(view) {
3
+ if (view instanceof Uint8Array)
4
+ return view;
5
+ return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
6
+ }
7
+ /**
8
+ * Flatten `ArrayBufferView[]` fragments into a single `Uint8Array` so that
9
+ * `ws.send()` transmits the correct bytes.
10
+ */
11
+ export function flattenRawData(data) {
12
+ if (Array.isArray(data))
13
+ return concatBytes(data.map(toUint8Array));
14
+ return data;
15
+ }
16
+ function snapshotRawData(data) {
17
+ if (typeof data === 'string')
18
+ return data;
19
+ if (Array.isArray(data))
20
+ return concatBytes(data.map(toUint8Array));
21
+ if (ArrayBuffer.isView(data)) {
22
+ const copy = new Uint8Array(data.byteLength);
23
+ copy.set(toUint8Array(data));
24
+ return copy;
25
+ }
26
+ return data.slice(0);
27
+ }
28
+ function rawByteLength(data) {
29
+ if (typeof data === 'string')
30
+ return encodeUTF8(data).byteLength;
31
+ if (Array.isArray(data))
32
+ return data.reduce((sum, buf) => sum + buf.byteLength, 0);
33
+ if ('byteLength' in data)
34
+ return data.byteLength;
35
+ return 0;
36
+ }
37
+ /**
38
+ * A bounded queue for outgoing WebSocket messages. JSON messages are
39
+ * serialized on enqueue; raw messages are stored as-is. The queue enforces
40
+ * a configurable byte-size limit and can return the original messages via
41
+ * {@link drain} when the connection permanently closes.
42
+ */
43
+ export class SendQueue {
44
+ constructor(maxBytes = 1048576) {
45
+ this._queue = [];
46
+ this._bytes = 0;
47
+ this._maxBytes = maxBytes;
48
+ }
49
+ /**
50
+ * Serialize and enqueue a JSON message. Returns `true` if the message was
51
+ * accepted, `false` if it would exceed the byte-size limit.
52
+ */
53
+ enqueue(event) {
54
+ const data = JSON.stringify(event);
55
+ const byteLength = encodeUTF8(data).byteLength;
56
+ if (this._bytes + byteLength > this._maxBytes && this._queue.length > 0) {
57
+ return false;
58
+ }
59
+ this._queue.push({ kind: 'json', data, byteLength });
60
+ this._bytes += byteLength;
61
+ return true;
62
+ }
63
+ /**
64
+ * Enqueue raw data without serialization. Returns `true` if the data was
65
+ * accepted, `false` if it would exceed the byte-size limit.
66
+ */
67
+ enqueueRaw(data) {
68
+ const snapshot = snapshotRawData(data);
69
+ const byteLength = rawByteLength(snapshot);
70
+ if (this._bytes + byteLength > this._maxBytes && this._queue.length > 0) {
71
+ return false;
72
+ }
73
+ this._queue.push({ kind: 'raw', data: snapshot, byteLength });
74
+ this._bytes += byteLength;
75
+ return true;
76
+ }
77
+ /**
78
+ * Send every queued message via `send`. If `send` throws, the failing
79
+ * message and all subsequent messages are re-queued and the error is
80
+ * re-thrown so the caller can report it.
81
+ */
82
+ flush(send) {
83
+ const pending = this._queue.splice(0);
84
+ this._bytes = 0;
85
+ for (let i = 0; i < pending.length; i++) {
86
+ try {
87
+ send(pending[i].data);
88
+ }
89
+ catch (err) {
90
+ const remaining = pending.slice(i);
91
+ this._queue = remaining.concat(this._queue);
92
+ this._bytes = this._queue.reduce((sum, item) => sum + item.byteLength, 0);
93
+ throw err;
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * Drain the queue and return the unsent messages. JSON messages are
99
+ * deserialized back to their original form. Resets byte tracking to zero.
100
+ */
101
+ drain() {
102
+ const unsent = this._queue.map((entry) => {
103
+ if (entry.kind === 'raw')
104
+ return { type: 'raw', data: entry.data };
105
+ return { type: 'message', message: JSON.parse(entry.data) };
106
+ });
107
+ this._queue = [];
108
+ this._bytes = 0;
109
+ return unsent;
110
+ }
111
+ }
112
+ // RFC 6455 §7.4.1
113
+ export function isRecoverableClose(code) {
114
+ switch (code) {
115
+ case 1000:
116
+ return false; // Normal closure
117
+ case 1001:
118
+ return true; // Going away (server shutting down)
119
+ case 1002:
120
+ return false; // Protocol error
121
+ case 1003:
122
+ return false; // Unsupported data
123
+ case 1005:
124
+ return true; // No status code (abnormal)
125
+ case 1006:
126
+ return true; // Abnormal closure (network drop)
127
+ case 1007:
128
+ return false; // Invalid payload
129
+ case 1008:
130
+ return false; // Policy violation
131
+ case 1009:
132
+ return false; // Message too big
133
+ case 1010:
134
+ return false; // Missing extension
135
+ case 1011:
136
+ return true; // Internal server error
137
+ case 1012:
138
+ return true; // Service restart
139
+ case 1013:
140
+ return true; // Try again later
141
+ case 1015:
142
+ return true; // TLS handshake failure
143
+ default:
144
+ return false;
145
+ }
146
+ }
147
+ //# sourceMappingURL=ws.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.mjs","sourceRoot":"","sources":["../src/internal/ws.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { TextToSpeechEmitter, TextToSpeechStreamMessage } from "./text-to-speech-ws-internal.mjs";
2
+ import { type WebSocketLike } from "../internal/ws-adapter.mjs";
3
+ import { type RawWebSocketData, type ReconnectingEvent, type ReconnectingOverrides } from "../internal/ws.mjs";
4
+ import * as TextToSpeechAPI from "../resources/text-to-speech/text-to-speech.mjs";
5
+ import { Telnyx } from "../client.mjs";
6
+ export interface TextToSpeechWSReconnectOptions {
7
+ /**
8
+ * Called before each reconnect attempt. Return an object with
9
+ * `parameters` to override query parameters for the next connection.
10
+ */
11
+ onReconnecting(event: ReconnectingEvent<Record<string, unknown>>): ReconnectingOverrides<Record<string, unknown>> | void;
12
+ /**
13
+ * Maximum number of reconnection attempts. Default: 5.
14
+ * Set to 0 to disable reconnection entirely.
15
+ */
16
+ maxRetries?: number;
17
+ /**
18
+ * Initial backoff delay in milliseconds. Default: 500.
19
+ */
20
+ initialDelay?: number;
21
+ /**
22
+ * Maximum backoff delay in milliseconds. Default: 8000.
23
+ */
24
+ maxDelay?: number;
25
+ }
26
+ export interface TextToSpeechWSBaseOptions {
27
+ /**
28
+ * Options for automatic reconnection on recoverable close codes.
29
+ * Automatic reconnection is only enabled when this has a non-null value.
30
+ */
31
+ reconnect?: TextToSpeechWSReconnectOptions | null | undefined;
32
+ /**
33
+ * Maximum size of the outgoing message queue in bytes.
34
+ * Messages queued while the socket is connecting or reconnecting are held
35
+ * in memory up to this limit. Once the limit is reached, new messages are
36
+ * discarded and an `error` event is emitted.
37
+ * Default: 1 MB
38
+ */
39
+ maxQueueSize?: number | undefined;
40
+ }
41
+ export declare abstract class TextToSpeechWSBase<TSocket extends WebSocketLike> extends TextToSpeechEmitter {
42
+ url: URL;
43
+ socket: TSocket;
44
+ protected _client: Telnyx;
45
+ protected _parameters: Record<string, unknown> | null | undefined;
46
+ private _reconnectOptions;
47
+ private _sendQueue;
48
+ private _isReconnecting;
49
+ private _intentionallyClosed;
50
+ private _closeCode;
51
+ private _closeReason;
52
+ private _lastCloseCode;
53
+ private _lastCloseReason;
54
+ private _internalEvents;
55
+ constructor(client: Telnyx, parameters?: Record<string, unknown> | undefined, options?: TextToSpeechWSBaseOptions | undefined);
56
+ /** Establishes the initial WebSocket connection. */
57
+ protected _connectInitial(): void;
58
+ /** Creates a platform-specific WebSocket for the given URL and auth headers. */
59
+ protected abstract _createSocket(url: URL, authHeaders: Record<string, string>): TSocket;
60
+ send(event: TextToSpeechAPI.StreamClientEvent): void;
61
+ sendRaw(data: RawWebSocketData): void;
62
+ close(props?: {
63
+ code: number;
64
+ reason: string;
65
+ }): void;
66
+ /**
67
+ * Returns an async iterator over WebSocket lifecycle and message events,
68
+ * providing an alternative to the event-based `.on()` API.
69
+ * The iterator will exit if the socket closes but exiting the iterator
70
+ * does not close the socket.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * for await (const event of client.stream()) {
75
+ * switch (event.type) {
76
+ * case 'message':
77
+ * console.log('received:', event.message);
78
+ * break;
79
+ * case 'error':
80
+ * console.error(event.error);
81
+ * break;
82
+ * case 'close':
83
+ * console.log('connection closed');
84
+ * break;
85
+ * }
86
+ * }
87
+ * ```
88
+ */
89
+ stream(): AsyncIterableIterator<TextToSpeechStreamMessage>;
90
+ [Symbol.asyncIterator](): AsyncIterableIterator<TextToSpeechStreamMessage>;
91
+ private _connect;
92
+ private _canReconnect;
93
+ private _reconnect;
94
+ /**
95
+ * Resolves once the socket is open, rejects if it errors or closes first
96
+ */
97
+ private _awaitOpen;
98
+ private _flushSendQueue;
99
+ /**
100
+ * Emits the public `close` event with unsent messages and the internal
101
+ * `close` event used by the async iterator.
102
+ */
103
+ private _emitPermanentClose;
104
+ protected _authHeaders(): Record<string, string>;
105
+ }
106
+ //# sourceMappingURL=text-to-speech-ws-base.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-to-speech-ws-base.d.mts","sourceRoot":"","sources":["../src/lib/text-to-speech-ws-base.ts"],"names":[],"mappings":"OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAG1B;OAGM,EAAE,KAAK,aAAa,EAAc;OAClC,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAE3B;OACM,KAAK,eAAe;OACpB,EAAE,MAAM,EAAE;AAGjB,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,cAAc,CACZ,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAChD,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,GAAG,SAAS,CAAC;IAE9D;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,8BAAsB,kBAAkB,CAAC,OAAO,SAAS,aAAa,CAAE,SAAQ,mBAAmB;IACjG,GAAG,EAAG,GAAG,CAAC;IACV,MAAM,EAAG,OAAO,CAAC;IAEjB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAClE,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,gBAAgB,CAAc;IAGtC,OAAO,CAAC,eAAe,CAKlB;gBAGH,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAChD,OAAO,CAAC,EAAE,yBAAyB,GAAG,SAAS;IASjD,oDAAoD;IACpD,SAAS,CAAC,eAAe,IAAI,IAAI;IAKjC,gFAAgF;IAChF,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAExF,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,iBAAiB;IAsB7C,OAAO,CAAC,IAAI,EAAE,gBAAgB;IAsB9B,KAAK,CAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAe9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,IAAI,qBAAqB,CAAC,yBAAyB,CAAC;IAI1D,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,yBAAyB,CAAC;IAwJ1E,OAAO,CAAC,QAAQ;IA2DhB,OAAO,CAAC,aAAa;YAQP,UAAU;IA+IxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAMjD"}
@@ -0,0 +1,106 @@
1
+ import { TextToSpeechEmitter, TextToSpeechStreamMessage } from "./text-to-speech-ws-internal.js";
2
+ import { type WebSocketLike } from "../internal/ws-adapter.js";
3
+ import { type RawWebSocketData, type ReconnectingEvent, type ReconnectingOverrides } from "../internal/ws.js";
4
+ import * as TextToSpeechAPI from "../resources/text-to-speech/text-to-speech.js";
5
+ import { Telnyx } from "../client.js";
6
+ export interface TextToSpeechWSReconnectOptions {
7
+ /**
8
+ * Called before each reconnect attempt. Return an object with
9
+ * `parameters` to override query parameters for the next connection.
10
+ */
11
+ onReconnecting(event: ReconnectingEvent<Record<string, unknown>>): ReconnectingOverrides<Record<string, unknown>> | void;
12
+ /**
13
+ * Maximum number of reconnection attempts. Default: 5.
14
+ * Set to 0 to disable reconnection entirely.
15
+ */
16
+ maxRetries?: number;
17
+ /**
18
+ * Initial backoff delay in milliseconds. Default: 500.
19
+ */
20
+ initialDelay?: number;
21
+ /**
22
+ * Maximum backoff delay in milliseconds. Default: 8000.
23
+ */
24
+ maxDelay?: number;
25
+ }
26
+ export interface TextToSpeechWSBaseOptions {
27
+ /**
28
+ * Options for automatic reconnection on recoverable close codes.
29
+ * Automatic reconnection is only enabled when this has a non-null value.
30
+ */
31
+ reconnect?: TextToSpeechWSReconnectOptions | null | undefined;
32
+ /**
33
+ * Maximum size of the outgoing message queue in bytes.
34
+ * Messages queued while the socket is connecting or reconnecting are held
35
+ * in memory up to this limit. Once the limit is reached, new messages are
36
+ * discarded and an `error` event is emitted.
37
+ * Default: 1 MB
38
+ */
39
+ maxQueueSize?: number | undefined;
40
+ }
41
+ export declare abstract class TextToSpeechWSBase<TSocket extends WebSocketLike> extends TextToSpeechEmitter {
42
+ url: URL;
43
+ socket: TSocket;
44
+ protected _client: Telnyx;
45
+ protected _parameters: Record<string, unknown> | null | undefined;
46
+ private _reconnectOptions;
47
+ private _sendQueue;
48
+ private _isReconnecting;
49
+ private _intentionallyClosed;
50
+ private _closeCode;
51
+ private _closeReason;
52
+ private _lastCloseCode;
53
+ private _lastCloseReason;
54
+ private _internalEvents;
55
+ constructor(client: Telnyx, parameters?: Record<string, unknown> | undefined, options?: TextToSpeechWSBaseOptions | undefined);
56
+ /** Establishes the initial WebSocket connection. */
57
+ protected _connectInitial(): void;
58
+ /** Creates a platform-specific WebSocket for the given URL and auth headers. */
59
+ protected abstract _createSocket(url: URL, authHeaders: Record<string, string>): TSocket;
60
+ send(event: TextToSpeechAPI.StreamClientEvent): void;
61
+ sendRaw(data: RawWebSocketData): void;
62
+ close(props?: {
63
+ code: number;
64
+ reason: string;
65
+ }): void;
66
+ /**
67
+ * Returns an async iterator over WebSocket lifecycle and message events,
68
+ * providing an alternative to the event-based `.on()` API.
69
+ * The iterator will exit if the socket closes but exiting the iterator
70
+ * does not close the socket.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * for await (const event of client.stream()) {
75
+ * switch (event.type) {
76
+ * case 'message':
77
+ * console.log('received:', event.message);
78
+ * break;
79
+ * case 'error':
80
+ * console.error(event.error);
81
+ * break;
82
+ * case 'close':
83
+ * console.log('connection closed');
84
+ * break;
85
+ * }
86
+ * }
87
+ * ```
88
+ */
89
+ stream(): AsyncIterableIterator<TextToSpeechStreamMessage>;
90
+ [Symbol.asyncIterator](): AsyncIterableIterator<TextToSpeechStreamMessage>;
91
+ private _connect;
92
+ private _canReconnect;
93
+ private _reconnect;
94
+ /**
95
+ * Resolves once the socket is open, rejects if it errors or closes first
96
+ */
97
+ private _awaitOpen;
98
+ private _flushSendQueue;
99
+ /**
100
+ * Emits the public `close` event with unsent messages and the internal
101
+ * `close` event used by the async iterator.
102
+ */
103
+ private _emitPermanentClose;
104
+ protected _authHeaders(): Record<string, string>;
105
+ }
106
+ //# sourceMappingURL=text-to-speech-ws-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-to-speech-ws-base.d.ts","sourceRoot":"","sources":["../src/lib/text-to-speech-ws-base.ts"],"names":[],"mappings":"OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAG1B;OAGM,EAAE,KAAK,aAAa,EAAc;OAClC,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAE3B;OACM,KAAK,eAAe;OACpB,EAAE,MAAM,EAAE;AAGjB,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,cAAc,CACZ,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAChD,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,GAAG,SAAS,CAAC;IAE9D;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,8BAAsB,kBAAkB,CAAC,OAAO,SAAS,aAAa,CAAE,SAAQ,mBAAmB;IACjG,GAAG,EAAG,GAAG,CAAC;IACV,MAAM,EAAG,OAAO,CAAC;IAEjB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAClE,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,gBAAgB,CAAc;IAGtC,OAAO,CAAC,eAAe,CAKlB;gBAGH,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAChD,OAAO,CAAC,EAAE,yBAAyB,GAAG,SAAS;IASjD,oDAAoD;IACpD,SAAS,CAAC,eAAe,IAAI,IAAI;IAKjC,gFAAgF;IAChF,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAExF,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,iBAAiB;IAsB7C,OAAO,CAAC,IAAI,EAAE,gBAAgB;IAsB9B,KAAK,CAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAe9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,IAAI,qBAAqB,CAAC,yBAAyB,CAAC;IAI1D,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,yBAAyB,CAAC;IAwJ1E,OAAO,CAAC,QAAQ;IA2DhB,OAAO,CAAC,aAAa;YAQP,UAAU;IA+IxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAMjD"}