@relaymessenger/sdk 0.5.0-staging.1 → 0.5.0-staging.3

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.
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Rive in a Relay Call: the agent drives a Rive file the phone draws, through
3
+ * data binding (View Model Instance values and triggers), timed against the
4
+ * agent's own audio, and hears the values and triggers the phone writes back.
5
+ *
6
+ * Every wire name lives in this one block so a rename touches one place.
7
+ */
8
+ export const RIVE_CHANNEL = "rive";
9
+ /** A message is at most 1 KB of UTF-8 JSON. */
10
+ export const RIVE_MESSAGE_MAX_BYTES = 1024;
11
+ /**
12
+ * The channel is unordered and lossy, as Cloudflare's docs advise for
13
+ * replaceable state (realtime/sfu/datachannels.mdx, "Configure message
14
+ * delivery"): each message overwrites what it sets, so a lost one is
15
+ * corrected by the next.
16
+ */
17
+ export const RIVE_CHANNEL_OPTIONS = Object.freeze({ ordered: false, maxRetransmits: 0 });
18
+ const encoder = new TextEncoder();
19
+ const isRiveValue = (value) => typeof value === "boolean"
20
+ || typeof value === "string"
21
+ || (typeof value === "number" && Number.isFinite(value));
22
+ const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
23
+ const nonEmpty = (value) => typeof value === "string" && value.length > 0;
24
+ const validValues = (values) => isRecord(values)
25
+ && Object.keys(values).length > 0
26
+ && Object.entries(values).every(([name, value]) => name.length > 0 && isRiveValue(value));
27
+ /** Serialize one message, or throw when it is malformed or over 1 KB. */
28
+ export const encodeRiveMessage = (message) => {
29
+ const out = {};
30
+ if (message.t !== undefined) {
31
+ if (!Number.isFinite(message.t) || message.t < 0) {
32
+ throw new RangeError("Rive `at` must be a finite number of milliseconds, at least 0.");
33
+ }
34
+ out.t = Math.round(message.t);
35
+ }
36
+ for (const key of ["file", "artboard", "state_machine"]) {
37
+ const value = message[key];
38
+ if (value === undefined)
39
+ continue;
40
+ if (!nonEmpty(value))
41
+ throw new RangeError(`Rive \`${key}\` must be a non-empty string.`);
42
+ out[key] = value;
43
+ }
44
+ if ((out.artboard !== undefined || out.state_machine !== undefined) && out.file === undefined) {
45
+ throw new RangeError("Rive `artboard` and `state_machine` come with a `file`.");
46
+ }
47
+ if (message.view_model !== undefined) {
48
+ if (!validValues(message.view_model)) {
49
+ throw new TypeError("Rive `view_model` maps property names to finite numbers, booleans or strings.");
50
+ }
51
+ out.view_model = { ...message.view_model };
52
+ }
53
+ if (message.trigger !== undefined) {
54
+ if (!nonEmpty(message.trigger))
55
+ throw new RangeError("Rive `trigger` needs a trigger name.");
56
+ out.trigger = message.trigger;
57
+ }
58
+ if (out.view_model === undefined && out.trigger === undefined && out.file === undefined) {
59
+ throw new RangeError("A Rive message sets values, fires a trigger or shows a file.");
60
+ }
61
+ const text = JSON.stringify(out);
62
+ if (encoder.encode(text).byteLength > RIVE_MESSAGE_MAX_BYTES) {
63
+ throw new RangeError(`A Rive message is at most ${RIVE_MESSAGE_MAX_BYTES} bytes of JSON.`);
64
+ }
65
+ return text;
66
+ };
67
+ /** Read one message from the phone; null for anything malformed. Unknown keys are ignored. */
68
+ export const parseRiveMessage = (data) => {
69
+ const text = typeof data === "string"
70
+ ? data
71
+ : data instanceof Uint8Array ? new TextDecoder().decode(data) : undefined;
72
+ if (text === undefined || encoder.encode(text).byteLength > RIVE_MESSAGE_MAX_BYTES)
73
+ return null;
74
+ let value;
75
+ try {
76
+ value = JSON.parse(text);
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ if (!isRecord(value))
82
+ return null;
83
+ const message = {};
84
+ if (value.view_model !== undefined) {
85
+ if (!validValues(value.view_model))
86
+ return null;
87
+ message.view_model = value.view_model;
88
+ }
89
+ if (value.trigger !== undefined) {
90
+ if (!nonEmpty(value.trigger))
91
+ return null;
92
+ message.trigger = value.trigger;
93
+ }
94
+ return message.view_model || message.trigger ? message : null;
95
+ };
96
+ /**
97
+ * The agent's handle on its `rive` channel, from `transport.rive()`. Sends
98
+ * are fire-and-forget and return false when the channel is down (during a
99
+ * restart). When it reopens, the last `show` and the latest value of every
100
+ * property are sent again, untimed.
101
+ */
102
+ export class RelayRive {
103
+ #sink;
104
+ #scene;
105
+ /** The latest value of every property set, replayed when the channel reopens. */
106
+ #values = new Map();
107
+ #listeners = new Map();
108
+ /** @internal */
109
+ constructor(sink) {
110
+ this.#sink = sink;
111
+ }
112
+ /** Set View Model Instance properties, such as `{ viseme: 3, speaking: true }`. */
113
+ set(values, timing = {}) {
114
+ const text = encodeRiveMessage({ ...at(timing), view_model: values });
115
+ for (const [name, value] of Object.entries(values))
116
+ this.#values.set(name, value);
117
+ return this.#sink.send(text);
118
+ }
119
+ /** Fire one trigger property, such as `"nod"`. */
120
+ trigger(name, timing = {}) {
121
+ return this.#sink.send(encodeRiveMessage({ ...at(timing), trigger: name }));
122
+ }
123
+ /** Switch to another Relay-hosted file, artboard or state machine, with optional starting values. */
124
+ show(scene, timing = {}) {
125
+ const text = encodeRiveMessage({ ...at(timing), ...scene });
126
+ this.#scene = {
127
+ file: scene.file,
128
+ ...(scene.artboard === undefined ? {} : { artboard: scene.artboard }),
129
+ ...(scene.state_machine === undefined ? {} : { state_machine: scene.state_machine }),
130
+ };
131
+ this.#values.clear();
132
+ for (const [name, value] of Object.entries(scene.view_model ?? {}))
133
+ this.#values.set(name, value);
134
+ return this.#sink.send(text);
135
+ }
136
+ on(event, listener) {
137
+ let listeners = this.#listeners.get(event);
138
+ if (!listeners) {
139
+ listeners = new Set();
140
+ this.#listeners.set(event, listeners);
141
+ }
142
+ listeners.add(listener);
143
+ return this;
144
+ }
145
+ off(event, listener) {
146
+ this.#listeners.get(event)?.delete(listener);
147
+ return this;
148
+ }
149
+ /** @internal One message from the phone. */
150
+ _receive(data) {
151
+ const message = parseRiveMessage(data);
152
+ if (!message)
153
+ return;
154
+ if (message.view_model)
155
+ this.#emit("view_model", message.view_model);
156
+ if (message.trigger)
157
+ this.#emit("trigger", message.trigger);
158
+ }
159
+ /** @internal The scene and latest values as untimed messages of at most 1 KB each. */
160
+ _replay() {
161
+ const messages = [];
162
+ if (this.#scene)
163
+ messages.push(encodeRiveMessage(this.#scene));
164
+ let batch = {};
165
+ for (const [name, value] of this.#values) {
166
+ const next = { ...batch, [name]: value };
167
+ try {
168
+ encodeRiveMessage({ view_model: next });
169
+ batch = next;
170
+ }
171
+ catch {
172
+ messages.push(encodeRiveMessage({ view_model: batch }));
173
+ batch = { [name]: value };
174
+ }
175
+ }
176
+ if (Object.keys(batch).length)
177
+ messages.push(encodeRiveMessage({ view_model: batch }));
178
+ return messages;
179
+ }
180
+ #emit(event, ...args) {
181
+ for (const listener of this.#listeners.get(event) ?? []) {
182
+ try {
183
+ listener(...args);
184
+ }
185
+ catch { /* listeners own their failures */ }
186
+ }
187
+ }
188
+ }
189
+ const at = (timing) => (timing.at === undefined ? {} : { t: timing.at });
190
+ //# sourceMappingURL=rive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rive.js","sourceRoot":"","sources":["../../src/calls/rive.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { CallRoom, CallRoomEndedFrame, CallRoomOptions, CallRoomStateFrame, Relay } from "../index.js";
2
2
  import { type LocalVideoTrack, type RelayVideoReceiverStats, type RelayVideoSenderStats, RemoteVideoTrack, type TrackPublishOptions } from "./video.js";
3
3
  import type { RelayVideoFactory } from "./video.js";
4
+ import { RelayRive } from "./rive.js";
4
5
  export { LocalVideoTrack, RemoteVideoTrack, VideoBufferType, VideoCodec, VideoFrame, VideoRotation, VideoSource, VideoStream, type RelayVideoReceiverStats, type RelayVideoSenderStats, type TrackPublishOptions, type VideoEncoding, type VideoFrameEvent, type VideoStreamOptions, } from "./video.js";
5
6
  export interface RelayAudioFrame {
6
7
  /** Interleaved signed PCM16 samples. */
@@ -58,6 +59,23 @@ export interface RelayAudioSourceLike {
58
59
  waitForDrain?(): Promise<void>;
59
60
  /** Drop audio accepted but not yet written to RTP. */
60
61
  clear?(): void;
62
+ /**
63
+ * The RTP timestamp of the next packet to be written, in milliseconds since
64
+ * the track's first packet (48 kHz clock, silence included).
65
+ */
66
+ mediaTimeMs?(): number;
67
+ }
68
+ /** @internal */
69
+ export interface RelayDataChannelLike {
70
+ readonly readyState: string;
71
+ onopen?: (() => void) | null | undefined;
72
+ onclose?: (() => void) | null | undefined;
73
+ /** W3C `MessageEvent` shape; werift passes `{ data }` with a string or Buffer. */
74
+ onmessage?: ((event: {
75
+ data: unknown;
76
+ }) => void) | null | undefined;
77
+ send(data: string): void;
78
+ close(): void;
61
79
  }
62
80
  /** @internal */
63
81
  export interface RelayAudioSinkLike {
@@ -111,6 +129,13 @@ export interface RelayPeerConnectionLike {
111
129
  setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
112
130
  addEventListener(type: "icegatheringstatechange", listener: () => void): void;
113
131
  removeEventListener(type: "icegatheringstatechange", listener: () => void): void;
132
+ /** W3C `createDataChannel`; werift has it, the `wrtc` binding is not used for data. */
133
+ createDataChannel?(label: string, init: {
134
+ negotiated: true;
135
+ id: number;
136
+ ordered: boolean;
137
+ maxRetransmits: number;
138
+ }): RelayDataChannelLike;
114
139
  /** W3C `getStats()`; the report is Map-like (werift `buildStatsReport`, libwebrtc `RTCStatsReport`). */
115
140
  getStats?(): Promise<{
116
141
  forEach(callback: (stat: Record<string, unknown>) => void): void;
@@ -347,6 +372,8 @@ type TransportListener<K extends TransportEvent> = (...args: TransportEventMap[K
347
372
  * 5 s timer is the trigger that fires in practice.
348
373
  */
349
374
  export declare const RESTART_CONNECT_TIMEOUT_MS = 5000;
375
+ /** How long `rive()` waits for the room to open the channel. */
376
+ export declare const RIVE_OPEN_TIMEOUT_MS = 10000;
350
377
  export declare const RESTART_DISCONNECTED_MS = 7000;
351
378
  export declare const RESTART_INITIAL_DELAY_MS = 250;
352
379
  export declare const RESTART_BACKOFF_FACTOR = 1.1;
@@ -411,8 +438,14 @@ export declare class RelayCallTransport {
411
438
  * frame resolves when it is queued, or when it is dropped: by `clearAudio()`,
412
439
  * the Call ending, or `close()`. It never rejects, so an unawaited write
413
440
  * cannot become an unhandled rejection.
441
+ *
442
+ * It resolves with where the frame's first sample sits on this agent's
443
+ * audio track, in the milliseconds Rive messages use for `at` (the RTP time
444
+ * sent plus what was queued ahead of it, measured when the frame is queued,
445
+ * so a held frame gets its real start), or `undefined` when the frame was
446
+ * dropped or the engine has no RTP clock.
414
447
  */
415
- writeAudio(frame: RelayAudioFrame): Promise<void>;
448
+ writeAudio(frame: RelayAudioFrame): Promise<number | undefined>;
416
449
  /** Milliseconds of audio accepted by `writeAudio` but not yet written to RTP, held audio included. */
417
450
  queuedAudioMs(): number;
418
451
  /**
@@ -423,6 +456,29 @@ export declare class RelayCallTransport {
423
456
  waitForPlayout(): Promise<void>;
424
457
  /** Drop outgoing PCM that has not reached RTP, held audio included, and release `waitForPlayout()` callers. */
425
458
  clearAudio(): void;
459
+ /**
460
+ * Where the next sample `writeAudio` accepts will sit on this agent's audio
461
+ * track, in milliseconds since the track's first RTP packet: the RTP time
462
+ * already sent plus everything queued. Read it just before `writeAudio` and
463
+ * add offsets inside that audio to time Rive messages (`at`). The track
464
+ * sends silence whenever nothing is queued, so the clock runs from connect
465
+ * and survives restarts. Audio held before the person receives this track
466
+ * starts later than this estimate, by the time the hold lasts; the value
467
+ * `writeAudio` resolves with is exact either way.
468
+ */
469
+ audioTimeMs(): number;
470
+ /**
471
+ * Open this agent's `rive` data channel and resolve with its handle: set
472
+ * View Model values, fire triggers and switch files on the Rive the phone
473
+ * draws, timed against this agent's audio, and hear what the phone writes
474
+ * back. The same handle is returned on every call. After a restart the
475
+ * transport asks for the channel again on the new session and replays the
476
+ * scene and the latest values. Requires `connect()` and the werift engine;
477
+ * rejects after `timeoutMs` when the room opens no channel.
478
+ */
479
+ rive(options?: {
480
+ timeoutMs?: number;
481
+ }): Promise<RelayRive>;
426
482
  /**
427
483
  * Resolves once `peerAudio` has fired (at once if it already has). Rejects
428
484
  * after `timeoutMs`, or when the Call ends or the transport closes first.
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/calls/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/calls/transport.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { RemoteVideoTrack, } from "./video.js";
2
+ import { RIVE_CHANNEL, RIVE_CHANNEL_OPTIONS, RelayRive } from "./rive.js";
2
3
  export { LocalVideoTrack, RemoteVideoTrack, VideoBufferType, VideoCodec, VideoFrame, VideoRotation, VideoSource, VideoStream, } from "./video.js";
3
4
  /** Opus's native rate and Relay's wire channel count. */
4
5
  export const DEFAULT_INBOUND_AUDIO = Object.freeze({
@@ -21,6 +22,8 @@ const STALL_AFTER_MS = 2_000;
21
22
  * 5 s timer is the trigger that fires in practice.
22
23
  */
23
24
  export const RESTART_CONNECT_TIMEOUT_MS = 5_000;
25
+ /** How long `rive()` waits for the room to open the channel. */
26
+ export const RIVE_OPEN_TIMEOUT_MS = 10_000;
24
27
  export const RESTART_DISCONNECTED_MS = 7_000;
25
28
  export const RESTART_INITIAL_DELAY_MS = 250;
26
29
  export const RESTART_BACKOFF_FACTOR = 1.1;
@@ -288,6 +291,12 @@ export class RelayCallTransport {
288
291
  #addTrackPending = false;
289
292
  #deferredOffer;
290
293
  #lastAnswerSdp;
294
+ /** The agent's Rive handle, once `rive()` was called; kept across restarts. */
295
+ #rive;
296
+ /** The `rive` channel on the current peer. */
297
+ #riveChannel;
298
+ #riveChannelId;
299
+ #riveWaiters = new Set();
291
300
  constructor(options) {
292
301
  if (!options.callId.trim())
293
302
  throw new Error("callId is required.");
@@ -527,6 +536,12 @@ export class RelayCallTransport {
527
536
  * frame resolves when it is queued, or when it is dropped: by `clearAudio()`,
528
537
  * the Call ending, or `close()`. It never rejects, so an unawaited write
529
538
  * cannot become an unhandled rejection.
539
+ *
540
+ * It resolves with where the frame's first sample sits on this agent's
541
+ * audio track, in the milliseconds Rive messages use for `at` (the RTP time
542
+ * sent plus what was queued ahead of it, measured when the frame is queued,
543
+ * so a held frame gets its real start), or `undefined` when the frame was
544
+ * dropped or the engine has no RTP clock.
530
545
  */
531
546
  writeAudio(frame) {
532
547
  if (this.#closed)
@@ -548,8 +563,7 @@ export class RelayCallTransport {
548
563
  channelCount: frame.channelCount,
549
564
  };
550
565
  if (this.subscribed && this.#heldAudio.length === 0) {
551
- this.#writeAudio(captured, this.#audioGeneration);
552
- return Promise.resolve();
566
+ return Promise.resolve(this.#writeAudio(captured, this.#audioGeneration));
553
567
  }
554
568
  return new Promise((resolve) => {
555
569
  const ms = (captured.samples.length / captured.channelCount / captured.sampleRate) * 1000;
@@ -590,6 +604,130 @@ export class RelayCallTransport {
590
604
  this.#audioSource?.clear?.();
591
605
  this.#releasePlayoutWaiters();
592
606
  }
607
+ /**
608
+ * Where the next sample `writeAudio` accepts will sit on this agent's audio
609
+ * track, in milliseconds since the track's first RTP packet: the RTP time
610
+ * already sent plus everything queued. Read it just before `writeAudio` and
611
+ * add offsets inside that audio to time Rive messages (`at`). The track
612
+ * sends silence whenever nothing is queued, so the clock runs from connect
613
+ * and survives restarts. Audio held before the person receives this track
614
+ * starts later than this estimate, by the time the hold lasts; the value
615
+ * `writeAudio` resolves with is exact either way.
616
+ */
617
+ audioTimeMs() {
618
+ const source = this.#audioSource;
619
+ if (!source?.mediaTimeMs)
620
+ throw new RelayCallTransportError('This engine has no RTP audio clock; use the "werift" engine.');
621
+ return source.mediaTimeMs() + this.queuedAudioMs();
622
+ }
623
+ /**
624
+ * Open this agent's `rive` data channel and resolve with its handle: set
625
+ * View Model values, fire triggers and switch files on the Rive the phone
626
+ * draws, timed against this agent's audio, and hear what the phone writes
627
+ * back. The same handle is returned on every call. After a restart the
628
+ * transport asks for the channel again on the new session and replays the
629
+ * scene and the latest values. Requires `connect()` and the werift engine;
630
+ * rejects after `timeoutMs` when the room opens no channel.
631
+ */
632
+ async rive(options = {}) {
633
+ if (this.#closed || this.#ended)
634
+ throw new RelayCallTransportError("Relay Call transport is closed.");
635
+ if (!this.#reportedConnected || !this.#peer)
636
+ throw new RelayCallTransportError("Relay Call transport is not connected.");
637
+ if (!this.#peer.createDataChannel || !this.#audioSource?.mediaTimeMs) {
638
+ throw new RelayCallTransportError('This engine cannot open the rive channel; use the "werift" engine.');
639
+ }
640
+ this.#rive ??= new RelayRive({
641
+ send: (text) => {
642
+ const channel = this.#riveChannel;
643
+ if (channel?.readyState !== "open")
644
+ return false;
645
+ try {
646
+ channel.send(text);
647
+ return true;
648
+ }
649
+ catch {
650
+ return false;
651
+ }
652
+ },
653
+ });
654
+ const rive = this.#rive;
655
+ if (this.#riveChannel?.readyState === "open")
656
+ return rive;
657
+ // One request per wait: callers that overlap share it; one after a timeout asks again.
658
+ if (this.#riveWaiters.size === 0)
659
+ this.#room.send({ type: RIVE_CHANNEL });
660
+ const timeoutMs = options.timeoutMs ?? RIVE_OPEN_TIMEOUT_MS;
661
+ await new Promise((resolve, reject) => {
662
+ const timer = setTimeout(() => {
663
+ this.#riveWaiters.delete(waiter);
664
+ reject(new RelayCallTransportError("Relay Call room opened no rive channel.", "rive_timeout"));
665
+ }, timeoutMs);
666
+ timer.unref?.();
667
+ const waiter = {
668
+ resolve: () => { clearTimeout(timer); this.#riveWaiters.delete(waiter); resolve(); },
669
+ reject: (error) => { clearTimeout(timer); this.#riveWaiters.delete(waiter); reject(error); },
670
+ };
671
+ this.#riveWaiters.add(waiter);
672
+ });
673
+ return rive;
674
+ }
675
+ /** The room created the channel on this peer's session: open its negotiated end. */
676
+ #openRiveChannel(frame) {
677
+ const peer = this.#peer;
678
+ const rive = this.#rive;
679
+ if (!peer?.createDataChannel || !rive || this.#closed || this.#ended)
680
+ return;
681
+ // Relay repeats the id for a repeated request: the open channel stays (closing it would free the id late).
682
+ const current = this.#riveChannel;
683
+ if (current && this.#riveChannelId === frame.id && current.readyState !== "closed" && current.readyState !== "closing")
684
+ return;
685
+ this.#closeRiveChannel();
686
+ this.#riveChannelId = frame.id;
687
+ const channel = peer.createDataChannel(RIVE_CHANNEL, {
688
+ negotiated: true,
689
+ id: frame.id,
690
+ ...RIVE_CHANNEL_OPTIONS,
691
+ });
692
+ this.#riveChannel = channel;
693
+ const opened = () => {
694
+ if (this.#riveChannel !== channel)
695
+ return;
696
+ for (const text of rive._replay()) {
697
+ try {
698
+ channel.send(text);
699
+ }
700
+ catch { /* lossy by design */ }
701
+ }
702
+ for (const waiter of [...this.#riveWaiters])
703
+ waiter.resolve();
704
+ };
705
+ channel.onmessage = (event) => {
706
+ if (this.#riveChannel === channel)
707
+ rive._receive(event.data);
708
+ };
709
+ if (channel.readyState === "open")
710
+ opened();
711
+ else
712
+ channel.onopen = opened;
713
+ }
714
+ #closeRiveChannel() {
715
+ const channel = this.#riveChannel;
716
+ this.#riveChannel = undefined;
717
+ this.#riveChannelId = undefined;
718
+ if (!channel)
719
+ return;
720
+ channel.onopen = null;
721
+ channel.onmessage = null;
722
+ try {
723
+ channel.close();
724
+ }
725
+ catch { /* already closed */ }
726
+ }
727
+ #rejectRive(error) {
728
+ for (const waiter of [...this.#riveWaiters])
729
+ waiter.reject(error);
730
+ }
593
731
  /**
594
732
  * Resolves once `peerAudio` has fired (at once if it already has). Rejects
595
733
  * after `timeoutMs`, or when the Call ends or the transport closes first.
@@ -657,10 +795,8 @@ export class RelayCallTransport {
657
795
  #releaseHeldAudio() {
658
796
  const held = this.#heldAudio.splice(0);
659
797
  this.#heldAudioMs = 0;
660
- for (const entry of held) {
661
- this.#writeAudio(entry.frame, this.#audioGeneration);
662
- entry.resolve();
663
- }
798
+ for (const entry of held)
799
+ entry.resolve(this.#writeAudio(entry.frame, this.#audioGeneration));
664
800
  const waiters = this.#heldAudioWaiters.splice(0);
665
801
  for (const waiter of waiters)
666
802
  waiter();
@@ -670,7 +806,7 @@ export class RelayCallTransport {
670
806
  const held = this.#heldAudio.splice(0);
671
807
  this.#heldAudioMs = 0;
672
808
  for (const entry of held)
673
- entry.resolve();
809
+ entry.resolve(undefined);
674
810
  const waiters = this.#heldAudioWaiters.splice(0);
675
811
  for (const waiter of waiters)
676
812
  waiter();
@@ -896,6 +1032,10 @@ export class RelayCallTransport {
896
1032
  this.#roomOffers += 1;
897
1033
  this.#queueNegotiation(() => this.#serverOffer(frame));
898
1034
  });
1035
+ this.#room.on("rive", (frame) => {
1036
+ // Queued behind the establish offer's answer, so the SCTP transport exists.
1037
+ this.#queueNegotiation(async () => this.#openRiveChannel(frame));
1038
+ });
899
1039
  this.#room.on("roomState", (frame) => {
900
1040
  this.#roomStates += 1;
901
1041
  this.#callStatus = frame.call?.status;
@@ -1003,6 +1143,9 @@ export class RelayCallTransport {
1003
1143
  #serverError(frame) {
1004
1144
  this.#roomErrors.push(frame.message);
1005
1145
  const error = new RelayCallTransportError(frame.message, frame.code);
1146
+ // Relay refuses a rive channel with `media_unavailable` and keeps the call (Relay-Server #488).
1147
+ if (frame.code === "media_unavailable")
1148
+ this.#rejectRive(error);
1006
1149
  this.#rejectReady(error);
1007
1150
  this.#emit("error", error);
1008
1151
  }
@@ -1023,6 +1166,9 @@ export class RelayCallTransport {
1023
1166
  // Sent for every new session: the room re-pulls a restarted participant's
1024
1167
  // tracks once it reports `connected` (PROTOCOL.md section 2).
1025
1168
  this.#room.connected();
1169
+ // A new session has no rive channel: ask for it again.
1170
+ if (this.#rive && this.#reportedConnected)
1171
+ this.#room.send({ type: RIVE_CHANNEL });
1026
1172
  if (!this.#reportedConnected) {
1027
1173
  this.#reportedConnected = true;
1028
1174
  this.#resolveReady();
@@ -1138,6 +1284,7 @@ export class RelayCallTransport {
1138
1284
  this.#lastAnswerSdp = undefined;
1139
1285
  this.#addTrackPending = false;
1140
1286
  this.#deferredOffer = undefined;
1287
+ this.#closeRiveChannel();
1141
1288
  this.#remoteVideoTrack?._detach();
1142
1289
  this.#remoteVideoEngineTrack = undefined;
1143
1290
  if (this.#remoteSink) {
@@ -1219,15 +1366,17 @@ export class RelayCallTransport {
1219
1366
  if (!existing)
1220
1367
  this.#emit("trackSubscribed", remote);
1221
1368
  }
1369
+ /** Queues the frame and returns where it starts on the audio track (`audioTimeMs()` at that moment), or undefined when dropped. */
1222
1370
  #writeAudio(frame, generation) {
1223
1371
  const source = this.#audioSource;
1224
1372
  if (!source || generation !== this.#audioGeneration)
1225
- return;
1373
+ return undefined;
1374
+ const startMs = source.mediaTimeMs ? source.mediaTimeMs() + (source.queuedMs?.() ?? 0) : undefined;
1226
1375
  const samplesPerChannel = (frame.sampleRate * AUDIO_SLICE_MS) / 1000;
1227
1376
  const sliceSamples = samplesPerChannel * frame.channelCount;
1228
1377
  for (let offset = 0; offset < frame.samples.length; offset += sliceSamples) {
1229
1378
  if (this.#closed || generation !== this.#audioGeneration)
1230
- return;
1379
+ return undefined;
1231
1380
  const remaining = Math.min(sliceSamples, frame.samples.length - offset);
1232
1381
  const samples = new Int16Array(sliceSamples);
1233
1382
  samples.set(frame.samples.subarray(offset, offset + remaining));
@@ -1240,6 +1389,7 @@ export class RelayCallTransport {
1240
1389
  });
1241
1390
  this.#outboundFrames += 1;
1242
1391
  }
1392
+ return startMs;
1243
1393
  }
1244
1394
  #releasePlayoutWaiters() {
1245
1395
  for (const release of [...this.#playoutWaiters])
@@ -1372,6 +1522,8 @@ export class RelayCallTransport {
1372
1522
  return { type, sdp: local.sdp };
1373
1523
  }
1374
1524
  #shutdownMedia() {
1525
+ this.#closeRiveChannel();
1526
+ this.#rejectRive(new RelayCallTransportError("Relay Call ended before the rive channel opened."));
1375
1527
  this.#stopStallGuard();
1376
1528
  this.#clearTimer("connect");
1377
1529
  this.#clearTimer("disconnect");