@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,268 @@
1
+ /**
2
+ * The wire contract between this client and the platform (Calls contract
3
+ * revision 1). Two sockets carry a call:
4
+ *
5
+ * 1. The **lifecycle socket** (`GET /voip/ws`) — one per client. No credential
6
+ * travels in the URL: the first frame is `{ type: "auth", token }` and the
7
+ * platform answers `ready`. Server credentials name the session with
8
+ * `?session=` (and optionally `&participant=`); client tokens send no query
9
+ * parameters. A later `auth` frame replaces an expiring token and must
10
+ * resolve to the same organization, project, session and participant. The
11
+ * platform closes the socket with 4401 once the token stops authorizing
12
+ * the session.
13
+ *
14
+ * 2. The **media socket** (`GET /voip/calls/{callId}/media`, subprotocol
15
+ * `pmfa.calls.v2`) — one per media connection. The first frame is
16
+ * `{ type: "auth", token, connectionId, participant? }`; the URL carries no
17
+ * query parameters. Replacement auth frames cannot change the connection
18
+ * or participant. Binary frames
19
+ * carry media, text frames carry JSON control. Every binary frame starts
20
+ * with a one-byte kind tag so audio and video share the socket.
21
+ */
22
+ // ── Identifiers ──────────────────────────────────────────────────────────
23
+ /** Lifecycle socket path on the API host. */
24
+ export const LIFECYCLE_SOCKET_PATH = "/voip/ws";
25
+ /** Close code for a token that no longer authorizes the socket. */
26
+ export const AUTH_FAILED_CLOSE_CODE = 4401;
27
+ /** Media socket subprotocol. */
28
+ export const MEDIA_SUBPROTOCOL = "pmfa.calls.v2";
29
+ export function mediaSocketPath(callId) {
30
+ return `/voip/calls/${encodeURIComponent(callId)}/media`;
31
+ }
32
+ const CONNECTION_ID = /^[A-Za-z0-9_-]{8,64}$/;
33
+ const PARTICIPANT = /^[A-Za-z0-9._:@-]{1,128}$/;
34
+ /** A media connection id: 8–64 characters of `[A-Za-z0-9_-]`. */
35
+ export function isConnectionId(value) {
36
+ return typeof value === "string" && CONNECTION_ID.test(value);
37
+ }
38
+ /** A server-credential participant name: 1–128 characters of `[A-Za-z0-9._:@-]`. */
39
+ export function isParticipantName(value) {
40
+ return typeof value === "string" && PARTICIPANT.test(value);
41
+ }
42
+ /**
43
+ * A new connection id: 18 crypto-random bytes as base64url (24 characters).
44
+ * Reuse the same id to reconnect the same connection.
45
+ */
46
+ export function createConnectionId(random = (bytes) => globalThis.crypto.getRandomValues(bytes)) {
47
+ const bytes = random(new Uint8Array(new ArrayBuffer(18)));
48
+ let binary = "";
49
+ for (const byte of bytes)
50
+ binary += String.fromCharCode(byte);
51
+ return btoa(binary)
52
+ .replace(/\+/g, "-")
53
+ .replace(/\//g, "_")
54
+ .replace(/=+$/, "");
55
+ }
56
+ /** Parse one lifecycle frame; unknown or malformed frames yield `undefined`. */
57
+ export function parseLifecycleFrame(data) {
58
+ const f = parseObject(data);
59
+ if (f === undefined)
60
+ return undefined;
61
+ switch (f["type"]) {
62
+ case "ready":
63
+ return optionalString(f["session"]) && optionalString(f["participant"])
64
+ ? f
65
+ : undefined;
66
+ case "event":
67
+ return isString(f["event"]) &&
68
+ isString(f["callId"]) &&
69
+ isString(f["timestamp"]) &&
70
+ "payload" in f
71
+ ? f
72
+ : undefined;
73
+ case "candidate":
74
+ return isString(f["callId"]) &&
75
+ (f["connectionId"] === undefined ||
76
+ isConnectionId(f["connectionId"])) &&
77
+ isCandidate(f["candidate"])
78
+ ? f
79
+ : undefined;
80
+ case "error":
81
+ return isString(f["code"]) && isString(f["message"])
82
+ ? f
83
+ : undefined;
84
+ case "pong":
85
+ return f;
86
+ default:
87
+ return undefined;
88
+ }
89
+ }
90
+ // ── Media socket ──────────────────────────────────────────────────────────
91
+ /** First byte of every binary media frame. */
92
+ export const MediaFrameKind = {
93
+ /** s16le mono PCM at the `ready` frame's sample rate. */
94
+ Audio: 0x01,
95
+ /** One encoded access unit; payload is {@link VIDEO_HEADER_BYTES} of header then the bytes. */
96
+ Video: 0x02,
97
+ };
98
+ /** Default PCM rate until the `ready` frame names one. */
99
+ export const DEFAULT_SAMPLE_RATE = 16_000;
100
+ /**
101
+ * Header that follows the {@link MediaFrameKind.Video} tag. Fixed 14 bytes,
102
+ * big-endian: codec (1) · flags (1) · source (4) · timestamp µs (8), then one
103
+ * Annex-B access unit.
104
+ */
105
+ export const VIDEO_HEADER_BYTES = 14;
106
+ export const VideoCodec = { H264: 0x01 };
107
+ export const VideoFlags = { Keyframe: 0x01 };
108
+ export function encodeAudioFrame(pcm) {
109
+ const out = new Uint8Array(new ArrayBuffer(1 + pcm.length * 2));
110
+ out[0] = MediaFrameKind.Audio;
111
+ const view = new DataView(out.buffer, out.byteOffset + 1);
112
+ for (let i = 0; i < pcm.length; i += 1)
113
+ view.setInt16(i * 2, pcm[i] ?? 0, true);
114
+ return out;
115
+ }
116
+ export function encodeVideoFrame(frame) {
117
+ const out = new Uint8Array(new ArrayBuffer(1 + VIDEO_HEADER_BYTES + frame.data.byteLength));
118
+ out[0] = MediaFrameKind.Video;
119
+ const view = new DataView(out.buffer, out.byteOffset + 1, VIDEO_HEADER_BYTES);
120
+ view.setUint8(0, frame.codec ?? VideoCodec.H264);
121
+ view.setUint8(1, frame.keyframe ? VideoFlags.Keyframe : 0);
122
+ view.setUint32(2, (frame.source ?? 0) >>> 0);
123
+ view.setBigUint64(6, BigInt(Math.max(0, Math.floor(frame.timestampUs))));
124
+ out.set(frame.data, 1 + VIDEO_HEADER_BYTES);
125
+ return out;
126
+ }
127
+ /** Decode one binary media frame; malformed frames yield `undefined`. */
128
+ export function decodeMediaFrame(bytes) {
129
+ if (bytes.byteLength < 1)
130
+ return undefined;
131
+ const kind = bytes[0];
132
+ const body = bytes.subarray(1);
133
+ if (kind === MediaFrameKind.Audio) {
134
+ if (body.byteLength % 2 !== 0)
135
+ return undefined;
136
+ const pcm = new Int16Array(body.byteLength / 2);
137
+ const view = new DataView(body.buffer, body.byteOffset, body.byteLength);
138
+ for (let i = 0; i < pcm.length; i += 1)
139
+ pcm[i] = view.getInt16(i * 2, true);
140
+ return { kind: "audio", pcm };
141
+ }
142
+ if (kind === MediaFrameKind.Video) {
143
+ if (body.byteLength <= VIDEO_HEADER_BYTES)
144
+ return undefined;
145
+ const view = new DataView(body.buffer, body.byteOffset, VIDEO_HEADER_BYTES);
146
+ const codec = view.getUint8(0);
147
+ if (codec !== VideoCodec.H264)
148
+ return undefined;
149
+ return {
150
+ kind: "video",
151
+ frame: {
152
+ codec,
153
+ keyframe: (view.getUint8(1) & VideoFlags.Keyframe) !== 0,
154
+ source: view.getUint32(2),
155
+ timestampUs: Number(view.getBigUint64(6)),
156
+ data: body.subarray(VIDEO_HEADER_BYTES),
157
+ },
158
+ };
159
+ }
160
+ return undefined;
161
+ }
162
+ export function parseMediaControl(data) {
163
+ const parsed = parseObject(data);
164
+ return parsed === undefined ? undefined : parseMediaControlValue(parsed);
165
+ }
166
+ /** Validate an already-decoded media control value. @internal */
167
+ export function parseMediaControlValue(parsed) {
168
+ if (parsed === null || typeof parsed !== "object")
169
+ return undefined;
170
+ const f = parsed;
171
+ switch (f["type"]) {
172
+ case "pong":
173
+ case "keyframe_request":
174
+ return parsed;
175
+ case "ready":
176
+ return typeof f["sampleRate"] === "number" &&
177
+ Number.isFinite(f["sampleRate"]) &&
178
+ f["sampleRate"] > 0 &&
179
+ typeof f["video"] === "boolean" &&
180
+ optionalString(f["callId"]) &&
181
+ optionalString(f["connectionId"])
182
+ ? parsed
183
+ : undefined;
184
+ case "participant_joined":
185
+ case "participant_state":
186
+ return isParticipant(f["participant"])
187
+ ? parsed
188
+ : undefined;
189
+ case "participant_left":
190
+ return isString(f["participantId"]) && optionalString(f["reason"])
191
+ ? parsed
192
+ : undefined;
193
+ case "video_source": {
194
+ if (!isSourceHandle(f["source"]))
195
+ return undefined;
196
+ const byConnection = isConnectionId(f["connectionId"]) &&
197
+ optionalString(f["connectionParticipant"]) &&
198
+ f["participant"] === undefined;
199
+ const byParticipant = isParticipant(f["participant"]) &&
200
+ f["connectionId"] === undefined &&
201
+ f["connectionParticipant"] === undefined;
202
+ return byConnection || byParticipant
203
+ ? parsed
204
+ : undefined;
205
+ }
206
+ case "video_source_removed":
207
+ return isSourceHandle(f["source"])
208
+ ? parsed
209
+ : undefined;
210
+ case "error":
211
+ return isString(f["code"]) && optionalString(f["message"])
212
+ ? parsed
213
+ : undefined;
214
+ default:
215
+ return undefined;
216
+ }
217
+ }
218
+ /** A positive uint32 source handle. */
219
+ export function isSourceHandle(value) {
220
+ return (typeof value === "number" &&
221
+ Number.isInteger(value) &&
222
+ value > 0 &&
223
+ value <= 0xffff_ffff);
224
+ }
225
+ export function isParticipant(value) {
226
+ if (value === null || typeof value !== "object")
227
+ return false;
228
+ const p = value;
229
+ return (isString(p["id"]) &&
230
+ p["id"].length > 0 &&
231
+ !Object.hasOwn(p, "handle") &&
232
+ ["phoneNumber", "bsuid", "username"].every((key) => optionalString(p[key])) &&
233
+ typeof p["audioMuted"] === "boolean" &&
234
+ typeof p["video"] === "boolean" &&
235
+ ["invited", "ringing", "connected", "left"].includes(p["state"]));
236
+ }
237
+ function isCandidate(value) {
238
+ if (value === null || typeof value !== "object")
239
+ return false;
240
+ const candidate = value;
241
+ // `null` is what a serialized `RTCIceCandidate` carries for an absent
242
+ // `sdpMid` / `sdpMLineIndex`, so it is tolerated.
243
+ return (isString(candidate["candidate"]) &&
244
+ (candidate["sdpMid"] == null || isString(candidate["sdpMid"])) &&
245
+ (candidate["sdpMLineIndex"] == null ||
246
+ typeof candidate["sdpMLineIndex"] === "number"));
247
+ }
248
+ function parseObject(data) {
249
+ if (typeof data !== "string")
250
+ return undefined;
251
+ let parsed;
252
+ try {
253
+ parsed = JSON.parse(data);
254
+ }
255
+ catch {
256
+ return undefined;
257
+ }
258
+ return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)
259
+ ? parsed
260
+ : undefined;
261
+ }
262
+ function isString(value) {
263
+ return typeof value === "string";
264
+ }
265
+ function optionalString(value) {
266
+ return value === undefined || typeof value === "string";
267
+ }
268
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../calls/src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /** A credential value and, when known, its expiry in Unix epoch milliseconds. */
2
+ export interface CallsToken {
3
+ readonly value: string;
4
+ readonly expiresAt?: number;
5
+ }
6
+ export interface CallsTokenRequest {
7
+ /** True when a cached token must not be reused (expiry or a 4401 close). */
8
+ readonly refresh?: boolean;
9
+ readonly signal?: AbortSignal;
10
+ }
11
+ /**
12
+ * Supplies the credential for REST calls and socket authentication. Browser
13
+ * applications return a client token minted by their own server with
14
+ * `POST /platform/client-tokens`. Server applications may return an
15
+ * organization API key or project token.
16
+ */
17
+ export type CallsTokenProvider = (request: CallsTokenRequest) => Promise<string | CallsToken>;
18
+ export interface CallsTokenSourceOptions {
19
+ readonly now?: () => number;
20
+ /** Treat a token as expired this long before `expiresAt`. Default 30 000 ms. */
21
+ readonly expirySkewMs?: number;
22
+ }
23
+ /** Client tokens are bound to one session and one participant by the platform. */
24
+ export declare function isClientToken(value: string): boolean;
25
+ /**
26
+ * Caches a provider's token until shortly before it expires. A static string
27
+ * never expires from the client's point of view; the platform still closes
28
+ * sockets with 4401 when it stops authorizing the session.
29
+ */
30
+ export declare class CallsTokenSource {
31
+ #private;
32
+ constructor(provider: string | CallsTokenProvider, options?: CallsTokenSourceOptions);
33
+ /** Resolve the current token, calling the provider when none is usable. */
34
+ get(request?: CallsTokenRequest): Promise<CallsToken>;
35
+ /**
36
+ * Drop the cached token so the next `get()` asks the provider. A provider
37
+ * call already in flight may return the refused token: it neither answers
38
+ * later requests nor replaces the cache.
39
+ */
40
+ invalidate(): void;
41
+ }
42
+ export declare function normalizeToken(supplied: unknown): CallsToken;
43
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../calls/src/token.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,iBAAiB,KACvB,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;AAElC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;;gBAUzB,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EACrC,OAAO,GAAE,uBAA4B;IAmBvC,2EAA2E;IAC3E,GAAG,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAoFzD;;;;OAIG;IACH,UAAU,IAAI,IAAI;CAgBnB;AAYD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,CAe5D"}
@@ -0,0 +1,146 @@
1
+ import { CallsError } from "./errors.js";
2
+ /** Client tokens are bound to one session and one participant by the platform. */
3
+ export function isClientToken(value) {
4
+ return value.startsWith("pmfa_ct_");
5
+ }
6
+ /**
7
+ * Caches a provider's token until shortly before it expires. A static string
8
+ * never expires from the client's point of view; the platform still closes
9
+ * sockets with 4401 when it stops authorizing the session.
10
+ */
11
+ export class CallsTokenSource {
12
+ #provider;
13
+ #now;
14
+ #skew;
15
+ #cached;
16
+ #pending;
17
+ // Only the latest provider call may replace the cached token.
18
+ #fetchGeneration = 0;
19
+ constructor(provider, options = {}) {
20
+ if (typeof provider === "string") {
21
+ if (provider.length === 0)
22
+ throw new CallsError("invalid_token", "The token must not be empty.");
23
+ const token = { value: provider };
24
+ this.#provider = async () => token;
25
+ }
26
+ else if (typeof provider === "function") {
27
+ this.#provider = provider;
28
+ }
29
+ else {
30
+ throw new CallsError("invalid_token", "Pass a token string or a token provider function.");
31
+ }
32
+ this.#now = options.now ?? Date.now;
33
+ this.#skew = options.expirySkewMs ?? 30_000;
34
+ }
35
+ /** Resolve the current token, calling the provider when none is usable. */
36
+ get(request = {}) {
37
+ const cached = this.#cached;
38
+ if (request.refresh !== true &&
39
+ cached !== undefined &&
40
+ (cached.expiresAt === undefined ||
41
+ cached.expiresAt - this.#skew > this.#now()))
42
+ return Promise.resolve(cached);
43
+ const refresh = request.refresh === true;
44
+ if (refresh)
45
+ this.#cached = undefined;
46
+ // A refresh never takes the result of a provider call that was not asked
47
+ // to refresh: that call may return the refused token.
48
+ let pending = this.#pending;
49
+ if (pending === undefined || (refresh && !pending.refresh)) {
50
+ const generation = ++this.#fetchGeneration;
51
+ const controller = new AbortController();
52
+ const entry = {
53
+ promise: Promise.resolve(),
54
+ refresh,
55
+ controller,
56
+ waiters: 0,
57
+ anchored: false,
58
+ };
59
+ entry.promise = this.#fetch(refresh, controller.signal, generation).finally(() => {
60
+ if (this.#pending === entry)
61
+ this.#pending = undefined;
62
+ });
63
+ // Every caller may have gone before it settles.
64
+ entry.promise.catch(() => undefined);
65
+ this.#pending = entry;
66
+ pending = entry;
67
+ }
68
+ return this.#wait(pending, request.signal);
69
+ }
70
+ /**
71
+ * Hand one caller the shared provider call. The call runs under its own
72
+ * signal: a caller's cancellation rejects only that caller, and the call
73
+ * itself is cancelled once every caller that could cancel has done so and
74
+ * no caller without a signal is waiting.
75
+ */
76
+ #wait(entry, signal) {
77
+ if (signal === undefined) {
78
+ entry.anchored = true;
79
+ return entry.promise;
80
+ }
81
+ if (signal.aborted)
82
+ return Promise.reject(signal.reason);
83
+ entry.waiters += 1;
84
+ return new Promise((resolve, reject) => {
85
+ let done = false;
86
+ const leave = () => {
87
+ if (done)
88
+ return false;
89
+ done = true;
90
+ entry.waiters -= 1;
91
+ signal.removeEventListener("abort", onAbort);
92
+ return true;
93
+ };
94
+ const onAbort = () => {
95
+ if (!leave())
96
+ return;
97
+ reject(signal.reason);
98
+ if (entry.waiters === 0 && !entry.anchored) {
99
+ if (this.#pending === entry)
100
+ this.#pending = undefined;
101
+ entry.controller.abort(signal.reason);
102
+ }
103
+ };
104
+ signal.addEventListener("abort", onAbort, { once: true });
105
+ entry.promise.then((token) => {
106
+ if (leave())
107
+ resolve(token);
108
+ }, (cause) => {
109
+ if (leave())
110
+ reject(cause);
111
+ });
112
+ });
113
+ }
114
+ /**
115
+ * Drop the cached token so the next `get()` asks the provider. A provider
116
+ * call already in flight may return the refused token: it neither answers
117
+ * later requests nor replaces the cache.
118
+ */
119
+ invalidate() {
120
+ this.#cached = undefined;
121
+ this.#pending = undefined;
122
+ this.#fetchGeneration += 1;
123
+ }
124
+ async #fetch(refresh, signal, generation) {
125
+ const supplied = await this.#provider({ refresh, signal });
126
+ const token = normalizeToken(supplied);
127
+ if (generation === this.#fetchGeneration)
128
+ this.#cached = token;
129
+ return token;
130
+ }
131
+ }
132
+ export function normalizeToken(supplied) {
133
+ if (typeof supplied === "string" && supplied.length > 0)
134
+ return { value: supplied };
135
+ if (supplied !== null && typeof supplied === "object") {
136
+ const t = supplied;
137
+ if (typeof t.value === "string" && t.value.length > 0) {
138
+ if (t.expiresAt === undefined)
139
+ return { value: t.value };
140
+ if (typeof t.expiresAt === "number" && Number.isFinite(t.expiresAt))
141
+ return { value: t.value, expiresAt: t.expiresAt };
142
+ }
143
+ }
144
+ throw new CallsError("invalid_token", "The token provider returned an invalid token.");
145
+ }
146
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../calls/src/token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { SessionConfigurationResource } from "./platform/session-configuration.js";
2
+ import { type OrganizationClientOptions, type ProjectScopedClientOptions } from "./credentials.js";
3
+ import { RawClient, type ProjectScopedRawClient } from "./raw.js";
4
+ import { ApiKeysResource } from "./platform/api-keys.js";
5
+ import { AudiencesResource } from "./platform/audiences.js";
6
+ import { AuditLogsResource } from "./platform/audit-logs.js";
7
+ import { BillingResource } from "./platform/billing.js";
8
+ import { BanSafeResource } from "./platform/bansafe.js";
9
+ import { CampaignsResource } from "./platform/campaigns.js";
10
+ import { CustomersResource } from "./platform/customers.js";
11
+ import { EventsResource, OperationsResource, WebhookDeliveriesResource, WebhooksResource } from "./platform/developer-resources.js";
12
+ import type { ClientOwner } from "./platform/developer-types.js";
13
+ import { MediaResource } from "./platform/media.js";
14
+ import { MembersResource } from "./platform/members.js";
15
+ import { OptOutsResource } from "./platform/opt-outs.js";
16
+ import { OrganizationsResource } from "./platform/organizations.js";
17
+ import { ProjectTokensResource } from "./platform/project-tokens.js";
18
+ import { ProjectsResource } from "./platform/projects.js";
19
+ import { QuickLinkSettingsResource } from "./platform/quicklink-settings.js";
20
+ import { SecurityIncidentsResource } from "./platform/security-incidents.js";
21
+ import { SessionBansResource } from "./platform/session-bans.js";
22
+ import { PlatformSessionsResource } from "./platform/sessions.js";
23
+ import { SipTrunksResource } from "./platform/sip-trunks.js";
24
+ export type EventsResourceFor<O extends ClientOwner> = EventsResource<O>;
25
+ export type WebhooksResourceFor<O extends ClientOwner> = WebhooksResource<O>;
26
+ export type WebhookDeliveriesResourceFor<O extends ClientOwner> = WebhookDeliveriesResource<O>;
27
+ export type RawResourceFor<O extends ClientOwner> = O extends "project" ? ProjectScopedRawClient : RawClient;
28
+ export interface ClientBase<O extends ClientOwner> {
29
+ readonly owner: O;
30
+ readonly projectId: O extends "project" ? string : null;
31
+ readonly events: EventsResourceFor<O>;
32
+ readonly webhooks: WebhooksResourceFor<O>;
33
+ readonly webhookDeliveries: WebhookDeliveriesResourceFor<O>;
34
+ readonly operations: OperationsResource<O>;
35
+ readonly sessionConfiguration: SessionConfigurationResource;
36
+ readonly quickLinkSettings: QuickLinkSettingsResource<O>;
37
+ readonly sipTrunks: SipTrunksResource<O>;
38
+ readonly raw: RawResourceFor<O>;
39
+ project(projectId: string): Client<"project">;
40
+ }
41
+ export interface OrganizationControlPlaneResources {
42
+ readonly apiKeys: ApiKeysResource;
43
+ readonly audiences: AudiencesResource;
44
+ readonly auditLogs: AuditLogsResource;
45
+ readonly billing: BillingResource;
46
+ readonly banSafe: BanSafeResource;
47
+ readonly campaigns: CampaignsResource;
48
+ readonly customers: CustomersResource;
49
+ readonly members: MembersResource;
50
+ readonly organizations: OrganizationsResource;
51
+ readonly media: MediaResource;
52
+ readonly optOuts: OptOutsResource;
53
+ readonly projects: ProjectsResource;
54
+ readonly projectTokens: ProjectTokensResource;
55
+ readonly securityIncidents: SecurityIncidentsResource;
56
+ readonly sessionBans: SessionBansResource;
57
+ readonly sessions: PlatformSessionsResource;
58
+ }
59
+ export type Client<O extends ClientOwner = "organization"> = ClientBase<O> & (O extends "organization" ? OrganizationControlPlaneResources : object);
60
+ export interface ClientConstructor {
61
+ new (options: OrganizationClientOptions): Client<"organization">;
62
+ new (options: ProjectScopedClientOptions): Client<"project">;
63
+ }
64
+ export declare const Client: ClientConstructor;
65
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}