livekit-client 0.17.3 → 0.17.6-rc1

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 (155) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +26 -20
  3. package/dist/api/SignalClient.d.ts +1 -0
  4. package/dist/connect.d.ts +2 -0
  5. package/dist/index.d.ts +2 -2
  6. package/dist/livekit-client.esm.js +17344 -0
  7. package/dist/livekit-client.esm.js.map +1 -0
  8. package/dist/livekit-client.umd.js +17388 -0
  9. package/dist/livekit-client.umd.js.map +1 -0
  10. package/dist/logger.d.ts +22 -11
  11. package/dist/options.d.ts +4 -2
  12. package/dist/proto/google/protobuf/timestamp.d.ts +12 -2
  13. package/dist/proto/livekit_models.d.ts +524 -17
  14. package/dist/proto/livekit_rtc.d.ts +3449 -31
  15. package/dist/room/DeviceManager.d.ts +1 -1
  16. package/dist/room/RTCEngine.d.ts +1 -1
  17. package/dist/room/Room.d.ts +2 -2
  18. package/dist/room/events.d.ts +1 -1
  19. package/dist/room/participant/LocalParticipant.d.ts +9 -5
  20. package/dist/room/participant/RemoteParticipant.d.ts +9 -0
  21. package/dist/room/track/RemoteAudioTrack.d.ts +11 -0
  22. package/dist/room/track/options.d.ts +1 -1
  23. package/dist/test/mocks.d.ts +11 -0
  24. package/dist/version.d.ts +1 -1
  25. package/package.json +41 -16
  26. package/.eslintrc.js +0 -17
  27. package/.gitmodules +0 -3
  28. package/dist/api/RequestQueue.js +0 -61
  29. package/dist/api/RequestQueue.js.map +0 -1
  30. package/dist/api/SignalClient.js +0 -428
  31. package/dist/api/SignalClient.js.map +0 -1
  32. package/dist/connect.js +0 -130
  33. package/dist/connect.js.map +0 -1
  34. package/dist/index.js +0 -71
  35. package/dist/index.js.map +0 -1
  36. package/dist/logger.js +0 -24
  37. package/dist/logger.js.map +0 -1
  38. package/dist/options.js +0 -3
  39. package/dist/options.js.map +0 -1
  40. package/dist/proto/google/protobuf/timestamp.js +0 -93
  41. package/dist/proto/google/protobuf/timestamp.js.map +0 -1
  42. package/dist/proto/livekit_models.js +0 -2688
  43. package/dist/proto/livekit_models.js.map +0 -1
  44. package/dist/proto/livekit_rtc.js +0 -2995
  45. package/dist/proto/livekit_rtc.js.map +0 -1
  46. package/dist/room/DeviceManager.js +0 -62
  47. package/dist/room/DeviceManager.js.map +0 -1
  48. package/dist/room/PCTransport.js +0 -91
  49. package/dist/room/PCTransport.js.map +0 -1
  50. package/dist/room/RTCEngine.js +0 -562
  51. package/dist/room/RTCEngine.js.map +0 -1
  52. package/dist/room/Room.js +0 -759
  53. package/dist/room/Room.js.map +0 -1
  54. package/dist/room/errors.js +0 -68
  55. package/dist/room/errors.js.map +0 -1
  56. package/dist/room/events.js +0 -385
  57. package/dist/room/events.js.map +0 -1
  58. package/dist/room/participant/LocalParticipant.js +0 -647
  59. package/dist/room/participant/LocalParticipant.js.map +0 -1
  60. package/dist/room/participant/Participant.js +0 -189
  61. package/dist/room/participant/Participant.js.map +0 -1
  62. package/dist/room/participant/ParticipantTrackPermission.js +0 -16
  63. package/dist/room/participant/ParticipantTrackPermission.js.map +0 -1
  64. package/dist/room/participant/RemoteParticipant.js +0 -194
  65. package/dist/room/participant/RemoteParticipant.js.map +0 -1
  66. package/dist/room/participant/publishUtils.js +0 -189
  67. package/dist/room/participant/publishUtils.js.map +0 -1
  68. package/dist/room/participant/publishUtils.test.d.ts +0 -1
  69. package/dist/room/participant/publishUtils.test.js +0 -118
  70. package/dist/room/participant/publishUtils.test.js.map +0 -1
  71. package/dist/room/stats.js +0 -26
  72. package/dist/room/stats.js.map +0 -1
  73. package/dist/room/track/LocalAudioTrack.js +0 -153
  74. package/dist/room/track/LocalAudioTrack.js.map +0 -1
  75. package/dist/room/track/LocalTrack.js +0 -158
  76. package/dist/room/track/LocalTrack.js.map +0 -1
  77. package/dist/room/track/LocalTrackPublication.js +0 -64
  78. package/dist/room/track/LocalTrackPublication.js.map +0 -1
  79. package/dist/room/track/LocalVideoTrack.js +0 -297
  80. package/dist/room/track/LocalVideoTrack.js.map +0 -1
  81. package/dist/room/track/LocalVideoTrack.test.d.ts +0 -1
  82. package/dist/room/track/LocalVideoTrack.test.js +0 -68
  83. package/dist/room/track/LocalVideoTrack.test.js.map +0 -1
  84. package/dist/room/track/RemoteAudioTrack.js +0 -64
  85. package/dist/room/track/RemoteAudioTrack.js.map +0 -1
  86. package/dist/room/track/RemoteTrack.js +0 -49
  87. package/dist/room/track/RemoteTrack.js.map +0 -1
  88. package/dist/room/track/RemoteTrackPublication.js +0 -178
  89. package/dist/room/track/RemoteTrackPublication.js.map +0 -1
  90. package/dist/room/track/RemoteVideoTrack.js +0 -201
  91. package/dist/room/track/RemoteVideoTrack.js.map +0 -1
  92. package/dist/room/track/Track.js +0 -276
  93. package/dist/room/track/Track.js.map +0 -1
  94. package/dist/room/track/TrackPublication.js +0 -92
  95. package/dist/room/track/TrackPublication.js.map +0 -1
  96. package/dist/room/track/create.js +0 -131
  97. package/dist/room/track/create.js.map +0 -1
  98. package/dist/room/track/defaults.js +0 -21
  99. package/dist/room/track/defaults.js.map +0 -1
  100. package/dist/room/track/options.js +0 -100
  101. package/dist/room/track/options.js.map +0 -1
  102. package/dist/room/track/types.js +0 -3
  103. package/dist/room/track/types.js.map +0 -1
  104. package/dist/room/track/utils.js +0 -113
  105. package/dist/room/track/utils.js.map +0 -1
  106. package/dist/room/track/utils.test.d.ts +0 -1
  107. package/dist/room/track/utils.test.js +0 -85
  108. package/dist/room/track/utils.test.js.map +0 -1
  109. package/dist/room/utils.js +0 -79
  110. package/dist/room/utils.js.map +0 -1
  111. package/dist/version.js +0 -6
  112. package/dist/version.js.map +0 -1
  113. package/jest.config.js +0 -6
  114. package/src/api/RequestQueue.ts +0 -53
  115. package/src/api/SignalClient.ts +0 -499
  116. package/src/connect.ts +0 -100
  117. package/src/index.ts +0 -47
  118. package/src/logger.ts +0 -22
  119. package/src/options.ts +0 -149
  120. package/src/proto/google/protobuf/timestamp.ts +0 -222
  121. package/src/proto/livekit_models.ts +0 -3019
  122. package/src/proto/livekit_rtc.ts +0 -3677
  123. package/src/room/DeviceManager.ts +0 -57
  124. package/src/room/PCTransport.ts +0 -86
  125. package/src/room/RTCEngine.ts +0 -652
  126. package/src/room/Room.ts +0 -943
  127. package/src/room/errors.ts +0 -65
  128. package/src/room/events.ts +0 -424
  129. package/src/room/participant/LocalParticipant.ts +0 -734
  130. package/src/room/participant/Participant.ts +0 -269
  131. package/src/room/participant/ParticipantTrackPermission.ts +0 -32
  132. package/src/room/participant/RemoteParticipant.ts +0 -243
  133. package/src/room/participant/publishUtils.test.ts +0 -145
  134. package/src/room/participant/publishUtils.ts +0 -225
  135. package/src/room/stats.ts +0 -130
  136. package/src/room/track/LocalAudioTrack.ts +0 -137
  137. package/src/room/track/LocalTrack.ts +0 -161
  138. package/src/room/track/LocalTrackPublication.ts +0 -66
  139. package/src/room/track/LocalVideoTrack.test.ts +0 -70
  140. package/src/room/track/LocalVideoTrack.ts +0 -293
  141. package/src/room/track/RemoteAudioTrack.ts +0 -58
  142. package/src/room/track/RemoteTrack.ts +0 -62
  143. package/src/room/track/RemoteTrackPublication.ts +0 -198
  144. package/src/room/track/RemoteVideoTrack.ts +0 -235
  145. package/src/room/track/Track.ts +0 -337
  146. package/src/room/track/TrackPublication.ts +0 -120
  147. package/src/room/track/create.ts +0 -121
  148. package/src/room/track/defaults.ts +0 -23
  149. package/src/room/track/options.ts +0 -281
  150. package/src/room/track/types.ts +0 -20
  151. package/src/room/track/utils.test.ts +0 -93
  152. package/src/room/track/utils.ts +0 -115
  153. package/src/room/utils.ts +0 -70
  154. package/src/version.ts +0 -2
  155. package/tsconfig.eslint.json +0 -11
@@ -1,562 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.maxICEConnectTimeout = void 0;
16
- const events_1 = require("events");
17
- const SignalClient_1 = require("../api/SignalClient");
18
- const logger_1 = __importDefault(require("../logger"));
19
- const livekit_models_1 = require("../proto/livekit_models");
20
- const livekit_rtc_1 = require("../proto/livekit_rtc");
21
- const errors_1 = require("./errors");
22
- const events_2 = require("./events");
23
- const PCTransport_1 = __importDefault(require("./PCTransport"));
24
- const utils_1 = require("./utils");
25
- const lossyDataChannel = '_lossy';
26
- const reliableDataChannel = '_reliable';
27
- const maxReconnectRetries = 10;
28
- const minReconnectWait = 1 * 1000;
29
- const maxReconnectDuration = 60 * 1000;
30
- exports.maxICEConnectTimeout = 15 * 1000;
31
- /** @internal */
32
- class RTCEngine extends events_1.EventEmitter {
33
- constructor() {
34
- super();
35
- this.rtcConfig = {};
36
- this.subscriberPrimary = false;
37
- this.pcConnected = false;
38
- this.isClosed = true;
39
- this.pendingTrackResolvers = {};
40
- // true if publisher connection has already been established.
41
- // this is helpful to know if we need to restart ICE on the publisher connection
42
- this.hasPublished = false;
43
- this.reconnectAttempts = 0;
44
- this.reconnectStart = 0;
45
- this.fullReconnectOnNext = false;
46
- this.handleDataChannel = ({ channel }) => __awaiter(this, void 0, void 0, function* () {
47
- if (!channel) {
48
- return;
49
- }
50
- if (channel.label === reliableDataChannel) {
51
- this.reliableDCSub = channel;
52
- }
53
- else if (channel.label === lossyDataChannel) {
54
- this.lossyDCSub = channel;
55
- }
56
- else {
57
- return;
58
- }
59
- channel.onmessage = this.handleDataMessage;
60
- });
61
- this.handleDataMessage = (message) => __awaiter(this, void 0, void 0, function* () {
62
- // decode
63
- let buffer;
64
- if (message.data instanceof ArrayBuffer) {
65
- buffer = message.data;
66
- }
67
- else if (message.data instanceof Blob) {
68
- buffer = yield message.data.arrayBuffer();
69
- }
70
- else {
71
- logger_1.default.error('unsupported data type', message.data);
72
- return;
73
- }
74
- const dp = livekit_models_1.DataPacket.decode(new Uint8Array(buffer));
75
- if (dp.speaker) {
76
- // dispatch speaker updates
77
- this.emit(events_2.EngineEvent.ActiveSpeakersUpdate, dp.speaker.speakers);
78
- }
79
- else if (dp.user) {
80
- this.emit(events_2.EngineEvent.DataPacketReceived, dp.user, dp.kind);
81
- }
82
- });
83
- this.handleDataError = (event) => {
84
- const channel = event.currentTarget;
85
- const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';
86
- if (event instanceof ErrorEvent) {
87
- const { error } = event.error;
88
- logger_1.default.error(`DataChannel error on ${channelKind}: ${event.message}`, error);
89
- }
90
- else {
91
- logger_1.default.error(`Unknown DataChannel Error on ${channelKind}`, event);
92
- }
93
- };
94
- // websocket reconnect behavior. if websocket is interrupted, and the PeerConnection
95
- // continues to work, we can reconnect to websocket to continue the session
96
- // after a number of retries, we'll close and give up permanently
97
- this.handleDisconnect = (connection) => {
98
- if (this.isClosed) {
99
- return;
100
- }
101
- logger_1.default.debug(`${connection} disconnected`);
102
- if (this.reconnectAttempts === 0) {
103
- // only reset start time on the first try
104
- this.reconnectStart = Date.now();
105
- }
106
- const delay = (this.reconnectAttempts * this.reconnectAttempts) * 300;
107
- setTimeout(() => __awaiter(this, void 0, void 0, function* () {
108
- var _a;
109
- if (this.isClosed) {
110
- return;
111
- }
112
- if (utils_1.isFireFox() // TODO remove once clientConfiguration handles firefox case server side
113
- || ((_a = this.clientConfiguration) === null || _a === void 0 ? void 0 : _a.resumeConnection) === livekit_models_1.ClientConfigSetting.DISABLED) {
114
- this.fullReconnectOnNext = true;
115
- }
116
- try {
117
- if (this.fullReconnectOnNext) {
118
- yield this.restartConnection();
119
- }
120
- else {
121
- yield this.resumeConnection();
122
- }
123
- this.reconnectAttempts = 0;
124
- this.fullReconnectOnNext = false;
125
- }
126
- catch (e) {
127
- this.reconnectAttempts += 1;
128
- let recoverable = true;
129
- if (e instanceof errors_1.UnexpectedConnectionState) {
130
- logger_1.default.debug('received unrecoverable error', e.message);
131
- // unrecoverable
132
- recoverable = false;
133
- }
134
- else if (!(e instanceof SignalReconnectError)) {
135
- // cannot resume
136
- this.fullReconnectOnNext = true;
137
- }
138
- const duration = Date.now() - this.reconnectStart;
139
- if (this.reconnectAttempts >= maxReconnectRetries || duration > maxReconnectDuration) {
140
- recoverable = false;
141
- }
142
- if (recoverable) {
143
- this.handleDisconnect('reconnect');
144
- }
145
- else {
146
- logger_1.default.info(`could not recover connection after ${maxReconnectRetries} attempts, ${duration}ms. giving up`);
147
- this.emit(events_2.EngineEvent.Disconnected);
148
- this.close();
149
- }
150
- }
151
- }), delay);
152
- };
153
- this.client = new SignalClient_1.SignalClient();
154
- }
155
- join(url, token, opts) {
156
- return __awaiter(this, void 0, void 0, function* () {
157
- this.url = url;
158
- this.token = token;
159
- this.signalOpts = opts;
160
- const joinResponse = yield this.client.join(url, token, opts);
161
- this.isClosed = false;
162
- this.subscriberPrimary = joinResponse.subscriberPrimary;
163
- if (!this.publisher) {
164
- this.configure(joinResponse);
165
- }
166
- // create offer
167
- if (!this.subscriberPrimary) {
168
- this.negotiate();
169
- }
170
- this.clientConfiguration = joinResponse.clientConfiguration;
171
- return joinResponse;
172
- });
173
- }
174
- close() {
175
- this.isClosed = true;
176
- this.removeAllListeners();
177
- if (this.publisher && this.publisher.pc.signalingState !== 'closed') {
178
- this.publisher.pc.getSenders().forEach((sender) => {
179
- var _a, _b;
180
- try {
181
- // TODO: react-native-webrtc doesn't have removeTrack yet.
182
- if ((_a = this.publisher) === null || _a === void 0 ? void 0 : _a.pc.removeTrack) {
183
- (_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.removeTrack(sender);
184
- }
185
- }
186
- catch (e) {
187
- logger_1.default.warn('could not removeTrack', e);
188
- }
189
- });
190
- this.publisher.close();
191
- this.publisher = undefined;
192
- }
193
- if (this.subscriber) {
194
- this.subscriber.close();
195
- this.subscriber = undefined;
196
- }
197
- this.client.close();
198
- }
199
- addTrack(req) {
200
- if (this.pendingTrackResolvers[req.cid]) {
201
- throw new errors_1.TrackInvalidError('a track with the same ID has already been published');
202
- }
203
- return new Promise((resolve) => {
204
- this.pendingTrackResolvers[req.cid] = resolve;
205
- this.client.sendAddTrack(req);
206
- });
207
- }
208
- updateMuteStatus(trackSid, muted) {
209
- this.client.sendMuteTrack(trackSid, muted);
210
- }
211
- get dataSubscriberReadyState() {
212
- var _a;
213
- return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;
214
- }
215
- get connectedServerAddress() {
216
- return this.connectedServerAddr;
217
- }
218
- configure(joinResponse) {
219
- // already configured
220
- if (this.publisher || this.subscriber) {
221
- return;
222
- }
223
- // update ICE servers before creating PeerConnection
224
- if (joinResponse.iceServers && !this.rtcConfig.iceServers) {
225
- const rtcIceServers = [];
226
- joinResponse.iceServers.forEach((iceServer) => {
227
- const rtcIceServer = {
228
- urls: iceServer.urls,
229
- };
230
- if (iceServer.username)
231
- rtcIceServer.username = iceServer.username;
232
- if (iceServer.credential) {
233
- rtcIceServer.credential = iceServer.credential;
234
- }
235
- rtcIceServers.push(rtcIceServer);
236
- });
237
- this.rtcConfig.iceServers = rtcIceServers;
238
- }
239
- // @ts-ignore
240
- this.rtcConfig.sdpSemantics = 'unified-plan';
241
- // @ts-ignore
242
- this.rtcConfig.continualGatheringPolicy = 'gather_continually';
243
- this.publisher = new PCTransport_1.default(this.rtcConfig);
244
- this.subscriber = new PCTransport_1.default(this.rtcConfig);
245
- this.emit(events_2.EngineEvent.TransportsCreated, this.publisher, this.subscriber);
246
- this.publisher.pc.onicecandidate = (ev) => {
247
- if (!ev.candidate)
248
- return;
249
- logger_1.default.trace('adding ICE candidate for peer', ev.candidate);
250
- this.client.sendIceCandidate(ev.candidate, livekit_rtc_1.SignalTarget.PUBLISHER);
251
- };
252
- this.subscriber.pc.onicecandidate = (ev) => {
253
- if (!ev.candidate)
254
- return;
255
- this.client.sendIceCandidate(ev.candidate, livekit_rtc_1.SignalTarget.SUBSCRIBER);
256
- };
257
- this.publisher.onOffer = (offer) => {
258
- this.client.sendOffer(offer);
259
- };
260
- let primaryPC = this.publisher.pc;
261
- if (joinResponse.subscriberPrimary) {
262
- primaryPC = this.subscriber.pc;
263
- // in subscriber primary mode, server side opens sub data channels.
264
- this.subscriber.pc.ondatachannel = this.handleDataChannel;
265
- }
266
- this.primaryPC = primaryPC;
267
- primaryPC.onconnectionstatechange = () => __awaiter(this, void 0, void 0, function* () {
268
- if (primaryPC.connectionState === 'connected') {
269
- logger_1.default.trace('pc connected');
270
- try {
271
- this.connectedServerAddr = yield getConnectedAddress(primaryPC);
272
- }
273
- catch (e) {
274
- logger_1.default.warn('could not get connected server address', e);
275
- }
276
- if (!this.pcConnected) {
277
- this.pcConnected = true;
278
- this.emit(events_2.EngineEvent.Connected);
279
- }
280
- }
281
- else if (primaryPC.connectionState === 'failed') {
282
- // on Safari, PeerConnection will switch to 'disconnected' during renegotiation
283
- logger_1.default.trace('pc disconnected');
284
- if (this.pcConnected) {
285
- this.pcConnected = false;
286
- this.handleDisconnect('peerconnection');
287
- }
288
- }
289
- });
290
- if (utils_1.isWeb()) {
291
- this.subscriber.pc.ontrack = (ev) => {
292
- this.emit(events_2.EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);
293
- };
294
- }
295
- else {
296
- // TODO: react-native-webrtc doesn't have ontrack yet, replace when ready.
297
- // @ts-ignore
298
- this.subscriber.pc.onaddstream = (ev) => {
299
- const track = ev.stream.getTracks()[0];
300
- this.emit(events_2.EngineEvent.MediaTrackAdded, track, ev.stream);
301
- };
302
- }
303
- // data channels
304
- this.lossyDC = this.publisher.pc.createDataChannel(lossyDataChannel, {
305
- // will drop older packets that arrive
306
- ordered: true,
307
- maxRetransmits: 0,
308
- });
309
- this.reliableDC = this.publisher.pc.createDataChannel(reliableDataChannel, {
310
- ordered: true,
311
- });
312
- // also handle messages over the pub channel, for backwards compatibility
313
- this.lossyDC.onmessage = this.handleDataMessage;
314
- this.reliableDC.onmessage = this.handleDataMessage;
315
- // handle datachannel errors
316
- this.lossyDC.onerror = this.handleDataError;
317
- this.reliableDC.onerror = this.handleDataError;
318
- // configure signaling client
319
- this.client.onAnswer = (sd) => __awaiter(this, void 0, void 0, function* () {
320
- if (!this.publisher) {
321
- return;
322
- }
323
- logger_1.default.debug('received server answer', sd.type, this.publisher.pc.signalingState);
324
- yield this.publisher.setRemoteDescription(sd);
325
- });
326
- // add candidate on trickle
327
- this.client.onTrickle = (candidate, target) => {
328
- if (!this.publisher || !this.subscriber) {
329
- return;
330
- }
331
- logger_1.default.trace('got ICE candidate from peer', candidate, target);
332
- if (target === livekit_rtc_1.SignalTarget.PUBLISHER) {
333
- this.publisher.addIceCandidate(candidate);
334
- }
335
- else {
336
- this.subscriber.addIceCandidate(candidate);
337
- }
338
- };
339
- // when server creates an offer for the client
340
- this.client.onOffer = (sd) => __awaiter(this, void 0, void 0, function* () {
341
- if (!this.subscriber) {
342
- return;
343
- }
344
- logger_1.default.debug('received server offer', sd.type, this.subscriber.pc.signalingState);
345
- yield this.subscriber.setRemoteDescription(sd);
346
- // answer the offer
347
- const answer = yield this.subscriber.pc.createAnswer();
348
- yield this.subscriber.pc.setLocalDescription(answer);
349
- this.client.sendAnswer(answer);
350
- });
351
- this.client.onLocalTrackPublished = (res) => {
352
- logger_1.default.debug('received trackPublishedResponse', res);
353
- const resolve = this.pendingTrackResolvers[res.cid];
354
- if (!resolve) {
355
- logger_1.default.error('missing track resolver for ', res.cid);
356
- return;
357
- }
358
- delete this.pendingTrackResolvers[res.cid];
359
- resolve(res.track);
360
- };
361
- this.client.onTokenRefresh = (token) => {
362
- this.token = token;
363
- };
364
- this.client.onClose = () => {
365
- this.handleDisconnect('signal');
366
- };
367
- this.client.onLeave = (leave) => {
368
- if (leave === null || leave === void 0 ? void 0 : leave.canReconnect) {
369
- this.fullReconnectOnNext = true;
370
- this.primaryPC = undefined;
371
- }
372
- else {
373
- this.emit(events_2.EngineEvent.Disconnected);
374
- this.close();
375
- }
376
- };
377
- }
378
- restartConnection() {
379
- var _a, _b;
380
- return __awaiter(this, void 0, void 0, function* () {
381
- if (!this.url || !this.token) {
382
- // permanent failure, don't attempt reconnection
383
- throw new errors_1.UnexpectedConnectionState('could not reconnect, url or token not saved');
384
- }
385
- logger_1.default.info('reconnecting, attempt', this.reconnectAttempts);
386
- if (this.reconnectAttempts === 0) {
387
- this.emit(events_2.EngineEvent.Restarting);
388
- }
389
- this.primaryPC = undefined;
390
- (_a = this.publisher) === null || _a === void 0 ? void 0 : _a.close();
391
- this.publisher = undefined;
392
- (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.close();
393
- this.subscriber = undefined;
394
- let joinResponse;
395
- try {
396
- joinResponse = yield this.join(this.url, this.token, this.signalOpts);
397
- }
398
- catch (e) {
399
- throw new SignalReconnectError();
400
- }
401
- yield this.waitForPCConnected();
402
- this.client.setReconnected();
403
- // reconnect success
404
- this.emit(events_2.EngineEvent.Restarted, joinResponse);
405
- });
406
- }
407
- resumeConnection() {
408
- return __awaiter(this, void 0, void 0, function* () {
409
- if (!this.url || !this.token) {
410
- // permanent failure, don't attempt reconnection
411
- throw new errors_1.UnexpectedConnectionState('could not reconnect, url or token not saved');
412
- }
413
- // trigger publisher reconnect
414
- if (!this.publisher || !this.subscriber) {
415
- throw new errors_1.UnexpectedConnectionState('publisher and subscriber connections unset');
416
- }
417
- logger_1.default.info('resuming signal connection, attempt', this.reconnectAttempts);
418
- if (this.reconnectAttempts === 0) {
419
- this.emit(events_2.EngineEvent.Resuming);
420
- }
421
- try {
422
- yield this.client.reconnect(this.url, this.token);
423
- }
424
- catch (e) {
425
- throw new SignalReconnectError();
426
- }
427
- this.emit(events_2.EngineEvent.SignalResumed);
428
- this.subscriber.restartingIce = true;
429
- // only restart publisher if it's needed
430
- if (this.hasPublished) {
431
- yield this.publisher.createAndSendOffer({ iceRestart: true });
432
- }
433
- yield this.waitForPCConnected();
434
- this.client.setReconnected();
435
- // resume success
436
- this.emit(events_2.EngineEvent.Resumed);
437
- });
438
- }
439
- waitForPCConnected() {
440
- var _a;
441
- return __awaiter(this, void 0, void 0, function* () {
442
- const startTime = (new Date()).getTime();
443
- let now = startTime;
444
- this.pcConnected = false;
445
- while (now - startTime < exports.maxICEConnectTimeout) {
446
- // if there is no connectionstatechange callback fired
447
- // check connectionstate after minReconnectWait
448
- if (this.primaryPC === undefined) {
449
- // we can abort early, connection is hosed
450
- break;
451
- }
452
- else if (now - startTime > minReconnectWait && ((_a = this.primaryPC) === null || _a === void 0 ? void 0 : _a.connectionState) === 'connected') {
453
- this.pcConnected = true;
454
- }
455
- if (this.pcConnected) {
456
- return;
457
- }
458
- yield utils_1.sleep(100);
459
- now = (new Date()).getTime();
460
- }
461
- // have not reconnected, throw
462
- throw new errors_1.ConnectionError('could not establish PC connection');
463
- });
464
- }
465
- /* @internal */
466
- sendDataPacket(packet, kind) {
467
- return __awaiter(this, void 0, void 0, function* () {
468
- const msg = livekit_models_1.DataPacket.encode(packet).finish();
469
- // make sure we do have a data connection
470
- yield this.ensurePublisherConnected(kind);
471
- if (kind === livekit_models_1.DataPacket_Kind.LOSSY && this.lossyDC) {
472
- this.lossyDC.send(msg);
473
- }
474
- else if (kind === livekit_models_1.DataPacket_Kind.RELIABLE && this.reliableDC) {
475
- this.reliableDC.send(msg);
476
- }
477
- });
478
- }
479
- ensurePublisherConnected(kind) {
480
- var _a, _b;
481
- return __awaiter(this, void 0, void 0, function* () {
482
- if (!this.subscriberPrimary) {
483
- return;
484
- }
485
- if (!this.publisher) {
486
- throw new errors_1.ConnectionError('publisher connection not set');
487
- }
488
- if (!this.publisher.isICEConnected && this.publisher.pc.iceConnectionState !== 'checking') {
489
- // start negotiation
490
- this.negotiate();
491
- }
492
- const targetChannel = this.dataChannelForKind(kind);
493
- if ((targetChannel === null || targetChannel === void 0 ? void 0 : targetChannel.readyState) === 'open') {
494
- return;
495
- }
496
- // wait until publisher ICE connected
497
- const endTime = (new Date()).getTime() + exports.maxICEConnectTimeout;
498
- while ((new Date()).getTime() < endTime) {
499
- if (this.publisher.isICEConnected && ((_a = this.dataChannelForKind(kind)) === null || _a === void 0 ? void 0 : _a.readyState) === 'open') {
500
- return;
501
- }
502
- yield utils_1.sleep(50);
503
- }
504
- throw new errors_1.ConnectionError(`could not establish publisher connection, state ${(_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.iceConnectionState}`);
505
- });
506
- }
507
- /** @internal */
508
- negotiate() {
509
- if (!this.publisher) {
510
- return;
511
- }
512
- this.hasPublished = true;
513
- this.publisher.negotiate();
514
- }
515
- dataChannelForKind(kind) {
516
- if (kind === livekit_models_1.DataPacket_Kind.LOSSY) {
517
- return this.lossyDC;
518
- }
519
- if (kind === livekit_models_1.DataPacket_Kind.RELIABLE) {
520
- return this.reliableDC;
521
- }
522
- }
523
- }
524
- exports.default = RTCEngine;
525
- function getConnectedAddress(pc) {
526
- var _a;
527
- return __awaiter(this, void 0, void 0, function* () {
528
- let selectedCandidatePairId = '';
529
- const candidatePairs = new Map();
530
- // id -> candidate ip
531
- const candidates = new Map();
532
- const stats = yield pc.getStats();
533
- stats.forEach((v) => {
534
- switch (v.type) {
535
- case 'transport':
536
- selectedCandidatePairId = v.selectedCandidatePairId;
537
- break;
538
- case 'candidate-pair':
539
- if (selectedCandidatePairId === '' && v.selected) {
540
- selectedCandidatePairId = v.id;
541
- }
542
- candidatePairs.set(v.id, v);
543
- break;
544
- case 'remote-candidate':
545
- candidates.set(v.id, `${v.address}:${v.port}`);
546
- break;
547
- default:
548
- }
549
- });
550
- if (selectedCandidatePairId === '') {
551
- return undefined;
552
- }
553
- const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;
554
- if (selectedID === undefined) {
555
- return undefined;
556
- }
557
- return candidates.get(selectedID);
558
- });
559
- }
560
- class SignalReconnectError extends Error {
561
- }
562
- //# sourceMappingURL=RTCEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RTCEngine.js","sourceRoot":"","sources":["../../src/room/RTCEngine.ts"],"names":[],"mappings":"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"}