@relaymessenger/sdk 0.3.6-staging.5 → 0.3.6-staging.51

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 (88) hide show
  1. package/README.md +511 -29
  2. package/dist/a2ui.d.ts +111 -0
  3. package/dist/a2ui.d.ts.map +1 -0
  4. package/dist/a2ui.js +137 -0
  5. package/dist/a2ui.js.map +1 -0
  6. package/dist/buttons.d.ts +7 -2
  7. package/dist/buttons.d.ts.map +1 -1
  8. package/dist/buttons.js +13 -11
  9. package/dist/buttons.js.map +1 -1
  10. package/dist/calls/call-room.d.ts +110 -0
  11. package/dist/calls/call-room.d.ts.map +1 -0
  12. package/dist/calls/call-room.js +616 -0
  13. package/dist/calls/call-room.js.map +1 -0
  14. package/dist/calls/engine-werift-video.d.ts +83 -0
  15. package/dist/calls/engine-werift-video.d.ts.map +1 -0
  16. package/dist/calls/engine-werift-video.js +607 -0
  17. package/dist/calls/engine-werift-video.js.map +1 -0
  18. package/dist/calls/engine-werift.d.ts +48 -0
  19. package/dist/calls/engine-werift.d.ts.map +1 -0
  20. package/dist/calls/engine-werift.js +462 -0
  21. package/dist/calls/engine-werift.js.map +1 -0
  22. package/dist/calls/index.d.ts +11 -0
  23. package/dist/calls/index.d.ts.map +1 -0
  24. package/dist/calls/index.js +11 -0
  25. package/dist/calls/index.js.map +1 -0
  26. package/dist/calls/transport.d.ts +466 -0
  27. package/dist/calls/transport.d.ts.map +1 -0
  28. package/dist/calls/transport.js +1409 -0
  29. package/dist/calls/transport.js.map +1 -0
  30. package/dist/calls/video-frame.d.ts +56 -0
  31. package/dist/calls/video-frame.d.ts.map +1 -0
  32. package/dist/calls/video-frame.js +245 -0
  33. package/dist/calls/video-frame.js.map +1 -0
  34. package/dist/calls/video-presets.d.ts +39 -0
  35. package/dist/calls/video-presets.d.ts.map +1 -0
  36. package/dist/calls/video-presets.js +40 -0
  37. package/dist/calls/video-presets.js.map +1 -0
  38. package/dist/calls/video-rtp.d.ts +51 -0
  39. package/dist/calls/video-rtp.d.ts.map +1 -0
  40. package/dist/calls/video-rtp.js +294 -0
  41. package/dist/calls/video-rtp.js.map +1 -0
  42. package/dist/calls/video.d.ts +195 -0
  43. package/dist/calls/video.d.ts.map +1 -0
  44. package/dist/calls/video.js +228 -0
  45. package/dist/calls/video.js.map +1 -0
  46. package/dist/client.d.ts +197 -8
  47. package/dist/client.d.ts.map +1 -1
  48. package/dist/client.js +437 -16
  49. package/dist/client.js.map +1 -1
  50. package/dist/errors.d.ts +11 -0
  51. package/dist/errors.d.ts.map +1 -1
  52. package/dist/errors.js +16 -0
  53. package/dist/errors.js.map +1 -1
  54. package/dist/index.d.ts +8 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +8 -3
  57. package/dist/index.js.map +1 -1
  58. package/dist/links.d.ts +58 -0
  59. package/dist/links.d.ts.map +1 -0
  60. package/dist/links.js +127 -0
  61. package/dist/links.js.map +1 -0
  62. package/dist/operations.d.ts +97 -9
  63. package/dist/operations.d.ts.map +1 -1
  64. package/dist/operations.js +129 -10
  65. package/dist/operations.js.map +1 -1
  66. package/dist/payment.d.ts +67 -0
  67. package/dist/payment.d.ts.map +1 -0
  68. package/dist/payment.js +147 -0
  69. package/dist/payment.js.map +1 -0
  70. package/dist/reply-target.d.ts +26 -0
  71. package/dist/reply-target.d.ts.map +1 -0
  72. package/dist/reply-target.js +59 -0
  73. package/dist/reply-target.js.map +1 -0
  74. package/dist/selection.d.ts +46 -0
  75. package/dist/selection.d.ts.map +1 -0
  76. package/dist/selection.js +142 -0
  77. package/dist/selection.js.map +1 -0
  78. package/dist/types.d.ts +1075 -78
  79. package/dist/types.d.ts.map +1 -1
  80. package/dist/websocket.d.ts +6 -0
  81. package/dist/websocket.d.ts.map +1 -1
  82. package/dist/websocket.js +29 -10
  83. package/dist/websocket.js.map +1 -1
  84. package/package.json +38 -3
  85. package/dist/calls-room.d.ts +0 -50
  86. package/dist/calls-room.d.ts.map +0 -1
  87. package/dist/calls-room.js +0 -319
  88. package/dist/calls-room.js.map +0 -1
@@ -1,319 +0,0 @@
1
- import NodeWebSocket from "ws";
2
- import { RelayAPIError } from "./errors.js";
3
- const HEARTBEAT_INTERVAL_MS = 15_000;
4
- /** The exact text frame the room answers from the runtime, never by code. */
5
- const HEARTBEAT_FRAME = JSON.stringify({ type: "heartbeat" });
6
- const CLIENT_CLOSE_INVALID_FRAME = 4400;
7
- const CALL_STATUSES = new Set(["ringing", "connecting", "active", "ended"]);
8
- const END_REASONS = new Set([
9
- "completed", "declined", "canceled", "no_answer", "disconnected", "failed",
10
- ]);
11
- const ROOM_ERROR_CODES = new Set(["invalid_frame", "not_allowed", "media_unavailable"]);
12
- const TRACKS = new Set(["microphone", "agent-voice"]);
13
- const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
14
- const hasKeys = (value, required, optional = []) => {
15
- const keys = Object.keys(value);
16
- return required.every((key) => keys.includes(key))
17
- && keys.every((key) => required.includes(key) || optional.includes(key));
18
- };
19
- const isSessionDescription = (value, type) => isRecord(value)
20
- && hasKeys(value, ["type", "sdp"])
21
- && value.type === type
22
- && typeof value.sdp === "string"
23
- && value.sdp.length > 0;
24
- const isCall = (value) => isRecord(value)
25
- && typeof value.id === "string"
26
- && typeof value.chat_id === "string"
27
- && isRecord(value.from)
28
- && Array.isArray(value.to)
29
- && value.mode === "audio"
30
- && CALL_STATUSES.has(String(value.status))
31
- && Number.isInteger(value.revision)
32
- && typeof value.created_at === "string"
33
- && (value.end_reason === null || END_REASONS.has(String(value.end_reason)));
34
- const isParticipant = (value) => isRecord(value)
35
- && hasKeys(value, ["contact_id", "kind", "attached", "track", "muted", "connected"])
36
- && typeof value.contact_id === "string"
37
- && (value.kind === "user" || value.kind === "agent")
38
- && typeof value.attached === "boolean"
39
- && (value.track === null || TRACKS.has(String(value.track)))
40
- && typeof value.muted === "boolean"
41
- && typeof value.connected === "boolean";
42
- const isMedia = (value) => isRecord(value)
43
- && hasKeys(value, ["url", "token", "expires_at", "audio_format"])
44
- && typeof value.url === "string"
45
- && typeof value.token === "string"
46
- && typeof value.expires_at === "string"
47
- && isRecord(value.audio_format)
48
- && value.audio_format.encoding === "pcm_s16le"
49
- && value.audio_format.sample_rate === 48_000
50
- && value.audio_format.channels === 2;
51
- const parseServerFrame = (value) => {
52
- if (!isRecord(value) || typeof value.type !== "string")
53
- return undefined;
54
- switch (value.type) {
55
- case "roomState":
56
- return hasKeys(value, ["type", "call", "participants"], ["media"])
57
- && isCall(value.call)
58
- && Array.isArray(value.participants)
59
- && value.participants.every(isParticipant)
60
- && (!Object.hasOwn(value, "media") || isMedia(value.media))
61
- ? value
62
- : undefined;
63
- case "answer":
64
- return hasKeys(value, ["type", "session_description"])
65
- && isSessionDescription(value.session_description, "answer")
66
- ? value
67
- : undefined;
68
- case "offer":
69
- return hasKeys(value, ["type", "session_description", "track"])
70
- && isSessionDescription(value.session_description, "offer")
71
- && TRACKS.has(String(value.track))
72
- ? value
73
- : undefined;
74
- case "ended":
75
- return hasKeys(value, ["type", "reason"]) && END_REASONS.has(String(value.reason))
76
- ? value
77
- : undefined;
78
- case "error":
79
- return hasKeys(value, ["type", "code", "message"])
80
- && ROOM_ERROR_CODES.has(String(value.code))
81
- && typeof value.message === "string"
82
- ? value
83
- : undefined;
84
- case "heartbeat":
85
- return hasKeys(value, ["type"]) ? { type: "heartbeat" } : undefined;
86
- default:
87
- return undefined;
88
- }
89
- };
90
- const deriveRoomURL = (baseURL, callID) => {
91
- let url;
92
- try {
93
- url = new URL(baseURL);
94
- }
95
- catch {
96
- throw new TypeError("Relay baseURL must be an absolute HTTP(S) URL.");
97
- }
98
- if ((url.protocol !== "http:" && url.protocol !== "https:")
99
- || url.username !== ""
100
- || url.password !== "") {
101
- throw new TypeError("Relay baseURL must be an absolute HTTP(S) URL.");
102
- }
103
- url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
104
- url.pathname = `/v1/calls/${encodeURIComponent(callID)}/room`;
105
- url.search = "";
106
- url.hash = "";
107
- return url.toString();
108
- };
109
- /**
110
- * One participant's socket to a Call room. Opens `GET /v1/calls/{callId}/room`
111
- * with the same bearer as every REST route, sends `join`, and keeps `state`
112
- * at the latest `roomState` the room pushed. Nothing is polled.
113
- */
114
- export class CallRoom {
115
- url;
116
- /** The latest `roomState` frame, or null before the room has answered `join`. */
117
- state = null;
118
- #socket;
119
- #listeners = new Map();
120
- #heartbeatIntervalMs;
121
- #heartbeat;
122
- #open = false;
123
- #closed = false;
124
- constructor(baseURL, callID, token, options = {}) {
125
- if (!callID.trim())
126
- throw new TypeError("A Call id is required to join its room.");
127
- if (!token.trim())
128
- throw new TypeError("A Relay token is required to join a Call room.");
129
- this.url = deriveRoomURL(baseURL, callID);
130
- this.#heartbeatIntervalMs = options.heartbeatIntervalMs ?? HEARTBEAT_INTERVAL_MS;
131
- const Constructor = options.WebSocket
132
- ?? NodeWebSocket;
133
- this.#socket = new Constructor(this.url, {
134
- headers: { Authorization: `Bearer ${token}` },
135
- });
136
- this.#socket.addEventListener("open", this.#onOpen);
137
- this.#socket.addEventListener("message", this.#onMessage);
138
- this.#socket.addEventListener("close", this.#onClose);
139
- this.#socket.addEventListener("error", this.#onError);
140
- this.#socket.on?.("unexpected-response", this.#onUnexpectedResponse);
141
- }
142
- get closed() {
143
- return this.#closed;
144
- }
145
- on(event, listener) {
146
- const listeners = this.#listeners.get(event) ?? new Set();
147
- listeners.add(listener);
148
- this.#listeners.set(event, listeners);
149
- return this;
150
- }
151
- off(event, listener) {
152
- this.#listeners.get(event)?.delete(listener);
153
- return this;
154
- }
155
- /** Send one client frame from the room contract. */
156
- send(frame) {
157
- if (this.#closed)
158
- throw new Error("Relay Call room socket is closed.");
159
- this.#socket.send(JSON.stringify(frame));
160
- }
161
- /** Callee only: ringing → connecting. */
162
- accept() {
163
- this.send({ type: "accept" });
164
- }
165
- /** Callee only: ringing → ended(declined). */
166
- decline() {
167
- this.send({ type: "decline" });
168
- }
169
- /** Either side: ringing → ended(canceled) by the caller, else ended(completed). */
170
- end() {
171
- this.send({ type: "end" });
172
- }
173
- /** "My remote track is playing"; the second side's `connected` makes the Call active. */
174
- connected() {
175
- this.send({ type: "connected" });
176
- }
177
- /** Mute state for the other side's screen; the room answers with `roomState`. */
178
- userUpdate(update) {
179
- this.send({ type: "userUpdate", muted: update.muted });
180
- }
181
- close(code = 1000, reason = "client closed") {
182
- if (this.#closed)
183
- return;
184
- this.#stopHeartbeat();
185
- try {
186
- this.#socket.close(code, reason);
187
- }
188
- catch {
189
- this.#finish({ code, reason });
190
- }
191
- }
192
- #emit(event, ...args) {
193
- for (const listener of this.#listeners.get(event) ?? [])
194
- listener(...args);
195
- }
196
- #stopHeartbeat() {
197
- if (this.#heartbeat !== undefined)
198
- clearInterval(this.#heartbeat);
199
- this.#heartbeat = undefined;
200
- }
201
- #finish(event) {
202
- if (this.#closed)
203
- return;
204
- this.#closed = true;
205
- this.#stopHeartbeat();
206
- this.#socket.removeEventListener("open", this.#onOpen);
207
- this.#socket.removeEventListener("message", this.#onMessage);
208
- this.#socket.removeEventListener("close", this.#onClose);
209
- this.#socket.removeEventListener("error", this.#onError);
210
- this.#socket.off?.("unexpected-response", this.#onUnexpectedResponse);
211
- this.#emit("close", event);
212
- }
213
- #invalid(message) {
214
- this.#emit("error", new Error(`Relay Call room received an invalid frame: ${message}`));
215
- this.close(CLIENT_CLOSE_INVALID_FRAME, "invalid frame");
216
- }
217
- #onOpen = () => {
218
- if (this.#open || this.#closed)
219
- return;
220
- this.#open = true;
221
- this.send({ type: "join" });
222
- this.#heartbeat = setInterval(() => {
223
- try {
224
- this.#socket.send(HEARTBEAT_FRAME);
225
- }
226
- catch (cause) {
227
- this.#emit("error", cause instanceof Error ? cause : new Error(String(cause)));
228
- this.close(1000, "heartbeat failed");
229
- }
230
- }, this.#heartbeatIntervalMs);
231
- };
232
- #onMessage = (message) => {
233
- if (this.#closed)
234
- return;
235
- let value;
236
- try {
237
- const data = message.data;
238
- const textData = typeof data === "string"
239
- ? data
240
- : data instanceof ArrayBuffer || ArrayBuffer.isView(data)
241
- ? new TextDecoder().decode(data)
242
- : undefined;
243
- if (textData === undefined) {
244
- this.#invalid("non-text frame");
245
- return;
246
- }
247
- value = JSON.parse(textData);
248
- }
249
- catch {
250
- this.#invalid("invalid JSON");
251
- return;
252
- }
253
- const frame = parseServerFrame(value);
254
- if (frame === undefined) {
255
- this.#invalid(isRecord(value) && typeof value.type === "string"
256
- ? `unexpected ${value.type} frame`
257
- : "missing type");
258
- return;
259
- }
260
- switch (frame.type) {
261
- case "roomState":
262
- this.state = frame;
263
- this.#emit("roomState", frame);
264
- return;
265
- case "offer":
266
- this.#emit("offer", frame);
267
- return;
268
- case "answer":
269
- this.#emit("answer", frame);
270
- return;
271
- case "ended":
272
- this.#emit("ended", frame);
273
- // The room closes 1000 "Call ended" right after; closing here too
274
- // is idempotent and frees the timer without waiting for it.
275
- this.close(1000, "Call ended");
276
- return;
277
- case "error":
278
- this.#emit("error", frame);
279
- return;
280
- case "heartbeat":
281
- return;
282
- }
283
- };
284
- #onClose = (event) => {
285
- this.#finish({ code: event.code ?? 1006, reason: event.reason ?? "" });
286
- };
287
- #onError = () => {
288
- if (this.#closed)
289
- return;
290
- this.#emit("error", new Error("Relay Call room connection failed."));
291
- };
292
- #onUnexpectedResponse = (_request, response) => {
293
- const chunks = [];
294
- response.setEncoding?.("utf8");
295
- response.on("data", (chunk) => {
296
- if (chunks.join("").length < 65_536)
297
- chunks.push(String(chunk));
298
- });
299
- const settle = () => {
300
- const status = response.statusCode ?? 0;
301
- let message = `Relay Call room upgrade failed with HTTP ${status}.`;
302
- let body = chunks.join("");
303
- try {
304
- body = JSON.parse(chunks.join(""));
305
- if (isRecord(body) && isRecord(body.error) && typeof body.error.message === "string") {
306
- message = body.error.message;
307
- }
308
- }
309
- catch {
310
- // Keep the unparsed body for diagnostics.
311
- }
312
- this.#emit("error", new RelayAPIError(message, { status, body }));
313
- this.#finish({ code: 1006, reason: `HTTP ${status}` });
314
- };
315
- response.on("end", settle);
316
- response.on("error", settle);
317
- };
318
- }
319
- //# sourceMappingURL=calls-room.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calls-room.js","sourceRoot":"","sources":["../src/calls-room.ts"],"names":[],"mappings":"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"}