@livekit/rtc-node 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio_frame.cjs +2 -2
- package/dist/audio_frame.cjs.map +1 -1
- package/dist/audio_frame.d.cts +31 -0
- package/dist/audio_frame.d.ts +11 -5
- package/dist/audio_frame.d.ts.map +1 -1
- package/dist/audio_frame.js +3 -3
- package/dist/audio_frame.js.map +1 -1
- package/dist/audio_resampler.cjs +10 -7
- package/dist/audio_resampler.cjs.map +1 -1
- package/dist/audio_resampler.d.cts +59 -0
- package/dist/audio_resampler.d.ts +11 -3
- package/dist/audio_resampler.d.ts.map +1 -1
- package/dist/audio_resampler.js +13 -10
- package/dist/audio_resampler.js.map +1 -1
- package/dist/audio_source.cjs +6 -4
- package/dist/audio_source.cjs.map +1 -1
- package/dist/audio_source.d.cts +37 -0
- package/dist/audio_source.d.ts +13 -5
- package/dist/audio_source.d.ts.map +1 -1
- package/dist/audio_source.js +9 -7
- package/dist/audio_source.js.map +1 -1
- package/dist/audio_stream.cjs +1 -2
- package/dist/audio_stream.cjs.map +1 -1
- package/dist/audio_stream.d.cts +37 -0
- package/dist/audio_stream.d.ts +16 -5
- package/dist/audio_stream.d.ts.map +1 -1
- package/dist/audio_stream.js +2 -3
- package/dist/audio_stream.js.map +1 -1
- package/dist/e2ee.cjs +19 -20
- package/dist/e2ee.cjs.map +1 -1
- package/dist/e2ee.d.cts +47 -0
- package/dist/e2ee.d.ts +11 -8
- package/dist/e2ee.d.ts.map +1 -1
- package/dist/e2ee.js +29 -30
- package/dist/e2ee.js.map +1 -1
- package/dist/ffi_client.cjs +6 -5
- package/dist/ffi_client.cjs.map +1 -1
- package/dist/ffi_client.d.cts +35 -0
- package/dist/ffi_client.d.ts +23 -11
- package/dist/ffi_client.d.ts.map +1 -1
- package/dist/ffi_client.js +6 -10
- package/dist/ffi_client.js.map +1 -1
- package/dist/index.cjs +16 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +28 -0
- package/dist/index.d.ts +20 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -46
- package/dist/index.js.map +1 -1
- package/dist/napi/native.d.cjs.map +1 -1
- package/dist/napi/native.d.d.cts +21 -0
- package/dist/napi/native.d.d.ts +21 -0
- package/dist/napi/native.d.ts +5 -5
- package/dist/native.d.ts +5 -5
- package/dist/participant.cjs +57 -34
- package/dist/participant.cjs.map +1 -1
- package/dist/participant.d.cts +126 -0
- package/dist/participant.d.ts +34 -20
- package/dist/participant.d.ts.map +1 -1
- package/dist/participant.js +75 -50
- package/dist/participant.js.map +1 -1
- package/dist/proto/audio_frame_pb.cjs +977 -125
- package/dist/proto/audio_frame_pb.cjs.map +1 -1
- package/dist/proto/audio_frame_pb.d.cts +898 -0
- package/dist/proto/audio_frame_pb.d.ts +506 -417
- package/dist/proto/audio_frame_pb.d.ts.map +1 -1
- package/dist/proto/audio_frame_pb.js +943 -85
- package/dist/proto/audio_frame_pb.js.map +1 -1
- package/dist/proto/e2ee_pb.cjs +700 -85
- package/dist/proto/e2ee_pb.cjs.map +1 -1
- package/dist/proto/e2ee_pb.d.cts +653 -0
- package/dist/proto/e2ee_pb.d.ts +333 -263
- package/dist/proto/e2ee_pb.d.ts.map +1 -1
- package/dist/proto/e2ee_pb.js +675 -57
- package/dist/proto/e2ee_pb.js.map +1 -1
- package/dist/proto/ffi_pb.cjs +369 -36
- package/dist/proto/ffi_pb.cjs.map +1 -1
- package/dist/proto/ffi_pb.d.cts +898 -0
- package/dist/proto/ffi_pb.d.ts +164 -112
- package/dist/proto/ffi_pb.d.ts.map +1 -1
- package/dist/proto/ffi_pb.js +364 -29
- package/dist/proto/ffi_pb.js.map +1 -1
- package/dist/proto/handle_pb.cjs +27 -7
- package/dist/proto/handle_pb.cjs.map +1 -1
- package/dist/proto/handle_pb.d.cts +31 -0
- package/dist/proto/handle_pb.d.ts +15 -15
- package/dist/proto/handle_pb.d.ts.map +1 -1
- package/dist/proto/handle_pb.js +26 -5
- package/dist/proto/handle_pb.js.map +1 -1
- package/dist/proto/participant_pb.cjs +112 -15
- package/dist/proto/participant_pb.cjs.map +1 -1
- package/dist/proto/participant_pb.d.cts +181 -0
- package/dist/proto/participant_pb.d.ts +143 -53
- package/dist/proto/participant_pb.d.ts.map +1 -1
- package/dist/proto/participant_pb.js +109 -11
- package/dist/proto/participant_pb.js.map +1 -1
- package/dist/proto/room_pb.cjs +2693 -302
- package/dist/proto/room_pb.cjs.map +1 -1
- package/dist/proto/room_pb.d.cts +2475 -0
- package/dist/proto/room_pb.d.ts +1269 -864
- package/dist/proto/room_pb.d.ts.map +1 -1
- package/dist/proto/room_pb.js +2603 -210
- package/dist/proto/room_pb.js.map +1 -1
- package/dist/proto/rpc_pb.cjs +302 -37
- package/dist/proto/rpc_pb.cjs.map +1 -1
- package/dist/proto/rpc_pb.d.cts +267 -0
- package/dist/proto/rpc_pb.d.ts +140 -108
- package/dist/proto/rpc_pb.d.ts.map +1 -1
- package/dist/proto/rpc_pb.js +291 -25
- package/dist/proto/rpc_pb.js.map +1 -1
- package/dist/proto/stats_pb.cjs +1253 -139
- package/dist/proto/stats_pb.cjs.map +1 -1
- package/dist/proto/stats_pb.d.cts +1764 -0
- package/dist/proto/stats_pb.d.ts +806 -693
- package/dist/proto/stats_pb.d.ts.map +1 -1
- package/dist/proto/stats_pb.js +1216 -93
- package/dist/proto/stats_pb.js.map +1 -1
- package/dist/proto/track_pb.cjs +462 -64
- package/dist/proto/track_pb.cjs.map +1 -1
- package/dist/proto/track_pb.d.cts +434 -0
- package/dist/proto/track_pb.d.ts +254 -220
- package/dist/proto/track_pb.d.ts.map +1 -1
- package/dist/proto/track_pb.js +447 -45
- package/dist/proto/track_pb.js.map +1 -1
- package/dist/proto/track_publication_pb.cjs +130 -0
- package/dist/proto/track_publication_pb.cjs.map +1 -0
- package/dist/proto/track_publication_pb.d.cts +80 -0
- package/dist/proto/track_publication_pb.d.ts +80 -0
- package/dist/proto/track_publication_pb.d.ts.map +1 -0
- package/dist/proto/track_publication_pb.js +103 -0
- package/dist/proto/track_publication_pb.js.map +1 -0
- package/dist/proto/video_frame_pb.cjs +648 -88
- package/dist/proto/video_frame_pb.cjs.map +1 -1
- package/dist/proto/video_frame_pb.d.cts +660 -0
- package/dist/proto/video_frame_pb.d.ts +375 -328
- package/dist/proto/video_frame_pb.d.ts.map +1 -1
- package/dist/proto/video_frame_pb.js +626 -60
- package/dist/proto/video_frame_pb.js.map +1 -1
- package/dist/room.cjs +93 -125
- package/dist/room.cjs.map +1 -1
- package/dist/room.d.cts +123 -0
- package/dist/room.d.ts +37 -34
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +92 -122
- package/dist/room.js.map +1 -1
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.cts +81 -0
- package/dist/rpc.d.ts +10 -7
- package/dist/rpc.js.map +1 -1
- package/dist/track.cjs +12 -8
- package/dist/track.cjs.map +1 -1
- package/dist/track.d.cts +45 -0
- package/dist/track.d.ts +30 -20
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +13 -9
- package/dist/track.js.map +1 -1
- package/dist/track_publication.cjs +21 -12
- package/dist/track_publication.cjs.map +1 -1
- package/dist/track_publication.d.cts +47 -0
- package/dist/track_publication.d.ts +30 -19
- package/dist/track_publication.d.ts.map +1 -1
- package/dist/track_publication.js +22 -13
- package/dist/track_publication.js.map +1 -1
- package/dist/transcription.d.cts +15 -0
- package/dist/transcription.d.ts +4 -3
- package/dist/types.d.cts +9 -0
- package/dist/types.d.ts +3 -2
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +3 -0
- package/dist/version.d.ts +3 -2
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/video_frame.cjs +26 -45
- package/dist/video_frame.cjs.map +1 -1
- package/dist/video_frame.d.cts +24 -0
- package/dist/video_frame.d.ts +10 -4
- package/dist/video_frame.d.ts.map +1 -1
- package/dist/video_frame.js +29 -48
- package/dist/video_frame.js.map +1 -1
- package/dist/video_source.cjs +7 -4
- package/dist/video_source.cjs.map +1 -1
- package/dist/video_source.d.cts +22 -0
- package/dist/video_source.d.ts +14 -7
- package/dist/video_source.d.ts.map +1 -1
- package/dist/video_source.js +9 -6
- package/dist/video_source.js.map +1 -1
- package/dist/video_stream.cjs +16 -5
- package/dist/video_stream.cjs.map +1 -1
- package/dist/video_stream.d.cts +40 -0
- package/dist/video_stream.d.ts +18 -7
- package/dist/video_stream.d.ts.map +1 -1
- package/dist/video_stream.js +17 -6
- package/dist/video_stream.js.map +1 -1
- package/package.json +17 -12
- package/src/audio_frame.ts +10 -10
- package/src/audio_resampler.ts +15 -13
- package/src/audio_source.ts +11 -8
- package/src/audio_stream.ts +3 -4
- package/src/e2ee.ts +36 -37
- package/src/ffi_client.ts +8 -16
- package/src/index.ts +5 -68
- package/src/napi/native.d.ts +5 -5
- package/src/participant.ts +100 -72
- package/src/proto/audio_frame_pb.ts +1220 -496
- package/src/proto/e2ee_pb.ts +858 -337
- package/src/proto/ffi_pb.ts +442 -135
- package/src/proto/handle_pb.ts +33 -19
- package/src/proto/participant_pb.ts +225 -60
- package/src/proto/room_pb.ts +3149 -1013
- package/src/proto/rpc_pb.ts +358 -129
- package/src/proto/stats_pb.ts +1891 -877
- package/src/proto/track_pb.ts +587 -253
- package/src/proto/track_publication_pb.ts +180 -0
- package/src/proto/video_frame_pb.ts +861 -394
- package/src/room.ts +143 -188
- package/src/rpc.ts +1 -1
- package/src/track.ts +16 -17
- package/src/track_publication.ts +25 -26
- package/src/version.ts +1 -1
- package/src/video_frame.ts +48 -72
- package/src/video_source.ts +11 -8
- package/src/video_stream.ts +18 -8
package/dist/room.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { create } from "@bufbuild/protobuf";
|
|
2
1
|
import EventEmitter from "events";
|
|
3
2
|
import { E2EEManager } from "./e2ee.js";
|
|
4
3
|
import { FfiClient, FfiClientEvent, FfiHandle } from "./ffi_client.js";
|
|
5
4
|
import { LocalParticipant, RemoteParticipant } from "./participant.js";
|
|
6
5
|
import { EncryptionState } from "./proto/e2ee_pb.js";
|
|
7
6
|
import {
|
|
8
|
-
|
|
7
|
+
RoomOptions as FfiRoomOptions
|
|
8
|
+
} from "./proto/room_pb.js";
|
|
9
|
+
import {
|
|
10
|
+
ConnectRequest,
|
|
9
11
|
ConnectionState,
|
|
10
12
|
ContinualGatheringPolicy,
|
|
11
13
|
IceTransportType
|
|
@@ -18,36 +20,22 @@ const defaultRtcConfiguration = {
|
|
|
18
20
|
continualGatheringPolicy: ContinualGatheringPolicy.GATHER_CONTINUALLY,
|
|
19
21
|
iceServers: []
|
|
20
22
|
};
|
|
21
|
-
const defaultRoomOptions = {
|
|
23
|
+
const defaultRoomOptions = new FfiRoomOptions({
|
|
22
24
|
autoSubscribe: true,
|
|
23
25
|
dynacast: false,
|
|
24
26
|
e2ee: void 0,
|
|
25
27
|
rtcConfig: void 0,
|
|
26
28
|
adaptiveStream: false,
|
|
27
29
|
joinRetries: 1
|
|
28
|
-
};
|
|
30
|
+
});
|
|
29
31
|
class Room extends EventEmitter {
|
|
30
32
|
constructor() {
|
|
31
33
|
super();
|
|
32
34
|
this.connectionState = ConnectionState.CONN_DISCONNECTED;
|
|
33
35
|
this.remoteParticipants = /* @__PURE__ */ new Map();
|
|
34
36
|
this.onFfiEvent = (ffiEvent) => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
if (ffiEvent.message.case == "rpcMethodInvocation") {
|
|
39
|
-
if (ffiEvent.message.value.localParticipantHandle == this.localParticipant.ffi_handle.handle) {
|
|
40
|
-
this.localParticipant.handleRpcMethodInvocation(
|
|
41
|
-
ffiEvent.message.value.invocationId,
|
|
42
|
-
ffiEvent.message.value.method,
|
|
43
|
-
ffiEvent.message.value.requestId,
|
|
44
|
-
ffiEvent.message.value.callerIdentity,
|
|
45
|
-
ffiEvent.message.value.payload,
|
|
46
|
-
ffiEvent.message.value.responseTimeoutMs
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
return;
|
|
50
|
-
} else if (ffiEvent.message.case != "roomEvent" || ffiEvent.message.value.roomHandle != this.ffiHandle.handle) {
|
|
37
|
+
var _a;
|
|
38
|
+
if (ffiEvent.message.case != "roomEvent" || ffiEvent.message.value.roomHandle != ((_a = this.ffiHandle) == null ? void 0 : _a.handle)) {
|
|
51
39
|
return;
|
|
52
40
|
}
|
|
53
41
|
const ev = ffiEvent.message.value.message;
|
|
@@ -57,82 +45,65 @@ class Room extends EventEmitter {
|
|
|
57
45
|
this.emit("participantConnected" /* ParticipantConnected */, participant);
|
|
58
46
|
} else if (ev.case == "participantDisconnected") {
|
|
59
47
|
const participant = this.remoteParticipants.get(ev.value.participantIdentity);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.emit("participantDisconnected" /* ParticipantDisconnected */, participant);
|
|
63
|
-
}
|
|
48
|
+
this.remoteParticipants.delete(participant.identity);
|
|
49
|
+
this.emit("participantDisconnected" /* ParticipantDisconnected */, participant);
|
|
64
50
|
} else if (ev.case == "localTrackPublished") {
|
|
65
51
|
const publication = this.localParticipant.trackPublications.get(ev.value.trackSid);
|
|
66
|
-
if (!publication) {
|
|
67
|
-
throw new TypeError("local track publication not found");
|
|
68
|
-
}
|
|
69
52
|
this.emit("localTrackPublished" /* LocalTrackPublished */, publication, this.localParticipant);
|
|
70
53
|
} else if (ev.case == "localTrackUnpublished") {
|
|
71
54
|
const publication = this.localParticipant.trackPublications.get(ev.value.publicationSid);
|
|
72
55
|
this.localParticipant.trackPublications.delete(ev.value.publicationSid);
|
|
73
|
-
|
|
74
|
-
this.emit("localTrackUnpublished" /* LocalTrackUnpublished */, publication, this.localParticipant);
|
|
75
|
-
}
|
|
56
|
+
this.emit("localTrackUnpublished" /* LocalTrackUnpublished */, publication, this.localParticipant);
|
|
76
57
|
} else if (ev.case == "localTrackSubscribed") {
|
|
77
58
|
const publication = this.localParticipant.trackPublications.get(ev.value.trackSid);
|
|
78
|
-
if (!publication) {
|
|
79
|
-
throw new TypeError("local track publication not found");
|
|
80
|
-
}
|
|
81
59
|
publication.resolveFirstSubscription();
|
|
82
60
|
this.emit("localTrackSubscribed" /* LocalTrackSubscribed */, publication.track);
|
|
83
61
|
} else if (ev.case == "trackPublished") {
|
|
84
|
-
const participant = this.
|
|
62
|
+
const participant = this.remoteParticipants.get(ev.value.participantIdentity);
|
|
85
63
|
const publication = new RemoteTrackPublication(ev.value.publication);
|
|
86
64
|
participant.trackPublications.set(publication.sid, publication);
|
|
87
65
|
this.emit("trackPublished" /* TrackPublished */, publication, participant);
|
|
88
66
|
} else if (ev.case == "trackUnpublished") {
|
|
89
|
-
const participant = this.
|
|
67
|
+
const participant = this.remoteParticipants.get(ev.value.participantIdentity);
|
|
90
68
|
const publication = participant.trackPublications.get(ev.value.publicationSid);
|
|
91
69
|
participant.trackPublications.delete(ev.value.publicationSid);
|
|
92
|
-
|
|
93
|
-
this.emit("trackUnpublished" /* TrackUnpublished */, publication, participant);
|
|
94
|
-
}
|
|
70
|
+
this.emit("trackUnpublished" /* TrackUnpublished */, publication, participant);
|
|
95
71
|
} else if (ev.case == "trackSubscribed") {
|
|
96
72
|
const ownedTrack = ev.value.track;
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
ev.value.participantIdentity,
|
|
100
|
-
trackInfo.sid
|
|
101
|
-
);
|
|
73
|
+
const participant = this.remoteParticipants.get(ev.value.participantIdentity);
|
|
74
|
+
const publication = participant.trackPublications.get(ownedTrack.info.sid);
|
|
102
75
|
publication.subscribed = true;
|
|
103
|
-
if (
|
|
76
|
+
if (ownedTrack.info.kind == TrackKind.KIND_VIDEO) {
|
|
104
77
|
publication.track = new RemoteVideoTrack(ownedTrack);
|
|
105
|
-
} else if (
|
|
78
|
+
} else if (ownedTrack.info.kind == TrackKind.KIND_AUDIO) {
|
|
106
79
|
publication.track = new RemoteAudioTrack(ownedTrack);
|
|
107
80
|
}
|
|
108
81
|
this.emit("trackSubscribed" /* TrackSubscribed */, publication.track, publication, participant);
|
|
109
82
|
} else if (ev.case == "trackUnsubscribed") {
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
ev.value.trackSid
|
|
113
|
-
);
|
|
114
|
-
const track = publication.track;
|
|
83
|
+
const participant = this.remoteParticipants.get(ev.value.participantIdentity);
|
|
84
|
+
const publication = participant.trackPublications.get(ev.value.trackSid);
|
|
115
85
|
publication.track = void 0;
|
|
116
86
|
publication.subscribed = false;
|
|
117
|
-
this.emit("trackUnsubscribed" /* TrackUnsubscribed */, track, publication, participant);
|
|
87
|
+
this.emit("trackUnsubscribed" /* TrackUnsubscribed */, publication.track, publication, participant);
|
|
118
88
|
} else if (ev.case == "trackSubscriptionFailed") {
|
|
119
|
-
const participant = this.
|
|
120
|
-
this.emit(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
ev.value.
|
|
89
|
+
const participant = this.remoteParticipants.get(ev.value.participantIdentity);
|
|
90
|
+
this.emit(
|
|
91
|
+
"trackSubscriptionFailed" /* TrackSubscriptionFailed */,
|
|
92
|
+
ev.value.trackSid,
|
|
93
|
+
participant,
|
|
94
|
+
ev.value.error
|
|
125
95
|
);
|
|
96
|
+
} else if (ev.case == "trackMuted") {
|
|
97
|
+
const participant = this.remoteParticipants.get(ev.value.participantIdentity);
|
|
98
|
+
const publication = participant.trackPublications.get(ev.value.trackSid);
|
|
126
99
|
publication.info.muted = true;
|
|
127
100
|
if (publication.track) {
|
|
128
101
|
publication.track.info.muted = true;
|
|
129
102
|
}
|
|
130
103
|
this.emit("trackMuted" /* TrackMuted */, publication, participant);
|
|
131
104
|
} else if (ev.case == "trackUnmuted") {
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
ev.value.trackSid
|
|
135
|
-
);
|
|
105
|
+
const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);
|
|
106
|
+
const publication = participant.trackPublications.get(ev.value.trackSid);
|
|
136
107
|
publication.info.muted = false;
|
|
137
108
|
if (publication.track) {
|
|
138
109
|
publication.track.info.muted = false;
|
|
@@ -140,41 +111,47 @@ class Room extends EventEmitter {
|
|
|
140
111
|
this.emit("trackUnmuted" /* TrackUnmuted */, publication, participant);
|
|
141
112
|
} else if (ev.case == "activeSpeakersChanged") {
|
|
142
113
|
const activeSpeakers = ev.value.participantIdentities.map(
|
|
143
|
-
(identity) => this.
|
|
114
|
+
(identity) => this.retrieveParticipantByIdentity(identity)
|
|
115
|
+
);
|
|
116
|
+
this.emit(
|
|
117
|
+
"activeSpeakersChanged" /* ActiveSpeakersChanged */,
|
|
118
|
+
activeSpeakers.map((s) => s)
|
|
144
119
|
);
|
|
145
|
-
this.emit("activeSpeakersChanged" /* ActiveSpeakersChanged */, activeSpeakers);
|
|
146
120
|
} else if (ev.case == "roomMetadataChanged") {
|
|
147
121
|
this.info.metadata = ev.value.metadata;
|
|
148
122
|
this.emit("roomMetadataChanged" /* RoomMetadataChanged */, this.info.metadata);
|
|
149
123
|
} else if (ev.case == "participantMetadataChanged") {
|
|
150
|
-
const participant = this.
|
|
124
|
+
const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);
|
|
151
125
|
participant.info.metadata = ev.value.metadata;
|
|
152
126
|
this.emit("participantMetadataChanged" /* ParticipantMetadataChanged */, participant.metadata, participant);
|
|
153
127
|
} else if (ev.case == "participantNameChanged") {
|
|
154
|
-
const participant = this.
|
|
128
|
+
const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);
|
|
155
129
|
participant.info.name = ev.value.name;
|
|
156
130
|
this.emit("participantNameChanged" /* ParticipantNameChanged */, participant.name, participant);
|
|
157
131
|
} else if (ev.case == "participantAttributesChanged") {
|
|
158
|
-
const participant = this.
|
|
132
|
+
const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);
|
|
159
133
|
participant.info.attributes = ev.value.attributes.reduce(
|
|
160
|
-
(
|
|
161
|
-
|
|
162
|
-
return
|
|
134
|
+
(obj, item) => {
|
|
135
|
+
obj[item.key] = item.value;
|
|
136
|
+
return obj;
|
|
163
137
|
},
|
|
164
138
|
{}
|
|
165
139
|
);
|
|
166
140
|
if (Object.keys(ev.value.changedAttributes).length > 0) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
141
|
+
this.emit(
|
|
142
|
+
"participantAttributesChanged" /* ParticipantAttributesChanged */,
|
|
143
|
+
ev.value.changedAttributes.reduce(
|
|
144
|
+
(obj, item) => {
|
|
145
|
+
obj[item.key] = item.value;
|
|
146
|
+
return obj;
|
|
147
|
+
},
|
|
148
|
+
{}
|
|
149
|
+
),
|
|
150
|
+
participant
|
|
173
151
|
);
|
|
174
|
-
this.emit("participantAttributesChanged" /* ParticipantAttributesChanged */, changedAttributes, participant);
|
|
175
152
|
}
|
|
176
153
|
} else if (ev.case == "connectionQualityChanged") {
|
|
177
|
-
const participant = this.
|
|
154
|
+
const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);
|
|
178
155
|
this.emit("connectionQualityChanged" /* ConnectionQualityChanged */, ev.value.quality, participant);
|
|
179
156
|
} else if (ev.case == "chatMessage") {
|
|
180
157
|
const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);
|
|
@@ -192,8 +169,10 @@ class Room extends EventEmitter {
|
|
|
192
169
|
const dataPacket = ev.value.value;
|
|
193
170
|
switch (dataPacket.case) {
|
|
194
171
|
case "user":
|
|
195
|
-
const
|
|
196
|
-
|
|
172
|
+
const buffer = FfiClient.instance.copyBuffer(
|
|
173
|
+
dataPacket.value.data.data.dataPtr,
|
|
174
|
+
Number(dataPacket.value.data.data.dataLen)
|
|
175
|
+
);
|
|
197
176
|
new FfiHandle(dataPacket.value.data.handle.id).dispose();
|
|
198
177
|
this.emit(
|
|
199
178
|
"dataReceived" /* DataReceived */,
|
|
@@ -223,8 +202,6 @@ class Room extends EventEmitter {
|
|
|
223
202
|
this.emit("reconnecting" /* Reconnecting */);
|
|
224
203
|
} else if (ev.case == "reconnected") {
|
|
225
204
|
this.emit("reconnected" /* Reconnected */);
|
|
226
|
-
} else if (ev.case == "roomSidChanged") {
|
|
227
|
-
this.emit("roomSidChanged" /* RoomSidChanged */, ev.value.sid);
|
|
228
205
|
}
|
|
229
206
|
};
|
|
230
207
|
}
|
|
@@ -240,29 +217,13 @@ class Room extends EventEmitter {
|
|
|
240
217
|
return this.ffiHandle != void 0 && this.connectionState != ConnectionState.CONN_DISCONNECTED;
|
|
241
218
|
}
|
|
242
219
|
async getSid() {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
}
|
|
246
|
-
if (this.info && this.info.sid !== "") {
|
|
247
|
-
return this.info.sid;
|
|
248
|
-
}
|
|
249
|
-
return new Promise((resolve, reject) => {
|
|
250
|
-
const handleRoomUpdate = (sid) => {
|
|
251
|
-
if (sid !== "") {
|
|
252
|
-
this.off("roomSidChanged" /* RoomSidChanged */, handleRoomUpdate);
|
|
253
|
-
resolve(sid);
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
this.on("roomSidChanged" /* RoomSidChanged */, handleRoomUpdate);
|
|
257
|
-
this.once("disconnected" /* Disconnected */, () => {
|
|
258
|
-
this.off("roomSidChanged" /* RoomSidChanged */, handleRoomUpdate);
|
|
259
|
-
reject("Room disconnected before room server id was available");
|
|
260
|
-
});
|
|
261
|
-
});
|
|
220
|
+
var _a;
|
|
221
|
+
return (_a = this.info) == null ? void 0 : _a.sid;
|
|
262
222
|
}
|
|
263
223
|
async connect(url, token, opts) {
|
|
224
|
+
var _a, _b;
|
|
264
225
|
const options = { ...defaultRoomOptions, ...opts };
|
|
265
|
-
const req =
|
|
226
|
+
const req = new ConnectRequest({
|
|
266
227
|
url,
|
|
267
228
|
token,
|
|
268
229
|
options
|
|
@@ -276,35 +237,45 @@ class Room extends EventEmitter {
|
|
|
276
237
|
const cb = await FfiClient.instance.waitFor((ev) => {
|
|
277
238
|
return ev.message.case == "connect" && ev.message.value.asyncId == res.asyncId;
|
|
278
239
|
});
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
240
|
+
switch (cb.message.case) {
|
|
241
|
+
case "result":
|
|
242
|
+
this.ffiHandle = new FfiHandle(cb.message.value.room.handle.id);
|
|
243
|
+
this.e2eeManager = new E2EEManager(this.ffiHandle.handle, {
|
|
244
|
+
keyProviderOptions: {
|
|
245
|
+
sharedKey: (_b = (_a = options.e2ee) == null ? void 0 : _a.keyProviderOptions) == null ? void 0 : _b.sharedKey,
|
|
246
|
+
ratchetSalt: options.e2ee.keyProviderOptions.ratchetSalt,
|
|
247
|
+
ratchetWindowSize: options.e2ee.keyProviderOptions.ratchetWindowSize,
|
|
248
|
+
failureTolerance: options.e2ee.keyProviderOptions.failureTolerance
|
|
249
|
+
},
|
|
250
|
+
encryptionType: options.e2ee.encryptionType
|
|
251
|
+
});
|
|
252
|
+
this.info = cb.message.value.room.info;
|
|
253
|
+
this.connectionState = ConnectionState.CONN_CONNECTED;
|
|
254
|
+
this.localParticipant = new LocalParticipant(cb.message.value.localParticipant);
|
|
255
|
+
for (const pt of cb.message.value.participants) {
|
|
256
|
+
const rp = this.createRemoteParticipant(pt.participant);
|
|
257
|
+
for (const pub of pt.publications) {
|
|
258
|
+
const publication = new RemoteTrackPublication(pub);
|
|
259
|
+
rp.trackPublications.set(publication.sid, publication);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onFfiEvent);
|
|
263
|
+
break;
|
|
264
|
+
case "error":
|
|
265
|
+
default:
|
|
266
|
+
throw new ConnectError(cb.message.value || "");
|
|
296
267
|
}
|
|
297
|
-
FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onFfiEvent);
|
|
298
268
|
}
|
|
299
269
|
async disconnect() {
|
|
300
|
-
|
|
270
|
+
var _a;
|
|
271
|
+
if (!this.isConnected) {
|
|
301
272
|
return;
|
|
302
273
|
}
|
|
303
274
|
FfiClient.instance.request({
|
|
304
275
|
message: {
|
|
305
276
|
case: "disconnect",
|
|
306
277
|
value: {
|
|
307
|
-
roomHandle: this.ffiHandle.handle
|
|
278
|
+
roomHandle: (_a = this.ffiHandle) == null ? void 0 : _a.handle
|
|
308
279
|
}
|
|
309
280
|
}
|
|
310
281
|
});
|
|
@@ -381,7 +352,6 @@ var RoomEvent = /* @__PURE__ */ ((RoomEvent2) => {
|
|
|
381
352
|
RoomEvent2["TrackUnmuted"] = "trackUnmuted";
|
|
382
353
|
RoomEvent2["ActiveSpeakersChanged"] = "activeSpeakersChanged";
|
|
383
354
|
RoomEvent2["RoomMetadataChanged"] = "roomMetadataChanged";
|
|
384
|
-
RoomEvent2["RoomSidChanged"] = "roomSidChanged";
|
|
385
355
|
RoomEvent2["ParticipantMetadataChanged"] = "participantMetadataChanged";
|
|
386
356
|
RoomEvent2["ParticipantNameChanged"] = "participantNameChanged";
|
|
387
357
|
RoomEvent2["ParticipantAttributesChanged"] = "participantAttributesChanged";
|
package/dist/room.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/room.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { create } from '@bufbuild/protobuf';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport type { E2EEOptions } from './e2ee.js';\nimport { E2EEManager } from './e2ee.js';\nimport { FfiClient, FfiClientEvent, FfiHandle } from './ffi_client.js';\nimport type { Participant } from './participant.js';\nimport { LocalParticipant, RemoteParticipant } from './participant.js';\nimport { EncryptionState } from './proto/e2ee_pb.js';\nimport type { FfiEvent } from './proto/ffi_pb.js';\nimport type { OwnedParticipant } from './proto/participant_pb.js';\nimport type {\n ConnectCallback,\n ConnectResponse,\n ConnectionQuality,\n DataPacketKind,\n DisconnectReason,\n DisconnectResponse,\n RoomOptions as FfiRoomOptions,\n IceServer,\n RoomInfo,\n} from './proto/room_pb.js';\nimport {\n ConnectRequestSchema,\n ConnectionState,\n ContinualGatheringPolicy,\n IceTransportType,\n} from './proto/room_pb.js';\nimport { TrackKind } from './proto/track_pb.js';\nimport type { LocalTrack, RemoteTrack } from './track.js';\nimport { RemoteAudioTrack, RemoteVideoTrack } from './track.js';\nimport type { LocalTrackPublication, TrackPublication } from './track_publication.js';\nimport { RemoteTrackPublication } from './track_publication.js';\nimport type { ChatMessage } from './types.js';\n\nexport interface RtcConfiguration {\n iceTransportType: IceTransportType;\n continualGatheringPolicy: ContinualGatheringPolicy;\n iceServers: IceServer[];\n}\n\nexport const defaultRtcConfiguration: RtcConfiguration = {\n iceTransportType: IceTransportType.TRANSPORT_ALL,\n continualGatheringPolicy: ContinualGatheringPolicy.GATHER_CONTINUALLY,\n iceServers: [],\n};\n\nexport interface RoomOptions {\n autoSubscribe: boolean;\n dynacast: boolean;\n e2ee?: E2EEOptions;\n rtcConfig?: RtcConfiguration;\n}\n\nexport const defaultRoomOptions = {\n autoSubscribe: true,\n dynacast: false,\n e2ee: undefined,\n rtcConfig: undefined,\n adaptiveStream: false,\n joinRetries: 1,\n} satisfies Omit<FfiRoomOptions, '$typeName'>;\n\nexport class Room extends (EventEmitter as new () => TypedEmitter<RoomCallbacks>) {\n private info?: RoomInfo;\n private ffiHandle?: FfiHandle;\n\n e2eeManager?: E2EEManager;\n connectionState: ConnectionState = ConnectionState.CONN_DISCONNECTED;\n\n remoteParticipants: Map<string, RemoteParticipant> = new Map();\n localParticipant?: LocalParticipant;\n\n constructor() {\n super();\n }\n\n get name(): string | undefined {\n return this.info?.name;\n }\n\n get metadata(): string | undefined {\n return this.info?.metadata;\n }\n\n get isConnected(): boolean {\n return this.ffiHandle != undefined && this.connectionState != ConnectionState.CONN_DISCONNECTED;\n }\n\n async getSid(): Promise<string> {\n if (!this.isConnected) {\n return '';\n }\n if (this.info && this.info.sid !== '') {\n return this.info.sid;\n }\n return new Promise((resolve, reject) => {\n const handleRoomUpdate = (sid: string) => {\n if (sid !== '') {\n this.off(RoomEvent.RoomSidChanged, handleRoomUpdate);\n resolve(sid);\n }\n };\n this.on(RoomEvent.RoomSidChanged, handleRoomUpdate);\n this.once(RoomEvent.Disconnected, () => {\n this.off(RoomEvent.RoomSidChanged, handleRoomUpdate);\n reject('Room disconnected before room server id was available');\n });\n });\n }\n\n async connect(url: string, token: string, opts?: RoomOptions) {\n const options = { ...defaultRoomOptions, ...opts };\n\n const req = create(ConnectRequestSchema, {\n url: url,\n token: token,\n options,\n });\n\n const res = FfiClient.instance.request<ConnectResponse>({\n message: {\n case: 'connect',\n value: req,\n },\n });\n\n const cb = await FfiClient.instance.waitFor<ConnectCallback>((ev: FfiEvent) => {\n return ev.message.case == 'connect' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.message.case !== 'result') {\n throw new ConnectError(cb.message.value ?? 'Unknown error');\n }\n\n const { room, localParticipant, participants } = cb.message.value;\n\n this.ffiHandle = new FfiHandle(room!.handle!.id);\n if (options.e2ee) {\n this.e2eeManager = new E2EEManager(this.ffiHandle.handle, options.e2ee);\n }\n\n this.info = room!.info;\n this.connectionState = ConnectionState.CONN_CONNECTED;\n this.localParticipant = new LocalParticipant(localParticipant!);\n\n for (const pt of participants) {\n const rp = this.createRemoteParticipant(pt.participant!);\n\n for (const pub of pt.publications) {\n const publication = new RemoteTrackPublication(pub);\n rp.trackPublications.set(publication.sid, publication);\n }\n }\n\n FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onFfiEvent);\n }\n\n async disconnect() {\n if (!this.isConnected || !this.ffiHandle) {\n return;\n }\n\n FfiClient.instance.request<DisconnectResponse>({\n message: {\n case: 'disconnect',\n value: {\n roomHandle: this.ffiHandle.handle,\n },\n },\n });\n\n FfiClient.instance.removeListener(FfiClientEvent.FfiEvent, this.onFfiEvent);\n this.removeAllListeners();\n }\n\n private onFfiEvent = (ffiEvent: FfiEvent) => {\n if (!this.localParticipant || !this.ffiHandle || !this.info) {\n throw TypeError('cannot handle ffi events before connectCallback');\n }\n\n if (ffiEvent.message.case == 'rpcMethodInvocation') {\n if (\n ffiEvent.message.value.localParticipantHandle == this.localParticipant.ffi_handle.handle\n ) {\n this.localParticipant.handleRpcMethodInvocation(\n ffiEvent.message.value.invocationId,\n ffiEvent.message.value.method,\n ffiEvent.message.value.requestId,\n ffiEvent.message.value.callerIdentity,\n ffiEvent.message.value.payload,\n ffiEvent.message.value.responseTimeoutMs,\n );\n }\n return;\n } else if (\n ffiEvent.message.case != 'roomEvent' ||\n ffiEvent.message.value.roomHandle != this.ffiHandle.handle\n ) {\n return;\n }\n\n const ev = ffiEvent.message.value.message;\n if (ev.case == 'participantConnected') {\n const participant = this.createRemoteParticipant(ev.value.info!);\n this.remoteParticipants.set(participant.identity, participant);\n this.emit(RoomEvent.ParticipantConnected, participant);\n } else if (ev.case == 'participantDisconnected') {\n const participant = this.remoteParticipants.get(ev.value.participantIdentity);\n if (participant) {\n this.remoteParticipants.delete(participant.identity);\n this.emit(RoomEvent.ParticipantDisconnected, participant);\n }\n } else if (ev.case == 'localTrackPublished') {\n const publication = this.localParticipant.trackPublications.get(ev.value.trackSid);\n if (!publication) {\n throw new TypeError('local track publication not found');\n }\n this.emit(RoomEvent.LocalTrackPublished, publication, this.localParticipant);\n } else if (ev.case == 'localTrackUnpublished') {\n const publication = this.localParticipant.trackPublications.get(ev.value.publicationSid);\n this.localParticipant.trackPublications.delete(ev.value.publicationSid);\n if (publication) {\n this.emit(RoomEvent.LocalTrackUnpublished, publication, this.localParticipant);\n }\n } else if (ev.case == 'localTrackSubscribed') {\n const publication = this.localParticipant.trackPublications.get(ev.value.trackSid);\n if (!publication) {\n throw new TypeError('local track publication not found');\n }\n publication.resolveFirstSubscription();\n this.emit(RoomEvent.LocalTrackSubscribed, publication.track!);\n } else if (ev.case == 'trackPublished') {\n const participant = this.requireRemoteParticipant(ev.value.participantIdentity);\n const publication = new RemoteTrackPublication(ev.value.publication!);\n participant.trackPublications.set(publication.sid, publication);\n this.emit(RoomEvent.TrackPublished, publication, participant);\n } else if (ev.case == 'trackUnpublished') {\n const participant = this.requireRemoteParticipant(ev.value.participantIdentity);\n const publication = participant.trackPublications.get(ev.value.publicationSid);\n participant.trackPublications.delete(ev.value.publicationSid);\n if (publication) {\n this.emit(RoomEvent.TrackUnpublished, publication, participant);\n }\n } else if (ev.case == 'trackSubscribed') {\n const ownedTrack = ev.value.track!;\n const trackInfo = ownedTrack.info!;\n const { participant, publication } = this.requirePublicationOfRemoteParticipant(\n ev.value.participantIdentity,\n trackInfo.sid,\n );\n publication.subscribed = true;\n if (trackInfo.kind == TrackKind.KIND_VIDEO) {\n publication.track = new RemoteVideoTrack(ownedTrack);\n } else if (trackInfo.kind == TrackKind.KIND_AUDIO) {\n publication.track = new RemoteAudioTrack(ownedTrack);\n }\n\n this.emit(RoomEvent.TrackSubscribed, publication.track!, publication, participant);\n } else if (ev.case == 'trackUnsubscribed') {\n const { participant, publication } = this.requirePublicationOfRemoteParticipant(\n ev.value.participantIdentity,\n ev.value.trackSid,\n );\n const track = publication.track!;\n publication.track = undefined;\n publication.subscribed = false;\n this.emit(RoomEvent.TrackUnsubscribed, track, publication, participant);\n } else if (ev.case == 'trackSubscriptionFailed') {\n const participant = this.requireRemoteParticipant(ev.value.participantIdentity);\n this.emit(RoomEvent.TrackSubscriptionFailed, ev.value.trackSid, participant, ev.value.error);\n } else if (ev.case == 'trackMuted') {\n const { participant, publication } = this.requirePublicationOfParticipant(\n ev.value.participantIdentity,\n ev.value.trackSid,\n );\n publication.info.muted = true;\n if (publication.track) {\n publication.track.info.muted = true;\n }\n this.emit(RoomEvent.TrackMuted, publication, participant);\n } else if (ev.case == 'trackUnmuted') {\n const { participant, publication } = this.requirePublicationOfParticipant(\n ev.value.participantIdentity,\n ev.value.trackSid,\n );\n publication.info.muted = false;\n if (publication.track) {\n publication.track.info.muted = false;\n }\n this.emit(RoomEvent.TrackUnmuted, publication, participant);\n } else if (ev.case == 'activeSpeakersChanged') {\n const activeSpeakers = ev.value.participantIdentities.map((identity) =>\n this.requireParticipantByIdentity(identity),\n );\n this.emit(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n } else if (ev.case == 'roomMetadataChanged') {\n this.info.metadata = ev.value.metadata;\n this.emit(RoomEvent.RoomMetadataChanged, this.info.metadata);\n } else if (ev.case == 'participantMetadataChanged') {\n const participant = this.requireParticipantByIdentity(ev.value.participantIdentity);\n participant.info.metadata = ev.value.metadata;\n this.emit(RoomEvent.ParticipantMetadataChanged, participant.metadata, participant);\n } else if (ev.case == 'participantNameChanged') {\n const participant = this.requireParticipantByIdentity(ev.value.participantIdentity);\n participant.info.name = ev.value.name;\n this.emit(RoomEvent.ParticipantNameChanged, participant.name, participant);\n } else if (ev.case == 'participantAttributesChanged') {\n const participant = this.requireParticipantByIdentity(ev.value.participantIdentity);\n participant.info.attributes = ev.value.attributes.reduce(\n (acc, value) => {\n acc[value.key] = value.value;\n return acc;\n },\n {} as Record<string, string>,\n );\n if (Object.keys(ev.value.changedAttributes).length > 0) {\n const changedAttributes = ev.value.changedAttributes.reduce(\n (acc, value) => {\n acc[value.key] = value.value;\n return acc;\n },\n {} as Record<string, string>,\n );\n this.emit(RoomEvent.ParticipantAttributesChanged, changedAttributes, participant);\n }\n } else if (ev.case == 'connectionQualityChanged') {\n const participant = this.requireParticipantByIdentity(ev.value.participantIdentity);\n this.emit(RoomEvent.ConnectionQualityChanged, ev.value.quality, participant);\n } else if (ev.case == 'chatMessage') {\n const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);\n const { id, message: messageText, timestamp, editTimestamp, generated } = ev.value.message!;\n const message: ChatMessage = {\n id,\n message: messageText,\n timestamp: Number(timestamp),\n editTimestamp: Number(editTimestamp),\n generated,\n };\n this.emit(RoomEvent.ChatMessage, message, participant);\n } else if (ev.case == 'dataPacketReceived') {\n // Can be undefined if the data is sent from a Server SDK\n const participant = this.remoteParticipants.get(ev.value.participantIdentity);\n const dataPacket = ev.value.value;\n switch (dataPacket.case) {\n case 'user':\n const data = dataPacket.value.data!.data!;\n const buffer = FfiClient.instance.copyBuffer(data.dataPtr, Number(data.dataLen));\n new FfiHandle(dataPacket.value.data!.handle!.id).dispose();\n this.emit(\n RoomEvent.DataReceived,\n buffer,\n participant,\n ev.value.kind,\n dataPacket.value.topic,\n );\n break;\n case 'sipDtmf':\n const { code, digit } = dataPacket.value;\n this.emit(RoomEvent.DtmfReceived, code, digit, participant);\n break;\n default:\n break;\n }\n } else if (ev.case == 'e2eeStateChanged') {\n if (ev.value.state == EncryptionState.INTERNAL_ERROR) {\n // throw generic error until Rust SDK is updated to supply the error alongside INTERNAL_ERROR\n this.emit(RoomEvent.EncryptionError, new Error('internal server error'));\n }\n } else if (ev.case == 'connectionStateChanged') {\n this.connectionState = ev.value.state;\n this.emit(RoomEvent.ConnectionStateChanged, this.connectionState);\n /*} else if (ev.case == 'connected') {\n this.emit(RoomEvent.Connected);*/\n } else if (ev.case == 'disconnected') {\n this.emit(RoomEvent.Disconnected, ev.value.reason);\n } else if (ev.case == 'reconnecting') {\n this.emit(RoomEvent.Reconnecting);\n } else if (ev.case == 'reconnected') {\n this.emit(RoomEvent.Reconnected);\n } else if (ev.case == 'roomSidChanged') {\n this.emit(RoomEvent.RoomSidChanged, ev.value.sid);\n }\n };\n\n private retrieveParticipantByIdentity(identity: string): Participant | undefined {\n if (this.localParticipant?.identity === identity) {\n return this.localParticipant;\n } else {\n return this.remoteParticipants.get(identity);\n }\n }\n\n private requireParticipantByIdentity(identity: string): Participant {\n if (this.localParticipant?.identity === identity) {\n return this.localParticipant;\n } else if (this.remoteParticipants.has(identity)) {\n return this.remoteParticipants.get(identity)!;\n } else {\n throw new TypeError(`participant ${identity} not found`);\n }\n }\n\n private requireRemoteParticipant(identity: string) {\n const participant = this.remoteParticipants.get(identity);\n if (!participant) {\n throw new TypeError(`participant ${identity} not found`);\n }\n return participant;\n }\n\n private requirePublicationOfParticipant(identity: string, trackSid: string) {\n const participant = this.requireParticipantByIdentity(identity);\n const publication = participant.trackPublications.get(trackSid);\n if (!publication) {\n throw new TypeError(`publication ${trackSid} not found`);\n }\n return { participant, publication };\n }\n\n private requirePublicationOfRemoteParticipant(identity: string, trackSid: string) {\n const participant = this.requireRemoteParticipant(identity);\n const publication = participant.trackPublications.get(trackSid);\n if (!publication) {\n throw new TypeError(`publication ${trackSid} not found`);\n }\n return { participant, publication };\n }\n\n private createRemoteParticipant(ownedInfo: OwnedParticipant) {\n if (this.remoteParticipants.has(ownedInfo.info!.identity)) {\n throw new Error('Participant already exists');\n }\n\n const participant = new RemoteParticipant(ownedInfo);\n this.remoteParticipants.set(ownedInfo.info!.identity, participant);\n return participant;\n }\n}\n\nexport class ConnectError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport type RoomCallbacks = {\n participantConnected: (participant: RemoteParticipant) => void;\n participantDisconnected: (participant: RemoteParticipant) => void;\n localTrackPublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;\n localTrackUnpublished: (\n publication: LocalTrackPublication,\n participant: LocalParticipant,\n ) => void;\n localTrackSubscribed: (track: LocalTrack) => void;\n trackPublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;\n trackUnpublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;\n trackSubscribed: (\n track: RemoteTrack,\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => void;\n trackUnsubscribed: (\n track: RemoteTrack,\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => void;\n trackSubscriptionFailed: (\n trackSid: string,\n participant: RemoteParticipant,\n reason?: string,\n ) => void;\n trackMuted: (publication: TrackPublication, participant: Participant) => void;\n trackUnmuted: (publication: TrackPublication, participant: Participant) => void;\n activeSpeakersChanged: (speakers: Participant[]) => void;\n roomMetadataChanged: (metadata: string) => void;\n roomInfoUpdated: (info: RoomInfo) => void;\n participantMetadataChanged: (metadata: string | undefined, participant: Participant) => void;\n participantNameChanged: (name: string, participant: Participant) => void;\n participantAttributesChanged: (\n changedAttributes: Record<string, string>,\n participant: Participant,\n ) => void;\n connectionQualityChanged: (quality: ConnectionQuality, participant: Participant) => void;\n dataReceived: (\n payload: Uint8Array,\n participant?: RemoteParticipant,\n kind?: DataPacketKind,\n topic?: string,\n ) => void;\n chatMessage: (message: ChatMessage, participant?: Participant) => void;\n dtmfReceived: (code: number, digit: string, participant?: RemoteParticipant) => void;\n encryptionError: (error: Error) => void;\n connectionStateChanged: (state: ConnectionState) => void;\n connected: () => void;\n disconnected: (reason: DisconnectReason) => void;\n reconnecting: () => void;\n reconnected: () => void;\n roomSidChanged: (sid: string) => void;\n};\n\nexport enum RoomEvent {\n ParticipantConnected = 'participantConnected',\n ParticipantDisconnected = 'participantDisconnected',\n LocalTrackPublished = 'localTrackPublished',\n LocalTrackUnpublished = 'localTrackUnpublished',\n LocalTrackSubscribed = 'localTrackSubscribed',\n TrackPublished = 'trackPublished',\n TrackUnpublished = 'trackUnpublished',\n TrackSubscribed = 'trackSubscribed',\n TrackUnsubscribed = 'trackUnsubscribed',\n TrackSubscriptionFailed = 'trackSubscriptionFailed',\n TrackMuted = 'trackMuted',\n TrackUnmuted = 'trackUnmuted',\n ActiveSpeakersChanged = 'activeSpeakersChanged',\n RoomMetadataChanged = 'roomMetadataChanged',\n RoomSidChanged = 'roomSidChanged',\n ParticipantMetadataChanged = 'participantMetadataChanged',\n ParticipantNameChanged = 'participantNameChanged',\n ParticipantAttributesChanged = 'participantAttributesChanged',\n ConnectionQualityChanged = 'connectionQualityChanged',\n DataReceived = 'dataReceived',\n ChatMessage = 'chatMessage',\n DtmfReceived = 'dtmfReceived',\n EncryptionError = 'encryptionError',\n ConnectionStateChanged = 'connectionStateChanged',\n Connected = 'connected',\n Disconnected = 'disconnected',\n Reconnecting = 'reconnecting',\n Reconnected = 'reconnected',\n}\n"],"mappings":"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","names":["RoomEvent"]}
|
|
1
|
+
{"version":3,"sources":["../src/room.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport type { E2EEOptions } from './e2ee.js';\nimport { E2EEManager } from './e2ee.js';\nimport { FfiClient, FfiClientEvent, FfiHandle } from './ffi_client.js';\nimport type { Participant } from './participant.js';\nimport { LocalParticipant, RemoteParticipant } from './participant.js';\nimport { EncryptionState } from './proto/e2ee_pb.js';\nimport type { FfiEvent } from './proto/ffi_pb.js';\nimport type { DisconnectReason, OwnedParticipant } from './proto/participant_pb.js';\nimport {\n type ConnectCallback,\n type ConnectResponse,\n type ConnectionQuality,\n type DataPacketKind,\n type DisconnectResponse,\n RoomOptions as FfiRoomOptions,\n type IceServer,\n type RoomInfo,\n} from './proto/room_pb.js';\nimport {\n ConnectRequest,\n ConnectionState,\n ContinualGatheringPolicy,\n IceTransportType,\n} from './proto/room_pb.js';\nimport { TrackKind } from './proto/track_pb.js';\nimport type { LocalTrack, RemoteTrack } from './track.js';\nimport { RemoteAudioTrack, RemoteVideoTrack } from './track.js';\nimport type { LocalTrackPublication, TrackPublication } from './track_publication.js';\nimport { RemoteTrackPublication } from './track_publication.js';\nimport type { ChatMessage } from './types.js';\n\nexport interface RtcConfiguration {\n iceTransportType: IceTransportType;\n continualGatheringPolicy: ContinualGatheringPolicy;\n iceServers: IceServer[];\n}\n\nexport const defaultRtcConfiguration: RtcConfiguration = {\n iceTransportType: IceTransportType.TRANSPORT_ALL,\n continualGatheringPolicy: ContinualGatheringPolicy.GATHER_CONTINUALLY,\n iceServers: [],\n};\n\nexport interface RoomOptions {\n autoSubscribe: boolean;\n dynacast: boolean;\n e2ee?: E2EEOptions;\n rtcConfig?: RtcConfiguration;\n}\n\nexport const defaultRoomOptions = new FfiRoomOptions({\n autoSubscribe: true,\n dynacast: false,\n e2ee: undefined,\n rtcConfig: undefined,\n adaptiveStream: false,\n joinRetries: 1,\n});\n\nexport class Room extends (EventEmitter as new () => TypedEmitter<RoomCallbacks>) {\n private info?: RoomInfo;\n private ffiHandle?: FfiHandle;\n\n e2eeManager?: E2EEManager;\n connectionState: ConnectionState = ConnectionState.CONN_DISCONNECTED;\n\n remoteParticipants: Map<string, RemoteParticipant> = new Map();\n localParticipant?: LocalParticipant;\n\n constructor() {\n super();\n }\n\n get name(): string | undefined {\n return this.info?.name;\n }\n\n get metadata(): string | undefined {\n return this.info?.metadata;\n }\n\n get isConnected(): boolean {\n return this.ffiHandle != undefined && this.connectionState != ConnectionState.CONN_DISCONNECTED;\n }\n\n async getSid(): Promise<string | undefined> {\n return this.info?.sid; // TODO update this to handle async room updates once rust protocol has been updated\n }\n\n async connect(url: string, token: string, opts?: RoomOptions) {\n const options = { ...defaultRoomOptions, ...opts };\n\n const req = new ConnectRequest({\n url: url,\n token: token,\n options,\n });\n\n const res = FfiClient.instance.request<ConnectResponse>({\n message: {\n case: 'connect',\n value: req,\n },\n });\n\n const cb = await FfiClient.instance.waitFor<ConnectCallback>((ev: FfiEvent) => {\n return ev.message.case == 'connect' && ev.message.value.asyncId == res.asyncId;\n });\n\n switch (cb.message.case) {\n case 'result':\n this.ffiHandle = new FfiHandle(cb.message.value.room!.handle!.id!);\n this.e2eeManager = new E2EEManager(this.ffiHandle.handle, {\n keyProviderOptions: {\n sharedKey: options.e2ee?.keyProviderOptions?.sharedKey,\n ratchetSalt: options.e2ee!.keyProviderOptions!.ratchetSalt!,\n ratchetWindowSize: options.e2ee!.keyProviderOptions!.ratchetWindowSize!,\n failureTolerance: options.e2ee!.keyProviderOptions!.failureTolerance!,\n },\n encryptionType: options.e2ee!.encryptionType!,\n });\n\n this.info = cb.message.value.room!.info;\n this.connectionState = ConnectionState.CONN_CONNECTED;\n this.localParticipant = new LocalParticipant(cb.message.value.localParticipant!);\n\n for (const pt of cb.message.value.participants) {\n const rp = this.createRemoteParticipant(pt.participant!);\n\n for (const pub of pt.publications) {\n const publication = new RemoteTrackPublication(pub);\n rp.trackPublications.set(publication.sid!, publication);\n }\n }\n\n FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onFfiEvent);\n break;\n case 'error':\n default:\n throw new ConnectError(cb.message.value || '');\n }\n }\n\n async disconnect() {\n if (!this.isConnected) {\n return;\n }\n\n FfiClient.instance.request<DisconnectResponse>({\n message: {\n case: 'disconnect',\n value: {\n roomHandle: this.ffiHandle?.handle,\n },\n },\n });\n\n FfiClient.instance.removeListener(FfiClientEvent.FfiEvent, this.onFfiEvent);\n this.removeAllListeners();\n }\n\n private onFfiEvent = (ffiEvent: FfiEvent) => {\n if (\n ffiEvent.message.case != 'roomEvent' ||\n ffiEvent.message.value.roomHandle != this.ffiHandle?.handle\n ) {\n return;\n }\n\n const ev = ffiEvent.message.value.message;\n if (ev.case == 'participantConnected') {\n const participant = this.createRemoteParticipant(ev.value.info!);\n this.remoteParticipants.set(participant.identity!, participant);\n this.emit(RoomEvent.ParticipantConnected, participant);\n } else if (ev.case == 'participantDisconnected') {\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n this.remoteParticipants.delete(participant!.identity!);\n this.emit(RoomEvent.ParticipantDisconnected, participant!);\n } else if (ev.case == 'localTrackPublished') {\n const publication = this.localParticipant!.trackPublications.get(ev.value.trackSid!);\n this.emit(RoomEvent.LocalTrackPublished, publication!, this.localParticipant!);\n } else if (ev.case == 'localTrackUnpublished') {\n const publication = this.localParticipant!.trackPublications.get(ev.value.publicationSid!);\n this.localParticipant!.trackPublications.delete(ev.value.publicationSid!);\n this.emit(RoomEvent.LocalTrackUnpublished, publication!, this.localParticipant!);\n } else if (ev.case == 'localTrackSubscribed') {\n const publication = this.localParticipant!.trackPublications.get(ev.value.trackSid!);\n publication!.resolveFirstSubscription();\n this.emit(RoomEvent.LocalTrackSubscribed, publication!.track!);\n } else if (ev.case == 'trackPublished') {\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n const publication = new RemoteTrackPublication(ev.value.publication!);\n participant!.trackPublications.set(publication.sid!, publication);\n this.emit(RoomEvent.TrackPublished, publication, participant!);\n } else if (ev.case == 'trackUnpublished') {\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n const publication = participant!.trackPublications.get(ev.value.publicationSid!);\n participant!.trackPublications.delete(ev.value.publicationSid!);\n this.emit(RoomEvent.TrackUnpublished, publication!, participant!);\n } else if (ev.case == 'trackSubscribed') {\n const ownedTrack = ev.value.track;\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n const publication = participant!.trackPublications.get(ownedTrack!.info!.sid!);\n publication!.subscribed = true;\n if (ownedTrack!.info!.kind == TrackKind.KIND_VIDEO) {\n publication!.track = new RemoteVideoTrack(ownedTrack!);\n } else if (ownedTrack!.info!.kind == TrackKind.KIND_AUDIO) {\n publication!.track = new RemoteAudioTrack(ownedTrack!);\n }\n\n this.emit(RoomEvent.TrackSubscribed, publication!.track!, publication!, participant!);\n } else if (ev.case == 'trackUnsubscribed') {\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n const publication = participant!.trackPublications.get(ev.value.trackSid!);\n publication!.track = undefined;\n publication!.subscribed = false;\n this.emit(RoomEvent.TrackUnsubscribed, publication!.track!, publication!, participant!);\n } else if (ev.case == 'trackSubscriptionFailed') {\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n this.emit(\n RoomEvent.TrackSubscriptionFailed,\n ev.value.trackSid!,\n participant!,\n ev.value.error,\n );\n } else if (ev.case == 'trackMuted') {\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n const publication = participant!.trackPublications.get(ev.value.trackSid!);\n publication!.info!.muted = true;\n if (publication!.track) {\n publication!.track.info!.muted = true;\n }\n this.emit(RoomEvent.TrackMuted, publication!, participant!);\n } else if (ev.case == 'trackUnmuted') {\n const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity!);\n const publication = participant!.trackPublications.get(ev.value.trackSid!);\n publication!.info!.muted = false;\n if (publication!.track) {\n publication!.track.info!.muted = false;\n }\n this.emit(RoomEvent.TrackUnmuted, publication!, participant!);\n } else if (ev.case == 'activeSpeakersChanged') {\n const activeSpeakers = ev.value.participantIdentities.map((identity) =>\n this.retrieveParticipantByIdentity(identity),\n );\n this.emit(\n RoomEvent.ActiveSpeakersChanged,\n activeSpeakers.map((s) => s!),\n );\n } else if (ev.case == 'roomMetadataChanged') {\n this.info!.metadata = ev.value.metadata;\n this.emit(RoomEvent.RoomMetadataChanged, this.info!.metadata!);\n } else if (ev.case == 'participantMetadataChanged') {\n const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity!);\n participant!.info!.metadata = ev.value.metadata;\n this.emit(RoomEvent.ParticipantMetadataChanged, participant!.metadata, participant!);\n } else if (ev.case == 'participantNameChanged') {\n const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity!);\n participant!.info!.name = ev.value.name;\n this.emit(RoomEvent.ParticipantNameChanged, participant!.name!, participant!);\n } else if (ev.case == 'participantAttributesChanged') {\n const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity!);\n participant!.info!.attributes = ev.value.attributes.reduce(\n (obj, item) => {\n obj[item.key!] = item.value!;\n return obj;\n },\n {} as Record<string, string>,\n );\n if (Object.keys(ev.value.changedAttributes).length > 0) {\n this.emit(\n RoomEvent.ParticipantAttributesChanged,\n ev.value.changedAttributes.reduce(\n (obj, item) => {\n obj[item.key!] = item.value!;\n return obj;\n },\n {} as Record<string, string>,\n ),\n participant!,\n );\n }\n } else if (ev.case == 'connectionQualityChanged') {\n const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity!);\n this.emit(RoomEvent.ConnectionQualityChanged, ev.value.quality!, participant!);\n } else if (ev.case == 'chatMessage') {\n const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity!);\n const { id, message: messageText, timestamp, editTimestamp, generated } = ev.value.message!;\n const message: ChatMessage = {\n id: id!,\n message: messageText!,\n timestamp: Number(timestamp),\n editTimestamp: Number(editTimestamp),\n generated,\n };\n this.emit(RoomEvent.ChatMessage, message, participant);\n } else if (ev.case == 'dataPacketReceived') {\n // Can be undefined if the data is sent from a Server SDK\n const participant = this.remoteParticipants.get(ev.value.participantIdentity!);\n const dataPacket = ev.value.value;\n switch (dataPacket.case) {\n case 'user':\n const buffer = FfiClient.instance.copyBuffer(\n dataPacket.value.data!.data!.dataPtr!,\n Number(dataPacket.value.data!.data!.dataLen),\n );\n new FfiHandle(dataPacket.value.data!.handle!.id!).dispose();\n this.emit(\n RoomEvent.DataReceived,\n buffer,\n participant,\n ev.value.kind,\n dataPacket.value.topic,\n );\n break;\n case 'sipDtmf':\n const { code, digit } = dataPacket.value;\n this.emit(RoomEvent.DtmfReceived, code!, digit!, participant!);\n break;\n default:\n break;\n }\n } else if (ev.case == 'e2eeStateChanged') {\n if (ev.value.state == EncryptionState.INTERNAL_ERROR) {\n // throw generic error until Rust SDK is updated to supply the error alongside INTERNAL_ERROR\n this.emit(RoomEvent.EncryptionError, new Error('internal server error'));\n }\n } else if (ev.case == 'connectionStateChanged') {\n this.connectionState = ev.value.state!;\n this.emit(RoomEvent.ConnectionStateChanged, this.connectionState);\n /*} else if (ev.case == 'connected') {\n this.emit(RoomEvent.Connected);*/\n } else if (ev.case == 'disconnected') {\n this.emit(RoomEvent.Disconnected, ev.value.reason!);\n } else if (ev.case == 'reconnecting') {\n this.emit(RoomEvent.Reconnecting);\n } else if (ev.case == 'reconnected') {\n this.emit(RoomEvent.Reconnected);\n }\n };\n\n private retrieveParticipantByIdentity(identity: string): Participant | undefined {\n if (this.localParticipant?.identity === identity) {\n return this.localParticipant;\n } else {\n return this.remoteParticipants.get(identity);\n }\n }\n\n private requireParticipantByIdentity(identity: string): Participant {\n if (this.localParticipant?.identity === identity) {\n return this.localParticipant;\n } else if (this.remoteParticipants.has(identity)) {\n return this.remoteParticipants.get(identity)!;\n } else {\n throw new TypeError(`participant ${identity} not found`);\n }\n }\n\n private requireRemoteParticipant(identity: string) {\n const participant = this.remoteParticipants.get(identity);\n if (!participant) {\n throw new TypeError(`participant ${identity} not found`);\n }\n return participant;\n }\n\n private requirePublicationOfParticipant(identity: string, trackSid: string) {\n const participant = this.requireParticipantByIdentity(identity);\n const publication = participant.trackPublications.get(trackSid);\n if (!publication) {\n throw new TypeError(`publication ${trackSid} not found`);\n }\n return { participant, publication };\n }\n\n private requirePublicationOfRemoteParticipant(identity: string, trackSid: string) {\n const participant = this.requireRemoteParticipant(identity);\n const publication = participant.trackPublications.get(trackSid);\n if (!publication) {\n throw new TypeError(`publication ${trackSid} not found`);\n }\n return { participant, publication };\n }\n\n private createRemoteParticipant(ownedInfo: OwnedParticipant) {\n if (this.remoteParticipants.has(ownedInfo.info!.identity!)) {\n throw new Error('Participant already exists');\n }\n\n const participant = new RemoteParticipant(ownedInfo);\n this.remoteParticipants.set(ownedInfo.info!.identity!, participant);\n return participant;\n }\n}\n\nexport class ConnectError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nexport type RoomCallbacks = {\n participantConnected: (participant: RemoteParticipant) => void;\n participantDisconnected: (participant: RemoteParticipant) => void;\n localTrackPublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;\n localTrackUnpublished: (\n publication: LocalTrackPublication,\n participant: LocalParticipant,\n ) => void;\n localTrackSubscribed: (track: LocalTrack) => void;\n trackPublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;\n trackUnpublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;\n trackSubscribed: (\n track: RemoteTrack,\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => void;\n trackUnsubscribed: (\n track: RemoteTrack,\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => void;\n trackSubscriptionFailed: (\n trackSid: string,\n participant: RemoteParticipant,\n reason?: string,\n ) => void;\n trackMuted: (publication: TrackPublication, participant: Participant) => void;\n trackUnmuted: (publication: TrackPublication, participant: Participant) => void;\n activeSpeakersChanged: (speakers: Participant[]) => void;\n roomMetadataChanged: (metadata: string) => void;\n participantMetadataChanged: (metadata: string | undefined, participant: Participant) => void;\n participantNameChanged: (name: string, participant: Participant) => void;\n participantAttributesChanged: (\n changedAttributes: Record<string, string>,\n participant: Participant,\n ) => void;\n connectionQualityChanged: (quality: ConnectionQuality, participant: Participant) => void;\n dataReceived: (\n payload: Uint8Array,\n participant?: RemoteParticipant,\n kind?: DataPacketKind,\n topic?: string,\n ) => void;\n chatMessage: (message: ChatMessage, participant?: Participant) => void;\n dtmfReceived: (code: number, digit: string, participant: RemoteParticipant) => void;\n encryptionError: (error: Error) => void;\n connectionStateChanged: (state: ConnectionState) => void;\n connected: () => void;\n disconnected: (reason: DisconnectReason) => void;\n reconnecting: () => void;\n reconnected: () => void;\n};\n\nexport enum RoomEvent {\n ParticipantConnected = 'participantConnected',\n ParticipantDisconnected = 'participantDisconnected',\n LocalTrackPublished = 'localTrackPublished',\n LocalTrackUnpublished = 'localTrackUnpublished',\n LocalTrackSubscribed = 'localTrackSubscribed',\n TrackPublished = 'trackPublished',\n TrackUnpublished = 'trackUnpublished',\n TrackSubscribed = 'trackSubscribed',\n TrackUnsubscribed = 'trackUnsubscribed',\n TrackSubscriptionFailed = 'trackSubscriptionFailed',\n TrackMuted = 'trackMuted',\n TrackUnmuted = 'trackUnmuted',\n ActiveSpeakersChanged = 'activeSpeakersChanged',\n RoomMetadataChanged = 'roomMetadataChanged',\n ParticipantMetadataChanged = 'participantMetadataChanged',\n ParticipantNameChanged = 'participantNameChanged',\n ParticipantAttributesChanged = 'participantAttributesChanged',\n ConnectionQualityChanged = 'connectionQualityChanged',\n DataReceived = 'dataReceived',\n ChatMessage = 'chatMessage',\n DtmfReceived = 'dtmfReceived',\n EncryptionError = 'encryptionError',\n ConnectionStateChanged = 'connectionStateChanged',\n Connected = 'connected',\n Disconnected = 'disconnected',\n Reconnecting = 'reconnecting',\n Reconnected = 'reconnected',\n}\n"],"mappings":"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","names":["RoomEvent"]}
|
package/dist/rpc.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rpc.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { RpcError as RpcError_Proto } from './proto/rpc_pb.js';\n\n/** Parameters for initiating an RPC call */\nexport interface PerformRpcParams {\n /** The `identity` of the destination participant */\n destinationIdentity: string;\n /** The method name to call */\n method: string;\n /** The method payload */\n payload: string;\n /** Timeout for receiving a response after initial connection (milliseconds). Default: 10000 */\n responseTimeout?: number;\n}\n\n/**\n * Data passed to method handler for incoming RPC invocations\n */\nexport interface RpcInvocationData {\n /**\n * The unique request ID. Will match at both sides of the call, useful for debugging or logging.\n */\n requestId: string;\n\n /**\n * The unique participant identity of the caller.\n */\n callerIdentity: string;\n\n /**\n * The payload of the request. User-definable format, typically JSON.\n */\n payload: string;\n\n /**\n * The maximum time the caller will wait for a response.\n */\n responseTimeout: number;\n}\n\n/**\n * Specialized error handling for RPC methods.\n *\n * Instances of this type, when thrown in a method handler, will have their `message`\n * serialized and sent across the wire. The caller will receive an equivalent error on the other side.\n *\n * Built-in types are included but developers may use any string, with a max length of 256 bytes.\n */\n\nexport class RpcError extends Error {\n code: typeof RpcError.ErrorCode | number;\n data?: string;\n\n /**\n * Creates an error object with the given code and message, plus an optional data payload.\n *\n * If thrown in an RPC method handler, the error will be sent back to the caller.\n *\n * Error codes 1001-1999 are reserved for built-in errors (see RpcError.ErrorCode for their meanings).\n */\n constructor(code: number, message: string, data?: string) {\n super(message);\n this.code = code;\n this.message = message;\n this.data = data;\n }\n\n static fromProto(proto: RpcError_Proto) {\n return new RpcError(proto.code
|
|
1
|
+
{"version":3,"sources":["../src/rpc.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { RpcError as RpcError_Proto } from './proto/rpc_pb.js';\n\n/** Parameters for initiating an RPC call */\nexport interface PerformRpcParams {\n /** The `identity` of the destination participant */\n destinationIdentity: string;\n /** The method name to call */\n method: string;\n /** The method payload */\n payload: string;\n /** Timeout for receiving a response after initial connection (milliseconds). Default: 10000 */\n responseTimeout?: number;\n}\n\n/**\n * Data passed to method handler for incoming RPC invocations\n */\nexport interface RpcInvocationData {\n /**\n * The unique request ID. Will match at both sides of the call, useful for debugging or logging.\n */\n requestId: string;\n\n /**\n * The unique participant identity of the caller.\n */\n callerIdentity: string;\n\n /**\n * The payload of the request. User-definable format, typically JSON.\n */\n payload: string;\n\n /**\n * The maximum time the caller will wait for a response.\n */\n responseTimeout: number;\n}\n\n/**\n * Specialized error handling for RPC methods.\n *\n * Instances of this type, when thrown in a method handler, will have their `message`\n * serialized and sent across the wire. The caller will receive an equivalent error on the other side.\n *\n * Built-in types are included but developers may use any string, with a max length of 256 bytes.\n */\n\nexport class RpcError extends Error {\n code: typeof RpcError.ErrorCode | number;\n data?: string;\n\n /**\n * Creates an error object with the given code and message, plus an optional data payload.\n *\n * If thrown in an RPC method handler, the error will be sent back to the caller.\n *\n * Error codes 1001-1999 are reserved for built-in errors (see RpcError.ErrorCode for their meanings).\n */\n constructor(code: number, message: string, data?: string) {\n super(message);\n this.code = code;\n this.message = message;\n this.data = data;\n }\n\n static fromProto(proto: RpcError_Proto) {\n return new RpcError(proto.code!, proto.message!, proto.data);\n }\n\n toProto() {\n return {\n code: this.code as number,\n message: this.message,\n data: this.data,\n } as RpcError_Proto;\n }\n\n static ErrorCode = {\n APPLICATION_ERROR: 1500,\n CONNECTION_TIMEOUT: 1501,\n RESPONSE_TIMEOUT: 1502,\n RECIPIENT_DISCONNECTED: 1503,\n RESPONSE_PAYLOAD_TOO_LARGE: 1504,\n SEND_FAILED: 1505,\n\n UNSUPPORTED_METHOD: 1400,\n RECIPIENT_NOT_FOUND: 1401,\n REQUEST_PAYLOAD_TOO_LARGE: 1402,\n UNSUPPORTED_SERVER: 1403,\n } as const;\n\n /**\n * @internal\n */\n static ErrorMessage: Record<keyof typeof RpcError.ErrorCode, string> = {\n APPLICATION_ERROR: 'Application error in method handler',\n CONNECTION_TIMEOUT: 'Connection timeout',\n RESPONSE_TIMEOUT: 'Response timeout',\n RECIPIENT_DISCONNECTED: 'Recipient disconnected',\n RESPONSE_PAYLOAD_TOO_LARGE: 'Response payload too large',\n SEND_FAILED: 'Failed to send',\n\n UNSUPPORTED_METHOD: 'Method not supported at destination',\n RECIPIENT_NOT_FOUND: 'Recipient not found',\n REQUEST_PAYLOAD_TOO_LARGE: 'Request payload too large',\n UNSUPPORTED_SERVER: 'RPC not supported by server',\n } as const;\n\n /**\n * Creates an error object from the code, with an auto-populated message.\n *\n * @internal\n */\n static builtIn(key: keyof typeof RpcError.ErrorCode, data?: string): RpcError {\n return new RpcError(RpcError.ErrorCode[key], RpcError.ErrorMessage[key], data);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDO,MAAM,YAAN,MAAM,kBAAiB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlC,YAAY,MAAc,SAAiB,MAAe;AACxD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,OAAO,UAAU,OAAuB;AACtC,WAAO,IAAI,UAAS,MAAM,MAAO,MAAM,SAAU,MAAM,IAAI;AAAA,EAC7D;AAAA,EAEA,UAAU;AACR,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsCA,OAAO,QAAQ,KAAsC,MAAyB;AAC5E,WAAO,IAAI,UAAS,UAAS,UAAU,GAAG,GAAG,UAAS,aAAa,GAAG,GAAG,IAAI;AAAA,EAC/E;AACF;AArEa,UA8BJ,YAAY;AAAA,EACjB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,aAAa;AAAA,EAEb,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,2BAA2B;AAAA,EAC3B,oBAAoB;AACtB;AAAA;AAAA;AAAA;AA1CW,UA+CJ,eAAgE;AAAA,EACrE,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,aAAa;AAAA,EAEb,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,2BAA2B;AAAA,EAC3B,oBAAoB;AACtB;AA3DK,IAAM,WAAN;","names":[]}
|
package/dist/rpc.d.cts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { RpcError as RpcError$1 } from './proto/rpc_pb.cjs';
|
|
2
|
+
import '@bufbuild/protobuf';
|
|
3
|
+
|
|
4
|
+
/** Parameters for initiating an RPC call */
|
|
5
|
+
interface PerformRpcParams {
|
|
6
|
+
/** The `identity` of the destination participant */
|
|
7
|
+
destinationIdentity: string;
|
|
8
|
+
/** The method name to call */
|
|
9
|
+
method: string;
|
|
10
|
+
/** The method payload */
|
|
11
|
+
payload: string;
|
|
12
|
+
/** Timeout for receiving a response after initial connection (milliseconds). Default: 10000 */
|
|
13
|
+
responseTimeout?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Data passed to method handler for incoming RPC invocations
|
|
17
|
+
*/
|
|
18
|
+
interface RpcInvocationData {
|
|
19
|
+
/**
|
|
20
|
+
* The unique request ID. Will match at both sides of the call, useful for debugging or logging.
|
|
21
|
+
*/
|
|
22
|
+
requestId: string;
|
|
23
|
+
/**
|
|
24
|
+
* The unique participant identity of the caller.
|
|
25
|
+
*/
|
|
26
|
+
callerIdentity: string;
|
|
27
|
+
/**
|
|
28
|
+
* The payload of the request. User-definable format, typically JSON.
|
|
29
|
+
*/
|
|
30
|
+
payload: string;
|
|
31
|
+
/**
|
|
32
|
+
* The maximum time the caller will wait for a response.
|
|
33
|
+
*/
|
|
34
|
+
responseTimeout: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Specialized error handling for RPC methods.
|
|
38
|
+
*
|
|
39
|
+
* Instances of this type, when thrown in a method handler, will have their `message`
|
|
40
|
+
* serialized and sent across the wire. The caller will receive an equivalent error on the other side.
|
|
41
|
+
*
|
|
42
|
+
* Built-in types are included but developers may use any string, with a max length of 256 bytes.
|
|
43
|
+
*/
|
|
44
|
+
declare class RpcError extends Error {
|
|
45
|
+
code: typeof RpcError.ErrorCode | number;
|
|
46
|
+
data?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Creates an error object with the given code and message, plus an optional data payload.
|
|
49
|
+
*
|
|
50
|
+
* If thrown in an RPC method handler, the error will be sent back to the caller.
|
|
51
|
+
*
|
|
52
|
+
* Error codes 1001-1999 are reserved for built-in errors (see RpcError.ErrorCode for their meanings).
|
|
53
|
+
*/
|
|
54
|
+
constructor(code: number, message: string, data?: string);
|
|
55
|
+
static fromProto(proto: RpcError$1): RpcError;
|
|
56
|
+
toProto(): RpcError$1;
|
|
57
|
+
static ErrorCode: {
|
|
58
|
+
readonly APPLICATION_ERROR: 1500;
|
|
59
|
+
readonly CONNECTION_TIMEOUT: 1501;
|
|
60
|
+
readonly RESPONSE_TIMEOUT: 1502;
|
|
61
|
+
readonly RECIPIENT_DISCONNECTED: 1503;
|
|
62
|
+
readonly RESPONSE_PAYLOAD_TOO_LARGE: 1504;
|
|
63
|
+
readonly SEND_FAILED: 1505;
|
|
64
|
+
readonly UNSUPPORTED_METHOD: 1400;
|
|
65
|
+
readonly RECIPIENT_NOT_FOUND: 1401;
|
|
66
|
+
readonly REQUEST_PAYLOAD_TOO_LARGE: 1402;
|
|
67
|
+
readonly UNSUPPORTED_SERVER: 1403;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
static ErrorMessage: Record<keyof typeof RpcError.ErrorCode, string>;
|
|
73
|
+
/**
|
|
74
|
+
* Creates an error object from the code, with an auto-populated message.
|
|
75
|
+
*
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
static builtIn(key: keyof typeof RpcError.ErrorCode, data?: string): RpcError;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { type PerformRpcParams, RpcError, type RpcInvocationData };
|