From b51635c6fd4681e67b4980b070815ea67f929439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Baz=20Castillo?= Date: Tue, 28 Jan 2025 15:21:19 +0100 Subject: [PATCH 1/2] Node: Expose `Index` interface ## Details - Fixes #1476 - Expose `types.indexTypes` or via `import { Index as MediasoupIndex } from 'mediasoup/lib/indexTypes'` ([PR #XXXX](https://github.com/versatica/mediasoup/pull/XXXX)). --- CHANGELOG.md | 2 ++ node/src/index.ts | 42 +++++++++++++++++++++++++++--------------- node/src/indexTypes.ts | 32 ++++++++++++++++++++++++++++++++ node/src/types.ts | 11 +---------- 4 files changed, 62 insertions(+), 25 deletions(-) create mode 100644 node/src/indexTypes.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index e549f4b45e..2183e1c727 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### NEXT +- Node: Expose `Index` interface in `types.indexTypes` or via `import { Index as MediasoupIndex } from 'mediasoup/lib/indexTypes'` ([PR #XXXX](https://github.com/versatica/mediasoup/pull/XXXX)). + ### 3.15.2 - `Worker`: Fix crash when using colliding `portRange` values in different transports ([PR #1469](https://github.com/versatica/mediasoup/pull/1469)). diff --git a/node/src/index.ts b/node/src/index.ts index 241c928ab6..031c64c5b0 100644 --- a/node/src/index.ts +++ b/node/src/index.ts @@ -1,16 +1,23 @@ import { Logger, LoggerEmitter } from './Logger'; import { EnhancedEventEmitter } from './enhancedEvents'; +import type { + Observer, + ObserverEvents, + LogEventListeners, + Index, +} from './indexTypes'; import type { Worker, WorkerSettings } from './WorkerTypes'; import { WorkerImpl, workerBin } from './Worker'; import { supportedRtpCapabilities } from './supportedRtpCapabilities'; import type { RtpCapabilities } from './rtpParametersTypes'; -import type * as types from './types'; +import { parseScalabilityMode } from './scalabilityModesUtils'; +import type { AppData } from './types'; import * as utils from './utils'; /** * Expose all types. */ -export { types }; +export type * as types from './types'; /** * Expose mediasoup version. @@ -18,12 +25,6 @@ export { types }; // eslint-disable-next-line @typescript-eslint/no-require-imports export const version: string = require('../../package.json').version; -export type Observer = EnhancedEventEmitter; - -export type ObserverEvents = { - newworker: [Worker]; -}; - const observer: Observer = new EnhancedEventEmitter(); /** @@ -59,9 +60,7 @@ const logger = new Logger(); * }); * ``` */ -export function setLogEventListeners( - listeners?: types.LogEventListeners -): void { +export function setLogEventListeners(listeners?: LogEventListeners): void { logger.debug('setLogEventListeners()'); let debugLogEmitter: LoggerEmitter | undefined; @@ -92,9 +91,7 @@ export function setLogEventListeners( /** * Create a Worker. */ -export async function createWorker< - WorkerAppData extends types.AppData = types.AppData, ->({ +export async function createWorker({ logLevel = 'error', logTags, rtcMinPort = 10000, @@ -145,9 +142,24 @@ export function getSupportedRtpCapabilities(): RtpCapabilities { /** * Expose parseScalabilityMode() function. */ -export { parseScalabilityMode } from './scalabilityModesUtils'; +export { parseScalabilityMode }; /** * Expose extras module. */ export * as extras from './extras'; + +// NOTE: This constant of type Index is created just to check at TypeScript +// level that everything exported here (all but TS types) matches the Index +// interface exposed by indexTypes.ts. +// +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const indexImpl: Index = { + version, + observer, + workerBin, + setLogEventListeners, + createWorker, + getSupportedRtpCapabilities, + parseScalabilityMode, +}; diff --git a/node/src/indexTypes.ts b/node/src/indexTypes.ts new file mode 100644 index 0000000000..0226487691 --- /dev/null +++ b/node/src/indexTypes.ts @@ -0,0 +1,32 @@ +import type { EnhancedEventEmitter } from './enhancedEvents'; +import type { Worker, WorkerSettings } from './WorkerTypes'; +import type { RtpCapabilities } from './rtpParametersTypes'; +import type { parseScalabilityMode } from './scalabilityModesUtils'; +import type { AppData } from './types'; + +export type ObserverEvents = { + newworker: [Worker]; +}; + +export type Observer = EnhancedEventEmitter; + +/** + * Event listeners for mediasoup generated logs. + */ +export type LogEventListeners = { + ondebug?: (namespace: string, log: string) => void; + onwarn?: (namespace: string, log: string) => void; + onerror?: (namespace: string, log: string, error?: Error) => void; +}; + +export interface Index { + version: string; + observer: EnhancedEventEmitter; + workerBin: string; + setLogEventListeners: (listeners?: LogEventListeners) => void; + createWorker: ( + options?: WorkerSettings + ) => Promise>; + getSupportedRtpCapabilities: () => RtpCapabilities; + parseScalabilityMode: typeof parseScalabilityMode; +} diff --git a/node/src/types.ts b/node/src/types.ts index 50575eaea6..0e5706fb81 100644 --- a/node/src/types.ts +++ b/node/src/types.ts @@ -1,4 +1,4 @@ -export type { Observer, ObserverEvents } from './index'; +export type * from './indexTypes'; export type * from './WorkerTypes'; export type * from './WebRtcServerTypes'; export type * from './RouterTypes'; @@ -32,12 +32,3 @@ export type Either = Only | Only; export type AppData = { [key: string]: unknown; }; - -/** - * Event listeners for mediasoup generated logs. - */ -export type LogEventListeners = { - ondebug?: (namespace: string, log: string) => void; - onwarn?: (namespace: string, log: string) => void; - onerror?: (namespace: string, log: string, error?: Error) => void; -}; From 6fd3097f56605258529721df310a95be7acd5f72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Baz=20Castillo?= Date: Tue, 28 Jan 2025 15:21:46 +0100 Subject: [PATCH 2/2] CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2183e1c727..1478b97878 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### NEXT -- Node: Expose `Index` interface in `types.indexTypes` or via `import { Index as MediasoupIndex } from 'mediasoup/lib/indexTypes'` ([PR #XXXX](https://github.com/versatica/mediasoup/pull/XXXX)). +- Node: Expose `Index` interface in `types.indexTypes` or via `import { Index as MediasoupIndex } from 'mediasoup/lib/indexTypes'` ([PR #1485](https://github.com/versatica/mediasoup/pull/1485)). ### 3.15.2