@polymorfa/sdk 0.1.0-dev.20260922093854

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 (347) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1881 -0
  3. package/dist/bridge.d.ts +31 -0
  4. package/dist/bridge.d.ts.map +1 -0
  5. package/dist/bridge.js +39 -0
  6. package/dist/bridge.js.map +1 -0
  7. package/dist/calls/api.d.ts +109 -0
  8. package/dist/calls/api.d.ts.map +1 -0
  9. package/dist/calls/api.js +179 -0
  10. package/dist/calls/api.js.map +1 -0
  11. package/dist/calls/call.d.ts +286 -0
  12. package/dist/calls/call.d.ts.map +1 -0
  13. package/dist/calls/call.js +860 -0
  14. package/dist/calls/call.js.map +1 -0
  15. package/dist/calls/client.d.ts +124 -0
  16. package/dist/calls/client.d.ts.map +1 -0
  17. package/dist/calls/client.js +447 -0
  18. package/dist/calls/client.js.map +1 -0
  19. package/dist/calls/diagnostics.d.ts +74 -0
  20. package/dist/calls/diagnostics.d.ts.map +1 -0
  21. package/dist/calls/diagnostics.js +133 -0
  22. package/dist/calls/diagnostics.js.map +1 -0
  23. package/dist/calls/errors.d.ts +37 -0
  24. package/dist/calls/errors.d.ts.map +1 -0
  25. package/dist/calls/errors.js +52 -0
  26. package/dist/calls/errors.js.map +1 -0
  27. package/dist/calls/events.d.ts +15 -0
  28. package/dist/calls/events.d.ts.map +1 -0
  29. package/dist/calls/events.js +34 -0
  30. package/dist/calls/events.js.map +1 -0
  31. package/dist/calls/index.d.ts +6 -0
  32. package/dist/calls/index.d.ts.map +1 -0
  33. package/dist/calls/index.js +7 -0
  34. package/dist/calls/index.js.map +1 -0
  35. package/dist/calls/internal.d.ts +18 -0
  36. package/dist/calls/internal.d.ts.map +1 -0
  37. package/dist/calls/internal.js +18 -0
  38. package/dist/calls/internal.js.map +1 -0
  39. package/dist/calls/lifecycle.d.ts +111 -0
  40. package/dist/calls/lifecycle.d.ts.map +1 -0
  41. package/dist/calls/lifecycle.js +490 -0
  42. package/dist/calls/lifecycle.js.map +1 -0
  43. package/dist/calls/media.d.ts +102 -0
  44. package/dist/calls/media.d.ts.map +1 -0
  45. package/dist/calls/media.js +414 -0
  46. package/dist/calls/media.js.map +1 -0
  47. package/dist/calls/protocol.d.ts +216 -0
  48. package/dist/calls/protocol.d.ts.map +1 -0
  49. package/dist/calls/protocol.js +268 -0
  50. package/dist/calls/protocol.js.map +1 -0
  51. package/dist/calls/token.d.ts +43 -0
  52. package/dist/calls/token.d.ts.map +1 -0
  53. package/dist/calls/token.js +146 -0
  54. package/dist/calls/token.js.map +1 -0
  55. package/dist/client.d.ts +65 -0
  56. package/dist/client.d.ts.map +1 -0
  57. package/dist/client.js +119 -0
  58. package/dist/client.js.map +1 -0
  59. package/dist/credentials.d.ts +50 -0
  60. package/dist/credentials.d.ts.map +1 -0
  61. package/dist/credentials.js +73 -0
  62. package/dist/credentials.js.map +1 -0
  63. package/dist/errors.d.ts +71 -0
  64. package/dist/errors.d.ts.map +1 -0
  65. package/dist/errors.js +129 -0
  66. package/dist/errors.js.map +1 -0
  67. package/dist/index.d.ts +70 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +61 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/media/whatsapp.d.ts +105 -0
  72. package/dist/media/whatsapp.d.ts.map +1 -0
  73. package/dist/media/whatsapp.js +624 -0
  74. package/dist/media/whatsapp.js.map +1 -0
  75. package/dist/messaging/bansafe.d.ts +30 -0
  76. package/dist/messaging/bansafe.d.ts.map +1 -0
  77. package/dist/messaging/bansafe.js +86 -0
  78. package/dist/messaging/bansafe.js.map +1 -0
  79. package/dist/messaging/business.d.ts +35 -0
  80. package/dist/messaging/business.d.ts.map +1 -0
  81. package/dist/messaging/business.js +145 -0
  82. package/dist/messaging/business.js.map +1 -0
  83. package/dist/messaging/calls.d.ts +9 -0
  84. package/dist/messaging/calls.d.ts.map +1 -0
  85. package/dist/messaging/calls.js +16 -0
  86. package/dist/messaging/calls.js.map +1 -0
  87. package/dist/messaging/campaigns.d.ts +19 -0
  88. package/dist/messaging/campaigns.d.ts.map +1 -0
  89. package/dist/messaging/campaigns.js +77 -0
  90. package/dist/messaging/campaigns.js.map +1 -0
  91. package/dist/messaging/channels.d.ts +23 -0
  92. package/dist/messaging/channels.d.ts.map +1 -0
  93. package/dist/messaging/channels.js +104 -0
  94. package/dist/messaging/channels.js.map +1 -0
  95. package/dist/messaging/chats.d.ts +14 -0
  96. package/dist/messaging/chats.d.ts.map +1 -0
  97. package/dist/messaging/chats.js +51 -0
  98. package/dist/messaging/chats.js.map +1 -0
  99. package/dist/messaging/client-tokens.d.ts +15 -0
  100. package/dist/messaging/client-tokens.d.ts.map +1 -0
  101. package/dist/messaging/client-tokens.js +64 -0
  102. package/dist/messaging/client-tokens.js.map +1 -0
  103. package/dist/messaging/client.d.ts +58 -0
  104. package/dist/messaging/client.d.ts.map +1 -0
  105. package/dist/messaging/client.js +100 -0
  106. package/dist/messaging/client.js.map +1 -0
  107. package/dist/messaging/contacts.d.ts +20 -0
  108. package/dist/messaging/contacts.d.ts.map +1 -0
  109. package/dist/messaging/contacts.js +75 -0
  110. package/dist/messaging/contacts.js.map +1 -0
  111. package/dist/messaging/groups.d.ts +34 -0
  112. package/dist/messaging/groups.d.ts.map +1 -0
  113. package/dist/messaging/groups.js +97 -0
  114. package/dist/messaging/groups.js.map +1 -0
  115. package/dist/messaging/identities.d.ts +9 -0
  116. package/dist/messaging/identities.d.ts.map +1 -0
  117. package/dist/messaging/identities.js +21 -0
  118. package/dist/messaging/identities.js.map +1 -0
  119. package/dist/messaging/labels.d.ts +16 -0
  120. package/dist/messaging/labels.d.ts.map +1 -0
  121. package/dist/messaging/labels.js +65 -0
  122. package/dist/messaging/labels.js.map +1 -0
  123. package/dist/messaging/media.d.ts +72 -0
  124. package/dist/messaging/media.d.ts.map +1 -0
  125. package/dist/messaging/media.js +142 -0
  126. package/dist/messaging/media.js.map +1 -0
  127. package/dist/messaging/messages.d.ts +18 -0
  128. package/dist/messaging/messages.d.ts.map +1 -0
  129. package/dist/messaging/messages.js +32 -0
  130. package/dist/messaging/messages.js.map +1 -0
  131. package/dist/messaging/observation-policies.d.ts +10 -0
  132. package/dist/messaging/observation-policies.d.ts.map +1 -0
  133. package/dist/messaging/observation-policies.js +28 -0
  134. package/dist/messaging/observation-policies.js.map +1 -0
  135. package/dist/messaging/onboarding.d.ts +53 -0
  136. package/dist/messaging/onboarding.d.ts.map +1 -0
  137. package/dist/messaging/onboarding.js +69 -0
  138. package/dist/messaging/onboarding.js.map +1 -0
  139. package/dist/messaging/presence.d.ts +12 -0
  140. package/dist/messaging/presence.d.ts.map +1 -0
  141. package/dist/messaging/presence.js +43 -0
  142. package/dist/messaging/presence.js.map +1 -0
  143. package/dist/messaging/privacy.d.ts +11 -0
  144. package/dist/messaging/privacy.d.ts.map +1 -0
  145. package/dist/messaging/privacy.js +34 -0
  146. package/dist/messaging/privacy.js.map +1 -0
  147. package/dist/messaging/profile.d.ts +13 -0
  148. package/dist/messaging/profile.d.ts.map +1 -0
  149. package/dist/messaging/profile.js +49 -0
  150. package/dist/messaging/profile.js.map +1 -0
  151. package/dist/messaging/quick-replies.d.ts +13 -0
  152. package/dist/messaging/quick-replies.d.ts.map +1 -0
  153. package/dist/messaging/quick-replies.js +45 -0
  154. package/dist/messaging/quick-replies.js.map +1 -0
  155. package/dist/messaging/quicklinks.d.ts +69 -0
  156. package/dist/messaging/quicklinks.d.ts.map +1 -0
  157. package/dist/messaging/quicklinks.js +45 -0
  158. package/dist/messaging/quicklinks.js.map +1 -0
  159. package/dist/messaging/session-configuration.d.ts +67 -0
  160. package/dist/messaging/session-configuration.d.ts.map +1 -0
  161. package/dist/messaging/session-configuration.js +2 -0
  162. package/dist/messaging/session-configuration.js.map +1 -0
  163. package/dist/messaging/sessions.d.ts +26 -0
  164. package/dist/messaging/sessions.d.ts.map +1 -0
  165. package/dist/messaging/sessions.js +108 -0
  166. package/dist/messaging/sessions.js.map +1 -0
  167. package/dist/messaging/templates.d.ts +15 -0
  168. package/dist/messaging/templates.d.ts.map +1 -0
  169. package/dist/messaging/templates.js +67 -0
  170. package/dist/messaging/templates.js.map +1 -0
  171. package/dist/messaging/testing-configuration.d.ts +89 -0
  172. package/dist/messaging/testing-configuration.d.ts.map +1 -0
  173. package/dist/messaging/testing-configuration.js +14 -0
  174. package/dist/messaging/testing-configuration.js.map +1 -0
  175. package/dist/messaging/types.d.ts +1793 -0
  176. package/dist/messaging/types.d.ts.map +1 -0
  177. package/dist/messaging/types.js +25 -0
  178. package/dist/messaging/types.js.map +1 -0
  179. package/dist/messaging/users.d.ts +9 -0
  180. package/dist/messaging/users.d.ts.map +1 -0
  181. package/dist/messaging/users.js +15 -0
  182. package/dist/messaging/users.js.map +1 -0
  183. package/dist/messaging/voip.d.ts +51 -0
  184. package/dist/messaging/voip.d.ts.map +1 -0
  185. package/dist/messaging/voip.js +293 -0
  186. package/dist/messaging/voip.js.map +1 -0
  187. package/dist/messaging/webhooks.d.ts +13 -0
  188. package/dist/messaging/webhooks.d.ts.map +1 -0
  189. package/dist/messaging/webhooks.js +48 -0
  190. package/dist/messaging/webhooks.js.map +1 -0
  191. package/dist/node.d.ts +55 -0
  192. package/dist/node.d.ts.map +1 -0
  193. package/dist/node.js +237 -0
  194. package/dist/node.js.map +1 -0
  195. package/dist/pagination.d.ts +24 -0
  196. package/dist/pagination.d.ts.map +1 -0
  197. package/dist/pagination.js +28 -0
  198. package/dist/pagination.js.map +1 -0
  199. package/dist/platform/api-keys.d.ts +10 -0
  200. package/dist/platform/api-keys.d.ts.map +1 -0
  201. package/dist/platform/api-keys.js +22 -0
  202. package/dist/platform/api-keys.js.map +1 -0
  203. package/dist/platform/audiences.d.ts +16 -0
  204. package/dist/platform/audiences.d.ts.map +1 -0
  205. package/dist/platform/audiences.js +46 -0
  206. package/dist/platform/audiences.js.map +1 -0
  207. package/dist/platform/audit-logs.d.ts +9 -0
  208. package/dist/platform/audit-logs.d.ts.map +1 -0
  209. package/dist/platform/audit-logs.js +20 -0
  210. package/dist/platform/audit-logs.js.map +1 -0
  211. package/dist/platform/bansafe.d.ts +24 -0
  212. package/dist/platform/bansafe.d.ts.map +1 -0
  213. package/dist/platform/bansafe.js +70 -0
  214. package/dist/platform/bansafe.js.map +1 -0
  215. package/dist/platform/billing.d.ts +13 -0
  216. package/dist/platform/billing.d.ts.map +1 -0
  217. package/dist/platform/billing.js +27 -0
  218. package/dist/platform/billing.js.map +1 -0
  219. package/dist/platform/campaigns.d.ts +28 -0
  220. package/dist/platform/campaigns.d.ts.map +1 -0
  221. package/dist/platform/campaigns.js +92 -0
  222. package/dist/platform/campaigns.js.map +1 -0
  223. package/dist/platform/customers.d.ts +23 -0
  224. package/dist/platform/customers.d.ts.map +1 -0
  225. package/dist/platform/customers.js +140 -0
  226. package/dist/platform/customers.js.map +1 -0
  227. package/dist/platform/developer-resources.d.ts +101 -0
  228. package/dist/platform/developer-resources.d.ts.map +1 -0
  229. package/dist/platform/developer-resources.js +250 -0
  230. package/dist/platform/developer-resources.js.map +1 -0
  231. package/dist/platform/developer-types.d.ts +378 -0
  232. package/dist/platform/developer-types.d.ts.map +1 -0
  233. package/dist/platform/developer-types.js +2 -0
  234. package/dist/platform/developer-types.js.map +1 -0
  235. package/dist/platform/event-stream.d.ts +114 -0
  236. package/dist/platform/event-stream.d.ts.map +1 -0
  237. package/dist/platform/event-stream.js +308 -0
  238. package/dist/platform/event-stream.js.map +1 -0
  239. package/dist/platform/media.d.ts +13 -0
  240. package/dist/platform/media.d.ts.map +1 -0
  241. package/dist/platform/media.js +33 -0
  242. package/dist/platform/media.js.map +1 -0
  243. package/dist/platform/members.d.ts +9 -0
  244. package/dist/platform/members.d.ts.map +1 -0
  245. package/dist/platform/members.js +15 -0
  246. package/dist/platform/members.js.map +1 -0
  247. package/dist/platform/opt-outs.d.ts +15 -0
  248. package/dist/platform/opt-outs.d.ts.map +1 -0
  249. package/dist/platform/opt-outs.js +36 -0
  250. package/dist/platform/opt-outs.js.map +1 -0
  251. package/dist/platform/organizations.d.ts +9 -0
  252. package/dist/platform/organizations.d.ts.map +1 -0
  253. package/dist/platform/organizations.js +15 -0
  254. package/dist/platform/organizations.js.map +1 -0
  255. package/dist/platform/project-tokens.d.ts +9 -0
  256. package/dist/platform/project-tokens.d.ts.map +1 -0
  257. package/dist/platform/project-tokens.js +16 -0
  258. package/dist/platform/project-tokens.js.map +1 -0
  259. package/dist/platform/projects.d.ts +24 -0
  260. package/dist/platform/projects.d.ts.map +1 -0
  261. package/dist/platform/projects.js +83 -0
  262. package/dist/platform/projects.js.map +1 -0
  263. package/dist/platform/quicklink-settings.d.ts +85 -0
  264. package/dist/platform/quicklink-settings.d.ts.map +1 -0
  265. package/dist/platform/quicklink-settings.js +35 -0
  266. package/dist/platform/quicklink-settings.js.map +1 -0
  267. package/dist/platform/response.d.ts +10 -0
  268. package/dist/platform/response.d.ts.map +1 -0
  269. package/dist/platform/response.js +41 -0
  270. package/dist/platform/response.js.map +1 -0
  271. package/dist/platform/security-incidents.d.ts +10 -0
  272. package/dist/platform/security-incidents.d.ts.map +1 -0
  273. package/dist/platform/security-incidents.js +22 -0
  274. package/dist/platform/security-incidents.js.map +1 -0
  275. package/dist/platform/session-bans.d.ts +13 -0
  276. package/dist/platform/session-bans.d.ts.map +1 -0
  277. package/dist/platform/session-bans.js +21 -0
  278. package/dist/platform/session-bans.js.map +1 -0
  279. package/dist/platform/session-configuration.d.ts +15 -0
  280. package/dist/platform/session-configuration.d.ts.map +1 -0
  281. package/dist/platform/session-configuration.js +36 -0
  282. package/dist/platform/session-configuration.js.map +1 -0
  283. package/dist/platform/sessions.d.ts +26 -0
  284. package/dist/platform/sessions.d.ts.map +1 -0
  285. package/dist/platform/sessions.js +121 -0
  286. package/dist/platform/sessions.js.map +1 -0
  287. package/dist/platform/sip-trunks.d.ts +141 -0
  288. package/dist/platform/sip-trunks.d.ts.map +1 -0
  289. package/dist/platform/sip-trunks.js +140 -0
  290. package/dist/platform/sip-trunks.js.map +1 -0
  291. package/dist/platform/types.d.ts +897 -0
  292. package/dist/platform/types.d.ts.map +1 -0
  293. package/dist/platform/types.js +2 -0
  294. package/dist/platform/types.js.map +1 -0
  295. package/dist/raw.d.ts +26 -0
  296. package/dist/raw.d.ts.map +1 -0
  297. package/dist/raw.js +79 -0
  298. package/dist/raw.js.map +1 -0
  299. package/dist/system.d.ts +37 -0
  300. package/dist/system.d.ts.map +1 -0
  301. package/dist/system.js +45 -0
  302. package/dist/system.js.map +1 -0
  303. package/dist/transport/body.d.ts +6 -0
  304. package/dist/transport/body.d.ts.map +1 -0
  305. package/dist/transport/body.js +33 -0
  306. package/dist/transport/body.js.map +1 -0
  307. package/dist/transport/content-disposition.d.ts +9 -0
  308. package/dist/transport/content-disposition.d.ts.map +1 -0
  309. package/dist/transport/content-disposition.js +107 -0
  310. package/dist/transport/content-disposition.js.map +1 -0
  311. package/dist/transport/http.d.ts +35 -0
  312. package/dist/transport/http.d.ts.map +1 -0
  313. package/dist/transport/http.js +660 -0
  314. package/dist/transport/http.js.map +1 -0
  315. package/dist/transport/idempotency.d.ts +10 -0
  316. package/dist/transport/idempotency.d.ts.map +1 -0
  317. package/dist/transport/idempotency.js +13 -0
  318. package/dist/transport/idempotency.js.map +1 -0
  319. package/dist/transport/retry.d.ts +11 -0
  320. package/dist/transport/retry.d.ts.map +1 -0
  321. package/dist/transport/retry.js +45 -0
  322. package/dist/transport/retry.js.map +1 -0
  323. package/dist/transport/types.d.ts +58 -0
  324. package/dist/transport/types.d.ts.map +1 -0
  325. package/dist/transport/types.js +2 -0
  326. package/dist/transport/types.js.map +1 -0
  327. package/dist/version.d.ts +2 -0
  328. package/dist/version.d.ts.map +1 -0
  329. package/dist/version.js +2 -0
  330. package/dist/version.js.map +1 -0
  331. package/dist/webhooks/events.d.ts +741 -0
  332. package/dist/webhooks/events.d.ts.map +1 -0
  333. package/dist/webhooks/events.js +80 -0
  334. package/dist/webhooks/events.js.map +1 -0
  335. package/dist/webhooks/index.d.ts +4 -0
  336. package/dist/webhooks/index.d.ts.map +1 -0
  337. package/dist/webhooks/index.js +4 -0
  338. package/dist/webhooks/index.js.map +1 -0
  339. package/dist/webhooks/utilities.d.ts +33 -0
  340. package/dist/webhooks/utilities.d.ts.map +1 -0
  341. package/dist/webhooks/utilities.js +67 -0
  342. package/dist/webhooks/utilities.js.map +1 -0
  343. package/dist/webhooks/verify.d.ts +9 -0
  344. package/dist/webhooks/verify.d.ts.map +1 -0
  345. package/dist/webhooks/verify.js +77 -0
  346. package/dist/webhooks/verify.js.map +1 -0
  347. package/package.json +58 -0
@@ -0,0 +1,490 @@
1
+ import { CallsAuthError, CallsError } from "./errors.js";
2
+ import { Emitter } from "./events.js";
3
+ import { AUTH_FAILED_CLOSE_CODE, LIFECYCLE_SOCKET_PATH, parseLifecycleFrame, } from "./protocol.js";
4
+ import { isClientToken } from "./token.js";
5
+ /** Close codes the platform uses on the lifecycle and media sockets. */
6
+ export const SocketCloseCode = {
7
+ /** The credential does not (or no longer) authorize the socket. */
8
+ Unauthorized: AUTH_FAILED_CLOSE_CODE,
9
+ /** Call or session state refused the socket (for example a claimed call). */
10
+ Conflict: 4409,
11
+ /** Too many attempts. */
12
+ RateLimited: 4429,
13
+ /** The request is invalid (for example an unknown session or participant). */
14
+ InvalidRequest: 4400,
15
+ /** A policy violation, including no auth frame within 5 seconds. */
16
+ PolicyViolation: 1008,
17
+ /** Authorization or the call is temporarily unavailable. */
18
+ TryAgainLater: 1013,
19
+ };
20
+ /**
21
+ * The client's one lifecycle socket. Every attempt authenticates with the
22
+ * first frame, waits for `ready`, replaces the token before it expires,
23
+ * reconnects with capped backoff until {@link close}, and heartbeats so a
24
+ * half-open connection is dropped rather than silently swallowing events.
25
+ * A 4401 close emits {@link CallsAuthError} and the next attempt asks the
26
+ * token provider for a fresh token.
27
+ */
28
+ export class LifecycleSocket extends Emitter {
29
+ #o;
30
+ #WS;
31
+ #socket;
32
+ #authenticated = false;
33
+ #closed = true;
34
+ #attempt = 0;
35
+ #timer;
36
+ #beat;
37
+ #refreshTimer;
38
+ #awaitingPong = false;
39
+ #generation = 0;
40
+ #settle;
41
+ #abort;
42
+ #openTimer;
43
+ /** Set by a 4401 close: the next attempt must not reuse a cached token. */
44
+ #refreshNext = false;
45
+ /** Set by a 4400 close: retrying the same request cannot succeed. */
46
+ #refused = false;
47
+ #participant;
48
+ constructor(options) {
49
+ super();
50
+ this.#o = options;
51
+ const WS = options.WebSocket ?? globalThis.WebSocket;
52
+ if (WS === undefined)
53
+ throw new Error("No WebSocket implementation: pass `WebSocket` (Node < 22) or run on Node 22+.");
54
+ this.#WS = WS;
55
+ }
56
+ /** True while an authenticated socket is open. */
57
+ get connected() {
58
+ return (this.#authenticated &&
59
+ this.#socket !== undefined &&
60
+ this.#socket.readyState === this.#WS.OPEN);
61
+ }
62
+ /** Participant reference from the last `ready` frame, when the platform sent one. */
63
+ get participant() {
64
+ return this.#participant;
65
+ }
66
+ /**
67
+ * Resolves once the first attempt settles: authenticated, failed (a retry
68
+ * is scheduled), or closed.
69
+ */
70
+ async connect() {
71
+ this.#closed = false;
72
+ this.#refused = false;
73
+ if (this.#timer !== undefined) {
74
+ (this.#o.clearTimeout ?? clearTimeout)(this.#timer);
75
+ this.#timer = undefined;
76
+ }
77
+ await this.#open();
78
+ }
79
+ /** Send a local ICE candidate; false while no authenticated socket is open. */
80
+ sendCandidate(callId, connectionId, candidate) {
81
+ return this.#send({ type: "candidate", callId, connectionId, candidate });
82
+ }
83
+ close() {
84
+ this.#closed = true;
85
+ this.#stopHeartbeat();
86
+ this.#clearRefresh();
87
+ this.#clearOpenTimer();
88
+ if (this.#timer !== undefined) {
89
+ (this.#o.clearTimeout ?? clearTimeout)(this.#timer);
90
+ this.#timer = undefined;
91
+ }
92
+ const socket = this.#socket;
93
+ const wasAuthenticated = this.#authenticated;
94
+ this.#socket = undefined;
95
+ this.#authenticated = false;
96
+ try {
97
+ if (socket !== undefined) {
98
+ detach(socket);
99
+ try {
100
+ socket.close();
101
+ }
102
+ catch {
103
+ // already closed
104
+ }
105
+ if (wasAuthenticated)
106
+ this.emit("state", false);
107
+ }
108
+ }
109
+ finally {
110
+ // A throwing state listener must not leave a pending connect() hanging,
111
+ // the token request in flight, or the generation stale.
112
+ this.#generation += 1;
113
+ this.#abort?.abort();
114
+ this.#abort = undefined;
115
+ this.#settle?.();
116
+ }
117
+ }
118
+ #send(frame) {
119
+ const socket = this.#socket;
120
+ if (!this.#authenticated && frame.type !== "auth")
121
+ return false;
122
+ if (socket === undefined || socket.readyState !== this.#WS.OPEN)
123
+ return false;
124
+ socket.send(JSON.stringify(frame));
125
+ return true;
126
+ }
127
+ #open() {
128
+ if (this.#socket !== undefined || this.#abort !== undefined)
129
+ return Promise.resolve();
130
+ return new Promise((resolve) => {
131
+ const generation = this.#generation;
132
+ const abort = new AbortController();
133
+ this.#abort = abort;
134
+ let settled = false;
135
+ const settle = () => {
136
+ if (settled)
137
+ return;
138
+ settled = true;
139
+ if (this.#settle === settle)
140
+ this.#settle = undefined;
141
+ if (this.#abort === abort)
142
+ this.#abort = undefined;
143
+ resolve();
144
+ };
145
+ this.#settle = settle;
146
+ this.#openOnce(generation, abort.signal, settle).catch((cause) => this.#report(cause));
147
+ });
148
+ }
149
+ #report(cause) {
150
+ const report = this.#o.reportError ??
151
+ globalThis.reportError;
152
+ if (report !== undefined) {
153
+ try {
154
+ report(cause);
155
+ return;
156
+ }
157
+ catch {
158
+ // fall through
159
+ }
160
+ }
161
+ queueMicrotask(() => {
162
+ throw cause;
163
+ });
164
+ }
165
+ async #openOnce(generation, signal, settle) {
166
+ let token;
167
+ const refresh = this.#refreshNext;
168
+ try {
169
+ token = await this.#o.api.token({ refresh, signal });
170
+ this.#refreshNext = false;
171
+ }
172
+ catch (cause) {
173
+ try {
174
+ if (!signal.aborted && !this.#closed)
175
+ this.emit("error", new CallsError("token_failed", cause instanceof Error
176
+ ? cause.message
177
+ : "Could not obtain a token for the lifecycle socket.", { cause }));
178
+ }
179
+ finally {
180
+ settle();
181
+ if (!signal.aborted && !this.#closed)
182
+ this.#scheduleReconnect();
183
+ }
184
+ return;
185
+ }
186
+ if (this.#closed || signal.aborted || generation !== this.#generation) {
187
+ settle();
188
+ return;
189
+ }
190
+ let socket;
191
+ try {
192
+ socket = new this.#WS(this.#o.api.socketUrl(this.#path(token)));
193
+ }
194
+ catch {
195
+ settle();
196
+ if (!signal.aborted && !this.#closed && generation === this.#generation)
197
+ this.#scheduleReconnect();
198
+ return;
199
+ }
200
+ this.#socket = socket;
201
+ this.#authenticated = false;
202
+ // A socket stuck CONNECTING, or one that never answers the auth frame,
203
+ // would otherwise hold the attempt forever.
204
+ const timeoutMs = this.#o.connectTimeoutMs ?? 10_000;
205
+ this.#clearOpenTimer();
206
+ this.#openTimer =
207
+ timeoutMs > 0
208
+ ? (this.#o.setTimeout ?? setTimeout)(() => {
209
+ this.#openTimer = undefined;
210
+ if (this.#socket !== socket)
211
+ return;
212
+ this.#socket = undefined;
213
+ detach(socket);
214
+ try {
215
+ socket.close();
216
+ }
217
+ catch {
218
+ // never opened
219
+ }
220
+ try {
221
+ this.emit("error", new CallsError("connect_timeout", "The lifecycle socket did not authenticate in time."));
222
+ }
223
+ finally {
224
+ settle();
225
+ this.#scheduleReconnect();
226
+ }
227
+ }, timeoutMs)
228
+ : undefined;
229
+ let opened = false;
230
+ socket.onopen = () => {
231
+ opened = true;
232
+ const frame = { type: "auth", token: token.value };
233
+ socket.send(JSON.stringify(frame));
234
+ };
235
+ socket.onmessage = (event) => {
236
+ if (this.#socket !== socket)
237
+ return;
238
+ const frame = parseLifecycleFrame(event.data);
239
+ if (frame === undefined)
240
+ return;
241
+ if (!this.#authenticated) {
242
+ if (frame.type === "ready") {
243
+ this.#clearOpenTimer();
244
+ this.#authenticated = true;
245
+ this.#attempt = 0;
246
+ this.#participant = frame.participant ?? this.#participant;
247
+ this.#startHeartbeat(socket);
248
+ this.#scheduleRefresh(socket, token);
249
+ try {
250
+ this.emit("ready", {
251
+ ...(frame.session === undefined
252
+ ? {}
253
+ : { session: frame.session }),
254
+ ...(frame.participant === undefined
255
+ ? {}
256
+ : { participant: frame.participant }),
257
+ });
258
+ this.emit("state", true);
259
+ }
260
+ finally {
261
+ settle();
262
+ }
263
+ }
264
+ else if (frame.type === "error") {
265
+ this.emit("error", new CallsError(frame.code, frame.message));
266
+ }
267
+ return;
268
+ }
269
+ this.#receive(frame);
270
+ };
271
+ // Node 22's WebSocket reports a failed handshake (refused, reset, or a
272
+ // non-101 reply) with an error event and never fires close, so treat an
273
+ // error before open as the close that other runtimes deliver.
274
+ socket.onerror = () => {
275
+ if (opened || this.#socket !== socket)
276
+ return;
277
+ const onclose = socket.onclose;
278
+ detach(socket);
279
+ try {
280
+ socket.close();
281
+ }
282
+ catch {
283
+ // never opened
284
+ }
285
+ onclose?.call(socket, { code: 1006 });
286
+ };
287
+ socket.onclose = (event) => {
288
+ this.#clearOpenTimer();
289
+ this.#stopHeartbeat();
290
+ this.#clearRefresh();
291
+ if (this.#socket !== socket)
292
+ return;
293
+ const wasAuthenticated = this.#authenticated;
294
+ this.#socket = undefined;
295
+ this.#authenticated = false;
296
+ const code = event?.code;
297
+ try {
298
+ const error = closeError(code);
299
+ if (code === SocketCloseCode.Unauthorized)
300
+ this.#refreshNext = true;
301
+ if (code === SocketCloseCode.InvalidRequest)
302
+ this.#refused = true;
303
+ if (error !== undefined)
304
+ this.emit("error", error);
305
+ if (wasAuthenticated)
306
+ this.emit("state", false);
307
+ }
308
+ finally {
309
+ settle();
310
+ this.#scheduleReconnect();
311
+ }
312
+ };
313
+ }
314
+ #receive(frame) {
315
+ switch (frame.type) {
316
+ case "pong":
317
+ this.#awaitingPong = false;
318
+ return;
319
+ case "error":
320
+ this.emit("error", new CallsError(frame.code, frame.message));
321
+ return;
322
+ case "candidate":
323
+ this.emit("candidate", {
324
+ callId: frame.callId,
325
+ ...(frame.connectionId === undefined
326
+ ? {}
327
+ : { connectionId: frame.connectionId }),
328
+ candidate: frame.candidate,
329
+ });
330
+ return;
331
+ case "event": {
332
+ const payload = frame.payload !== null && typeof frame.payload === "object"
333
+ ? frame.payload
334
+ : {};
335
+ this.emit("event", {
336
+ event: frame.event,
337
+ callId: frame.callId,
338
+ payload,
339
+ timestamp: frame.timestamp,
340
+ });
341
+ return;
342
+ }
343
+ default:
344
+ return;
345
+ }
346
+ }
347
+ /**
348
+ * Replace the token on the open socket before it expires. The platform
349
+ * re-validates the latest token on its own schedule and closes with 4401
350
+ * when it no longer authorizes the session.
351
+ */
352
+ #scheduleRefresh(socket, token) {
353
+ this.#clearRefresh();
354
+ if (token.expiresAt === undefined)
355
+ return;
356
+ const now = (this.#o.now ?? Date.now)();
357
+ const lead = this.#o.refreshBeforeExpiryMs ?? 60_000;
358
+ const remaining = token.expiresAt - now;
359
+ const delay = Math.max(1_000, remaining > lead * 2 ? remaining - lead : remaining / 2);
360
+ this.#refreshTimer = (this.#o.setTimeout ?? setTimeout)(() => {
361
+ this.#refreshTimer = undefined;
362
+ void this.#replaceToken(socket);
363
+ }, delay);
364
+ }
365
+ async #replaceToken(socket) {
366
+ let token;
367
+ try {
368
+ token = await this.#o.api.token({ refresh: true });
369
+ }
370
+ catch (cause) {
371
+ if (this.#socket !== socket || this.#closed)
372
+ return;
373
+ try {
374
+ this.emit("error", new CallsError("token_failed", cause instanceof Error
375
+ ? cause.message
376
+ : "Could not refresh the lifecycle token.", { cause }));
377
+ }
378
+ catch (listenerCause) {
379
+ this.#report(listenerCause);
380
+ }
381
+ // Try again shortly; the platform closes with 4401 if the old token lapses.
382
+ this.#refreshTimer = (this.#o.setTimeout ?? setTimeout)(() => {
383
+ this.#refreshTimer = undefined;
384
+ void this.#replaceToken(socket);
385
+ }, 5_000);
386
+ return;
387
+ }
388
+ if (this.#socket !== socket || !this.#authenticated)
389
+ return;
390
+ this.#send({ type: "auth", token: token.value });
391
+ this.#scheduleRefresh(socket, token);
392
+ }
393
+ #clearRefresh() {
394
+ if (this.#refreshTimer !== undefined) {
395
+ (this.#o.clearTimeout ?? clearTimeout)(this.#refreshTimer);
396
+ this.#refreshTimer = undefined;
397
+ }
398
+ }
399
+ /** `/voip/ws`, naming the session only for server credentials. */
400
+ #path(token) {
401
+ if (isClientToken(token.value))
402
+ return LIFECYCLE_SOCKET_PATH;
403
+ const query = new URLSearchParams();
404
+ if (this.#o.session !== undefined)
405
+ query.set("session", this.#o.session);
406
+ if (this.#o.participant !== undefined)
407
+ query.set("participant", this.#o.participant);
408
+ const search = query.toString();
409
+ return search === ""
410
+ ? LIFECYCLE_SOCKET_PATH
411
+ : `${LIFECYCLE_SOCKET_PATH}?${search}`;
412
+ }
413
+ #scheduleReconnect() {
414
+ if (this.#closed || this.#refused || this.#timer !== undefined)
415
+ return;
416
+ const min = this.#o.minBackoffMs ?? 1_000;
417
+ const max = this.#o.maxBackoffMs ?? 30_000;
418
+ const random = this.#o.random ?? Math.random;
419
+ const delay = Math.min(max, min * 2 ** this.#attempt) * (0.5 + random() / 2);
420
+ this.#attempt = Math.min(this.#attempt + 1, 10);
421
+ this.#timer = (this.#o.setTimeout ?? setTimeout)(() => {
422
+ this.#timer = undefined;
423
+ void this.#open();
424
+ }, delay);
425
+ }
426
+ #startHeartbeat(socket) {
427
+ this.#stopHeartbeat();
428
+ const every = this.#o.heartbeatMs ?? 15_000;
429
+ if (every <= 0)
430
+ return;
431
+ this.#beat = (this.#o.setInterval ?? setInterval)(() => {
432
+ if (this.#socket !== socket)
433
+ return;
434
+ if (this.#awaitingPong) {
435
+ // Half-open: still OPEN on paper, never answering. Drop it so the
436
+ // close path reconnects instead of silently losing every event.
437
+ this.#stopHeartbeat();
438
+ this.#clearRefresh();
439
+ this.#socket = undefined;
440
+ this.#authenticated = false;
441
+ detach(socket);
442
+ try {
443
+ socket.close();
444
+ }
445
+ catch {
446
+ // already gone
447
+ }
448
+ try {
449
+ this.emit("state", false);
450
+ }
451
+ finally {
452
+ this.#scheduleReconnect();
453
+ }
454
+ return;
455
+ }
456
+ this.#awaitingPong = this.#send({ type: "ping" });
457
+ }, every);
458
+ }
459
+ #clearOpenTimer() {
460
+ if (this.#openTimer !== undefined) {
461
+ (this.#o.clearTimeout ?? clearTimeout)(this.#openTimer);
462
+ this.#openTimer = undefined;
463
+ }
464
+ }
465
+ #stopHeartbeat() {
466
+ if (this.#beat !== undefined) {
467
+ (this.#o.clearInterval ?? clearInterval)(this.#beat);
468
+ this.#beat = undefined;
469
+ }
470
+ this.#awaitingPong = false;
471
+ }
472
+ }
473
+ function detach(socket) {
474
+ socket.onopen = socket.onmessage = socket.onclose = socket.onerror = null;
475
+ }
476
+ function closeError(code) {
477
+ switch (code) {
478
+ case SocketCloseCode.Unauthorized:
479
+ return new CallsAuthError();
480
+ case SocketCloseCode.Conflict:
481
+ return new CallsError("socket_conflict", "The platform refused the socket for the current session state.");
482
+ case SocketCloseCode.RateLimited:
483
+ return new CallsError("rate_limited", "Too many socket attempts; reconnecting with backoff.");
484
+ case SocketCloseCode.InvalidRequest:
485
+ return new CallsError("invalid_request", "The platform refused the socket request; check the session and participant. Reconnection stopped.");
486
+ default:
487
+ return undefined;
488
+ }
489
+ }
490
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../calls/src/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,GAIpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAyE5D,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mEAAmE;IACnE,YAAY,EAAE,sBAAsB;IACpC,6EAA6E;IAC7E,QAAQ,EAAE,IAAI;IACd,yBAAyB;IACzB,WAAW,EAAE,IAAI;IACjB,8EAA8E;IAC9E,cAAc,EAAE,IAAI;IACpB,oEAAoE;IACpE,eAAe,EAAE,IAAI;IACrB,4DAA4D;IAC5D,aAAa,EAAE,IAAI;CACX,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,OAAO,eAAgB,SAAQ,OAAe;IACzC,EAAE,CAAyB;IAC3B,GAAG,CAA8B;IAC1C,OAAO,CAAwB;IAC/B,cAAc,GAAG,KAAK,CAAC;IACvB,OAAO,GAAG,IAAI,CAAC;IACf,QAAQ,GAAG,CAAC,CAAC;IACb,MAAM,CAA4C;IAClD,KAAK,CAA6C;IAClD,aAAa,CAA4C;IACzD,aAAa,GAAG,KAAK,CAAC;IACtB,WAAW,GAAG,CAAC,CAAC;IAChB,OAAO,CAA2B;IAClC,MAAM,CAA8B;IACpC,UAAU,CAA4C;IACtD,2EAA2E;IAC3E,YAAY,GAAG,KAAK,CAAC;IACrB,qEAAqE;IACrE,QAAQ,GAAG,KAAK,CAAC;IACjB,YAAY,CAAqB;IAEjC,YAAY,OAA+B;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;QAClB,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;QACrD,IAAI,EAAE,KAAK,SAAS;YAClB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,kDAAkD;IAClD,IAAI,SAAS;QACX,OAAO,CACL,IAAI,CAAC,cAAc;YACnB,IAAI,CAAC,OAAO,KAAK,SAAS;YAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAC1C,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,+EAA+E;IAC/E,aAAa,CACX,MAAc,EACd,YAAoB,EACpB,SAA2B;QAE3B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,MAAM,CAAC,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;gBAAC,MAAM,CAAC;oBACP,iBAAiB;gBACnB,CAAC;gBACD,IAAI,gBAAgB;oBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,wEAAwE;YACxE,wDAAwD;YACxD,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAA2B;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAChE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI;YAC7D,OAAO,KAAK,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YACzD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;oBAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACtD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;oBAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACnD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CACxE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CACpB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,KAAc;QACpB,MAAM,MAAM,GACV,IAAI,CAAC,EAAE,CAAC,WAAW;YAClB,UAAyD,CAAC,WAAW,CAAC;QACzE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;QACD,cAAc,CAAC,GAAG,EAAE;YAClB,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CACb,UAAkB,EAClB,MAAmB,EACnB,MAAkB;QAElB,IAAI,KAAiB,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;oBAClC,IAAI,CAAC,IAAI,CACP,OAAO,EACP,IAAI,UAAU,CACZ,cAAc,EACd,KAAK,YAAY,KAAK;wBACpB,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,oDAAoD,EACxD,EAAE,KAAK,EAAE,CACV,CACF,CAAC;YACN,CAAC;oBAAS,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClE,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACtE,MAAM,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QACD,IAAI,MAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW;gBACrE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,uEAAuE;QACvE,4CAA4C;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,IAAI,MAAM,CAAC;QACrD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU;YACb,SAAS,GAAG,CAAC;gBACX,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE;oBACtC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;oBAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;wBAAE,OAAO;oBACpC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;oBACzB,MAAM,CAAC,MAAM,CAAC,CAAC;oBACf,IAAI,CAAC;wBACH,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,CAAC;oBAAC,MAAM,CAAC;wBACP,eAAe;oBACjB,CAAC;oBACD,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,CACP,OAAO,EACP,IAAI,UAAU,CACZ,iBAAiB,EACjB,oDAAoD,CACrD,CACF,CAAC;oBACJ,CAAC;4BAAS,CAAC;wBACT,MAAM,EAAE,CAAC;wBACT,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,CAAC;gBACH,CAAC,EAAE,SAAS,CAAC;gBACf,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,KAAK,GAAyB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC;QACF,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;gBAAE,OAAO;YACpC,MAAM,KAAK,GAAG,mBAAmB,CAAE,KAAsB,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAChC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;oBAC3B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAClB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC;oBAC3D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC7B,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;4BACjB,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS;gCAC7B,CAAC,CAAC,EAAE;gCACJ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;4BAC/B,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gCACjC,CAAC,CAAC,EAAE;gCACJ,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;yBACxC,CAAC,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC3B,CAAC;4BAAS,CAAC;wBACT,MAAM,EAAE,CAAC;oBACX,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,uEAAuE;QACvE,wEAAwE;QACxE,8DAA8D;QAC9D,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;gBAAE,OAAO;YAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;YACD,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAgB,CAAC,CAAC;QACtD,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;gBAAE,OAAO;YACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC;YAC7C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,MAAM,IAAI,GAAI,KAAgC,EAAE,IAAI,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,KAAK,eAAe,CAAC,YAAY;oBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACpE,IAAI,IAAI,KAAK,eAAe,CAAC,cAAc;oBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAClE,IAAI,KAAK,KAAK,SAAS;oBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACnD,IAAI,gBAAgB;oBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;oBAAS,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,KAAqB;QAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM;gBACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,OAAO;YACT,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9D,OAAO;YACT,KAAK,WAAW;gBACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;wBAClC,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;oBACzC,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;oBACzD,CAAC,CAAE,KAAK,CAAC,OAAmC;oBAC5C,CAAC,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBACjB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO;oBACP,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD;gBACE,OAAO;QACX,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,MAAiB,EAAE,KAAiB;QACnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO;QAC1C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,IAAI,MAAM,CAAC;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,KAAK,EACL,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CACxD,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE;YAC3D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAiB;QACnC,IAAI,KAAiB,CAAC;QACtB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACpD,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CACP,OAAO,EACP,IAAI,UAAU,CACZ,cAAc,EACd,KAAK,YAAY,KAAK;oBACpB,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,wCAAwC,EAC5C,EAAE,KAAK,EAAE,CACV,CACF,CAAC;YACJ,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YACD,4EAA4E;YAC5E,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE;gBAC3D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAC/B,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5D,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,KAAiB;QACrB,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,qBAAqB,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,SAAS;YACnC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,MAAM,KAAK,EAAE;YAClB,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,GAAG,qBAAqB,IAAI,MAAM,EAAE,CAAC;IAC3C,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,KAAK,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,MAAM,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC7C,MAAM,KAAK,GACT,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE;YACpD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED,eAAe,CAAC,MAAiB;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,MAAM,CAAC;QAC5C,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE;YACrD,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;gBAAE,OAAO;YACpC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,kEAAkE;gBAClE,gEAAgE;gBAChE,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACzB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,MAAM,CAAC,MAAM,CAAC,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;gBACD,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC5B,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;CACF;AAED,SAAS,MAAM,CAAC,MAAiB;IAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AAC5E,CAAC;AAED,SAAS,UAAU,CAAC,IAAwB;IAC1C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe,CAAC,YAAY;YAC/B,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,KAAK,eAAe,CAAC,QAAQ;YAC3B,OAAO,IAAI,UAAU,CACnB,iBAAiB,EACjB,gEAAgE,CACjE,CAAC;QACJ,KAAK,eAAe,CAAC,WAAW;YAC9B,OAAO,IAAI,UAAU,CACnB,cAAc,EACd,sDAAsD,CACvD,CAAC;QACJ,KAAK,eAAe,CAAC,cAAc;YACjC,OAAO,IAAI,UAAU,CACnB,iBAAiB,EACjB,mGAAmG,CACpG,CAAC;QACJ;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,102 @@
1
+ import type { CallsApi } from "./api.js";
2
+ import { CallsError } from "./errors.js";
3
+ import { Emitter } from "./events.js";
4
+ import { type MediaClientFrame, type OutboundVideoFrame, type Participant, type VideoFrame, type VideoSourceOwner } from "./protocol.js";
5
+ /**
6
+ * Close code for a call-state refusal. With the reason "call claimed" (or a
7
+ * preceding `call_claimed` error frame) another participant claimed the call;
8
+ * otherwise the call is not available (ended or not ready).
9
+ */
10
+ export declare const CALL_CLAIMED_CLOSE_CODE = 4409;
11
+ /** Close code for a connection refused because calling is turned off. */
12
+ export declare const CALLS_DISABLED_CLOSE_CODE = 4403;
13
+ export interface MediaSocketOptions {
14
+ readonly api: Pick<CallsApi, "token" | "socketUrl">;
15
+ readonly callId: string;
16
+ /** Reuse the same id to reconnect this connection. */
17
+ readonly connectionId: string;
18
+ /** Participant name for server credentials; ignored for client tokens. */
19
+ readonly participant?: string;
20
+ /** Ask the token provider for a fresh token (after a 4401 close). */
21
+ readonly refreshToken?: boolean;
22
+ readonly WebSocket?: typeof globalThis.WebSocket;
23
+ readonly setInterval?: typeof globalThis.setInterval;
24
+ readonly clearInterval?: typeof globalThis.clearInterval;
25
+ /** Heartbeat period; 0 disables. Default 5 000 ms — media is latency-sensitive. */
26
+ readonly heartbeatMs?: number;
27
+ /**
28
+ * Bound on connect(): from the attempt until the platform's `ready` frame.
29
+ * 0 disables. Default 10 000 ms.
30
+ */
31
+ readonly readyTimeoutMs?: number;
32
+ readonly setTimeout?: typeof globalThis.setTimeout;
33
+ readonly clearTimeout?: typeof globalThis.clearTimeout;
34
+ }
35
+ export interface MediaReady {
36
+ readonly sampleRate: number;
37
+ readonly video: boolean;
38
+ readonly callId?: string;
39
+ readonly connectionId?: string;
40
+ }
41
+ /** A remote video source announced on the media socket. */
42
+ export type MediaVideoSource = {
43
+ readonly source: number;
44
+ } & VideoSourceOwner;
45
+ /**
46
+ * Why the socket closed: `local` (this client closed it), `left` (after
47
+ * {@link MediaSocket.leave}), `ended` (the platform closed the connection
48
+ * normally or the call is no longer available), `claimed` (another
49
+ * participant claimed the call), `unauthorized` (4401), `refused` (4400, 4403
50
+ * while calling is turned off, or a policy violation; retrying cannot help),
51
+ * or `lost` (retryable).
52
+ */
53
+ export type MediaCloseReason = "local" | "left" | "ended" | "claimed" | "unauthorized" | "refused" | "lost";
54
+ export interface MediaClose {
55
+ readonly reason: MediaCloseReason;
56
+ readonly code?: number;
57
+ }
58
+ type Events = {
59
+ ready: [MediaReady];
60
+ audio: [Int16Array];
61
+ video: [VideoFrame];
62
+ videoSource: [MediaVideoSource];
63
+ videoSourceRemoved: [source: number];
64
+ keyframeRequest: [];
65
+ participantJoined: [Participant];
66
+ participantLeft: [participantId: string, reason: string | undefined];
67
+ participantState: [Participant];
68
+ error: [CallsError];
69
+ close: [MediaClose];
70
+ };
71
+ /**
72
+ * One media connection to a call: tagged binary frames for audio and video,
73
+ * JSON text frames for control. The first frame authenticates the
74
+ * connection. A socket does not reconnect by itself; the call opens a new one
75
+ * with the same connection id.
76
+ */
77
+ export declare class MediaSocket extends Emitter<Events> {
78
+ #private;
79
+ constructor(options: MediaSocketOptions);
80
+ get connectionId(): string;
81
+ /** The PCM rate in force; updated from the platform's `ready` frame. */
82
+ get sampleRate(): number;
83
+ get connected(): boolean;
84
+ /**
85
+ * Authenticate and attach; resolves when the platform reports `ready`.
86
+ * Rejects with {@link CallClaimedError} or {@link CallsAuthError} when the
87
+ * platform refuses the connection for those reasons.
88
+ */
89
+ connect(): Promise<void>;
90
+ /** Push s16le mono PCM at {@link sampleRate}. Returns false when not connected. */
91
+ writeAudio(pcm: Int16Array): boolean;
92
+ /** Push one H.264 Annex-B access unit. Send decoder configuration with keyframes. */
93
+ writeVideo(frame: OutboundVideoFrame): boolean;
94
+ send(frame: MediaClientFrame): boolean;
95
+ /** Close this connection only; the call continues. False when not connected. */
96
+ leave(): boolean;
97
+ /** End the call for every participant. False when not connected. */
98
+ endCall(): boolean;
99
+ close(): void;
100
+ }
101
+ export {};
102
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../calls/src/media.ts"],"names":[],"mappings":"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"}