Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mediasoup-node: Make appData TS typed and writable #1046

Merged
merged 3 commits into from
Mar 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

* `RtpStreamSend`: Reset RTP retransmission buffer upon RTP sequence number reset ([PR #1041](https://github.com/versatica/mediasoup/pull/1041)).
* `RtpRetransmissionBuffer`: Handle corner case in which received packet has lower seq than newest packet in the buffer but higher timestamp ([PR #1044](https://github.com/versatica/mediasoup/pull/1044)).
* Node: Make `appData` TS typed and writable ([PR #1046](https://github.com/versatica/mediasoup/pull/1046), credits to @mango-martin).


### 3.11.19
Expand Down
4 changes: 2 additions & 2 deletions node/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,10 @@ const eslintConfig =
beforeLineComment : false
}
],
'max-len' : [ 2, 90,
'max-len' : [ 2, 100,
{
tabWidth : 2,
comments : 90,
comments : 84,
ignoreUrls : true,
ignoreStrings : true,
ignoreTemplateLiterals : true,
Expand Down
13 changes: 8 additions & 5 deletions node/src/ActiveSpeakerObserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,16 @@ import {
RtpObserverConstructorOptions
} from './RtpObserver';
import { Producer } from './Producer';
import { AppData } from './types';

export type ActiveSpeakerObserverOptions =
export type ActiveSpeakerObserverOptions<ActiveSpeakerObserverAppData extends AppData = AppData> =
{
interval?: number;

/**
* Custom application data.
*/
appData?: Record<string, unknown>;
appData?: ActiveSpeakerObserverAppData;
};

export type ActiveSpeakerObserverDominantSpeaker =
Expand All @@ -36,16 +37,18 @@ export type ActiveSpeakerObserverObserverEvents = RtpObserverObserverEvents &
dominantspeaker: [ActiveSpeakerObserverDominantSpeaker];
};

type RtpObserverObserverConstructorOptions = RtpObserverConstructorOptions;
type RtpObserverObserverConstructorOptions<ActiveSpeakerObserverAppData> =
RtpObserverConstructorOptions<ActiveSpeakerObserverAppData>;

const logger = new Logger('ActiveSpeakerObserver');

export class ActiveSpeakerObserver extends RtpObserver<ActiveSpeakerObserverEvents>
export class ActiveSpeakerObserver<ActiveSpeakerObserverAppData extends AppData = AppData>
extends RtpObserver<ActiveSpeakerObserverEvents, ActiveSpeakerObserverAppData>
{
/**
* @private
*/
constructor(options: RtpObserverObserverConstructorOptions)
constructor(options: RtpObserverObserverConstructorOptions<ActiveSpeakerObserverAppData>)
{
super(options);

Expand Down
13 changes: 8 additions & 5 deletions node/src/AudioLevelObserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ import {
RtpObserverConstructorOptions
} from './RtpObserver';
import { Producer } from './Producer';
import { AppData } from './types';

export type AudioLevelObserverOptions =
export type AudioLevelObserverOptions<AudioLevelObserverAppData extends AppData = AppData> =
{
/**
* Maximum number of entries in the 'volumes”' event. Default 1.
Expand All @@ -29,7 +30,7 @@ export type AudioLevelObserverOptions =
/**
* Custom application data.
*/
appData?: Record<string, unknown>;
appData?: AudioLevelObserverAppData;
};

export type AudioLevelObserverVolume =
Expand Down Expand Up @@ -58,16 +59,18 @@ export type AudioLevelObserverObserverEvents = RtpObserverObserverEvents &
silence: [];
};

type AudioLevelObserverConstructorOptions = RtpObserverConstructorOptions;
type AudioLevelObserverConstructorOptions<AudioLevelObserverAppData> =
RtpObserverConstructorOptions<AudioLevelObserverAppData>;

const logger = new Logger('AudioLevelObserver');

export class AudioLevelObserver extends RtpObserver<AudioLevelObserverEvents>
export class AudioLevelObserver<AudioLevelObserverAppData extends AppData = AppData>
extends RtpObserver<AudioLevelObserverEvents, AudioLevelObserverAppData>
{
/**
* @private
*/
constructor(options: AudioLevelObserverConstructorOptions)
constructor(options: AudioLevelObserverConstructorOptions<AudioLevelObserverAppData>)
{
super(options);

Expand Down
22 changes: 12 additions & 10 deletions node/src/Consumer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ import {
RtpCapabilities,
RtpParameters
} from './RtpParameters';
import { AppData } from './types';

export type ConsumerOptions =
export type ConsumerOptions<ConsumerAppData extends AppData = AppData> =
{
/**
* The id of the Producer to consume.
Expand Down Expand Up @@ -75,7 +76,7 @@ export type ConsumerOptions =
/**
* Custom application data.
*/
appData?: Record<string, unknown>;
appData?: ConsumerAppData;
};

/**
Expand Down Expand Up @@ -211,7 +212,8 @@ type ConsumerData =

const logger = new Logger('Consumer');

export class Consumer extends EnhancedEventEmitter<ConsumerEvents>
export class Consumer<ConsumerAppData extends AppData = AppData>
extends EnhancedEventEmitter<ConsumerEvents>
{
// Internal data.
readonly #internal: ConsumerInternal;
Expand All @@ -229,7 +231,7 @@ export class Consumer extends EnhancedEventEmitter<ConsumerEvents>
#closed = false;

// Custom app data.
readonly #appData: Record<string, unknown>;
#appData: ConsumerAppData;

// Paused flag.
#paused = false;
Expand Down Expand Up @@ -272,7 +274,7 @@ export class Consumer extends EnhancedEventEmitter<ConsumerEvents>
data: ConsumerData;
channel: Channel;
payloadChannel: PayloadChannel;
appData?: Record<string, unknown>;
appData?: ConsumerAppData;
paused: boolean;
producerPaused: boolean;
score?: ConsumerScore;
Expand All @@ -287,7 +289,7 @@ export class Consumer extends EnhancedEventEmitter<ConsumerEvents>
this.#data = data;
this.#channel = channel;
this.#payloadChannel = payloadChannel;
this.#appData = appData || {};
this.#appData = appData || {} as ConsumerAppData;
this.#paused = paused;
this.#producerPaused = producerPaused;
this.#score = score;
Expand Down Expand Up @@ -395,17 +397,17 @@ export class Consumer extends EnhancedEventEmitter<ConsumerEvents>
/**
* App custom data.
*/
get appData(): Record<string, unknown>
get appData(): ConsumerAppData
{
return this.#appData;
}

/**
* Invalid setter.
* App custom data setter.
*/
set appData(appData: Record<string, unknown>) // eslint-disable-line no-unused-vars
set appData(appData: ConsumerAppData)
{
throw new Error('cannot override appData object');
this.#appData = appData;
}

/**
Expand Down
22 changes: 12 additions & 10 deletions node/src/DataConsumer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ import { Channel } from './Channel';
import { PayloadChannel } from './PayloadChannel';
import { TransportInternal } from './Transport';
import { SctpStreamParameters } from './SctpParameters';
import { AppData } from './types';

export type DataConsumerOptions =
export type DataConsumerOptions<DataConsumerAppData extends AppData = AppData> =
{
/**
* The id of the DataProducer to consume.
Expand Down Expand Up @@ -39,7 +40,7 @@ export type DataConsumerOptions =
/**
* Custom application data.
*/
appData?: Record<string, unknown>;
appData?: DataConsumerAppData;
};

export type DataConsumerStat =
Expand Down Expand Up @@ -91,7 +92,8 @@ type DataConsumerData =

const logger = new Logger('DataConsumer');

export class DataConsumer extends EnhancedEventEmitter<DataConsumerEvents>
export class DataConsumer<DataConsumerAppData extends AppData = AppData>
extends EnhancedEventEmitter<DataConsumerEvents>
{
// Internal data.
readonly #internal: DataConsumerInternal;
Expand All @@ -109,7 +111,7 @@ export class DataConsumer extends EnhancedEventEmitter<DataConsumerEvents>
#closed = false;

// Custom app data.
readonly #appData: Record<string, unknown>;
#appData: DataConsumerAppData;

// Observer instance.
readonly #observer = new EnhancedEventEmitter<DataConsumerObserverEvents>();
Expand All @@ -130,7 +132,7 @@ export class DataConsumer extends EnhancedEventEmitter<DataConsumerEvents>
data: DataConsumerData;
channel: Channel;
payloadChannel: PayloadChannel;
appData?: Record<string, unknown>;
appData?: DataConsumerAppData;
}
)
{
Expand All @@ -142,7 +144,7 @@ export class DataConsumer extends EnhancedEventEmitter<DataConsumerEvents>
this.#data = data;
this.#channel = channel;
this.#payloadChannel = payloadChannel;
this.#appData = appData || {};
this.#appData = appData || {} as DataConsumerAppData;

this.handleWorkerNotifications();
}
Expand Down Expand Up @@ -206,17 +208,17 @@ export class DataConsumer extends EnhancedEventEmitter<DataConsumerEvents>
/**
* App custom data.
*/
get appData(): Record<string, unknown>
get appData(): DataConsumerAppData
{
return this.#appData;
}

/**
* Invalid setter.
* App custom data setter.
*/
set appData(appData: Record<string, unknown>) // eslint-disable-line no-unused-vars
set appData(appData: DataConsumerAppData)
{
throw new Error('cannot override appData object');
this.#appData = appData;
}

/**
Expand Down
22 changes: 12 additions & 10 deletions node/src/DataProducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ import { Channel } from './Channel';
import { PayloadChannel } from './PayloadChannel';
import { TransportInternal } from './Transport';
import { SctpStreamParameters } from './SctpParameters';
import { AppData } from './types';

export type DataProducerOptions =
export type DataProducerOptions<DataProducerAppData extends AppData = AppData> =
{
/**
* DataProducer id (just for Router.pipeToRouter() method).
Expand All @@ -31,7 +32,7 @@ export type DataProducerOptions =
/**
* Custom application data.
*/
appData?: Record<string, unknown>;
appData?: DataProducerAppData;
};

export type DataProducerStat =
Expand Down Expand Up @@ -76,7 +77,8 @@ type DataProducerData =

const logger = new Logger('DataProducer');

export class DataProducer extends EnhancedEventEmitter<DataProducerEvents>
export class DataProducer<DataProducerAppData extends AppData = AppData>
extends EnhancedEventEmitter<DataProducerEvents>
{
// Internal data.
readonly #internal: DataProducerInternal;
Expand All @@ -94,7 +96,7 @@ export class DataProducer extends EnhancedEventEmitter<DataProducerEvents>
#closed = false;

// Custom app data.
readonly #appData: Record<string, unknown>;
#appData: DataProducerAppData;

// Observer instance.
readonly #observer = new EnhancedEventEmitter<DataProducerObserverEvents>();
Expand All @@ -115,7 +117,7 @@ export class DataProducer extends EnhancedEventEmitter<DataProducerEvents>
data: DataProducerData;
channel: Channel;
payloadChannel: PayloadChannel;
appData?: Record<string, unknown>;
appData?: DataProducerAppData;
}
)
{
Expand All @@ -127,7 +129,7 @@ export class DataProducer extends EnhancedEventEmitter<DataProducerEvents>
this.#data = data;
this.#channel = channel;
this.#payloadChannel = payloadChannel;
this.#appData = appData || {};
this.#appData = appData || {} as DataProducerAppData;

this.handleWorkerNotifications();
}
Expand Down Expand Up @@ -183,17 +185,17 @@ export class DataProducer extends EnhancedEventEmitter<DataProducerEvents>
/**
* App custom data.
*/
get appData(): Record<string, unknown>
get appData(): DataProducerAppData
{
return this.#appData;
}

/**
* Invalid setter.
* App custom data setter.
*/
set appData(appData: Record<string, unknown>) // eslint-disable-line no-unused-vars
set appData(appData: DataProducerAppData)
{
throw new Error('cannot override appData object');
this.#appData = appData;
}

/**
Expand Down
20 changes: 11 additions & 9 deletions node/src/DirectTransport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import {
TransportConstructorOptions
} from './Transport';
import { SctpParameters } from './SctpParameters';
import { AppData } from './types';

export type DirectTransportOptions =
export type DirectTransportOptions<DirectTransportAppData extends AppData = AppData> =
{
/**
* Maximum allowed size for direct messages sent from DataProducers.
Expand All @@ -20,7 +21,7 @@ export type DirectTransportOptions =
/**
* Custom application data.
*/
appData?: Record<string, unknown>;
appData?: DirectTransportAppData;
};

export type DirectTransportStat =
Expand Down Expand Up @@ -58,10 +59,11 @@ export type DirectTransportObserverEvents = TransportObserverEvents &
rtcp: [Buffer];
};

type DirectTransportConstructorOptions = TransportConstructorOptions &
{
data: DirectTransportData;
};
type DirectTransportConstructorOptions<DirectTransportAppData> =
TransportConstructorOptions<DirectTransportAppData> &
{
data: DirectTransportData;
};

export type DirectTransportData =
{
Expand All @@ -70,16 +72,16 @@ export type DirectTransportData =

const logger = new Logger('DirectTransport');

export class DirectTransport extends
Transport<DirectTransportEvents, DirectTransportObserverEvents>
export class DirectTransport<DirectTransportAppData extends AppData = AppData>
extends Transport<DirectTransportEvents, DirectTransportObserverEvents, DirectTransportAppData>
{
// DirectTransport data.
readonly #data: DirectTransportData;

/**
* @private
*/
constructor(options: DirectTransportConstructorOptions)
constructor(options: DirectTransportConstructorOptions<DirectTransportAppData>)
{
super(options);

Expand Down
Loading