Skip to content

Commit

Permalink
Revert event emitter lib usage to 'events' (#807)
Browse files Browse the repository at this point in the history
* Revert event emitter lib usage to 'events'

* Create six-seals-fetch.md
  • Loading branch information
lukasIO committed Jul 27, 2023
1 parent d16a08a commit 78325ab
Show file tree
Hide file tree
Showing 16 changed files with 71 additions and 47 deletions.
5 changes: 5 additions & 0 deletions .changeset/six-seals-fetch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"livekit-client": patch
---

Revert event emitter lib usage to 'events'
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,11 @@
},
"dependencies": {
"@bufbuild/protobuf": "^1.3.0",
"eventemitter3": "^5.0.1",
"events": "^3.3.0",
"loglevel": "^1.8.0",
"sdp-transform": "^2.14.1",
"ts-debounce": "^4.0.0",
"typed-emitter": "^2.1.0",
"webrtc-adapter": "^8.1.1"
},
"devDependencies": {
Expand Down
5 changes: 3 additions & 2 deletions src/connectionHelper/ConnectionCheck.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEmitter from 'typed-emitter';
import { CheckStatus, Checker } from './checks/Checker';
import type { CheckInfo, InstantiableCheck } from './checks/Checker';
import { PublishAudioCheck } from './checks/publishAudio';
Expand All @@ -10,7 +11,7 @@ import { WebSocketCheck } from './checks/websocket';

export type { CheckInfo, CheckStatus };

export class ConnectionCheck extends EventEmitter<ConnectionCheckCallbacks> {
export class ConnectionCheck extends (EventEmitter as new () => TypedEmitter<ConnectionCheckCallbacks>) {
token: string;

url: string;
Expand Down
5 changes: 3 additions & 2 deletions src/connectionHelper/checks/Checker.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEmitter from 'typed-emitter';
import type { RoomConnectOptions, RoomOptions } from '../../options';
import type RTCEngine from '../../room/RTCEngine';
import Room, { ConnectionState } from '../../room/Room';
Expand Down Expand Up @@ -29,7 +30,7 @@ export interface CheckerOptions {
connectOptions?: RoomConnectOptions;
}

export abstract class Checker extends EventEmitter<CheckerCallbacks> {
export abstract class Checker extends (EventEmitter as new () => TypedEmitter<CheckerCallbacks>) {
protected url: string;

protected token: string;
Expand Down
5 changes: 3 additions & 2 deletions src/e2ee/E2eeManager.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEventEmitter from 'typed-emitter';
import log from '../logger';
import { Encryption_Type, TrackInfo } from '../proto/livekit_models_pb';
import type RTCEngine from '../room/RTCEngine';
Expand Down Expand Up @@ -32,7 +33,7 @@ import { isE2EESupported, isScriptTransformSupported, mimeTypeToVideoCodecString
/**
* @experimental
*/
export class E2EEManager extends EventEmitter<E2EEManagerCallbacks> {
export class E2EEManager extends (EventEmitter as new () => TypedEventEmitter<E2EEManagerCallbacks>) {
protected worker: Worker;

protected room?: Room;
Expand Down
5 changes: 3 additions & 2 deletions src/e2ee/KeyProvider.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEventEmitter from 'typed-emitter';
import { KEY_PROVIDER_DEFAULTS } from './constants';
import type { KeyInfo, KeyProviderCallbacks, KeyProviderOptions } from './types';
import { createKeyMaterialFromString } from './utils';

/**
* @experimental
*/
export class BaseKeyProvider extends EventEmitter<KeyProviderCallbacks> {
export class BaseKeyProvider extends (EventEmitter as new () => TypedEventEmitter<KeyProviderCallbacks>) {
private keyInfoMap: Map<string, KeyInfo>;

private options: KeyProviderOptions;
Expand Down
5 changes: 3 additions & 2 deletions src/e2ee/worker/FrameCryptor.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
// TODO code inspired by https://github.com/webrtc/samples/blob/gh-pages/src/content/insertable-streams/endtoend-encryption/js/worker.js
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEventEmitter from 'typed-emitter';
import { workerLogger } from '../../logger';
import type { VideoCodec } from '../../room/track/options';
import { ENCRYPTION_ALGORITHM, IV_LENGTH, UNENCRYPTED_BYTES } from '../constants';
Expand All @@ -26,7 +27,7 @@ export interface TransformerInfo {
abortController: AbortController;
}

export class BaseFrameCryptor extends EventEmitter<CryptorCallbacks> {
export class BaseFrameCryptor extends (EventEmitter as new () => TypedEventEmitter<CryptorCallbacks>) {
encodeFunction(
encodedFrame: RTCEncodedVideoFrame | RTCEncodedAudioFrame,
controller: TransformStreamDefaultController,
Expand Down
5 changes: 3 additions & 2 deletions src/e2ee/worker/ParticipantKeyHandler.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEventEmitter from 'typed-emitter';
import { workerLogger } from '../../logger';
import { KEYRING_SIZE } from '../constants';
import type { KeyProviderOptions, KeySet, ParticipantKeyHandlerCallbacks } from '../types';
Expand All @@ -15,7 +16,7 @@ import { deriveKeys, importKey, ratchet } from '../utils';
* if decryption fails or can be triggered manually on both sender and receiver side.
*
*/
export class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHandlerCallbacks> {
export class ParticipantKeyHandler extends (EventEmitter as new () => TypedEventEmitter<ParticipantKeyHandlerCallbacks>) {
private currentKeyIndex: number;

private cryptoKeyRing: Array<KeySet>;
Expand Down
2 changes: 1 addition & 1 deletion src/room/PCTransport.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import { parse, write } from 'sdp-transform';
import type { MediaDescription } from 'sdp-transform';
import { debounce } from 'ts-debounce';
Expand Down
8 changes: 4 additions & 4 deletions src/room/RTCEngine.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type { MediaAttributes } from 'sdp-transform';
import type TypedEventEmitter from 'typed-emitter';
import type { SignalOptions } from '../api/SignalClient';
import { SignalClient } from '../api/SignalClient';
import log from '../logger';
Expand Down Expand Up @@ -71,7 +72,7 @@ enum PCState {
}

/** @internal */
export default class RTCEngine extends EventEmitter<EngineEventCallbacks> {
export default class RTCEngine extends (EventEmitter as new () => TypedEventEmitter<EngineEventCallbacks>) {
publisher?: PCTransport;

subscriber?: PCTransport;
Expand Down Expand Up @@ -1120,7 +1121,6 @@ export default class RTCEngine extends EventEmitter<EngineEventCallbacks> {
};
this.once(EngineEvent.Restarted, onRestarted);
this.once(EngineEvent.Disconnected, onDisconnected);
this.once(EngineEvent.Closing, onDisconnected);
});
};

Expand Down Expand Up @@ -1247,7 +1247,7 @@ export default class RTCEngine extends EventEmitter<EngineEventCallbacks> {
this.hasPublished = true;

const handleClosed = () => {
log.warn('engine disconnected while negotiation was ongoing');
log.debug('engine disconnected while negotiation was ongoing');
cleanup();
resolve();
return;
Expand Down
22 changes: 10 additions & 12 deletions src/room/Room.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { protoInt64 } from '@bufbuild/protobuf';
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEmitter from 'typed-emitter';
import 'webrtc-adapter';
import { toProtoSessionDescription } from '../api/SignalClient';
import { EncryptionEvent } from '../e2ee';
Expand Down Expand Up @@ -98,7 +99,7 @@ export const RoomState = ConnectionState;
*
* @noInheritDoc
*/
class Room extends EventEmitter<RoomEventCallbacks> {
class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>) {
state: ConnectionState = ConnectionState.Disconnected;

/** map of sid: [[RemoteParticipant]] */
Expand Down Expand Up @@ -157,6 +158,7 @@ class Room extends EventEmitter<RoomEventCallbacks> {
*/
constructor(options?: RoomOptions) {
super();
this.setMaxListeners(100);
this.participants = new Map();
this.cachedParticipantSids = [];
this.identityToSid = new Map();
Expand Down Expand Up @@ -1620,9 +1622,9 @@ class Room extends EventEmitter<RoomEventCallbacks> {
return true;
}

private emitWhenConnected<T extends EventEmitter.EventNames<RoomEventCallbacks>>(
event: T,
...args: EventEmitter.EventArgs<RoomEventCallbacks, T>
private emitWhenConnected<E extends keyof RoomEventCallbacks>(
event: E,
...args: Parameters<RoomEventCallbacks[E]>
): boolean {
if (this.state === ConnectionState.Connected) {
return this.emit(event, ...args);
Expand Down Expand Up @@ -1811,14 +1813,10 @@ class Room extends EventEmitter<RoomEventCallbacks> {
}

// /** @internal */
emit<T extends EventEmitter.EventNames<RoomEventCallbacks>>(
event: T,
...args: EventEmitter.EventArgs<RoomEventCallbacks, T>
emit<E extends keyof RoomEventCallbacks>(
event: E,
...args: Parameters<RoomEventCallbacks[E]>
): boolean {
// emit<E extends keyof RoomEventCallbacks>(
// event: E,
// ...args: Parameters<RoomEventCallbacks[E]>
// ): boolean {
// active speaker updates are too spammy
if (event !== RoomEvent.ActiveSpeakersChanged) {
log.debug(`room event ${event}`, { event, args });
Expand Down
6 changes: 4 additions & 2 deletions src/room/participant/Participant.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEmitter from 'typed-emitter';
import log from '../../logger';
import {
DataPacket_Kind,
Expand Down Expand Up @@ -34,7 +35,7 @@ function qualityFromProto(q: ProtoQuality): ConnectionQuality {
}
}

export default class Participant extends EventEmitter<ParticipantEventCallbacks> {
export default class Participant extends (EventEmitter as new () => TypedEmitter<ParticipantEventCallbacks>) {
protected participantInfo?: ParticipantInfo;

audioTracks: Map<string, TrackPublication>;
Expand Down Expand Up @@ -75,6 +76,7 @@ export default class Participant extends EventEmitter<ParticipantEventCallbacks>
/** @internal */
constructor(sid: string, identity: string, name?: string, metadata?: string) {
super();
this.setMaxListeners(100);
this.sid = sid;
this.identity = identity;
this.name = name;
Expand Down
7 changes: 3 additions & 4 deletions src/room/participant/RemoteParticipant.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type EventEmitter from 'eventemitter3';
import type { SignalClient } from '../../api/SignalClient';
import log from '../../logger';
import type { ParticipantInfo, SubscriptionError } from '../../proto/livekit_models_pb';
Expand Down Expand Up @@ -350,9 +349,9 @@ export default class RemoteParticipant extends Participant {
}

/** @internal */
emit<T extends EventEmitter.EventNames<ParticipantEventCallbacks>>(
event: T,
...args: EventEmitter.EventArgs<ParticipantEventCallbacks, T>
emit<E extends keyof ParticipantEventCallbacks>(
event: E,
...args: Parameters<ParticipantEventCallbacks[E]>
): boolean {
log.trace('participant event', { participant: this.sid, event, args });
return super.emit(event, ...args);
Expand Down
6 changes: 4 additions & 2 deletions src/room/track/Track.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEventEmitter from 'typed-emitter';
import type { SignalClient } from '../../api/SignalClient';
import log from '../../logger';
import { TrackSource, TrackType } from '../../proto/livekit_models_pb';
Expand All @@ -12,7 +13,7 @@ const BACKGROUND_REACTION_DELAY = 5000;
// Safari tracks which audio elements have been "blessed" by the user.
const recycledElements: Array<HTMLAudioElement> = [];

export abstract class Track extends EventEmitter<TrackEventCallbacks> {
export abstract class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEventCallbacks>) {
kind: Track.Kind;

attachedElements: HTMLMediaElement[] = [];
Expand Down Expand Up @@ -51,6 +52,7 @@ export abstract class Track extends EventEmitter<TrackEventCallbacks> {

protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind) {
super();
this.setMaxListeners(100);
this.kind = kind;
this._mediaStreamTrack = mediaTrack;
this._mediaStreamID = mediaTrack.id;
Expand Down
6 changes: 4 additions & 2 deletions src/room/track/TrackPublication.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'events';
import type TypedEventEmitter from 'typed-emitter';
import log from '../../logger';
import { Encryption_Type } from '../../proto/livekit_models_pb';
import type { SubscriptionError, TrackInfo } from '../../proto/livekit_models_pb';
Expand All @@ -11,7 +12,7 @@ import type RemoteTrack from './RemoteTrack';
import RemoteVideoTrack from './RemoteVideoTrack';
import { Track } from './Track';

export class TrackPublication extends EventEmitter<PublicationEventCallbacks> {
export class TrackPublication extends (EventEmitter as new () => TypedEventEmitter<PublicationEventCallbacks>) {
kind: Track.Kind;

trackName: string;
Expand Down Expand Up @@ -40,6 +41,7 @@ export class TrackPublication extends EventEmitter<PublicationEventCallbacks> {

constructor(kind: Track.Kind, id: string, name: string) {
super();
this.setMaxListeners(100);
this.kind = kind;
this.trackSid = id;
this.trackName = name;
Expand Down
23 changes: 16 additions & 7 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3471,12 +3471,7 @@ esutils@^2.0.2, esutils@^2.0.3:
resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==

eventemitter3@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==

events@^3.2.0:
events@^3.2.0, events@^3.3.0:
version "3.3.0"
resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
Expand Down Expand Up @@ -5347,6 +5342,13 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"

rxjs@^7.5.2:
version "7.8.1"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
dependencies:
tslib "^2.1.0"

safe-buffer@^5.1.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
Expand Down Expand Up @@ -5878,7 +5880,7 @@ tslib@^1.8.1:
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==

tslib@^2.4.0:
tslib@^2.1.0, tslib@^2.4.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
Expand Down Expand Up @@ -5944,6 +5946,13 @@ typed-array-length@^1.0.4:
for-each "^0.3.3"
is-typed-array "^1.1.9"

typed-emitter@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz"
integrity sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==
optionalDependencies:
rxjs "^7.5.2"

typedoc-plugin-no-inherit@1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/typedoc-plugin-no-inherit/-/typedoc-plugin-no-inherit-1.4.0.tgz"
Expand Down

0 comments on commit 78325ab

Please sign in to comment.