@livekit/rtc-node 0.12.2 → 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 +2 -3
- package/dist/audio_frame.d.ts +2 -3
- 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 +2 -3
- package/dist/audio_resampler.d.ts +2 -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 +3 -3
- package/dist/audio_source.d.ts +3 -3
- 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 +2 -3
- package/dist/audio_stream.d.ts +2 -3
- 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 +0 -1
- package/dist/e2ee.d.ts +0 -1
- 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 +10 -10
- package/dist/ffi_client.d.ts +10 -10
- 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 +6 -35
- package/dist/index.d.ts +6 -35
- 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.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 +10 -10
- package/dist/participant.d.ts +10 -10
- 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 +502 -417
- package/dist/proto/audio_frame_pb.d.ts +502 -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 +331 -263
- package/dist/proto/e2ee_pb.d.ts +331 -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 +156 -109
- package/dist/proto/ffi_pb.d.ts +156 -109
- 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 +13 -15
- package/dist/proto/handle_pb.d.ts +13 -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 +140 -52
- package/dist/proto/participant_pb.d.ts +140 -52
- 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 +1265 -862
- package/dist/proto/room_pb.d.ts +1265 -862
- 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 +138 -108
- package/dist/proto/rpc_pb.d.ts +138 -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 +803 -692
- package/dist/proto/stats_pb.d.ts +803 -692
- 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 +250 -218
- package/dist/proto/track_pb.d.ts +250 -218
- 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 +371 -328
- package/dist/proto/video_frame_pb.d.ts +371 -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 +6 -17
- package/dist/room.d.ts +6 -17
- 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 +0 -1
- package/dist/rpc.d.ts +0 -1
- 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 +8 -9
- package/dist/track.d.ts +8 -9
- 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 +12 -13
- package/dist/track_publication.d.ts +12 -13
- 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/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- 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 +2 -3
- package/dist/video_frame.d.ts +2 -3
- 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 +4 -4
- package/dist/video_source.d.ts +4 -4
- 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 +3 -4
- package/dist/video_stream.d.ts +3 -4
- 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 +9 -9
- 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/participant.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
|
-
import { create } from "@bufbuild/protobuf";
|
|
2
1
|
import { FfiClient, FfiHandle } from "./ffi_client.js";
|
|
3
2
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
DisconnectReason
|
|
4
|
+
} from "./proto/participant_pb.js";
|
|
5
|
+
import { ChatMessage as ChatMessageModel } from "./proto/room_pb.js";
|
|
6
|
+
import {
|
|
7
|
+
EditChatMessageRequest,
|
|
8
|
+
TranscriptionSegment as ProtoTranscriptionSegment,
|
|
9
|
+
PublishDataRequest,
|
|
10
|
+
PublishSipDtmfRequest,
|
|
11
|
+
PublishTrackRequest,
|
|
12
|
+
PublishTranscriptionRequest,
|
|
13
|
+
SendChatMessageRequest,
|
|
14
|
+
SetLocalAttributesRequest,
|
|
15
|
+
SetLocalMetadataRequest,
|
|
16
|
+
SetLocalNameRequest,
|
|
17
|
+
UnpublishTrackRequest
|
|
15
18
|
} from "./proto/room_pb.js";
|
|
16
|
-
import { TranscriptionSegmentSchema } from "./proto/room_pb.js";
|
|
17
19
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
PerformRpcRequest,
|
|
21
|
+
RegisterRpcMethodRequest,
|
|
22
|
+
RpcMethodInvocationResponseRequest,
|
|
23
|
+
UnregisterRpcMethodRequest
|
|
22
24
|
} from "./proto/rpc_pb.js";
|
|
23
25
|
import { RpcError } from "./rpc.js";
|
|
24
26
|
import { LocalTrackPublication } from "./track_publication.js";
|
|
@@ -46,6 +48,12 @@ class Participant {
|
|
|
46
48
|
get kind() {
|
|
47
49
|
return this.info.kind;
|
|
48
50
|
}
|
|
51
|
+
get disconnectReason() {
|
|
52
|
+
if (this.info.disconnectReason === DisconnectReason.UNKNOWN_REASON) {
|
|
53
|
+
return void 0;
|
|
54
|
+
}
|
|
55
|
+
return this.info.disconnectReason;
|
|
56
|
+
}
|
|
49
57
|
}
|
|
50
58
|
class LocalParticipant extends Participant {
|
|
51
59
|
constructor() {
|
|
@@ -54,7 +62,7 @@ class LocalParticipant extends Participant {
|
|
|
54
62
|
this.trackPublications = /* @__PURE__ */ new Map();
|
|
55
63
|
}
|
|
56
64
|
async publishData(data, options) {
|
|
57
|
-
const req =
|
|
65
|
+
const req = new PublishDataRequest({
|
|
58
66
|
localParticipantHandle: this.ffi_handle.handle,
|
|
59
67
|
dataPtr: FfiClient.instance.retrievePtr(data),
|
|
60
68
|
dataLen: BigInt(data.byteLength),
|
|
@@ -73,7 +81,7 @@ class LocalParticipant extends Participant {
|
|
|
73
81
|
}
|
|
74
82
|
}
|
|
75
83
|
async publishDtmf(code, digit) {
|
|
76
|
-
const req =
|
|
84
|
+
const req = new PublishSipDtmfRequest({
|
|
77
85
|
localParticipantHandle: this.ffi_handle.handle,
|
|
78
86
|
code,
|
|
79
87
|
digit
|
|
@@ -89,11 +97,11 @@ class LocalParticipant extends Participant {
|
|
|
89
97
|
}
|
|
90
98
|
}
|
|
91
99
|
async publishTranscription(transcription) {
|
|
92
|
-
const req =
|
|
100
|
+
const req = new PublishTranscriptionRequest({
|
|
93
101
|
localParticipantHandle: this.ffi_handle.handle,
|
|
94
102
|
participantIdentity: transcription.participantIdentity,
|
|
95
103
|
segments: transcription.segments.map(
|
|
96
|
-
(s) =>
|
|
104
|
+
(s) => new ProtoTranscriptionSegment({
|
|
97
105
|
id: s.id,
|
|
98
106
|
text: s.text,
|
|
99
107
|
startTime: s.startTime,
|
|
@@ -115,7 +123,7 @@ class LocalParticipant extends Participant {
|
|
|
115
123
|
}
|
|
116
124
|
}
|
|
117
125
|
async updateMetadata(metadata) {
|
|
118
|
-
const req =
|
|
126
|
+
const req = new SetLocalMetadataRequest({
|
|
119
127
|
localParticipantHandle: this.ffi_handle.handle,
|
|
120
128
|
metadata
|
|
121
129
|
});
|
|
@@ -135,7 +143,7 @@ class LocalParticipant extends Participant {
|
|
|
135
143
|
*
|
|
136
144
|
*/
|
|
137
145
|
async sendChatMessage(text, destinationIdentities, senderIdentity) {
|
|
138
|
-
const req =
|
|
146
|
+
const req = new SendChatMessageRequest({
|
|
139
147
|
localParticipantHandle: this.ffi_handle.handle,
|
|
140
148
|
message: text,
|
|
141
149
|
destinationIdentities,
|
|
@@ -147,20 +155,28 @@ class LocalParticipant extends Participant {
|
|
|
147
155
|
const cb = await FfiClient.instance.waitFor((ev) => {
|
|
148
156
|
return ev.message.case == "chatMessage" && ev.message.value.asyncId == res.asyncId;
|
|
149
157
|
});
|
|
150
|
-
|
|
151
|
-
|
|
158
|
+
switch (cb.message.case) {
|
|
159
|
+
case "chatMessage":
|
|
160
|
+
const { id, timestamp, editTimestamp, message } = cb.message.value;
|
|
161
|
+
return {
|
|
162
|
+
id,
|
|
163
|
+
timestamp: Number(timestamp),
|
|
164
|
+
editTimestamp: Number(editTimestamp),
|
|
165
|
+
message
|
|
166
|
+
};
|
|
167
|
+
case "error":
|
|
168
|
+
default:
|
|
169
|
+
throw new Error(cb.message.value);
|
|
152
170
|
}
|
|
153
|
-
const { id, timestamp, editTimestamp, message } = cb.message.value;
|
|
154
|
-
return { id, timestamp: Number(timestamp), editTimestamp: Number(editTimestamp), message };
|
|
155
171
|
}
|
|
156
172
|
/**
|
|
157
173
|
* @experimental
|
|
158
174
|
*/
|
|
159
175
|
async editChatMessage(editText, originalMessage, destinationIdentities, senderIdentity) {
|
|
160
|
-
const req =
|
|
176
|
+
const req = new EditChatMessageRequest({
|
|
161
177
|
localParticipantHandle: this.ffi_handle.handle,
|
|
162
178
|
editText,
|
|
163
|
-
originalMessage:
|
|
179
|
+
originalMessage: new ChatMessageModel({
|
|
164
180
|
...originalMessage,
|
|
165
181
|
timestamp: BigInt(originalMessage.timestamp),
|
|
166
182
|
editTimestamp: originalMessage.editTimestamp ? BigInt(originalMessage.editTimestamp) : void 0
|
|
@@ -174,14 +190,22 @@ class LocalParticipant extends Participant {
|
|
|
174
190
|
const cb = await FfiClient.instance.waitFor((ev) => {
|
|
175
191
|
return ev.message.case == "chatMessage" && ev.message.value.asyncId == res.asyncId;
|
|
176
192
|
});
|
|
177
|
-
|
|
178
|
-
|
|
193
|
+
switch (cb.message.case) {
|
|
194
|
+
case "chatMessage":
|
|
195
|
+
const { id, timestamp, editTimestamp, message } = cb.message.value;
|
|
196
|
+
return {
|
|
197
|
+
id,
|
|
198
|
+
timestamp: Number(timestamp),
|
|
199
|
+
editTimestamp: Number(editTimestamp),
|
|
200
|
+
message
|
|
201
|
+
};
|
|
202
|
+
case "error":
|
|
203
|
+
default:
|
|
204
|
+
throw new Error(cb.message.value);
|
|
179
205
|
}
|
|
180
|
-
const { id, timestamp, editTimestamp, message } = cb.message.value;
|
|
181
|
-
return { id, timestamp: Number(timestamp), editTimestamp: Number(editTimestamp), message };
|
|
182
206
|
}
|
|
183
207
|
async updateName(name) {
|
|
184
|
-
const req =
|
|
208
|
+
const req = new SetLocalNameRequest({
|
|
185
209
|
localParticipantHandle: this.ffi_handle.handle,
|
|
186
210
|
name
|
|
187
211
|
});
|
|
@@ -193,11 +217,9 @@ class LocalParticipant extends Participant {
|
|
|
193
217
|
});
|
|
194
218
|
}
|
|
195
219
|
async setAttributes(attributes) {
|
|
196
|
-
const req =
|
|
220
|
+
const req = new SetLocalAttributesRequest({
|
|
197
221
|
localParticipantHandle: this.ffi_handle.handle,
|
|
198
|
-
attributes:
|
|
199
|
-
return { key, value };
|
|
200
|
-
})
|
|
222
|
+
attributes: Object.entries(attributes).map(([key, value]) => ({ key, value }))
|
|
201
223
|
});
|
|
202
224
|
const res = FfiClient.instance.request({
|
|
203
225
|
message: { case: "setLocalAttributes", value: req }
|
|
@@ -207,7 +229,7 @@ class LocalParticipant extends Participant {
|
|
|
207
229
|
});
|
|
208
230
|
}
|
|
209
231
|
async publishTrack(track, options) {
|
|
210
|
-
const req =
|
|
232
|
+
const req = new PublishTrackRequest({
|
|
211
233
|
localParticipantHandle: this.ffi_handle.handle,
|
|
212
234
|
trackHandle: track.ffi_handle.handle,
|
|
213
235
|
options
|
|
@@ -218,16 +240,19 @@ class LocalParticipant extends Participant {
|
|
|
218
240
|
const cb = await FfiClient.instance.waitFor((ev) => {
|
|
219
241
|
return ev.message.case == "publishTrack" && ev.message.value.asyncId == res.asyncId;
|
|
220
242
|
});
|
|
221
|
-
|
|
222
|
-
|
|
243
|
+
switch (cb.message.case) {
|
|
244
|
+
case "publication":
|
|
245
|
+
const track_publication = new LocalTrackPublication(cb.message.value);
|
|
246
|
+
track_publication.track = track;
|
|
247
|
+
this.trackPublications.set(track_publication.sid, track_publication);
|
|
248
|
+
return track_publication;
|
|
249
|
+
case "error":
|
|
250
|
+
default:
|
|
251
|
+
throw new Error(cb.message.value);
|
|
223
252
|
}
|
|
224
|
-
const track_publication = new LocalTrackPublication(cb.message.value);
|
|
225
|
-
track_publication.track = track;
|
|
226
|
-
this.trackPublications.set(track_publication.sid, track_publication);
|
|
227
|
-
return track_publication;
|
|
228
253
|
}
|
|
229
254
|
async unpublishTrack(trackSid) {
|
|
230
|
-
const req =
|
|
255
|
+
const req = new UnpublishTrackRequest({
|
|
231
256
|
localParticipantHandle: this.ffi_handle.handle,
|
|
232
257
|
trackSid
|
|
233
258
|
});
|
|
@@ -258,7 +283,7 @@ class LocalParticipant extends Participant {
|
|
|
258
283
|
payload,
|
|
259
284
|
responseTimeout
|
|
260
285
|
}) {
|
|
261
|
-
const req =
|
|
286
|
+
const req = new PerformRpcRequest({
|
|
262
287
|
localParticipantHandle: this.ffi_handle.handle,
|
|
263
288
|
destinationIdentity,
|
|
264
289
|
method,
|
|
@@ -306,7 +331,7 @@ class LocalParticipant extends Participant {
|
|
|
306
331
|
*/
|
|
307
332
|
registerRpcMethod(method, handler) {
|
|
308
333
|
this.rpcHandlers.set(method, handler);
|
|
309
|
-
const req =
|
|
334
|
+
const req = new RegisterRpcMethodRequest({
|
|
310
335
|
localParticipantHandle: this.ffi_handle.handle,
|
|
311
336
|
method
|
|
312
337
|
});
|
|
@@ -321,7 +346,7 @@ class LocalParticipant extends Participant {
|
|
|
321
346
|
*/
|
|
322
347
|
unregisterRpcMethod(method) {
|
|
323
348
|
this.rpcHandlers.delete(method);
|
|
324
|
-
const req =
|
|
349
|
+
const req = new UnregisterRpcMethodRequest({
|
|
325
350
|
localParticipantHandle: this.ffi_handle.handle,
|
|
326
351
|
method
|
|
327
352
|
});
|
|
@@ -351,7 +376,7 @@ class LocalParticipant extends Participant {
|
|
|
351
376
|
}
|
|
352
377
|
}
|
|
353
378
|
}
|
|
354
|
-
const req =
|
|
379
|
+
const req = new RpcMethodInvocationResponseRequest({
|
|
355
380
|
localParticipantHandle: this.ffi_handle.handle,
|
|
356
381
|
invocationId,
|
|
357
382
|
error: responseError ? responseError.toProto() : void 0,
|
package/dist/participant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/participant.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { create } from '@bufbuild/protobuf';\nimport { FfiClient, FfiHandle } from './ffi_client.js';\nimport type { OwnedParticipant, ParticipantInfo, ParticipantKind } from './proto/participant_pb.js';\nimport type {\n PublishDataCallback,\n PublishDataResponse,\n PublishSipDtmfCallback,\n PublishSipDtmfResponse,\n PublishTrackCallback,\n PublishTrackResponse,\n PublishTranscriptionCallback,\n PublishTranscriptionResponse,\n SendChatMessageCallback,\n SendChatMessageResponse,\n SetLocalAttributesCallback,\n SetLocalAttributesResponse,\n SetLocalMetadataCallback,\n SetLocalMetadataResponse,\n SetLocalNameCallback,\n SetLocalNameResponse,\n TrackPublishOptions,\n UnpublishTrackCallback,\n UnpublishTrackResponse,\n} from './proto/room_pb.js';\nimport {\n ChatMessageSchema,\n EditChatMessageRequestSchema,\n PublishDataRequestSchema,\n PublishSipDtmfRequestSchema,\n PublishTrackRequestSchema,\n PublishTranscriptionRequestSchema,\n SendChatMessageRequestSchema,\n SetLocalAttributesRequestSchema,\n SetLocalMetadataRequestSchema,\n SetLocalNameRequestSchema,\n UnpublishTrackRequestSchema,\n} from './proto/room_pb.js';\nimport { TranscriptionSegmentSchema } from './proto/room_pb.js';\nimport {\n PerformRpcRequestSchema,\n RegisterRpcMethodRequestSchema,\n RpcMethodInvocationResponseRequestSchema,\n UnregisterRpcMethodRequestSchema,\n} from './proto/rpc_pb.js';\nimport type {\n PerformRpcCallback,\n PerformRpcResponse,\n RegisterRpcMethodResponse,\n RpcMethodInvocationResponseResponse,\n UnregisterRpcMethodResponse,\n} from './proto/rpc_pb.js';\nimport { type PerformRpcParams, RpcError, type RpcInvocationData } from './rpc.js';\nimport type { LocalTrack } from './track.js';\nimport type { RemoteTrackPublication, TrackPublication } from './track_publication.js';\nimport { LocalTrackPublication } from './track_publication.js';\nimport type { Transcription } from './transcription.js';\nimport type { ChatMessage } from './types.js';\n\nexport abstract class Participant {\n /** @internal */\n info: ParticipantInfo;\n\n /** @internal */\n ffi_handle: FfiHandle;\n\n trackPublications = new Map<string, TrackPublication>();\n\n constructor(owned_info: OwnedParticipant) {\n this.info = owned_info.info!;\n this.ffi_handle = new FfiHandle(owned_info.handle!.id);\n }\n\n get sid(): string {\n return this.info.sid;\n }\n\n get name(): string {\n return this.info.name;\n }\n\n get identity(): string {\n return this.info.identity;\n }\n\n get metadata(): string {\n return this.info.metadata;\n }\n\n get attributes(): Record<string, string> {\n return this.info.attributes;\n }\n\n get kind(): ParticipantKind {\n return this.info.kind;\n }\n}\n\nexport type DataPublishOptions = {\n /**\n * whether to send this as reliable or lossy.\n * For data that you need delivery guarantee (such as chat messages), use Reliable.\n * For data that should arrive as quickly as possible, but you are ok with dropped\n * packets, use Lossy.\n */\n reliable?: boolean;\n /**\n * the identities of participants who will receive the message, will be sent to every one if empty\n */\n destination_identities?: string[];\n /** the topic under which the message gets published */\n topic?: string;\n};\n\nexport class LocalParticipant extends Participant {\n private rpcHandlers: Map<string, (data: RpcInvocationData) => Promise<string>> = new Map();\n\n trackPublications: Map<string, LocalTrackPublication> = new Map();\n\n async publishData(data: Uint8Array, options: DataPublishOptions) {\n const req = create(PublishDataRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n dataPtr: FfiClient.instance.retrievePtr(data),\n dataLen: BigInt(data.byteLength),\n reliable: options.reliable,\n topic: options.topic,\n destinationIdentities: options.destination_identities,\n });\n\n const res = FfiClient.instance.request<PublishDataResponse>({\n message: { case: 'publishData', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishDataCallback>((ev) => {\n return ev.message.case == 'publishData' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n }\n\n async publishDtmf(code: number, digit: string) {\n const req = create(PublishSipDtmfRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n code,\n digit,\n });\n\n const res = FfiClient.instance.request<PublishSipDtmfResponse>({\n message: { case: 'publishSipDtmf', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishSipDtmfCallback>((ev) => {\n return ev.message.case == 'publishSipDtmf' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n }\n\n async publishTranscription(transcription: Transcription) {\n const req = create(PublishTranscriptionRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n participantIdentity: transcription.participantIdentity,\n segments: transcription.segments.map((s) =>\n create(TranscriptionSegmentSchema, {\n id: s.id,\n text: s.text,\n startTime: s.startTime,\n endTime: s.endTime,\n final: s.final,\n language: s.language,\n }),\n ),\n trackId: transcription.trackSid,\n });\n\n const res = FfiClient.instance.request<PublishTranscriptionResponse>({\n message: { case: 'publishTranscription', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishTranscriptionCallback>((ev) => {\n return ev.message.case == 'publishTranscription' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n }\n\n async updateMetadata(metadata: string) {\n const req = create(SetLocalMetadataRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n metadata: metadata,\n });\n\n const res = FfiClient.instance.request<SetLocalMetadataResponse>({\n message: { case: 'setLocalMetadata', value: req },\n });\n\n await FfiClient.instance.waitFor<SetLocalMetadataCallback>((ev) => {\n return ev.message.case == 'setLocalMetadata' && ev.message.value.asyncId == res.asyncId;\n });\n }\n\n /**\n * Sends a chat message to participants in the room\n *\n * @param text - The text content of the chat message.\n * @param destinationIdentities - An optional array of recipient identities to whom the message will be sent. If omitted, the message is broadcast to all participants.\n * @param senderIdentity - An optional identity of the sender. If omitted, the default sender identity is used.\n *\n */\n async sendChatMessage(\n text: string,\n destinationIdentities?: Array<string>,\n senderIdentity?: string,\n ): Promise<ChatMessage> {\n const req = create(SendChatMessageRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n message: text,\n destinationIdentities,\n senderIdentity,\n });\n\n const res = FfiClient.instance.request<SendChatMessageResponse>({\n message: { case: 'sendChatMessage', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<SendChatMessageCallback>((ev) => {\n return ev.message.case == 'chatMessage' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.message.case !== 'chatMessage') {\n throw new Error(cb.message.value ?? 'Unknown Error');\n }\n const { id, timestamp, editTimestamp, message } = cb.message.value;\n return { id, timestamp: Number(timestamp), editTimestamp: Number(editTimestamp), message };\n }\n\n /**\n * @experimental\n */\n async editChatMessage(\n editText: string,\n originalMessage: ChatMessage,\n destinationIdentities?: Array<string>,\n senderIdentity?: string,\n ): Promise<ChatMessage> {\n const req = create(EditChatMessageRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n editText,\n originalMessage: create(ChatMessageSchema, {\n ...originalMessage,\n timestamp: BigInt(originalMessage.timestamp),\n editTimestamp: originalMessage.editTimestamp\n ? BigInt(originalMessage.editTimestamp)\n : undefined,\n }),\n destinationIdentities,\n senderIdentity,\n });\n\n const res = FfiClient.instance.request<SendChatMessageResponse>({\n message: { case: 'editChatMessage', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<SendChatMessageCallback>((ev) => {\n return ev.message.case == 'chatMessage' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.message.case !== 'chatMessage') {\n throw new Error(cb.message.value ?? 'Unknown Error');\n }\n const { id, timestamp, editTimestamp, message } = cb.message.value;\n return { id, timestamp: Number(timestamp), editTimestamp: Number(editTimestamp), message };\n }\n\n async updateName(name: string) {\n const req = create(SetLocalNameRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n name: name,\n });\n\n const res = FfiClient.instance.request<SetLocalNameResponse>({\n message: { case: 'setLocalName', value: req },\n });\n\n await FfiClient.instance.waitFor<SetLocalNameCallback>((ev) => {\n return ev.message.case == 'setLocalName' && ev.message.value.asyncId == res.asyncId;\n });\n }\n\n async setAttributes(attributes: Record<string, string>) {\n const req = create(SetLocalAttributesRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n attributes: Array.from(Object.entries(attributes)).map(([key, value]) => {\n return { key, value };\n }),\n });\n\n const res = FfiClient.instance.request<SetLocalAttributesResponse>({\n message: { case: 'setLocalAttributes', value: req },\n });\n\n await FfiClient.instance.waitFor<SetLocalAttributesCallback>((ev) => {\n return ev.message.case == 'setLocalAttributes' && ev.message.value.asyncId == res.asyncId;\n });\n }\n\n async publishTrack(\n track: LocalTrack,\n options: TrackPublishOptions,\n ): Promise<LocalTrackPublication> {\n const req = create(PublishTrackRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n trackHandle: track.ffi_handle.handle,\n options: options,\n });\n\n const res = FfiClient.instance.request<PublishTrackResponse>({\n message: { case: 'publishTrack', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishTrackCallback>((ev) => {\n return ev.message.case == 'publishTrack' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.message.case !== 'publication') {\n throw new Error(cb.message.value ?? 'Unknown Error');\n }\n\n const track_publication = new LocalTrackPublication(cb.message.value!);\n track_publication.track = track;\n this.trackPublications.set(track_publication.sid, track_publication);\n\n return track_publication;\n }\n\n async unpublishTrack(trackSid: string) {\n const req = create(UnpublishTrackRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n trackSid: trackSid,\n });\n\n const res = FfiClient.instance.request<UnpublishTrackResponse>({\n message: { case: 'unpublishTrack', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<UnpublishTrackCallback>((ev) => {\n return ev.message.case == 'unpublishTrack' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n\n const pub = this.trackPublications.get(trackSid);\n if (pub) {\n pub.track = undefined;\n }\n this.trackPublications.delete(trackSid);\n }\n\n /**\n * Initiate an RPC call to a remote participant.\n * @param params - Parameters for initiating the RPC call, see {@link PerformRpcParams}\n * @returns A promise that resolves with the response payload or rejects with an error.\n * @throws Error on failure. Details in `message`.\n */\n async performRpc({\n destinationIdentity,\n method,\n payload,\n responseTimeout,\n }: PerformRpcParams): Promise<string> {\n const req = create(PerformRpcRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n destinationIdentity,\n method,\n payload,\n responseTimeoutMs: responseTimeout,\n });\n\n const res = FfiClient.instance.request<PerformRpcResponse>({\n message: { case: 'performRpc', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PerformRpcCallback>((ev) => {\n return ev.message.case === 'performRpc' && ev.message.value.asyncId === res.asyncId;\n });\n\n if (cb.error) {\n throw RpcError.fromProto(cb.error);\n }\n\n return cb.payload;\n }\n\n /**\n * Establishes the participant as a receiver for calls of the specified RPC method.\n * Will overwrite any existing callback for the same method.\n *\n * @param method - The name of the indicated RPC method\n * @param handler - Will be invoked when an RPC request for this method is received\n * @returns A promise that resolves when the method is successfully registered\n *\n * @example\n * ```typescript\n * room.localParticipant?.registerRpcMethod(\n * 'greet',\n * async (data: RpcInvocationData) => {\n * console.log(`Received greeting from ${data.callerIdentity}: ${data.payload}`);\n * return `Hello, ${data.callerIdentity}!`;\n * }\n * );\n * ```\n *\n * See {@link RpcInvocationData} for more details on invocation params.\n *\n * The handler should return a Promise that resolves to a string.\n * If unable to respond within `responseTimeout`, the request will result in an error on the caller's side.\n *\n * You may throw errors of type `RpcError` with a string `message` in the handler,\n * and they will be received on the caller's side with the message intact.\n * Other errors thrown in your handler will not be transmitted as-is, and will instead arrive to the caller as `1500` (\"Application Error\").\n */\n registerRpcMethod(method: string, handler: (data: RpcInvocationData) => Promise<string>) {\n this.rpcHandlers.set(method, handler);\n\n const req = create(RegisterRpcMethodRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n method,\n });\n\n FfiClient.instance.request<RegisterRpcMethodResponse>({\n message: { case: 'registerRpcMethod', value: req },\n });\n }\n\n /**\n * Unregisters a previously registered RPC method.\n *\n * @param method - The name of the RPC method to unregister\n */\n unregisterRpcMethod(method: string) {\n this.rpcHandlers.delete(method);\n\n const req = create(UnregisterRpcMethodRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n method,\n });\n\n FfiClient.instance.request<UnregisterRpcMethodResponse>({\n message: { case: 'unregisterRpcMethod', value: req },\n });\n }\n\n /** @internal */\n async handleRpcMethodInvocation(\n invocationId: bigint,\n method: string,\n requestId: string,\n callerIdentity: string,\n payload: string,\n responseTimeout: number,\n ) {\n let responseError: RpcError | null = null;\n let responsePayload: string | null = null;\n\n const handler = this.rpcHandlers.get(method);\n\n if (!handler) {\n responseError = RpcError.builtIn('UNSUPPORTED_METHOD');\n } else {\n try {\n responsePayload = await handler({ requestId, callerIdentity, payload, responseTimeout });\n } catch (error) {\n if (error instanceof RpcError) {\n responseError = error;\n } else {\n console.warn(\n `Uncaught error returned by RPC handler for ${method}. Returning APPLICATION_ERROR instead.`,\n error,\n );\n responseError = RpcError.builtIn('APPLICATION_ERROR');\n }\n }\n }\n\n const req = create(RpcMethodInvocationResponseRequestSchema, {\n localParticipantHandle: this.ffi_handle.handle,\n invocationId,\n error: responseError ? responseError.toProto() : undefined,\n payload: responsePayload ?? undefined,\n });\n\n const res = FfiClient.instance.request<RpcMethodInvocationResponseResponse>({\n message: { case: 'rpcMethodInvocationResponse', value: req },\n });\n\n if (res.error) {\n console.warn(`error sending rpc method invocation response: ${res.error}`);\n }\n }\n}\n\nexport class RemoteParticipant extends Participant {\n trackPublications: Map<string, RemoteTrackPublication> = new Map();\n\n constructor(owned_info: OwnedParticipant) {\n super(owned_info);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/participant.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { FfiClient, FfiHandle } from './ffi_client.js';\nimport {\n DisconnectReason,\n type OwnedParticipant,\n type ParticipantInfo,\n type ParticipantKind,\n} from './proto/participant_pb.js';\nimport type {\n PublishDataCallback,\n PublishDataResponse,\n PublishSipDtmfCallback,\n PublishSipDtmfResponse,\n PublishTrackCallback,\n PublishTrackResponse,\n PublishTranscriptionCallback,\n PublishTranscriptionResponse,\n SendChatMessageCallback,\n SendChatMessageResponse,\n SetLocalAttributesCallback,\n SetLocalAttributesResponse,\n SetLocalMetadataCallback,\n SetLocalMetadataResponse,\n SetLocalNameCallback,\n SetLocalNameResponse,\n TrackPublishOptions,\n UnpublishTrackCallback,\n UnpublishTrackResponse,\n} from './proto/room_pb.js';\nimport { ChatMessage as ChatMessageModel } from './proto/room_pb.js';\nimport {\n EditChatMessageRequest,\n TranscriptionSegment as ProtoTranscriptionSegment,\n PublishDataRequest,\n PublishSipDtmfRequest,\n PublishTrackRequest,\n PublishTranscriptionRequest,\n SendChatMessageRequest,\n SetLocalAttributesRequest,\n SetLocalMetadataRequest,\n SetLocalNameRequest,\n UnpublishTrackRequest,\n} from './proto/room_pb.js';\nimport type {\n PerformRpcCallback,\n PerformRpcResponse,\n RegisterRpcMethodResponse,\n RpcMethodInvocationResponseResponse,\n UnregisterRpcMethodResponse,\n} from './proto/rpc_pb.js';\nimport {\n PerformRpcRequest,\n RegisterRpcMethodRequest,\n RpcMethodInvocationResponseRequest,\n UnregisterRpcMethodRequest,\n} from './proto/rpc_pb.js';\nimport { type PerformRpcParams, RpcError, type RpcInvocationData } from './rpc.js';\nimport type { LocalTrack } from './track.js';\nimport type { RemoteTrackPublication, TrackPublication } from './track_publication.js';\nimport { LocalTrackPublication } from './track_publication.js';\nimport type { Transcription } from './transcription.js';\nimport type { ChatMessage } from './types.js';\n\nexport abstract class Participant {\n /** @internal */\n info: ParticipantInfo;\n\n /** @internal */\n ffi_handle: FfiHandle;\n\n trackPublications = new Map<string, TrackPublication>();\n\n constructor(owned_info: OwnedParticipant) {\n this.info = owned_info!.info!;\n this.ffi_handle = new FfiHandle(owned_info.handle!.id!);\n }\n\n get sid(): string | undefined {\n return this.info.sid;\n }\n\n get name(): string | undefined {\n return this.info.name;\n }\n\n get identity(): string | undefined {\n return this.info.identity;\n }\n\n get metadata(): string | undefined {\n return this.info.metadata;\n }\n\n get attributes(): Record<string, string> | undefined {\n return this.info.attributes;\n }\n\n get kind(): ParticipantKind | undefined {\n return this.info.kind;\n }\n\n get disconnectReason(): DisconnectReason | undefined {\n if (this.info.disconnectReason === DisconnectReason.UNKNOWN_REASON) {\n return undefined;\n }\n return this.info.disconnectReason;\n }\n}\n\nexport type DataPublishOptions = {\n /**\n * whether to send this as reliable or lossy.\n * For data that you need delivery guarantee (such as chat messages), use Reliable.\n * For data that should arrive as quickly as possible, but you are ok with dropped\n * packets, use Lossy.\n */\n reliable?: boolean;\n /**\n * the identities of participants who will receive the message, will be sent to every one if empty\n */\n destination_identities?: string[];\n /** the topic under which the message gets published */\n topic?: string;\n};\n\nexport class LocalParticipant extends Participant {\n private rpcHandlers: Map<string, (data: RpcInvocationData) => Promise<string>> = new Map();\n\n trackPublications: Map<string, LocalTrackPublication> = new Map();\n\n async publishData(data: Uint8Array, options: DataPublishOptions) {\n const req = new PublishDataRequest({\n localParticipantHandle: this.ffi_handle.handle,\n dataPtr: FfiClient.instance.retrievePtr(data),\n dataLen: BigInt(data.byteLength),\n reliable: options.reliable,\n topic: options.topic,\n destinationIdentities: options.destination_identities,\n });\n\n const res = FfiClient.instance.request<PublishDataResponse>({\n message: { case: 'publishData', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishDataCallback>((ev) => {\n return ev.message.case == 'publishData' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n }\n\n async publishDtmf(code: number, digit: string) {\n const req = new PublishSipDtmfRequest({\n localParticipantHandle: this.ffi_handle.handle,\n code,\n digit,\n });\n\n const res = FfiClient.instance.request<PublishSipDtmfResponse>({\n message: { case: 'publishSipDtmf', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishSipDtmfCallback>((ev) => {\n return ev.message.case == 'publishSipDtmf' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n }\n\n async publishTranscription(transcription: Transcription) {\n const req = new PublishTranscriptionRequest({\n localParticipantHandle: this.ffi_handle.handle,\n participantIdentity: transcription.participantIdentity,\n segments: transcription.segments.map(\n (s) =>\n new ProtoTranscriptionSegment({\n id: s.id,\n text: s.text,\n startTime: s.startTime,\n endTime: s.endTime,\n final: s.final,\n language: s.language,\n }),\n ),\n trackId: transcription.trackSid,\n });\n\n const res = FfiClient.instance.request<PublishTranscriptionResponse>({\n message: { case: 'publishTranscription', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishTranscriptionCallback>((ev) => {\n return ev.message.case == 'publishTranscription' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n }\n\n async updateMetadata(metadata: string) {\n const req = new SetLocalMetadataRequest({\n localParticipantHandle: this.ffi_handle.handle,\n metadata: metadata,\n });\n\n const res = FfiClient.instance.request<SetLocalMetadataResponse>({\n message: { case: 'setLocalMetadata', value: req },\n });\n\n await FfiClient.instance.waitFor<SetLocalMetadataCallback>((ev) => {\n return ev.message.case == 'setLocalMetadata' && ev.message.value.asyncId == res.asyncId;\n });\n }\n\n /**\n * Sends a chat message to participants in the room\n *\n * @param text - The text content of the chat message.\n * @param destinationIdentities - An optional array of recipient identities to whom the message will be sent. If omitted, the message is broadcast to all participants.\n * @param senderIdentity - An optional identity of the sender. If omitted, the default sender identity is used.\n *\n */\n async sendChatMessage(\n text: string,\n destinationIdentities?: Array<string>,\n senderIdentity?: string,\n ): Promise<ChatMessage> {\n const req = new SendChatMessageRequest({\n localParticipantHandle: this.ffi_handle.handle,\n message: text,\n destinationIdentities,\n senderIdentity,\n });\n\n const res = FfiClient.instance.request<SendChatMessageResponse>({\n message: { case: 'sendChatMessage', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<SendChatMessageCallback>((ev) => {\n return ev.message.case == 'chatMessage' && ev.message.value.asyncId == res.asyncId;\n });\n\n switch (cb.message.case) {\n case 'chatMessage':\n const { id, timestamp, editTimestamp, message } = cb.message.value!;\n return {\n id: id!,\n timestamp: Number(timestamp),\n editTimestamp: Number(editTimestamp),\n message: message!,\n };\n case 'error':\n default:\n throw new Error(cb.message.value);\n }\n }\n\n /**\n * @experimental\n */\n async editChatMessage(\n editText: string,\n originalMessage: ChatMessage,\n destinationIdentities?: Array<string>,\n senderIdentity?: string,\n ): Promise<ChatMessage> {\n const req = new EditChatMessageRequest({\n localParticipantHandle: this.ffi_handle.handle,\n editText,\n originalMessage: new ChatMessageModel({\n ...originalMessage,\n timestamp: BigInt(originalMessage.timestamp),\n editTimestamp: originalMessage.editTimestamp\n ? BigInt(originalMessage.editTimestamp)\n : undefined,\n }),\n destinationIdentities,\n senderIdentity,\n });\n\n const res = FfiClient.instance.request<SendChatMessageResponse>({\n message: { case: 'editChatMessage', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<SendChatMessageCallback>((ev) => {\n return ev.message.case == 'chatMessage' && ev.message.value.asyncId == res.asyncId;\n });\n\n switch (cb.message.case) {\n case 'chatMessage':\n const { id, timestamp, editTimestamp, message } = cb.message.value!;\n return {\n id: id!,\n timestamp: Number(timestamp),\n editTimestamp: Number(editTimestamp),\n message: message!,\n };\n case 'error':\n default:\n throw new Error(cb.message.value);\n }\n }\n\n async updateName(name: string) {\n const req = new SetLocalNameRequest({\n localParticipantHandle: this.ffi_handle.handle,\n name: name,\n });\n\n const res = FfiClient.instance.request<SetLocalNameResponse>({\n message: { case: 'setLocalName', value: req },\n });\n\n await FfiClient.instance.waitFor<SetLocalNameCallback>((ev) => {\n return ev.message.case == 'setLocalName' && ev.message.value.asyncId == res.asyncId;\n });\n }\n\n async setAttributes(attributes: Record<string, string>) {\n const req = new SetLocalAttributesRequest({\n localParticipantHandle: this.ffi_handle.handle,\n attributes: Object.entries(attributes).map(([key, value]) => ({ key, value })),\n });\n\n const res = FfiClient.instance.request<SetLocalAttributesResponse>({\n message: { case: 'setLocalAttributes', value: req },\n });\n\n await FfiClient.instance.waitFor<SetLocalAttributesCallback>((ev) => {\n return ev.message.case == 'setLocalAttributes' && ev.message.value.asyncId == res.asyncId;\n });\n }\n\n async publishTrack(\n track: LocalTrack,\n options: TrackPublishOptions,\n ): Promise<LocalTrackPublication> {\n const req = new PublishTrackRequest({\n localParticipantHandle: this.ffi_handle.handle,\n trackHandle: track.ffi_handle.handle,\n options: options,\n });\n\n const res = FfiClient.instance.request<PublishTrackResponse>({\n message: { case: 'publishTrack', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PublishTrackCallback>((ev) => {\n return ev.message.case == 'publishTrack' && ev.message.value.asyncId == res.asyncId;\n });\n\n switch (cb.message.case) {\n case 'publication':\n const track_publication = new LocalTrackPublication(cb.message.value!);\n track_publication.track = track;\n this.trackPublications.set(track_publication.sid!, track_publication);\n\n return track_publication;\n case 'error':\n default:\n throw new Error(cb.message.value);\n }\n }\n\n async unpublishTrack(trackSid: string) {\n const req = new UnpublishTrackRequest({\n localParticipantHandle: this.ffi_handle.handle,\n trackSid: trackSid,\n });\n\n const res = FfiClient.instance.request<UnpublishTrackResponse>({\n message: { case: 'unpublishTrack', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<UnpublishTrackCallback>((ev) => {\n return ev.message.case == 'unpublishTrack' && ev.message.value.asyncId == res.asyncId;\n });\n\n if (cb.error) {\n throw new Error(cb.error);\n }\n\n const pub = this.trackPublications.get(trackSid);\n if (pub) {\n pub.track = undefined;\n }\n this.trackPublications.delete(trackSid);\n }\n\n /**\n * Initiate an RPC call to a remote participant.\n * @param params - Parameters for initiating the RPC call, see {@link PerformRpcParams}\n * @returns A promise that resolves with the response payload or rejects with an error.\n * @throws Error on failure. Details in `message`.\n */\n async performRpc({\n destinationIdentity,\n method,\n payload,\n responseTimeout,\n }: PerformRpcParams): Promise<string> {\n const req = new PerformRpcRequest({\n localParticipantHandle: this.ffi_handle.handle,\n destinationIdentity,\n method,\n payload,\n responseTimeoutMs: responseTimeout,\n });\n\n const res = FfiClient.instance.request<PerformRpcResponse>({\n message: { case: 'performRpc', value: req },\n });\n\n const cb = await FfiClient.instance.waitFor<PerformRpcCallback>((ev) => {\n return ev.message.case === 'performRpc' && ev.message.value.asyncId === res.asyncId;\n });\n\n if (cb.error) {\n throw RpcError.fromProto(cb.error);\n }\n\n return cb.payload!;\n }\n\n /**\n * Establishes the participant as a receiver for calls of the specified RPC method.\n * Will overwrite any existing callback for the same method.\n *\n * @param method - The name of the indicated RPC method\n * @param handler - Will be invoked when an RPC request for this method is received\n * @returns A promise that resolves when the method is successfully registered\n *\n * @example\n * ```typescript\n * room.localParticipant?.registerRpcMethod(\n * 'greet',\n * async (data: RpcInvocationData) => {\n * console.log(`Received greeting from ${data.callerIdentity}: ${data.payload}`);\n * return `Hello, ${data.callerIdentity}!`;\n * }\n * );\n * ```\n *\n * See {@link RpcInvocationData} for more details on invocation params.\n *\n * The handler should return a Promise that resolves to a string.\n * If unable to respond within `responseTimeout`, the request will result in an error on the caller's side.\n *\n * You may throw errors of type `RpcError` with a string `message` in the handler,\n * and they will be received on the caller's side with the message intact.\n * Other errors thrown in your handler will not be transmitted as-is, and will instead arrive to the caller as `1500` (\"Application Error\").\n */\n registerRpcMethod(method: string, handler: (data: RpcInvocationData) => Promise<string>) {\n this.rpcHandlers.set(method, handler);\n\n const req = new RegisterRpcMethodRequest({\n localParticipantHandle: this.ffi_handle.handle,\n method,\n });\n\n FfiClient.instance.request<RegisterRpcMethodResponse>({\n message: { case: 'registerRpcMethod', value: req },\n });\n }\n\n /**\n * Unregisters a previously registered RPC method.\n *\n * @param method - The name of the RPC method to unregister\n */\n unregisterRpcMethod(method: string) {\n this.rpcHandlers.delete(method);\n\n const req = new UnregisterRpcMethodRequest({\n localParticipantHandle: this.ffi_handle.handle,\n method,\n });\n\n FfiClient.instance.request<UnregisterRpcMethodResponse>({\n message: { case: 'unregisterRpcMethod', value: req },\n });\n }\n\n /** @internal */\n async handleRpcMethodInvocation(\n invocationId: bigint,\n method: string,\n requestId: string,\n callerIdentity: string,\n payload: string,\n responseTimeout: number,\n ) {\n let responseError: RpcError | null = null;\n let responsePayload: string | null = null;\n\n const handler = this.rpcHandlers.get(method);\n\n if (!handler) {\n responseError = RpcError.builtIn('UNSUPPORTED_METHOD');\n } else {\n try {\n responsePayload = await handler({ requestId, callerIdentity, payload, responseTimeout });\n } catch (error) {\n if (error instanceof RpcError) {\n responseError = error;\n } else {\n console.warn(\n `Uncaught error returned by RPC handler for ${method}. Returning APPLICATION_ERROR instead.`,\n error,\n );\n responseError = RpcError.builtIn('APPLICATION_ERROR');\n }\n }\n }\n\n const req = new RpcMethodInvocationResponseRequest({\n localParticipantHandle: this.ffi_handle.handle,\n invocationId,\n error: responseError ? responseError.toProto() : undefined,\n payload: responsePayload ?? undefined,\n });\n\n const res = FfiClient.instance.request<RpcMethodInvocationResponseResponse>({\n message: { case: 'rpcMethodInvocationResponse', value: req },\n });\n\n if (res.error) {\n console.warn(`error sending rpc method invocation response: ${res.error}`);\n }\n }\n}\n\nexport class RemoteParticipant extends Participant {\n trackPublications: Map<string, RemoteTrackPublication> = new Map();\n\n constructor(owned_info: OwnedParticipant) {\n super(owned_info);\n }\n}\n"],"mappings":"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","names":[]}
|