@livekit/rtc-node 0.12.2 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/audio_frame.cjs +2 -2
  2. package/dist/audio_frame.cjs.map +1 -1
  3. package/dist/audio_frame.d.cts +2 -3
  4. package/dist/audio_frame.d.ts +2 -3
  5. package/dist/audio_frame.d.ts.map +1 -1
  6. package/dist/audio_frame.js +3 -3
  7. package/dist/audio_frame.js.map +1 -1
  8. package/dist/audio_resampler.cjs +10 -7
  9. package/dist/audio_resampler.cjs.map +1 -1
  10. package/dist/audio_resampler.d.cts +2 -3
  11. package/dist/audio_resampler.d.ts +2 -3
  12. package/dist/audio_resampler.d.ts.map +1 -1
  13. package/dist/audio_resampler.js +13 -10
  14. package/dist/audio_resampler.js.map +1 -1
  15. package/dist/audio_source.cjs +6 -4
  16. package/dist/audio_source.cjs.map +1 -1
  17. package/dist/audio_source.d.cts +3 -3
  18. package/dist/audio_source.d.ts +3 -3
  19. package/dist/audio_source.d.ts.map +1 -1
  20. package/dist/audio_source.js +9 -7
  21. package/dist/audio_source.js.map +1 -1
  22. package/dist/audio_stream.cjs +1 -2
  23. package/dist/audio_stream.cjs.map +1 -1
  24. package/dist/audio_stream.d.cts +2 -3
  25. package/dist/audio_stream.d.ts +2 -3
  26. package/dist/audio_stream.d.ts.map +1 -1
  27. package/dist/audio_stream.js +2 -3
  28. package/dist/audio_stream.js.map +1 -1
  29. package/dist/e2ee.cjs +19 -20
  30. package/dist/e2ee.cjs.map +1 -1
  31. package/dist/e2ee.d.cts +5 -6
  32. package/dist/e2ee.d.ts +5 -6
  33. package/dist/e2ee.d.ts.map +1 -1
  34. package/dist/e2ee.js +29 -30
  35. package/dist/e2ee.js.map +1 -1
  36. package/dist/ffi_client.cjs +6 -5
  37. package/dist/ffi_client.cjs.map +1 -1
  38. package/dist/ffi_client.d.cts +10 -10
  39. package/dist/ffi_client.d.ts +10 -10
  40. package/dist/ffi_client.d.ts.map +1 -1
  41. package/dist/ffi_client.js +6 -10
  42. package/dist/ffi_client.js.map +1 -1
  43. package/dist/index.cjs +16 -49
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.cts +6 -35
  46. package/dist/index.d.ts +6 -35
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +7 -46
  49. package/dist/index.js.map +1 -1
  50. package/dist/napi/native.d.cjs.map +1 -1
  51. package/dist/napi/native.d.ts +5 -5
  52. package/dist/native.d.ts +5 -5
  53. package/dist/participant.cjs +60 -36
  54. package/dist/participant.cjs.map +1 -1
  55. package/dist/participant.d.cts +11 -11
  56. package/dist/participant.d.ts +11 -11
  57. package/dist/participant.d.ts.map +1 -1
  58. package/dist/participant.js +78 -52
  59. package/dist/participant.js.map +1 -1
  60. package/dist/proto/audio_frame_pb.cjs +977 -125
  61. package/dist/proto/audio_frame_pb.cjs.map +1 -1
  62. package/dist/proto/audio_frame_pb.d.cts +502 -417
  63. package/dist/proto/audio_frame_pb.d.ts +502 -417
  64. package/dist/proto/audio_frame_pb.d.ts.map +1 -1
  65. package/dist/proto/audio_frame_pb.js +943 -85
  66. package/dist/proto/audio_frame_pb.js.map +1 -1
  67. package/dist/proto/e2ee_pb.cjs +700 -85
  68. package/dist/proto/e2ee_pb.cjs.map +1 -1
  69. package/dist/proto/e2ee_pb.d.cts +331 -263
  70. package/dist/proto/e2ee_pb.d.ts +331 -263
  71. package/dist/proto/e2ee_pb.d.ts.map +1 -1
  72. package/dist/proto/e2ee_pb.js +675 -57
  73. package/dist/proto/e2ee_pb.js.map +1 -1
  74. package/dist/proto/ffi_pb.cjs +369 -36
  75. package/dist/proto/ffi_pb.cjs.map +1 -1
  76. package/dist/proto/ffi_pb.d.cts +156 -109
  77. package/dist/proto/ffi_pb.d.ts +156 -109
  78. package/dist/proto/ffi_pb.d.ts.map +1 -1
  79. package/dist/proto/ffi_pb.js +364 -29
  80. package/dist/proto/ffi_pb.js.map +1 -1
  81. package/dist/proto/handle_pb.cjs +27 -7
  82. package/dist/proto/handle_pb.cjs.map +1 -1
  83. package/dist/proto/handle_pb.d.cts +13 -15
  84. package/dist/proto/handle_pb.d.ts +13 -15
  85. package/dist/proto/handle_pb.d.ts.map +1 -1
  86. package/dist/proto/handle_pb.js +26 -5
  87. package/dist/proto/handle_pb.js.map +1 -1
  88. package/dist/proto/participant_pb.cjs +112 -15
  89. package/dist/proto/participant_pb.cjs.map +1 -1
  90. package/dist/proto/participant_pb.d.cts +140 -52
  91. package/dist/proto/participant_pb.d.ts +140 -52
  92. package/dist/proto/participant_pb.d.ts.map +1 -1
  93. package/dist/proto/participant_pb.js +109 -11
  94. package/dist/proto/participant_pb.js.map +1 -1
  95. package/dist/proto/room_pb.cjs +2693 -302
  96. package/dist/proto/room_pb.cjs.map +1 -1
  97. package/dist/proto/room_pb.d.cts +1265 -862
  98. package/dist/proto/room_pb.d.ts +1265 -862
  99. package/dist/proto/room_pb.d.ts.map +1 -1
  100. package/dist/proto/room_pb.js +2603 -210
  101. package/dist/proto/room_pb.js.map +1 -1
  102. package/dist/proto/rpc_pb.cjs +302 -37
  103. package/dist/proto/rpc_pb.cjs.map +1 -1
  104. package/dist/proto/rpc_pb.d.cts +138 -108
  105. package/dist/proto/rpc_pb.d.ts +138 -108
  106. package/dist/proto/rpc_pb.d.ts.map +1 -1
  107. package/dist/proto/rpc_pb.js +291 -25
  108. package/dist/proto/rpc_pb.js.map +1 -1
  109. package/dist/proto/stats_pb.cjs +1253 -139
  110. package/dist/proto/stats_pb.cjs.map +1 -1
  111. package/dist/proto/stats_pb.d.cts +803 -692
  112. package/dist/proto/stats_pb.d.ts +803 -692
  113. package/dist/proto/stats_pb.d.ts.map +1 -1
  114. package/dist/proto/stats_pb.js +1216 -93
  115. package/dist/proto/stats_pb.js.map +1 -1
  116. package/dist/proto/track_pb.cjs +462 -64
  117. package/dist/proto/track_pb.cjs.map +1 -1
  118. package/dist/proto/track_pb.d.cts +250 -218
  119. package/dist/proto/track_pb.d.ts +250 -218
  120. package/dist/proto/track_pb.d.ts.map +1 -1
  121. package/dist/proto/track_pb.js +447 -45
  122. package/dist/proto/track_pb.js.map +1 -1
  123. package/dist/proto/track_publication_pb.cjs +130 -0
  124. package/dist/proto/track_publication_pb.cjs.map +1 -0
  125. package/dist/proto/track_publication_pb.d.cts +80 -0
  126. package/dist/proto/track_publication_pb.d.ts +80 -0
  127. package/dist/proto/track_publication_pb.d.ts.map +1 -0
  128. package/dist/proto/track_publication_pb.js +103 -0
  129. package/dist/proto/track_publication_pb.js.map +1 -0
  130. package/dist/proto/video_frame_pb.cjs +648 -88
  131. package/dist/proto/video_frame_pb.cjs.map +1 -1
  132. package/dist/proto/video_frame_pb.d.cts +371 -328
  133. package/dist/proto/video_frame_pb.d.ts +371 -328
  134. package/dist/proto/video_frame_pb.d.ts.map +1 -1
  135. package/dist/proto/video_frame_pb.js +626 -60
  136. package/dist/proto/video_frame_pb.js.map +1 -1
  137. package/dist/room.cjs +85 -125
  138. package/dist/room.cjs.map +1 -1
  139. package/dist/room.d.cts +6 -17
  140. package/dist/room.d.ts +6 -17
  141. package/dist/room.d.ts.map +1 -1
  142. package/dist/room.js +85 -123
  143. package/dist/room.js.map +1 -1
  144. package/dist/rpc.cjs.map +1 -1
  145. package/dist/rpc.d.cts +0 -1
  146. package/dist/rpc.d.ts +0 -1
  147. package/dist/rpc.js.map +1 -1
  148. package/dist/track.cjs +12 -8
  149. package/dist/track.cjs.map +1 -1
  150. package/dist/track.d.cts +8 -9
  151. package/dist/track.d.ts +8 -9
  152. package/dist/track.d.ts.map +1 -1
  153. package/dist/track.js +13 -9
  154. package/dist/track.js.map +1 -1
  155. package/dist/track_publication.cjs +21 -12
  156. package/dist/track_publication.cjs.map +1 -1
  157. package/dist/track_publication.d.cts +12 -13
  158. package/dist/track_publication.d.ts +12 -13
  159. package/dist/track_publication.d.ts.map +1 -1
  160. package/dist/track_publication.js +22 -13
  161. package/dist/track_publication.js.map +1 -1
  162. package/dist/version.cjs +1 -1
  163. package/dist/version.cjs.map +1 -1
  164. package/dist/version.d.cts +1 -1
  165. package/dist/version.d.ts +1 -1
  166. package/dist/version.js +1 -1
  167. package/dist/version.js.map +1 -1
  168. package/dist/video_frame.cjs +26 -45
  169. package/dist/video_frame.cjs.map +1 -1
  170. package/dist/video_frame.d.cts +2 -3
  171. package/dist/video_frame.d.ts +2 -3
  172. package/dist/video_frame.d.ts.map +1 -1
  173. package/dist/video_frame.js +29 -48
  174. package/dist/video_frame.js.map +1 -1
  175. package/dist/video_source.cjs +7 -4
  176. package/dist/video_source.cjs.map +1 -1
  177. package/dist/video_source.d.cts +4 -4
  178. package/dist/video_source.d.ts +4 -4
  179. package/dist/video_source.d.ts.map +1 -1
  180. package/dist/video_source.js +9 -6
  181. package/dist/video_source.js.map +1 -1
  182. package/dist/video_stream.cjs +16 -5
  183. package/dist/video_stream.cjs.map +1 -1
  184. package/dist/video_stream.d.cts +3 -4
  185. package/dist/video_stream.d.ts +3 -4
  186. package/dist/video_stream.d.ts.map +1 -1
  187. package/dist/video_stream.js +17 -6
  188. package/dist/video_stream.js.map +1 -1
  189. package/package.json +9 -9
  190. package/src/audio_frame.ts +10 -10
  191. package/src/audio_resampler.ts +15 -13
  192. package/src/audio_source.ts +11 -8
  193. package/src/audio_stream.ts +3 -4
  194. package/src/e2ee.ts +41 -42
  195. package/src/ffi_client.ts +8 -16
  196. package/src/index.ts +5 -68
  197. package/src/napi/native.d.ts +5 -5
  198. package/src/participant.ts +102 -73
  199. package/src/proto/audio_frame_pb.ts +1220 -496
  200. package/src/proto/e2ee_pb.ts +858 -337
  201. package/src/proto/ffi_pb.ts +442 -135
  202. package/src/proto/handle_pb.ts +33 -19
  203. package/src/proto/participant_pb.ts +225 -60
  204. package/src/proto/room_pb.ts +3149 -1013
  205. package/src/proto/rpc_pb.ts +358 -129
  206. package/src/proto/stats_pb.ts +1891 -877
  207. package/src/proto/track_pb.ts +587 -253
  208. package/src/proto/track_publication_pb.ts +180 -0
  209. package/src/proto/video_frame_pb.ts +861 -394
  210. package/src/room.ts +137 -189
  211. package/src/rpc.ts +1 -1
  212. package/src/track.ts +16 -17
  213. package/src/track_publication.ts +25 -26
  214. package/src/version.ts +1 -1
  215. package/src/video_frame.ts +48 -72
  216. package/src/video_source.ts +11 -8
  217. 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
- import { E2EEManager } from "./e2ee.js";
2
+ import { E2EEManager, defaultE2EEOptions } 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
- ConnectRequestSchema,
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
- if (!this.localParticipant || !this.ffiHandle || !this.info) {
36
- throw TypeError("cannot handle ffi events before connectCallback");
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
- if (participant) {
61
- this.remoteParticipants.delete(participant.identity);
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
- if (publication) {
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.requireRemoteParticipant(ev.value.participantIdentity);
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.requireRemoteParticipant(ev.value.participantIdentity);
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
- if (publication) {
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 trackInfo = ownedTrack.info;
98
- const { participant, publication } = this.requirePublicationOfRemoteParticipant(
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 (trackInfo.kind == TrackKind.KIND_VIDEO) {
76
+ if (ownedTrack.info.kind == TrackKind.KIND_VIDEO) {
104
77
  publication.track = new RemoteVideoTrack(ownedTrack);
105
- } else if (trackInfo.kind == TrackKind.KIND_AUDIO) {
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 { participant, publication } = this.requirePublicationOfRemoteParticipant(
111
- ev.value.participantIdentity,
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.requireRemoteParticipant(ev.value.participantIdentity);
120
- this.emit("trackSubscriptionFailed" /* TrackSubscriptionFailed */, ev.value.trackSid, participant, ev.value.error);
121
- } else if (ev.case == "trackMuted") {
122
- const { participant, publication } = this.requirePublicationOfParticipant(
123
- ev.value.participantIdentity,
124
- ev.value.trackSid
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 { participant, publication } = this.requirePublicationOfParticipant(
133
- ev.value.participantIdentity,
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.requireParticipantByIdentity(identity)
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.requireParticipantByIdentity(ev.value.participantIdentity);
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.requireParticipantByIdentity(ev.value.participantIdentity);
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.requireParticipantByIdentity(ev.value.participantIdentity);
132
+ const participant = this.retrieveParticipantByIdentity(ev.value.participantIdentity);
159
133
  participant.info.attributes = ev.value.attributes.reduce(
160
- (acc, value) => {
161
- acc[value.key] = value.value;
162
- return acc;
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
- const changedAttributes = ev.value.changedAttributes.reduce(
168
- (acc, value) => {
169
- acc[value.key] = value.value;
170
- return acc;
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.requireParticipantByIdentity(ev.value.participantIdentity);
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 data = dataPacket.value.data.data;
196
- const buffer = FfiClient.instance.copyBuffer(data.dataPtr, Number(data.dataLen));
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
- if (!this.isConnected) {
244
- return "";
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) {
264
224
  const options = { ...defaultRoomOptions, ...opts };
265
- const req = create(ConnectRequestSchema, {
225
+ options.e2ee = { ...defaultE2EEOptions, ...options.e2ee };
226
+ const req = new ConnectRequest({
266
227
  url,
267
228
  token,
268
229
  options
@@ -276,35 +237,37 @@ 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
- if (cb.message.case !== "result") {
280
- throw new ConnectError(cb.message.value ?? "Unknown error");
281
- }
282
- const { room, localParticipant, participants } = cb.message.value;
283
- this.ffiHandle = new FfiHandle(room.handle.id);
284
- if (options.e2ee) {
285
- this.e2eeManager = new E2EEManager(this.ffiHandle.handle, options.e2ee);
286
- }
287
- this.info = room.info;
288
- this.connectionState = ConnectionState.CONN_CONNECTED;
289
- this.localParticipant = new LocalParticipant(localParticipant);
290
- for (const pt of participants) {
291
- const rp = this.createRemoteParticipant(pt.participant);
292
- for (const pub of pt.publications) {
293
- const publication = new RemoteTrackPublication(pub);
294
- rp.trackPublications.set(publication.sid, publication);
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, options.e2ee);
244
+ this.info = cb.message.value.room.info;
245
+ this.connectionState = ConnectionState.CONN_CONNECTED;
246
+ this.localParticipant = new LocalParticipant(cb.message.value.localParticipant);
247
+ for (const pt of cb.message.value.participants) {
248
+ const rp = this.createRemoteParticipant(pt.participant);
249
+ for (const pub of pt.publications) {
250
+ const publication = new RemoteTrackPublication(pub);
251
+ rp.trackPublications.set(publication.sid, publication);
252
+ }
253
+ }
254
+ FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onFfiEvent);
255
+ break;
256
+ case "error":
257
+ default:
258
+ throw new ConnectError(cb.message.value || "");
296
259
  }
297
- FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onFfiEvent);
298
260
  }
299
261
  async disconnect() {
300
- if (!this.isConnected || !this.ffiHandle) {
262
+ var _a;
263
+ if (!this.isConnected) {
301
264
  return;
302
265
  }
303
266
  FfiClient.instance.request({
304
267
  message: {
305
268
  case: "disconnect",
306
269
  value: {
307
- roomHandle: this.ffiHandle.handle
270
+ roomHandle: (_a = this.ffiHandle) == null ? void 0 : _a.handle
308
271
  }
309
272
  }
310
273
  });
@@ -381,7 +344,6 @@ var RoomEvent = /* @__PURE__ */ ((RoomEvent2) => {
381
344
  RoomEvent2["TrackUnmuted"] = "trackUnmuted";
382
345
  RoomEvent2["ActiveSpeakersChanged"] = "activeSpeakersChanged";
383
346
  RoomEvent2["RoomMetadataChanged"] = "roomMetadataChanged";
384
- RoomEvent2["RoomSidChanged"] = "roomSidChanged";
385
347
  RoomEvent2["ParticipantMetadataChanged"] = "participantMetadataChanged";
386
348
  RoomEvent2["ParticipantNameChanged"] = "participantNameChanged";
387
349
  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, defaultE2EEOptions } 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 options.e2ee = { ...defaultE2EEOptions, ...options.e2ee };\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, options.e2ee);\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, 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,MAAM,MAAM,SAAS,MAAM,IAAI;AAAA,EAC3D;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":[]}
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 CHANGED
@@ -1,5 +1,4 @@
1
1
  import { RpcError as RpcError$1 } from './proto/rpc_pb.cjs';
2
- import '@bufbuild/protobuf/codegenv1';
3
2
  import '@bufbuild/protobuf';
4
3
 
5
4
  /** Parameters for initiating an RPC call */
package/dist/rpc.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { RpcError as RpcError$1 } from './proto/rpc_pb.js';
2
- import '@bufbuild/protobuf/codegenv1';
3
2
  import '@bufbuild/protobuf';
4
3
 
5
4
  /** Parameters for initiating an RPC call */
package/dist/rpc.js.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, 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":"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,MAAM,MAAM,SAAS,MAAM,IAAI;AAAA,EAC3D;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":[]}
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":"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/track.cjs CHANGED
@@ -25,7 +25,6 @@ __export(track_exports, {
25
25
  Track: () => Track
26
26
  });
27
27
  module.exports = __toCommonJS(track_exports);
28
- var import_protobuf = require("@bufbuild/protobuf");
29
28
  var import_ffi_client = require("./ffi_client.cjs");
30
29
  var import_track_pb = require("./proto/track_pb.cjs");
31
30
  class Track {
@@ -34,19 +33,24 @@ class Track {
34
33
  this.ffi_handle = new import_ffi_client.FfiHandle(owned.handle.id);
35
34
  }
36
35
  get sid() {
37
- return this.info.sid;
36
+ var _a;
37
+ return (_a = this.info) == null ? void 0 : _a.sid;
38
38
  }
39
39
  get name() {
40
- return this.info.name;
40
+ var _a;
41
+ return (_a = this.info) == null ? void 0 : _a.name;
41
42
  }
42
43
  get kind() {
43
- return this.info.kind;
44
+ var _a;
45
+ return (_a = this.info) == null ? void 0 : _a.kind;
44
46
  }
45
47
  get stream_state() {
46
- return this.info.streamState;
48
+ var _a;
49
+ return (_a = this.info) == null ? void 0 : _a.streamState;
47
50
  }
48
51
  get muted() {
49
- return this.info.muted;
52
+ var _a;
53
+ return (_a = this.info) == null ? void 0 : _a.muted;
50
54
  }
51
55
  }
52
56
  class LocalAudioTrack extends Track {
@@ -54,7 +58,7 @@ class LocalAudioTrack extends Track {
54
58
  super(owned);
55
59
  }
56
60
  static createAudioTrack(name, source) {
57
- const req = (0, import_protobuf.create)(import_track_pb.CreateAudioTrackRequestSchema, {
61
+ const req = new import_track_pb.CreateAudioTrackRequest({
58
62
  name,
59
63
  sourceHandle: source.ffiHandle.handle
60
64
  });
@@ -69,7 +73,7 @@ class LocalVideoTrack extends Track {
69
73
  super(owned);
70
74
  }
71
75
  static createVideoTrack(name, source) {
72
- const req = (0, import_protobuf.create)(import_track_pb.CreateVideoTrackRequestSchema, {
76
+ const req = new import_track_pb.CreateVideoTrackRequest({
73
77
  name,
74
78
  sourceHandle: source.ffiHandle.handle
75
79
  });